@namewta/speculo 2.0.2 → 2.0.4

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.
Files changed (55) hide show
  1. package/README.md +2 -0
  2. package/dist/src/agent-skills.js +2 -2
  3. package/dist/src/agent-skills.js.map +1 -1
  4. package/package.json +1 -1
  5. package/template/canonical/canonical-specdev-goal-plan.md +1636 -611
  6. package/template/canonical/canonical-specdev-grill-with-docs.md +237 -39
  7. package/template/canonical/canonical-specdev-spec.md +249 -95
  8. package/template/canonical/canonical-specdev-tickets.md +261 -153
  9. package/template/canonical/canonical-specdev-wayfinder.md +232 -28
  10. package/template/commands/git-history-squash/scripts/git-history-squash.mjs +4 -4
  11. package/template/commands/handoff/COMMAND.md +10 -0
  12. package/template/references/coordination/coordination-contract.md +5 -3
  13. package/template/references/coordination/modes/cli.md +2 -2
  14. package/template/references/coordination/modes/herdr.md +2 -2
  15. package/template/references/coordination/modes/orca.md +32 -9
  16. package/template/references/coordination/result-and-recovery.md +6 -3
  17. package/template/references/coordination/session-files.md +93 -0
  18. package/template/references/coordination/task-brief.md +6 -4
  19. package/template/workflows/specdev/common/rules/adr-format.md +5 -11
  20. package/template/workflows/specdev/common/rules/change-completion.md +3 -0
  21. package/template/workflows/specdev/common/rules/path-reference-contract.md +2 -0
  22. package/template/workflows/specdev/common/rules/planning-principles.md +1 -1
  23. package/template/workflows/specdev/common/rules/readiness-and-depth.md +5 -5
  24. package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +2 -0
  25. package/template/workflows/specdev/common/skills/code-review/SKILL.md +11 -8
  26. package/template/workflows/specdev/common/skills/code-review/references/result-reuse.md +3 -3
  27. package/template/workflows/specdev/common/skills/code-review/references/review-evidence.md +44 -0
  28. package/template/workflows/specdev/common/skills/code-review/references/reviewer-contracts.md +17 -5
  29. package/template/workflows/specdev/common/skills/code-review/references/working-tree-review.md +15 -0
  30. package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +2 -0
  31. package/template/workflows/specdev/common/tools/README.md +8 -0
  32. package/template/workflows/specdev/common/tools/change-artifacts.mjs +3 -0
  33. package/template/workflows/specdev/common/tools/plan-contract.mjs +2 -3
  34. package/template/workflows/specdev/common/tools/review-evidence.mjs +117 -0
  35. package/template/workflows/specdev/common/tools/review-scope.mjs +92 -5
  36. package/template/workflows/specdev/common/tools/tests/review-evidence.test.mjs +74 -0
  37. package/template/workflows/specdev/common/tools/tests/review-fixture.mjs +31 -0
  38. package/template/workflows/specdev/common/tools/tests/review-working-tree.test.mjs +60 -0
  39. package/template/workflows/specdev/common/tools/validate-specdev.mjs +79 -37
  40. package/template/workflows/specdev/specdev-c-code-review/SKILL.md +4 -4
  41. package/template/workflows/specdev/specdev-c-code-review/assets/code-review-template.md +5 -1
  42. package/template/workflows/specdev/specdev-c-code-review/references/source-files-review.md +2 -2
  43. package/template/workflows/specdev/specdev-i-implement/SKILL.md +1 -1
  44. package/template/workflows/specdev/specdev-i-implement/assets/evidence-template.md +9 -4
  45. package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md +6 -2
  46. package/template/workflows/specdev/specdev-p-goal-plan/SKILL.md +1 -1
  47. package/template/workflows/specdev/specdev-p-goal-plan/assets/goal-plan-template.md +2 -0
  48. package/template/workflows/specdev/specdev-p-goal-plan/assets/lightweight-goal-plan-template.md +2 -0
  49. package/template/workflows/specdev/specdev-p-goal-plan/references/completion-control.md +3 -0
  50. package/template/workflows/specdev/specdev-s-spec/SKILL.md +2 -2
  51. package/template/workflows/specdev/specdev-s-spec/assets/spec-template.md +15 -65
  52. package/template/workflows/specdev/specdev-t-tickets/assets/ticket-template.md +19 -103
  53. package/template/workflows/specdev/specdev-t-tickets/assets/tickets-map-template.md +2 -0
  54. package/template/workflows/specdev/specdev-t-tickets/references/planning-procedure.md +5 -19
  55. package/template/workflows/specdev/specdev-t-tickets/references/ticket-readiness.md +4 -4
@@ -1,13 +1,36 @@
1
1
  # Orca 编排
2
2
 
3
- 仅在当前任务选择 Orca 时读取。先读取本机当前版本提供的 Orca CLI 与 orchestration 指南;使用指南指向的实际命令。记录实际版本、指南来源和任务 locator,不在 Speculo 内固定 agent、模型或 runner 列表。
3
+ 仅在用户为当前任务明确选择 Orca 时读取;选择可来自同范围仍有效的会话授权。plan 只说明接入步骤,不安装、不启动。Orca 选择不隐含 worktree、模型或拓扑选择。
4
+
5
+ ## 按需安装项目 Skill
6
+
7
+ 当前 Lead 负责首次接入,项目根由调用 Work 已验证的 projectRoot 确定,不取终端 cwd、桌面客户端路径或方法安装根。
8
+
9
+ 1. 检查项目 `<Path>{roots.skills}/orca/SKILL.md</Path>`(标准布局为项目 `.agents/skills/orca/SKILL.md`)。存在且为有效 `name: orca` 的完整 Skill 时先读取并复用,核对来源和兼容性;不因上游更新静默覆盖。符号链接、同名非 Skill、无效内容或归属冲突时保留原文件,仅阻塞安装分支,说明冲突位置与恢复方式。
10
+ 2. 缺失时从指定上游 [Orca SKILL.md](https://github.com/NAMEWTA/wta-skills-hub/blob/main/skills/automation/orca/SKILL.md) 获取 Skill。先解析 main 的实际 revision,再从该 revision 下载 `skills/automation/orca/` 的完整内容;当前上游为单文件,未来若有相对资源依赖须完整获取,不能只保存 GitHub HTML 页面。Skill 指向的 Orca 内置指南由实际 CLI 提供,不是缺失的本地资源。
11
+ 3. 使用宿主可用的 Skill 安装器并显式指定项目 `.agents/skills/` 为目标;没有安装器时用宿主下载和文件工具完成同一流程。先在临时位置检查 UTF-8 Markdown、YAML frontmatter、`name: orca`、引用闭包及路径,再以不覆盖方式安装。保留上游原文、frontmatter、许可和文件模式,不重写命令或权限参数。下载/校验失败时不留下半成品正式目录;目标期间发生变化时停止,不覆盖重试。
12
+ 4. 安装后回读实际 Skill,核对内容摘要与候选一致,在当前 Work 已有 Evidence/报告或会话结果中记录上游 URL、revision、内容 SHA-256、目标和结果。没有报告就不为安装制造 change 或 receipt。此 Skill 是项目第三方资产,不加入 Speculo 的投影清单,也不由 init/refresh 更新或删除。
13
+
14
+ 用户选择并要求使用 Orca 时可完成上述项目本地安装;持久配置本身不是新安装授权。安装 Skill 不等于安装或升级 Orca、登录账户、配对远端或启动服务。缺少网络或写权限时只阻塞 Orca 分支,给出原目标和缺失条件;重试前重新检查目标,不能自动换另一种执行方式。
15
+
16
+ ## 运行与返回
17
+
18
+ 安装或复用后必须读取项目内 Skill,按其规则定位实际 CLI:优先核对 `ORCA_CLI_COMMAND`,开发上下文核对 `ORCA_DEV_REPO_ROOT`;Linux 非托管环境使用指南规定的 `orca-ide` 入口,避免误调用同名屏幕阅读器。不要套用 Herdr 的环境变量要求,也不把环境值交给 eval。固定入口后读取本机 `--help`、`skills get orca-cli`;需要受监督编排时再读 `skills get orchestration` 及当前分支参考。核对版本、来源、执行主机与目标 runtime 能力,不把上游 main 当作本机可用接口。
19
+
20
+ 宿主技能列表是否已刷新不替代读取真实项目文件;安装成功也不证明 CLI 或远端可用。入口、权限或目标能力失败时保留原错误,只阻塞此方式,不静默切换生产/开发版或本地/远端入口,不自行安装升级或重启服务。
4
21
 
5
22
  1. 确认用户项目、当前工作区以及当前 Lead 的责任。需要保留 Lead 连续推进时使用受监督任务方式;完整 handoff 会转移责任,只有用户明确选择该交接时才使用。
6
- 2. 沿当前工具提供的任务、工作区、会话和消息接口建立目标。Orca 管理的 worktree 由 Orca 操作;允许工具支持的 folder workspace,不凭空要求所有项目必须有 Git worktree。
7
- 3. 使用 <Path>{roots.references}/coordination/task-brief.md</Path> 的真实入口和任务说明。保存工具返回的任务/尝试/session locator;不要以标题猜句柄。
8
- 4. 区分投递已接收、任务开始、任务返回、写入停止和业务验收。工具已有生命周期由工具管理,不再建调度器。
9
- 5. 处理该任务的 question、完成及升级请求;已有权威答案由 Lead 回答,额外权限或产品决定再交用户。确认已处理必要消息后才按工具合同确认收件。
10
- 6. 状态不明时重读任务和收件事实。旧句柄失效时按当前指南查询,不同时向旧、新目标重复发送。
11
- 7. 接收、取消、保留或释放工作区按当前指南及真实授权操作。释放不等于取消,完成消息不等于旧写入者已经停止。
12
-
13
- 核对返回和候选后按 <Path>{roots.references}/coordination/result-and-recovery.md</Path> 接续原 Goal。工具或所需能力不可用时准确报告当前阻塞,不自行安装升级。
23
+ 2. 沿当前工具提供的任务、工作区、会话和消息接口建立目标。Orca 管理的 worktree 由 Orca 操作;允许工具支持的 folder workspace,不凭空要求所有项目必须有 Git worktree。工具和模型沿用户选择及当前指南确定,不固化 agent/runner 清单;保留用户焦点,不复用 Herdr 参数。
24
+ 3. 使用 <Path>{roots.references}/coordination/task-brief.md</Path> 的真实入口和任务说明。有 change 时先保存 TASK,提供 REPORT 位置;记录编排 session/task 对应的 Orca Run、Task、Dispatch、终端及 provider 会话中实际存在的 locator 和所属主机,不以标题猜句柄。
25
+ 4. 区分投递已接收、任务开始、任务返回、写入停止和业务验收。Run、Task、Dispatch 与终端、工作区分别使用真实返回的身份;已有 Run/Dispatch 按指南恢复,不重复创建。工具已有生命周期由工具管理,不再建调度器,也不用其他 subagent 工具冒充 Orca 派遣。
26
+ 5. 处理该任务的 question、完成及升级请求;已有权威答案由 Lead 回答,额外权限或产品决定再交用户。报告保存后按当前原生完成协议发送摘要与报告位置;支持 report-path 时传真实路径。REPORT 的 completed/blocked/failed/cancelled 不直接代替 Orca 的 outcome 参数;按本版 worker 协议提交原 Task/Dispatch 的结果,已结算的不再补写第二次完成。处理必要消息与资源归属后才确认收件,不因超时重建同一问题。
27
+ 6. 状态不明时重读原任务、回执和收件事实;只有本版支持同请求重放且原参数可核对时才恢复原操作。旧句柄失效时重新发现目标,不同时向旧、新目标重复发送。idle、无输出、断线或清单缺项均不能证明任务结束。
28
+ 7. 接收、取消、保留或释放工作区按当前指南及真实授权操作。结算后复用、保留或释放资源,运行中取消使用精确目标的原生停止流程;不以关闭终端、全局 reset 或删除工作区代替结算。完成消息不等于旧写入者已经停止。
29
+
30
+ 核对返回、实际候选和写入停止事实后,由 Lead 按原验收更新 Evidence,并按 <Path>{roots.references}/coordination/result-and-recovery.md</Path> 接续原 Goal。工具或所需能力不可用时准确报告当前阻塞。
31
+
32
+ ## 聚焦交接与历史
33
+
34
+ 按 <Path>{roots.references}/coordination/session-files.md</Path> 在报告中保存简短交接和原始会话入口。借鉴 Focused handoff:先读最近摘要与当前工作区,仅在细节不足时检索原会话;这是历史上下文交付,不自动转移 Leader 所有权或 resume 原 provider 会话。
35
+
36
+ 执行者交付前主动从当前版本的会话元数据或历史接口定位 transcript/history locator 与 provider session ID,Lead 用真实派遣句柄补充。按派遣文件合同核验所属主机、真实入口、会话对应关系和可读性,并记录本任务范围;无法核验时说明原因。需要搜索时先按当前指南检查历史索引是否启用,再在正确主机上按实际会话 ID 查找,结合任务关键词、执行路径或时间缩小范围;索引未启用就记录搜索不可用,不自行开启,仍可核验工具已提供的原始入口。SSH 转发 CLI 的搜索主机可能是控制端,路径过滤不等于切换主机。原记录缺失时可保留带来源与范围的终端节选,但必须明确是节选,不能称为完整会话或伪造 JSONL。
@@ -4,11 +4,13 @@
4
4
 
5
5
  ## 接收
6
6
 
7
- 1. 从实际存在的原 Goal、Ticket Evidence、Direct Spec Evidence 或当前审查输入找到任务、实际 Work、工作区、基线、owner 和工具 locator;缺 Goal/Ticket 不要求补造。返回必须对应同一目标;过时结果保留为历史材料,不能覆盖当前决定。
7
+ 1. 从实际存在的原 Goal、Ticket Evidence、Direct Spec Evidence 或当前审查输入找到任务、实际 Work、工作区、基线、owner 和工具 locator;缺 Goal/Ticket 不要求补造。有文件交接时按 <Path>{roots.references}/coordination/session-files.md</Path> 回读 TASK 与 REPORT,核对 session/task、实际工具尝试和候选身份,先看聚焦交接。需要回查历史时先确认记录主机与本端访问能力,再检索本任务片段;执行者的核验声明不等于接收端已能读取。返回必须对应同一目标;过时结果保留为历史材料,不能覆盖当前决定。
8
8
  2. 通过当前工具指南核对任务是否确实返回,以及是否仍可能继续写入。已接收、已开始、会话空闲、任务结束、进程退出和业务通过分别记录;结果不明先查询,不重复发起任务。
9
9
  3. 检查实际文件和 Git 事实:基线、可达 checkpoint、tip、dirty 状态、tracked/untracked/ignored 变更以及允许路径。返回文本不能替代真实候选。
10
10
  4. 按原验收合同核对检查及输出。执行者修改测试、配置或验收脚本时,判断是否改变了通过标准,不接受伪绿色结果。自报、模拟、截图和推断在 Lead 核实前保持未验证。
11
- 5. review/research/test-observation 的 findings、来源及命令观察由 Lead 核对后写入原工件。独立审查 required 时,审查者必须满足原 Gate;同一实现者换名称或清空会话不构成独立。Lead 自审明确标识。
11
+ 5. review/research/test-observation 的 findings、来源及命令观察由 Lead 核对后写入原工件。SpecDev 双轴审查必须核对审查者未参与本范围实现及真实派遣/返回证据;同一实现者换名称或清空会话不构成独立。Lead 参与实现时,自查只算实现活动,不满足审查完成门。
12
+
13
+ REPORT 的 completed 只表示候选已交回;blocked、failed、cancelled 分别按报告事实处理,均不能直接覆盖 Ticket 或 README Outcome。Lead 在原 Evidence 保存报告指针和独立验收;后续查得的历史 locator、核验结果或快照也追加在原 Evidence,不改写执行者的报告。缺身份、状态或可核验产物时只阻塞本次验收。已提交报告的修正/重试创建新派遣目录并引用旧结果,业务上仍属于原 Ticket,不为重试新建业务票。
12
14
 
13
15
  ## 修复与集成
14
16
 
@@ -19,9 +21,10 @@
19
21
  ## 中断恢复
20
22
 
21
23
  - 按输入分支读取实际存在的 Goal Plan、Ticket/Map 或 Direct Spec、README Outcome、最近 Evidence 和实际候选,核对当前 HEAD、输入与真实 Work 是否漂移。
22
- - 使用记录的工具 locator 查询原任务,不根据缺日志推断没有执行。
24
+ - 使用记录的工具 locator 查询原任务,不根据缺日志或 REPORT 推断没有执行。突然中断而无报告时,由 Lead 在原 Evidence 记录已知/未知事实与恢复入口,不伪造执行者成功报告;临时文件不算完成回报。
23
25
  - 仍可能写入或副作用结果未知时,不让 Lead 或另一执行者抢写;按当前工具指南检查、等待或在原授权下取消。
24
26
  - 当前会话不具备查询能力时,说明缺失事实和恢复入口,不伪造停止证明。
27
+ - 原历史记录不可读时保留其 locator 和缺失说明,使用报告与真实产物核验;只有缺失事实影响验收时才阻塞对应部分。回查历史不隐式恢复旧会话或授权再次执行。
25
28
  - 用户改变后续偏好时在下一安全阶段采用;撤销权限立即停止新动作并处理进行中的任务。
26
29
  - 独立且已授权的其他 frontier 可以继续;仅阻塞冲突任务及其依赖闭包。
27
30
 
@@ -0,0 +1,93 @@
1
+ # 派遣文件与聚焦交接
2
+
3
+ 在已有 change 中通过 CLI、Herdr、Orca 等外部工具派遣任务时读取。首次实际派遣才创建文件;宿主原生协作按需采用,Lead 自行执行不创建虚构派遣。无 change 时使用当前 Work 已有报告位置,不补造 change。external-web 继续使用原 ZIP 交付合同。
4
+
5
+ ## 目录与身份
6
+
7
+ SpecDev 任务目录为 <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/</Path>:
8
+
9
+ - `{session}` 是一轮编排,使用中性的 UTC `YYYYMMDDTHHMMSSZ`,不带 Work 或任务类型;恢复同一轮继续使用原目录,新轮次另建,同秒冲突追加最小未使用后缀 `-01`、`-02` 等。
10
+ - `{task}` 是一次具体派遣,命名为轮内递增编号加实际主题,如 `001-code-review`、`002-research`、`003-implement` 或 `004-test-observation`。具体 Work、任务类型和 Ticket 写入 TASK。修正交付或重试使用新编号并引用前次报告,不增加 attempt 子目录,不覆盖旧输入与结果。
11
+ - 两种目录标识只使用字母、数字、连字符;由 Lead 分配,不从未经检查的标题直接拼路径。确认目录在当前 change 内、无链接跳转且未被占用。
12
+ - 编排 session/task 与工具的 Run、Dispatch、pane、conversation ID 分开;工具定位信息记录真实返回值和所属主机,不猜句柄。
13
+
14
+ 每个任务通常只有两份文件:Lead 写 <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/TASK.md</Path>,执行者写 <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/REPORT.md</Path>。不另建 session 总表、状态 JSON、心跳文件或聊天流水。
15
+
16
+ 原 Evidence 或当前 Work 工件引用这两份文件及 Lead 的验收结论,不复制整份输入、报告或第二套业务状态。持久导航同时绑定稳定 change 身份与 change 根相对 locator,归档后按该 change 的唯一实际位置解析,不能仅依赖旧活动目录。其他领域仅在其 Work 已拥有的产物位置使用同一交接内容,不接管 SpecDev namespace。
17
+
18
+ ## 输入与文件所有权
19
+
20
+ Lead 将当前交接说明要求的必要上下文写入 `TASK.md`,使用以下五组内容,按需引用原件,不抄整套规格:
21
+
22
+ | 内容 | 必需事实 |
23
+ |---|---|
24
+ | 身份与目标 | session/task、implementation/review/research/test-observation、change/Ticket(实际存在时)、Lead、执行者和成功定义 |
25
+ | 输入 | 真实 Work/Skill 入口、必要规格和依赖产物、已锁定决定;前序背景引用原报告与其中的历史入口 |
26
+ | 工作区与范围 | current/required、真实执行位置与基线、允许/只读/共享路径及 owner、已获授权的动作、停止条件 |
27
+ | 验收 | 要运行的检查、可观察通过标准、未在执行者环境运行的 Gate 及其 owner |
28
+ | 返回与通信 | 准确报告位置、提问/通知的工具原生通道、实际调用方式与工具句柄;尚未取得的句柄由 Lead 在调用返回后补记 |
29
+
30
+ TASK 的返回要求必须包含:
31
+
32
+ > 交付前主动定位本次会话的原始历史记录,核对所属主机、会话 ID 和可读性,在 REPORT 中记录真实路径及本任务检索范围。无法取得时说明原因,不猜测路径。报告正文应能独立说明结果,不要求接收方先读完整聊天。
33
+
34
+ Lead 在派遣前形成完整输入、检查并写入,再回读确认后投递。输入正文此后保持稳定,只允许补记实际调用句柄/时间;目标、基线或权限实质变化时建立新任务并保留旧任务。普通澄清通过原生通道回答,影响结果的答复写入报告。
35
+
36
+ 派遣前确认执行者能读输入和必要材料,且能交付报告。独立工作区需要明确实际可读输入和可写报告位置;只有工具返回文本时,由 Lead 原样捕获到正式报告,标注 `Captured-by: Lead` 和原始消息 locator,不补造执行者的验证结果。执行者和 Lead 不同时写同一报告。
37
+
38
+ 只读任务仅可写被明确分配的报告及允许的测试产物,业务文件仍只读。报告路径不同允许独立交付,不放宽 current 的单一代码 writer 约束。所有文件先完成候选内容,再使用可用的同目录临时文件与不覆盖目标的原子落盘方式,写前检查目标未被占用、写后回读;已有正式报告不覆盖,发现冲突交 Lead 处理。未完成的临时文件不是报告,也不能作为完成信号。
39
+
40
+ ## 报告与通知
41
+
42
+ 执行者交回任务时一次性写完整 `REPORT.md`,首部用普通 Markdown 字段明确身份和状态,不要求 YAML/JSON。以下是模板,正文占位说明须替换为实际事实:
43
+
44
+ ```markdown
45
+ # 任务回报
46
+
47
+ Session: 本轮编排标识
48
+ Task: 本次派遣标识
49
+ Status: completed / blocked / failed / cancelled(仅保留实际值)
50
+
51
+ ## 聚焦交接
52
+ 用三至五句话说明完成内容、关键决定、当前停点和下一安全动作。
53
+
54
+ ## 产物与验证
55
+ - 修改或成果:真实文件、checkpoint/commit、dirty 状态或其他产物位置。
56
+ - 验证:命令、退出码、执行环境和实际观察;研究列来源,审查列 findings。
57
+ - 未完成或未验证:实际事项;没有则写“无”。
58
+
59
+ ## 问题与下一步
60
+ 阻塞/失败/取消的事实、已尝试内容、需要谁提供什么及恢复条件;无问题写“无”。
61
+
62
+ ## 历史会话
63
+ - 工具与主机:实际工具、记录所属主机。
64
+ - 会话 ID:工具提供的真实标识。
65
+ - 原始记录:所属主机上的实际绝对路径,或工具原生历史入口。
66
+ - 核验:由谁、在哪台主机确认了会话对应关系和可读性;未核验项及原因。
67
+ - 本任务范围与检索线索:消息/时间范围、关键函数或错误信息等关键词。
68
+ ```
69
+
70
+ | Status | 表示什么 |
71
+ |---|---|
72
+ | completed | 执行者完成分配范围并交回候选,仍待 Lead 验收 |
73
+ | blocked | 缺输入、权限、依赖或决定,说明恢复所需条件 |
74
+ | failed | 本次尝试失败,保存已产生的产物和失败事实 |
75
+ | cancelled | 本次派遣按实际指示取消,记录已发生影响和停止情况 |
76
+
77
+ 进行中问题与进度使用工具原生通道,不反复刷新报告。`blocked` 是交回本次派遣;正常提问并等待答复仍在原任务中进行。同一报告的状态不流转,后续修复/重试建立新任务;旧执行者是否停止仍按真实工具核对。
78
+
79
+ 文件回读成功后,通过当前工具原生通道返回“session/task、Status、报告位置、一句话摘要”;原生生命周期参数遵守工具当前指南,不直接把上述枚举塞入工具不支持的字段。工具结果不明或报告缺失时,Lead 按原任务的返回与恢复合同查询原调用,不重复派遣可能仍在写入的任务。
80
+
81
+ ## 历史会话的按需回查
82
+
83
+ 以下是 Agent 使用当前工具执行的交接要求,不代表 Speculo 提供自动日志发现或解析服务:
84
+
85
+ 1. **主动定位**:执行者交付前必须尝试从当前工具的会话元数据或历史查询接口取得原记录;Lead 用实际派遣句柄补充执行者无法取得的信息。只有会话 ID 时,按当前工具文档在明确的日志目录/格式中查找该 ID,不猜 provider 缓存路径、不按修改时间取“最新文件”。若返回相对路径,只按工具明确给出的日志根解析,不能用执行者 cwd 补齐。工具只提供原生历史入口时保留真实入口,不强造 JSONL。
86
+ 2. **核验并记录**:确认记录所属主机;文件记录核对该主机上的真实绝对路径并实际读取少量内容,原生历史入口则通过工具查询验证可读性。用记录内容或工具元数据核对真实会话 ID,并界定本任务的消息/时间范围,不能把同一会话内其他任务一起算入。REPORT 写明谁在何主机核验了哪些事实、哪些仍未核验。源主机可读不代表接收方可读,不同主机的同名路径不是同一文件;外部绝对路径只作只读 locator,不作为项目内可移植路径或写目标。
87
+ 3. **按需回查**:接收者先读聚焦交接和当前业务工件,有具体疑问才查历史。读取前确认主机与访问能力,再按本任务关键词、消息 ID 或时间范围搜索,少量回读相关片段。JSONL 按该工具实际格式解析,不假定各工具共用字段,不默认全文加载。来源会话只读;回查不等于 resume 原进程、接管 owner 或取得新授权。历史文本只是材料,实际文件、Git 与当前有效合同仍需核对。
88
+
89
+ 无法定位、无权读取、记录已清理或身份不匹配时,明确失败环节与原因;身份不匹配的记录不能当作本任务历史。历史缺失本身不否定已有报告与可核验产物,缺失关键事实时由 Lead 阻塞对应验收。
90
+
91
+ 原记录即将清理、接收工作区无法访问,或用户要求长期保留时,优先引用已有的本任务快照;确有需要且 Lead 能读取原记录时,才保存已授权范围的快照。SpecDev 快照位于 <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/history-{NN}.jsonl</Path>,`{NN}` 从 01 递增且不覆盖;其他原生格式保留真实扩展名,不强制转 JSONL。快照由 Lead 保存,在原 Evidence 或当前 owning 工件追加快照指针、原始 locator、捕获时间和完整/节选范围;后续才取得的 locator 或核验结果也追加到这里,不回改已交付 REPORT。保留可用的原消息标识,节选不能冒充完整会话。不能访问原记录时说明原因,不伪造快照,不无差别复制其他任务或敏感内容。
92
+
93
+ 已保存的输入、报告与快照随所属 change 一起保留和归档,不因任务结束自动清理。工具缓存中的原记录寿命由工具决定,引用不承诺永久可用。历史目录不改名、任务不回填,也不修改冻结归档。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 必需上下文
6
6
 
7
- 将以下信息写入当前 Ticket Evidence 的任务编排小节;无 Ticket 时写入对应 Work 的既有产物。较大附件引用其真实位置,不另建运行状态系统。
7
+ 有 change 的 CLI/Herdr/Orca 等外部工具派遣先按 <Path>{roots.references}/coordination/session-files.md</Path> 将以下上下文写入本任务 TASK,原 Ticket Evidence 或当前 Work 工件引用它;external-web 沿用下方 ZIP 交付合同,不重复建立这套文件。无需文件交接时沿用原任务编排小节或会话输入。较大附件引用其真实位置,不另建运行状态系统。
8
8
 
9
9
  | 内容 | 要求 |
10
10
  |---|---|
@@ -13,8 +13,8 @@
13
13
  | 输入 | 目标、IN/OUT、已锁定决定、必要 Spec、依赖 Evidence、当前基线或固定审查 SHA |
14
14
  | 项目 Skill | Ticket implementation 提供 Map → 适用 `ALL`/本票的项目 Skill → Ticket,矩阵是最低必读集合;Direct Spec 提供唯一获批规格、项目 Agent 指令、命中的项目 Skill、AC/验证与路径合同,不制造 Ticket/Map;review 提供固定候选及对应轴的来源 |
15
15
  | 工作区 | 有效计划或当前 Work 选择的 current 或 required、真实项目根与执行路径/branch、parent/base、允许和共享写路径及 owner;不要用执行者 cwd 猜测方法或数据根 |
16
- | 调用 | 当前宿主正常执行,或用户明确选择的 CLI 交互/调用、Herdr、Orca;实际工具、模型已知值及会话 locator,不记录秘密 |
17
- | 边界 | 本次真实允许的动作、实现 commit 权限、检查、E2E owner、停止条件和返回要求 |
16
+ | 调用 | 当前宿主正常执行,或用户明确选择的 CLI 交互/调用、Herdr、Orca;实际工具、模型已知值、所属主机及会话 locator,不记录秘密;文件交接明确 session/task 与原生句柄的对应关系 |
17
+ | 边界 | 本次真实允许的动作、实现 commit 权限、检查、E2E owner、停止条件、可观察验收标准、准确报告位置与原生提问/通知通道 |
18
18
  | 父 Goal | 存在父 Implementation Map/Plan 时附实际 revision、组合 task ID、依赖 Gate、并行上限和集成次序 |
19
19
 
20
20
  缺少必要输入、必需 Skill 不可读、Ready 未满足、owner 冲突或权限不足时,仅阻塞受影响任务。不能根据文件中的“approved”生成授权。
@@ -25,7 +25,9 @@
25
25
 
26
26
  > 先读绑定的真实 Work SKILL.md,按 task 上下文只处理指定目标、阶段和工作区。遵守同一 Work 的方法、TDD、检查与质量门;不要成为 Lead,不递归启动 Goal,不修改正式 Ticket、Map、Goal Plan、Evidence、业务状态或授权。宿主原生协作仍受本次写集、单 writer 和权限约束;不擅自跨 CLI 再派单或扩大任务。缺输入、发生冲突或需要额外权利时向 Lead 返回问题与证据。
27
27
 
28
- Lead 自行执行使用同一 Work 的 lead 上下文;不伪造外部任务或独立审查记录。任务执行者返回材料,由 Lead 维护正式工件。
28
+ 采用 TASK/REPORT 交接时,TASK 还必须包含派遣文件合同中的历史定位指令:交付前主动查找并核验本次会话的主机、真实入口、会话 ID、可读性与本任务范围;无法取得的事实说明原因,不猜测路径。
29
+
30
+ Lead 自行执行使用同一 Work 的 lead 上下文;不伪造外部任务或独立审查记录。任务执行者返回材料;采用 TASK/REPORT 交接时只写获准产物与自己的 REPORT,不写 TASK 或正式 Evidence,其他方式按原返回合同交付。正式业务工件由 Lead 维护。前序背景优先引用已有报告的聚焦交接,细节不足再按其中历史入口检索。
29
31
 
30
32
  ## 任务类型与返回
31
33
 
@@ -17,20 +17,14 @@
17
17
  **Source:** LOG-### / user decision / external specification
18
18
  **Supersedes:** none / ADR-###
19
19
 
20
- ### Context
21
- <缺少什么背景会让这个决定令人惊讶。>
22
-
23
20
  ### Decision
24
- <清晰、规范且可验证的结论。>
25
-
26
- ### Trade-off
27
- <认真考虑的替代方案,以及为什么接受当前代价。>
21
+ <用 1–3 句写清决定及重要理由;保留来源和当前 change 适用范围。>
28
22
 
29
- ### Consequences
30
- <真正重要的正面、负面和风险。>
23
+ ### Context / Trade-off / Consequences(适用时)
24
+ <只有决定与理由不足以解释真实取舍、风险或后果时才展开;没有替代方案不编造。>
31
25
 
32
- ### Verification / Migration
33
- <仅在适用时出现。>
26
+ ### Verification / Migration(适用时)
27
+ <实际需要的验证、兼容或迁移约束。>
34
28
  ```
35
29
 
36
30
  `accepted` 只表示用户已接受该决定作为当前 change 的下游合同;它不证明实现已经落地,也不代表永久知识毕业。修改已接受决定时新建 change ADR 并建立 supersedes 链,不重写历史。
@@ -4,6 +4,9 @@
4
4
 
5
5
  ## 完成门
6
6
 
7
+ 实现型完成必须按 <Path>{roots.workflows}/specdev/common/skills/code-review/references/review-evidence.md</Path> 有覆盖实际最终交付的独立双轴通过证据。多单元组合使用整体审查;单单元固定输入相同可复用,未提交内容使用工作副本快照。非实现学习、复盘及取消沿各自等价验收,不制造代码审查。
8
+
9
+
7
10
  一个 change 只有同时满足以下条件才能 completed:
8
11
 
9
12
  1. 所有计划内 Ticket 为 done,或因权威事实无需改动而记录为 cancelled;Direct Spec/非实现流程有等价验收;required Direct Spec 的执行记录必须 integrated/removed,父 HEAD 为 result 且包含 source,候选与 required 验证通过。
@@ -73,6 +73,8 @@ SpecDev 不假定运行时一定提供项目根变量。Ticket、Evidence、诊
73
73
 
74
74
  外部 URL 不能伪装成 SpecDev 内部路径;内部文件也不能用 URL 代替完整 Path 标签。
75
75
 
76
+ 历史会话的只读外部 locator 是限定例外:可记录工具返回的“所属主机+原生绝对路径/会话标识”,按 <Path>{roots.references}/coordination/session-files.md</Path> 检索。它不使用内部 Path 标签,不是可移植项目路径、静态能力依赖或写入授权;项目内保存的快照仍使用正常工件路径。
77
+
76
78
  ## 5. 工件名称与工件引用
77
79
 
78
80
  可以在概念层面写“Spec”“Ticket”“Goal Plan”“Evidence”。一旦语句指向具体文件、目录、模板、Schema、工具或状态工件,就必须给出完整 Path 标签。
@@ -49,7 +49,7 @@ Ticket 告诉执行者:做什么、为什么、不能改变什么、按什么
49
49
  ## 7. 分层规划
50
50
 
51
51
  - Spec 决定外部行为。
52
- - Ticket 是决策完备的微型执行计划。
52
+ - Ticket 是可独立验收的垂直行为切片;外部合同和必要执行约束完备,局部实现由 I 决定。
53
53
  - Tickets Map 决定依赖和覆盖投影。
54
54
  - Goal Plan 只在协调复杂度需要时决定跨 Ticket 编排。
55
55
  - Implement 在既定契约内完成代码和 Evidence。
@@ -6,19 +6,19 @@
6
6
 
7
7
  适用条件通常全部满足:范围局部、行为明确、沿用既有模式、无公共接口或数据迁移、无安全或高事故半径影响、易回滚、无需并行协调。
8
8
 
9
- 最低内容:目标、范围、项目路径授权、1–3 条执行路线、验收标准和验证方法。
9
+ 最低内容:目标、垂直行为切片、范围、项目路径授权、验收标准和验证方法。局部实现由 I 决定。
10
10
 
11
11
  ### Standard
12
12
 
13
13
  适用于大多数跨多个文件或技术层的垂直切片。
14
14
 
15
- 额外要求:锁定决策与假设、接口接缝、输入输出、不变量、失败行为、有序执行路线、验证矩阵和路径所有权。
15
+ 按适用性补充接口接缝、不变量、失败行为和低影响假设;上游已有合同直接引用。仅在顺序影响安全或正确性时记录执行路线,不要求固定步数。
16
16
 
17
17
  ### Deep
18
18
 
19
19
  任一条件触发:公共 API、schema、wire format、数据迁移、认证授权、隐私、资金、不可逆操作、expand-contract、共享核心路径、多个 implementation owner 的跨 Ticket 写入协调、多个实质架构方案或高事故半径。
20
20
 
21
- 额外要求:数据流或状态转换、兼容窗口、迁移顺序、可观测性、回滚、风险缓解、收缩条件和人工批准点。
21
+ 对触发 Deep 的实际风险补充数据/状态、兼容、迁移、恢复、风险缓解、收缩条件或批准点。无关维度省略;Deep 不要求每票填满所有栏目。
22
22
 
23
23
  ## 2. Ticket Definition of Ready
24
24
 
@@ -34,8 +34,8 @@ Ticket 只有同时满足以下适用条件才可设置 `ready: true`:
34
34
  - shared path 有唯一 owner;
35
35
  - 验收标准可判定;
36
36
  - 验证矩阵覆盖正常、失败和回归风险,或有可信的不适用理由;
37
- - Standard 或 Deep Ticket 有有序执行路线;
38
- - Deep Ticket 有迁移、兼容、监控、回滚和批准点,或逐项说明不适用;
37
+ - 迁移或安全操作等不可交换的顺序已明确;普通局部实现不要求预写步骤;
38
+ - Deep Ticket 的实际风险及相应迁移、兼容、恢复或批准要求已闭合;
39
39
  - 单个全新上下文可以完成,否则必须拆分。
40
40
 
41
41
  详细检查位于 `<Path>{roots.workflows}/specdev/specdev-t-tickets/references/ticket-readiness.md</Path>`。
@@ -14,6 +14,8 @@ change 的稳定身份是同一项目、领域内的 `YYYY-MM-DD-topic[-NN]` 目
14
14
 
15
15
  归档实际位置和原回执表示封存;不在 README 增加 archived、archive_path 或全局 active/archived 列表。新 archive 不嵌套月份。旧历史移动须另有明确计划,验证所有 locator 和 DESIGN 摘要;不可变正文不做路径替换。
16
16
 
17
+ 实际外部派遣的输入、报告和按需历史快照按 <Path>{roots.references}/coordination/session-files.md</Path> 保存在 <Path>{roots.state}/specdev/changes/{change}/sessions/</Path>,随 change 整体归档并进入原完整性清单;归档前仍核对 writer 已停止,不因 REPORT 显示 completed 就移动活动工作区。session 只是交接材料分组,不成为整体 Outcome 或执行状态的第二权威。引用按稳定 change 与对象内 locator 解析,历史原件不回填或清理。
18
+
17
19
  ## 唯一整体结论
18
20
 
19
21
  每个新 change README 正文恰有一行:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: code-review
3
- description: 对固定的本地文件快照或不可变 Git diff 执行隔离的标准轴与规范轴审查,供独立 C Work 和 I Work 最终审查共同调用。
3
+ description: 对固定的本地文件快照或不可变 Git diff 由未参与实现的 Agent 执行标准轴与规范轴审查,供独立 C Work 和 I Work 最终审查共同调用。
4
4
  compatibility: Requires the owning Speculo workflow resources and explicit project roots.
5
5
  metadata: {"speculo-source-id": "specdev-code-review"}
6
6
  ---
@@ -9,11 +9,11 @@ metadata: {"speculo-source-id": "specdev-code-review"}
9
9
 
10
10
  本 Skill 返回审查结果,不创建 runtime namespace。调用方分别负责 C review 工件或 I Evidence。
11
11
 
12
- 采用调用方按 <Path>{roots.references}/coordination/coordination-contract.md</Path> 确定的当前 review 阶段执行方式,复用已有选择和授权;I 的实现方式不能覆盖明确的 review 阶段选择。未明确指定时使用当前宿主实际具备的 reviewer 能力,兼容 App、CLI 等;明确指定 CLI 交互等方式时按选择执行,选择 Herdr 才通过项目内 Herdr Skill 交接。两轴输入隔离、只读范围和独立审查要求在各方式下相同;能力不足时报告未验证或阻塞,不能用自审冒充独立 reviewer。task 上下文只执行所分配的轴,不再启动另一轮编排。
12
+ 采用调用方按 <Path>{roots.references}/coordination/coordination-contract.md</Path> 确定的 review 阶段方式。默认派遣一位未参与当前范围实现的原生 subagent,分别完成两轴;实际需要可拆成两位。已选择 Herdr/Orca/CLI 的任务沿该方式派遣,明确 review 阶段选择优先。能力不足或独立身份不明时阻塞完成,不能由实现者自审替代。task 上下文仅执行已分配轴,不递归派遣。
13
13
 
14
14
  ## 输入
15
15
 
16
- 默认 diff 模式使用下列 fixed_point/head/diff/log。C 显式本地文件分支使用 `review_mode: source-files` 与 `source_snapshot`(路径/原始字节 SHA256);不提供虚假的 Git 字段。两种模式均须提供相同的规范、标准、范围与隔离输入,I 最终审查保留 diff 模式。
16
+ 默认 diff 模式使用下列 fixed_point/head/diff/log。C 显式本地文件分支使用 `review_mode: source-files` 与 `source_snapshot`(路径/原始字节 SHA256);不提供虚假的 Git 字段。各模式均提供规范、标准、范围和独立身份。I 未提交 Direct Spec 使用 `review_mode: working-tree`,按 <Path>{roots.workflows}/specdev/common/skills/code-review/references/working-tree-review.md</Path> 固定完整交付快照。
17
17
 
18
18
  - `fixed_point`:已解析的 commit SHA;
19
19
  - `head`:已解析的 HEAD/checkpoint SHA;
@@ -22,17 +22,19 @@ metadata: {"speculo-source-id": "specdev-code-review"}
22
22
  - `spec_sources`:零个或多个本地权威来源;
23
23
  - `standards_sources`:仓库编码标准来源;
24
24
  - `review_context`:路径范围、调用 Work 和适用授权;
25
- - `parallel_reviewers`:平台支持时为 true,否则使用两个独立上下文包顺序执行。
25
+ - 实现者真实身份、所选 review 方式与实际派遣凭据;默认一位独立 reviewer,需要时分别派遣两轴。
26
26
 
27
27
  ## 流程
28
28
 
29
29
  1. diff 模式重验 fixed point/head、实际 diff 语义和摘要;无效引用不启动 reviewer。合法空 diff 由调用方返回 no-diff,不伪造 approved 或复用非空报告。显式范围不得回退为默认三点比较。source-files 模式重验固定路径与原字节,不推断历史 diff 或 commit。
30
30
  2. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/source-discovery.md</Path>`,穷尽规范和标准来源。
31
- 3. 发现已有审查并拟复用时,先读取 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/result-reuse.md</Path>`,完整核对输入、两轴隔离与原始证据;能证明相同的轴保留原结果,其余轴按下列步骤运行;未能证明相同就正常重审两轴。
31
+ 3. 发现已有审查并拟复用时,先读取 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/result-reuse.md</Path>`,完整核对输入、审查者独立性与原始证据;能证明相同的轴保留原结果,其余轴按下列步骤运行;未能证明相同就正常重审两轴。
32
32
  4. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/fowler-smells.md</Path>` 作为标准轴最低启发式;仓库明确标准优先。
33
33
  5. 用户要求全面审查或触及安全、数据迁移、公共契约、并发和恢复时,先加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/risk-review.md</Path>`,覆盖全部适用风险,不限制 finding 数量。
34
- 6. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/reviewer-contracts.md</Path>`,用互不共享发现的上下文分别运行两个轴。
35
- 7. 原顺序返回 `standards` 和 `specification` 两份结果。规范来源不存在时只跳过规范轴并解释,标准轴继续。
34
+ 6. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/reviewer-contracts.md</Path>`,实际派遣未参与实现的 Agent,分别运行两个轴。
35
+ 7. 原顺序返回 `standards` 和 `specification` 两份结果。C 规范来源确实不存在时只跳过规范轴并解释,标准轴继续;I 缺少权威规范则阻塞,不允许跳过后完成。
36
+
37
+ 8. 按 <Path>{roots.workflows}/specdev/common/skills/code-review/references/review-evidence.md</Path> 返回固定输入、原始报告、真实 reviewer 身份和工具凭据,由 Lead 核验并写入原 owning 工件。
36
38
 
37
39
  ## 输出
38
40
 
@@ -43,6 +45,7 @@ source-files 结果以 `review_mode` 和 `source_snapshot` 代替下例 Git 字
43
45
  fixed_point, head, diff_command, commit_log,
44
46
  standards: { result, findings, sources },
45
47
  specification: { result, findings, sources },
48
+ reviewers, implementers, dispatch_receipts,
46
49
  skipped_axes,
47
50
  summary_counts
48
51
  }
@@ -54,7 +57,7 @@ Finding 必须包含 severity、项目相对 Path/代码块、具体风险、依
54
57
 
55
58
  - diff 的 fixed point、head、diff、commits 或 source-files 的原字节快照固定且可重复;
56
59
  - 仓库标准优先于 Fowler 启发式;
57
- - 两个 reviewer 上下文没有相互发现污染;
60
+ - 每个 reviewer 均未参与本范围实现;两轴分别判断并返回,有真实派遣与原始结果证据;
58
61
  - 每个发现可定位且说明行为风险;
59
62
  - 两轴按固定顺序返回,缺失规范没有掩盖标准审查。
60
63
 
@@ -4,12 +4,12 @@
4
4
 
5
5
  | 必须相同并可回读 | 核对证据 |
6
6
  |---|---|
7
- | review_mode、实际比较或文件范围 | diff 模式的 fixed_point/head、不可变 SHA、diff 摘要与 commit 范围(legacy 默认三点);source-files 的路径与原字节摘要;不可跨模式复用 |
7
+ | review_mode、实际比较或文件范围 | diff 模式的 fixed_point/head、不可变 SHA、diff 摘要与 commit 范围(legacy 默认三点);source-files 的路径与原字节摘要;working-tree 的基线、完整范围与实际工作副本快照;不可跨模式复用 |
8
8
  | 规范、标准、ADR 和适用项目指令 | 稳定来源路径、原始字节摘要与明确范围 |
9
9
  | review Skill 与当前触发的全部参考 | ID、入口/参考字节摘要、风险分支与跳过理由 |
10
10
  | 与结论相关的工具、测试环境、配置 | 实际版本/配置摘要与观察证据;未记录不能宣称相同 |
11
- | 两轴隔离及执行结果 | 原 reviewer 输入、独立 findings、原验证输出及其 locator |
11
+ | 审查独立性及执行结果 | 实际实现者/reviewer 身份、派遣/返回与 Lead 核验、原输入、两轴 findings 和原验证输出 locator |
12
12
 
13
- Lead 必须回读真实原报告和证据;相同文件名、报告“通过”文字、相同 HEAD 或结构校验均不足。任一输入变化、缺失、不可解析或来源不明,重跑受影响轴;无法证明两轴输入独立时重跑两轴。新风险范围必须完整审查,不因复用缩减 finding 数量。
13
+ Lead 必须回读真实原报告和证据;相同文件名、报告“通过”文字、相同 HEAD 或结构校验均不足。任一输入变化、缺失、不可解析或来源不明,重跑受影响轴;无法证明 reviewer 未参与实现时重跑两轴。新风险范围必须完整审查,不因复用缩减 finding 数量。
14
14
 
15
15
  复用保持原结果与来源,不能把 request-changes、skipped:no-spec 或未测结果改成 passed。有 change 的正式 C 仍创建自己的新 CR 报告并引用原证据;会话文件审查只返回本次结果;I 仍由 Lead 写入本票 Evidence,旧报告/旧完成证据不覆盖。复用报告不跳过当前 workspace/集成/E2E/授权检查,不新增全局缓存、状态树或完成捷径。
@@ -0,0 +1,44 @@
1
+ # 独立审查证据
2
+
3
+ 供 C、I 和最终集成审查使用。只在原 CR、I Evidence、轻量 README 或原整体 Evidence 中记录,不创建 Agent 注册表、状态镜像或完整聊天副本。外部派遣复用已有 TASK/REPORT;原生工具可把必要原始输出及 Lead 核验摘录保存在同一 Markdown 的独立锚点。工具提供的真实身份统一写成 `provider:agent-or-session-id`,如原生工具句柄;不得使用任意角色名或 session 目录名代替。
4
+
5
+ ## 冻结输入
6
+
7
+ 在报告中建立独立的 `review-input` 锚点,用一个 JSON 对象保存 `scope`(review-scope 的完整原始返回值)、`sources` 和适用的 `exclusions`。sources 每项为 `kind: standards|specification|instructions`、项目根相对 `locator` 和实际 UTF-8 原文字节的 `sha256`。locator 可带显式锚点;轻量 README 只摘要其 scope/acceptance 等合同段,不能摘要包含审查记录的整份 README。来源必须覆盖本轮实际规范、标准及适用指令。
8
+
9
+ `Input-SHA256` 为该对象经 JSON.parse 后再 JSON.stringify 的 UTF-8 SHA256,由工具计算,不手写猜测。将同一对象及摘要交给 reviewer。摘要证明输入一致,不证明审查真的发生。
10
+
11
+ 未提交的 Direct Spec 先读取 <Path>{roots.workflows}/specdev/common/skills/code-review/references/working-tree-review.md</Path>。Git diff 使用实际工具返回的不可变端点;规范/标准和相关指令变化也会使受影响结论失效。
12
+
13
+ ## 最小记录
14
+
15
+ 下列字段和表头置于原 owning 工件;locator 相对当前 change。无 change 时返回相同信息和真实工具输出,沿调用方原报告位置保存,不为审查制造 change。
16
+
17
+ ```markdown
18
+ ## Independent Review
19
+
20
+ Input: evidence/T-01.md#review-input
21
+ Implementers: provider:actual-implementation-session
22
+ Mode: native
23
+ Verified-By: provider:actual-lead-session
24
+ Verification: evidence/T-01.md#review-receipt
25
+
26
+ | Axis | Reviewer | Result | Report |
27
+ |---|---|---|---|
28
+ | standards | provider:actual-review-session | pass | evidence/T-01.md#standards-output |
29
+ | specification | provider:actual-review-session | pass | evidence/T-01.md#specification-output |
30
+ ```
31
+
32
+ Mode 为 native/herdr/orca/cli。Implementers 包含本范围全部实现及修复者;Lead 参与实现也列入。每轴 Report 指向 reviewer 实际输出的独立段,含 `Reviewer`、`Axis`、`Result`、`Input-SHA256`、`Observed` 字段及具体 findings/依据。不能指回汇总表自证。请求修正或未验证不得改写为 pass;原报告不覆盖。
33
+
34
+ Verification 指向 Lead 回读真实派遣和返回事实后的独立核验段,含 `Verified-By`、`Mode`、`Reviewers`(逗号分隔真实身份)、`Input-SHA256`、`Result: verified`、`Observed`。Observed 说明工具返回的实际身份、派遣/返回定位、只读范围和核验事实;工具不提供的事实保持未验证。需要深查时沿原历史会话 locator 检索,不以 JSONL 文件存在代替审查。
35
+
36
+ ## 完成与复用
37
+
38
+ 完成前回读输入、原报告和工具核验。实现范围内的 reviewer 不独立;一轴失败或 I 缺规范都阻塞完成。改变角色名或重新开启同一实现者的上下文不能绕过。
39
+
40
+ 单票结果以本票实际 checkpoint 为准。多个实现单元组合或冲突修正后,Lead 对实际最终整体范围调用同一独立审查能力,在 <Path>{roots.state}/specdev/changes/{change}/evidence/final-review.md</Path> 记录;跨 change 父编排使用原 <Path>{roots.state}/specdev/changes/{change}/evidence/implementation-orchestration.md</Path>。单 Direct Spec/单票最终输入完全相同可沿用原 Evidence;候选变化先补审再推进父分支或宣布完成。整体输入以最初实施基线为起点,覆盖所有成员实际交付,不只审最后一票。
41
+
42
+ C 可以只审明确的不可变 commit;I 完成时还必须确认实际工作副本与该交付一致。存在未提交代码时转入 working-tree 审查,不能沿用旧 commit 的通过结论。原 change 的 Markdown 执行记录可在审查后更新;规范与标准段仍需摘要一致。父编排的输入包含原 Implementation Plan/Map 和各成员 Spec,并纳入成员实际实现/冲突修复者及共同起始基线。纯学习或 triage 调查依据原 Ownership/Work 和非实现产物判定,附加 learning 索引不能豁免实现审查。
43
+
44
+ 旧报告可只读展示;作为本轮完成或复用依据时,缺少独立性与固定输入证据就重新审查。静态校验仅验证记录、原文匹配和版本一致性,真实执行仍由 Lead 核对工具事实;工具不可用不能从格式通过推导完成。
@@ -1,13 +1,25 @@
1
- # Isolated Reviewer Contracts
1
+ # 独立双轴审查
2
+
3
+ ## 派遣与身份
4
+
5
+ 默认派遣一位未参与当前审查范围实现的原生 subagent,分别给出标准轴和规范轴结果。实际需要并行时可派遣两位。沿调用方确定的 review 阶段方式执行:明确选择 Herdr/Orca/CLI 时用该工具派遣,并保存真实工具返回的 Agent/会话标识;编排方式与工作区独立。
6
+
7
+ 实现者包括当前范围的代码、配置、模型可见指令及修复/冲突解决的所有 Agent。实现者运行测试和自查是实现活动,不能作为独立审查。改名、切换角色或重置上下文不改变参与过实现这一事实。Reviewer 只读审查对象,返回 findings;参与修复后必须另派独立 reviewer。
8
+
9
+ 无法获得独立 Agent、身份无法核实或指定工具不可用时,报告 blocked/unverified,保持完成门关闭。不得用当前实现者顺序扮演两个角色替代派遣。task 上下文只执行分配的一个或两个轴,不递归编排;Lead 核对工具事实并维护正式 Evidence。
2
10
 
3
11
  ## 标准轴
4
12
 
5
- 输入仅包含固定 diff/log(source-files 为固定文件快照)、标准来源和 Fowler baseline。报告仓库规则违规和判断性 smell,引用来源与代码块,区分 hard violation 与 heuristic,并跳过工具链已强制执行的纯格式项。
13
+ 依据固定 diff/log 或完整工作副本/文件快照、仓库标准和 Fowler baseline,检查正确性、可维护性及适用风险。引用来源与代码块,区分 hard violation 和 heuristic,跳过工具链已强制执行的纯格式项。
6
14
 
7
15
  ## 规范轴
8
16
 
9
- 输入仅包含固定 diff/log(source-files 为固定文件快照)与规范来源。报告缺失或不完整需求、超出范围行为和语义/失败/边界错误,并引用具体规范来源。
17
+ 依据同一固定代码输入和实际规范,检查缺失或不完整需求、超范围行为、失败与边界语义;引用具体 AC、合同或决定。
18
+
19
+ ## 结果
20
+
21
+ 同一 reviewer 可以读取两轴依据,但必须分别判断并按 standards、specification 顺序返回,不用一轴结论替代另一轴。两位 reviewer 时分别派发所属轴,汇总前不共享 findings。汇总者只整理格式,不删除或跨轴合并、重排发现,不设置任意字数或 finding 上限。
10
22
 
11
- ## 隔离与结果
23
+ 每轴返回 `pass | request-changes | skipped`。标准轴不可跳过;C 经来源发现确认没有规范时可 `skipped:no-spec`,不能宣称完整双轴通过。I 始终有 Spec/Ticket 或轻量 README 合同,两轴必须 pass。
12
24
 
13
- 平台支持独立 reviewer 时可并行;否则创建两个不共享发现的完整输入包并顺序执行。汇总者只整理格式,不删除、合并或跨轴重排 finding。每轴独立返回 `pass | request-changes | skipped`;一轴通过不抵消另一轴失败。
25
+ 执行与复用都按 <Path>{roots.workflows}/specdev/common/skills/code-review/references/review-evidence.md</Path> 保存独立性和固定输入证据。
@@ -0,0 +1,15 @@
1
+ # 未提交工作副本审查
2
+
3
+ I 的 Direct Spec current 未获提交授权时使用本分支。它覆盖实际交付差异,不以 HEAD 代替未提交内容;C 的 source-files 仍只承诺指定文件阅读。
4
+
5
+ 1. 停止相关 writer,回读实施前 Git 基线、原有 dirty 改动、当前授权写集与实际变更。确认项目 Git 根;无已存在的基线、冲突 index、不可读取文件或不支持的子模块时保持未验证,不伪造提交。
6
+ 2. 调用以下只读工具。`--file` 可重复,使用已核对的完整交付文件清单,包含删除路径;不传时覆盖相对基线的全部实际变化和非忽略未跟踪文件。只读冻结不创建 commit、不暂存、不修改 index。
7
+ 3. 保存完整返回值,审查 `working_snapshot` 的新增/修改/删除/类型及权限变化。`tracked_diff_command` 只展示 Git 已跟踪部分;新增文件读取快照对应实际字节,删除读取基线对象,二进制和符号链接分别检查实际格式/链接语义。不得因为 diff 为空忽略未跟踪新增。
8
+ 4. 使用显式范围时回读 `excluded_paths`,在输入 exclusions 中说明原有用户改动、报告等排除依据;实现范围不能排除。审查输入、原报告和 Evidence 本身放在范围外,避免自引用。原有改动不自动成为本轮可写内容。
9
+ 5. 交给未参与实现的 reviewer,结束及完成声明前重跑相同选择并核对全部范围内字节、模式、基线和 index。显式范围外新增的报告不使代码审查失效,但 Lead 仍须核实没有遗漏实现。发生范围内漂移、规范/标准/指令变化或新实现文件,重建输入并补审。
10
+
11
+ ```bash
12
+ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --review-scope --repo <project-root> --mode working-tree --base <implementation-baseline-sha> --file <project-relative-file>
13
+ ```
14
+
15
+ 输出的 observed_head 只记录观察到的 Git HEAD,working_snapshot/input_sha256 才标识未提交内容。无法验证的二进制、生成物或外部环境如实报告,不宣称两轴或整个 change 已完成。
@@ -35,6 +35,8 @@
35
35
 
36
36
  每条命令记录运行环境 `parent-candidate`、退出码与摘要。E2E required 未运行或失败时 integration `verification=failed`、`status=failed`;父分支保持 `parent_before_sha`。当本轮失败使 attempts 达到有效执行合同的 `integration_attempt_limit` 时,保存本轮失败并返回 Lead 复盘;不得继续机械修正、放宽断言、删除检查或发明行为。上限是 Lead 复盘触发点,不是永久禁止恢复。
37
37
 
38
+ 候选的代码、规范或相关配置与已审输入不同,尤其发生合并或冲突修正时,按 <Path>{roots.workflows}/specdev/common/skills/code-review/references/review-evidence.md</Path> 在此实际 candidate 上完成独立双轴审查。修正合并冲突的 Lead/Agent 也属于实现者;两轴通过前不得推进。完全相同的输入沿原证据复用门核对,不以 source 检查代替 candidate 审查。
39
+
38
40
  ## 4. 推进父分支
39
41
 
40
42
  全部 required 检查通过后:
@@ -46,6 +46,8 @@ node <Path>{roots.workflows}/specdev/common/tools/ticket-control.mjs</Path> --ma
46
46
 
47
47
  `<Path>{roots.workflows}/specdev/common/tools/plan-contract.mjs</Path>` 是两个工具共用的只读校验库:新 Ticket 的真实 Skill 名称/摘要、必需调用证据、Map 数量合同、父入口与 W 候选图。普通 --repo 仍支持原 Git 事实验证;存在未完成票的真实项目 Skill 绑定时必须提供项目根。Ticket/Map 必须满足当前 Plan 合同;已完成历史证据不要求当前 Skill 包仍与历史版本相同。
48
48
 
49
+ `--stage complete` 与移动前的 `--stage archive-ready` 对实现型终点校验独立审查:实际实现者与 reviewer 身份、两轴原报告、Lead 工具核验、固定范围及权威规格来源必须一致。轻量完成预检只核对 AC/owner,代码交付仍进入完整门;学习、复盘和取消使用各自终点。已归档材料按历史读取,不以当前代码重做旧审查。格式校验不能证明真实 Agent 调用。
50
+
49
51
  ## 专业分支与审查固定点
50
52
 
51
53
  原 change 校验支持 `--engineering performance|documentation|incident`,要求对应原 owner 工件中的标记证据;不传时仍检查已经存在的标记。字段见 <Path>{roots.workflows}/specdev/common/rules/engineering-evidence.md</Path>。历史无标记工件不强制回填,所有路径只读。
@@ -69,3 +71,9 @@ UI 原型阶段用 --stage prototype --prototype-id UI-NNN;逻辑原型可指
69
71
  本地完成使用 `--stage complete`;移动前使用 `--stage archive-ready`,额外核验本次实际请求的外部交付。A 完成现役维护后最后无覆盖移动,再以 `--stage archived` 核验唯一目标与原回执;`moved` 结果明确尚未封存,原 A8 回执完成后用 `--stage archived --sealed` 验证。回执导航与完整移动清单依 <Path>{roots.workflows}/specdev/specdev-a-archive-and-consolidate/references/archive-receipt-contract.md</Path>,不能创建第二份报告。
70
72
 
71
73
  历史已完成/已归档包不自动重写;旧 v6 归档只读解析原完整 schema、身份和位置,不凭 archived 枚举批准新的 implemented 晋升。旧活动 UI 包应保留为证据,按 v3 新建 UI 编号、生成新 HTML/浏览器证据并重新确认。不能只把旧 schema 数字或 ready 标记改成新版。
74
+
75
+ ## 未提交交付的只读审查范围
76
+
77
+ `--review-scope --repo <project-root> --mode working-tree --base <baseline-sha> [--file <relative-path> ...]` 固定真实 Git 根的工作副本。无 file 参数覆盖全部相对基线的变化和非忽略新增;显式 file 包含删除路径,排除项返回供 Lead 核对。输出保留已暂存/未暂存状态、实际内容摘要、类型、模式、链接、基线和观察到的 HEAD,不写项目文件、commit 或 index。
78
+
79
+ 新增文件必须按 working_snapshot 阅读,不能只看 tracked_diff_command。子模块、冲突 index、越界或目录链接保持未验证。停止 writer 后固定输入,结束与完成前重验;显式范围外新增报告不使代码摘要自引用,遗漏实现仍由 Lead 的完整范围审计阻塞。详见 <Path>{roots.workflows}/specdev/common/skills/code-review/references/working-tree-review.md</Path> 与 <Path>{roots.workflows}/specdev/common/skills/code-review/references/review-evidence.md</Path>。
@@ -148,6 +148,9 @@ export function validateChangeClosure({context, change, forArchive = false}) {
148
148
  const independent = ['spec.md','ticket','tickets-map.md','implementation-plan.md','implementation-map.md','retro',...(!lightweightGoal ? ['goal-plan.md'] : [])].some(name => existsSync(join(root, name)));
149
149
  const complex = independent || readChangeExecution(root).length > 0 || ['DESIGN.md','prototypes'].some(name => existsSync(join(root,name)));
150
150
  scope = complex ? 'complex-preflight' : 'lightweight';
151
+ // AC checks are preflight only. The full validator distinguishes actual
152
+ // implementation from learning/triage using original Work ownership.
153
+ scope = 'complex-preflight';
151
154
  if (!independent && facts.outcome === 'completed') {
152
155
  validateLightweightCompletion(root, errors);
153
156
  if (lightweightGoal) {
@@ -123,9 +123,8 @@ export function validateTicketPlan(artifact, { repoRoot = null, requirePlan = fa
123
123
  if (meta.plan_contract_version !== 1) errors.push('unsupported plan_contract_version');
124
124
  errors.push(...validateBindings(meta, repoRoot));
125
125
  if (!strings(meta.resource_claims) || new Set(meta.resource_claims).size !== meta.resource_claims.length) errors.push('resource_claims must be a unique string array');
126
- if (meta.ready === true || ['in_progress','review','done'].includes(meta.status)) {
127
- for (const heading of ['## 11. SKILL 调用计划', '## 12. 停止、检查点与交付']) if (!body.includes(heading)) errors.push(`ready Plan Ticket missing '${heading}'`);
128
- }
126
+ // Skill invocation is enforced by the structured bindings and real completion
127
+ // records below, not by repeating generic instructions in every Ticket body.
129
128
  if (checkEvidence && meta.status === 'done' && meta.skill_bindings?.some(binding => binding?.required === true)) {
130
129
  try {
131
130
  const evidencePath = join(dirname(dirname(path)), 'evidence', `${meta.id}.md`);