coding-agent-harness 1.0.4 → 1.0.6

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 (279) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/LICENSE +661 -21
  4. package/LICENSE-EXCEPTION.md +37 -0
  5. package/README.md +96 -4
  6. package/README.zh-CN.md +75 -4
  7. package/SKILL.md +52 -51
  8. package/dist/build-dist.mjs +189 -0
  9. package/dist/check-dist-observation.mjs +428 -0
  10. package/dist/check-harness.mjs +489 -0
  11. package/dist/check-import-graph.mjs +511 -0
  12. package/dist/check-runtime-emit.mjs +304 -0
  13. package/dist/check-type-boundaries.mjs +139 -0
  14. package/dist/commands/dashboard-command.mjs +80 -0
  15. package/dist/commands/migration-command.mjs +152 -0
  16. package/dist/commands/preset-command.mjs +91 -0
  17. package/dist/commands/task-command.mjs +324 -0
  18. package/dist/harness.mjs +304 -0
  19. package/dist/lib/capability-registry.mjs +643 -0
  20. package/dist/lib/check-module-parallel.mjs +227 -0
  21. package/dist/lib/check-profiles.mjs +414 -0
  22. package/dist/lib/check-task-contracts.mjs +54 -0
  23. package/dist/lib/core-shared.mjs +254 -0
  24. package/dist/lib/dashboard-data.mjs +608 -0
  25. package/dist/lib/dashboard-workbench.mjs +334 -0
  26. package/dist/lib/dashboard-writer.mjs +200 -0
  27. package/dist/lib/git-status-summary.mjs +45 -0
  28. package/dist/lib/governance-index-generator.mjs +236 -0
  29. package/dist/lib/governance-sync.mjs +617 -0
  30. package/dist/lib/governance-table-boundary.mjs +161 -0
  31. package/{scripts → dist}/lib/harness-core.mjs +3 -0
  32. package/dist/lib/harness-paths.mjs +338 -0
  33. package/dist/lib/lesson-maintenance.mjs +139 -0
  34. package/dist/lib/markdown-utils.mjs +193 -0
  35. package/dist/lib/migration-planner.mjs +439 -0
  36. package/dist/lib/migration-support.mjs +317 -0
  37. package/dist/lib/phase-kind.mjs +46 -0
  38. package/dist/lib/preset-audit-contracts.mjs +40 -0
  39. package/dist/lib/preset-engine.mjs +516 -0
  40. package/dist/lib/preset-registry.mjs +831 -0
  41. package/dist/lib/preset-resource-contracts.mjs +83 -0
  42. package/dist/lib/review-confirm-git-gate.mjs +244 -0
  43. package/dist/lib/status-builder.mjs +87 -0
  44. package/{scripts → dist}/lib/status-dashboard-renderer.mjs +48 -47
  45. package/dist/lib/structure-migration.mjs +404 -0
  46. package/dist/lib/subagent-authorization-audit.mjs +198 -0
  47. package/dist/lib/task-audit-metadata.mjs +376 -0
  48. package/dist/lib/task-audit-migration.mjs +355 -0
  49. package/dist/lib/task-completion-consistency.mjs +29 -0
  50. package/dist/lib/task-index.mjs +133 -0
  51. package/dist/lib/task-lesson-candidates.mjs +239 -0
  52. package/dist/lib/task-lesson-sedimentation.mjs +300 -0
  53. package/dist/lib/task-lifecycle/create-task-helpers.mjs +84 -0
  54. package/dist/lib/task-lifecycle/phase-sync.mjs +82 -0
  55. package/dist/lib/task-lifecycle/review-confirm.mjs +93 -0
  56. package/dist/lib/task-lifecycle/review-gates.mjs +62 -0
  57. package/dist/lib/task-lifecycle/review-submission.mjs +52 -0
  58. package/dist/lib/task-lifecycle/scaffold-provenance.mjs +54 -0
  59. package/dist/lib/task-lifecycle/template-files.mjs +52 -0
  60. package/dist/lib/task-lifecycle/text-utils.mjs +26 -0
  61. package/dist/lib/task-lifecycle.mjs +611 -0
  62. package/dist/lib/task-metadata.mjs +116 -0
  63. package/dist/lib/task-review-model.mjs +474 -0
  64. package/dist/lib/task-scanner.mjs +439 -0
  65. package/dist/lib/task-tombstone-commands.mjs +125 -0
  66. package/dist/postinstall.mjs +14 -0
  67. package/dist/run-built-tests.mjs +84 -0
  68. package/docs-release/README.md +1 -0
  69. package/docs-release/architecture/overview.md +13 -13
  70. package/docs-release/architecture/overview.zh-CN.md +13 -13
  71. package/docs-release/architecture/system-explainer/01-system-overview.md +218 -0
  72. package/docs-release/architecture/system-explainer/02-module-dependency.md +257 -0
  73. package/docs-release/architecture/system-explainer/03-task-lifecycle.md +304 -0
  74. package/docs-release/architecture/system-explainer/04-check-and-governance.md +241 -0
  75. package/docs-release/architecture/system-explainer/05-data-flow.md +276 -0
  76. package/docs-release/architecture/system-explainer/06-preset-and-migration.md +300 -0
  77. package/docs-release/architecture/system-explainer/README.md +67 -0
  78. package/docs-release/architecture/system-explainer/en-US/01-system-overview.md +227 -0
  79. package/docs-release/architecture/system-explainer/en-US/02-module-dependency.md +263 -0
  80. package/docs-release/architecture/system-explainer/en-US/03-task-lifecycle.md +319 -0
  81. package/docs-release/architecture/system-explainer/en-US/04-check-and-governance.md +252 -0
  82. package/docs-release/architecture/system-explainer/en-US/05-data-flow.md +290 -0
  83. package/docs-release/architecture/system-explainer/en-US/06-preset-and-migration.md +320 -0
  84. package/docs-release/architecture/system-explainer/en-US/README.md +70 -0
  85. package/docs-release/guides/agent-installation.en-US.md +22 -15
  86. package/docs-release/guides/agent-installation.md +23 -15
  87. package/docs-release/guides/contributing.md +3 -3
  88. package/docs-release/guides/contributing.zh-CN.md +3 -3
  89. package/docs-release/guides/document-audience-and-surfaces.en-US.md +10 -10
  90. package/docs-release/guides/document-audience-and-surfaces.md +10 -10
  91. package/docs-release/guides/legacy-migration-agent-prompt.md +25 -2
  92. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +25 -2
  93. package/docs-release/guides/migration-playbook.en-US.md +63 -1
  94. package/docs-release/guides/migration-playbook.md +59 -1
  95. package/docs-release/guides/parent-control-repository-pattern.en-US.md +25 -25
  96. package/docs-release/guides/parent-control-repository-pattern.md +25 -25
  97. package/docs-release/guides/preset-development.md +28 -4
  98. package/docs-release/guides/repository-operating-models.en-US.md +21 -21
  99. package/docs-release/guides/repository-operating-models.md +21 -21
  100. package/docs-release/guides/task-state-machine.en-US.md +35 -18
  101. package/docs-release/guides/task-state-machine.md +35 -18
  102. package/docs-release/guides/typescript-runtime-migration-closeout.md +96 -0
  103. package/examples/minimal-project/AGENTS.md +2 -2
  104. package/examples/minimal-project/coding-agent-harness/harness.yaml +14 -0
  105. package/examples/minimal-project/coding-agent-harness/planning/tasks/demo-task/INDEX.md +60 -0
  106. package/examples/minimal-project/coding-agent-harness/planning/tasks/demo-task/progress.md +11 -0
  107. package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/review.md +1 -1
  108. package/package.json +22 -13
  109. package/presets/legacy-migration/preset.yaml +5 -5
  110. package/presets/legacy-migration/templates/execution_strategy.append.md +1 -1
  111. package/presets/lesson-sedimentation/preset.yaml +3 -3
  112. package/presets/module/preset.yaml +2 -2
  113. package/presets/module/templates/execution_strategy.append.md +1 -1
  114. package/presets/module/templates/task_plan.append.md +3 -3
  115. package/presets/standard-task/preset.yaml +2 -2
  116. package/references/adversarial-review-standard.md +2 -2
  117. package/references/agents-md-pattern.md +14 -14
  118. package/references/cadence-ledger.md +1 -1
  119. package/references/ci-cd-standard.md +1 -1
  120. package/references/delivery-operating-model-standard.md +4 -4
  121. package/references/docs-directory-standard.md +65 -159
  122. package/references/external-source-intake-standard.md +10 -10
  123. package/references/harness-ledger.md +6 -6
  124. package/references/legacy-12-phase-bootstrap.md +2 -2
  125. package/references/lessons-governance.md +15 -15
  126. package/references/long-running-task-standard.md +6 -6
  127. package/references/module-parallel-standard.md +34 -34
  128. package/references/planning-loop.md +6 -6
  129. package/references/project-onboarding-audit.md +4 -4
  130. package/references/regression-system.md +2 -2
  131. package/references/repo-governance-standard.md +4 -4
  132. package/references/review-routing-standard.md +1 -1
  133. package/references/ssot-governance.md +19 -19
  134. package/references/taskr-gap-analysis.md +5 -5
  135. package/references/walkthrough-closeout.md +14 -14
  136. package/references/worktree-parallel.md +3 -3
  137. package/skills/preset-creator/references/complex-task-skeleton/brief.md +11 -0
  138. package/skills/preset-creator/references/complex-task-skeleton/task_plan.md +1 -1
  139. package/skills/preset-creator/references/preset-package-skeleton.md +5 -5
  140. package/templates/AGENTS.md.template +31 -29
  141. package/templates/architecture/README.md +4 -4
  142. package/templates/architecture/service-catalog.md +2 -2
  143. package/templates/architecture/services/service-template.md +1 -1
  144. package/templates/dashboard/assets/app-src/00-state.js +12 -0
  145. package/templates/dashboard/assets/app-src/10-router.js +3 -0
  146. package/templates/dashboard/assets/app-src/20-overview.js +13 -3
  147. package/templates/dashboard/assets/app-src/35-task-detail.js +46 -6
  148. package/templates/dashboard/assets/app-src/40-modules.js +1 -1
  149. package/templates/dashboard/assets/app-src/55-presets.js +375 -0
  150. package/templates/dashboard/assets/app-src/60-shared.js +3 -1
  151. package/templates/dashboard/assets/app-src/90-bindings.js +131 -0
  152. package/templates/dashboard/assets/app.css +583 -0
  153. package/templates/dashboard/assets/app.css.manifest.json +1 -0
  154. package/templates/dashboard/assets/app.js +585 -11
  155. package/templates/dashboard/assets/app.manifest.json +1 -0
  156. package/templates/dashboard/assets/css-src/00-foundation.css +4 -0
  157. package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +62 -0
  158. package/templates/dashboard/assets/css-src/45-presets.css +516 -0
  159. package/templates/dashboard/assets/i18n.js +144 -4
  160. package/templates/development/README.md +10 -10
  161. package/templates/development/cross-repo-debugging.md +3 -3
  162. package/templates/development/external-context/service-template.md +2 -2
  163. package/templates/development/external-source-packs/README.md +4 -4
  164. package/templates/integrations/README.md +4 -4
  165. package/templates/integrations/api-contract.md +2 -2
  166. package/templates/integrations/event-contract.md +2 -2
  167. package/templates/integrations/third-party/vendor-template.md +2 -2
  168. package/templates/integrations/webhook-contract.md +2 -2
  169. package/templates/ledger/Harness-Ledger.md +1 -1
  170. package/templates/planning/INDEX.md +88 -0
  171. package/templates/planning/brief.md +1 -1
  172. package/templates/planning/module_session_prompt.md +2 -1
  173. package/templates/planning/review.md +0 -18
  174. package/templates/planning/task_plan.md +5 -44
  175. package/templates/planning/visual_map.md +13 -9
  176. package/templates/planning/visual_map.simple.md +52 -0
  177. package/templates/planning/walkthrough.md +47 -0
  178. package/templates/reference/docs-library-standard.md +8 -8
  179. package/templates/reference/execution-workflow-standard.md +29 -2
  180. package/templates/reference/external-source-intake-standard.md +15 -15
  181. package/templates/reference/repo-governance-standard.md +1 -1
  182. package/templates/ssot/Module-Registry.md +1 -1
  183. package/templates/walkthrough/walkthrough-template.md +2 -2
  184. package/templates-zh-CN/AGENTS.md.template +31 -29
  185. package/templates-zh-CN/CLAUDE.md.template +1 -1
  186. package/templates-zh-CN/architecture/README.md +4 -4
  187. package/templates-zh-CN/architecture/service-catalog.md +2 -2
  188. package/templates-zh-CN/architecture/services/service-template.md +1 -1
  189. package/templates-zh-CN/development/README.md +10 -10
  190. package/templates-zh-CN/development/cross-repo-debugging.md +3 -3
  191. package/templates-zh-CN/development/external-context/service-template.md +2 -2
  192. package/templates-zh-CN/development/external-source-packs/README.md +4 -4
  193. package/templates-zh-CN/integrations/README.md +4 -4
  194. package/templates-zh-CN/integrations/api-contract.md +2 -2
  195. package/templates-zh-CN/integrations/event-contract.md +2 -2
  196. package/templates-zh-CN/integrations/third-party/vendor-template.md +2 -2
  197. package/templates-zh-CN/integrations/webhook-contract.md +2 -2
  198. package/templates-zh-CN/ledger/Harness-Ledger.md +1 -1
  199. package/templates-zh-CN/lessons/lesson-arch-process-change.md +1 -1
  200. package/templates-zh-CN/lessons/lesson-new-doc.md +3 -3
  201. package/templates-zh-CN/lessons/lesson-ref-change.md +4 -4
  202. package/templates-zh-CN/planning/INDEX.md +87 -0
  203. package/templates-zh-CN/planning/brief.md +1 -1
  204. package/templates-zh-CN/planning/module_session_prompt.md +12 -11
  205. package/templates-zh-CN/planning/review.md +0 -18
  206. package/templates-zh-CN/planning/task_plan.md +3 -63
  207. package/templates-zh-CN/planning/visual_map.md +14 -7
  208. package/templates-zh-CN/planning/visual_map.simple.md +48 -0
  209. package/templates-zh-CN/planning/walkthrough.md +47 -0
  210. package/templates-zh-CN/reference/adversarial-review-standard.md +2 -2
  211. package/templates-zh-CN/reference/delivery-operating-model-standard.md +3 -3
  212. package/templates-zh-CN/reference/docs-library-standard.md +28 -28
  213. package/templates-zh-CN/reference/execution-workflow-standard.md +32 -7
  214. package/templates-zh-CN/reference/external-source-intake-standard.md +16 -16
  215. package/templates-zh-CN/reference/harness-ledger-standard.md +6 -6
  216. package/templates-zh-CN/reference/regression-ssot-governance.md +2 -2
  217. package/templates-zh-CN/reference/repo-governance-standard.md +1 -1
  218. package/templates-zh-CN/reference/review-routing-standard.md +1 -1
  219. package/templates-zh-CN/reference/walkthrough-standard.md +7 -7
  220. package/templates-zh-CN/reference/worktree-standard.md +1 -1
  221. package/templates-zh-CN/regression/Cadence-Ledger.md +2 -2
  222. package/templates-zh-CN/ssot/Delivery-SSoT.md +3 -3
  223. package/templates-zh-CN/ssot/Module-Registry.md +3 -3
  224. package/templates-zh-CN/ssot/Regression-SSoT.md +2 -2
  225. package/templates-zh-CN/walkthrough/walkthrough-template.md +5 -5
  226. package/tsconfig.dist.json +16 -0
  227. package/tsconfig.json +25 -0
  228. package/tsconfig.runtime.json +24 -0
  229. package/examples/minimal-project/.harness-capabilities.json +0 -8
  230. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/progress.md +0 -11
  231. package/scripts/check-harness.mjs +0 -508
  232. package/scripts/commands/dashboard-command.mjs +0 -67
  233. package/scripts/commands/migration-command.mjs +0 -96
  234. package/scripts/commands/preset-command.mjs +0 -73
  235. package/scripts/commands/task-command.mjs +0 -327
  236. package/scripts/harness.mjs +0 -287
  237. package/scripts/lib/capability-registry.mjs +0 -591
  238. package/scripts/lib/check-module-parallel.mjs +0 -237
  239. package/scripts/lib/check-profiles.mjs +0 -418
  240. package/scripts/lib/check-task-contracts.mjs +0 -47
  241. package/scripts/lib/core-shared.mjs +0 -196
  242. package/scripts/lib/dashboard-data.mjs +0 -412
  243. package/scripts/lib/dashboard-workbench.mjs +0 -257
  244. package/scripts/lib/dashboard-writer.mjs +0 -198
  245. package/scripts/lib/git-status-summary.mjs +0 -46
  246. package/scripts/lib/governance-index-generator.mjs +0 -174
  247. package/scripts/lib/governance-sync.mjs +0 -514
  248. package/scripts/lib/governance-table-boundary.mjs +0 -175
  249. package/scripts/lib/lesson-maintenance.mjs +0 -152
  250. package/scripts/lib/markdown-utils.mjs +0 -158
  251. package/scripts/lib/migration-planner.mjs +0 -478
  252. package/scripts/lib/migration-support.mjs +0 -312
  253. package/scripts/lib/preset-audit-contracts.mjs +0 -37
  254. package/scripts/lib/preset-engine.mjs +0 -497
  255. package/scripts/lib/preset-registry.mjs +0 -627
  256. package/scripts/lib/preset-resource-contracts.mjs +0 -83
  257. package/scripts/lib/review-confirm-git-gate.mjs +0 -248
  258. package/scripts/lib/subagent-authorization-audit.mjs +0 -196
  259. package/scripts/lib/task-completion-consistency.mjs +0 -16
  260. package/scripts/lib/task-index.mjs +0 -93
  261. package/scripts/lib/task-lesson-candidates.mjs +0 -242
  262. package/scripts/lib/task-lesson-sedimentation.mjs +0 -326
  263. package/scripts/lib/task-lifecycle/review-confirm.mjs +0 -101
  264. package/scripts/lib/task-lifecycle/review-gates.mjs +0 -70
  265. package/scripts/lib/task-lifecycle/text-utils.mjs +0 -24
  266. package/scripts/lib/task-lifecycle.mjs +0 -649
  267. package/scripts/lib/task-review-model.mjs +0 -469
  268. package/scripts/lib/task-scanner.mjs +0 -576
  269. package/scripts/lib/task-tombstone-commands.mjs +0 -140
  270. package/scripts/postinstall.mjs +0 -14
  271. package/templates/walkthrough/Closeout-SSoT.md +0 -43
  272. package/templates-zh-CN/walkthrough/Closeout-SSoT.md +0 -42
  273. /package/examples/minimal-project/{docs → coding-agent-harness/governance/generated}/Harness-Ledger.md +0 -0
  274. /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/brief.md +0 -0
  275. /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/execution_strategy.md +0 -0
  276. /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/findings.md +0 -0
  277. /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/lesson_candidates.md +0 -0
  278. /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/task_plan.md +0 -0
  279. /package/examples/minimal-project/{docs/09-PLANNING/TASKS → coding-agent-harness/planning/tasks}/demo-task/visual_map.md +0 -0
@@ -71,6 +71,7 @@ Not every document is written for the same reader.
71
71
  - `guides/migration-playbook.md` / `guides/migration-playbook.en-US.md` — smooth migration guide for existing legacy harness projects. 旧 Harness 项目的平滑迁移指南。
72
72
  - `guides/legacy-migration-agent-prompt.md` / `guides/legacy-migration-agent-prompt.zh-CN.md` — prompt contract for agents running baseline or full legacy migration. 给迁移 Agent 使用的执行合同。
73
73
  - `guides/full-legacy-migration-subagent-strategy.md` / `guides/full-legacy-migration-subagent-strategy.zh-CN.md` — full readable cutover strategy with subagent roles, adversarial review, and dashboard/CLI proof gates. 完整可读迁移的 subagent 分工、对抗审查和 Dashboard/CLI 证据门禁。
74
+ - `guides/typescript-runtime-migration-closeout.md` — public closeout for the TypeScript runtime source-twin migration and the remaining `.mjs` shim policy. TypeScript runtime source twin 迁移收口和剩余 `.mjs` shim 策略。
74
75
 
75
76
  ## Repository Operating Models / 仓库运行模式
76
77
 
@@ -35,10 +35,10 @@ agent workflow runs over days, handoffs, reviews, and releases.
35
35
  ```mermaid
36
36
  flowchart TB
37
37
  Skill["Agent skill<br/>SKILL.md"]
38
- CLI["Harness CLI<br/>scripts/harness.mjs"]
38
+ CLI["Harness CLI<br/>dist/harness.mjs"]
39
39
  Standards["Standards<br/>references/"]
40
40
  Templates["Scaffolds<br/>templates/ + templates-zh-CN/"]
41
- Target["Target repository<br/>AGENTS.md + docs/"]
41
+ Target["Target repository<br/>AGENTS.md + coding-agent-harness/"]
42
42
  Scanner["Scanner and validators<br/>status/check"]
43
43
  Dashboard["Dashboard / Workbench<br/>HTML + JSON"]
44
44
  Human["Human reviewer<br/>approval and inspection"]
@@ -66,15 +66,15 @@ project facts.
66
66
  ```mermaid
67
67
  flowchart TB
68
68
  Entry["AGENTS.md<br/>agent entry and routing"]
69
- Registry[".harness-capabilities.json<br/>enabled capabilities"]
69
+ Registry["coding-agent-harness/harness.yaml<br/>enabled capabilities"]
70
70
  Docs["docs/"]
71
- Architecture["03-ARCHITECTURE<br/>system facts"]
72
- Development["04-DEVELOPMENT<br/>local setup and code map"]
73
- QA["05-TEST-QA<br/>regression and cadence"]
74
- Integrations["06-INTEGRATIONS<br/>external contracts"]
75
- Planning["09-PLANNING<br/>tasks and modules"]
76
- Walkthrough["10-WALKTHROUGH<br/>closeout evidence"]
77
- Reference["11-REFERENCE<br/>local operating standards"]
71
+ Architecture["coding-agent-harness/context/architecture<br/>system facts"]
72
+ Development["coding-agent-harness/context/development<br/>local setup and code map"]
73
+ QA["coding-agent-harness/governance/regression<br/>regression and cadence"]
74
+ Integrations["coding-agent-harness/context/integrations<br/>external contracts"]
75
+ Planning["coding-agent-harness/planning<br/>tasks and modules"]
76
+ Walkthrough["coding-agent-harness/planning/tasks/<task><br/>closeout evidence"]
77
+ Reference["coding-agent-harness/governance/standards<br/>local operating standards"]
78
78
  Ledger["Harness Ledger / SSoTs / Lessons<br/>long-lived memory"]
79
79
 
80
80
  Entry --> Docs
@@ -98,8 +98,8 @@ The target repository can be organized in three ways:
98
98
 
99
99
  | Model | Control surface | Execution surface |
100
100
  | --- | --- | --- |
101
- | Single repo | The same repository owns `AGENTS.md`, `docs/`, code, tests, and closeout. | The same repository. |
102
- | Independent multi-repo | Each repository owns its own local `AGENTS.md` and `docs/`. | Each repository runs independently. |
101
+ | Single repo | The same repository owns `AGENTS.md`, `coding-agent-harness/`, code, tests, and closeout. | The same repository. |
102
+ | Independent multi-repo | Each repository owns its own local `AGENTS.md` and `coding-agent-harness/`. | Each repository runs independently. |
103
103
  | Parent-control repository | A parent repository owns the global Harness control plane. | Child repositories own implementation code and local checks. |
104
104
 
105
105
  For products split across frontend, backend, SDKs, services, and upstream references,
@@ -225,7 +225,7 @@ confirmation. Tasks with missing packets, incomplete evidence, lesson-routing
225
225
  work, blocking findings, or historical closeout debt are routed to separate
226
226
  lifecycle queues: Missing Materials, Blocked, Lessons, Confirmed / Finalized,
227
227
  and Soft-deleted / Superseded. Agent-authored submissions can request review,
228
- but only a strict `Human Review Confirmation` block marks the task as
228
+ but only committed Task Audit Metadata in `INDEX.md` marks the task as
229
229
  `confirmed`.
230
230
 
231
231
  ## Migration Rails
@@ -29,10 +29,10 @@ Prompt engineering 改善一次模型调用。Context engineering 改善模型
29
29
  ```mermaid
30
30
  flowchart TB
31
31
  Skill["Agent Skill<br/>SKILL.md"]
32
- CLI["Harness CLI<br/>scripts/harness.mjs"]
32
+ CLI["Harness CLI<br/>dist/harness.mjs"]
33
33
  Standards["标准<br/>references/"]
34
34
  Templates["脚手架<br/>templates/ + templates-zh-CN/"]
35
- Target["目标仓库<br/>AGENTS.md + docs/"]
35
+ Target["目标仓库<br/>AGENTS.md + coding-agent-harness/"]
36
36
  Scanner["扫描器与校验器<br/>status/check"]
37
37
  Dashboard["Dashboard / Workbench<br/>HTML + JSON"]
38
38
  Human["人工审查者<br/>批准与检查"]
@@ -58,15 +58,15 @@ flowchart TB
58
58
  ```mermaid
59
59
  flowchart TB
60
60
  Entry["AGENTS.md<br/>Agent 入口与路由"]
61
- Registry[".harness-capabilities.json<br/>已启用能力"]
61
+ Registry["coding-agent-harness/harness.yaml<br/>已启用能力"]
62
62
  Docs["docs/"]
63
- Architecture["03-ARCHITECTURE<br/>系统事实"]
64
- Development["04-DEVELOPMENT<br/>本地设置与代码地图"]
65
- QA["05-TEST-QA<br/>回归与节奏"]
66
- Integrations["06-INTEGRATIONS<br/>外部契约"]
67
- Planning["09-PLANNING<br/>任务与模块"]
68
- Walkthrough["10-WALKTHROUGH<br/>收口证据"]
69
- Reference["11-REFERENCE<br/>本地运行标准"]
63
+ Architecture["coding-agent-harness/context/architecture<br/>系统事实"]
64
+ Development["coding-agent-harness/context/development<br/>本地设置与代码地图"]
65
+ QA["coding-agent-harness/governance/regression<br/>回归与节奏"]
66
+ Integrations["coding-agent-harness/context/integrations<br/>外部契约"]
67
+ Planning["coding-agent-harness/planning<br/>任务与模块"]
68
+ Walkthrough["coding-agent-harness/planning/tasks/<task><br/>收口证据"]
69
+ Reference["coding-agent-harness/governance/standards<br/>本地运行标准"]
70
70
  Ledger["Harness Ledger / SSoT / Lessons<br/>长期记忆"]
71
71
 
72
72
  Entry --> Docs
@@ -89,8 +89,8 @@ flowchart TB
89
89
 
90
90
  | 模式 | 控制面 | 执行面 |
91
91
  | --- | --- | --- |
92
- | 单仓模式 | 同一个仓库管理 `AGENTS.md`、`docs/`、代码、测试和收口。 | 同一个仓库。 |
93
- | 多仓独立模式 | 每个仓库都有自己的局部 `AGENTS.md` 和 `docs/`。 | 每个仓库独立执行。 |
92
+ | 单仓模式 | 同一个仓库管理 `AGENTS.md`、`coding-agent-harness/`、代码、测试和收口。 | 同一个仓库。 |
93
+ | 多仓独立模式 | 每个仓库都有自己的局部 `AGENTS.md` 和 `coding-agent-harness/`。 | 每个仓库独立执行。 |
94
94
  | 主控仓库模式 | 父仓库管理全局 Harness 控制面。 | 子仓库管理实现代码和局部检查。 |
95
95
 
96
96
  如果一个产品拆成前端、后端、SDK、微服务和上游参考仓库,主控仓库模式可以把 Agent 启动入口、生成的任务生命周期 Ledger、回归状态和收口证据固定在一个地方。详见 `docs-release/guides/repository-operating-models.md` 和 `docs-release/guides/parent-control-repository-pattern.md`。
@@ -202,7 +202,7 @@ flowchart TB
202
202
 
203
203
  standard 和 complex 任务必须具备进度、证据、lesson 决议、人工确认和收口链接,才会被视为真正关闭。
204
204
 
205
- Review 队列只展示已经提交审查材料包、并且可以等待人工确认的任务。缺少审查提交、证据不完整、仍有 Lesson 路由、存在阻塞发现,或历史收口债务的任务,会进入独立的生命周期队列:Missing Materials、Blocked、Lessons、Confirmed / Finalized、Soft-deleted / Superseded。Agent 写入的提交只能请求审查;只有严格的 `Human Review Confirmation` 块存在时,任务才是 `confirmed`。
205
+ Review 队列只展示已经提交审查材料包、并且可以等待人工确认的任务。缺少审查提交、证据不完整、仍有 Lesson 路由、存在阻塞发现,或历史收口债务的任务,会进入独立的生命周期队列:Missing Materials、Blocked、Lessons、Confirmed / Finalized、Soft-deleted / Superseded。Agent 写入的提交只能请求审查;只有 `INDEX.md` 中已提交的 Task Audit Metadata 才能把任务标记为 `confirmed`。
206
206
 
207
207
  ## 迁移轨道
208
208
 
@@ -0,0 +1,218 @@
1
+ # 01 — 系统全景
2
+
3
+ ## 这是什么,解决什么问题
4
+
5
+ 在 AI 编程工具(Codex、Claude Code、Gemini CLI)普及之前,
6
+ "任务管理"对开发者来说意味着 Jira ticket 或 GitHub issue——
7
+ 这些工具是为人类设计的,Agent 读不懂,也无法从中派生出可验证的状态。
8
+
9
+ **Coding Agent Harness** 解决的核心问题是:
10
+
11
+ > 当 Agent 在你的代码仓库里工作时,如何确保它的工作有迹可查、有门可守、有人可审?
12
+
13
+ 它不是 Agent 本身,也不是给人用的任务管理工具。
14
+ 它是一个**仓库原生的 Agent 操作层**(repository-native operating layer)——
15
+ 给 Agent 提供可执行的结构化上下文,让 Agent 能从文件中恢复执行,
16
+ 而不依赖之前的聊天记忆。
17
+
18
+ 核心设计理念只有一句话:
19
+
20
+ > **把重要状态保存在 Agent 能读的 Markdown 文件里,然后用 CLI 从这些文件派生出
21
+ > 状态、检查、迁移计划和 Dashboard 视图。**
22
+
23
+ ---
24
+
25
+ ## 为什么叫 "Harness"
26
+
27
+ "Harness"在工程语境中是"约束装置"的意思——用来约束、引导、测量一个系统的行为,
28
+ 而不是替代它。就像测试框架中的 "test harness" 不是测试本身,
29
+ 而是让测试可以被组织、执行和验证的基础设施。
30
+
31
+ Coding Agent Harness 不是 Agent 的替代品,而是 Agent 的约束装置:
32
+ - 任务有生命周期(创建 → 执行 → 审查 → 收口)
33
+ - 审查有门禁(Agent 不能自己给自己打通关)
34
+ - 状态有记录(每次变更都写入 Markdown,可 git blame)
35
+ - 人类有检查入口(本地 Dashboard + Workbench 审查确认)
36
+
37
+ ---
38
+
39
+ ## 和 Jira / Linear / GitHub Issues 的本质区别
40
+
41
+ | | Jira / Linear / GitHub Issues | Coding Agent Harness |
42
+ | --- | --- | --- |
43
+ | 设计给谁 | 人类协作 | Agent 执行 + 人类审查 |
44
+ | 状态存在哪 | 外部 SaaS 数据库 | 仓库内的 Markdown 文件 |
45
+ | Agent 能读吗 | 需要 API 集成 | 直接读文件 |
46
+ | 能 git diff 吗 | 不能 | 可以 |
47
+ | 能离线工作吗 | 不能 | 可以 |
48
+ | 能从文件恢复执行吗 | 不能 | 可以 |
49
+
50
+ ---
51
+
52
+ ## Level 0 — 四个大块
53
+
54
+ 先看最高层。整个系统由四个大块组成:
55
+
56
+ ```mermaid
57
+ flowchart LR
58
+ A["📦 Package\n发布的 npm 包\n(CLI + 模板 + 标准 + Preset)"]
59
+ B["📁 Target Repo\n用户的项目仓库\n(文档树 + 状态文件)"]
60
+ C["⚙️ Runtime\n运行时引擎\n(扫描 + 检查 + 生成)"]
61
+ D["👤 Human\n人类检查入口\n(Dashboard + 审查确认)"]
62
+
63
+ A -->|"scaffold + validate"| B
64
+ B -->|"读取"| C
65
+ C -->|"生成"| D
66
+ D -->|"review-confirm"| B
67
+ ```
68
+
69
+ - **Package**:你 `npm install` 的那个东西,包含 CLI、模板、标准文档、Preset 包
70
+ - **Target Repo**:你的项目,harness 在里面创建 `coding-agent-harness/` 文档树来记录任务状态
71
+ - **Runtime**:CLI 运行时,扫描文档树、验证合规、生成 Dashboard
72
+ - **Human**:浏览器里看 Dashboard,在 Workbench 里做审查确认
73
+
74
+ 注意这个循环的方向:**Package 写入 Target Repo,Runtime 读取 Target Repo,
75
+ Human 通过 review-confirm 再写回 Target Repo**。
76
+ 整个系统是一个以 Markdown 文件为中心的读写循环,没有任何隐藏状态。
77
+
78
+ ---
79
+
80
+ ## Level 1 — 每个大块里有什么
81
+
82
+ ### Package 里有什么
83
+
84
+ ```mermaid
85
+ flowchart TD
86
+ PKG["📦 Package\ncoding-agent-harness@npm"]
87
+
88
+ PKG --> CLI["harness CLI\ndist/harness.mjs\n唯一命令入口"]
89
+ PKG --> Lib["核心库\nscripts/lib/\n~30 个模块,6 个功能层"]
90
+ PKG --> Templates["任务模板\ntemplates/\n任务骨架文件(task_plan / visual_map 等)"]
91
+ PKG --> References["操作标准\nreferences/\n可复制到目标仓库的规范文档"]
92
+ PKG --> Presets["Preset 包\npresets/\n可复用任务方法(legacy-migration / module 等)"]
93
+ ```
94
+
95
+ Package 是**只读的**——它提供工具和模板,但不存储任何状态。
96
+ 状态全部在 Target Repo 里。
97
+
98
+ ### Target Repo 里有什么
99
+
100
+ ```mermaid
101
+ flowchart TD
102
+ REPO["📁 Target Repo\n你的项目仓库"]
103
+
104
+ REPO --> Entry["AGENTS.md\nAgent 入口和路由\n(告诉 Agent 去哪里找上下文)"]
105
+ REPO --> Manifest["coding-agent-harness/harness.yaml\n启用能力和目录结构"]
106
+ REPO --> Harness["coding-agent-harness/\nHarness 工作区"]
107
+ REPO --> Docs["docs/\nReference 文档和项目标准"]
108
+
109
+ Harness --> Planning["planning/\n任务目录 + 模块目录"]
110
+ Harness --> Ledger["governance/generated/Harness-Ledger.md\n全局账本(所有任务汇总)"]
111
+ Harness --> Walkthrough["任务本地 walkthrough.md\n收口证据"]
112
+ Docs --> Reference["coding-agent-harness/governance/standards/\n本地操作标准(从 Package 复制过来)"]
113
+ Docs --> Governance["01-GOVERNANCE/\nLesson 沉淀库"]
114
+ ```
115
+
116
+ 每个任务对应 `coding-agent-harness/planning/tasks/<task-id>/` 下的一个目录,
117
+ 里面有 `task_plan.md`、`progress.md`、`visual_map.md`、`review.md` 等文件。
118
+
119
+ ### Runtime 做什么
120
+
121
+ ```mermaid
122
+ flowchart TD
123
+ RT["⚙️ Runtime\nharness CLI 运行时"]
124
+
125
+ RT --> Scan["扫描\n读取所有任务文件\n解析状态 / 阶段 / 审查 / Lesson"]
126
+ RT --> Check["检查\n9 个验证器验证合规性\n输出 failures / warnings"]
127
+ RT --> Generate["生成\n输出 Dashboard HTML + JSON 索引\n输出治理索引表"]
128
+ RT --> Migrate["迁移\n分析旧项目差距\n生成迁移动作队列"]
129
+ RT --> Lifecycle["生命周期\n执行状态转换命令\n写入 Governance Sync"]
130
+ ```
131
+
132
+ Runtime 是**无状态的**——每次运行都从 Markdown 文件重新读取,
133
+ 不缓存任何中间状态(除了 `harness dev` 的文件监听)。
134
+
135
+ ---
136
+
137
+ ## Level 2 — 核心概念词汇表
138
+
139
+ | 概念 | 一句话解释 | 在哪里 |
140
+ | --- | --- | --- |
141
+ | **Task** | 一个有生命周期的工作单元 | `coding-agent-harness/planning/tasks/<id>/` |
142
+ | **Budget** | 任务复杂度:`simple` / `standard` / `complex`,决定门禁严格程度 | `task_plan.md` |
143
+ | **Phase** | Visual Map 中的执行阶段,有状态和完成度 | `visual_map.md` |
144
+ | **Capability** | 可选功能模块,如 `dashboard`、`module-parallel` | `coding-agent-harness/harness.yaml` |
145
+ | **Review Gate** | 阻止任务完成的审查门禁,必须人工确认才能通过 | `INDEX.md` + `review.md` |
146
+ | **Governance Sync** | 任务状态变更时自动更新全局账本的原子操作 | `coding-agent-harness/governance/generated/Harness-Ledger.md` |
147
+ | **Preset** | 可复用的任务方法包,如 `legacy-migration`、`module` | `presets/<id>/` |
148
+ | **Lesson** | 从任务中沉淀的可复用经验 | `coding-agent-harness/governance/lessons/` |
149
+ | **Tombstone** | 软删除 / 合并 / 被取代的任务标记 | `task_plan.md` 中的特殊块 |
150
+ | **lifecycleState** | 从任务状态 + 审查状态综合派生的队列分类 | 运行时派生,不存文件 |
151
+
152
+ ---
153
+
154
+ ## Level 2 — 设计决策
155
+
156
+ ### 为什么用 Markdown 而不是数据库
157
+
158
+ 这是最常被问到的问题。
159
+
160
+ **选择 Markdown 的原因**:
161
+
162
+ 1. **Agent 可读**:所有主流 AI 编程工具都能读写 Markdown,不需要特殊 API
163
+ 2. **Git 原生**:状态变更可以 diff、可以 blame、可以回滚,审计链天然存在
164
+ 3. **人类可读**:不需要工具就能直接查看状态,降低工具依赖
165
+ 4. **离线工作**:不依赖外部服务,断网也能用
166
+ 5. **可移植**:换 Agent 工具不需要迁移数据
167
+ 6. **单一事实源**:避免 Markdown、JSON、SQLite 三份事实互相漂移
168
+
169
+ **代价**:
170
+
171
+ - 解析 Markdown 比查数据库慢(但对于任务管理规模,这不是瓶颈)
172
+ - 格式约束需要靠检查器维护,而不是数据库 schema 强制
173
+ - 并发写入需要文件锁(`governance-sync` 的锁机制)
174
+
175
+ **被考虑但否决的方案**:
176
+ - **SQLite**:Git diff 不友好,引入二进制文件,且当前规模(几百任务)不需要
177
+ - **JSON**:适合机器解析但不适合 Agent 理解叙述性上下文
178
+ - **YAML/TOML**:不适合承载 brief、执行策略这类长文本内容
179
+
180
+ ### 为什么是 npm 包而不是 SaaS
181
+
182
+ Agent 需要在本地文件系统上读写状态。SaaS 会引入网络依赖、认证、延迟,
183
+ 破坏 Agent 的自主执行能力。npm 包让任何能运行 Node.js 的环境都能直接使用,
184
+ 无需账号或网络。`package.json` 的 `dependencies` 为空——零运行时依赖。
185
+
186
+ ### 为什么 review-confirm 必须是人工操作
187
+
188
+ `review-confirm` 是整个系统里**唯一不能被 Agent 自动执行**的操作。
189
+
190
+ 原因:
191
+
192
+ > Agent 不能给自己的工作打通关。
193
+
194
+ 这个边界不是一开始就有的。最初 Dashboard workbench 的 review action 没有 Agent/Human 区分。
195
+ 后来通过竞品分析(Taskr competitive intake)识别出"Agent 自动确认 review"是 P0 风险,
196
+ 才引入了 Git 提交门禁:`review-confirm` 会把带有 Git `user.name` / `user.email` 的
197
+ 人工确认审计字段写入任务 `INDEX.md`,并做两次 Git 原子提交——第一次提交确认字段,
198
+ 第二次提交包含第一个 commit SHA 的最终审计记录。这个 Git commit 是**可审计的人类签名**,
199
+ 证明有真实的人类看过这个任务。
200
+
201
+ ### 为什么派生状态不存储在文件里
202
+
203
+ `lifecycleState`、`taskQueues`、`reviewQueueState` 这些派生状态每次运行时重新计算,
204
+ 不写回 Markdown 文件。原因有三:
205
+
206
+ 1. **避免事实漂移**:如果派生状态也写回文件,就有了两份事实源,任何一份过期都会造成误报
207
+ 2. **防止绕过门禁**:如果 Agent 能直接修改派生字段,就能绕过 review-confirm 的门禁
208
+ 3. **治理规则即代码**:scanner 的推导规则本身就是治理规则的机器可读表达,每次运行重新计算等于每次都重新执行一遍治理检查
209
+
210
+ ---
211
+
212
+ ## 下一步
213
+
214
+ - 想理解代码怎么组织的 → [02-module-dependency.md](02-module-dependency.md)
215
+ - 想理解一个任务从头到尾怎么走 → [03-task-lifecycle.md](03-task-lifecycle.md)
216
+ - 想理解检查器在验什么 → [04-check-and-governance.md](04-check-and-governance.md)
217
+ - 想理解 Dashboard 数据从哪来 → [05-data-flow.md](05-data-flow.md)
218
+ - 想理解 Preset 和迁移怎么工作 → [06-preset-and-migration.md](06-preset-and-migration.md)
@@ -0,0 +1,257 @@
1
+ # 02 — 代码模块依赖关系
2
+
3
+ ## Level 0 — 入口在哪
4
+
5
+ 所有命令都从一个文件进来:
6
+
7
+ ```mermaid
8
+ flowchart LR
9
+ User["用户 / Agent\n$ harness <command> [target]"] -->|"解析参数 + 分发"| Entry["dist/harness.mjs\n唯一 CLI 入口"]
10
+ ```
11
+
12
+ `harness.mjs` 做两件事:解析命令行参数,然后分发给对应的 command 模块或直接调用核心库。
13
+ 它本身不包含任何业务逻辑。
14
+
15
+ ---
16
+
17
+ ## Level 1 — 命令如何分发
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ Entry["dist/harness.mjs"]
22
+
23
+ Entry -->|"dashboard\ndev"| DashCmd["dist/commands/dashboard-command.mjs\nDashboard 生成 + 动态服务"]
24
+ Entry -->|"migrate-plan\nmigrate-run\nmigrate-verify"| MigCmd["dist/commands/migration-command.mjs\n迁移三阶段命令"]
25
+ Entry -->|"new-task / task-start\ntask-phase / task-review\ntask-complete / review-confirm\ntask-tombstone"| TaskCmd["dist/commands/task-command.mjs\n任务生命周期命令"]
26
+ Entry -->|"preset catalog\npreset install\npreset uninstall"| PresetCmd["dist/commands/preset-command.mjs\nPreset 管理命令"]
27
+ Entry -->|"check / status / init\ngovernance / lesson-promote\n..."| Core["dist/lib/harness-core.mjs\n(直接调用)"]
28
+ ```
29
+
30
+ 四个 command 模块各自负责一个领域,其余命令直接调用 `harness-core.mjs`。
31
+
32
+ **为什么这样分**:command 模块处理的是有复杂交互逻辑的命令(多步骤、需要读写多个文件、
33
+ 有用户提示),而简单的查询类命令(`check`、`status`)直接调用核心库更简洁。
34
+
35
+ ---
36
+
37
+ ## Level 2 — harness-core.mjs 是什么
38
+
39
+ `harness-core.mjs` 是一个 **facade(门面)**,它自己不写任何业务逻辑,
40
+ 只是把 `lib/` 下所有模块的导出重新 re-export 出来。
41
+
42
+ 这样设计的好处:外部代码只需要 `import from "./lib/harness-core.mjs"` 就能拿到所有功能,
43
+ 不需要知道具体在哪个子模块里。
44
+
45
+ ```mermaid
46
+ flowchart TD
47
+ Core["harness-core.mjs\n(纯 re-export facade)"]
48
+
49
+ Core --> G1["① 核心工具层\ncore-shared + markdown-utils"]
50
+ Core --> G2["② 任务扫描层\ntask-scanner + review-model + lesson-candidates"]
51
+ Core --> G3["③ 检查与治理层\ncheck-profiles + governance-sync + governance-index"]
52
+ Core --> G4["④ Dashboard 层\ndashboard-data + dashboard-writer + workbench"]
53
+ Core --> G5["⑤ 任务生命周期层\ntask-lifecycle + review-gates + review-confirm"]
54
+ Core --> G6["⑥ 迁移与 Preset 层\nmigration-planner + preset-registry + tombstone"]
55
+ ```
56
+
57
+ 下面逐层展开。
58
+
59
+ ---
60
+
61
+ ## Level 3 — 六个功能层详解
62
+
63
+ ### ① 核心工具层
64
+
65
+ 这两个模块是所有其他模块的基础,几乎每个模块都会 import 它们:
66
+
67
+ ```mermaid
68
+ flowchart LR
69
+ CoreShared["core-shared.mjs\n路径解析 / 常量枚举\n文件读写 / locale 处理\n模板渲染"]
70
+ MarkdownUtils["markdown-utils.mjs\nMarkdown 表格提取\n行更新 / 列查找\n依赖列表拆分"]
71
+ ```
72
+
73
+ `core-shared` 定义了所有允许的枚举值,是整个系统的"类型系统":
74
+
75
+ | 枚举 | 允许值 |
76
+ | --- | --- |
77
+ | `allowedTaskStates` | `not_started / planned / in_progress / review / blocked / done` |
78
+ | `allowedTaskBudgets` | `simple / standard / complex` |
79
+ | `allowedPhaseStates` | `planned / in_progress / review / blocked / done / skipped` |
80
+ | `allowedCapabilities` | `core / module-parallel / subagent-worker / adversarial-review / ...` |
81
+
82
+ `markdown-utils` 提供了对 Markdown 表格的结构化操作——这是整个系统能从 Markdown 文件
83
+ 派生状态的技术基础。
84
+
85
+ ---
86
+
87
+ ### ② 任务扫描层
88
+
89
+ 负责读取 `coding-agent-harness/planning/tasks/` 下的所有文件,解析出结构化数据:
90
+
91
+ ```mermaid
92
+ flowchart TD
93
+ TaskScanner["task-scanner.mjs\n扫描所有任务目录\n解析状态 / 预算 / 阶段 / 元数据"]
94
+
95
+ TaskScanner --> ReviewModel["task-review-model.mjs\n审查确认解析\n生命周期队列派生\ntombstone 解析"]
96
+ TaskScanner --> LessonCandidates["task-lesson-candidates.mjs\nLesson candidate 状态解析\n决策完成判定"]
97
+
98
+ ReviewModel --> CoreShared
99
+ ReviewModel --> MarkdownUtils
100
+ TaskScanner --> CoreShared
101
+ TaskScanner --> MarkdownUtils
102
+ ```
103
+
104
+ `task-review-model` 里有几个关键的**派生函数**——它们不读文件,
105
+ 只根据已解析的数据计算出新的状态:
106
+
107
+ | 函数 | 输入 | 输出 |
108
+ | --- | --- | --- |
109
+ | `deriveLifecycleState()` | taskState + reviewStatus + tombstone | `lifecycleState`(队列分类) |
110
+ | `deriveTaskQueues()` | lifecycleState + materials + lessons | `taskQueues[]`(属于哪些队列) |
111
+ | `deriveReviewQueueState()` | findings + confirmation | `reviewQueueState` |
112
+ | `parseTaskTombstone()` | task_plan.md 内容 | 软删除 / 合并 / 被取代状态 |
113
+
114
+ 这些派生函数是**纯函数**,相同输入永远得到相同输出,便于测试和调试。
115
+
116
+ ---
117
+
118
+ ### ③ 检查与治理层
119
+
120
+ 负责验证合规性,以及维护全局索引的原子写入:
121
+
122
+ ```mermaid
123
+ flowchart TD
124
+ CheckProfiles["check-profiles.mjs\nbuildStatus() 编排 9 个验证器\n返回 failures + warnings + tasks"]
125
+
126
+ CheckProfiles --> V1["validateCapabilities\n能力注册表一致性"]
127
+ CheckProfiles --> V2["validateReviewSchema\nreview.md 结构"]
128
+ CheckProfiles --> V3["validateVisualMaps\nvisual_map 合规"]
129
+ CheckProfiles --> V4["validatePlanContracts\n任务合约标记"]
130
+ CheckProfiles --> V5["validateTaskPresetContracts\nPreset 合约"]
131
+ CheckProfiles --> V6["validateContextDocs\n上下文文档完整性"]
132
+ CheckProfiles --> V7["validateGovernanceTableBoundaries\n表格边界"]
133
+ CheckProfiles --> V8["validateSubagentAuthorization\nsubagent 授权"]
134
+ CheckProfiles --> V9["validateTaskCompletionConsistency\n完成一致性"]
135
+
136
+ CheckProfiles --> GitSummary["git-status-summary.mjs\nGit 状态摘要(dirty files 等)"]
137
+
138
+ GovSync["governance-sync.mjs\n原子锁 + 行级更新 + Git commit\n(任务状态变更时自动调用)"]
139
+ GovIndex["governance-index-generator.mjs\n重建全局索引表\n(手动触发)"]
140
+ GovIndex --> GovSync
141
+ ```
142
+
143
+ **重要区分**:`governance-sync` 和 `check-profiles` 没有依赖关系。
144
+ - `check-profiles`:只读,验证状态,不写文件
145
+ - `governance-sync`:只写,更新账本,不做验证
146
+
147
+ ---
148
+
149
+ ### ④ Dashboard 层
150
+
151
+ 负责把扫描结果转换成 HTML Dashboard:
152
+
153
+ ```mermaid
154
+ flowchart TD
155
+ DashData["dashboard-data.mjs\nbuildDashboardBundle()\n收集 status + documents + tables + graph + adoption"]
156
+
157
+ DashData --> CheckProfiles["check-profiles.mjs\n(调用 buildStatus)"]
158
+ DashData --> DashWriter["dashboard-writer.mjs\n写入 HTML + JSON 文件\n(静态快照模式)"]
159
+ DashData --> StatusRenderer["status-dashboard-renderer.mjs\n渲染状态摘要文本"]
160
+
161
+ DashWorkbench["dashboard-workbench.mjs\nDev 动态服务\nHTTP server + 文件监听 + 自动刷新\n(harness dev 命令)"]
162
+ ```
163
+
164
+ `DashWorkbench` 和 `DashData` / `DashWriter` 是**独立的**:
165
+ - `DashData` + `DashWriter`:生成静态快照(只读)
166
+ - `DashWorkbench`:启动本地 HTTP 服务,支持 Workbench 写操作
167
+
168
+ ---
169
+
170
+ ### ⑤ 任务生命周期层
171
+
172
+ 负责执行所有任务状态转换命令:
173
+
174
+ ```mermaid
175
+ flowchart TD
176
+ TaskLifecycle["task-lifecycle.mjs\n生命周期命令实现\nnew-task / task-start / task-phase\ntask-review / task-complete"]
177
+
178
+ TaskLifecycle --> ReviewGates["task-lifecycle/review-gates.mjs\n门禁验证逻辑\n(进入 review 前的检查)"]
179
+ TaskLifecycle --> ReviewConfirm["task-lifecycle/review-confirm.mjs\n人工确认执行\n(review-confirm 命令)"]
180
+ TaskLifecycle --> TextUtils["task-lifecycle/text-utils.mjs\n文本追加工具\n(向 Markdown 文件追加内容)"]
181
+ TaskLifecycle --> GovSync["governance-sync.mjs\n状态变更时同步账本"]
182
+ TaskLifecycle --> MigPreset["task-migration-preset.mjs\n迁移 preset 上下文注入"]
183
+
184
+ ReviewConfirm --> GitGate["review-confirm-git-gate.mjs\nGit 原子提交门禁\n(写入人工确认块 + commit)"]
185
+ ```
186
+
187
+ `review-confirm` 是整个生命周期层里最特殊的命令——它是唯一需要 Git 原子提交的操作,
188
+ 也是唯一不能被 Agent 自动执行的操作(见 [01-system-overview.md](01-system-overview.md) 的设计决策)。
189
+
190
+ ---
191
+
192
+ ### ⑥ 迁移与 Preset 层
193
+
194
+ ```mermaid
195
+ flowchart TD
196
+ PresetReg["preset-registry.mjs\n读取 presets/ YAML\n验证包完整性\n分层发现(project / user / bundled)"]
197
+ PresetEngine["preset-engine.mjs\n执行 preset entrypoints\n(template / script / check 类型)"]
198
+ PresetAudit["preset-audit-contracts.mjs\n验证 preset 合约完整性"]
199
+ PresetResource["preset-resource-contracts.mjs\n验证 preset 资源声明"]
200
+
201
+ MigPlanner["migration-planner.mjs\n分析目标仓库差距\n生成迁移动作队列"]
202
+ MigSupport["migration-support.mjs\nsession 管理 / locale 探测\nGit 状态检查 / full-cutover 验证"]
203
+ Tombstone["task-tombstone-commands.mjs\n软删除 / 合并 / 重开命令"]
204
+
205
+ LessonSed["task-lesson-sedimentation.mjs\nLesson 沉淀任务创建"]
206
+ LessonMaint["lesson-maintenance.mjs\nLesson 库维护"]
207
+ TaskIndex["task-index.mjs\n任务索引生成"]
208
+
209
+ MigPlanner --> MigSupport
210
+ PresetEngine --> PresetReg
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 一张完整的依赖总图(参考用)
216
+
217
+ 如果你已经理解了上面的分层,这张图可以作为查阅索引:
218
+
219
+ ```mermaid
220
+ flowchart TD
221
+ Entry["harness.mjs"] --> DashCmd & MigCmd & TaskCmd & PresetCmd & Core["harness-core.mjs"]
222
+
223
+ Core --> CoreShared & MarkdownUtils
224
+ Core --> TaskScanner --> ReviewModel & LessonCandidates
225
+ Core --> CheckProfiles --> GitSummary
226
+ Core --> GovSync
227
+ Core --> GovIndex --> GovSync
228
+ Core --> DashData --> DashWriter & StatusRenderer
229
+ Core --> DashWorkbench
230
+ Core --> TaskLifecycle --> ReviewGates & ReviewConfirm & TextUtils & GovSync & MigPreset
231
+ ReviewConfirm --> GitGate
232
+ Core --> PresetReg
233
+ Core --> PresetEngine --> PresetReg
234
+ Core --> MigPlanner --> MigSupport
235
+ Core --> Tombstone
236
+ Core --> LessonSed
237
+ Core --> LessonMaint
238
+ Core --> TaskIndex
239
+ ```
240
+
241
+ ---
242
+
243
+ ## Level 2 — 模块命名规律
244
+
245
+ 理解命名规律可以帮你快速定位代码:
246
+
247
+ | 前缀 / 后缀 | 含义 | 例子 |
248
+ | --- | --- | --- |
249
+ | `task-` | 与任务相关 | `task-scanner`, `task-lifecycle`, `task-review-model` |
250
+ | `dashboard-` | 与 Dashboard 相关 | `dashboard-data`, `dashboard-writer`, `dashboard-workbench` |
251
+ | `governance-` | 与治理 / 账本相关 | `governance-sync`, `governance-index-generator` |
252
+ | `migration-` | 与迁移相关 | `migration-planner`, `migration-support` |
253
+ | `preset-` | 与 Preset 相关 | `preset-registry`, `preset-engine`, `preset-audit-contracts` |
254
+ | `check-` | 验证器 | `check-profiles`, `check-module-parallel` |
255
+ | `-command.mjs` | CLI 命令模块 | `task-command`, `dashboard-command` |
256
+ | `-utils.mjs` | 工具函数 | `markdown-utils`, `text-utils` |
257
+ | `-gates.mjs` | 门禁逻辑 | `review-gates`, `review-confirm-git-gate` |