depa-codument 0.4.1
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/LICENSE +21 -0
- package/README.md +262 -0
- package/package.json +63 -0
- package/src/cli/commands/archive.ts +519 -0
- package/src/cli/commands/decisions.ts +123 -0
- package/src/cli/commands/engineering.ts +105 -0
- package/src/cli/commands/init.ts +54 -0
- package/src/cli/commands/list.ts +73 -0
- package/src/cli/commands/modeling.ts +105 -0
- package/src/cli/commands/show.ts +238 -0
- package/src/cli/commands/status.ts +140 -0
- package/src/cli/commands/upgrade-track.ts +385 -0
- package/src/cli/commands/upgrade-workspace.ts +138 -0
- package/src/cli/commands/validate.ts +330 -0
- package/src/cli/engineering/config.ts +68 -0
- package/src/cli/engineering/lint.ts +58 -0
- package/src/cli/engineering/merge.ts +172 -0
- package/src/cli/engineering/registry.ts +230 -0
- package/src/cli/engineering/schema.ts +126 -0
- package/src/cli/engineering/validate.ts +286 -0
- package/src/cli/index.ts +136 -0
- package/src/cli/modeling/config.ts +68 -0
- package/src/cli/modeling/lint.ts +58 -0
- package/src/cli/modeling/merge.ts +172 -0
- package/src/cli/modeling/registry.ts +229 -0
- package/src/cli/modeling/schema.ts +160 -0
- package/src/cli/modeling/validate.ts +282 -0
- package/src/cli/utils/index.ts +941 -0
- package/src/cli/utils/install.ts +291 -0
- package/src/cli/utils/spec-xml.ts +673 -0
- package/src/cli/utils/track-time.ts +75 -0
- package/src/cli/utils/vfs.ts +102 -0
- package/src/templates/codument/README.md +59 -0
- package/src/templates/codument/attractors/product.md +17 -0
- package/src/templates/codument/attractors/project.md +10 -0
- package/src/templates/codument/backlog/README.md +33 -0
- package/src/templates/codument/config/attractor-profiles.xml +31 -0
- package/src/templates/codument/config/engineering.xml +22 -0
- package/src/templates/codument/config/modeling.xml +22 -0
- package/src/templates/codument/config/operation-hooks.xml +55 -0
- package/src/templates/codument/memory/README.md +13 -0
- package/src/templates/codument/missions/README.md +125 -0
- package/src/templates/codument/sop/README.md +14 -0
- package/src/templates/codument/std/AGENTS.md +82 -0
- package/src/templates/codument/std/attractors/depa-attractor.md +572 -0
- package/src/templates/codument/std/attractors/knowledge-tiers.md +128 -0
- package/src/templates/codument/std/attractors/model-driven-docs.md +293 -0
- package/src/templates/codument/std/attractors/project-memory.md +48 -0
- package/src/templates/codument/std/docs-impl-fractal/index.md +110 -0
- package/src/templates/codument/std/docs-modeling-fractal/index.md +156 -0
- package/src/templates/codument/std/kernel-pointer.md +19 -0
- package/src/templates/codument/std/operations/README.md +30 -0
- package/src/templates/codument/std/operations/_operation-spec.md +41 -0
- package/src/templates/codument/std/operations/archive-mission.md +66 -0
- package/src/templates/codument/std/operations/archive-track.md +238 -0
- package/src/templates/codument/std/operations/artifact-sync.md +172 -0
- package/src/templates/codument/std/operations/discuss-phase.md +214 -0
- package/src/templates/codument/std/operations/discuss.md +87 -0
- package/src/templates/codument/std/operations/docs-bootstrap.md +148 -0
- package/src/templates/codument/std/operations/gap-loop.md +301 -0
- package/src/templates/codument/std/operations/impl-mission.md +167 -0
- package/src/templates/codument/std/operations/impl-quick.md +79 -0
- package/src/templates/codument/std/operations/impl-track.md +537 -0
- package/src/templates/codument/std/operations/migrate.md +337 -0
- package/src/templates/codument/std/operations/plan-mission.md +230 -0
- package/src/templates/codument/std/operations/plan-track-wave.md +231 -0
- package/src/templates/codument/std/operations/plan-track.md +579 -0
- package/src/templates/codument/std/operations/revise-track.md +136 -0
- package/src/templates/codument/std/operations/validate.md +339 -0
- package/src/templates/codument/std/operations/verify.md +184 -0
- package/src/templates/codument/std/root-agents.md +39 -0
- package/src/templates/codument/std/sop/questioning.md +98 -0
- package/src/templates/codument/std/sop/tdd.md +26 -0
- package/src/templates/codument/std/sop/validation.md +25 -0
- package/src/templates/codument/std/sop/wave-exec.md +42 -0
- package/src/templates/codument/std/sop/workflow.md +35 -0
- package/src/templates/codument/std/spec/behavior-delta.md +36 -0
- package/src/templates/codument/std/spec/behavior-registry.md +42 -0
- package/src/templates/codument/std/spec/engineering-delta.md +68 -0
- package/src/templates/codument/std/spec/engineering-node-schema.md +86 -0
- package/src/templates/codument/std/spec/engineering-registry.md +82 -0
- package/src/templates/codument/std/spec/flow-notation.md +93 -0
- package/src/templates/codument/std/spec/folder-manifest.md +99 -0
- package/src/templates/codument/std/spec/mission-xml-spec.md +249 -0
- package/src/templates/codument/std/spec/modeling-delta.md +85 -0
- package/src/templates/codument/std/spec/modeling-node-schema.md +183 -0
- package/src/templates/codument/std/spec/modeling-registry.md +49 -0
- package/src/templates/codument/std/spec/track-xml-spec.md +272 -0
- package/src/templates/codument/std/spec/xnl-format.md +301 -0
- package/src/templates/codument/workflows/README.md +15 -0
- package/src/templates/manifest.ts +177 -0
- package/src/templates/skills/README.md +38 -0
- package/src/templates/skills/codument-archive/SKILL.md +17 -0
- package/src/templates/skills/codument-archive-mission/SKILL.md +17 -0
- package/src/templates/skills/codument-archive-track/SKILL.md +17 -0
- package/src/templates/skills/codument-artifact-sync/SKILL.md +17 -0
- package/src/templates/skills/codument-code-quality-score/SKILL.md +67 -0
- package/src/templates/skills/codument-decision-tree/SKILL.md +40 -0
- package/src/templates/skills/codument-discuss/SKILL.md +17 -0
- package/src/templates/skills/codument-discuss-phase/SKILL.md +17 -0
- package/src/templates/skills/codument-docs-bootstrap/SKILL.md +17 -0
- package/src/templates/skills/codument-gap-loop/SKILL.md +17 -0
- package/src/templates/skills/codument-impl-mission/SKILL.md +17 -0
- package/src/templates/skills/codument-impl-quick/SKILL.md +17 -0
- package/src/templates/skills/codument-impl-track/SKILL.md +17 -0
- package/src/templates/skills/codument-implement/SKILL.md +14 -0
- package/src/templates/skills/codument-migrate/SKILL.md +17 -0
- package/src/templates/skills/codument-modeling-engineering-e2e/SKILL.md +74 -0
- package/src/templates/skills/codument-plan-mission/SKILL.md +17 -0
- package/src/templates/skills/codument-plan-track/SKILL.md +17 -0
- package/src/templates/skills/codument-plan-track-wave/SKILL.md +17 -0
- package/src/templates/skills/codument-revise-track/SKILL.md +17 -0
- package/src/templates/skills/codument-track/SKILL.md +14 -0
- package/src/templates/skills/codument-validate/SKILL.md +17 -0
- package/src/templates/skills/codument-verify/SKILL.md +17 -0
- package/src/types/text-assets.d.ts +9 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
# skill: codument-plan-track(创建变更追踪)
|
|
2
|
+
|
|
3
|
+
为一个新功能 / Bug 修复 / 变更创建一条 **Track**:引导用户收集信息,生成行为增量(`behavior_deltas/<capability>/delta.xml`)、提案(`proposal.md`)、可选方案设计(`design.md`),以及状态真源 `track.xml`,并把它们组织在专用的 `tracks/<id>/` 目录中等待批准。
|
|
4
|
+
|
|
5
|
+
> 本文以 **Markdown 为主**:何时建 track、每步问什么、产物长什么样、各种规则与示例都用 prose / 列表 / 表格 / good-bad 示例完整给出。只有**程序化的控制流**(新建 track 的固定顺序、同轮确认的写入分支)用流程标记块(` ```text ` + `@delimiter: --`,构造词汇见 `_operation-spec.md`)表达;XML 片段用 ` ```xml ` 围栏内嵌(免转义)。
|
|
6
|
+
>
|
|
7
|
+
> 口径映射(旧→新,全文一致):`codument:track`/旧 `codument-track`→`codument-plan-track`;`list --specs`→`list --behaviors`;`plan.xml`→`track.xml`(根 `<Track xmlns:cdt>`,phase = `<TaskSpace>` 第一层 `<TaskGroup>`,状态枚举 `NOT_STARTED/ACTIVE/DONE…`);`spec_deltas/`→`behavior_deltas/`、`spec://`→`behavior://`、`<spec-patch>`→`<behavior-patch>`、`specs/`→`behaviors/`,"spec"→"behavior";`<validation_mode>`/`<confirm>`→`<cdt:GapLoop>`/`<cdt:HumanConfirm>` 节点;`<attractor-check>`→`<cdt:AttractorCheck use="coding|docs">`;`feature.json` 能力开关→profile 的 `enabled`。track.xml 完整口径见 `codument/std/spec/track-xml-spec.md`,track 目录布局见其 §0.5。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 0. 意图、触发与产物
|
|
12
|
+
|
|
13
|
+
**意图。** 为一个新功能 / 变更建 track:收集信息 → 起草行为增量与 `track.xml` → 同轮收集提交模式 / 校验模式 / 方向审查 → 等待批准。**提案获批前不开始实现。**
|
|
14
|
+
|
|
15
|
+
**何时建 track(trigger)。** 下列情况建 track:
|
|
16
|
+
|
|
17
|
+
- 新增功能 / 能力
|
|
18
|
+
- 破坏性变更(API、数据结构)
|
|
19
|
+
- 架构 / 模式调整
|
|
20
|
+
- 改变行为的性能优化
|
|
21
|
+
- 安全模式更新
|
|
22
|
+
|
|
23
|
+
下列情况**跳过 track**,直接做:
|
|
24
|
+
|
|
25
|
+
- 恢复既有预期行为的 Bug 修复
|
|
26
|
+
- 拼写、格式、注释
|
|
27
|
+
- 非破坏性依赖更新
|
|
28
|
+
- 纯配置变更
|
|
29
|
+
- 为既有行为补测试
|
|
30
|
+
|
|
31
|
+
补充需求若落在某条进行中 track 的范围内,**并入该 track**,不另开。决策树:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
新请求?
|
|
35
|
+
├─ 恢复规范行为的 Bug 修复?→ 直接修复
|
|
36
|
+
├─ 拼写 / 格式 / 注释? → 直接修复
|
|
37
|
+
├─ 新功能 / 能力? → 创建 track
|
|
38
|
+
├─ 破坏性变更? → 创建 track
|
|
39
|
+
├─ 架构变更? → 创建 track
|
|
40
|
+
└─ 不确定? → 创建 track(更安全)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**产物(写入 `codument/tracks/<id>/`)。**
|
|
44
|
+
|
|
45
|
+
| 产物 | 必有? | 内容 |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| `track.xml` | ★必有 | 状态真源(结构 / 调度 / 行为三轴,见 track-xml-spec) |
|
|
48
|
+
| `proposal.md` | ★必有 | 为什么 / 是什么 / 目标-非目标 / 变更内容 / 影响 |
|
|
49
|
+
| `behavior_deltas/<cap>/delta.xml` | ★必有 | 行为增量(`<behavior-patch>`) |
|
|
50
|
+
| `design.md`(+`design/`) | 可选 | 方案 / 决策摘要 / 风险 / 兼容 / 迁移 |
|
|
51
|
+
| `analysis/{findings,knowledge}.md` | 按需 | 规划期 planning-with-files 外部记忆 |
|
|
52
|
+
| `decisions.md`(+`decisions/`) | 按需 | 决策问题 / 选项 / 答复 / 结论 |
|
|
53
|
+
| `memory/` | 按需 | 长期记忆候选 |
|
|
54
|
+
| `reports/` | 运行期生成 | gap-loop / verify 报告 |
|
|
55
|
+
|
|
56
|
+
完整目录布局与提升时机见 `track-xml-spec.md` §0.5。
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 1. 设置检查(前置)
|
|
61
|
+
|
|
62
|
+
开始前验证 Codument 已正确初始化:
|
|
63
|
+
|
|
64
|
+
- 存在 `codument/std/`(含 `std/spec/track-xml-spec.md`、`std/sop/workflow.md`);
|
|
65
|
+
- 存在项目上下文:优先 `codument/attractors/`(如 `attractors/project.md`、`attractors/product.md`);旧项目兼容 `codument/project.md` + `codument/product.md` 组合。
|
|
66
|
+
|
|
67
|
+
任何一项缺失就**立即停止**,宣告"Codument 未设置。请先运行 `codument init` 初始化工作区。",**不要**继续建 track。
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 2. 产物的可引用范围(硬规则)
|
|
72
|
+
|
|
73
|
+
生成的产物在引用其他文件时必须遵守:
|
|
74
|
+
|
|
75
|
+
- **不可引用 `.` 开头隐藏目录**中的文档(如 `.abc/e.md`)。
|
|
76
|
+
- 每个 track 目录的内容必须**自包含**:**不可引用 track 目录之外**的说明文档(如 `doc/`、`docs/` 里的解释文档)作为读懂本 track 的必要前提。
|
|
77
|
+
- 若仅靠 `behavior_deltas/<capability>/delta.xml`、`proposal.md`、`design.md`、`track.xml` 不足以记录关键信息(如 `example.md`、`ui-ux-design.md`),可在**当前 track 目录内**额外建文件,并由上述标准产物引用之。
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 3. 新建 Track(主流程)
|
|
82
|
+
|
|
83
|
+
严格按下面顺序执行。正式进入规划前,先执行命令级前置 hook:若 `codument/config/operation-hooks.xml` 中存在 `Operation name="plan-track"` 的 `<Hook on="plan-track:before">`,按其中 hook DSL 执行。默认配置会运行 `<cdt:AttractorCheck use="coding"/>`,即读取 `config/attractor-profiles.xml` 的 `coding` profile 及其引用的 attractor,先把项目工程理念、边界和取舍装入上下文,再创建 track。`operation-hooks.xml` 缺失或没有该 hook 时按默认流程继续。
|
|
84
|
+
|
|
85
|
+
开始时先解析 questioning severity(见 `codument/std/sop/questioning.md`):**未指定时默认 `light`**;用户明确说“无问答 / 高自主 / 不要问我 / auto”时使用 `auto`。每个"起草 + 用户确认"步骤都按 severity 执行:`auto` 模式下不提问、不等待确认,改为写入假设并选择保守默认;其他模式才按 **ask-single-question-free** / **ask-multi-question-free** 提问。
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
@delimiter: --
|
|
89
|
+
-- #sequence ?create
|
|
90
|
+
---- #if ?before cond="operation-hooks.xml 为 plan-track 配了 plan-track:before(默认 <cdt:AttractorCheck use=\"coding\">)"
|
|
91
|
+
执行 plan-track:before hook;AttractorCheck 必须读取 coding profile 与其引用的 attractor,将项目理念作为后续 proposal/design/track.xml 的约束上下文
|
|
92
|
+
---- /?before
|
|
93
|
+
---- #step ?s1
|
|
94
|
+
§3.0 解析 questioning severity(默认 light;auto=无问答)并建立 decision-tree 初稿;§3.1 取得 track 描述、推断类型、加载项目上下文
|
|
95
|
+
---- /?s1
|
|
96
|
+
---- #step ?s2
|
|
97
|
+
§3.2 起 track-id、查重、按 severity 决定是否确认、建目录与 analysis/ decisions/ memory/,写 Metadata
|
|
98
|
+
---- /?s2
|
|
99
|
+
---- #step ?s3
|
|
100
|
+
§3.3 按 severity 起草 behavior_deltas/<cap>/delta.xml;auto 不确认,其他模式按需确认
|
|
101
|
+
---- /?s3
|
|
102
|
+
---- #if ?s3m cond="config/modeling.xml 存在且 enabled=true"
|
|
103
|
+
§3.3b 参考 behavior_deltas,起草 modeling_deltas/<plane>/<context>.xnl(目标态节点,XNL);记录当前 codument/modeling 的宿主 git commit 作 3-way base(写入 track 元信息)。规范见 std/spec/modeling-{registry,delta,node-schema}.md(其 §9 语言约定:描述/注释/pseudo/mermaid 标签用中文,interface/字段/kind/枚举/#id 等标识符保持英文)。modeling 未启用则跳过。
|
|
104
|
+
§3.3b 自检:写完 / 编辑 modeling_deltas 后,运行 `codument modeling validate --deltas <track_id>`;若报 error,按报告(file/line/layer/reason)修正 modeling_deltas 再继续,直到 0 error。本自检与 §3.3b 同样 gated on config/modeling.xml——modeling 未启用(无 config/modeling.xml 或 enabled=false)则跳过。
|
|
105
|
+
---- /?s3m
|
|
106
|
+
---- #if ?s3e cond="config/engineering.xml 存在且 enabled=true"
|
|
107
|
+
§3.3c 参考 docs-impl-fractal 与 engineering specs,起草 engineering_deltas/<plane>/<category>/<topic>.xnl(长期工程知识目标态节点,XNL);记录当前 codument/engineering 的宿主 git commit 作 3-way base(写入 track 元信息)。规范见 std/spec/engineering-{registry,delta,node-schema}.md。engineering 未启用则跳过。
|
|
108
|
+
§3.3c 自检:写完 / 编辑 engineering_deltas 后,运行 `codument engineering validate --deltas <track_id>`;若报 error,按报告(file/line/layer/reason)修正 engineering_deltas 再继续,直到 0 error。本自检与 §3.3c 同样 gated on config/engineering.xml。
|
|
109
|
+
---- /?s3e
|
|
110
|
+
---- #step ?s4
|
|
111
|
+
§3.4 起草 proposal.md;auto 不确认,其他模式按需确认
|
|
112
|
+
---- /?s4
|
|
113
|
+
---- #if ?s5 cond="满足 §3.5 的 design 触发条件"
|
|
114
|
+
§3.5 起草 decisions.md(如需)+ design.md;auto 不确认,其他模式按需确认
|
|
115
|
+
---- /?s5
|
|
116
|
+
---- #step ?s6
|
|
117
|
+
§3.6 起草 track.xml(结构 + 调度)
|
|
118
|
+
---- /?s6
|
|
119
|
+
---- #step ?s7
|
|
120
|
+
§3.7 按 severity 处理提交模式 + 校验模式(+gap-loop 粒度)+ 方向审查 → 写 Hooks;auto 使用默认值不提问
|
|
121
|
+
---- /?s7
|
|
122
|
+
---- #step ?s8
|
|
123
|
+
§3.8 收尾:validate(best-effort)+ 宣布完成与下一步
|
|
124
|
+
---- /?s8
|
|
125
|
+
-- /?create
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 3.0 Questioning severity 与 decision-tree pass
|
|
129
|
+
|
|
130
|
+
1. **解析 severity**:从用户话语 / 参数中识别 `severity=auto|light|normal|deep`;未指定时默认 `light`。
|
|
131
|
+
2. **auto(无问答)硬规则**:不得因 track-id、behavior/proposal/design/track.xml 确认、提交模式、校验模式或方向审查范围向用户提问;必须把推断依据和假设写入 `analysis/decision-tree.md` 或 `decisions.md`。
|
|
132
|
+
3. **decision-tree pass**:复杂规划先写 `analysis/decision-tree.md`,列出 Root Question、Severity、Decision Frontier、Assumptions。
|
|
133
|
+
4. **能查证就不问**:先读代码、测试、schema、config、behaviors、modeling、engineering、decisions;只有用户意图 / 不可逆 trade-off 才进入 frontier。
|
|
134
|
+
5. **默认值(auto)**:`CommitMode=manual`;默认不挂 `cdt:HumanConfirm`;每个第一层 phase 挂 `<cdt:AttractorCheck use="coding"/>`;仅当用户或上下文明确要求 gap-loop 时挂 `cdt:GapLoop`。
|
|
135
|
+
6. **轴分离**:`severity=auto` 只表示无问答高自主规划;它不等于 `CommitMode=auto`。auto severity 的提交模式默认仍是 `manual`。
|
|
136
|
+
|
|
137
|
+
### 3.1 取得描述、确定类型、加载上下文
|
|
138
|
+
|
|
139
|
+
1. **加载项目上下文**:优先读 `codument/attractors/` 下与任务相关的吸引子;旧项目无 attractors 时兼容读 `codument/project.md` + `codument/product.md`。先 `codument list` / `codument list --behaviors` 看现状,避免重复能力——**能改既有 behavior 就不要新建**。
|
|
140
|
+
2. **取得 Track 描述**:`{{args}}` 含描述则用之;为空时按 severity 处理:`auto` 模式从当前用户请求和上下文推断,不提问;其他模式问"请提供你想开始的变更追踪的简要描述(功能、Bug 修复、重构等)。"并等待回复(**ask-single-question-free**)。
|
|
141
|
+
3. **推断类型**:分析描述判定"功能"或"其他(Bug、重构等)",**不要**让用户分类。
|
|
142
|
+
|
|
143
|
+
> **提问纪律**:问答 ToolCall 只用于真实澄清 / 选择 / 确认;**禁止**为测试运行环境能力发占位问题。当前没有要问的就直接往下。
|
|
144
|
+
|
|
145
|
+
### 3.2 建目录与元信息
|
|
146
|
+
|
|
147
|
+
1. **查重**:列出 `codument/tracks/` 现有目录;若提议短名与现有重复,停止并建议换名。
|
|
148
|
+
2. **生成 Track ID**:小写英文 + 中横线的简短描述,**动词开头**(`add-`、`update-`、`remove-`、`refactor-`),如 `add-user-auth`、`fix-login-bug`。**不含日期**(日期只在归档时加);若已被占用,追加 `-2`、`-3`。
|
|
149
|
+
3. **按 severity 处理 ID 确认**:`auto` 模式直接采用生成的 track-id,并把命名依据写入 `analysis/decision-tree.md`;其他模式展示起草的 track-id —— "我已起草了新的 Track ID:`<track_id>`。这是否准确捕获了需求?请建议更改或确认。" 等待并修改至确认。
|
|
150
|
+
4. **建目录**:`codument/tracks/<track_id>/`。
|
|
151
|
+
5. **建 `analysis/`(外部记忆)**:建 `analysis/findings.md` 与 `analysis/knowledge.md`。
|
|
152
|
+
- **硬规则:仅缺失时创建,绝不覆盖已有内容**——目录已存在则不删不重写;文件已存在则绝不改写(哪怕你觉得不完整),不存在才按模板创建。
|
|
153
|
+
- 按 planning-with-files 把关键结论写入文件作为外部记忆,**避免长对话或多轮工具调用丢失重要信息**;内容必须与本 track 相关、避免泛化;不引用 `.` 开头隐藏目录。
|
|
154
|
+
- `findings.md` 记录本次分析直接找到的事实、约束、问题与结论;`knowledge.md` 记录阅读代码 / 文档 / 行为后沉淀的知识上下文、术语、机制理解与可复用认知。
|
|
155
|
+
|
|
156
|
+
`analysis/findings.md` 模板:
|
|
157
|
+
```markdown
|
|
158
|
+
# Findings
|
|
159
|
+
|
|
160
|
+
## Found Facts
|
|
161
|
+
-
|
|
162
|
+
|
|
163
|
+
## Constraints
|
|
164
|
+
-
|
|
165
|
+
|
|
166
|
+
## Open Questions
|
|
167
|
+
-
|
|
168
|
+
|
|
169
|
+
## Conclusions
|
|
170
|
+
-
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`analysis/knowledge.md` 模板:
|
|
174
|
+
```markdown
|
|
175
|
+
# Knowledge Context
|
|
176
|
+
|
|
177
|
+
## Source Notes
|
|
178
|
+
| Source | Summary | Relevance |
|
|
179
|
+
|--------|---------|-----------|
|
|
180
|
+
| | | |
|
|
181
|
+
|
|
182
|
+
## Codebase Knowledge
|
|
183
|
+
-
|
|
184
|
+
|
|
185
|
+
## Domain Knowledge
|
|
186
|
+
-
|
|
187
|
+
|
|
188
|
+
## Terms
|
|
189
|
+
| Term | Meaning |
|
|
190
|
+
|------|---------|
|
|
191
|
+
| | |
|
|
192
|
+
```
|
|
193
|
+
6. **建决策与记忆目录**(已存在则跳过):
|
|
194
|
+
- `decisions/` —— archive-ready 的 durable 单文件决策(每个长期决策一个 `.md`,归档可提升 `decision://`)。
|
|
195
|
+
- 需用户确认的过程决策仍用根级 `decisions.md` 作为评审入口。
|
|
196
|
+
- `memory/` —— 记忆上下文,按类型分子目录 `lessons/`、`incidents/`、`patterns/`、`summaries/`(归档且 `memory` profile 启用时提升 `memory://`)。
|
|
197
|
+
7. **写 Metadata**(在 `track.xml` 的 `<Metadata>`,§3.6 一并落盘):
|
|
198
|
+
|
|
199
|
+
```xml
|
|
200
|
+
<Metadata>
|
|
201
|
+
<Status>new</Status> <!-- new | in_progress | completed | cancelled -->
|
|
202
|
+
<Goal>初始目标</Goal>
|
|
203
|
+
<Description>初始描述</Description>
|
|
204
|
+
<QuestionMode>decision-tree</QuestionMode>
|
|
205
|
+
<QuestionSeverity>light</QuestionSeverity> <!-- auto | light | normal | deep;§3.0 解析所得 -->
|
|
206
|
+
<CommitMode>manual</CommitMode> <!-- §3.7 据用户选择写 auto | manual -->
|
|
207
|
+
<CreatedAt>2026-06-14T10:00:00Z</CreatedAt>
|
|
208
|
+
<UpdatedAt>2026-06-14T10:00:00Z</UpdatedAt>
|
|
209
|
+
</Metadata>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
`track-id` 是 `<Track id="...">` 根属性,不再放 Metadata(见 track-xml-spec §1–§2)。
|
|
213
|
+
|
|
214
|
+
### 3.3 交互式行为增量(XML behavior delta)
|
|
215
|
+
|
|
216
|
+
1. **说明目标**:"现在我将通过一系列问题帮你构建全面的行为规范(`behavior_deltas/<capability>/delta.xml`)。为提速,我会在一轮里给出多个问题,并用 Q1、Q2… 标记,按标记回答即可。"
|
|
217
|
+
2. **提问阶段**(**ask-multi-question-free**):按 track 类型收集 delta 细节。
|
|
218
|
+
- 参考 `codument/attractors/` 相关吸引子提**上下文感知**的问题(旧项目兼容参考 `product.md`/`project.md`);
|
|
219
|
+
- 每问给简要解释 + 清晰示例;**强烈建议**尽量给 2-3 个选项供选。
|
|
220
|
+
- **功能**:问 3-5 个问题澄清需求(功能澄清、实现方式、交互、输入/输出等),按具体请求定制。
|
|
221
|
+
- **其他(Bug / 重构等)**:问 2-3 个问题(复现步骤、重构范围、成功标准等)。
|
|
222
|
+
3. **起草 behavior delta**:按 capability 拆分,写 `codument/tracks/<track_id>/behavior_deltas/<capability>/delta.xml`。
|
|
223
|
+
|
|
224
|
+
**格式规则(必须遵守):**
|
|
225
|
+
- 根节点必须是 `<behavior-patch capability="<capability>" version="1">`。
|
|
226
|
+
- 每个变更点用 mutation wrapper 表达:`<upsert selector="behavior://...">`、`<delete selector="behavior://..." />`、`<move selector="behavior://..." to="behavior://..." />`,**不发明其他 mutation 类型**。
|
|
227
|
+
- 定位只用 `selector="behavior://<capability>/requirements/<id>/suites/<id>/cases/<id>"`;移动用 `to="behavior://..."`。
|
|
228
|
+
- 新增 / 修改用 `<upsert>`,把 `<requirement>`、`<suite>`、`<case>` 等业务节点作为其子节点;删除用 `<delete>`(无正文);移动用 `<move>`(必须给 `to`)。
|
|
229
|
+
- BDD / 测试场景用**可嵌套**的 `<suite>` 与 `<case>`;`<case>` 内用 `<given>`、`<when>`、`<then>`、可选 `<and>`。
|
|
230
|
+
- 需求正文用 `<statement>`,**不要**再用 Markdown 的 `## ADDED Requirements` / `### Requirement:` / `#### Scenario:`。
|
|
231
|
+
- 需求措辞:规范性需求用 **SHALL / MUST**(除非故意非规范,否则避免 should / may)。每个 capability 至少一个 `<requirement>`,每个可测试需求至少一个 `<case>`。
|
|
232
|
+
- 如果 `docs` profile 启用,可在相关 `<requirement>`、`<suite>` 或 `<case>` 内加可选 `<knowledge-hint target="..." href="behavior://..." strength="hint" />`,帮助后续 docs/knowledge sync 定位候选文档——它是**弱链接**(hint),不是强外键,链接失效不应默认阻断归档。`docs` profile 停用或缺失时**不生成** `knowledge-hint`,也不生成 docs 联动信息。
|
|
233
|
+
|
|
234
|
+
**示例:**
|
|
235
|
+
```xml
|
|
236
|
+
<behavior-patch capability="provider.deepseek" version="1">
|
|
237
|
+
<upsert selector="behavior://provider.deepseek/requirements/cache-support">
|
|
238
|
+
<requirement id="cache-support">
|
|
239
|
+
<statement>系统 SHALL 支持 DeepSeek provider 的前缀缓存能力。</statement>
|
|
240
|
+
<suite id="request-build" name="请求构建">
|
|
241
|
+
<case id="inject-cache-control">
|
|
242
|
+
<given>provider 为 deepseek 且 model 声明 supports_context_cache</given>
|
|
243
|
+
<when>系统构造 chat completion 请求</when>
|
|
244
|
+
<then>系统 SHALL 在静态系统提示末尾插入 cache_control 块</then>
|
|
245
|
+
<knowledge-hint target="main-docs" href="behavior://main-docs/provider.deepseek/cache-support" strength="hint" />
|
|
246
|
+
</case>
|
|
247
|
+
</suite>
|
|
248
|
+
</requirement>
|
|
249
|
+
</upsert>
|
|
250
|
+
</behavior-patch>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**拆分规则:**
|
|
254
|
+
- 每个 capability 一个目录:`behavior_deltas/<capability>/delta.xml`。
|
|
255
|
+
- capability 很大时,拆成 `behavior_deltas/<capability>/requirements/<topic>.xml`,并保留 `delta.xml` 作为索引说明或主 patch;所有 patch 文件都必须是 `<behavior-patch>`。
|
|
256
|
+
- 不引用当前 track 外的说明文档作为理解本 track 的必要条件。
|
|
257
|
+
|
|
258
|
+
**ADDED vs MODIFIED 的选择**(影响归档时如何合并进 `behaviors/`):
|
|
259
|
+
- **ADDED**:引入可独立存在的新能力 / 子能力。变更正交(如加"API 配置")而非改既有需求语义时优先 ADDED。
|
|
260
|
+
- **MODIFIED**:改既有需求的行为 / 范围 / 验收。**必须粘贴完整的更新后需求**(标题 + 所有场景)——归档会用你提供的内容**完全替换**原需求。
|
|
261
|
+
- **RENAMED**:仅名称变更时用;若同时改行为,用 RENAMED(名称)+ MODIFIED(引用新名称的内容)。
|
|
262
|
+
- **常见陷阱**:用 MODIFIED 加新关注点却不含原文本 → 归档时细节丢失。若并未明确改既有需求,请在 ADDED 下加新需求。
|
|
263
|
+
|
|
264
|
+
4. **写入文件** → `codument/tracks/<track_id>/behavior_deltas/<capability>/delta.xml`。
|
|
265
|
+
5. **按 severity 处理确认**:`auto` 模式不提问,直接继续,并把关键假设写入 `analysis/decision-tree.md` / `decisions.md`;其他模式询问:"我已起草了行为规范。请审查:文件路径在 `codument/tracks/<track_id>/behavior_deltas/<capability>/delta.xml`。这是否准确捕获了需求?请建议更改或确认。" 等待并修改至确认。
|
|
266
|
+
|
|
267
|
+
> Track 至少要有一个 delta。常见错误 **"Track must have at least one delta"**:检查 `behavior_deltas/**/*.xml` 是否存在、根是否 `<behavior-patch capability="<capability>" version="1">` 且至少一个带 `selector="behavior://..."` 的 `<upsert>` / `<delete>` / `<move>` mutation。**"root must be <behavior-patch>"**:别误写成 Markdown delta,把 Requirement/Scenario 改写为 `<requirement>`/`<statement>`/`<suite>`/`<case>`。
|
|
268
|
+
|
|
269
|
+
### 3.4 交互式提案(proposal.md)
|
|
270
|
+
|
|
271
|
+
behavior delta 确认后:"现在我将创建完整的变更提案"。按下面格式基于描述生成 `proposal.md`:
|
|
272
|
+
|
|
273
|
+
```markdown
|
|
274
|
+
# 变更:<变更的简要标题>
|
|
275
|
+
|
|
276
|
+
## 背景和动机 (Context And Why)
|
|
277
|
+
<背景和动机,几句话说明问题 / 机会>
|
|
278
|
+
|
|
279
|
+
## "要做"和"不做" (Goals / Non-Goals)
|
|
280
|
+
**目标:**
|
|
281
|
+
- <Goal 1>
|
|
282
|
+
- ...
|
|
283
|
+
|
|
284
|
+
**非目标:**
|
|
285
|
+
- <Non-Goal 1>
|
|
286
|
+
- ...
|
|
287
|
+
|
|
288
|
+
## 变更内容(What Changes)
|
|
289
|
+
- [变更列表]
|
|
290
|
+
- [用 **BREAKING** 标记破坏性变更]
|
|
291
|
+
|
|
292
|
+
## 影响范围(Impact)
|
|
293
|
+
- 受影响的能力(behaviors):[列出能力]
|
|
294
|
+
- 受影响的代码:[关键文件 / 系统]
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
- 写入 `codument/tracks/<track_id>/proposal.md`。
|
|
298
|
+
- 若背景 / 范围 / 兼容 / 迁移 / rollout 内容较多,建 `proposal/` 子目录把子方向写入子文件,由 `proposal.md` 作为总览引用。
|
|
299
|
+
- **Good**:`proposal.md` 概述目标并链接 `proposal/problem-statement.md`、`proposal/scope-and-compatibility.md`。
|
|
300
|
+
- **Bad**:把 200 行兼容性分析全塞进 `proposal.md`;或引用 track 外部文档才能读懂提案。
|
|
301
|
+
- **按 severity 处理确认**:`auto` 模式不提问,直接继续,并把未确认假设保留在提案 / decision-tree;其他模式询问:"我已起草了变更提案。请审查:`codument/tracks/<track_id>/proposal.md`。此提案是否正确?请建议更改或确认。" 等待并修改至确认。
|
|
302
|
+
|
|
303
|
+
### 3.5 交互式方案设计(design.md,按需)
|
|
304
|
+
|
|
305
|
+
满足**任一**条件时建 `design.md`,否则省略:
|
|
306
|
+
|
|
307
|
+
- 跨切面变更(多服务 / 模块)或新架构模式;
|
|
308
|
+
- 新外部依赖或重大数据模型变更;
|
|
309
|
+
- 安全、性能或迁移复杂性;
|
|
310
|
+
- 编码前需技术决策消歧;
|
|
311
|
+
- 设计点很多需按子方向拆分。
|
|
312
|
+
|
|
313
|
+
设计内容大时建 `design/` 子目录,根级 `design.md` 作总览引用子设计。
|
|
314
|
+
|
|
315
|
+
- **Good**:`design.md` 总览方案与影响面;`design/spec-vfs-and-xml.md`、`design/archive-memory.md` 承载子方向细节。
|
|
316
|
+
- **Bad**:`design.md` 变成难维护的超长文档;子设计放在 track 目录外导致不自包含。
|
|
317
|
+
|
|
318
|
+
**决策记录(decisions.md,如有需用户确认的决策):**
|
|
319
|
+
|
|
320
|
+
1. 存在需用户确认的技术 / 产品 / 交互决策时,建 `codument/tracks/<track_id>/decisions.md`,它是决策评审主入口——**无论创建 / 设计还是后续执行阶段,只要出现新决策都追加回写到该文件**,不新建分散的决策记录。某决策若属未来仍需遵守的 durable 长期项目决策,同时在 `decisions/<slug>.md` 建单文件记录并标 `Durable` / `长期项目决策`,供 archive 提升 `decision://`。
|
|
321
|
+
- 问题标题**避免用字母作前缀**(字母仅用于选项);每个问题标题用 `【Pn】` 标重要度,如 `### 1. 【P0】文件内容来源`。
|
|
322
|
+
2. **起草 decisions.md**:先梳理待决策问题列表并标 `P0`/`P1`/`P2`,把问题、候选选项、当前建议写入。模板:
|
|
323
|
+
```markdown
|
|
324
|
+
# Decisions
|
|
325
|
+
|
|
326
|
+
## Usage
|
|
327
|
+
- 用于记录需要用户确认的决策问题、选项、最终结论与理由
|
|
328
|
+
- 问题标题不用字母前缀;字母只用于选项
|
|
329
|
+
- 后续执行过程中出现的新决策,也继续追加到本文件,不新建分散的决策记录
|
|
330
|
+
|
|
331
|
+
### 1. 【P0】文件内容来源
|
|
332
|
+
- 背景:
|
|
333
|
+
- 需要决定:
|
|
334
|
+
- 选项:
|
|
335
|
+
- A) [选项 A]
|
|
336
|
+
- B) [选项 B]
|
|
337
|
+
- C) [其他(可填写)]
|
|
338
|
+
- 当前建议:
|
|
339
|
+
- 用户答复:
|
|
340
|
+
- 最终决策:
|
|
341
|
+
- 决策理由:
|
|
342
|
+
- 状态:pending
|
|
343
|
+
```
|
|
344
|
+
3. **按问题数选交互方式**:统计尚未确认的决策问题数。
|
|
345
|
+
- **≤5 且环境支持一次性多问题 ToolCall**:用内置多问题 ToolCall 一次性发问(格式遵循 **ask-multi-question-free**);每个问题仍在 `decisions.md` 保留条目,收到答复后回写"用户答复 / 最终决策 / 决策理由 / 状态"。
|
|
346
|
+
- **>5 或环境不支持**:不拆成多轮零散提问,引导用户**直接编辑** `decisions.md`;用户编辑后再据文档补全"最终决策 / 决策理由 / 状态"。
|
|
347
|
+
|
|
348
|
+
**起草 design.md:** 最小骨架:
|
|
349
|
+
```markdown
|
|
350
|
+
## 上下文
|
|
351
|
+
[背景、约束、利益相关者]
|
|
352
|
+
|
|
353
|
+
## 方案概览
|
|
354
|
+
1. [方案设计点 - 一级]
|
|
355
|
+
- [方案设计点 - 二级]
|
|
356
|
+
- [方案设计点 - 三级]
|
|
357
|
+
2. [方案设计点 - 一级]
|
|
358
|
+
- [方案设计点 - 二级]
|
|
359
|
+
3. [...]
|
|
360
|
+
|
|
361
|
+
## 影响范围与修改点(Impact)
|
|
362
|
+
- 受影响的文件 / 模块:[关键文件 / 系统]
|
|
363
|
+
|
|
364
|
+
## 决策摘要
|
|
365
|
+
- 详见 `codument/tracks/<track_id>/decisions.md`
|
|
366
|
+
- 当前关键结论:[已确认的决策摘要]
|
|
367
|
+
|
|
368
|
+
## 风险 / 权衡
|
|
369
|
+
- [风险] → 缓解措施
|
|
370
|
+
|
|
371
|
+
## 兼容性设计 [**需要时创建**]
|
|
372
|
+
- [兼容性设计项]
|
|
373
|
+
|
|
374
|
+
## 迁移计划 [**需要时创建**]
|
|
375
|
+
[步骤、回滚]
|
|
376
|
+
|
|
377
|
+
## 待解决问题
|
|
378
|
+
- [...]
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
写入 `codument/tracks/<track_id>/design.md`,**按 severity 处理确认**:`auto` 模式不提问,直接继续;其他模式询问:"我已起草了方案设计。请审查:`codument/tracks/<track_id>/design.md`。此方案设计是否正确?请建议更改或确认。" 等待并修改至确认。
|
|
382
|
+
|
|
383
|
+
### 3.6 起草 track.xml(核心)
|
|
384
|
+
|
|
385
|
+
proposal 获批后:"现在我将根据规范创建结构化实现计划(`track.xml`)。" 读取已确认的 `proposal.md`、`behavior_deltas/**/delta.xml`、`design.md`,以及 `codument/std/sop/workflow.md`,**严格按 `track-xml-spec.md`** 生成。三轴解构(结构 / 调度 / 行为正交,互不嵌套):
|
|
386
|
+
|
|
387
|
+
- **结构轴 `<TaskSpace>`**:工作树 + 状态。**phase = 第一层 `<TaskGroup>`**(不引入独立 `<Phase>` 标签);phase 之下用 `<Task>`(叶)/`<TaskGroup>`(非叶)按需**多层嵌套**——**不再受旧 plan.xml 三层封顶限制**。新建时任务 `status="NOT_STARTED"`;描述用 `<Description>` 元素;阶段门控写 `<cdt:Gate>`,验收写 `<cdt:Acceptance>`。ID 约定:phase=`P{n}`、task=`T{phase}.{n}`、嵌套追加 `.{n}`、验收=`{taskId}-AC{n}`。
|
|
388
|
+
- **关键**:计划结构必须遵循 `workflow.md` 的方法论(如 TDD 的"编写测试"与"实现"成对任务)。
|
|
389
|
+
- **调度轴 `<Schedule>`**:见 §3.6 末尾"调度(可选)"。
|
|
390
|
+
- **行为轴 `<Hooks>`**:见 §3.7(同轮确认后据选择写入)。
|
|
391
|
+
|
|
392
|
+
最小骨架(顺序执行、终态 phase 人工确认):
|
|
393
|
+
|
|
394
|
+
```xml
|
|
395
|
+
<Track id="add-user-auth" version="1" xmlns:cdt="urn:codument:v1">
|
|
396
|
+
<Metadata>
|
|
397
|
+
<Status>new</Status>
|
|
398
|
+
<Goal>实现用户登录和注册功能</Goal>
|
|
399
|
+
<Description>添加用户认证功能</Description>
|
|
400
|
+
<QuestionMode>decision-tree</QuestionMode>
|
|
401
|
+
<QuestionSeverity>light</QuestionSeverity>
|
|
402
|
+
<CommitMode>manual</CommitMode>
|
|
403
|
+
<CreatedAt>2026-06-14T10:00:00Z</CreatedAt>
|
|
404
|
+
<UpdatedAt>2026-06-14T10:00:00Z</UpdatedAt>
|
|
405
|
+
</Metadata>
|
|
406
|
+
|
|
407
|
+
<Ports scope="track">
|
|
408
|
+
<MaterialBundle role="input" name="behavior-deltas" domain="behavior" path="vfs://./behavior_deltas/"/>
|
|
409
|
+
<MaterialBundle role="output" name="behavior" domain="codument" path="vfs://@/codument/behaviors/"/>
|
|
410
|
+
</Ports>
|
|
411
|
+
|
|
412
|
+
<TaskSpace id="space_add-user-auth" name="add-user-auth" version="1">
|
|
413
|
+
<Description>实现用户登录和注册功能</Description>
|
|
414
|
+
<SubNodes>
|
|
415
|
+
<!-- 第一层 TaskGroup = phase -->
|
|
416
|
+
<TaskGroup id="P1" name="基础设施" status="NOT_STARTED" order="0">
|
|
417
|
+
<Description>搭建认证基础架构</Description>
|
|
418
|
+
<cdt:Gate>
|
|
419
|
+
<cdt:Criterion>所有 P0 任务 DONE</cdt:Criterion>
|
|
420
|
+
</cdt:Gate>
|
|
421
|
+
<SubNodes>
|
|
422
|
+
<Task id="T1.1" name="创建用户数据模型" status="NOT_STARTED" order="0" priority="P0">
|
|
423
|
+
<Description>定义 User 模型结构并实现基本 CRUD 操作</Description>
|
|
424
|
+
<SubNodes>
|
|
425
|
+
<Task id="T1.1.1" name="编写测试用例" status="NOT_STARTED" order="0"/>
|
|
426
|
+
<Task id="T1.1.2" name="实现 User 模型" status="NOT_STARTED" order="1"/>
|
|
427
|
+
</SubNodes>
|
|
428
|
+
<cdt:Acceptance>
|
|
429
|
+
<cdt:Criterion id="T1.1-AC1" checked="false">User 模型通过测试</cdt:Criterion>
|
|
430
|
+
</cdt:Acceptance>
|
|
431
|
+
</Task>
|
|
432
|
+
</SubNodes>
|
|
433
|
+
</TaskGroup>
|
|
434
|
+
</SubNodes>
|
|
435
|
+
</TaskSpace>
|
|
436
|
+
|
|
437
|
+
<!-- §3.7 据校验模式选择,把 <cdt:GapLoop>/<cdt:HumanConfirm>/<cdt:AttractorCheck> 挂进对应 phase 的 <Hooks> -->
|
|
438
|
+
</Track>
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**调度(可选)。** 默认每层依次执行(可不写 `<Schedule>`,wave 由依赖派生,不手维护 `<waves>`/`wave=`)。某层直接下层需并行时:给该 `TaskGroup`(或 `TaskSpace`)加 `cdt:child-mode="dag"`,再在 `<Schedule>` 声明**那一层直接下层之间**的依赖——前驱用 `<After ref>` **子元素**(一个前驱一行,不用空格分隔的属性串):
|
|
442
|
+
|
|
443
|
+
```xml
|
|
444
|
+
<Schedule>
|
|
445
|
+
<Dag for="P1"> <!-- for 必须指向一个 cdt:child-mode="dag" 的节点 -->
|
|
446
|
+
<Node id="T1.3">
|
|
447
|
+
<After ref="T1.1"/>
|
|
448
|
+
<After ref="T1.2"/>
|
|
449
|
+
</Node>
|
|
450
|
+
</Dag>
|
|
451
|
+
<Parallel max-concurrent="3" spot-check="true"/>
|
|
452
|
+
</Schedule>
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
一个 `<Dag>` 只描述一个父节点的直接下层之间的边(不跨层、不跨父);后续 `codument-plan-track-wave` skill 也可补这一步。
|
|
456
|
+
|
|
457
|
+
写入 `codument/tracks/<track_id>/track.xml`。
|
|
458
|
+
|
|
459
|
+
### 3.7 同轮确认:提交模式 + 校验模式 + 方向审查
|
|
460
|
+
|
|
461
|
+
这是关键交互:展示起草的 `track.xml`,在**同一条**回复里让用户给出全部选择。若 severity 为 `auto`,跳过本交互,使用默认值:`CommitMode=manual`、不挂 `HumanConfirm`、每个第一层 phase 挂 `AttractorCheck use="coding"`,仅在用户或上下文明确要求时挂 `GapLoop`:
|
|
462
|
+
|
|
463
|
+
> "我已起草了实现计划。请审查:`codument/tracks/<track_id>/track.xml`。如需修改请直接说明。
|
|
464
|
+
>
|
|
465
|
+
> 请选择本次 Track 的**提交模式**:
|
|
466
|
+
> **A. 自动提交(auto)** — 任务完成后自动 commit + Git Notes
|
|
467
|
+
> **B. 手动提交(manual)** — 由你自行控制提交时机
|
|
468
|
+
>
|
|
469
|
+
> 请选择本次 Track 的**校验模式**:
|
|
470
|
+
> **C. 人工确认(cdt:HumanConfirm)** — 由用户在确认点审阅后继续
|
|
471
|
+
> **D. Gap Loop(cdt:GapLoop)** — 当前 agent 到达确认点后结束,由父层 fresh-spawn 新的 gap-loop agent 做目标对比、gap 报告和修正
|
|
472
|
+
>
|
|
473
|
+
> 若选 **D**,再选**校验粒度**:
|
|
474
|
+
> **E. 仅最后一个 phase 校验(final_phase,默认)**
|
|
475
|
+
> **F. 每个 phase 都校验(every_phase)**
|
|
476
|
+
>
|
|
477
|
+
> 若选 **D**,再选**是否启用 gap-loop 验证轮(verify-round)**——即首轮无 gap(`NO_GAP`)后是否再 fresh-spawn 一轮(轻量)验证轮做首轮怀疑:
|
|
478
|
+
> **G. 启用(verify-round=true)** — 首轮 `NO_GAP` 后再追一轮轻量验证
|
|
479
|
+
> **H. 不启用(verify-round=false,默认)** — 首轮 `NO_GAP` 直接收口
|
|
480
|
+
>
|
|
481
|
+
> **方向审查**默认开启:每个第一层 phase 完成后执行 `coding` AttractorCheck,即在每个第一层 `<TaskGroup>` 写入 `<Hook on="phase:after"><cdt:AttractorCheck use="coding"/></Hook>`。
|
|
482
|
+
> 如需覆盖默认,请明确选择:**否** | **仅终态 phase** | **每个 phase**(profile:编码用 `coding`;docs 同步 track 可改用 `docs`)
|
|
483
|
+
>
|
|
484
|
+
> 你可以在同一条回复里同时给出「修改意见 + 提交模式(A/B)+ 校验模式(C/D)+ 可选粒度(E/F)+ 验证轮(G/H)+ 方向审查范围」。"(**ask-single-question-free**)
|
|
485
|
+
|
|
486
|
+
等待反馈、修改 `track.xml` 至确认,然后据选择写入。若用户没有明确覆盖方向审查范围,**默认每个第一层 `TaskGroup` 都挂 `phase:after` 的 `<cdt:AttractorCheck use="coding"/>`**。**校验模式塌缩到 track.xml 节点**:旧 `validation_mode`/`validation_granularity` = "在终态 phase(或每个 phase)挂哪个 typed check"——`final_phase` = 仅最后一个第一层 `TaskGroup` 挂;`every_phase` = 每个都挂。这些 typed check **配置直接写在节点上,无独立定义文件**(见 track-xml-spec §6):
|
|
487
|
+
|
|
488
|
+
| typed check | 配置(在节点属性上) | 取代旧 |
|
|
489
|
+
|---|---|---|
|
|
490
|
+
| `<cdt:GapLoop max-rounds="5" on-exhausted="block" verify-round="false"/>` | `max-rounds` 上限、`on-exhausted`、`verify-round`(首轮怀疑验证轮开关,缺省取全局默认 false) | `validation_mode=yield-gap-loop` + `<confirm protocol="yield-gap-loop">` |
|
|
491
|
+
| `<cdt:HumanConfirm/>` | 暂无属性 | `validation_mode=yield-human-confirm` + `<confirm protocol="yield-human-confirm">` |
|
|
492
|
+
| `<cdt:AttractorCheck use="coding\|docs"/>` | `use` = `config/attractor-profiles.xml` 的 profile 名;审查器固定 **fresh-subagent**(std 约定,不配置) | `<attractor-check>` |
|
|
493
|
+
|
|
494
|
+
写入分支:
|
|
495
|
+
|
|
496
|
+
```text
|
|
497
|
+
@delimiter: --
|
|
498
|
+
-- #sequence ?apply
|
|
499
|
+
---- #step ?w0
|
|
500
|
+
据 A/B 写 Metadata.CommitMode(auto | manual);更新 Metadata.UpdatedAt
|
|
501
|
+
---- /?w0
|
|
502
|
+
---- #switch ?mode on="校验模式"
|
|
503
|
+
------ #case ?gap when="D(gap-loop)"
|
|
504
|
+
-------- #step ?g1
|
|
505
|
+
未明确选粒度时默认 final_phase;未明确选验证轮(G/H)时 verify-round 取全局默认 false
|
|
506
|
+
-------- /?g1
|
|
507
|
+
-------- #step ?g1b
|
|
508
|
+
据 G/H 定 verify-round 值(G→true、H/默认→false);所挂的每个 <cdt:GapLoop> 都带 verify-round="<该值>"
|
|
509
|
+
-------- /?g1b
|
|
510
|
+
-------- #if ?g2 cond="粒度 = final_phase"
|
|
511
|
+
仅在最后一个第一层 TaskGroup 的 <Hooks> 挂 <Hook on="phase:after"><cdt:GapLoop max-rounds="5" on-exhausted="block" verify-round="<G/H 值>"/></Hook>
|
|
512
|
+
-------- /?g2
|
|
513
|
+
-------- #else ?g3
|
|
514
|
+
每个第一层 TaskGroup 的 <Hooks> 都挂同样的 <cdt:GapLoop ... verify-round="<G/H 值>"/>
|
|
515
|
+
-------- /?g3
|
|
516
|
+
------ /?gap
|
|
517
|
+
------ #case ?human when="C(人工确认)"
|
|
518
|
+
不再询问粒度;默认仅在最后一个第一层 TaskGroup 挂 <Hook on="phase:after"><cdt:HumanConfirm/></Hook>
|
|
519
|
+
------ /?human
|
|
520
|
+
---- /?mode
|
|
521
|
+
---- #switch ?attr on="方向审查范围"
|
|
522
|
+
------ #case ?a0 when="未明确"
|
|
523
|
+
每个第一层 TaskGroup 都挂 <Hook on="phase:after"><cdt:AttractorCheck use="coding"/></Hook>
|
|
524
|
+
------ /?a0
|
|
525
|
+
------ #case ?a1 when="否"
|
|
526
|
+
不挂 AttractorCheck
|
|
527
|
+
------ /?a1
|
|
528
|
+
------ #case ?a2 when="仅终态 phase"
|
|
529
|
+
仅最后一个第一层 TaskGroup 挂 <Hook on="phase:after"><cdt:AttractorCheck use="coding|docs"/></Hook>
|
|
530
|
+
------ /?a2
|
|
531
|
+
------ #case ?a3 when="每个 phase"
|
|
532
|
+
每个第一层 TaskGroup 都挂 <Hook on="phase:after"><cdt:AttractorCheck use="coding|docs"/></Hook>
|
|
533
|
+
------ /?a3
|
|
534
|
+
---- /?attr
|
|
535
|
+
-- /?apply
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
挂好后 `<Hooks>` 形如:
|
|
539
|
+
|
|
540
|
+
```xml
|
|
541
|
+
<TaskGroup id="P3" name="docs 同步与收尾" status="NOT_STARTED" order="2">
|
|
542
|
+
...
|
|
543
|
+
<Hooks>
|
|
544
|
+
<Hook on="phase:after"><cdt:GapLoop max-rounds="5" on-exhausted="block" verify-round="false"/></Hook>
|
|
545
|
+
<Hook on="phase:after"><cdt:AttractorCheck use="docs"/></Hook>
|
|
546
|
+
</Hooks>
|
|
547
|
+
</TaskGroup>
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
> `verify-round` 一经在 §3.7 据用户答复(G/H,缺省取全局默认 false)确定,**本 track 所有 GapLoop 节点沿用同一设置**;后续追加 phase 时新挂的 `<cdt:GapLoop>` 也沿用同一 `verify-round`。它控制「首轮 `NO_GAP` 后是否再追一轮(轻量)验证轮」,运行期语义见 `gap-loop.md` §0.2.4。
|
|
551
|
+
>
|
|
552
|
+
> 旧 `gap_loop_round` 不再写计划:gap-loop 轮次由父层在运行期记到 `<Metadata>` 的 `gap-round`(见 `gap-loop.md`),创建阶段无需初始化。
|
|
553
|
+
|
|
554
|
+
### 3.8 收尾
|
|
555
|
+
|
|
556
|
+
1. **确认真相源**:`track.xml` 的 `<Metadata>` 已含 track 元信息与状态。**不**创建 / 更新 `codument/tracks.md`,**不**创建 / 更新 `metadata.json`。
|
|
557
|
+
2. **best-effort validate**:尝试 `codument validate <id> --strict`;若系统找不到 `codument` 命令,**跳过并明确说明**("外部 codument validate 未执行,原因是系统中找不到 codument 命令"),不因此阻塞。validate 会检查:根 `<Track id>`、`<Metadata><Status>` 合法、`<TaskSpace>` 第一层至少一个 phase、id 全局唯一、`status` 是枚举、每个 `<Dag for>` 指向 `dag` 层且其 `<After ref>` 只引用直接下层且无环、`<Hook on>` 合法、`<cdt:AttractorCheck use>` 能解析到 profile(见 track-xml-spec §9)。
|
|
558
|
+
3. **宣布完成**:
|
|
559
|
+
> "新 track '<track_id>' 已创建。
|
|
560
|
+
> 状态真源:`codument/tracks/<track_id>/track.xml`
|
|
561
|
+
> 提交模式:<auto|manual>
|
|
562
|
+
> 校验模式:<cdt:HumanConfirm|cdt:GapLoop>
|
|
563
|
+
> 你现在可以运行 `请使用 codument-impl-track skill, 实现 track: <track_id>` 开始实现。"
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
## 4. 门控(gates)
|
|
568
|
+
|
|
569
|
+
- **提案获批前不开始实现**(这是 `codument-impl-track` 的前置门控)。
|
|
570
|
+
- 若 `codument/config/operation-hooks.xml` 为 `operation name="plan-track"` 配置了 `plan-track:before` hook(默认 `<cdt:AttractorCheck use="coding"/>`),在规划前执行——这是**命令级 hook**(无 track.xml 宿主的操作走 `operation-hooks.xml`),与 track.xml 里的节点级 `<Hook>` **同语法、不同宿主**。`operation-hooks.xml` 缺失时按默认流程继续,不加额外等待。
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## 5. 引用
|
|
575
|
+
|
|
576
|
+
- `codument/std/spec/track-xml-spec.md` —— track.xml 三轴规范与目录布局(§0.5)
|
|
577
|
+
- `codument/std/sop/questioning.md#ask-single-question-free` / `#ask-multi-question-free`
|
|
578
|
+
- `codument/config/attractor-profiles.xml` —— `coding`/`docs`/`memory` profile 定义(取代旧 feature.json)
|
|
579
|
+
- `codument/config/operation-hooks.xml` —— 命令级 hook
|