agentic-flow-kit 1.8.7 → 2.1.0

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 (984) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +172 -138
  3. package/bin/flow-kit.mjs +7 -2
  4. package/locales/en/installer.json +110 -0
  5. package/locales/en/overrides/.agents/commands/deploy.md +52 -0
  6. package/locales/en/overrides/.agents/commands/maintain.md +76 -0
  7. package/locales/en/overrides/.agents/commands/new-task.md +89 -0
  8. package/locales/en/overrides/.agents/commands/pipeline-run.md +56 -0
  9. package/locales/en/overrides/.agents/commands/pr-review.md +30 -0
  10. package/locales/en/overrides/.agents/commands/review.md +93 -0
  11. package/locales/en/overrides/.agents/commands/stages.md +256 -0
  12. package/locales/en/overrides/.agents/notes/pr-review-cost-discipline.md +48 -0
  13. package/locales/en/overrides/.agents/notes/process-order-rule.md +21 -0
  14. package/locales/en/overrides/.agents/notes/runtime-env.local.example.md +21 -0
  15. package/locales/en/overrides/.agents/pipelines/_TEMPLATE.md +75 -0
  16. package/locales/en/overrides/.agents/pipelines/pipeline-closing.md +28 -0
  17. package/locales/en/overrides/.agents/roles/implementer.md +28 -0
  18. package/locales/en/overrides/.agents/roles/independent-reviewer.md +39 -0
  19. package/locales/en/overrides/.agents/roles/pr-adjudicator.md +27 -0
  20. package/locales/en/overrides/.agents/roles/pr-finder.md +51 -0
  21. package/locales/en/overrides/.agents/roles/pr-verifier.md +44 -0
  22. package/locales/en/overrides/.agents/roles/ui-verifier.md +22 -0
  23. package/locales/en/overrides/.agents/roles/wiki-compiler.md +47 -0
  24. package/locales/en/overrides/.agents/skills/arena/SKILL.md +50 -0
  25. package/locales/en/overrides/.agents/skills/autonomous-run/SKILL.md +45 -0
  26. package/locales/en/overrides/.agents/skills/blast-radius/SKILL.md +53 -0
  27. package/locales/en/overrides/.agents/skills/csharp-quality-gates/SKILL.md +109 -0
  28. package/locales/en/overrides/.agents/skills/dev-tour/SKILL.md +98 -0
  29. package/locales/en/overrides/.agents/skills/dream/SKILL.md +63 -0
  30. package/locales/en/overrides/.agents/skills/eval/SKILL.md +42 -0
  31. package/locales/en/overrides/.agents/skills/interrogate/SKILL.md +49 -0
  32. package/locales/en/overrides/.agents/skills/number-vetting/SKILL.md +35 -0
  33. package/locales/en/overrides/.agents/skills/page-refactor/SKILL.md +192 -0
  34. package/locales/en/overrides/.agents/skills/papercut-fix/SKILL.md +92 -0
  35. package/locales/en/overrides/.agents/skills/pause-safely/SKILL.md +31 -0
  36. package/locales/en/overrides/.agents/skills/perf/SKILL.md +42 -0
  37. package/locales/en/overrides/.agents/skills/review-method/SKILL.md +92 -0
  38. package/locales/en/overrides/.agents/skills/session-resume/SKILL.md +69 -0
  39. package/locales/en/overrides/.agents/skills/shipyard-workflow-closeout/SKILL.md +109 -0
  40. package/locales/en/overrides/.agents/skills/show-me-your-work/SKILL.md +57 -0
  41. package/locales/en/overrides/.agents/skills/tfs-pr/SKILL.md +95 -0
  42. package/locales/en/overrides/.agents/skills/verify-ui/SKILL.md +116 -0
  43. package/locales/en/overrides/.agents/skills/visual-parity/SKILL.md +35 -0
  44. package/locales/en/overrides/.agents/skills/why/SKILL.md +56 -0
  45. package/locales/en/overrides/.agents/skills/wiki/SKILL.md +53 -0
  46. package/locales/en/overrides/.claude/agents/implementer.md +9 -0
  47. package/locales/en/overrides/.claude/agents/independent-reviewer.md +10 -0
  48. package/locales/en/overrides/.claude/agents/pr-adjudicator.md +10 -0
  49. package/locales/en/overrides/.claude/agents/pr-finder.md +10 -0
  50. package/locales/en/overrides/.claude/agents/pr-verifier.md +10 -0
  51. package/locales/en/overrides/.claude/agents/ui-verifier.md +10 -0
  52. package/locales/en/overrides/.claude/agents/wiki-compiler.md +10 -0
  53. package/locales/en/overrides/.claude/commands/wf-deploy.md +8 -0
  54. package/locales/en/overrides/.claude/commands/wf-maintain.md +8 -0
  55. package/locales/en/overrides/.claude/commands/wf-new-task.md +8 -0
  56. package/locales/en/overrides/.claude/commands/wf-pipeline-run.md +8 -0
  57. package/locales/en/overrides/.claude/commands/wf-pr-review.md +8 -0
  58. package/locales/en/overrides/.claude/commands/wf-review.md +8 -0
  59. package/locales/en/overrides/.claude/commands/wf-stages.md +8 -0
  60. package/locales/en/overrides/.cline/agents/implementer.yml +13 -0
  61. package/locales/en/overrides/.cline/agents/independent-reviewer.yml +11 -0
  62. package/locales/en/overrides/.cline/agents/pr-adjudicator.yml +11 -0
  63. package/locales/en/overrides/.cline/agents/pr-finder.yml +11 -0
  64. package/locales/en/overrides/.cline/agents/pr-verifier.yml +11 -0
  65. package/locales/en/overrides/.cline/agents/ui-verifier.yml +8 -0
  66. package/locales/en/overrides/.cline/agents/wiki-compiler.yml +14 -0
  67. package/locales/en/overrides/.cline/workflows/wf-deploy.md +8 -0
  68. package/locales/en/overrides/.cline/workflows/wf-maintain.md +8 -0
  69. package/locales/en/overrides/.cline/workflows/wf-new-task.md +8 -0
  70. package/locales/en/overrides/.cline/workflows/wf-pipeline-run.md +8 -0
  71. package/locales/en/overrides/.cline/workflows/wf-pr-review.md +8 -0
  72. package/locales/en/overrides/.cline/workflows/wf-review.md +8 -0
  73. package/locales/en/overrides/.cline/workflows/wf-stages.md +8 -0
  74. package/locales/en/overrides/.codebuddy/CODEBUDDY.md +7 -0
  75. package/locales/en/overrides/.codebuddy/agents/implementer.md +9 -0
  76. package/locales/en/overrides/.codebuddy/agents/independent-reviewer.md +10 -0
  77. package/locales/en/overrides/.codebuddy/agents/pr-adjudicator.md +10 -0
  78. package/locales/en/overrides/.codebuddy/agents/pr-finder.md +10 -0
  79. package/locales/en/overrides/.codebuddy/agents/pr-verifier.md +10 -0
  80. package/locales/en/overrides/.codebuddy/agents/ui-verifier.md +11 -0
  81. package/locales/en/overrides/.codebuddy/agents/wiki-compiler.md +10 -0
  82. package/locales/en/overrides/.codebuddy/commands/wf-deploy.md +8 -0
  83. package/locales/en/overrides/.codebuddy/commands/wf-maintain.md +8 -0
  84. package/locales/en/overrides/.codebuddy/commands/wf-new-task.md +8 -0
  85. package/locales/en/overrides/.codebuddy/commands/wf-pipeline-run.md +8 -0
  86. package/locales/en/overrides/.codebuddy/commands/wf-pr-review.md +8 -0
  87. package/locales/en/overrides/.codebuddy/commands/wf-review.md +8 -0
  88. package/locales/en/overrides/.codebuddy/commands/wf-stages.md +8 -0
  89. package/locales/en/overrides/.codebuddy/rules/backend-scope.md +5 -0
  90. package/locales/en/overrides/.codebuddy/rules/frontend-scope.md +5 -0
  91. package/locales/en/overrides/.codebuddy/skills/tfs-pr/SKILL.md +6 -0
  92. package/locales/en/overrides/.commandcode/agents/implementer.md +10 -0
  93. package/locales/en/overrides/.commandcode/agents/independent-reviewer.md +9 -0
  94. package/locales/en/overrides/.commandcode/agents/pr-adjudicator.md +9 -0
  95. package/locales/en/overrides/.commandcode/agents/pr-finder.md +9 -0
  96. package/locales/en/overrides/.commandcode/agents/pr-verifier.md +9 -0
  97. package/locales/en/overrides/.commandcode/agents/ui-verifier.md +10 -0
  98. package/locales/en/overrides/.commandcode/agents/wiki-compiler.md +10 -0
  99. package/locales/en/overrides/.commandcode/commands/wf-deploy.md +7 -0
  100. package/locales/en/overrides/.commandcode/commands/wf-maintain.md +7 -0
  101. package/locales/en/overrides/.commandcode/commands/wf-new-task.md +7 -0
  102. package/locales/en/overrides/.commandcode/commands/wf-pipeline-run.md +7 -0
  103. package/locales/en/overrides/.commandcode/commands/wf-pr-review.md +7 -0
  104. package/locales/en/overrides/.commandcode/commands/wf-review.md +7 -0
  105. package/locales/en/overrides/.commandcode/commands/wf-stages.md +7 -0
  106. package/locales/en/overrides/.opencode/agents/implementer.md +51 -0
  107. package/locales/en/overrides/.opencode/agents/independent-reviewer.md +18 -0
  108. package/locales/en/overrides/.opencode/agents/pr-adjudicator.md +18 -0
  109. package/locales/en/overrides/.opencode/agents/pr-finder.md +18 -0
  110. package/locales/en/overrides/.opencode/agents/pr-verifier.md +18 -0
  111. package/locales/en/overrides/.opencode/agents/ui-verifier.md +45 -0
  112. package/locales/en/overrides/.opencode/agents/wiki-compiler.md +51 -0
  113. package/locales/en/overrides/.opencode/commands/wf-deploy.md +7 -0
  114. package/locales/en/overrides/.opencode/commands/wf-maintain.md +7 -0
  115. package/locales/en/overrides/.opencode/commands/wf-new-task.md +7 -0
  116. package/locales/en/overrides/.opencode/commands/wf-pipeline-run.md +7 -0
  117. package/locales/en/overrides/.opencode/commands/wf-pr-review.md +7 -0
  118. package/locales/en/overrides/.opencode/commands/wf-review.md +7 -0
  119. package/locales/en/overrides/.opencode/commands/wf-stages.md +7 -0
  120. package/locales/en/overrides/.pi/agents/implementer.md +11 -0
  121. package/locales/en/overrides/.pi/agents/independent-reviewer.md +12 -0
  122. package/locales/en/overrides/.pi/agents/pr-adjudicator.md +12 -0
  123. package/locales/en/overrides/.pi/agents/pr-finder.md +11 -0
  124. package/locales/en/overrides/.pi/agents/pr-verifier.md +11 -0
  125. package/locales/en/overrides/.pi/agents/ui-verifier.md +11 -0
  126. package/locales/en/overrides/.pi/agents/wiki-compiler.md +11 -0
  127. package/locales/en/overrides/.qoder/agents/implementer.md +9 -0
  128. package/locales/en/overrides/.qoder/agents/independent-reviewer.md +10 -0
  129. package/locales/en/overrides/.qoder/agents/pr-adjudicator.md +10 -0
  130. package/locales/en/overrides/.qoder/agents/pr-finder.md +10 -0
  131. package/locales/en/overrides/.qoder/agents/pr-verifier.md +10 -0
  132. package/locales/en/overrides/.qoder/agents/ui-verifier.md +10 -0
  133. package/locales/en/overrides/.qoder/agents/wiki-compiler.md +10 -0
  134. package/locales/en/overrides/.qoder/commands/wf-deploy.md +8 -0
  135. package/locales/en/overrides/.qoder/commands/wf-maintain.md +8 -0
  136. package/locales/en/overrides/.qoder/commands/wf-new-task.md +8 -0
  137. package/locales/en/overrides/.qoder/commands/wf-pipeline-run.md +8 -0
  138. package/locales/en/overrides/.qoder/commands/wf-pr-review.md +8 -0
  139. package/locales/en/overrides/.qoder/commands/wf-review.md +8 -0
  140. package/locales/en/overrides/.qoder/commands/wf-stages.md +8 -0
  141. package/locales/en/overrides/.qwen/agents/implementer.md +10 -0
  142. package/locales/en/overrides/.qwen/agents/independent-reviewer.md +10 -0
  143. package/locales/en/overrides/.qwen/agents/pr-adjudicator.md +10 -0
  144. package/locales/en/overrides/.qwen/agents/pr-finder.md +10 -0
  145. package/locales/en/overrides/.qwen/agents/pr-verifier.md +10 -0
  146. package/locales/en/overrides/.qwen/agents/ui-verifier.md +10 -0
  147. package/locales/en/overrides/.qwen/agents/wiki-compiler.md +13 -0
  148. package/locales/en/overrides/.qwen/commands/wf-deploy.md +7 -0
  149. package/locales/en/overrides/.qwen/commands/wf-maintain.md +7 -0
  150. package/locales/en/overrides/.qwen/commands/wf-new-task.md +7 -0
  151. package/locales/en/overrides/.qwen/commands/wf-pipeline-run.md +7 -0
  152. package/locales/en/overrides/.qwen/commands/wf-pr-review.md +7 -0
  153. package/locales/en/overrides/.qwen/commands/wf-review.md +7 -0
  154. package/locales/en/overrides/.qwen/commands/wf-stages.md +7 -0
  155. package/locales/en/overrides/.trae/agents/implementer.md +9 -0
  156. package/locales/en/overrides/.trae/agents/independent-reviewer.md +10 -0
  157. package/locales/en/overrides/.trae/agents/pr-adjudicator.md +10 -0
  158. package/locales/en/overrides/.trae/agents/pr-finder.md +10 -0
  159. package/locales/en/overrides/.trae/agents/pr-verifier.md +10 -0
  160. package/locales/en/overrides/.trae/agents/ui-verifier.md +10 -0
  161. package/locales/en/overrides/.trae/agents/wiki-compiler.md +10 -0
  162. package/locales/en/overrides/.trae/commands/wf-deploy.md +8 -0
  163. package/locales/en/overrides/.trae/commands/wf-maintain.md +8 -0
  164. package/locales/en/overrides/.trae/commands/wf-new-task.md +8 -0
  165. package/locales/en/overrides/.trae/commands/wf-pipeline-run.md +8 -0
  166. package/locales/en/overrides/.trae/commands/wf-pr-review.md +8 -0
  167. package/locales/en/overrides/.trae/commands/wf-review.md +8 -0
  168. package/locales/en/overrides/.trae/commands/wf-stages.md +8 -0
  169. package/locales/en/overrides/.trae/rules/backend-scope.md +5 -0
  170. package/locales/en/overrides/.trae/rules/frontend-scope.md +5 -0
  171. package/locales/en/overrides/.zcode/agents/implementer.md +8 -0
  172. package/locales/en/overrides/.zcode/agents/independent-reviewer.md +8 -0
  173. package/locales/en/overrides/.zcode/agents/ui-verifier.md +8 -0
  174. package/locales/en/overrides/.zcode/agents/wiki-compiler.md +8 -0
  175. package/locales/en/overrides/AGENTS.md +52 -0
  176. package/locales/en/overrides/CLAUDE.md +20 -0
  177. package/locales/en/overrides/wiki/INDEX.md +33 -0
  178. package/locales/en/overrides/wiki/drafts-archive/README.md +6 -0
  179. package/locales/en/overrides/wiki//346/225/260/346/215/256/347/273/264/346/212/244/README.md +22 -0
  180. package/locales/en/overrides/wiki//347/237/245/350/257/206/346/262/211/346/267/200/346/200/273/350/247/210.html +230 -0
  181. package/locales/en/overrides/workflow/INDEX.md +13 -0
  182. package/locales/en/overrides/workflow/README.md +69 -0
  183. package/locales/en/overrides/workflow/archive/README.md +3 -0
  184. package/locales/en/overrides/workflow/delegations.md +4 -0
  185. package/locales/en/overrides/workflow/effective-policy.md +4 -0
  186. package/locales/en/overrides/workflow/gate-cost.md +4 -0
  187. package/locales/en/overrides/workflow/incidents/_TEMPLATE.md +49 -0
  188. package/locales/en/overrides/workflow/intents/_TEMPLATE.md +43 -0
  189. package/locales/en/overrides/workflow/metrics.md +4 -0
  190. package/locales/en/overrides/workflow/papercuts.md +3 -0
  191. package/locales/en/overrides/workflow/plans/_TEMPLATE.md +47 -0
  192. package/locales/en/overrides/workflow/regression-checklist.md +3 -0
  193. package/locales/en/overrides/workflow/specs/_TEMPLATE.md +86 -0
  194. package/locales/en/overrides/workflow/verify-evidence.md +4 -0
  195. package/locales/zh-CN/installer.json +110 -0
  196. package/package.json +23 -36
  197. package/schemas/install-manifest.schema.json +26 -0
  198. package/schemas/project-profile.schema.json +28 -0
  199. package/src/cli/args.mjs +43 -0
  200. package/src/cli/main.mjs +79 -0
  201. package/src/commands/add-host.mjs +29 -0
  202. package/src/commands/doctor.mjs +126 -0
  203. package/src/commands/install.mjs +296 -0
  204. package/src/commands/upgrade.mjs +30 -0
  205. package/src/git/config.mjs +61 -0
  206. package/src/hosts/registry.mjs +170 -0
  207. package/src/i18n.mjs +35 -0
  208. package/src/install/apply.mjs +138 -0
  209. package/src/install/frontmatter.mjs +84 -0
  210. package/src/install/manifest.mjs +40 -0
  211. package/src/install/plan.mjs +241 -0
  212. package/src/models/known.mjs +13 -0
  213. package/src/models/probe.mjs +163 -0
  214. package/src/models/resolve.mjs +312 -0
  215. package/src/render/tokens.mjs +105 -0
  216. package/src/tui/ansi.mjs +55 -0
  217. package/src/tui/flows.mjs +306 -0
  218. package/src/tui/prompts.mjs +139 -0
  219. package/src/tui/screen.mjs +217 -0
  220. package/src/tui/widgets.mjs +111 -0
  221. package/src/tui/wizard.mjs +68 -0
  222. package/templates/engine/.agents/board/dev-tour.html +1940 -0
  223. package/templates/engine/.agents/board/index.html +835 -0
  224. package/templates/engine/.agents/commands/deploy.md +52 -0
  225. package/templates/engine/.agents/commands/maintain.md +76 -0
  226. package/templates/engine/.agents/commands/new-task.md +89 -0
  227. package/templates/engine/.agents/commands/pipeline-run.md +60 -0
  228. package/templates/engine/.agents/commands/pr-review.md +30 -0
  229. package/templates/engine/.agents/commands/review.md +93 -0
  230. package/templates/engine/.agents/commands/stages.md +257 -0
  231. package/templates/engine/.agents/config/agent-eval.json +17 -0
  232. package/templates/engine/.agents/config/commit-msg-rules.json +7 -0
  233. package/templates/engine/.agents/config/engine.json +11 -0
  234. package/templates/engine/.agents/config/gate-budgets.json +5 -0
  235. package/templates/engine/.agents/config/mechanism-registry.md +63 -0
  236. package/templates/engine/.agents/config/memory-tiers.json +13 -0
  237. package/templates/engine/.agents/config/model-roles.json +26 -0
  238. package/templates/engine/.agents/config/model-roles.local.example.json +7 -0
  239. package/templates/engine/.agents/config/pipeline.json +36 -0
  240. package/templates/engine/.agents/config/pr-review.json +67 -0
  241. package/templates/engine/.agents/config/principles.md +32 -0
  242. package/templates/engine/.agents/config/steering.json +28 -0
  243. package/templates/engine/.agents/config/workflow-enums.txt +25 -0
  244. package/templates/engine/.agents/evals/README.md +49 -0
  245. package/templates/engine/.agents/evals/tasks.tsv +6 -0
  246. package/templates/engine/.agents/hooks/check-architecture.mjs +168 -0
  247. package/templates/engine/.agents/hooks/check-audit-fields.mjs +56 -0
  248. package/templates/engine/.agents/hooks/check-commit-plan-ref.mjs +84 -0
  249. package/templates/engine/.agents/hooks/check-confirm-order.mjs +281 -0
  250. package/templates/engine/.agents/hooks/check-delete-guard.mjs +63 -0
  251. package/templates/engine/.agents/hooks/check-notify-guard.mjs +55 -0
  252. package/templates/engine/.agents/hooks/commit-check.cjs +208 -0
  253. package/templates/engine/.agents/hooks/gates.json +33 -0
  254. package/templates/engine/.agents/hooks/local-pre-commit.mjs +27 -0
  255. package/templates/engine/.agents/hooks/pre-shell-check.cjs +361 -0
  256. package/templates/engine/.agents/hooks/pre-write-check.cjs +247 -0
  257. package/templates/engine/.agents/notes/gate-diet.md +75 -0
  258. package/templates/engine/.agents/notes/injected-memory.md +14 -0
  259. package/templates/engine/.agents/notes/pr-review-cost-discipline.md +48 -0
  260. package/templates/engine/.agents/notes/process-order-rule.md +21 -0
  261. package/templates/engine/.agents/notes/runtime-env.local.example.md +21 -0
  262. package/templates/engine/.agents/notes/steering-tiers.md +28 -0
  263. package/templates/engine/.agents/pipelines/_TEMPLATE.md +75 -0
  264. package/templates/engine/.agents/pipelines/pipeline-closing.md +28 -0
  265. package/templates/engine/.agents/pipelines//347/244/272/344/276/213-/345/271/266/350/241/214/345/256/236/347/216/260/350/257/204/345/256/241.md +16 -0
  266. package/templates/engine/.agents/roles/implementer.md +28 -0
  267. package/templates/engine/.agents/roles/independent-reviewer.md +39 -0
  268. package/templates/engine/.agents/roles/pr-adjudicator.md +27 -0
  269. package/templates/engine/.agents/roles/pr-finder.md +51 -0
  270. package/templates/engine/.agents/roles/pr-verifier.md +44 -0
  271. package/templates/engine/.agents/roles/ui-verifier.md +22 -0
  272. package/templates/engine/.agents/roles/wiki-compiler.md +47 -0
  273. package/templates/engine/.agents/scripts/agent-eval.mjs +268 -0
  274. package/templates/engine/.agents/scripts/agg-delegations.mjs +439 -0
  275. package/templates/engine/.agents/scripts/agg-judgments.mjs +301 -0
  276. package/templates/engine/.agents/scripts/agg-kb-usage.mjs +196 -0
  277. package/templates/engine/.agents/scripts/append-compensation.mjs +109 -0
  278. package/templates/engine/.agents/scripts/archive-sweep.mjs +229 -0
  279. package/templates/engine/.agents/scripts/auto-tour.mjs +77 -0
  280. package/templates/engine/.agents/scripts/board-port.mjs +17 -0
  281. package/templates/engine/.agents/scripts/check-doc-body-drift.mjs +102 -0
  282. package/templates/engine/.agents/scripts/check-engine-artifacts.mjs +54 -0
  283. package/templates/engine/.agents/scripts/check-hook-wiring.mjs +75 -0
  284. package/templates/engine/.agents/scripts/check-lane-surface.mjs +393 -0
  285. package/templates/engine/.agents/scripts/check-ledger-doc-presence.mjs +71 -0
  286. package/templates/engine/.agents/scripts/check-ledger-invariant.mjs +873 -0
  287. package/templates/engine/.agents/scripts/check-local-gate-config.mjs +95 -0
  288. package/templates/engine/.agents/scripts/check-local-gates.mjs +248 -0
  289. package/templates/engine/.agents/scripts/check-loop-kit.mjs +550 -0
  290. package/templates/engine/.agents/scripts/check-loop-rev-semantics.mjs +59 -0
  291. package/templates/engine/.agents/scripts/check-loop-sections/s01-pairing.mjs +116 -0
  292. package/templates/engine/.agents/scripts/check-loop-sections/s03x-regr-evidence.mjs +38 -0
  293. package/templates/engine/.agents/scripts/check-loop-sections/s08-acceptance.mjs +130 -0
  294. package/templates/engine/.agents/scripts/check-loop-sections/s15-fingerprint.mjs +152 -0
  295. package/templates/engine/.agents/scripts/check-loop-sections/s23-convergence-audit.mjs +182 -0
  296. package/templates/engine/.agents/scripts/check-loop-sections/s29-regr-enforcer.mjs +69 -0
  297. package/templates/engine/.agents/scripts/check-loop.mjs +131 -0
  298. package/templates/engine/.agents/scripts/check-pipeline-state.mjs +85 -0
  299. package/templates/engine/.agents/scripts/check-regression-consistency.mjs +252 -0
  300. package/templates/engine/.agents/scripts/check-schema-residue.mjs +144 -0
  301. package/templates/engine/.agents/scripts/check-scope-range.mjs +156 -0
  302. package/templates/engine/.agents/scripts/check-scope.mjs +121 -0
  303. package/templates/engine/.agents/scripts/check-scripts-syntax.mjs +138 -0
  304. package/templates/engine/.agents/scripts/check-secrets-lite.mjs +239 -0
  305. package/templates/engine/.agents/scripts/check-secrets.mjs +104 -0
  306. package/templates/engine/.agents/scripts/check-test-impact-map.mjs +107 -0
  307. package/templates/engine/.agents/scripts/ci-assert-frontend-deps.mjs +42 -0
  308. package/templates/engine/.agents/scripts/ci-commit-hygiene.mjs +86 -0
  309. package/templates/engine/.agents/scripts/ci-install-gitleaks.mjs +75 -0
  310. package/templates/engine/.agents/scripts/ci-push-before.mjs +49 -0
  311. package/templates/engine/.agents/scripts/claims.mjs +166 -0
  312. package/templates/engine/.agents/scripts/closeout.mjs +127 -0
  313. package/templates/engine/.agents/scripts/compact-ledgers.mjs +70 -0
  314. package/templates/engine/.agents/scripts/confirm-doc.mjs +737 -0
  315. package/templates/engine/.agents/scripts/delegation-presence.mjs +38 -0
  316. package/templates/engine/.agents/scripts/dev-tour-model.mjs +1398 -0
  317. package/templates/engine/.agents/scripts/dream-run.mjs +358 -0
  318. package/templates/engine/.agents/scripts/ensure-board.mjs +187 -0
  319. package/templates/engine/.agents/scripts/failure-attribution.mjs +11 -0
  320. package/templates/engine/.agents/scripts/fill-intent.mjs +60 -0
  321. package/templates/engine/.agents/scripts/fill-plan.mjs +105 -0
  322. package/templates/engine/.agents/scripts/fill-spec.mjs +72 -0
  323. package/templates/engine/.agents/scripts/fix-task.mjs +77 -0
  324. package/templates/engine/.agents/scripts/gen-dev-tour.mjs +191 -0
  325. package/templates/engine/.agents/scripts/gen-effective-policy.mjs +113 -0
  326. package/templates/engine/.agents/scripts/gen-engine-map.mjs +292 -0
  327. package/templates/engine/.agents/scripts/gen-narrative-claims.mjs +275 -0
  328. package/templates/engine/.agents/scripts/gen-verify-evidence.mjs +115 -0
  329. package/templates/engine/.agents/scripts/gen-wiki-board.mjs +221 -0
  330. package/templates/engine/.agents/scripts/gen-workflow-index.mjs +201 -0
  331. package/templates/engine/.agents/scripts/gen-workflow-metrics.mjs +692 -0
  332. package/templates/engine/.agents/scripts/git-merge-jsonl.mjs +62 -0
  333. package/templates/engine/.agents/scripts/judgment-ledger.mjs +68 -0
  334. package/templates/engine/.agents/scripts/kb-cache-evict.mjs +50 -0
  335. package/templates/engine/.agents/scripts/kb-search.mjs +423 -0
  336. package/templates/engine/.agents/scripts/lane-surface-audit.mjs +145 -0
  337. package/templates/engine/.agents/scripts/ledger-loader.mjs +77 -0
  338. package/templates/engine/.agents/scripts/ledger-shards.mjs +346 -0
  339. package/templates/engine/.agents/scripts/memory-tier.mjs +196 -0
  340. package/templates/engine/.agents/scripts/memory-wiki.mjs +296 -0
  341. package/templates/engine/.agents/scripts/metrics-core.mjs +131 -0
  342. package/templates/engine/.agents/scripts/outcome-metrics.mjs +195 -0
  343. package/templates/engine/.agents/scripts/path-lease.mjs +177 -0
  344. package/templates/engine/.agents/scripts/pipeline-run.mjs +964 -0
  345. package/templates/engine/.agents/scripts/policy.mjs +250 -0
  346. package/templates/engine/.agents/scripts/pr-create.mjs +54 -0
  347. package/templates/engine/.agents/scripts/pr-review.mjs +1551 -0
  348. package/templates/engine/.agents/scripts/quote-grounding.mjs +233 -0
  349. package/templates/engine/.agents/scripts/regen-ledgers.mjs +59 -0
  350. package/templates/engine/.agents/scripts/rewrite-file.mjs +135 -0
  351. package/templates/engine/.agents/scripts/rule-budget.mjs +246 -0
  352. package/templates/engine/.agents/scripts/session-log.mjs +157 -0
  353. package/templates/engine/.agents/scripts/stage-gates.mjs +812 -0
  354. package/templates/engine/.agents/scripts/steering.mjs +75 -0
  355. package/templates/engine/.agents/scripts/test-impact-lib.mjs +451 -0
  356. package/templates/engine/.agents/scripts/test-impact.mjs +105 -0
  357. package/templates/engine/.agents/scripts/trust-mode.mjs +130 -0
  358. package/templates/engine/.agents/scripts/verify-scope.mjs +163 -0
  359. package/templates/engine/.agents/scripts/verify-wiki-consistency.mjs +264 -0
  360. package/templates/engine/.agents/scripts/verify.mjs +858 -0
  361. package/templates/engine/.agents/scripts/warn-format.mjs +57 -0
  362. package/templates/engine/.agents/scripts/wf-journal.mjs +230 -0
  363. package/templates/engine/.agents/scripts/workflow-board-server.mjs +696 -0
  364. package/templates/engine/.agents/scripts/workflow-enums.mjs +70 -0
  365. package/templates/engine/.agents/scripts/workflows-check.mjs +260 -0
  366. package/templates/engine/.agents/settings.json +33 -0
  367. package/templates/engine/.agents/skills/arena/SKILL.md +54 -0
  368. package/templates/engine/.agents/skills/autonomous-run/SKILL.md +45 -0
  369. package/templates/engine/.agents/skills/blast-radius/SKILL.md +53 -0
  370. package/templates/engine/.agents/skills/csharp-quality-gates/SKILL.md +109 -0
  371. package/templates/engine/.agents/skills/csharp-quality-gates/scripts/quality-gates.mjs +430 -0
  372. package/templates/engine/.agents/skills/dev-tour/SKILL.md +98 -0
  373. package/templates/engine/.agents/skills/dream/SKILL.md +82 -0
  374. package/templates/engine/.agents/skills/eval/SKILL.md +58 -0
  375. package/templates/engine/.agents/skills/eval/scripts/eval-score.mjs +59 -0
  376. package/templates/engine/.agents/skills/interrogate/SKILL.md +49 -0
  377. package/templates/engine/.agents/skills/interrogate/scripts/interrogate-plan.mjs +72 -0
  378. package/templates/engine/.agents/skills/model-upgrade/SKILL.md +41 -0
  379. package/templates/engine/.agents/skills/number-vetting/SKILL.md +35 -0
  380. package/templates/engine/.agents/skills/page-refactor/SKILL.md +192 -0
  381. package/templates/engine/.agents/skills/page-refactor/references/templates.md +989 -0
  382. package/templates/engine/.agents/skills/papercut-fix/SKILL.md +92 -0
  383. package/templates/engine/.agents/skills/papercut-fix/references/response-template.md +81 -0
  384. package/templates/engine/.agents/skills/pause-safely/SKILL.md +31 -0
  385. package/templates/engine/.agents/skills/perf/SKILL.md +42 -0
  386. package/templates/engine/.agents/skills/review-method/SKILL.md +92 -0
  387. package/templates/engine/.agents/skills/review-method/golden-set.md +61 -0
  388. package/templates/engine/.agents/skills/session-resume/SKILL.md +76 -0
  389. package/templates/engine/.agents/skills/session-resume/scripts/worktree-audit.mjs +110 -0
  390. package/templates/engine/.agents/skills/shipyard-workflow-closeout/SKILL.md +109 -0
  391. package/templates/engine/.agents/skills/show-me-your-work/SKILL.md +71 -0
  392. package/templates/engine/.agents/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
  393. package/templates/engine/.agents/skills/show-me-your-work/scripts/decision-log.mjs +24 -0
  394. package/templates/engine/.agents/skills/tfs-pr/SKILL.md +95 -0
  395. package/templates/engine/.agents/skills/tfs-pr/scripts/tfs-pr.mjs +947 -0
  396. package/templates/engine/.agents/skills/verify-ui/SKILL.md +116 -0
  397. package/templates/engine/.agents/skills/verify-ui/features/.gitkeep +0 -0
  398. package/templates/engine/.agents/skills/verify-ui/scripts/gen-verify-feature.mjs +114 -0
  399. package/templates/engine/.agents/skills/visual-parity/SKILL.md +35 -0
  400. package/templates/engine/.agents/skills/why/SKILL.md +56 -0
  401. package/templates/engine/.agents/skills/why/scripts/why-evidence.mjs +74 -0
  402. package/templates/engine/.agents/skills/wiki/SKILL.md +56 -0
  403. package/templates/engine/.agents/tests/auto-tour.test.mjs +82 -0
  404. package/templates/engine/.agents/tests/dev-tour-model.test.mjs +452 -0
  405. package/templates/engine/.agents/tests/fill-plan-lite.test.mjs +46 -0
  406. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-bare-mid-path.md +14 -0
  407. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-bare-mid-path.model.json +179 -0
  408. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-fake-path-guard.md +21 -0
  409. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-fake-path-guard.model.json +194 -0
  410. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-h3-batches.md +20 -0
  411. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-h3-batches.model.json +207 -0
  412. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-issues.md +24 -0
  413. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-issues.model.json +225 -0
  414. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-l1-single-file.md +15 -0
  415. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-l1-single-file.model.json +160 -0
  416. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-layer-word-unique.md +29 -0
  417. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-layer-word-unique.model.json +266 -0
  418. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-layers-fallback.md +17 -0
  419. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-layers-fallback.model.json +207 -0
  420. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-numbered-steps.md +39 -0
  421. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-numbered-steps.model.json +359 -0
  422. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-path-guess.md +16 -0
  423. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-path-guess.model.json +131 -0
  424. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-table-rows.md +29 -0
  425. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-table-rows.model.json +190 -0
  426. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-task-checkboxes.md +39 -0
  427. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-task-checkboxes.model.json +362 -0
  428. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-union-label.md +24 -0
  429. package/templates/engine/.agents/tests/fixtures/dev-tour/plan-union-label.model.json +224 -0
  430. package/templates/engine/.agents/tests/tools/gen-synthetic-plan.mjs +108 -0
  431. package/templates/git/.gitattributes +23 -0
  432. package/templates/git/.githooks/commit-msg +72 -0
  433. package/templates/git/.githooks/package.json +3 -0
  434. package/templates/git/.githooks/post-commit +62 -0
  435. package/templates/git/.githooks/pre-commit +197 -0
  436. package/templates/git/.githooks/pre-merge-commit +28 -0
  437. package/templates/git/.githooks/pre-push +201 -0
  438. package/templates/git/.github/workflows/ci.yml +32 -0
  439. package/templates/git/.gitignore.engine +11 -0
  440. package/templates/git/azure-pipelines.yml +46 -0
  441. package/templates/host-meta/SKILLS.md +3 -0
  442. package/templates/host-meta/claude/skill-pointer.md +6 -0
  443. package/templates/host-meta/cline/skill-index.md +6 -0
  444. package/templates/host-meta/codebuddy/skill-pointer.md +6 -0
  445. package/templates/host-meta/commandcode/skill-index.md +5 -0
  446. package/templates/host-meta/opencode/skill-pointer.md +6 -0
  447. package/templates/host-meta/qoder/skill-index.md +5 -0
  448. package/templates/host-meta/qwen/skill-index.md +5 -0
  449. package/templates/host-meta/trae/skill-index.md +6 -0
  450. package/templates/hosts/claude/CLAUDE.md +55 -0
  451. package/templates/hosts/claude/agents/implementer.md +7 -0
  452. package/templates/hosts/claude/agents/independent-reviewer.md +8 -0
  453. package/templates/hosts/claude/agents/pr-adjudicator.md +8 -0
  454. package/templates/hosts/claude/agents/pr-finder.md +8 -0
  455. package/templates/hosts/claude/agents/pr-verifier.md +8 -0
  456. package/templates/hosts/claude/agents/ui-verifier.md +8 -0
  457. package/templates/hosts/claude/agents/wiki-compiler.md +8 -0
  458. package/templates/hosts/claude/commands/wf-deploy.md +10 -0
  459. package/templates/hosts/claude/commands/wf-maintain.md +10 -0
  460. package/templates/hosts/claude/commands/wf-new-task.md +10 -0
  461. package/templates/hosts/claude/commands/wf-pipeline-run.md +10 -0
  462. package/templates/hosts/claude/commands/wf-pr-review.md +10 -0
  463. package/templates/hosts/claude/commands/wf-review.md +10 -0
  464. package/templates/hosts/claude/commands/wf-stages.md +10 -0
  465. package/templates/hosts/claude/settings.hardened.json +94 -0
  466. package/templates/hosts/claude/settings.json +55 -0
  467. package/templates/hosts/cline/agents/implementer.yml +15 -0
  468. package/templates/hosts/cline/agents/independent-reviewer.yml +20 -0
  469. package/templates/hosts/cline/agents/pr-adjudicator.yml +18 -0
  470. package/templates/hosts/cline/agents/pr-finder.yml +19 -0
  471. package/templates/hosts/cline/agents/pr-verifier.yml +18 -0
  472. package/templates/hosts/cline/agents/ui-verifier.yml +17 -0
  473. package/templates/hosts/cline/agents/wiki-compiler.yml +20 -0
  474. package/templates/hosts/cline/hooks/PreToolUse.cjs +260 -0
  475. package/templates/hosts/cline/workflows/wf-deploy.md +8 -0
  476. package/templates/hosts/cline/workflows/wf-maintain.md +8 -0
  477. package/templates/hosts/cline/workflows/wf-new-task.md +8 -0
  478. package/templates/hosts/cline/workflows/wf-pipeline-run.md +8 -0
  479. package/templates/hosts/cline/workflows/wf-pr-review.md +8 -0
  480. package/templates/hosts/cline/workflows/wf-review.md +8 -0
  481. package/templates/hosts/cline/workflows/wf-stages.md +8 -0
  482. package/templates/hosts/codebuddy/CODEBUDDY.md +7 -0
  483. package/templates/hosts/codebuddy/agents/implementer.md +9 -0
  484. package/templates/hosts/codebuddy/agents/independent-reviewer.md +10 -0
  485. package/templates/hosts/codebuddy/agents/pr-adjudicator.md +10 -0
  486. package/templates/hosts/codebuddy/agents/pr-finder.md +10 -0
  487. package/templates/hosts/codebuddy/agents/pr-verifier.md +10 -0
  488. package/templates/hosts/codebuddy/agents/ui-verifier.md +11 -0
  489. package/templates/hosts/codebuddy/agents/wiki-compiler.md +10 -0
  490. package/templates/hosts/codebuddy/commands/wf-deploy.md +10 -0
  491. package/templates/hosts/codebuddy/commands/wf-maintain.md +10 -0
  492. package/templates/hosts/codebuddy/commands/wf-new-task.md +10 -0
  493. package/templates/hosts/codebuddy/commands/wf-pipeline-run.md +10 -0
  494. package/templates/hosts/codebuddy/commands/wf-pr-review.md +10 -0
  495. package/templates/hosts/codebuddy/commands/wf-review.md +10 -0
  496. package/templates/hosts/codebuddy/commands/wf-stages.md +10 -0
  497. package/templates/hosts/codebuddy/rules/backend-scope.md +5 -0
  498. package/templates/hosts/codebuddy/rules/frontend-scope.md +5 -0
  499. package/templates/hosts/codebuddy/settings.json +31 -0
  500. package/templates/hosts/codebuddy/skills/tfs-pr/SKILL.md +6 -0
  501. package/templates/hosts/commandcode/agents/implementer.md +10 -0
  502. package/templates/hosts/commandcode/agents/independent-reviewer.md +9 -0
  503. package/templates/hosts/commandcode/agents/pr-adjudicator.md +9 -0
  504. package/templates/hosts/commandcode/agents/pr-finder.md +9 -0
  505. package/templates/hosts/commandcode/agents/pr-verifier.md +9 -0
  506. package/templates/hosts/commandcode/agents/ui-verifier.md +11 -0
  507. package/templates/hosts/commandcode/agents/wiki-compiler.md +10 -0
  508. package/templates/hosts/commandcode/commands/wf-deploy.md +9 -0
  509. package/templates/hosts/commandcode/commands/wf-maintain.md +9 -0
  510. package/templates/hosts/commandcode/commands/wf-new-task.md +9 -0
  511. package/templates/hosts/commandcode/commands/wf-pipeline-run.md +9 -0
  512. package/templates/hosts/commandcode/commands/wf-pr-review.md +9 -0
  513. package/templates/hosts/commandcode/commands/wf-review.md +9 -0
  514. package/templates/hosts/commandcode/commands/wf-stages.md +9 -0
  515. package/templates/hosts/commandcode/settings.json +57 -0
  516. package/templates/hosts/opencode/agents/implementer.md +51 -0
  517. package/templates/hosts/opencode/agents/independent-reviewer.md +18 -0
  518. package/templates/hosts/opencode/agents/pr-adjudicator.md +18 -0
  519. package/templates/hosts/opencode/agents/pr-finder.md +18 -0
  520. package/templates/hosts/opencode/agents/pr-verifier.md +18 -0
  521. package/templates/hosts/opencode/agents/ui-verifier.md +45 -0
  522. package/templates/hosts/opencode/agents/wiki-compiler.md +51 -0
  523. package/templates/hosts/opencode/commands/wf-deploy.md +7 -0
  524. package/templates/hosts/opencode/commands/wf-maintain.md +7 -0
  525. package/templates/hosts/opencode/commands/wf-new-task.md +7 -0
  526. package/templates/hosts/opencode/commands/wf-pipeline-run.md +7 -0
  527. package/templates/hosts/opencode/commands/wf-pr-review.md +7 -0
  528. package/templates/hosts/opencode/commands/wf-review.md +7 -0
  529. package/templates/hosts/opencode/commands/wf-stages.md +7 -0
  530. package/templates/hosts/pi/agents/implementer.md +10 -0
  531. package/templates/hosts/pi/agents/independent-reviewer.md +11 -0
  532. package/templates/hosts/pi/agents/pr-adjudicator.md +11 -0
  533. package/templates/hosts/pi/agents/pr-finder.md +10 -0
  534. package/templates/hosts/pi/agents/pr-verifier.md +10 -0
  535. package/templates/hosts/pi/agents/ui-verifier.md +10 -0
  536. package/templates/hosts/pi/agents/wiki-compiler.md +10 -0
  537. package/templates/hosts/pi/extensions/lib/gates-core.cjs +196 -0
  538. package/templates/hosts/pi/extensions/shipyard-gates.ts +95 -0
  539. package/templates/hosts/pi/settings.json +5 -0
  540. package/templates/hosts/qoder/agents/implementer.md +9 -0
  541. package/templates/hosts/qoder/agents/independent-reviewer.md +10 -0
  542. package/templates/hosts/qoder/agents/pr-adjudicator.md +10 -0
  543. package/templates/hosts/qoder/agents/pr-finder.md +10 -0
  544. package/templates/hosts/qoder/agents/pr-verifier.md +10 -0
  545. package/templates/hosts/qoder/agents/ui-verifier.md +10 -0
  546. package/templates/hosts/qoder/agents/wiki-compiler.md +10 -0
  547. package/templates/hosts/qoder/commands/wf-deploy.md +8 -0
  548. package/templates/hosts/qoder/commands/wf-maintain.md +8 -0
  549. package/templates/hosts/qoder/commands/wf-new-task.md +8 -0
  550. package/templates/hosts/qoder/commands/wf-pipeline-run.md +8 -0
  551. package/templates/hosts/qoder/commands/wf-pr-review.md +8 -0
  552. package/templates/hosts/qoder/commands/wf-review.md +8 -0
  553. package/templates/hosts/qoder/commands/wf-stages.md +8 -0
  554. package/templates/hosts/qoder/settings.json +61 -0
  555. package/templates/hosts/qwen/agents/implementer.md +8 -0
  556. package/templates/hosts/qwen/agents/independent-reviewer.md +8 -0
  557. package/templates/hosts/qwen/agents/pr-adjudicator.md +8 -0
  558. package/templates/hosts/qwen/agents/pr-finder.md +8 -0
  559. package/templates/hosts/qwen/agents/pr-verifier.md +8 -0
  560. package/templates/hosts/qwen/agents/ui-verifier.md +8 -0
  561. package/templates/hosts/qwen/agents/wiki-compiler.md +11 -0
  562. package/templates/hosts/qwen/commands/wf-deploy.md +9 -0
  563. package/templates/hosts/qwen/commands/wf-maintain.md +9 -0
  564. package/templates/hosts/qwen/commands/wf-new-task.md +9 -0
  565. package/templates/hosts/qwen/commands/wf-pipeline-run.md +9 -0
  566. package/templates/hosts/qwen/commands/wf-pr-review.md +9 -0
  567. package/templates/hosts/qwen/commands/wf-review.md +9 -0
  568. package/templates/hosts/qwen/commands/wf-stages.md +9 -0
  569. package/templates/hosts/qwen/settings.json +57 -0
  570. package/templates/hosts/trae/agents/implementer.md +9 -0
  571. package/templates/hosts/trae/agents/independent-reviewer.md +10 -0
  572. package/templates/hosts/trae/agents/pr-adjudicator.md +10 -0
  573. package/templates/hosts/trae/agents/pr-finder.md +10 -0
  574. package/templates/hosts/trae/agents/pr-verifier.md +10 -0
  575. package/templates/hosts/trae/agents/ui-verifier.md +10 -0
  576. package/templates/hosts/trae/agents/wiki-compiler.md +10 -0
  577. package/templates/hosts/trae/commands/wf-deploy.md +8 -0
  578. package/templates/hosts/trae/commands/wf-maintain.md +8 -0
  579. package/templates/hosts/trae/commands/wf-new-task.md +8 -0
  580. package/templates/hosts/trae/commands/wf-pipeline-run.md +8 -0
  581. package/templates/hosts/trae/commands/wf-pr-review.md +8 -0
  582. package/templates/hosts/trae/commands/wf-review.md +8 -0
  583. package/templates/hosts/trae/commands/wf-stages.md +8 -0
  584. package/templates/hosts/trae/hooks.json +17 -0
  585. package/templates/hosts/trae/rules/backend-scope.md +5 -0
  586. package/templates/hosts/trae/rules/frontend-scope.md +5 -0
  587. package/templates/hosts/zcode/agents/implementer.md +8 -0
  588. package/templates/hosts/zcode/agents/independent-reviewer.md +8 -0
  589. package/templates/hosts/zcode/agents/ui-verifier.md +8 -0
  590. package/templates/hosts/zcode/agents/wiki-compiler.md +8 -0
  591. package/templates/hosts/zcode/config.json +31 -0
  592. package/templates/hosts/zcode/workflows/code-review.dwf.ts +428 -0
  593. package/templates/hosts/zcode/workflows/fullchain-flow-test.dwf.ts +898 -0
  594. package/templates/profiles/dotnet/.agents/config/lane-surfaces.txt +33 -0
  595. package/templates/profiles/dotnet/.agents/config/rule-budgets.txt +84 -0
  596. package/templates/profiles/dotnet/.agents/config/test-impact-map.json +590 -0
  597. package/templates/profiles/dotnet/.agents/config/workflow-modules.txt +18 -0
  598. package/templates/profiles/dotnet/.agents/hooks/commit-check.config.json +18 -0
  599. package/templates/profiles/dotnet/.agents/hooks/delete-guard-allowlist.txt +28 -0
  600. package/templates/profiles/dotnet/.agents/notes/runtime-env.md +178 -0
  601. package/templates/profiles/dotnet/AGENTS.md +52 -0
  602. package/templates/profiles/empty/.agents/config/lane-surfaces.txt +12 -0
  603. package/templates/profiles/empty/.agents/config/rule-budgets.txt +3 -0
  604. package/templates/profiles/empty/.agents/config/test-impact-map.json +8 -0
  605. package/templates/profiles/empty/.agents/config/workflow-modules.txt +2 -0
  606. package/templates/profiles/empty/.agents/hooks/commit-check.config.json +5 -0
  607. package/templates/profiles/empty/.agents/hooks/delete-guard-allowlist.txt +2 -0
  608. package/templates/profiles/empty/.agents/notes/runtime-env.md +44 -0
  609. package/templates/profiles/empty/AGENTS.md +52 -0
  610. package/templates/profiles/go/AGENTS.md +52 -0
  611. package/templates/profiles/java/AGENTS.md +52 -0
  612. package/templates/profiles/node/.agents/config/lane-surfaces.txt +12 -0
  613. package/templates/profiles/node/.agents/config/rule-budgets.txt +3 -0
  614. package/templates/profiles/node/.agents/config/test-impact-map.json +8 -0
  615. package/templates/profiles/node/.agents/config/workflow-modules.txt +2 -0
  616. package/templates/profiles/node/.agents/hooks/commit-check.config.json +5 -0
  617. package/templates/profiles/node/.agents/hooks/delete-guard-allowlist.txt +2 -0
  618. package/templates/profiles/node/.agents/notes/runtime-env.md +44 -0
  619. package/templates/profiles/node/AGENTS.md +52 -0
  620. package/templates/profiles/rust/AGENTS.md +52 -0
  621. package/templates/profiles/typescript/AGENTS.md +52 -0
  622. package/templates/scaffold/wiki/INDEX.md +33 -0
  623. package/templates/scaffold/wiki/drafts-archive/README.md +7 -0
  624. package/templates/scaffold/wiki//344/272/247/345/223/201/351/234/200/346/261/202/.gitkeep +0 -0
  625. package/templates/scaffold/wiki//345/274/200/345/217/221/346/226/271/346/241/210/.gitkeep +0 -0
  626. package/templates/scaffold/wiki//346/225/260/346/215/256/347/273/264/346/212/244/README.md +22 -0
  627. package/templates/scaffold/wiki//346/265/213/350/257/225/346/212/245/345/221/212/.gitkeep +0 -0
  628. package/templates/scaffold/wiki//347/224/250/346/210/267/345/212/237/350/203/275/.gitkeep +0 -0
  629. package/templates/scaffold/wiki//347/237/245/350/257/206/346/262/211/346/267/200/346/200/273/350/247/210.html +230 -0
  630. package/templates/scaffold/wiki//351/241/271/347/233/256/350/247/204/350/214/203/.gitkeep +0 -0
  631. package/templates/scaffold/workflow/INDEX.md +29 -0
  632. package/templates/scaffold/workflow/README.md +69 -0
  633. package/templates/scaffold/workflow/archive/README.md +3 -0
  634. package/templates/scaffold/workflow/artifact-sources.md +25 -0
  635. package/templates/scaffold/workflow/delegations.d/.gitkeep +0 -0
  636. package/templates/scaffold/workflow/delegations.md +4 -0
  637. package/templates/scaffold/workflow/effective-policy.md +4 -0
  638. package/templates/scaffold/workflow/evidence/.gitkeep +0 -0
  639. package/templates/scaffold/workflow/gate-cost.md +4 -0
  640. package/templates/scaffold/workflow/gate-metrics.d/.gitkeep +0 -0
  641. package/templates/scaffold/workflow/incidents/_TEMPLATE.md +49 -0
  642. package/templates/scaffold/workflow/intents/_TEMPLATE.md +43 -0
  643. package/templates/scaffold/workflow/metrics.md +4 -0
  644. package/templates/scaffold/workflow/non-engineer-intent.md +51 -0
  645. package/templates/scaffold/workflow/papercuts.d/.gitkeep +0 -0
  646. package/templates/scaffold/workflow/papercuts.md +3 -0
  647. package/templates/scaffold/workflow/plans/_TEMPLATE.md +47 -0
  648. package/templates/scaffold/workflow/regression-checklist.d/.gitkeep +0 -0
  649. package/templates/scaffold/workflow/regression-checklist.md +3 -0
  650. package/templates/scaffold/workflow/research/.gitkeep +0 -0
  651. package/templates/scaffold/workflow/reviews.d/.gitkeep +0 -0
  652. package/templates/scaffold/workflow/specs/_TEMPLATE.md +87 -0
  653. package/templates/scaffold/workflow/verify-evidence/.gitkeep +0 -0
  654. package/templates/scaffold/workflow/verify-evidence.md +4 -0
  655. package/modules/gates/README.md +0 -25
  656. package/modules/gates/dotnet-ca/README.md +0 -24
  657. package/modules/gates/dotnet-ca/check-architecture.sh +0 -150
  658. package/modules/gates/dotnet-ca/local-pre-commit.line +0 -1
  659. package/modules/gates/generated-readonly/README.md +0 -13
  660. package/modules/gates/generated-readonly/check-generated.mjs +0 -61
  661. package/modules/gates/generated-readonly/local-pre-commit.line +0 -1
  662. package/modules/gates/node-layer/README.md +0 -9
  663. package/modules/gates/node-layer/check-node-layer.mjs +0 -29
  664. package/modules/gates/node-layer/local-pre-commit.line +0 -1
  665. package/modules/gates/py-import/README.md +0 -9
  666. package/modules/gates/py-import/check-py-import.mjs +0 -30
  667. package/modules/gates/py-import/local-pre-commit.line +0 -1
  668. package/modules/gates/test-protect/README.md +0 -23
  669. package/modules/gates/test-protect/check-test-protect.mjs +0 -64
  670. package/modules/gates/test-protect/local-pre-commit.line +0 -1
  671. package/modules/hosts/README.md +0 -57
  672. package/modules/hosts/claude/agents/implementer.md +0 -51
  673. package/modules/hosts/claude/agents/independent-reviewer.md +0 -49
  674. package/modules/hosts/claude/agents/ui-verifier.md +0 -48
  675. package/modules/hosts/claude/commands/wf-build.md +0 -69
  676. package/modules/hosts/claude/commands/wf-deploy.md +0 -58
  677. package/modules/hosts/claude/commands/wf-design.md +0 -49
  678. package/modules/hosts/claude/commands/wf-gate-checklist.md +0 -77
  679. package/modules/hosts/claude/commands/wf-maintain.md +0 -76
  680. package/modules/hosts/claude/commands/wf-new-task.md +0 -102
  681. package/modules/hosts/claude/commands/wf-pipeline-run.md +0 -35
  682. package/modules/hosts/claude/commands/wf-plan.md +0 -40
  683. package/modules/hosts/claude/commands/wf-review.md +0 -49
  684. package/modules/hosts/claude/commands/wf-sync-hosts.md +0 -64
  685. package/modules/hosts/claude/commands/wf-test.md +0 -68
  686. package/modules/hosts/codex/agents/implementer.md +0 -51
  687. package/modules/hosts/codex/agents/independent-reviewer.md +0 -49
  688. package/modules/hosts/codex/agents/ui-verifier.md +0 -48
  689. package/modules/hosts/codex/commands/wf-build.md +0 -69
  690. package/modules/hosts/codex/commands/wf-deploy.md +0 -58
  691. package/modules/hosts/codex/commands/wf-design.md +0 -49
  692. package/modules/hosts/codex/commands/wf-gate-checklist.md +0 -77
  693. package/modules/hosts/codex/commands/wf-maintain.md +0 -76
  694. package/modules/hosts/codex/commands/wf-new-task.md +0 -102
  695. package/modules/hosts/codex/commands/wf-pipeline-run.md +0 -35
  696. package/modules/hosts/codex/commands/wf-plan.md +0 -40
  697. package/modules/hosts/codex/commands/wf-review.md +0 -49
  698. package/modules/hosts/codex/commands/wf-sync-hosts.md +0 -64
  699. package/modules/hosts/codex/commands/wf-test.md +0 -68
  700. package/modules/hosts/codex/skills/flow-kit/SKILL.md +0 -14
  701. package/modules/hosts/cursor/agents/implementer.md +0 -51
  702. package/modules/hosts/cursor/agents/independent-reviewer.md +0 -49
  703. package/modules/hosts/cursor/agents/ui-verifier.md +0 -48
  704. package/modules/hosts/cursor/commands/wf-build.md +0 -69
  705. package/modules/hosts/cursor/commands/wf-deploy.md +0 -58
  706. package/modules/hosts/cursor/commands/wf-design.md +0 -49
  707. package/modules/hosts/cursor/commands/wf-gate-checklist.md +0 -77
  708. package/modules/hosts/cursor/commands/wf-maintain.md +0 -76
  709. package/modules/hosts/cursor/commands/wf-new-task.md +0 -102
  710. package/modules/hosts/cursor/commands/wf-pipeline-run.md +0 -35
  711. package/modules/hosts/cursor/commands/wf-plan.md +0 -40
  712. package/modules/hosts/cursor/commands/wf-review.md +0 -49
  713. package/modules/hosts/cursor/commands/wf-sync-hosts.md +0 -64
  714. package/modules/hosts/cursor/commands/wf-test.md +0 -68
  715. package/modules/hosts/omp/agents/implementer.md +0 -52
  716. package/modules/hosts/omp/agents/independent-reviewer.md +0 -50
  717. package/modules/hosts/omp/agents/ui-verifier.md +0 -49
  718. package/modules/hosts/opencode/agents/implementer.md +0 -59
  719. package/modules/hosts/opencode/agents/independent-reviewer.md +0 -53
  720. package/modules/hosts/opencode/agents/ui-verifier.md +0 -52
  721. package/modules/hosts/opencode/commands/wf-build.md +0 -69
  722. package/modules/hosts/opencode/commands/wf-deploy.md +0 -58
  723. package/modules/hosts/opencode/commands/wf-design.md +0 -49
  724. package/modules/hosts/opencode/commands/wf-gate-checklist.md +0 -77
  725. package/modules/hosts/opencode/commands/wf-maintain.md +0 -76
  726. package/modules/hosts/opencode/commands/wf-new-task.md +0 -102
  727. package/modules/hosts/opencode/commands/wf-pipeline-run.md +0 -35
  728. package/modules/hosts/opencode/commands/wf-plan.md +0 -40
  729. package/modules/hosts/opencode/commands/wf-review.md +0 -49
  730. package/modules/hosts/opencode/commands/wf-sync-hosts.md +0 -64
  731. package/modules/hosts/opencode/commands/wf-test.md +0 -68
  732. package/modules/hosts/trae/agents/implementer.md +0 -52
  733. package/modules/hosts/trae/agents/independent-reviewer.md +0 -51
  734. package/modules/hosts/trae/agents/ui-verifier.md +0 -50
  735. package/modules/hosts/trae/commands/wf-build.md +0 -70
  736. package/modules/hosts/trae/commands/wf-deploy.md +0 -59
  737. package/modules/hosts/trae/commands/wf-design.md +0 -50
  738. package/modules/hosts/trae/commands/wf-gate-checklist.md +0 -78
  739. package/modules/hosts/trae/commands/wf-maintain.md +0 -77
  740. package/modules/hosts/trae/commands/wf-new-task.md +0 -103
  741. package/modules/hosts/trae/commands/wf-pipeline-run.md +0 -36
  742. package/modules/hosts/trae/commands/wf-plan.md +0 -41
  743. package/modules/hosts/trae/commands/wf-review.md +0 -50
  744. package/modules/hosts/trae/commands/wf-sync-hosts.md +0 -65
  745. package/modules/hosts/trae/commands/wf-test.md +0 -69
  746. package/modules/hosts/trae/hooks/post-edit-check.cjs +0 -98
  747. package/modules/hosts/trae/hooks/pre-shell-check.cjs +0 -192
  748. package/modules/hosts/trae/hooks/resolve-shell.cjs +0 -30
  749. package/modules/hosts/trae/hooks.json +0 -29
  750. package/modules/hosts/trae/rules/beautify-input-chinese.md +0 -6
  751. package/modules/hosts/trae/rules/git-commit-message.md +0 -10
  752. package/modules/hosts/trae/rules/project-workflow.md +0 -14
  753. package/modules/hosts/zcode/agents/implementer.md +0 -51
  754. package/modules/hosts/zcode/agents/independent-reviewer.md +0 -49
  755. package/modules/hosts/zcode/agents/ui-verifier.md +0 -48
  756. package/src/add-gate.mjs +0 -116
  757. package/src/add-gate.test.mjs +0 -103
  758. package/src/add-host.mjs +0 -68
  759. package/src/cli.mjs +0 -169
  760. package/src/doctor.mjs +0 -629
  761. package/src/executor.mjs +0 -262
  762. package/src/executor.test.mjs +0 -295
  763. package/src/fresh-init.test.mjs +0 -64
  764. package/src/gate-dotnet-ca.test.mjs +0 -124
  765. package/src/gates.test.mjs +0 -143
  766. package/src/init.mjs +0 -382
  767. package/src/init.test.mjs +0 -163
  768. package/src/instance-ref.test.mjs +0 -62
  769. package/src/jscpd-drift.test.mjs +0 -145
  770. package/src/pack.test.mjs +0 -24
  771. package/src/profiles.mjs +0 -183
  772. package/src/render.mjs +0 -132
  773. package/src/rule-budget.test.mjs +0 -103
  774. package/src/run-tests.mjs +0 -56
  775. package/src/stack-profile.test.mjs +0 -95
  776. package/src/sync-hosts.mjs +0 -257
  777. package/src/sync-hosts.test.mjs +0 -291
  778. package/src/sync.mjs +0 -228
  779. package/src/sync.test.mjs +0 -452
  780. package/src/trae-hooks.test.mjs +0 -127
  781. package/src/validate.mjs +0 -77
  782. package/src/validate.test.mjs +0 -95
  783. package/templates/.gitattributes +0 -17
  784. package/templates/AGENTS.md +0 -58
  785. package/templates/_agents/board/index.html +0 -676
  786. package/templates/_agents/commands/build.md +0 -84
  787. package/templates/_agents/commands/deploy.md +0 -66
  788. package/templates/_agents/commands/design.md +0 -63
  789. package/templates/_agents/commands/gate-checklist.md +0 -91
  790. package/templates/_agents/commands/maintain.md +0 -90
  791. package/templates/_agents/commands/new-task.md +0 -110
  792. package/templates/_agents/commands/pipeline-run.md +0 -43
  793. package/templates/_agents/commands/plan.md +0 -48
  794. package/templates/_agents/commands/review.md +0 -62
  795. package/templates/_agents/commands/sync-hosts.md +0 -77
  796. package/templates/_agents/commands/test.md +0 -87
  797. package/templates/_agents/control-surfaces.txt +0 -53
  798. package/templates/_agents/engine-lock.json +0 -342
  799. package/templates/_agents/hooks/check-index-incremental.mjs +0 -48
  800. package/templates/_agents/hooks/check-pairing-incremental.mjs +0 -66
  801. package/templates/_agents/hooks/check-wiki-ledger.mjs +0 -30
  802. package/templates/_agents/hooks/commit-check.cjs +0 -193
  803. package/templates/_agents/hooks/local-pre-commit +0 -6
  804. package/templates/_agents/lane-surfaces.txt +0 -17
  805. package/templates/_agents/level-hints.txt +0 -30
  806. package/templates/_agents/loop/papercut-debt/DESIGN.md +0 -112
  807. package/templates/_agents/mechanism-registry.md +0 -35
  808. package/templates/_agents/metric-claims.txt +0 -81
  809. package/templates/_agents/notes/engine-internals.md +0 -17
  810. package/templates/_agents/notes/runtime-env.md +0 -18
  811. package/templates/_agents/roles/implementer.md +0 -47
  812. package/templates/_agents/roles/independent-reviewer.md +0 -45
  813. package/templates/_agents/roles/ui-verifier.md +0 -44
  814. package/templates/_agents/rule-budgets.txt +0 -20
  815. package/templates/_agents/scripts/agg-delegations.cjs +0 -302
  816. package/templates/_agents/scripts/agg-delegations.test.mjs +0 -282
  817. package/templates/_agents/scripts/agg-gate-stats.mjs +0 -113
  818. package/templates/_agents/scripts/agg-gate-stats.test.mjs +0 -95
  819. package/templates/_agents/scripts/agg-judgments.mjs +0 -156
  820. package/templates/_agents/scripts/agg-judgments.test.mjs +0 -93
  821. package/templates/_agents/scripts/archive-sweep.mjs +0 -235
  822. package/templates/_agents/scripts/archive-sweep.test.mjs +0 -129
  823. package/templates/_agents/scripts/check-attribution.mjs +0 -37
  824. package/templates/_agents/scripts/check-convergence.mjs +0 -124
  825. package/templates/_agents/scripts/check-engine-integrity.mjs +0 -220
  826. package/templates/_agents/scripts/check-engine-integrity.test.mjs +0 -215
  827. package/templates/_agents/scripts/check-funnel.mjs +0 -56
  828. package/templates/_agents/scripts/check-hygiene.mjs +0 -167
  829. package/templates/_agents/scripts/check-hygiene.test.mjs +0 -182
  830. package/templates/_agents/scripts/check-index-incremental.test.mjs +0 -73
  831. package/templates/_agents/scripts/check-lane-surface.mjs +0 -238
  832. package/templates/_agents/scripts/check-lane-surface.test.mjs +0 -302
  833. package/templates/_agents/scripts/check-ledger-invariant.mjs +0 -586
  834. package/templates/_agents/scripts/check-ledger-invariant.test.mjs +0 -639
  835. package/templates/_agents/scripts/check-loop-rev.test.mjs +0 -336
  836. package/templates/_agents/scripts/check-loop-unit.test.mjs +0 -103
  837. package/templates/_agents/scripts/check-loop.mjs +0 -1987
  838. package/templates/_agents/scripts/check-loop.sh +0 -6
  839. package/templates/_agents/scripts/check-loop.test.mjs +0 -3912
  840. package/templates/_agents/scripts/check-metric-claims.mjs +0 -277
  841. package/templates/_agents/scripts/check-prejudgment.mjs +0 -64
  842. package/templates/_agents/scripts/check-registry.mjs +0 -45
  843. package/templates/_agents/scripts/check-scope.mjs +0 -96
  844. package/templates/_agents/scripts/check-scope.test.mjs +0 -99
  845. package/templates/_agents/scripts/check-scripts-syntax.mjs +0 -84
  846. package/templates/_agents/scripts/check-scripts-syntax.test.mjs +0 -72
  847. package/templates/_agents/scripts/check-spec-verif.mjs +0 -47
  848. package/templates/_agents/scripts/check-stage-index.mjs +0 -40
  849. package/templates/_agents/scripts/check-stage-index.test.mjs +0 -77
  850. package/templates/_agents/scripts/closeout-l1.mjs +0 -217
  851. package/templates/_agents/scripts/closeout-l1.test.mjs +0 -105
  852. package/templates/_agents/scripts/commit-check-trigger.test.mjs +0 -205
  853. package/templates/_agents/scripts/compact-ledgers.mjs +0 -97
  854. package/templates/_agents/scripts/compact-ledgers.test.mjs +0 -162
  855. package/templates/_agents/scripts/confirm-doc.mjs +0 -610
  856. package/templates/_agents/scripts/confirm-doc.test.mjs +0 -1119
  857. package/templates/_agents/scripts/doctor.test.mjs +0 -770
  858. package/templates/_agents/scripts/draft-sediment.mjs +0 -178
  859. package/templates/_agents/scripts/draft-sediment.test.mjs +0 -272
  860. package/templates/_agents/scripts/edit-face-check.mjs +0 -109
  861. package/templates/_agents/scripts/edit-face-check.test.mjs +0 -99
  862. package/templates/_agents/scripts/ensure-board.mjs +0 -185
  863. package/templates/_agents/scripts/fill-intent.mjs +0 -91
  864. package/templates/_agents/scripts/fill-intent.test.mjs +0 -113
  865. package/templates/_agents/scripts/fill-plan.mjs +0 -79
  866. package/templates/_agents/scripts/fill-plan.test.mjs +0 -224
  867. package/templates/_agents/scripts/fill-spec.mjs +0 -70
  868. package/templates/_agents/scripts/fill-spec.test.mjs +0 -266
  869. package/templates/_agents/scripts/fixture-scripts.mjs +0 -153
  870. package/templates/_agents/scripts/fixture-scripts.test.mjs +0 -112
  871. package/templates/_agents/scripts/gate-checklist.mjs +0 -209
  872. package/templates/_agents/scripts/gate-checklist.test.mjs +0 -201
  873. package/templates/_agents/scripts/gate-seg.mjs +0 -54
  874. package/templates/_agents/scripts/gate-seg.test.mjs +0 -112
  875. package/templates/_agents/scripts/gen-effective-policy.mjs +0 -107
  876. package/templates/_agents/scripts/gen-effective-policy.test.mjs +0 -100
  877. package/templates/_agents/scripts/gen-verify-evidence.mjs +0 -107
  878. package/templates/_agents/scripts/gen-verify-evidence.test.mjs +0 -84
  879. package/templates/_agents/scripts/gen-wiki-board.mjs +0 -276
  880. package/templates/_agents/scripts/gen-wiki-board.test.mjs +0 -249
  881. package/templates/_agents/scripts/gen-workflow-dashboard.mjs +0 -251
  882. package/templates/_agents/scripts/gen-workflow-dashboard.test.mjs +0 -188
  883. package/templates/_agents/scripts/gen-workflow-index.mjs +0 -201
  884. package/templates/_agents/scripts/gen-workflow-index.test.mjs +0 -152
  885. package/templates/_agents/scripts/gen-workflow-metrics.mjs +0 -466
  886. package/templates/_agents/scripts/gen-workflow-metrics.test.mjs +0 -343
  887. package/templates/_agents/scripts/git-merge-jsonl.mjs +0 -63
  888. package/templates/_agents/scripts/git-merge-jsonl.test.mjs +0 -125
  889. package/templates/_agents/scripts/judgment-ledger.mjs +0 -65
  890. package/templates/_agents/scripts/judgment-ledger.test.mjs +0 -129
  891. package/templates/_agents/scripts/kb-cache-evict.mjs +0 -50
  892. package/templates/_agents/scripts/kb-cache-evict.test.mjs +0 -104
  893. package/templates/_agents/scripts/kb-search.mjs +0 -413
  894. package/templates/_agents/scripts/kb-search.test.mjs +0 -299
  895. package/templates/_agents/scripts/lane-surface-audit.mjs +0 -143
  896. package/templates/_agents/scripts/lane-surface-audit.test.mjs +0 -93
  897. package/templates/_agents/scripts/ledger-doc-chain.test.mjs +0 -166
  898. package/templates/_agents/scripts/ledger-loader.mjs +0 -108
  899. package/templates/_agents/scripts/ledger-loader.test.mjs +0 -131
  900. package/templates/_agents/scripts/ledger-prune.mjs +0 -96
  901. package/templates/_agents/scripts/ledger-prune.test.mjs +0 -120
  902. package/templates/_agents/scripts/ledger-shards.mjs +0 -344
  903. package/templates/_agents/scripts/ledger-shards.test.mjs +0 -356
  904. package/templates/_agents/scripts/ledger-ts-monotonic.test.mjs +0 -135
  905. package/templates/_agents/scripts/level-criteria.mjs +0 -231
  906. package/templates/_agents/scripts/level-criteria.test.mjs +0 -281
  907. package/templates/_agents/scripts/mechanism-retire-watch.mjs +0 -183
  908. package/templates/_agents/scripts/mechanism-retire-watch.test.mjs +0 -114
  909. package/templates/_agents/scripts/papercut-debt-controller.mjs +0 -141
  910. package/templates/_agents/scripts/papercut-debt-controller.test.mjs +0 -127
  911. package/templates/_agents/scripts/papercut-debt-sensor.mjs +0 -170
  912. package/templates/_agents/scripts/papercut-debt-sensor.test.mjs +0 -146
  913. package/templates/_agents/scripts/pipeline-run-docs.mjs +0 -76
  914. package/templates/_agents/scripts/pipeline-run-run.mjs +0 -63
  915. package/templates/_agents/scripts/pipeline-run.mjs +0 -867
  916. package/templates/_agents/scripts/pipeline-run.test.mjs +0 -517
  917. package/templates/_agents/scripts/policy.mjs +0 -281
  918. package/templates/_agents/scripts/pre-push.test.mjs +0 -105
  919. package/templates/_agents/scripts/resolve-merge-conflicts.mjs +0 -110
  920. package/templates/_agents/scripts/resolve-merge-conflicts.test.mjs +0 -87
  921. package/templates/_agents/scripts/rewrite-file.mjs +0 -133
  922. package/templates/_agents/scripts/rewrite-file.test.mjs +0 -148
  923. package/templates/_agents/scripts/rule-budget.mjs +0 -96
  924. package/templates/_agents/scripts/rule-budget.test.mjs +0 -118
  925. package/templates/_agents/scripts/run-tests.mjs +0 -99
  926. package/templates/_agents/scripts/run-tests.test.mjs +0 -105
  927. package/templates/_agents/scripts/solidify-task.mjs +0 -109
  928. package/templates/_agents/scripts/solidify-task.test.mjs +0 -129
  929. package/templates/_agents/scripts/stage-gates.mjs +0 -343
  930. package/templates/_agents/scripts/stage-gates.test.mjs +0 -105
  931. package/templates/_agents/scripts/trust-mode.mjs +0 -67
  932. package/templates/_agents/scripts/trust-mode.test.mjs +0 -110
  933. package/templates/_agents/scripts/verify-wiki-consistency.mjs +0 -253
  934. package/templates/_agents/scripts/verify-wiki-consistency.test.mjs +0 -123
  935. package/templates/_agents/scripts/verify.mjs +0 -345
  936. package/templates/_agents/scripts/verify.test.mjs +0 -373
  937. package/templates/_agents/scripts/wf-journal.mjs +0 -231
  938. package/templates/_agents/scripts/wf-journal.test.mjs +0 -216
  939. package/templates/_agents/scripts/wiki-search.mjs +0 -19
  940. package/templates/_agents/scripts/wiki-search.test.mjs +0 -57
  941. package/templates/_agents/scripts/workflow-board-server.mjs +0 -393
  942. package/templates/_agents/scripts/workflow-board-server.test.mjs +0 -201
  943. package/templates/_agents/scripts/workflow-enums.mjs +0 -70
  944. package/templates/_agents/scripts/workflow-enums.test.mjs +0 -118
  945. package/templates/_agents/scripts/workflows-check.mjs +0 -260
  946. package/templates/_agents/scripts/workflows-check.test.mjs +0 -278
  947. package/templates/_agents/scripts-test-exempt.txt +0 -16
  948. package/templates/_agents/skills/papercut-fix/SKILL.md +0 -60
  949. package/templates/_agents/skills/papercut-fix/references/response-template.md +0 -81
  950. package/templates/_agents/skills/review-method/SKILL.md +0 -58
  951. package/templates/_agents/skills/verify-ui/SKILL.md +0 -61
  952. package/templates/_agents/skills/wiki/SKILL.md +0 -106
  953. package/templates/_agents/workflow-enums.txt +0 -26
  954. package/templates/_agents/workflow-modules.txt +0 -11
  955. package/templates/_agents/workflows/_TEMPLATE.md +0 -75
  956. package/templates/_agents/workflows/pipeline-closing.md +0 -28
  957. package/templates/_agents/workflows//347/244/272/344/276/213-/345/271/266/350/241/214/345/256/236/347/216/260/350/257/204/345/256/241.md +0 -16
  958. package/templates/_githooks/commit-msg +0 -17
  959. package/templates/_githooks/post-commit +0 -10
  960. package/templates/_githooks/pre-commit +0 -126
  961. package/templates/_githooks/pre-merge-commit +0 -29
  962. package/templates/_githooks/pre-push +0 -136
  963. package/templates/_github/workflows/kit-ci.yml +0 -49
  964. package/templates/wiki/INDEX.md +0 -73
  965. package/templates/wiki/drafts-archive/README.md +0 -3
  966. package/templates/wiki//344/272/247/345/223/201/351/234/200/346/261/202/README.md +0 -3
  967. package/templates/wiki//345/274/200/345/217/221/346/226/271/346/241/210/README.md +0 -3
  968. package/templates/wiki//346/225/260/346/215/256/347/273/264/346/212/244/README.md +0 -3
  969. package/templates/wiki//346/265/213/350/257/225/346/212/245/345/221/212/README.md +0 -3
  970. package/templates/wiki//347/224/250/346/210/267/345/212/237/350/203/275/README.md +0 -3
  971. package/templates/wiki//347/237/245/350/257/206/346/262/211/346/267/200/346/200/273/350/247/210.html +0 -77
  972. package/templates/wiki//351/241/271/347/233/256/350/247/204/350/214/203/README.md +0 -3
  973. package/templates/wiki//351/241/271/347/233/256/350/256/241/345/210/222/README.md +0 -3
  974. package/templates/workflow/README.md +0 -91
  975. package/templates/workflow/delegations.md +0 -29
  976. package/templates/workflow/incidents/_TEMPLATE.md +0 -51
  977. package/templates/workflow/intents/_TEMPLATE.md +0 -51
  978. package/templates/workflow/papercuts.md +0 -9
  979. package/templates/workflow/plans/_TEMPLATE.md +0 -47
  980. package/templates/workflow/regression-checklist.md +0 -23
  981. package/templates/workflow/specs/_TEMPLATE.md +0 -80
  982. /package/templates/{_agents → engine/.agents}/board/marked.min.js +0 -0
  983. /package/templates/{_agents/workflows → engine/.agents/pipelines}/steps//347/244/272/344/276/213-/351/203/250/347/275/262/351/252/214/350/257/201.md" +0 -0
  984. /package/templates/{_agents → engine/.agents}/scripts/git-core.mjs +0 -0
@@ -0,0 +1,116 @@
1
+ // check-loop-sections/s01-pairing.mjs — 1. 红线判低 + L3 状态(hard)+ 同名配对/L3 确认三件(advisory)
2
+ // (2026-10-10 收敛系列 4b 自 check-loop.mjs 原位切出;2026-10-21 门禁极小化第 1 批降档:
3
+ // 配对完整性 ×4 与 L3 确认三件 ×3 由 blockers 降 WARN——「事后扫」移交 closeout skill 自查(第 2 批),
4
+ // 红线判低与 L3 状态未确认保 hard:前者是判低逃逸的唯一机器面,后者是状态机主干。)
5
+ // (基础设施由 kit 供给。)
6
+ // (2026-10-28 减重第二刀:本段扫描面默认收窄为「本轮 diff 触及的 workflow 文档」;CHECK_LOOP_FULL=1 全量。)
7
+ import {
8
+ fs, os, path, spawnSync, createHash, createRequire, fileURLToPath,
9
+ loadEnums, auditEnabled, loadKitPolicy, hasFreshVerifyLine, laneOfDoc, MARK_RE,
10
+ SCRIPT_DIR, GIT, REV_ARG, REV, ROOT, ENUMS, inSet, stOkDoc,
11
+ spawnGit, gitOut, linesOf, fmGet, WF, DOC_DIRS, blockers, warnings, kitPolicy, isTracked, docFiles,
12
+ addedDateOf, warnEvidenceExempt, VERIFY_GREEN_RE, verifyEvidenceTruth,
13
+ versionGreater, fmStatus, bindingSha256, readdirOrNull, isDirectoryOrNull,
14
+ } from '../check-loop-kit.mjs';
15
+
16
+ // 红线判低:非 high 勾了「→ 级别 / 级别至少 L2|L3」即 hard。L1 plan 即入口后,plan 正文同样扫描。
17
+ function pushRedline(file, base, lvl) {
18
+ if (laneOfDoc(lvl) === 'high') return;
19
+ const redlineTouched = (linesOf(file) || [])
20
+ .some((l) => /^- \[x\]/.test(l) && /(\$\\rightarrow\$|→)\s*级别|级别至少\s*L[23]/.test(l));
21
+ if (redlineTouched) {
22
+ blockers.push(`- [红线判低] ${base} 级别为 ${lvl || '缺失'} 但触达红线已勾选(规则/契约或 schema/结构面)——协作道不受理 STOP 级改动:就高不就低,把「级别」升至 L2/L3 并补同名 spec`);
23
+ }
24
+ }
25
+
26
+ export function run() {
27
+ // --- 1. 红线判低 + L3 状态(hard)+ 同名配对/L3 确认三件(advisory,2026-10-21 第 1 批降档)---
28
+ // L1 收成一份 plan(2026-10-10):级别恰好为 L1 的 plan 自己就是入口,不要求同名 intent/incident。
29
+ // 级别缺失或 L2/L3 仍要求入口。已写的 intent 不论级别都仍要求同名 plan。历史台账不迁移。
30
+ for (const intent of docFiles('intents')) {
31
+ const base = path.basename(intent);
32
+ const st = fmGet(intent, '状态');
33
+ const lvl = fmGet(intent, '级别');
34
+ if (!stOkDoc(st)) {
35
+ const msg = `${base}(frontmatter 状态键当前值:『${st || '缺失'}』)`;
36
+ if (lvl === 'L3') blockers.push(`- [状态未确认] L3 intent 必须为 approved/done/superseded/cancelled:${msg}`);
37
+ else warnings.push(`- [WARN 状态未确认] intent 必须为 approved/done/superseded/cancelled:${msg}`);
38
+ }
39
+ if (lvl === 'L2' || lvl === 'L3') {
40
+ if (!fs.existsSync(path.join(ROOT, WF, 'specs', base))) {
41
+ warnings.push(`- [WARN 配对断裂] intent 缺 spec:${base}(应在 ${WF}/specs/ 下同名)`);
42
+ }
43
+ }
44
+ // 已有 intent 仍须同名 plan(含存量 L1)。L2/L3 另须 spec。
45
+ if (!fs.existsSync(path.join(ROOT, WF, 'plans', base))) {
46
+ warnings.push(`- [WARN 配对断裂] intent 缺 plan:${base}(应在 ${WF}/plans/ 下同名)`);
47
+ }
48
+ pushRedline(intent, base, lvl);
49
+ }
50
+
51
+ for (const spec of docFiles('specs')) {
52
+ const base = path.basename(spec);
53
+ const st = fmGet(spec, '状态');
54
+ const lvl = fmGet(spec, '级别');
55
+ const hasEntry = fs.existsSync(path.join(ROOT, WF, 'intents', base)) || fs.existsSync(path.join(ROOT, WF, 'incidents', base));
56
+ if (!hasEntry) warnings.push(`- [WARN 配对断裂] spec 缺 intent/incident:${base}(应在 ${WF}/intents/ 或 ${WF}/incidents/ 下同名)`);
57
+ if (!stOkDoc(st)) {
58
+ const msg = `${base}(frontmatter 状态键当前值:『${st || '缺失'}』)`;
59
+ if (lvl === 'L3') blockers.push(`- [状态未确认] L3 spec 必须为 approved/done/superseded/cancelled:${msg}`);
60
+ else warnings.push(`- [WARN 状态未确认] spec 必须为 approved/done/superseded/cancelled:${msg}`);
61
+ }
62
+ // L3 确认三件:确认结果/确认时间读 frontmatter;独立复核按正文行锚定(放弃件豁免 = 枚举单源 abandoned 集)
63
+ if (lvl === 'L3' && !inSet(st, ENUMS['doc.status.abandoned'])) {
64
+ if (fmGet(spec, '确认结果') !== 'approved') warnings.push(`- [WARN L3 确认缺失] ${base} 确认结果必须为 approved`);
65
+ if (!fmGet(spec, '确认时间')) warnings.push(`- [WARN L3 确认缺失] ${base} 必须记录确认时间`);
66
+ if (!(linesOf(spec) || []).some((l) => /^- 独立复核:[ \t]*[^<\s]/.test(l))) {
67
+ warnings.push(`- [WARN L3 复核缺失] ${base} 必须记录新会话独立复核结论`);
68
+ }
69
+ }
70
+ // 独立复核上下文标识(2026-10-11 C2,policy v12 reviewerSince advisory):独立性声明须带可证伪基底——
71
+ // 复核行落「复核上下文:<会话/子代理 id>」,使「主智能体自查冒充」从遗漏升级为积极伪造。只扫有独立
72
+ // 复核行的 spec;锚前存量豁免不回填;缺键(v1–v11)→ 检查整体跳过。
73
+ if (kitPolicy.reviewerSince) {
74
+ const rvDate = fmGet(spec, '日期') || (/^\d{4}-\d{2}-\d{2}$/.test(base.slice(0, 10)) ? base.slice(0, 10) : '');
75
+ if (rvDate >= kitPolicy.reviewerSince) {
76
+ const rvLine = (linesOf(spec) || []).find((l) => /^- 独立复核:/.test(l));
77
+ if (rvLine && !/复核上下文:/.test(rvLine)) {
78
+ warnings.push(`- [WARN 复核上下文缺失] ${base} 独立复核行缺「复核上下文:<会话/子代理 id>」——独立性声明无可证伪基底(C2,reviewerSince ${kitPolicy.reviewerSince})`);
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ for (const plan of docFiles('plans')) {
85
+ const base = path.basename(plan);
86
+ const st = fmGet(plan, '状态');
87
+ const lvl = fmGet(plan, '级别');
88
+ const hasEntry = fs.existsSync(path.join(ROOT, WF, 'intents', base)) || fs.existsSync(path.join(ROOT, WF, 'incidents', base));
89
+ // L1 plan 即入口。级别缺失仍要求入口(fail-closed)。
90
+ if (lvl !== 'L1' && !hasEntry) warnings.push(`- [WARN 配对断裂] plan 缺 intent/incident:${base}(应在 ${WF}/intents/ 或 ${WF}/incidents/ 下同名)`);
91
+ pushRedline(plan, base, lvl);
92
+ if (!stOkDoc(st)) {
93
+ const msg = `${base}(frontmatter 状态键当前值:『${st || '缺失'}』)`;
94
+ if (lvl === 'L3') blockers.push(`- [状态未确认] L3 plan 必须为 approved/done/superseded/cancelled:${msg}`);
95
+ else warnings.push(`- [WARN 状态未确认] plan 必须为 approved/done/superseded/cancelled:${msg}`);
96
+ }
97
+ // 链内状态一致性(2026-10-11 链内倒挂 WARN,评审 C1 收口——B1 arrival 链暴露的盲点:配对存在≠终态同批):
98
+ // README 规则 5 / stages.md Test §5.4 要求关单时入口与同名 plan 同批翻转。intent 链双向入检;incident 链只检
99
+ // 「closed 而 plan 在途」孤儿向——「plan done 而 incident 停 fixed」为 2026-10 前存量固定形态
100
+ // (INDEX incidents fixed 计数 ≈50 件),不追溯,避免不可消除噪声(同 delegationSince 存量豁免纪律)。
101
+ const intentUp = path.join(ROOT, WF, 'intents', base);
102
+ if (fs.existsSync(intentUp)) {
103
+ const stu = fmGet(intentUp, '状态');
104
+ if (st === 'done' && ['draft', 'approved'].includes(stu)) {
105
+ warnings.push(`- [WARN 链内倒挂] ${base} plan 已 done 而入口 intent 仍 ${stu || '缺失'}——README 规则 5:勾验 intent 验收后 intent 与同名 plan 一并 done`);
106
+ }
107
+ if (stu === 'done' && ['draft', 'approved'].includes(st)) {
108
+ warnings.push(`- [WARN 链内倒挂] ${base} 入口 intent 已 done 而 plan 仍 ${st}——stages.md Test §5.4 不留 approved 孤儿:同名 plan 一并 done`);
109
+ }
110
+ }
111
+ const incidentUp = path.join(ROOT, WF, 'incidents', base);
112
+ if (fs.existsSync(incidentUp) && fmGet(incidentUp, '状态') === 'closed' && ['draft', 'approved'].includes(st)) {
113
+ warnings.push(`- [WARN 链内倒挂] ${base} incident 已 closed 而 plan 仍 ${st}——修复类关单同名 plan 一并 done(stages.md Test §5.4)`);
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,38 @@
1
+ // check-loop-sections/s03x-regr-evidence.mjs — 3 扩展. incident 防复发验证证据门 [hard-block](2026-10-09)---
2
+ // (2026-10-10 收敛系列 4b 自 check-loop.mjs 原位切出,段体逐字未改;基础设施由 kit 供给。)
3
+ import {
4
+ fs, os, path, spawnSync, createHash, createRequire, fileURLToPath,
5
+ loadEnums, auditEnabled, loadKitPolicy, hasFreshVerifyLine, laneOfDoc, MARK_RE,
6
+ SCRIPT_DIR, GIT, REV_ARG, REV, ROOT, ENUMS, inSet, stOkDoc,
7
+ spawnGit, gitOut, linesOf, fmGet, WF, DOC_DIRS, blockers, warnings, kitPolicy, isTracked, docFiles,
8
+ addedDateOf, warnEvidenceExempt, VERIFY_GREEN_RE, verifyEvidenceTruth,
9
+ versionGreater, fmStatus, bindingSha256, readdirOrNull, isDirectoryOrNull,
10
+ } from '../check-loop-kit.mjs';
11
+
12
+ export function run() {
13
+ // --- 3 扩展. incident 防复发验证证据门 [hard-block](2026-10-09)---
14
+ // 模板行 38 强制项的机器面:「防复发验证必须落到自动化用例或回归清单条目,禁止只写已人工验证」。
15
+ // fixed/closed 且建档日 ≥ incidentRegrSince 的 incident,正文无自动化用例 / 回归清单引用 → hard。
16
+ // 判据 = 宽匹配正则(引擎 .test.mjs / 后端 xunit / 前端测试目录 / 回归清单 / 冒烟 / 测试命令)——
17
+ // 门的是「落到可复跑的验证资产」,不是猜具体测试名;存量(< 锚)豁免。kitPolicy.incidentRegrSince
18
+ // 缺键(v1-v5)→ 整体跳过。
19
+ {
20
+ const anchor = kitPolicy.incidentRegrSince;
21
+ if (anchor) {
22
+ // 回归清单引用含分片路径(2026-10-28):regression-checklist.md §6 分片制下防复发条目落
23
+ // workflow/regression-checklist.d/<YYYY-MM>.md(append-only 追加区),主台账读侧自动合并——
24
+ // 门禁正则须同认分片,否则只引分片的 incident 被误判「未落回归清单」(2026-10-27-aggrid-hover-popconfirm 实证)
25
+ const REGR_EVIDENCE_RE = /\.test\.mjs|backend\/[^\s]*[Tt]ests?[\/.]|\w+Tests\.cs|frontend\/[^\s]*(?:__tests__|tests?)\/|workflow\/regression-checklist\.md|workflow\/regression-checklist\.d\/|regression-smoke|npm\s+test|dotnet\s+test|run-tests/;
26
+ for (const inc of docFiles('incidents')) {
27
+ const incSt = fmGet(inc, '状态');
28
+ if (!['fixed', 'closed'].includes(incSt)) continue;
29
+ const add = addedDateOf(inc);
30
+ if (!add || add < anchor) continue; // 存量豁免(不可判定亦不拦——无判定依据不出 hard)
31
+ const lines = linesOf(inc) || [];
32
+ if (!lines.some((l) => REGR_EVIDENCE_RE.test(l))) {
33
+ blockers.push(`- [回归证据缺失] ${path.basename(inc)} 已 ${incSt} 但防复发验证未落自动化用例/回归清单引用(模板强制项,禁「已人工验证」)`);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,130 @@
1
+ // check-loop-sections/s08-acceptance.mjs — 8. intent 验收标准对账(done 须逐条勾验并补证据;新建 hard,存量聚合 warning)---
2
+ // (2026-10-10 收敛系列 4b 自 check-loop.mjs 原位切出,段体逐字未改;基础设施由 kit 供给。)
3
+ import {
4
+ fs, os, path, spawnSync, createHash, createRequire, fileURLToPath,
5
+ loadEnums, auditEnabled, loadKitPolicy, hasFreshVerifyLine, readVerifyLedgerText, laneOfDoc, MARK_RE,
6
+ SCRIPT_DIR, GIT, REV_ARG, REV, ROOT, ENUMS, inSet, stOkDoc,
7
+ spawnGit, gitOut, linesOf, fmGet, WF, DOC_DIRS, blockers, warnings, kitPolicy, isTracked, docFiles,
8
+ addedDateOf, warnEvidenceExempt, VERIFY_GREEN_RE, verifyEvidenceTruth,
9
+ versionGreater, fmStatus, bindingSha256, readdirOrNull, isDirectoryOrNull,
10
+ } from '../check-loop-kit.mjs';
11
+
12
+ export function run() {
13
+ // --- 8. intent 验收标准对账(done 须逐条勾验并补证据;新建 hard,存量聚合 warning)---
14
+ // 生效日锚 2026-09-28 改「git 首次加入日期」(此前取文件名前 10 字符——命名规范强制的字段、
15
+ // 写早零成本,见 incidents/2026-09-28-check8-git-anchor)。非 git → 不可判定 → 走存量口径(不误报 hard)。
16
+ {
17
+ const accCutoff = '2026-09-12';
18
+ let legacyUnaccounted = 0;
19
+ // 测试绿凭证状态(verify-evidence):台账读一次循环外缓存;policy 缺 verifySince
20
+ //(v1-v4)→ ctxBase null → 对账整体跳过(向后兼容)
21
+ const verifySinceOf = kitPolicy.verifySince;
22
+ // 读口在 kit:--rev 且树上没有凭证文件时回退主工作区,其余路径只读 ROOT。
23
+ const verifyFresh = (() => {
24
+ try {
25
+ const text = readVerifyLedgerText();
26
+ return text != null ? hasFreshVerifyLine(text.split(/\r?\n/)) : false;
27
+ } catch { return false; }
28
+ })();
29
+ const acceptanceDocs = docFiles('intents').filter((intent) => fmGet(intent, '状态') === 'done');
30
+ // L1 plan 即入口:没有同名 intent 的 done L1 plan 自己对账验收。有 intent 的仍只查 intent。
31
+ for (const plan of docFiles('plans')) {
32
+ if (fmGet(plan, '状态') !== 'done' || fmGet(plan, '级别') !== 'L1') continue;
33
+ const baseName = path.basename(plan);
34
+ if (fs.existsSync(path.join(ROOT, WF, 'intents', baseName))) continue;
35
+ if (fs.existsSync(path.join(ROOT, WF, 'incidents', baseName))) continue;
36
+ acceptanceDocs.push(plan);
37
+ }
38
+ for (const intent of acceptanceDocs) {
39
+ const base = path.basename(intent);
40
+ const lines = linesOf(intent) || [];
41
+ // 节扫描:hs=有验收节;insec 至下一个二级标题;uc=未勾项;ne=勾选缺证据;ex=存量豁免声明
42
+ // 证据可写在 [x] 行的续行(仓库通写法「(证据:…)」另起一行)——pendX 记「待证据项」,
43
+ // 遇证据行(全角「:」/半角「:」皆认)清零;遇下一条目 / 下一小节 / 节末仍无证据 → ne
44
+ let hs = false, uc = false, ne = false;
45
+ let insec = false, ex = false;
46
+ let pendX = false; // 上一 [x] 项尚无证据,证据可能在紧随的续行
47
+ let currentEvidence = ''; // 当前条目的证据内容,用于语义校验
48
+ const evidenceItems = []; // 逐条证据(2026-10-06-v114-backflow-batch:两遍裁决——先文档级判实现证据在场,再逐条落判)
49
+ const evRe = /证据[::]/;
50
+ const closeItem = () => {
51
+ if (pendX) {
52
+ ne = true;
53
+ pendX = false;
54
+ }
55
+ if (currentEvidence && !ex) {
56
+ evidenceItems.push(currentEvidence);
57
+ }
58
+ currentEvidence = '';
59
+ };
60
+ for (const line of lines) {
61
+ if (/存量对账豁免(/.test(line)) ex = true;
62
+ if (/^\s*##\s+[^#]*验收标准/.test(line)) { hs = true; insec = true; closeItem(); continue; }
63
+ if (insec && /^\s*##\s/.test(line)) { insec = false; closeItem(); continue; }
64
+ if (!insec) continue;
65
+ if (/^\s*- \[ \]/.test(line)) { closeItem(); uc = true; continue; }
66
+ if (/^\s*- \[x\]/.test(line)) {
67
+ closeItem();
68
+ pendX = !evRe.test(line);
69
+ if (evRe.test(line)) currentEvidence = line.split(/证据[::]/)[1].trim();
70
+ continue;
71
+ }
72
+ if (pendX && evRe.test(line)) {
73
+ pendX = false;
74
+ currentEvidence = line.split(/证据[::]/)[1].trim();
75
+ } else if (currentEvidence && line.trim() && !/^\s*- /.test(line)) {
76
+ // 简单累加续行证据
77
+ currentEvidence += ' ' + line.trim();
78
+ }
79
+ }
80
+ closeItem(); // 节末(或全文末)仍无证据 → 计缺证据
81
+ // 两遍裁决(2026-10-06-v114-backflow-batch 记录型提交豁免):文档级先判「存在可过检实现证据」
82
+ // (sha / process 型任一),记录型提交(subject=docs 系)证据仅在实现证据在场时降级豁免告警——
83
+ // 冒烟报告 / approved 留痕 / 关单提交不改 plan 声明面属预期;仅引记录型而无实现证据 → 维持 hard-block
84
+ //(豁免通道不得独立成立,防「只引 docs 提交洗白代码改动」)。
85
+ if (evidenceItems.length) {
86
+ const planBase = base.replace(/.md$/, '');
87
+ // verify 对账 ctx:intent 首次加入 git ≥ verifySince(v5 锚)才参与;不可判定 → null 走 text 豁免
88
+ const iadd = addedDateOf(intent);
89
+ const vctx = typeof verifySinceOf === 'string' && iadd !== '' && iadd >= verifySinceOf
90
+ ? { verifyRelevant: true, hasFresh: verifyFresh } : null;
91
+ const results = evidenceItems.map((ev) => ({ t: verifyEvidenceTruth(ev, planBase, ROOT, vctx) }));
92
+ const hasImplEvidence = results.some((r) => r.t.ok && (r.t.type === 'sha' || r.t.type === 'process'));
93
+ for (const r of results) {
94
+ if (r.t.ok && r.t.type === 'verify-missing') {
95
+ warnings.push(`- [WARN 测试绿缺凭证] ${base} 验收证据声明「测试绿」但 24h 内无 verify 凭证(verifications.jsonl)——跑 node .agents/scripts/verify.mjs 后重跑(advisory,灰度第一档)`);
96
+ continue;
97
+ }
98
+ if (r.t.ok) continue;
99
+ if (r.t.type === 'irrelevant' && r.t.recordCommit && hasImplEvidence) {
100
+ warnEvidenceExempt('record', planBase);
101
+ continue;
102
+ }
103
+ blockers.push(`- [证据${r.t.type === 'forged' ? '伪造' : '无关'}] ${base} 验收证据校验失败: ${r.t.msg}`);
104
+ }
105
+ }
106
+ // 生效日锚 = git 首次加入日期(2026-09-28 改;此前取文件名前 10 字符)。**准确收益**:关掉
107
+ // 「改文件名日期(日常必写、零成本)即整段跳过 hard 门」这条通道;锚取 author date(%aI),
108
+ // 刻意伪造(`git commit --date=`)仍可绕过——与伪造台账同属本地信任边界内,不宣称"通道已关闭"。
109
+ // 非 git / 查不到 → '' → isNew=false → 走存量口径(与既有语义一致:不可判定时不误报 hard)。
110
+ const adddate = addedDateOf(intent);
111
+ const isNew = adddate !== '' && adddate >= accCutoff;
112
+ const docWord = path.basename(path.dirname(intent)) === 'plans' ? 'plan' : 'intent';
113
+ if (!hs) {
114
+ if (isNew) blockers.push(`- [验收未对账] done ${docWord} 缺「## 验收标准」节(勾验无从核对):${base}`);
115
+ else if (!ex) legacyUnaccounted++;
116
+ continue;
117
+ }
118
+ if (!uc && !ne) continue;
119
+ if (isNew) {
120
+ if (uc) blockers.push(`- [验收未对账] done ${docWord} 验收标准有未勾验项:${base}(逐条勾验并补证据:commit/用例/冒烟输出)`);
121
+ if (ne) blockers.push(`- [验收缺证据] ${base} 验收标准勾选项缺「证据:」标注——证据是闭环准确性的唯一机器事实`);
122
+ } else if (!ex) {
123
+ legacyUnaccounted++;
124
+ }
125
+ }
126
+ if (legacyUnaccounted > 0) {
127
+ warnings.push(`- [WARN 验收对账存量] ${legacyUnaccounted} 个存量 done intent 验收标准未对账(生效日锚之前加入仓库,豁免 hard,不回填)`);
128
+ }
129
+ }
130
+ }
@@ -0,0 +1,152 @@
1
+ // check-loop-sections/s15-fingerprint.mjs — 15. 确认指纹对账 [hard-block](confirm-gate-machine;2026
2
+ // (2026-10-10 收敛系列 4b 自 check-loop.mjs 原位切出,段体逐字未改;基础设施由 kit 供给。)
3
+ // (2026-10-28 减重第二刀:本段扫描面默认收窄为「本轮 diff 触及的 workflow 文档」;CHECK_LOOP_FULL=1 全量。)
4
+ import {
5
+ fs, os, path, spawnSync, createHash, createRequire, fileURLToPath,
6
+ loadEnums, auditEnabled, loadKitPolicy, hasFreshVerifyLine, laneOfDoc, MARK_RE,
7
+ SCRIPT_DIR, GIT, REV_ARG, REV, ROOT, ENUMS, inSet, stOkDoc,
8
+ spawnGit, gitOut, linesOf, fmGet, WF, DOC_DIRS, blockers, warnings, kitPolicy, isTracked, docFiles,
9
+ addedDateOf, warnEvidenceExempt, VERIFY_GREEN_RE, verifyEvidenceTruth,
10
+ versionGreater, fmStatus, bindingSha256, readdirOrNull, isDirectoryOrNull,
11
+ commitmentFingerprint,
12
+ } from '../check-loop-kit.mjs';
13
+
14
+ import { loadAllConfirmations } from '../ledger-loader.mjs';
15
+
16
+ export function run() {
17
+ // --- 15. 确认指纹对账 [hard-block](confirm-gate-machine;confirm-gate-delegated 两形态;
18
+ // 生效日锚 2026-09-28 改台账 ts——此前锚取自文档自报「日期/发现」,新档只要把日期写早即整段跳过判定,
19
+ // incident 2026-09-28-confirm-gate-effective-date-anchor 实证)---
20
+ // 确认两形态(confirm-doc.mjs):TTY 亲手键入「可以」/ --delegated 对话委托代录(用户对话内明确放行后
21
+ // AI 代录,台账行如实记 source=chat-delegated + quote 原话,永不伪装 TTY)。intents/specs/plans 凡
22
+ // approved/done 须有 confirm-doc 产生的 frontmatter 确认指纹 + 台账(.agents/confirmations.jsonl)
23
+ // 配对行——配对判据 doc/stage/fingerprint 三键,与 source 无关。
24
+ // **生效日锚 = 台账 ts(2026-09-28 起)**:受管准入 = 该 doc 在台账中有合法跳转行(stage ∈ approved/done/
25
+ // fixed/closed/superseded/cancelled,append-only 取末次);无台账行 = 存量豁免(不追溯)。自报日期
26
+ // (日期/发现/文件名)不再参与门禁判定——它可被作者手填,把「门是否生效」的决定权交给被约束对象本身
27
+ // 是自举漏洞;台账行是「确认确实发生过」的唯一机器事实。docs 与 incidents 共用同一锚(原 incidents
28
+ // 独立生效日 2026-09-28 常量退役:台账起算日 = docs 生效日,两档等价)。
29
+ // 台账坏行容忍跳过(审计件,jsonl 追加式);frontmatter 存 16 位、台账存 64 位,按前 16 位配对。
30
+ {
31
+ const EFFECTIVE = kitPolicy.confirmDocsEffective;
32
+ const ledger = loadAllConfirmations(ROOT);
33
+ // incidents 侧覆盖(gate-coverage):fixed/closed 为已确认态(open = 起草态不加门——
34
+ // maintain.md 创建即对话确认的既有口径)
35
+ // 放弃态覆盖(closing-coverage):superseded/cancelled 入配对集——confirm-doc --to 是唯一
36
+ // 合法产生通道(cancelled 自 draft/approved/open/fixed;superseded 自 approved/done/fixed/closed),
37
+ // 此前手改 frontmatter 即出账的口子收死
38
+ const CONFIRMED_BY_SUB = {
39
+ intents: ['approved', 'done', 'superseded', 'cancelled'],
40
+ specs: ['approved', 'done', 'superseded', 'cancelled'],
41
+ plans: ['approved', 'done', 'superseded', 'cancelled'],
42
+ incidents: ['fixed', 'closed', 'superseded', 'cancelled'],
43
+ };
44
+ // 合法跳转 stage 集(台账行「确认确实发生过」的判据;revert-draft / revert-open 类回退注记行不算)
45
+ const VALID_STAGES = new Set(['approved', 'done', 'fixed', 'closed', 'superseded', 'cancelled']);
46
+ for (const [sub, confirmedSet] of Object.entries(CONFIRMED_BY_SUB)) {
47
+ for (const doc of docFiles(sub)) {
48
+ const st = fmGet(doc, '状态');
49
+ if (!confirmedSet.includes(st)) continue;
50
+ const base = path.basename(doc);
51
+ const rel = path.relative(ROOT, doc).split(path.sep).join('/');
52
+ // 受管准入 = 两条件取或(2026-09-28 改锚):
53
+ // ① 台账中有该 doc 的合法跳转行——「确认确实发生过」的机器事实;它独立于自报日期成立,
54
+ // 故堵死「确认过却把日期写早以逃掉对账」这条攻破路径(本 incident 的核心缺陷);
55
+ // ② 自报日期 ≥ 生效日——覆盖「新档完全没跑 confirm-doc」的漏网面(此类无台账行,
56
+ // 仅靠 ① 会被误判为存量豁免而静默放行)。
57
+ // 两条件皆不满足 = 存量豁免(生效日前既有、从未走确认门,不追溯)。
58
+ const docEntries = ledger.filter((e) => e && e.doc === rel && VALID_STAGES.has(e.stage));
59
+ const eff = sub === 'incidents' ? kitPolicy.confirmIncidentsEffective : EFFECTIVE;
60
+ let d = fmGet(doc, '日期') || fmGet(doc, '发现');
61
+ if (!d) d = /^\d{4}-\d{2}-\d{2}$/.test(base.slice(0, 10)) ? base.slice(0, 10) : '';
62
+ const dateManaged = /^\d{4}-\d{2}-\d{2}$/.test(d) && d >= eff;
63
+ if (!docEntries.length && !dateManaged) continue; // 存量豁免
64
+ const fp = fmGet(doc, '确认指纹');
65
+ const ok = !!fp && docEntries.some((e) => e.stage === st
66
+ && typeof e.fingerprint === 'string' && e.fingerprint.startsWith(fp));
67
+ if (!ok) {
68
+ blockers.push(`- [确认未对账] ${base} 状态 ${st} 无用户确认记录——AI 不得代确认,用户在终端跑 node .agents/scripts/confirm-doc.mjs ${rel} 后重试`);
69
+ }
70
+ // 内容绑定(audit-gate-hardening;生效锚 gate-hardening-p2-batch 自文档自报日期
71
+ // 改为台账 done 行 ts):done 文档当前内容须与台账 done 行确认时的内容一致——按 prev 复原跳转前文本
72
+ // 重算比对,防「确认后篡改」(改验收标准/正文均触发)。复原口径 = confirm-doc computeFingerprint 的
73
+ // 逆推:CRLF 归一 → frontmatter 首个「状态:」行保分隔符换值为台账 prev(双空格等非规范分隔符不误伤,
74
+ // 与前向按原行字面计算对称)→ 剔「确认指纹:」行。两条降级路径:台账行缺 prev(schema 演进前存量,
75
+ // 无以复原)→ warning 不拦;entry.ts 早于 2026-09-28(UTC 字符串比较——该次确认在旧关单顺序时代完成)→
76
+ // 豁免绑定(配对判定已过,3 份失配存量即此列)。关单编辑顺序新约定不变:confirm-doc 是最后一次写入,
77
+ // 此后修订走 superseded 或新 intent。
78
+ if (ok && ['done', 'closed', 'superseded', 'cancelled'].includes(st)) {
79
+ const doneEntries = ledger.filter((e) => e && e.doc === rel && e.stage === st && typeof e.fingerprint === 'string');
80
+ const entry = doneEntries[doneEntries.length - 1]; // append-only 台账,末次生效(重确认场景)
81
+ if (!entry || !entry.prev) {
82
+ warnings.push(`- [WARN 绑定降级] ${base} 台账 stage=${st} 行缺 prev 字段(schema 演进前行),内容绑定跳过——仅配对判定`);
83
+ } else if (!(typeof entry.ts === 'string' && entry.ts >= kitPolicy.bindingTs)) {
84
+ // 该 done 确认发生在生效锚前(旧关单顺序时代)——豁免内容绑定,配对判定照常
85
+ } else if (bindingSha256(linesOf(doc) || [], entry.prev) !== entry.fingerprint) {
86
+ blockers.push(`- [确认内容漂移] ${base} ${st} 后内容与确认台账不符——已关单文档不得直接改(关单编辑先于关单确认);确需修订走 superseded 或新 intent 引用`);
87
+ }
88
+ }
89
+ // 承诺面绑定(approved-content-binding 2026-10-27):approved 档的承诺绑定。整篇逐字比对会误伤
90
+ // 关单期合法动作(勾验收 + 证据回填、确认结果/确认时间回填、复核行改锚),故 approved 档改绑
91
+ // 「承诺面」(判据文本 / 红线 / 目标 / 改动方案 / 约束与风险):承诺在用户点头后被改写而未重新
92
+ // 点头 → hard-block(用户点头的不是现在这一份)。判据单源 = stage-gates.commitmentFingerprint,
93
+ // 与 confirm-doc 的「承诺面绑定门」(关单时刻)同口径。存量 approved 行无 commit 字段(本次
94
+ // 上线前确认)→ 静默跳过、不回溯(沿本段「batch 字段缺失静默跳过」同款处置)。
95
+ if (ok && st === 'approved') {
96
+ const apprWithCommit = ledger.filter((e) => e && e.doc === rel && e.stage === 'approved'
97
+ && typeof e.commit === 'string' && typeof e.fingerprint === 'string');
98
+ const byFp = fp ? apprWithCommit.filter((e) => e.fingerprint.startsWith(fp)) : [];
99
+ const pool = byFp.length ? byFp : apprWithCommit;
100
+ const lastAppr = pool[pool.length - 1];
101
+ if (lastAppr) {
102
+ const nowCommit = commitmentFingerprint(linesOf(doc) || []);
103
+ if (nowCommit !== lastAppr.commit) {
104
+ blockers.push(`- [承诺面漂移] ${base} approved 后承诺面被改写(${lastAppr.commit} → ${nowCommit})——用户点头的不是现在这一份;请用户重新点头后跑 node .agents/scripts/confirm-doc.mjs ${rel} --reconfirm --delegated "<原话>" 重录承诺面指纹(仅勾验收/补证据/复核行改动不应触发本门——若触发请登记 papercut)`);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ // 并录批次审计(batch-ledger-audit 改判据;原 confirm-gate-one-per-call 引入):
111
+ // **读调用事实,不猜时间戳模式**。判据 = 台账行按 `batch` 分组,组内 `of > 1` → warning「确认并录」。
112
+ // batch/seq/of 由 confirm-doc 在**写入时**记录(那才是「本次调用落了几份」确定已知的时刻);
113
+ // 旧判据「同 quote + 相邻 ts 差 < 2s」是拿两个间接信号反推该事实,已实证四类失效并**整段退役**:
114
+ // ① 假阳性:合规逐件调用复用同句(用户两次都说「可以」)→ 必然误报;
115
+ // ② 假阴性:并录时给每份换不同 quote → 零告警(判据的实际效果是引导伪装者改 quote);
116
+ // ③ 噪声不可消退:不按日期门豁免,退役前本仓 22 条 advisory 中 14 条为该告警,且文案自认「不可区分」;
117
+ // ④ 字段职责冲突:`quote` 同时当「对质凭据」与「并录指纹」——现归还单一职责,只记用户原话。
118
+ // 无 `batch` 字段的历史行(schema 演进前,本仓全部 67 行均无该字段)→ **静默跳过**,不降级出账、不回溯:
119
+ // 按 audit-gate-hardening P3 教训(「扫了只产生不可消除的 advisory 噪声,真漏点被淹没」),无判定依据
120
+ // 的行不该产出告警。VALID_STAGES 复用外层声明(复核 P2-3 更正:此前本块内另有一份同名声明遮蔽外层)。
121
+ {
122
+ const byBatch = new Map(); // batch → 该批的台账行(仅计合法跳转 stage)
123
+ for (const e of ledger) {
124
+ if (!e || !VALID_STAGES.has(e.stage)) continue;
125
+ if (typeof e.batch !== 'string' || !e.batch) continue; // 历史行无 batch → 无判定依据,跳过
126
+ if (!byBatch.has(e.batch)) byBatch.set(e.batch, []);
127
+ byBatch.get(e.batch).push(e);
128
+ }
129
+ for (const [b, rows] of byBatch) {
130
+ // 判据取组内**任一行** of>1(复核 P2-3 更正:原取 rows[0].of 使结论依赖行序——同批首行 of=1、
131
+ // 次行 of=2 会漏报。confirm-doc 对同批所有行写同一个 of=docs.length,故正常批次组内一致;
132
+ // 改用 some 消除该顺序脆弱性,并对 craft 出来的不一致批次按「最大值」报,方向偏严不偏松)
133
+ if (!rows.some((r) => typeof r.of === 'number' && r.of > 1)) continue;
134
+ // of > 1 = 一次调用落多份态。delegated 形态下这正是「并录」(入口已拒多份,此处抓历史/绕行);
135
+ // TTY 形态天然逐份过目(用户亲手键入),of>1 不构成违规——故只对 delegated 行报。
136
+ if (!rows.some((r) => r.source === 'chat-delegated')) continue;
137
+ // 协作道批量豁免(hybrid-governance-risk-lanes):confirm-doc --batch 仅受理 L1
138
+ // (逐份读级别,L2/L3 逐份拒绝),台账行带 brief:true——全行带标记的批次是 sanctioned 泳道行为
139
+ // (异步审计兜底),不出「确认并录」;缺标记(旧版脚本/手造台账)照旧告警,判据偏严不偏松。
140
+ if (rows.every((r) => r.brief === true)) continue;
141
+ // 判据的主体是「多份**不同**文档并作一次」:同一文档重复落账(重确认链、手改台账把
142
+ // 多行写成同一 doc)不塌逐件确认门,按行数报会把它误报成并录。取 distinct doc 判定,
143
+ // 真并录(≥2 份不同文档)一条不漏。
144
+ const distinctDocs = [...new Set(rows.map((r) => String(r.doc)))];
145
+ if (distinctDocs.length < 2) continue;
146
+ const of = Math.max(...rows.map((r) => (typeof r.of === 'number' ? r.of : 0)));
147
+ const docs = distinctDocs.map((d) => d.replace(/^workflow\//, '')).join('、');
148
+ warnings.push(`- [WARN 确认并录] 单次调用落账 ${distinctDocs.length} 份不同文档(batch ${b},of=${of}):${docs}——同一次 --delegated 调用放行多份,塌掉「逐件确认」门(stages.md Build 章);口径见 workflow/papercuts.d/2026-09.md 2026-09-22「并作一次」条`);
149
+ }
150
+ }
151
+ }
152
+ }
@@ -0,0 +1,182 @@
1
+ // check-loop-sections/s23-convergence-audit.mjs — 23. 判据级收敛对账(2026-10-11;锚 convergenceSince / convergenceHardSince)
2
+ // 背景(convergence-audit,参照 GitHub spec-kit converge 机理「完成声明不是证据」):
3
+ // spec 的验证承诺此前只落在叙述节(检查 21 对节内引用做存在性扫描),没有逐判据 × 逐证据的机器对账。
4
+ // 本段把「验收判据」表(workflow/specs/_TEMPLATE.md 承重节)变成机器输入:L2/L3 done spec(锚后)逐行解析
5
+ // 判据 → 证据。状态列自报「覆盖」而证据无效 → 仍判未覆盖。
6
+ // 两档(convergence-hard):
7
+ // advisory(有 convergenceSince、无 hard 键,或日期 < convergenceHardSince):证据 = 存在的路径,或命令白名单声明。WARN。
8
+ // hard(日期 ≥ convergenceHardSince):路径仍只认存在,不读正文、不判与判据是否相关(判断题留给新会话复核);
9
+ // 命令必须是 verify.mjs 全量门实际跑的那几个,且 workflow/verify-evidence.md 有不早于本 spec 日期的全绿行。
10
+ // 答不了(空、路径不存在、命令不在全量门、没有对应全绿行)= 未覆盖,HARD-BLOCK。人工走查且证据为空仍合法。
11
+ // 无「验收判据」节或表无数据行 → 两档都是 WARN「收敛无判据」。
12
+ // 存量豁免:日期 < convergenceSince → 跳过。缺键(v1–v9)→ 整段跳过。缺 hard 键(v1–v10)→ 不升 hard。
13
+ import {
14
+ fs, os, path, spawnSync, createHash, createRequire, fileURLToPath,
15
+ loadEnums, auditEnabled, loadKitPolicy, hasFreshVerifyLine, laneOfDoc, MARK_RE,
16
+ SCRIPT_DIR, GIT, REV_ARG, REV, ROOT, MAIN_ROOT, ENUMS, inSet, stOkDoc,
17
+ spawnGit, gitOut, linesOf, fmGet, WF, DOC_DIRS, blockers, warnings, kitPolicy, isTracked, docFiles,
18
+ addedDateOf, warnEvidenceExempt, VERIFY_GREEN_RE, verifyEvidenceTruth,
19
+ versionGreater, fmStatus, bindingSha256, readdirOrNull, isDirectoryOrNull,
20
+ } from '../check-loop-kit.mjs';
21
+
22
+ // 与 s21 命令面同源的声明白名单(advisory 档:文本命中即认)。hard 档不再凭命中放行。
23
+ // 边界修复(2026-11-03):词首加 (?<![\w.@\-\\/]) 负向断言——证据路径 `.agents/skills/verify-ui/features/*.md`
24
+ // 中 `verify-ui` 为路径片段,无断言时被误判为命令引用 → hard 档走全量门白名单(verify-ui 不在)恒判
25
+ // 证据无效(po-contract-required-tax-default 推送实证:4 条指向真实存在 UI 报告的人工判据全灭)。
26
+ const CMD_RE = /(?<![\w.@\-\\/])(?:npm\s+(run\s+)?test|dotnet\s+test|run-tests|regression-smoke|verify\.mjs|check-scope|verify-ui|ui-verifier|vue-tsc|dotnet\s+build|npm\s+run\s+build)/;
27
+ // 引用切分:长选项在前,避免 npm run build 被更短的模式截断。verify-ui 先于不会与 verify.mjs 重叠的独立词。
28
+ const CITE_RE = /(?<![\w.@\-\\/])(?:npm\s+run\s+build|npm\s+(?:run\s+)?test|dotnet\s+build|dotnet\s+test|verify\.mjs|verify-ui|ui-verifier|regression-smoke|run-tests|check-scope|vue-tsc)/g;
29
+ // verify.mjs 全绿行(suite=all-gates)实际覆盖的命令。不在此集的白名单命令没有对应绿记录。
30
+ // vue-tsc(2026-10-21 verify-diet ④):本地关单前端门 = npm run type-check(vue-tsc -b),
31
+ // vite bundle 分离到 deploy/CI(TF_BUILD 下 frontend-build 门仍 npm run build)——两形态都是门实跑命令。
32
+ // 方向注意(复核 P2):npm run build 的绿记录只在 **CI 行**(runId 有值);本地全绿行实跑 vue-tsc。
33
+ // 按行环境严格对账挂 papercuts 2026-10-21(摘要行 runId 列已可辨 CI/本地)。
34
+ // npm 面命令已随引擎测试面退役(2026-10-28,根 package.json scripts 已删)——白名单保留系**存量 spec
35
+ // 兼容**:2026-10-18 前的 done spec 证据引 `npm run test:unit` 等(CITE_RE 前缀提取为 npm run test),
36
+ // 移除会使存量档在 FULL 对账下判「收敛未覆盖」(2026-10-28 实证 po-concurrent-overorder-lost-update)。
37
+ // 新 spec 勿再引用 npm 面命令;存量迁移(改证/解锁序)待 owner 裁决后另行清理。
38
+ const GATE_CMD = new Set(['npm run build', 'npm test', 'npm run test', 'dotnet build', 'dotnet test', 'verify.mjs', 'vue-tsc']);
39
+ // 扩展名交替**最长优先**(2026-10-20 修复:原 `mjs|js|ts|tsx|...|json` 中 js/ts 是 mjs/json/tsx 的
40
+ // 前缀且交替无尾锚,`.json`/`.tsx` 路径被截断成 `.js`/`.ts` → existsSync 恒 false → 证据永不可验,
41
+ // po-close-replace-mark-completed 关单实证)
42
+ const PATH_EXT = 'tsx|mjs|json|html|sql|vue|cs|md|ts|js';
43
+ // 路径体 = 原 ASCII 路径字符 + 字母(中文目录),单字符类,避免 (A|B)+ 在长说明上回溯。
44
+ // 标点(如路径后的「(说明)」)不在类内,仍截断。
45
+ const PATH_RE = new RegExp(`(?:^|[\\s\`'"((])([\\w.@\\-\\\\/\\p{L}]+\\.(?:${PATH_EXT}))`, 'gu');
46
+ const SEC_RE = /^##\s+.*验收判据/;
47
+ // 与 gen-verify-evidence.mjs 数据行同形态:短 SHA | ISO 时间 | …。只取日期,不复述门数。
48
+ const EVIDENCE_ROW_RE = /^\|\s*`[0-9a-f]{7,40}`\s*\|\s*([^|]+?)\s*\|/;
49
+
50
+ // 关单树路径存在(2026-10-29 done-tree-evidence,papercut 待登记——handoff 2026-10-29 P0):
51
+ // 「关单后业务重构删证据」结构性失灵的堵口。原判据 `fs.existsSync(今天)` 单认当下——spec done 后
52
+ // 测试文件被合法重构删除(实证 fafbc30f 删 OutboundPickTests,4 条 L3 done spec 全体 HARD-BLOCK),
53
+ // 历史承诺被事后树态否决。补第二认:**该 spec 首次进入 done 态的提交树中路径存在**(历史树对账,
54
+ // 与 ledger-invariant DAG 感知同哲学:关单时的承诺按关单时的树兑现判)。双认 = 今天存在 ∪ done 树存在。
55
+ // done 树解析:spec 文件历史最早一个「正文含行首 `状态: done`」的提交(逐提交 cat-file 正文,
56
+ // done spec 数少 + memo 缓存;非 git / 查不到 → null 不放行第二认,行为与旧判据等价不误放)。
57
+ const doneTreeMemo = new Map(); // specAbsPath → sha|null
58
+ function doneTreeShaOf(spec) {
59
+ if (doneTreeMemo.has(spec)) return doneTreeMemo.get(spec);
60
+ let sha = null;
61
+ try {
62
+ const rel = path.relative(ROOT, spec).split(path.sep).join('/');
63
+ const log = gitOut(['log', '--format=%H', '--follow', '--', rel]); // 旧→新
64
+ if (log) {
65
+ for (const line of log.split('\n').reverse()) {
66
+ const c = line.trim();
67
+ if (!c) continue;
68
+ const body = gitOut(['show', `${c}:${rel}`]);
69
+ if (body !== null && /^状态:\s*done\s*$/m.test(body.split(/\r?\n/).slice(0, 12).join('\n'))) { sha = c; break; }
70
+ }
71
+ }
72
+ } catch { /* 非 git / 异常 → null */ }
73
+ doneTreeMemo.set(spec, sha);
74
+ return sha;
75
+ }
76
+ const doneTreePathMemo = new Map(); // `${sha}\n${path}` → bool
77
+ function doneTreeHasPath(spec, relPath) {
78
+ const sha = doneTreeShaOf(spec);
79
+ if (!sha) return false;
80
+ const key = `${sha}\n${relPath}`;
81
+ if (doneTreePathMemo.has(key)) return doneTreePathMemo.get(key);
82
+ let ok = false;
83
+ try { ok = spawnGit(['cat-file', '-e', `${sha}:${relPath}`]).status === 0; } catch { ok = false; }
84
+ doneTreePathMemo.set(key, ok);
85
+ return ok;
86
+ }
87
+
88
+ function greenEvidenceDates() {
89
+ const dates = [];
90
+ let text = '';
91
+ try { text = fs.readFileSync(path.join(ROOT, WF, 'verify-evidence.md'), 'utf8'); } catch { return dates; }
92
+ for (const raw of text.split(/\r?\n/)) {
93
+ const m = raw.trim().match(EVIDENCE_ROW_RE);
94
+ if (!m) continue;
95
+ const day = m[1].trim().slice(0, 10);
96
+ if (/^\d{4}-\d{2}-\d{2}$/.test(day)) dates.push(day);
97
+ }
98
+ return dates;
99
+ }
100
+
101
+ // 命令格:每一处引用都须落在全量门里,且有不早于 spec 日期的全绿行。解析不出引用 → 不放行。
102
+ // 两侧日期同须 UTC 口径(台账渲染 UTC ts;spec「日期」fill-spec 默认 UTC,手写见 _TEMPLATE.md 验收判据注):
103
+ // 本地时区手写日期会在 UTC+8 0–8 点窗与全绿行错位一天——fail-closed,不误放。
104
+ function commandCovered(ev, specDate, greenDates) {
105
+ const cites = ev.match(CITE_RE) || [];
106
+ if (!cites.length) return false;
107
+ const fresh = greenDates.some((g) => g >= specDate);
108
+ return cites.every((c) => GATE_CMD.has(c) && fresh);
109
+ }
110
+
111
+ export function run() {
112
+ // --- 23. 判据级收敛对账(2026-10-11;锚 convergenceSince / convergenceHardSince)---
113
+ {
114
+ const anchor = kitPolicy.convergenceSince;
115
+ const hardAnchor = kitPolicy.convergenceHardSince;
116
+ if (anchor) {
117
+ const greenDates = greenEvidenceDates();
118
+ const isPlaceholder = (s) => !s || /^<.*>$/.test(s);
119
+ for (const spec of docFiles('specs')) {
120
+ const st = fmGet(spec, '状态');
121
+ const lvl = fmGet(spec, '级别');
122
+ if (st !== 'done' || !['L2', 'L3'].includes(lvl)) continue;
123
+ // 生效日锚:frontmatter「日期」优先(fill-spec 必写),缺则 git 首加日 / 文件名前缀(同检查 12 退化序)
124
+ let d = fmGet(spec, '日期') || addedDateOf(spec);
125
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(d)) d = /^\d{4}-\d{2}-\d{2}/.test(path.basename(spec)) ? path.basename(spec).slice(0, 10) : '';
126
+ if (!d || d < anchor) continue; // 锚前存量不回填
127
+ const hard = !!(hardAnchor && d >= hardAnchor);
128
+ const lines = linesOf(spec) || [];
129
+ const secLines = [];
130
+ let inSec = false;
131
+ for (const l of lines) {
132
+ if (SEC_RE.test(l)) { inSec = true; continue; }
133
+ if (inSec && /^##\s+/.test(l)) { inSec = false; continue; }
134
+ if (inSec) secLines.push(l);
135
+ }
136
+ // 解析表数据行(表头才是数据边界——沿用 agg-delegations splitTables 口径;分隔行/表头行/占位行跳过)
137
+ const rows = secLines
138
+ .filter((l) => /^\|.*\|\s*$/.test(l))
139
+ .filter((l) => !/^\|[\s:|-]+\|\s*$/.test(l))
140
+ .map((l) => l.split('|').slice(1, -1).map((c) => c.trim().replace(/^`|`$/g, '')))
141
+ .filter((cells) => cells.length >= 3)
142
+ .filter((cells) => !(/^判据/.test(cells[0]) && /^证据/.test(cells[1]))) // 表头行(「判据」「证据」带括号后缀的形态)
143
+ .filter((cells) => !isPlaceholder(cells[0])); // 模板占位行
144
+ const base = path.basename(spec);
145
+ if (!rows.length) {
146
+ warnings.push(`- [WARN 收敛无判据] ${base} 无「验收判据」表或表为空——L2/L3 done spec 须逐条登记可验判据(检查 23,模板 workflow/specs/_TEMPLATE.md)`);
147
+ continue;
148
+ }
149
+ const missed = [];
150
+ for (const [crit, ev, stat] of rows.map((c) => [c[0], c[1], (c[2] || '').trim()])) {
151
+ if (stat === '人工' && isPlaceholder(ev)) continue; // 人工走查判据:空证据合法
152
+ let ok = false;
153
+ if (!isPlaceholder(ev)) {
154
+ if (hard && CMD_RE.test(ev)) ok = commandCovered(ev, d, greenDates);
155
+ else if (CMD_RE.test(ev)) ok = true; // advisory:命令白名单认声明
156
+ else {
157
+ const cands = [];
158
+ for (const m of ev.matchAll(PATH_RE)) cands.push(m[1].replace(/\\/g, '/'));
159
+ // 双认(2026-10-29 done-tree-evidence):今天存在 ∪ done 提交树存在——关单后删证据不再否决历史承诺
160
+ // 三认(2026-11-10 local-evidence-fallback):`workflow/evidence/` 被 .gitignore 排除、按设计只存本机;
161
+ // --rev/--range 把 ROOT 换成临时 worktree,证据文件天然不在那棵树上(2026-11-10 推送实证:
162
+ // 仅引证据文件的判据在 ranged 模式恒判未覆盖)。与 readVerifyLedgerText 同口径回退主工作区;
163
+ // 树上已有文件仍以树为准,非本机证据目录不回退(不让任意缺失路径蒙混过关)。
164
+ const LOCAL_EVIDENCE_PREFIX = 'workflow/evidence/';
165
+ const localEvidenceInMain = (p) => !!MAIN_ROOT
166
+ && path.resolve(MAIN_ROOT) !== path.resolve(ROOT)
167
+ && p.startsWith(LOCAL_EVIDENCE_PREFIX)
168
+ && fs.existsSync(path.join(MAIN_ROOT, p));
169
+ ok = cands.some((p) => fs.existsSync(path.join(ROOT, p)) || doneTreeHasPath(spec, p) || localEvidenceInMain(p));
170
+ }
171
+ }
172
+ if (!ok) missed.push(`${crit}→${ev || '(空)'}`);
173
+ }
174
+ if (missed.length) {
175
+ const detail = `${base} ${rows.length} 条判据中 ${missed.length} 条证据无效(${missed.join('; ')})`;
176
+ if (hard) blockers.push(`- [收敛未覆盖] ${detail}——状态列自报不作数;命令须是全量门(dotnet test / dotnet build / npm run build / verify.mjs;npm 面命令仅存量 spec 兼容)且 workflow/verify-evidence.md 有不早于本 spec 日期的全绿行;路径只认存在(检查 23,含 .vue 与中文目录)。若本 spec 已标 done:先标后补会与本门互为前提(verify 门序含 check-loop)——解锁序:改正文 → 状态改回 approved(勿改 draft,L3 必须 approved/done)→ confirm-doc 重录指纹 → 再标 done。中间态不要提交`);
177
+ else warnings.push(`- [WARN 收敛未覆盖] ${detail}——状态列自报不作数,证据须存在或为验证命令(检查 23)`);
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }