Files
shanxia2.0/代码助手.md
T

126 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 代码助手(zkxw)— 五步工作流 × Superpowers × OpenSpec
在 Cursor / Agent 对话中 **`@代码助手.md`**(建议同时 **`@AGENTS.md`**),必要时再 **`@`** 本次 **`openspec/changes/<变更名>/`** 下的 `proposal.md`、`tasks.md` 等,使助手按本文节奏执行。
**指令优先级**:你在对话中的明确要求 > `AGENTS.md` / `.cursorrules` > **本文件** > Superpowers 技能 > 默认行为。技能与项目 SHALL 冲突时,以项目文档与 OpenSpec spec 为准。若你写明「跳过某步 / 不建 OpenSpec」,仅对**当句及你明确指明的范围**生效。
---
## 当本文件已在上下文中时:会话契约(拉近「自动流程」)
下列约定在**本文件已被读取**(例如用户 **`@代码助手.md`**)且用户请求涉及**实现、开发、新增、改造、修复、做功能**时,助手 **MUST** 遵守;除非用户在同一条消息里**明确**覆盖(例如「只改拼写、不要 OpenSpec」「允许直接改代码」)。
### 对「帮我实现 XXX」类请求的默认认定
- 默认按 **完整五步 + OpenSpec 变更(若无则先创建)** 处理;不把「实现」理解为「立刻堆代码」。
- **首轮不得**批量修改业务代码、新建多文件路由/API,除非用户已声明「极小改动」且满足下文「压缩流程」条件。
### 首轮回复 MUST 依次交代(建议用小标题列出,便于你扫读)
1. **当前阶段**:写明处于五步中第几步(通常从第一步或第二步开始)。
2. **目标复述**:一句话重述要做的 XXX。
3. **待确认问题**:逐条列出仍不清晰处;没有则写「无,可继续」。
4. **OpenSpec**:若已有变更,写出目录 **`openspec/changes/<kebab-name>/`**;若无,**建议 `kebab-case` 变更名** 并说明将执行 `openspec new change` 或按 `.cursor/skills/openspec-propose/SKILL.md` 补齐制品。
5. **下一步**:唯一、可执行的具体动作(例如先问清验收,或跑 `openspec status` / `openspec instructions apply`)。
### 硬性门禁(助手 MUST NOT)
| 在未满足条件前 | 禁止 |
|----------------|------|
| 需求边界、验收方式仍含混且用户未确认 | 大篇幅编写 `tasks.md`、直接改 API/库表/核心业务 |
| 本次走 OpenSpec,但尚未读完 **`openspec instructions apply --change "<名>" --json`** 返回的 **全部 `contextFiles`** | 开始本次变更的**主要实现编码**(除为跑通 CLI 的微小编排外) |
| 当前 `tasks.md` 条目未约定本条的可验证方式(见第四步:测试或等价检查) | 为该条编写「为通过验收服务」的生产代码 |
| 未运行 **`AGENTS.md`** 中与本次改动相关的验证命令 | 下「已完成」「没问题」「全部搞定」等**完成断言** |
### 每一批改动提交前:自检三问(心中执行,复杂时写入回复)
1. 上一小步的 **lint / test / build**(以 `AGENTS.md` 为准)是否已通过?
2. 是否只推进 **`tasks.md` 中一项或一小块**?
3. 行为是否与 **`spec.md` 的 `#### Scenario`**(若有)一致?
### 压缩流程(仅当用户明确声明时)
用户写清「单文件小改、不动接口与权限 / 仅文案或格式」等,可 **不新建 OpenSpec 变更**,但仍须:**说明影响面 + 运行相关验证命令 + 不满足上表最后一行门禁**。
---
## 总览:五步与 OpenSpec、Superpowers 的对应关系
| 步骤 | 你要达到的状态 | OpenSpec(制品 / 动作) | Superpowers(建议 @ 的技能) |
|------|----------------|------------------------|------------------------------|
| 一 | 需求清晰,不清楚就问清 | `proposal.md` 定边界;必要时新建变更 `openspec new change "<kebab-name>"` | `.agents/skills/brainstorming/SKILL.md` |
| 二 | 懂框架、规范、参考案例 | 读 `openspec/config.yaml` 的 context;apply 前读 **`openspec instructions apply --change "<名>" --json`** 返回的 **全部 `contextFiles`**(含 `proposal`、`specs/**/spec.md`、`design`、`tasks`) | `.agents/skills/using-superpowers/SKILL.md`(何时加载其他技能) |
| 三 | 分步实现思路 | `design.md` + **`tasks.md` 拆条**;依赖用 `openspec status --change "<名>" --json` 看顺序 | `.agents/skills/writing-plans/SKILL.md` |
| 四 | 测试驱动开发 | 每条 task 落地时:**先测后码**;行为写在 spec 的 Scenario 里,测试与之对齐 | `.agents/skills/test-driven-development/SKILL.md` |
| 五 | 开发—验证循环直到完成 | 按 `tasks.md` 逐项勾选;每步跑约定验证;全完后 **`openspec-archive-change`** / 归档流程 | `.agents/skills/verification-before-completion/SKILL.md` |
**OpenSpec 技能入口(本仓库)**:`.cursor/skills/openspec-propose/SKILL.md`(立项与生成制品)、`.cursor/skills/openspec-apply-change/SKILL.md`(按 tasks 实现)、`.cursor/skills/openspec-explore/SKILL.md`、`.cursor/skills/openspec-archive-change/SKILL.md`;命令说明见 `.cursor/commands/opsx-*.md`。
---
## 第一步:必须清楚「要干啥」— 不清晰就反馈、对齐后再写代码
- **产出**:口头/文档无歧义;对应 OpenSpec 里 **`proposal.md`**(做什么、不做什么、Capabilities 与后续 `specs/<能力>/spec.md` 一一对应)。
- **权威交叉**:`docs/中科兴皖需求V0.3.md`;Web / 小程序 UI 分别以 `docs/web-admin-ui-spec-fresh-mint.md`、`docs/miniprogram-ui-spec-sanqiang.md` 为准。
- **Superpowers**:需求或方案未定型时,先 **@`.agents/skills/brainstorming/SKILL.md`**,再进入写 proposal / 拆 spec。
- **禁止**:在需求含混时直接大改 `tasks.md` 或批量改业务代码。
---
## 第二步:掌握项目框架、规范与参考案例
- **工程与 monorepo**:以 **`AGENTS.md`** 为准(后端 `backend/`、管理端 `web-admin/`、小程序 `miniprogram/` 等)。
- **SHALL 级规范**:`.cursor/rules/openspec-zkxw-standards.mdc`;活跃变更下 **`openspec/changes/*/specs/*/spec.md`**;若已归档则 **`openspec/specs/`** 为基线,与 `changes/` 并存时 **以 `openspec/specs/` 为准**。
- **进入实现前**:执行 **`openspec instructions apply --change "<变更名>" --json`**,阅读返回的 **全部 `contextFiles`**,不得跳过。
- **Web 管理端界面模板**(新页面对照,勿另起一套):`web-admin/src/views/system/unit|order|product|category|user/index.vue` 等(路由与菜单见 `AGENTS.md` / `.cursorrules`)。
- **树路径等业务约定**:`web-admin/src/utils/tree-path.ts`;弹窗与列表细节:`.cursor/rules/web-admin-crud-dialog.mdc`。
---
## 第三步:整理实现思路 — 坚持分步实施
- **产出**:**`design.md`**(如何做)+ **`tasks.md`**(可执行、可勾选、粒度适合单 PR 或单会话块)。
- **顺序**:用 **`openspec status --change "<变更名>" --json`** 看制品依赖与 `applyRequires`,缺什么先补什么,再进入大量编码。
- **Superpowers**:多步骤任务在写 `tasks.md` 前可 **@`.agents/skills/writing-plans/SKILL.md`**,保证「一步一事」、依赖清晰。
- **原则**:实现只推进 **`tasks.md` 当前项**;避免无关重构与范围蔓延。
---
## 第四步:测试驱动开发(TDD)
- **Superpowers**:实现或修 Bug 写生产代码前 **@`.agents/skills/test-driven-development/SKILL.md`**,遵循 Red → Green → Refactor;先看到**有意义的失败**再写最少通过代码。
- **与 OpenSpec 对齐**:**`spec.md` 中 `#### Scenario`** 描述可验收行为;自动化测试(或本项目约定的可重复检查)应能指向这些场景。若某层(如纯 UI)难以单测,在 `tasks.md` 或对话中**显式约定**可替代的验证方式(例如 E2E、手工 checklist),并与用户确认——**不得默认定「不写测」**。
---
## 第五步:开发与验证循环,直到目标完成
- **开发**:严格按 **`tasks.md`** 逐项完成;需要并行子任务时可参考 **@`.agents/skills/dispatching-parallel-agents/SKILL.md`** 或 **@`.agents/skills/subagent-driven-development/SKILL.md`**(与当前环境是否支持子代理一致)。
- **验证**:每步完成后跑项目约定命令(见 **`AGENTS.md`**,如 `web-admin` 的 `pnpm lint`、`pnpm build:typecheck`,后端 `pytest` 等)。声称完成前 **@`.agents/skills/verification-before-completion/SKILL.md`**,**有命令输出再下结论**。
- **收尾**:变更完成后走 OpenSpec **归档**(**@`.cursor/skills/openspec-archive-change/SKILL.md`** 或仓库文档中的 archive 流程),使基线与 `openspec/specs/` 同步。
---
## 对话里可复制的「开任务」示例
**精简(你已习惯流程时):**
> @代码助手.md @AGENTS.md
> OpenSpec 变更:`<kebab-change-name>`。请按五步:先对齐 proposal/spec 中未决点;再读 apply 的 contextFiles;按 tasks 分步执行;每步 TDD;每步验证;最后对照 spec 与需求文档自检。
**严格(更接近自动流程,只 @ 代码助手时推荐附带):**
> @代码助手.md @AGENTS.md
> 帮我实现:XXX(验收:……;端:web-admin / 后端 / 小程序;是否新建 OpenSpec 变更:是/否;若否请说明原因)。
> 你必须遵守根目录 `代码助手.md` 中的**会话契约**:首轮只对齐阶段与缺口,不得直接大改代码;有变更名则 `openspec instructions apply --change "<名>" --json` 并读完所有 contextFiles 后再实现;每 task 先 TDD 或等价验收约定;每步跑 `AGENTS.md` 中的验证命令后再断言完成。
**说明**:Cursor **不会**在后台替你执行命令;「自动」指模型**必须**按上文契约与五步组织行为。你仍可用 **`/opsx-propose`**、**`/opsx-apply`** 等命令(见 `.cursor/commands/opsx-*.md`)减少口述步骤。
---
## 维护说明
- 变更 OpenSpec 目录结构或 CLI 子命令时,同步更新本文「OpenSpec」小节与 `openspec/config.yaml` 中的 **context** 摘要。
- Superpowers 技能路径以仓库 **`.agents/skills/`** 为准;若本机安装位置不同,在对话中用实际可 `@` 的路径替换即可。
- **边界**:本文提高模型**遵守流程的概率**,不是 IDE 插件或 CI 强制门禁;若要更强约束,可把「会话契约」摘要写入 **`.cursor/rules/*.mdc`(alwaysApply)** 或使用 **`.cursor/commands/`** 固定组合 `@` 与口令。