agent-project-sdlc 0.1.23 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -83,11 +83,13 @@ Release docs are current-state facts, not a version ledger. New release work sho
83
83
 
84
84
  The generic rule is that any workflow promoting a draft task into a formal `TASK-*` in `plan.yaml` must remove the source draft from its draft queue in the same state update. The formal task is then recovered only from `plan.yaml`; completed history lives in implementation docs, git, PR and CI records. The built-in Harness draft queue is currently `plan.draft.yaml.tasks[]`, which means unadopted development drafts only. `/devloop` treats the development queue as exhausted only when both `plan.yaml.tasks[]` and `plan.draft.yaml.tasks[]` have no executable task.
85
85
 
86
- Phase routing is expressed as a lightweight explicit directed graph in `<harnessRoot>/pjsdlc_managed/policies/phase_contracts.yaml`: `phases` stores stable phase contracts, while `transitions` stores legal edges and small runtime effects such as setting or clearing `suspended_phase`. This makes normal advance, pre-development return, RFC interrupt/resume and BLOCKED resume rules consumable by both the transition helper and validators. It is intentionally not a heavy graph engine: no history graph, traversal framework, node/edge classes or visualizer are introduced; the goal is to reduce missed rules and drift.
86
+ Phase routing is expressed as a lightweight explicit directed graph in `<harnessRoot>/pjsdlc_managed/policies/phase_contracts.yaml`: `phases` stores stable phase contracts, while `transitions` stores legal edges and small runtime effects such as setting or clearing `suspended_phase`. This makes normal advance, pre-development return, TESTING bugfix return, RFC interrupt/resume and BLOCKED resume rules consumable by both the transition helper and validators. It is intentionally not a heavy graph engine: no history graph, traversal framework, node/edge classes or visualizer are introduced; the goal is to reduce missed rules and drift.
87
87
 
88
- Migration cost is low for projects that use managed assets: run `npx sdlc-harness upgrade` to sync the new `phase_contracts.yaml` and `tools/transition.py`, or run `npx sdlc-harness sync` if only managed files need refreshing. `lifecycle.yaml` and `plan.yaml` do not need manual migration; old `allowed_next_phases` values are regenerated from the graph on the next transition. Projects with custom phase policies should convert node-local `next` / `returns` to top-level `transitions`. If the new `validate-harness` reports missing `transitions`, run `upgrade` or `sync` before validating again.
88
+ Migration cost is low for projects that use managed assets: run `npx sdlc-harness upgrade` to sync the new `phase_contracts.yaml` and `tools/transition.py`, or run `npx sdlc-harness sync` if only managed files need refreshing. `lifecycle.yaml` and `plan.yaml` do not need manual migration; old `allowed_next_phases` values are regenerated from the graph on the next transition. Projects with custom phase policies should convert node-local `next` / `returns` to top-level `transitions`, and add the `TESTING -> ARCHITECTING` / `TESTING -> SPRINTING` bugfix return edges when they want the new routing. If the new `validate-harness` reports missing `transitions`, run `upgrade` or `sync` before validating again.
89
89
 
90
- Before development starts, `ARCHITECTING` can return to `REQUIREMENT_GATHERING` for PRD edits. The manager uses `python3 tools/transition.py --to REQUIREMENT_GATHERING`, the PM workflow updates the PRD through one `TASK-*`, then `validate-pm` and `python3 tools/transition.py --to ARCHITECTING` return the project to design. Requirement or design changes after `SPRINTING` use RFC recalibration; `SPRINTING`, `REVIEWING`, `TESTING` and `RELEASING` can enter the controlled interrupt with `python3 tools/transition.py --to RFC_RECALIBRATION`, then return to `SPRINTING` after `validate-rfc`.
90
+ Before development starts, `ARCHITECTING` can return to `REQUIREMENT_GATHERING` for PRD edits. The manager uses `python3 tools/transition.py --to REQUIREMENT_GATHERING`, the PM workflow updates the PRD through one `TASK-*`, then `validate-pm` and `python3 tools/transition.py --to ARCHITECTING` return the project to design. Requirement, acceptance or product-boundary changes after `SPRINTING` use RFC recalibration; `SPRINTING`, `REVIEWING`, `TESTING` and `RELEASING` can enter the controlled interrupt with `python3 tools/transition.py --to RFC_RECALIBRATION`, then return to `SPRINTING` after `validate-rfc`.
91
+
92
+ When TESTING finds a bug, first record `Bugfix Route` in `.docs/07_test/TEST_REPORT.md`, then let the manager choose the lightweight return. `bugfix_replan` uses `python3 tools/transition.py --to ARCHITECTING` when the technical plan, interface contract, task breakdown, Development Self-Test Contract or Module Key Test Graph must change. `bugfix_implementation_gap` uses `python3 tools/transition.py --to SPRINTING` only when the technical plan is still correct and implementation deviated from it. Requirement, acceptance or product-boundary changes still use RFC recalibration.
91
93
 
92
94
  `validate-design` treats semantic slicing as a hard gate. Generated `overview.md` files do not count as deliverables, development draft tasks in `plan.draft.yaml` must reference existing tech plan slices through `docs.tech_plan`, multiple development draft tasks need distinct primary tech plan slices, and explicit AI provider/copilot, external-system, or compliance/permission/audit themes require dedicated architecture slices. Draft tasks with runnable boundaries must also include `self_test_contract`, backed by a `Development Self-Test Contract` section in the tech plan; the contract must include `module_key_test_path` from local start or invocation to all self-test scenarios completion, covering every runnable entry promised by the current task/module and its internal key paths. Complex or high-risk paths may set `graph_required: true` and provide `module_key_test_graph` to express entries, checkpoints, scenarios, exits and evidence refs as a lightweight DAG.
93
95
 
@@ -144,7 +144,7 @@ Strong success criteria 可以让你 independent loop。Weak criteria,例如
144
144
  6. 不要在当前 open task 的 `required_gates` 通过前把任务标记为 `done`。
145
145
  7. 代码 gate 通过后,更新相关 implementation doc 和 `.docs/INDEX.md`。
146
146
  8. `reviewer` 角色只读,不直接修改源码。
147
- 9. 进入 `SPRINTING` 后的需求变更必须进入 RFC 工作流;`ARCHITECTING` 阶段发现 PRD 需要修改时,可以先回到 `REQUIREMENT_GATHERING`。
147
+ 9. 进入 `SPRINTING` 后的需求变更必须进入 RFC 工作流;`ARCHITECTING` 阶段发现 PRD 需要修改时,可以先回到 `REQUIREMENT_GATHERING`;`TESTING` 阶段发现 bug 时,先在 `TEST_REPORT.md` 判定 `Bugfix Route`,再轻量回到 `ARCHITECTING` 或 `SPRINTING`。
148
148
  10. task/release 历史动作记录使用 git commit、tag 或外部 release 系统,不维护 `<harnessRoot>/archive/` 常规归档。
149
149
  11. 在 `SPRINTING` 阶段,task 完成闭环必须先创建 task implementation commit,再提交移除该 task 后的 task completion ledger commit;如果没有 remote/upstream、权限或凭证导致无法 push,不要开始下一个 task,先报告 blocker。
150
150
  12. 文档 slice 发生变化后,运行 `make docs-overview` 刷新对应 `overview.md`。
@@ -168,6 +168,7 @@ Strong success criteria 可以让你 independent loop。Weak criteria,例如
168
168
  - “开始开发 / 做当前任务 / 做下一个任务” → 等价 `/dev`。
169
169
  - “开始循环:写任务,执行任务 / 把开发循环跑完” → 等价 `/devloop`。
170
170
  - “跑测试 / 验证一下” → 运行当前 task 或阶段对应 gate。
171
+ - “测试发现 bug / 回去修 / 修测试问题” → 如果当前是 `TESTING`,先读取 `TEST_REPORT.md#Bugfix Route`;`bugfix_replan` 回 `ARCHITECTING` 修改技术方案后再开发,`bugfix_implementation_gap` 回 `SPRINTING` 补实现任务,需求或验收变化走 RFC。
171
172
  - 每个阶段任务开始时,默认先做 parallel eligibility check;适合安全拆分时,主 Agent 创建或使用 `parallel_execution.trigger: "workflow_default"` 并调度 Codex native subagents。用户说“并行 / 多 agent / 多 worktree / parallel” → 使用 `trigger: "user_requested"` 强化该意图。
172
173
  - “准备 review / 帮我 review” → 进入只读 Review workflow。
173
174
  - “刷新文档总览 / 同步 overview” → 等价 `/overview`。
@@ -200,3 +201,8 @@ python3 tools/transition.py --to <PHASE>
200
201
 
201
202
  流转前先运行阶段 gate,通常使用 `make validate-current`,或使用
202
203
  `.codex/pjsdlc_managed/policies/phase_contracts.yaml` 中列出的具体 `make validate-*` 目标。
204
+
205
+ `TESTING` 中发现 bug 时不要直接重试或改 runtime。先让测试报告记录 `Bugfix Route`:`bugfix_replan`
206
+ 表示回 `ARCHITECTING` 修 tech plan / task breakdown / handoff graph;`bugfix_implementation_gap`
207
+ 表示技术方案仍正确、只回 `SPRINTING` 补实现偏差;需求、验收标准或产品边界变化仍走
208
+ `RFC_RECALIBRATION`。
@@ -102,11 +102,13 @@ Agent 会读取 `<harnessRoot>/state/lifecycle.yaml` 和 `<harnessRoot>/state/pl
102
102
 
103
103
  技术方案阶段需要产出 `plan.draft.yaml`,是为了解决跨阶段交接和当前执行队列纯净性的冲突。`ARCHITECTING` 必须在进入开发前证明方案可以拆成具体、可验证的开发单元,包括修改范围、gate、implementation doc 和执行顺序;但这些未来开发 task 如果直接进入 `plan.yaml`,会和当前架构阶段 task 混在一起,让阶段 gate 无法区分“架构任务未完成”和“下一阶段任务已预拆”。因此开发任务先作为 draft 暂存,进入 `SPRINTING` 后再逐个 promote 成正式 `TASK-*`。其它阶段默认根据上一阶段已经稳定的事实源即时创建当前阶段 task,只有当某个阶段也需要提前为后续阶段生成具体执行任务时,才应引入同类 draft queue。
104
104
 
105
- 阶段关系由 `<harnessRoot>/pjsdlc_managed/policies/phase_contracts.yaml` 中的轻量显式有向图表达:`phases` 保存稳定阶段 contract,`transitions` 保存合法流转边和少量效果,例如设置或清理 `suspended_phase`。这样做是为了让正常推进、开发前返回、RFC interrupt/resume 和 BLOCKED resume 都被 transition helper 与 validator 读取,避免规则埋在长文档或工具硬编码里。它不是重型图引擎,不保存历史、不做复杂遍历、不引入 node/edge class 或可视化;目标只是降低遗漏和漂移。
105
+ 阶段关系由 `<harnessRoot>/pjsdlc_managed/policies/phase_contracts.yaml` 中的轻量显式有向图表达:`phases` 保存稳定阶段 contract,`transitions` 保存合法流转边和少量效果,例如设置或清理 `suspended_phase`。这样做是为了让正常推进、开发前返回、TESTING bugfix return、RFC interrupt/resume 和 BLOCKED resume 都被 transition helper 与 validator 读取,避免规则埋在长文档或工具硬编码里。它不是重型图引擎,不保存历史、不做复杂遍历、不引入 node/edge class 或可视化;目标只是降低遗漏和漂移。
106
106
 
107
- 迁移成本较低:对使用 managed assets 的项目,运行 `npx sdlc-harness upgrade` 即可同步新的 `phase_contracts.yaml` 和 `tools/transition.py`;也可以运行 `npx sdlc-harness sync` 只刷新 managed 文件。`lifecycle.yaml` 和 `plan.yaml` 不需要手动迁移,旧的 `allowed_next_phases` 会在下一次 `transition.py` 执行后按图重新生成。只有维护了自定义 phase policy 的项目需要把阶段内的 `next` / `returns` 转成 top-level `transitions`;如果升级前直接运行新版 `validate-harness` 看到缺少 `transitions`,先执行 `upgrade` / `sync`。
107
+ 迁移成本较低:对使用 managed assets 的项目,运行 `npx sdlc-harness upgrade` 即可同步新的 `phase_contracts.yaml` 和 `tools/transition.py`;也可以运行 `npx sdlc-harness sync` 只刷新 managed 文件。`lifecycle.yaml` 和 `plan.yaml` 不需要手动迁移,旧的 `allowed_next_phases` 会在下一次 `transition.py` 执行后按图重新生成。只有维护了自定义 phase policy 的项目需要把阶段内的 `next` / `returns` 转成 top-level `transitions`,并按需加入 `TESTING -> ARCHITECTING` / `TESTING -> SPRINTING` bugfix return edges;如果升级前直接运行新版 `validate-harness` 看到缺少 `transitions`,先执行 `upgrade` / `sync`。
108
108
 
109
- 在尚未进入开发前,`ARCHITECTING` 可以回到 `REQUIREMENT_GATHERING` 修改 PRD:Manager 使用 `python3 tools/transition.py --to REQUIREMENT_GATHERING` 切回 PM/PRD 工作流,完成 PRD task 和 `validate-pm` 后,再用 `python3 tools/transition.py --to ARCHITECTING` 回到设计阶段。进入 `SPRINTING` 后的需求或设计变化走 RFC workflow;`SPRINTING`、`REVIEWING`、`TESTING` 和 `RELEASING` 都可以通过 `python3 tools/transition.py --to RFC_RECALIBRATION` 进入受控 RFC 中断,RFC 完成后回到 `SPRINTING` 重新完成开发自测和 handoff。
109
+ 在尚未进入开发前,`ARCHITECTING` 可以回到 `REQUIREMENT_GATHERING` 修改 PRD:Manager 使用 `python3 tools/transition.py --to REQUIREMENT_GATHERING` 切回 PM/PRD 工作流,完成 PRD task 和 `validate-pm` 后,再用 `python3 tools/transition.py --to ARCHITECTING` 回到设计阶段。进入 `SPRINTING` 后的需求、验收标准或产品边界变化走 RFC workflow;`SPRINTING`、`REVIEWING`、`TESTING` 和 `RELEASING` 都可以通过 `python3 tools/transition.py --to RFC_RECALIBRATION` 进入受控 RFC 中断,RFC 完成后回到 `SPRINTING` 重新完成开发自测和 handoff。
110
+
111
+ TESTING 阶段发现 bug 时,先在 `.docs/07_test/TEST_REPORT.md` 记录 `Bugfix Route`,再由 Manager 选择轻量 return:`bugfix_replan` 走 `python3 tools/transition.py --to ARCHITECTING`,用于技术方案、接口契约、任务拆分、Development Self-Test Contract 或 Module Key Test Graph 需要改;`bugfix_implementation_gap` 走 `python3 tools/transition.py --to SPRINTING`,只用于技术方案正确但实现偏离的修复。后者是保留口子,不是预期常态;需求、验收标准或产品边界变化仍走 RFC。
110
112
 
111
113
  `validate-design` 会把架构阶段的语义切片作为硬 gate:`overview.md` 不计入 deliverables,`plan.draft.yaml` 中每个开发 draft task 必须通过 `docs.tech_plan` 指向存在的 tech plan slice;多个开发 draft task 默认需要不同 primary tech plan slice。PRD、tech plan 或 draft task 明确出现 AI provider / copilot、外部系统边界、合规 / 权限 / 审计等横切主题时,也需要对应的专门 architecture slice。可运行边界类 draft task 还必须带 `self_test_contract`,并在 tech plan 中有 `Development Self-Test Contract`;合同必须记录 `module_key_test_path`,说明从本地启动或调用入口开始,到完成全部自测 scenario 的模块关键测试路径,并覆盖本 task / 本模块承诺的所有可运行入口和内部关键路径。复杂或 high-risk 路径可设置 `graph_required: true` 并提供 `module_key_test_graph`,把入口、checkpoint、scenario、出口和 evidence refs 表达成轻量 DAG。
112
114
 
@@ -171,6 +171,14 @@ transitions:
171
171
  to: "RELEASING"
172
172
  trigger: "advance"
173
173
  kind: "normal"
174
+ - from: "TESTING"
175
+ to: "ARCHITECTING"
176
+ trigger: "bugfix_replan"
177
+ kind: "return"
178
+ - from: "TESTING"
179
+ to: "SPRINTING"
180
+ trigger: "bugfix_implementation_gap"
181
+ kind: "return"
174
182
  - from: "RELEASING"
175
183
  to: "COMPLETED"
176
184
  trigger: "advance"
@@ -23,6 +23,8 @@ ADR 用来解决“后来的人只看到结果,看不到当年取舍”的问
23
23
 
24
24
  如果在 `ARCHITECTING` 中发现 PRD 缺失、验收标准不清或产品边界需要调整,且项目尚未进入 `SPRINTING`,不要用架构文档替代产品事实。先收尾或移除当前 open design task,再请 Manager 使用 `python3 tools/transition.py --to REQUIREMENT_GATHERING` 回到 PM/PRD 工作流修改 `.docs/01_product/**`。进入 `SPRINTING` 后的需求变化走 RFC workflow。
25
25
 
26
+ 如果是从 `TESTING` 通过 `bugfix_replan` 回到 `ARCHITECTING`,默认只修正测试报告证明有问题的 tech plan、interface contract、task breakdown、Development Self-Test Contract 或 Module Key Test Graph,并引用 `.docs/07_test/TEST_REPORT.md` 中的失败 scenario。不要把这条路径扩成全量重设计;如果 bugfix 需要修改 PRD、acceptance criteria 或产品边界,转入 `RFC_RECALIBRATION`。
27
+
26
28
  架构阶段默认先评估是否适合并行调研或方案拆解。适合时,主 Agent 使用 `parallel_execution.trigger: "workflow_default"` 和 `runtime.provider: "codex_native_subagents"` 调度 worker 分别做架构草稿、接口分析、风险清单或方案对比;用户明确要求并行时使用 `trigger: "user_requested"`。worker 不直接写最终 architecture、tech plan、ADR 或 `plan.draft.yaml`,最终事实源和任务草案由主 Agent 合成;不适合拆分时保持串行并记录原因。
27
29
 
28
30
  ## 输入
@@ -84,6 +86,7 @@ ADR 用来解决“后来的人只看到结果,看不到当年取舍”的问
84
86
  5. 风险或不清晰的问题按 `<harnessRoot>/pjsdlc_managed/policies/risk_matrix.yaml` 标记。
85
87
  6. 任务边界应足够小,能在一次设计执行内闭环;`result_docs` 应指向将被更新或新增的 architecture、tech plan、ADR 或 `plan.draft.yaml` 文件。
86
88
  7. `make validate-design` 是阶段出口 gate;如果还有 open `TASK-*` design task,不要请求进入 `SPRINTING`。
89
+ 8. 从 TESTING bugfix 回流的设计任务必须引用 `TEST_REPORT.md` 的 `Bugfix Route: bugfix_replan` 和失败 scenario,只补受影响的 tech plan / draft task,不修改产品事实。
87
90
 
88
91
  ## 完成检查
89
92
 
@@ -96,6 +99,7 @@ ADR 用来解决“后来的人只看到结果,看不到当年取舍”的问
96
99
  - [ ] 如果用户要求把完整技术方案切成 tech plan slices,已删除被替代的完整 tech plan file,并同步 `plan.draft.yaml` 引用。
97
100
  - [ ] task draft 字段完整且范围清晰;runtime/app/provider/live 类 task 已声明 `evidence_level`、`target_runtime_environment` 和 `self_test_contract`。
98
101
  - [ ] 复杂或 high-risk 自测路径已判断是否需要 `graph_required: true`;需要时已在 tech plan 和 draft task 中生成 `module_key_test_graph` skeleton。
102
+ - [ ] 如果来自 TESTING bugfix 回流,已只修正 `bugfix_replan` 指向的技术方案或任务边界,并保留 `TEST_REPORT.md` 失败 scenario 引用。
99
103
  - [ ] `.docs/INDEX.md` 已链接新增产物。
100
104
  - [ ] 已运行 `make docs-overview` 刷新 `.docs/<stage>/overview.md`。
101
105
  - [ ] `make validate-design` 准备通过。
@@ -27,6 +27,8 @@ description: Use during SPRINTING to execute one task from plan.yaml, respecting
27
27
 
28
28
  `/dev` 和 `/devloop` 是开发阶段的两个入口。`/dev` 创建或选择下一个最小 `TASK-*` development task,设置 `phase: "SPRINTING"`,并只完成一个 task 闭环后停止。通用规则是从任何 draft queue promote 正式 `TASK-*` 时都必须同次消费源 draft;当前开发阶段的内置 draft queue 是 `plan.draft.yaml.tasks[]`,因此如果这个 task 来自 `plan.draft.yaml.tasks[]`,promote 时必须同次删除源 draft,避免已采用草案继续显示为 `pending`。`/devloop` 连续运行 `/dev`,直到 `plan.yaml.tasks[]` 和 `plan.draft.yaml.tasks[]` 都没有明确可创建/执行的任务,或遇到需求、架构、allowed_paths、gate、commit/push blocker。
29
29
 
30
+ 如果是从 `TESTING` 通过 `bugfix_implementation_gap` 直接回到 `SPRINTING`,先创建或选择一个最小 bugfix `TASK-*`,引用 `.docs/07_test/TEST_REPORT.md` 的 failing scenario、既有 tech plan slice 和相关 implementation doc。该路径只用于“技术方案正确但实现偏离”的修复;如果测试证明技术方案、接口契约、任务拆分或 handoff graph 需要修改,应回 `ARCHITECTING`;如果需求或验收标准变化,应走 RFC。
31
+
30
32
  实现时遵循小步闭环:先检查 `git status`,确认工作区没有未归属到当前 task 的脏变更;再定位相关代码和测试,做必要修改,运行 gate,修复失败,写入或更新相关 implementation doc 并刷新文档派生视图。直接运行 `make validate-dev` 或 `npx sdlc-harness validate-dev` 是开发中 gate,允许当前 `SPRINTING` task 仍然 open,并校验 `current_task_id`、task 合同、dirty files、draft queue 和 implementation doc。此时先不要从 `plan.yaml` 移除当前 task,要在当前 task 仍位于 `plan.yaml` 时创建 task implementation commit;随后再移除 task,创建 task completion ledger commit,并 push 两个 commit。`make validate-current` / `/advance` 是阶段出口 gate,必须在 open task 已移除后才通过。不要顺手重构、重排格式或处理无关问题;如果发现无关风险,只记录或报告。
31
33
 
32
34
  开发阶段默认先评估当前 task 是否能安全并行。适合时,主 Agent 创建 `parallel_execution.trigger: "workflow_default"` 合同,默认使用 `runtime_managed` + `runtime.provider: "codex_native_subagents"` 调度 worker;用户明确要求并行、多 agent 或多 worktree 时使用 `trigger: "user_requested"`。主 Agent 声明每个 worker 的 `owned_paths`、`forbidden_paths`、`expected_output` 和 `required_gates`;非 native fallback 写仓库时还要声明 `branch` 和 `worktree`。worker 可以在各自非空、互不重叠且属于当前 task `allowed_paths` 的 owned paths 内实现,但不得直接修改 `plan.yaml`、`lifecycle.yaml`、`.docs/INDEX.md`、overview 或最终 implementation doc。主 Agent 负责 review、merge/cherry-pick、运行总 gate、更新事实源和完成两段提交。不适合拆分时继续串行 `/dev` 或 `/devloop` 并记录原因。
@@ -62,7 +64,7 @@ description: Use during SPRINTING to execute one task from plan.yaml, respecting
62
64
  - task implementation commit 必须发生在 task 移除之前,避免实现变更和计划短期化混在同一个提交里。
63
65
  - task completion ledger commit 发生在 implementation commit 之后,只负责将该 task 从当前 `plan.yaml` 移除。
64
66
  - 一个开发 task 默认对应一个主要 implementation commit 和一个轻量 completion ledger commit。implementation commit message 应包含 task id,例如 `TASK-003: implement login rate limit`;push 成功前,不进入下一个 task。
65
- - 本 Skill 不直接重切 PRD 或 tech plan;如果发现上游语义边界错误,进入 `BLOCKED`、创建 RFC,或请求回到 `ARCHITECTING`。
67
+ - 本 Skill 不直接重切 PRD 或 tech plan;如果发现上游语义边界错误,进入 `BLOCKED`、创建 RFC,或请求回到 `ARCHITECTING`。从 TESTING bugfix 回流的 `bugfix_implementation_gap` task 也不得重切技术方案;它必须引用 `TEST_REPORT.md` 的失败 scenario 和既有 tech plan,并只修实现偏差。
66
68
  - gate 通过后调用 `pjsdlc_implementation_doc`,由该 Skill 按真实实现更新或新增 `.docs/04_implementation/` 模块级 slice。
67
69
  - direct dev gate 与 phase-exit gate 语义不同:`validate-dev` 支持当前 open `SPRINTING` task;`validate-current` 在 `SPRINTING` 下仍会拒绝 open task,提示先完成 implementation commit 和 completion ledger。
68
70
  - 如果一个任务实际变成多个独立实现边界,应停止扩大范围,拆分后续任务或回到任务规划。
@@ -118,6 +120,7 @@ done task 的执行流水不在当前 `plan.yaml` 长期保留,也不是默认
118
120
  - [ ] 如果当前 task 是 high-risk runtime/live/remote-operator 工作,`resume_capsule` 已更新为 5-8 条恢复事实,`recovery_refs` 链接 implementation doc 和 `.docs/09_runbooks/**` runbook/evidence,implementation doc 已填写短的 `Current Operator Path` 和分层 `Gate Breakdown`。
119
121
  - [ ] 如果 task 要求 `business_handoff_ready`,implementation doc 已写入 Testing Handoff Contract,包含入口、配置、初始化/health、输入样例、预期出口、清理方式和证据等级。
120
122
  - [ ] 如果当前 task 来自 `plan.draft.yaml.tasks[]`,源 draft 已在 promote 时从 draft 列表删除。
123
+ - [ ] 如果当前 task 来自 TESTING bugfix 回流,已确认它是 `bugfix_implementation_gap`,并引用 `TEST_REPORT.md`、既有 tech plan 和 implementation doc。
121
124
  - [ ] implementation doc 已生成或更新,并反映相关模块的真实代码。
122
125
  - [ ] 如果启用了 `parallel_execution`,worker owned paths、forbidden paths、required gates 和主 Agent 集成结果已记录。
123
126
  - [ ] gate 结果已写入 implementation doc `Verification`,必要时当前 task `working_notes` 也记录了恢复现场所需的 gate evidence。
@@ -16,6 +16,8 @@ Skill、执行出口 gate,并记录 blocker。
16
16
 
17
17
  与用户对话时,先读取 lifecycle 和 plan,再说明当前阶段、active_skill、当前任务、阻塞项和下一步。不要基于猜测切换阶段;如果用户要求的动作与当前阶段冲突,说明冲突、可选路径和推荐处理方式。
18
18
 
19
+ 如果当前是 `TESTING` 且 `.docs/07_test/TEST_REPORT.md` 的 Final decision 为 `BLOCKED`,先读取其中的 `Bugfix Route` 再切换阶段。`bugfix_replan` 使用 `python3 tools/transition.py --to ARCHITECTING` 回到技术方案阶段,修正 tech plan、接口契约、任务拆分或 handoff graph 后再进入开发;`bugfix_implementation_gap` 使用 `python3 tools/transition.py --to SPRINTING` 回到开发阶段,只创建或选择小的实现偏差修复 task。若报告显示需求、验收标准或产品边界变化,仍进入 `RFC_RECALIBRATION`。不要把测试 bug 直接当作无分类重试。
20
+
19
21
  自然语言是默认控制方式,约定宏指令是更完整、更细节的提示词别名。用户说“状态如何”“继续”“下一步”“完善产品方案”“设计技术方案”“开始开发”“开始循环:写任务,执行任务”“跑测试”“准备 review”“需求变了”等,不应要求用户记忆 `/xxx`;你应先读取 lifecycle 和 plan,再把意图映射到对应 workflow action。执行 `/status`、`/next`、`/advance`、`/rfc`、`/prd`、`/design`、`/dev`、`/devloop` 等宏指令时,输出要短而明确:当前事实是什么、将调用哪个 gate 或 Skill、成功后会进入哪里、失败时如何保持状态安全。
20
22
 
21
23
  自然语言和宏指令必须进入同一组 workflow action;区别在于 `/xxx` 入口携带更稳定的细节约束,简单自然语言入口更低成本,但需要你根据当前阶段、plan 和文档上下文补足细节。
@@ -50,12 +52,13 @@ Parallel Execution 是默认评估、按需启用:每个阶段 task 开始时
50
52
  17. 用户输入 `/dev`,或自然语言要求“开始开发”“做当前任务”“做下一个任务”“继续开发下一个任务”时,如果 `current_phase` 是 `SPRINTING`,创建或选择一个最小 `TASK-*` development task 并执行一个 task 闭环;如果 task 来自 `plan.draft.yaml.tasks[]`,promote 时必须同次删除源 draft;否则说明当前阶段冲突和推荐路径。
51
53
  18. 用户输入 `/devloop`,或自然语言要求“开始循环:写任务,执行任务”“把开发循环跑完”“连续开发”时,如果 `current_phase` 是 `SPRINTING`,连续运行 `/dev` 循环,直到 `plan.yaml.tasks[]` 和 `plan.draft.yaml.tasks[]` 都没有明确可做任务或遇到 blocker;否则说明当前阶段冲突和推荐路径。
52
54
  19. 用户自然语言要求跑测试或验证时,运行当前 task 或当前阶段的对应 gate。
53
- 20. 每个阶段 task 开始时先判断当前阶段和当前 task 是否适合并行;如果适合,生成或使用 `parallel_execution.trigger: "workflow_default"` 合同;如果用户明确要求并行、多 agent 或多 worktree,使用 `trigger: "user_requested"`。
54
- 21. 默认使用 `runtime_managed` + `runtime.provider: "codex_native_subagents"`;native subagent 不可用时使用 `user_orchestrated` 并输出每个 worker 的可复制 prompt;高风险写入或用户要求强隔离时可选择 `codex_exec_worktree` fallback。
55
- 22. 用户自然语言要求 review 时,如果 `current_phase` `REVIEWING`,创建或选择一个最小 `TASK-*` review task,并设置 `phase: "REVIEWING"`;reviewer 只读源码,不直接改源码。
56
- 23. 用户自然语言要求刷新文档总览时,运行 `make docs-overview`。
57
- 24. `/plan` 和 `/goal` 是客户端模式入口,不由 Harness 自动开启;如果用户手动组合 `/plan` 或 `/goal` 与自然语言或宏指令,应按对应 workflow action 继续执行。
58
- 25. 如果动作会改变阶段、创建或删除 task、提交、push 或发布,先用一句话说明即将执行的动作和验证方式,再继续。
55
+ 20. 用户自然语言要求修复测试发现的 bug 时,如果当前是 `TESTING`,先读取 `TEST_REPORT.md#Bugfix Route`;`bugfix_replan` `ARCHITECTING`,`bugfix_implementation_gap` `SPRINTING`,需求或验收变化走 RFC。
56
+ 21. 每个阶段 task 开始时先判断当前阶段和当前 task 是否适合并行;如果适合,生成或使用 `parallel_execution.trigger: "workflow_default"` 合同;如果用户明确要求并行、多 agent 或多 worktree,使用 `trigger: "user_requested"`。
57
+ 22. 默认使用 `runtime_managed` + `runtime.provider: "codex_native_subagents"`;native subagent 不可用时使用 `user_orchestrated` 并输出每个 worker 的可复制 prompt;高风险写入或用户要求强隔离时可选择 `codex_exec_worktree` fallback。
58
+ 23. 用户自然语言要求 review 时,如果 `current_phase` 是 `REVIEWING`,创建或选择一个最小 `TASK-*` review task,并设置 `phase: "REVIEWING"`;reviewer 只读源码,不直接改源码。
59
+ 24. 用户自然语言要求刷新文档总览时,运行 `make docs-overview`。
60
+ 25. `/plan` `/goal` 是客户端模式入口,不由 Harness 自动开启;如果用户手动组合 `/plan` 或 `/goal` 与自然语言或宏指令,应按对应 workflow action 继续执行。
61
+ 26. 如果动作会改变阶段、创建或删除 task、提交、push 或发布,先用一句话说明即将执行的动作和验证方式,再继续。
59
62
 
60
63
  ## Plan Protocol
61
64
 
@@ -19,6 +19,8 @@ description: Use during TESTING to produce a test matrix, run regression, and do
19
19
 
20
20
  TESTING 只能调用 SPRINTING/REVIEWING 已确认 `PASS` 的入口做输入/输出验证。可以补充测试、fixture、mock、assertion helper 和测试文档,但不能在 TESTING 中新增或长期维护 product runtime、server/API/CLI/adapter、direct poller、cloud bootstrap、systemd unit、真实 provider adapter、package runtime script 或部署脚本。如果发现真实入口/出口不存在、implementation doc 缺少 `Development Evidence` 或 `Development Self-Test Report`、自测报告缺少 `Report Status: PASS`、缺少从本地启动或调用入口到完成全部自测用例的 `Module Key Test Path`、缺少 `Evidence Index Refs`、或该路径没有覆盖本 task / 本模块承诺的入口、内部关键路径、关键边界、观察点和完成证据,live 模式不可调用、配置契约缺失、Review readiness checklist 不是全 `PASS`,或 `Evidence Level` / `Target Runtime Environment` / `self_test_contract` 与 task 或技术方案承诺不一致,应记录 `BLOCKED`、生成 RFC 或后续 dev task 建议,并停止把测试阶段扩大成开发/集成搭建。若 `self_test_contract` 设置 `graph_required: true` 或包含 `module_key_test_graph`,TESTING 必须按 `Module Key Test Graph` 选择入口、checkpoint、scenario 和 observable exit,不能重新发明 runtime 或把图扩成测试执行引擎。`Development Self-Test Report` 不是 debug log、operator log、runbook、evidence dump 或探索流水;测试只消费其模块入口、核心路径、出口和最小证据指针。high-risk runtime/live/remote-operator 验证要先读 `plan.yaml#resume_capsule`,再读 `.docs/09_runbooks/**` runbook 和 evidence index,最后才读 exploration appendix;测试只沿 canonical path 和 hard constraints 验证,不重新尝试 `do_not_retry` 中的失败路径。开发尚未交付可测试 entry/exit、目标运行环境、Development Self-Test Report 或 Testing Handoff Contract 时,不要在 `.docs/07_test/**` 提前生成正式测试用例或正式报告;验收思路应留在 PRD acceptance criteria、tech plan verification strategy 或非 `.docs/07_test/**` 的草稿说明里。`TEST_REPORT.md` 不能在描述缺少 entry/exit、缺少 Development Evidence、缺少 Development Self-Test Report、证据等级不匹配或未交付应用入口时给出 `PASS`。
21
21
 
22
+ 当 TESTING 发现 bug,`TEST_REPORT.md` 的 Final decision 必须为 `BLOCKED`,并写明 `Bugfix Route`。`bugfix_replan` 表示测试证明技术方案、接口契约、任务拆分、测试入口或 handoff graph 需要修改,Manager 可从 `TESTING` 轻量回退到 `ARCHITECTING`,先修正 tech plan / `plan.draft.yaml`,再回到 `SPRINTING`。`bugfix_implementation_gap` 表示既有技术方案仍正确,只是实现没有按方案交付,Manager 可从 `TESTING` 轻量回退到 `SPRINTING` 创建或选择小的 bugfix dev task;该路径是保留口子,不是预期常态。若测试暴露的是需求、验收标准或产品边界变化,仍然进入 `RFC_RECALIBRATION`。
23
+
22
24
  测试设计和回归证据产出本身也是 workflow task。开始测试前,先在 `<harnessRoot>/state/plan.yaml` 创建或选择一个足够小的 `TASK-*` open task,并设置 `phase: "TESTING"`;当前轮只产出一个测试策略 slice、测试用例 slice、回归批次、风险验证片区或一组 scoped test changes。`plan.yaml` 仍是唯一执行计划事实源,`.docs/07_test/**` 只记录当前方案的 test strategy、test cases、executed regression evidence、coverage gaps 和 final decision,不表达“下一步如何开发”,也不保留已被 RFC supersede 的旧测试结果。
23
25
 
24
26
  测试阶段默认先评估是否适合并行验证。适合时,主 Tester 使用 `parallel_execution.trigger: "workflow_default"` 和 `runtime.provider: "codex_native_subagents"` 调度 worker 分别执行互不依赖的回归片区、smoke、兼容性或风险验证;用户明确要求并行时使用 `trigger: "user_requested"`。worker 只提交证据和必要的 scoped test changes;最终 `.docs/07_test/**`、coverage gaps、PASS/BLOCKED 决策和阶段 gate 由主 Agent 汇总。不适合拆分时保持串行并记录原因。
@@ -44,7 +46,7 @@ TESTING 只能调用 SPRINTING/REVIEWING 已确认 `PASS` 的入口做输入/输
44
46
  - 更新后的 `<harnessRoot>/state/plan.yaml`
45
47
  - 回归证据记录
46
48
  - 覆盖缺口清单
47
- - `BLOCKED` 时的 RFC/dev follow-up 建议和恢复条件
49
+ - `BLOCKED` 时的 `Bugfix Route`、RFC/dev follow-up 建议和恢复条件
48
50
 
49
51
  ## 语义切片
50
52
 
@@ -71,7 +73,7 @@ TESTING 只能调用 SPRINTING/REVIEWING 已确认 `PASS` 的入口做输入/输
71
73
  2. 根据风险补充边界、负向、回归和集成测试。
72
74
  3. 如果有意延后覆盖,必须记录风险和 follow-up。
73
75
  4. 不得新增 product runtime、server/API/CLI/adapter、poller、cloud bootstrap、systemd unit、真实 provider adapter、package runtime script 或部署脚本;这些属于 SPRINTING/RFC。
74
- 5. 测试发现入口/出口或 Development Evidence 缺失时,Final decision 必须为 `BLOCKED`,并指出回到 SPRINTING/RFC 的具体条件。
76
+ 5. 测试发现入口/出口或 Development Evidence 缺失时,Final decision 必须为 `BLOCKED`,并指出回到 `ARCHITECTING`、`SPRINTING` 或 `RFC_RECALIBRATION` 的具体条件。
75
77
  6. 新测试策略使用 `.docs/07_test/TEST_STRATEGY.md`,新测试用例使用 `.docs/07_test/TEST_CASES.md`,执行报告使用 `.docs/07_test/TEST_REPORT.md`;不要新建或继续依赖 `.docs/07_test/TEST_PLAN.md`。
76
78
  7. `TEST_REPORT.md` 不得包含 `pending`、`TBD`、`待填`、`TODO` 或占位结论;未执行或不可执行时 Final decision 必须为 `BLOCKED` 并给出恢复条件。
77
79
  8. RFC 改变技术路线、entry/exit 或验收边界后,必须确认 `.docs/07_test/**` 中旧路线测试证据已删除或不再从 `.docs/INDEX.md` 暴露。
@@ -93,6 +95,7 @@ TESTING 只能调用 SPRINTING/REVIEWING 已确认 `PASS` 的入口做输入/输
93
95
  - [ ] 未把测试计划、测试用例或待填内容写成 `TEST_REPORT.md`。
94
96
  - [ ] 已确认 `.docs/07_test/**` 只包含当前方案仍有效的测试事实。
95
97
  - [ ] Coverage gaps 已明确。
98
+ - [ ] 若 Final decision 为 `BLOCKED` 且原因是 bug,已写明 `Bugfix Route: bugfix_replan | bugfix_implementation_gap | RFC_RECALIBRATION`。
96
99
  - [ ] 如果启用了并行测试,worker evidence 已由主 Agent 汇总到测试产物。
97
100
  - [ ] 已运行 `make docs-overview` 刷新 `.docs/<stage>/overview.md`。
98
101
  - [ ] Final decision 是 `PASS` 或 `BLOCKED`。
@@ -43,4 +43,5 @@
43
43
 
44
44
  - Decision: `PASS` / `BLOCKED`
45
45
  - Evidence:
46
+ - Bugfix Route when bug-related `BLOCKED`: `bugfix_replan` / `bugfix_implementation_gap` / `RFC_RECALIBRATION` / `not_applicable`
46
47
  - Recovery condition when `BLOCKED`:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-project-sdlc",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "description": "CLI and canonical assets for the AI SDLC Harness workflow.",
5
5
  "type": "module",
6
6
  "bin": {