coding-agent-harness 1.0.1 → 1.0.2

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 (159) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.en-US.md +14 -0
  3. package/README.md +111 -86
  4. package/README.zh-CN.md +270 -0
  5. package/SKILL.md +116 -189
  6. package/docs-release/README.md +72 -5
  7. package/docs-release/architecture/overview.md +286 -28
  8. package/docs-release/architecture/overview.zh-CN.md +288 -0
  9. package/docs-release/assets/dashboard-overview-en.png +0 -0
  10. package/docs-release/assets/harness-architecture.svg +163 -0
  11. package/docs-release/assets/harness-workflow.svg +64 -0
  12. package/docs-release/guides/agent-installation.en-US.md +214 -0
  13. package/docs-release/guides/agent-installation.md +123 -26
  14. package/docs-release/guides/document-audience-and-surfaces.en-US.md +112 -0
  15. package/docs-release/guides/document-audience-and-surfaces.md +112 -0
  16. package/docs-release/guides/full-legacy-migration-subagent-strategy.md +334 -0
  17. package/docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md +334 -0
  18. package/docs-release/guides/legacy-migration-agent-prompt.md +384 -0
  19. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +361 -0
  20. package/docs-release/guides/migration-playbook.en-US.md +325 -0
  21. package/docs-release/guides/migration-playbook.md +329 -0
  22. package/docs-release/guides/parent-control-repository-pattern.en-US.md +252 -0
  23. package/docs-release/guides/parent-control-repository-pattern.md +252 -0
  24. package/docs-release/guides/repository-operating-models.en-US.md +196 -0
  25. package/docs-release/guides/repository-operating-models.md +196 -0
  26. package/docs-release/intl/README.md +15 -0
  27. package/docs-release/intl/de-DE.md +18 -0
  28. package/docs-release/intl/en-US.md +18 -0
  29. package/docs-release/intl/es-ES.md +18 -0
  30. package/docs-release/intl/fr-FR.md +18 -0
  31. package/docs-release/intl/ja-JP.md +18 -0
  32. package/docs-release/intl/ko-KR.md +18 -0
  33. package/docs-release/intl/zh-CN.md +18 -0
  34. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/brief.md +13 -0
  35. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/lesson_candidates.md +24 -0
  36. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/progress.md +1 -1
  37. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/task_plan.md +4 -2
  38. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/{visual_roadmap.md → visual_map.md} +9 -1
  39. package/package.json +3 -1
  40. package/references/agents-md-pattern.md +3 -3
  41. package/references/docs-directory-standard.md +47 -3
  42. package/references/external-source-intake-standard.md +75 -0
  43. package/references/harness-ledger.md +5 -3
  44. package/references/legacy-12-phase-bootstrap.md +41 -0
  45. package/references/lessons-governance.md +23 -6
  46. package/references/planning-loop.md +41 -3
  47. package/references/project-onboarding-audit.md +10 -0
  48. package/references/repo-governance-standard.md +2 -0
  49. package/references/testing-standard.md +50 -0
  50. package/references/walkthrough-closeout.md +6 -5
  51. package/scripts/check-harness.mjs +76 -35
  52. package/scripts/harness.mjs +303 -12
  53. package/scripts/lib/capability-registry.mjs +533 -0
  54. package/scripts/lib/check-profiles.mjs +510 -0
  55. package/scripts/lib/core-shared.mjs +186 -0
  56. package/scripts/lib/dashboard-data.mjs +389 -0
  57. package/scripts/lib/dashboard-workbench.mjs +217 -0
  58. package/scripts/lib/dashboard-writer.mjs +93 -2
  59. package/scripts/lib/harness-core.mjs +10 -1318
  60. package/scripts/lib/lesson-maintenance.mjs +145 -0
  61. package/scripts/lib/markdown-utils.mjs +158 -0
  62. package/scripts/lib/migration-planner.mjs +478 -0
  63. package/scripts/lib/migration-support.mjs +312 -0
  64. package/scripts/lib/task-lifecycle.mjs +755 -0
  65. package/scripts/lib/task-scanner.mjs +682 -0
  66. package/scripts/smoke-dashboard.mjs +22 -0
  67. package/scripts/test-harness.mjs +926 -14
  68. package/templates/AGENTS.md.template +41 -30
  69. package/templates/architecture/Architecture-SSoT.md +21 -0
  70. package/templates/architecture/README.md +49 -0
  71. package/templates/architecture/critical-flows.md +22 -0
  72. package/templates/architecture/local-repo-context.md +20 -0
  73. package/templates/architecture/service-catalog.md +17 -0
  74. package/templates/architecture/services/service-template.md +31 -0
  75. package/templates/architecture/system-map.md +22 -0
  76. package/templates/dashboard/assets/app-src/00-state.js +41 -0
  77. package/templates/dashboard/assets/app-src/10-router.js +76 -0
  78. package/templates/dashboard/assets/app-src/20-overview.js +235 -0
  79. package/templates/dashboard/assets/app-src/30-tasks.js +563 -0
  80. package/templates/dashboard/assets/app-src/40-modules.js +58 -0
  81. package/templates/dashboard/assets/app-src/45-review.js +128 -0
  82. package/templates/dashboard/assets/app-src/50-migration.js +169 -0
  83. package/templates/dashboard/assets/app-src/60-shared.js +61 -0
  84. package/templates/dashboard/assets/app-src/90-bindings.js +382 -0
  85. package/templates/dashboard/assets/app.css +2575 -310
  86. package/templates/dashboard/assets/app.js +1498 -307
  87. package/templates/dashboard/assets/app.manifest.json +11 -0
  88. package/templates/dashboard/assets/i18n.js +429 -44
  89. package/templates/dashboard/assets/mermaid-renderer.js +58 -8
  90. package/templates/development/README.md +52 -0
  91. package/templates/development/codebase-map.md +11 -0
  92. package/templates/development/cross-repo-debugging.md +18 -0
  93. package/templates/development/external-context/service-template.md +33 -0
  94. package/templates/development/external-source-packs/README.md +24 -0
  95. package/templates/development/external-source-packs/digest-template.md +28 -0
  96. package/templates/development/local-setup.md +16 -0
  97. package/templates/development/stubs-and-mocks.md +11 -0
  98. package/templates/integrations/README.md +40 -0
  99. package/templates/integrations/api-contract.md +42 -0
  100. package/templates/integrations/event-contract.md +46 -0
  101. package/templates/integrations/third-party/vendor-template.md +42 -0
  102. package/templates/integrations/webhook-contract.md +41 -0
  103. package/templates/planning/brief.md +32 -0
  104. package/templates/planning/lesson_candidates.md +58 -0
  105. package/templates/planning/long-running-task-contract.md +7 -0
  106. package/templates/planning/module_brief.md +25 -0
  107. package/templates/planning/module_session_prompt.md +6 -0
  108. package/templates/planning/task_plan.md +7 -5
  109. package/templates/planning/{visual_roadmap.md → visual_map.md} +24 -2
  110. package/templates/reference/docs-library-standard.md +31 -0
  111. package/templates/reference/execution-workflow-standard.md +4 -2
  112. package/templates/reference/external-source-intake-standard.md +82 -0
  113. package/templates/reference/harness-ledger-standard.md +1 -0
  114. package/templates/reference/repo-governance-standard.md +6 -4
  115. package/templates/reference/walkthrough-standard.md +2 -1
  116. package/templates/walkthrough/walkthrough-template.md +2 -2
  117. package/templates-zh-CN/AGENTS.md.template +69 -70
  118. package/templates-zh-CN/architecture/Architecture-SSoT.md +21 -0
  119. package/templates-zh-CN/architecture/README.md +51 -0
  120. package/templates-zh-CN/architecture/critical-flows.md +24 -0
  121. package/templates-zh-CN/architecture/local-repo-context.md +20 -0
  122. package/templates-zh-CN/architecture/service-catalog.md +17 -0
  123. package/templates-zh-CN/architecture/services/service-template.md +31 -0
  124. package/templates-zh-CN/architecture/system-map.md +22 -0
  125. package/templates-zh-CN/development/README.md +54 -0
  126. package/templates-zh-CN/development/codebase-map.md +11 -0
  127. package/templates-zh-CN/development/cross-repo-debugging.md +18 -0
  128. package/templates-zh-CN/development/external-context/service-template.md +33 -0
  129. package/templates-zh-CN/development/external-source-packs/README.md +24 -0
  130. package/templates-zh-CN/development/external-source-packs/digest-template.md +28 -0
  131. package/templates-zh-CN/development/local-setup.md +16 -0
  132. package/templates-zh-CN/development/stubs-and-mocks.md +11 -0
  133. package/templates-zh-CN/integrations/README.md +42 -0
  134. package/templates-zh-CN/integrations/api-contract.md +42 -0
  135. package/templates-zh-CN/integrations/event-contract.md +46 -0
  136. package/templates-zh-CN/integrations/third-party/vendor-template.md +42 -0
  137. package/templates-zh-CN/integrations/webhook-contract.md +41 -0
  138. package/templates-zh-CN/planning/brief.md +32 -0
  139. package/templates-zh-CN/planning/lesson_candidates.md +58 -0
  140. package/templates-zh-CN/planning/long-running-task-contract.md +1 -1
  141. package/templates-zh-CN/planning/module_brief.md +25 -0
  142. package/templates-zh-CN/planning/module_plan.md +2 -2
  143. package/templates-zh-CN/planning/module_session_prompt.md +4 -3
  144. package/templates-zh-CN/planning/task_plan.md +10 -4
  145. package/templates-zh-CN/planning/{visual_roadmap.md → visual_map.md} +21 -2
  146. package/templates-zh-CN/reference/docs-library-standard.md +35 -0
  147. package/templates-zh-CN/reference/execution-workflow-standard.md +9 -2
  148. package/templates-zh-CN/reference/external-source-intake-standard.md +82 -0
  149. package/templates-zh-CN/reference/harness-ledger-standard.md +5 -2
  150. package/templates-zh-CN/reference/repo-governance-standard.md +2 -0
  151. package/templates-zh-CN/reference/walkthrough-standard.md +4 -4
  152. package/templates-zh-CN/walkthrough/Closeout-SSoT.md +2 -2
  153. package/templates-zh-CN/walkthrough/walkthrough-template.md +2 -2
  154. package/templates-zh-CN/dashboard/assets/app.css +0 -399
  155. package/templates-zh-CN/dashboard/assets/app.js +0 -435
  156. package/templates-zh-CN/dashboard/assets/i18n.js +0 -47
  157. package/templates-zh-CN/dashboard/assets/markdown-reader.js +0 -116
  158. package/templates-zh-CN/dashboard/assets/mermaid-renderer.js +0 -59
  159. package/templates-zh-CN/dashboard/index.html +0 -18
@@ -0,0 +1,361 @@
1
+ # 旧 Harness 迁移 Agent Prompt
2
+
3
+ English source: `docs-release/guides/legacy-migration-agent-prompt.md`
4
+
5
+ 当一个 agent 需要把旧版 Harness 项目迁移到 v1.0 document kernel,同时不破坏历史证据时,使用这份 prompt。
6
+
7
+ ## 使命
8
+
9
+ 你正在把一个 pre-v1 Harness 项目迁移到 v1.0。
10
+
11
+ 你的默认工作不是重写整个 `docs/` 树。默认 baseline 是保留历史、安装 v1.0 兼容层、识别活跃工作,并让当前工作能在 dashboard 里被看懂。
12
+
13
+ 但是迁移不是单一策略。Agent 必须先扫描目标项目,产出迁移计划、推荐迁移模式和需要用户确认的问题;用户确认前不要写文件。
14
+
15
+ 如果用户要求证明旧项目已经完整迁移,还要同时遵循:
16
+
17
+ - `docs-release/guides/full-legacy-migration-subagent-strategy.md`
18
+ - `docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md`
19
+
20
+ 本 prompt 足够完成 baseline safe-adoption。完整可读切换有更严格门禁。
21
+
22
+ ## 不可违反的规则
23
+
24
+ 1. 不要覆盖 `AGENTS.md`、`CLAUDE.md`、历史 task 文件夹、Harness Ledger、SSoT、review、walkthrough 或 evidence 文件。
25
+ 2. 不要把几百个旧任务机械转换成 v1 任务。
26
+ 3. baseline 模式下,把已关闭或状态未知的历史任务当作 legacy residual,除非用户明确说它们重新活跃。
27
+ 4. 只有项目存在真实模块 owner、写入范围和集成规则时,才添加 `module-parallel`。任务数量大本身不是模块边界。
28
+ 5. normal check 是迁移信号。只有活跃任务升级后才使用 `--strict` 作为最终门禁。
29
+ 6. 先运行 `migrate-run`,再用 `migrate-verify` 证明输出。不要手写第一轮接入流程。
30
+ 7. 每个迁移动作都必须能从生成的 `migrate-plan.json` 和 `session.json` 解释。
31
+ 8. 除非用户明确要求,不要 stage、commit、push 或创建 PR。
32
+ 9. Dashboard evidence 必须是实际存在的 HTML dashboard 路径。Markdown ledger 或 docs 页面不是 dashboard。
33
+ 10. Full readable cutover 比 baseline 严格:需要 0 warning/action/residual、strict 通过、dashboard brief coverage 达到 `total/total`。
34
+ 11. 写文件前必须完成“扫描 → 建议迁移模式 → 用户确认”三步;不能由 agent 静默选择只补齐或全量重写。
35
+ 12. 状态轴必须分开。保留旧的 `task.state`,从 `status --json` 读取派生的 `lifecycleState`、`reviewStatus`、`closeoutStatus` 和 `stateConflicts`,不要在迁移脚本里重新发明含义。
36
+ 13. 不要把 `done`、`completed`、`merged` 或 `shipped` 当成 `closed`。只有 Closeout SSoT 记录了收口证据,或明确记录 skipped-with-reason 收口路径,任务才算关闭。
37
+ 14. 人工审查确认是 dashboard workbench 动作。日常本地 HTML 入口使用 `harness dev /path/to/project`。静态 dashboard 快照只读;CLI 可以支持自动化,但需要人工确认的迁移必须在本地 HTML workbench 中暴露操作入口。
38
+
39
+ ## Step 0: 扫描后询问用户
40
+
41
+ 先扫描,不写文件:
42
+
43
+ ```bash
44
+ git -C /path/to/project status --short --branch
45
+ harness status --json /path/to/project > /tmp/harness-status.json
46
+ harness migrate-plan --json --limit 1000 /path/to/project > /tmp/harness-migrate-plan.json
47
+ ```
48
+
49
+ 然后给用户一个简短迁移计划,并主动提问。计划必须包含:
50
+
51
+ - 任务总数、brief 覆盖、canonical `visual_map.md` 覆盖。
52
+ - `migrate-plan.summary` 中的 warnings、taskActions、reviewSchemaGaps、legacyReferenceGaps、legacyResiduals、fullCutoverEligible。
53
+ - dirty / untracked 文件解释。
54
+ - 是否属于微服务、多仓、前后端分仓或外部集成项目;如果是,是否已询问用户外部资料。
55
+ - 推荐迁移模式和原因。
56
+ - 预计改动范围、token / 时间成本、是否需要 subagent。
57
+ - 需要用户确认的问题。
58
+
59
+ Agent 应推荐下面三种模式之一,而不是让用户自己先懂这些概念:
60
+
61
+ | Mode | Agent 何时推荐 | 写入策略 |
62
+ | --- | --- | --- |
63
+ | `baseline-preserve` | 用户只需要先安全接入 v1.0,历史任务很多且暂不追求 strict-clean。 | 不重写历史任务;只补 registry、dashboard、活跃任务、必要 metadata 和 warning 队列。 |
64
+ | `status-aware-rewrite` | 用户要迁移真实当前工作,且希望根据任务状态决定重写深度。 | 根据 SSoT / Ledger / progress / review / git 证据重写当前、重新打开、当前证据任务;历史任务写可读索引或 residual。 |
65
+ | `full-semantic-rewrite` | 用户要证明旧项目整体能重构成 v1.0 可读项目。 | 每个任务都重写为 v1.0 可读合同;已有 brief、execution strategy、visual map 如果不够清楚也要重写。 |
66
+
67
+ 提问格式示例:
68
+
69
+ ```text
70
+ 我建议使用 status-aware-rewrite,因为当前项目有 470+ 历史任务,但只有一部分仍是当前证据。
71
+ 请确认:
72
+ 1. 是否接受这个模式,还是要 baseline-preserve / full-semantic-rewrite?
73
+ 2. 是否允许我改写已有 brief 和 visual_map,还是只补缺失文件?
74
+ 3. 这个项目是否有外部架构文档、接口文档、流程图、会议纪要、链接或导出包需要一起整理?
75
+ 4. 是否允许我启动 subagent 分日期段或模块迁移?
76
+ ```
77
+
78
+ `visual_map.md` 是图表集合,不是必须画满所有图。可以画 phase flow、sequence、architecture、data-flow、state、topology、decision map;只有图能让人更快理解任务时才画。不能为了过 checker 生成空图或无意义图。
79
+
80
+ 如果用户提供外部资料,先按 `docs/11-REFERENCE/external-source-intake-standard.md` 建立 `docs/04-DEVELOPMENT/external-source-packs/<source-key>/` 索引和 digest,再把稳定事实投影到 `03-ARCHITECTURE`、`04-DEVELOPMENT/external-context` 或 `06-INTEGRATIONS`。不要把外部资料原文直接塞进 `03/04/06`。
81
+
82
+ ## Step 1: Baseline
83
+
84
+ 先检查目标环境是否有 `harness` 命令。如果没有,不要静默全局安装。先询问用户是否允许运行 `npm install -g coding-agent-harness`。只有用户明确同意后才执行全局安装。用户不同意或未回复时,Harness CLI 都用 `npx --yes coding-agent-harness <command>` 临时执行。如果你在源码仓调试,把 `harness` 替换为 `node scripts/harness.mjs`。
85
+
86
+ 用户确认迁移模式后再运行或复用:
87
+
88
+ ```bash
89
+ git -C /path/to/project status --short --branch
90
+ harness migrate-plan --json --limit 50 /path/to/project > /tmp/harness-migrate-plan.json
91
+ ```
92
+
93
+ 读迁移计划并确认用户选择后再编辑任何文件。
94
+
95
+ 写文件前:
96
+
97
+ - 解释 `git status` 里的每个 dirty 或 untracked 路径。
98
+ - 保留 `/tmp/harness-migrate-plan.json` 作为本轮 baseline 快照。
99
+ - 如果 dirty 文件无关且 owner 不清楚,停止。
100
+ - 明确选择 locale。项目中英文混杂时按下面规则选择:
101
+ - 中文用户、中文项目运行上下文或中文对外文档使用 `--locale zh-CN`。
102
+ - 英文团队或英文对外文档使用 `--locale en-US`。
103
+ - 从入口文件或产品文档记录具体语言证据,例如 `AGENTS.md`、`CLAUDE.md`、`README.md`、`docs/Harness-Ledger.md` 和活跃任务文档。信号冲突时停止并让用户决定语言。
104
+
105
+ 运行迁移轨道:
106
+
107
+ ```bash
108
+ harness migrate-run \
109
+ --locale zh-CN \
110
+ --session-dir /tmp/cah-migration-project \
111
+ --out-dir /tmp/cah-migration-project/dashboard \
112
+ /path/to/project
113
+ ```
114
+
115
+ 如果 `migrate-run` 报告目标仓库 dirty,停止并解释 dirty 文件。只有用户或仓库 owner 接受这些文件属于迁移上下文时,才使用 `--allow-dirty`。
116
+
117
+ 命令会写出:
118
+
119
+ - `session.json`
120
+ - `report.md`
121
+ - `migrate-plan.json`
122
+ - `status-normal.json`
123
+ - `status-strict.json`
124
+ - `dashboard/index.html`
125
+
126
+ `migrate-verify` 通过后,把本次迁移变成 Complex Task preset:
127
+
128
+ ```bash
129
+ harness new-task \
130
+ --budget complex \
131
+ --preset legacy-migration \
132
+ --from-session /tmp/cah-migration-project/session.json
133
+ ```
134
+
135
+ 这条命令只创建任务骨架并复制/引用证据,不会继续运行迁移、改写历史、stage 或 commit。
136
+
137
+ 输出分类:
138
+
139
+ | Output | 含义 | 动作 |
140
+ | --- | --- | --- |
141
+ | `taskActions` | 活跃或重新打开的任务需要 v1 文件 | 谨慎升级 |
142
+ | `legacyResiduals` | 历史任务合同缺口 | 默认不重写 |
143
+ | `reviewActions` | review 缺 v1 schema | 只升级当前 release-blocking review |
144
+ | `legacyActions` | 缺旧 reference/governance 文件 | 只有明确采用该能力时才创建 |
145
+ | `recommendedCapabilities` | 候选能力 | 按项目事实评估 |
146
+
147
+ 继续前选择完成模式:
148
+
149
+ | 模式 | 适用场景 | 最终声明 |
150
+ | --- | --- | --- |
151
+ | Baseline safe-adoption | 用户要第一轮安全迁移面和 warning 队列。 | "baseline usable" |
152
+ | Full readable cutover | 用户要证明另一个 agent 能把旧项目完整迁移。 | 所有门禁通过后才说 "migration complete" |
153
+
154
+ Full readable cutover 必须继续使用 subagent。不要让单个 agent 默默修完所有类别。
155
+
156
+ 生成 dashboard 后,检查 bundle 里的 `adoption.warnings`。每条 warning 都应作为队列项,包含:
157
+
158
+ - `category`: 人类可读分组。
159
+ - `type`: 稳定问题类型。
160
+ - `scope`: task、module、review、reference、capability 或 project。
161
+ - `priority`: P1/P2/P3 清理顺序。
162
+ - `phase`: 建议迁移阶段。
163
+ - `fixability`: template、guided、human-evidence、decision 或 manual。
164
+ - `status`: open、done、deferred 或 accepted-residual。
165
+ - `confidence`: high、medium 或 low。
166
+ - `affected`: 主要受影响路径。
167
+ - `affectedPaths`: 需要检查或分派的文件。
168
+ - `requiredAction`: 下一步动作。
169
+ - `detail`: 原始 warning 细节。
170
+
171
+ 每批 warning 都需要 owner/action/status。不要只因为“看过了”就标 done。
172
+
173
+ 当 `status --json` 显示 `reviewStatus: blocked-open-findings`,先关闭或路由所有开放 P0/P1/P2 finding,再让人确认审查完成。当显示 `lifecycleState: closing`,不要宣布任务 closed,除非 Closeout SSoT、walkthrough 或 skipped-with-reason 证据已经存在。
174
+
175
+ ## Step 2: 安装 Safe Adoption
176
+
177
+ 这通常由 `migrate-run` 完成。只有调试轨道时才使用低层命令:
178
+
179
+ ```bash
180
+ harness add-capability safe-adoption --locale zh-CN /path/to/project
181
+ harness add-capability dashboard --locale zh-CN /path/to/project
182
+ ```
183
+
184
+ 预期行为:
185
+
186
+ - 已存在文件显示 `skip-existing`。
187
+ - `.harness-capabilities.json` 声明 `core`、`safe-adoption` 和 `dashboard`。
188
+ - 历史任务内容不被覆盖。
189
+
190
+ 如果已有项目文档被覆盖,停止。
191
+
192
+ ## Step 3: 只升级活跃工作
193
+
194
+ 编辑任务文件前,按顺序建立证据图:
195
+
196
+ 1. 读取 `docs/Harness-Ledger.md`、`docs/10-WALKTHROUGH/Closeout-SSoT.md`、`docs/05-TEST-QA/Regression-SSoT.md` 和项目特有历史 regression SSoT。
197
+ 2. 用任务的 `progress.md`、walkthrough 链接、regression 行和近期 git commit 交叉验证候选活跃任务。
198
+ 3. 将每个任务分类为 `current-active`、`closed-with-evidence`、`closed-with-residual`、`superseded` 或 `unknown-history`。
199
+ 4. Baseline 模式只修 `current-active` 和 “仍被 SSoT 引用为当前证据的 unknown-history”;已确认 rewrite 模式下,可以重写被证据判定为薄弱或过期的现有 v1 表面。
200
+ 5. 对关闭的历史任务,在迁移报告里路由 residual,不要添加假的当前文件。
201
+
202
+ baseline triage 使用 subagent 时,分派证据工作,而不是分派列表整理:
203
+
204
+ - Reviewer A:检查 SSoT 和 ledger 行,判断完成状态。
205
+ - Reviewer B:检查任务 `progress.md` / walkthrough / review 证据。
206
+ - Reviewer C:检查 git history 和 regression 证据,判断任务是否真的完成。
207
+
208
+ 每个被修复的任务都必须说明用什么证据判断它是 active 或 reopened。
209
+
210
+ 对 `taskActions` 中每项添加或适配:
211
+
212
+ - `brief.md`
213
+ - `execution_strategy.md`
214
+ - `visual_map.md`
215
+
216
+ 不要写通用 placeholder brief。有用的 `brief.md` 必须回答:
217
+
218
+ - 这个任务要达成什么?
219
+ - 执行流是什么?
220
+ - 人应该第一眼看什么?
221
+ - 当前阻塞或风险是什么?
222
+ - 哪个 SSoT、ledger、progress、walkthrough、regression、review 或 git 证据说明它仍是当前工作?
223
+
224
+ ## Step 4: 保留历史 Backlog
225
+
226
+ 如果项目有数百个旧 task 文件夹:
227
+
228
+ - 保持它们在 dashboard metadata 中可搜索。
229
+ - 保留旧的 `task_plan.md`、`progress.md` 和 review 证据。
230
+ - 不要给每个旧 task 都补 `brief.md`。
231
+ - 把数量和类别记录为 migration residual。
232
+ - 用 SSoT/ledger 证据判断完成度。不要只因为缺 v1 模板文件就推断“没完成”。
233
+
234
+ Full readable cutover 下,这条 baseline 规则会改变:
235
+
236
+ - 每个任务都必须有 standalone `brief.md`,让 dashboard 能被人读懂。
237
+ - 历史任务 brief 不能在无证据时声称正在执行。
238
+ - 把它们写成可读索引卡:任务目标、第一眼读什么、证据流、当前状态判断、风险/残余、证据来源。
239
+ - `execution_strategy.md` 和 `visual_map.md` 主要用于 active/current tasks 或被用户确认需要语义重写的任务;`visual_map.md` 只放有帮助的图,不为凑数画空图。
240
+ - 按日期范围、模块或迁移 bucket 拆给 subagent。
241
+
242
+ ## Step 5: 判断是否真的有模块
243
+
244
+ 只有同时满足下面条件,才创建 `Module-Registry.md` 和 module plans:
245
+
246
+ - 有两个以上稳定产品或工程域。
247
+ - 每个 domain 有清晰 owner 或 worker lane。
248
+ - 写入范围可以做到互不重叠。
249
+ - 共享文件由 coordinator 维护。
250
+ - 迁移后模块状态能持续维护。
251
+
252
+ 不满足时,把项目保持为单线 `safe-adoption` Harness。
253
+
254
+ 模块分类顺序:
255
+
256
+ 1. 优先使用显式模块:已有 `docs/09-PLANNING/MODULES/<module>/` 或维护中的 `Module-Registry.md`。
257
+ 2. dashboard inferred modules 只用于浏览、过滤和 cleanup routing,不代表 capability 声明。
258
+ 3. 不确定历史保持 `legacy-unclassified`。
259
+
260
+ 创建模块文件前,先产出分类摘要:
261
+
262
+ - 候选模块名。
263
+ - 为什么这是产品/工程域,而不是文件夹或时间段。
264
+ - owner 和不重叠写入范围。
265
+ - 共享文件 coordinator 规则。
266
+ - 仍保留 `legacy-unclassified` 的任务数量。
267
+
268
+ 不要用日期 bucket、单纯路径或“让 dashboard 好看”来创建模块。
269
+
270
+ ## Step 6: 生成 Dashboard
271
+
272
+ 这通常由 `migrate-run --out-dir` 完成。如需独立调试 dashboard,同时生成两种形式:
273
+
274
+ ```bash
275
+ harness dashboard --out /tmp/harness-dashboard.html /path/to/project
276
+ harness dashboard --out-dir /tmp/harness-dashboard /path/to/project
277
+ ```
278
+
279
+ Dashboard 必须展示:
280
+
281
+ - 小项目显示 project flow,大型 legacy 项目显示聚合迁移跑道。
282
+ - 有活跃任务时显示 active task briefs。
283
+ - 历史任务可搜索、可分页。
284
+ - 把迁移关注项作为 warning workbench,而不是假的全绿状态。
285
+ - legacy residual 与当前 blocker 分开。
286
+
287
+ 数百任务项目的使用方式:
288
+
289
+ 1. 从聚合迁移跑道开始,不从 raw task graph 开始。
290
+ 2. Task Index 按 migration bucket 分组,先区分 active/current work 和 historical records。
291
+ 3. 只有 inferred 或 explicit modules 有意义时,才切 module grouping。
292
+ 4. 用 warning filters 一类一类修。
293
+ 5. 每批 cleanup 后重新生成 dashboard 并比较计数。
294
+
295
+ ## Step 7: Verify
296
+
297
+ 运行:
298
+
299
+ ```bash
300
+ harness migrate-verify /tmp/cah-migration-project/session.json
301
+ harness check --profile target-project /path/to/project
302
+ harness check --profile target-project --strict /path/to/project
303
+ harness status --json /path/to/project
304
+ harness migrate-plan --json /path/to/project
305
+ git -C /path/to/project diff --cached --name-only
306
+ ```
307
+
308
+ 报告 migration usable 前,`migrate-verify` 必须通过。
309
+
310
+ 如果第一轮 session 后又做了清理,重新运行 `migrate-run` 生成 session/dashboard,或者明确说明第一轮 session 只是 baseline 并提供新的 final check/dashboard 证据。不要把过期 baseline dashboard 当 final evidence。
311
+
312
+ Full readable cutover 额外验证:
313
+
314
+ ```bash
315
+ node -e '
316
+ const fs = require("fs");
317
+ const status = JSON.parse(fs.readFileSync("/tmp/cah-migration-project/dashboard/data/status.json", "utf8"));
318
+ console.log(status.summary.briefCoverage);
319
+ console.log(status.tasks.filter((task) => task.briefSource !== "standalone" || !task.briefPath).slice(0, 5));
320
+ '
321
+ ```
322
+
323
+ 预期:
324
+
325
+ - `ready == total`
326
+ - `missing == 0`
327
+ - 没有 sample task 缺 `briefPath`
328
+
329
+ 还要打开 dashboard task index,确认显示 `total / total`。
330
+
331
+ 不要声称 strict migration complete,除非:
332
+
333
+ - 活跃任务有 v1 visibility files。
334
+ - 当前 release-blocking reviews 使用 v1 review schema。
335
+ - 剩余历史缺口有 owner/action/status 或 accepted residual reason。
336
+ - `--strict` 通过。
337
+
338
+ 不要声称 full readable migration complete,除非:
339
+
340
+ - 上述 strict-complete 条件全部通过。
341
+ - `migrate-plan` 有 0 warnings/actions/residuals。
342
+ - Dashboard brief coverage 是 100%。
343
+ - Final adversarial review lanes 通过:CLI/session、brief quality、boundary/git state。
344
+
345
+ 如果用户接受剩余 residual,报告 `strict deferred`,不是 `strict complete`。
346
+
347
+ ## 期望最终报告
348
+
349
+ 返回:
350
+
351
+ - 创建和跳过的文件。
352
+ - Capability registry 状态。
353
+ - 完成的 active task actions 数量。
354
+ - 保留未动的 legacy residuals 数量。
355
+ - Dashboard 路径。
356
+ - `session.json` 和 `report.md` 路径。
357
+ - Normal check 结果。
358
+ - Strict check 结果,或仍 deferred 的明确原因。
359
+ - Dashboard brief coverage 结果。
360
+ - 使用的 subagent worker roles。
361
+ - Final adversarial review outcome。