@accelerator-mzq/forge 1.4.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 (663) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE-THIRD-PARTY.md +50 -0
  3. package/README.md +159 -0
  4. package/dist/cli/commands/ack.d.ts +7 -0
  5. package/dist/cli/commands/ack.d.ts.map +1 -0
  6. package/dist/cli/commands/ack.js +223 -0
  7. package/dist/cli/commands/ack.js.map +1 -0
  8. package/dist/cli/commands/archive.d.ts +44 -0
  9. package/dist/cli/commands/archive.d.ts.map +1 -0
  10. package/dist/cli/commands/archive.js +689 -0
  11. package/dist/cli/commands/archive.js.map +1 -0
  12. package/dist/cli/commands/backlog.d.ts +3 -0
  13. package/dist/cli/commands/backlog.d.ts.map +1 -0
  14. package/dist/cli/commands/backlog.js +55 -0
  15. package/dist/cli/commands/backlog.js.map +1 -0
  16. package/dist/cli/commands/config.d.ts +3 -0
  17. package/dist/cli/commands/config.d.ts.map +1 -0
  18. package/dist/cli/commands/config.js +107 -0
  19. package/dist/cli/commands/config.js.map +1 -0
  20. package/dist/cli/commands/evidence.d.ts +7 -0
  21. package/dist/cli/commands/evidence.d.ts.map +1 -0
  22. package/dist/cli/commands/evidence.js +662 -0
  23. package/dist/cli/commands/evidence.js.map +1 -0
  24. package/dist/cli/commands/finding.d.ts +3 -0
  25. package/dist/cli/commands/finding.d.ts.map +1 -0
  26. package/dist/cli/commands/finding.js +93 -0
  27. package/dist/cli/commands/finding.js.map +1 -0
  28. package/dist/cli/commands/init.d.ts +3 -0
  29. package/dist/cli/commands/init.d.ts.map +1 -0
  30. package/dist/cli/commands/init.js +126 -0
  31. package/dist/cli/commands/init.js.map +1 -0
  32. package/dist/cli/commands/legacy-bridge.d.ts +11 -0
  33. package/dist/cli/commands/legacy-bridge.d.ts.map +1 -0
  34. package/dist/cli/commands/legacy-bridge.js +586 -0
  35. package/dist/cli/commands/legacy-bridge.js.map +1 -0
  36. package/dist/cli/commands/migrate.d.ts +3 -0
  37. package/dist/cli/commands/migrate.d.ts.map +1 -0
  38. package/dist/cli/commands/migrate.js +34 -0
  39. package/dist/cli/commands/migrate.js.map +1 -0
  40. package/dist/cli/commands/monitor.d.ts +3 -0
  41. package/dist/cli/commands/monitor.d.ts.map +1 -0
  42. package/dist/cli/commands/monitor.js +113 -0
  43. package/dist/cli/commands/monitor.js.map +1 -0
  44. package/dist/cli/commands/preflight.d.ts +7 -0
  45. package/dist/cli/commands/preflight.d.ts.map +1 -0
  46. package/dist/cli/commands/preflight.js +63 -0
  47. package/dist/cli/commands/preflight.js.map +1 -0
  48. package/dist/cli/commands/scope.d.ts +3 -0
  49. package/dist/cli/commands/scope.d.ts.map +1 -0
  50. package/dist/cli/commands/scope.js +32 -0
  51. package/dist/cli/commands/scope.js.map +1 -0
  52. package/dist/cli/commands/stage-extensions.d.ts +45 -0
  53. package/dist/cli/commands/stage-extensions.d.ts.map +1 -0
  54. package/dist/cli/commands/stage-extensions.js +590 -0
  55. package/dist/cli/commands/stage-extensions.js.map +1 -0
  56. package/dist/cli/commands/update.d.ts +3 -0
  57. package/dist/cli/commands/update.d.ts.map +1 -0
  58. package/dist/cli/commands/update.js +98 -0
  59. package/dist/cli/commands/update.js.map +1 -0
  60. package/dist/cli/commands/upgrade.d.ts +3 -0
  61. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  62. package/dist/cli/commands/upgrade.js +277 -0
  63. package/dist/cli/commands/upgrade.js.map +1 -0
  64. package/dist/cli/commands/validate.d.ts +3 -0
  65. package/dist/cli/commands/validate.d.ts.map +1 -0
  66. package/dist/cli/commands/validate.js +66 -0
  67. package/dist/cli/commands/validate.js.map +1 -0
  68. package/dist/cli/index.d.ts +3 -0
  69. package/dist/cli/index.d.ts.map +1 -0
  70. package/dist/cli/index.js +69 -0
  71. package/dist/cli/index.js.map +1 -0
  72. package/dist/core/ack-log.d.ts +107 -0
  73. package/dist/core/ack-log.d.ts.map +1 -0
  74. package/dist/core/ack-log.js +197 -0
  75. package/dist/core/ack-log.js.map +1 -0
  76. package/dist/core/archive/ack-log-consistency.d.ts +15 -0
  77. package/dist/core/archive/ack-log-consistency.d.ts.map +1 -0
  78. package/dist/core/archive/ack-log-consistency.js +164 -0
  79. package/dist/core/archive/ack-log-consistency.js.map +1 -0
  80. package/dist/core/archive/fence.d.ts +66 -0
  81. package/dist/core/archive/fence.d.ts.map +1 -0
  82. package/dist/core/archive/fence.js +218 -0
  83. package/dist/core/archive/fence.js.map +1 -0
  84. package/dist/core/archive/index.d.ts +4 -0
  85. package/dist/core/archive/index.d.ts.map +1 -0
  86. package/dist/core/archive/index.js +6 -0
  87. package/dist/core/archive/index.js.map +1 -0
  88. package/dist/core/archive/legacy-exemption.d.ts +14 -0
  89. package/dist/core/archive/legacy-exemption.d.ts.map +1 -0
  90. package/dist/core/archive/legacy-exemption.js +82 -0
  91. package/dist/core/archive/legacy-exemption.js.map +1 -0
  92. package/dist/core/archive/lock.d.ts +46 -0
  93. package/dist/core/archive/lock.d.ts.map +1 -0
  94. package/dist/core/archive/lock.js +98 -0
  95. package/dist/core/archive/lock.js.map +1 -0
  96. package/dist/core/archive/pause-decisions-fence.d.ts +13 -0
  97. package/dist/core/archive/pause-decisions-fence.d.ts.map +1 -0
  98. package/dist/core/archive/pause-decisions-fence.js +384 -0
  99. package/dist/core/archive/pause-decisions-fence.js.map +1 -0
  100. package/dist/core/archive/process-evidence-fence.d.ts +110 -0
  101. package/dist/core/archive/process-evidence-fence.d.ts.map +1 -0
  102. package/dist/core/archive/process-evidence-fence.js +449 -0
  103. package/dist/core/archive/process-evidence-fence.js.map +1 -0
  104. package/dist/core/archive/process-evidence-rerun.d.ts +9 -0
  105. package/dist/core/archive/process-evidence-rerun.d.ts.map +1 -0
  106. package/dist/core/archive/process-evidence-rerun.js +238 -0
  107. package/dist/core/archive/process-evidence-rerun.js.map +1 -0
  108. package/dist/core/archive/recover-prompt.d.ts +10 -0
  109. package/dist/core/archive/recover-prompt.d.ts.map +1 -0
  110. package/dist/core/archive/recover-prompt.js +29 -0
  111. package/dist/core/archive/recover-prompt.js.map +1 -0
  112. package/dist/core/archive/recover.d.ts +83 -0
  113. package/dist/core/archive/recover.d.ts.map +1 -0
  114. package/dist/core/archive/recover.js +219 -0
  115. package/dist/core/archive/recover.js.map +1 -0
  116. package/dist/core/archive/resume-summary.d.ts +22 -0
  117. package/dist/core/archive/resume-summary.d.ts.map +1 -0
  118. package/dist/core/archive/resume-summary.js +82 -0
  119. package/dist/core/archive/resume-summary.js.map +1 -0
  120. package/dist/core/archive/summary-builder.d.ts +28 -0
  121. package/dist/core/archive/summary-builder.d.ts.map +1 -0
  122. package/dist/core/archive/summary-builder.js +287 -0
  123. package/dist/core/archive/summary-builder.js.map +1 -0
  124. package/dist/core/archive/summary-render.d.ts +8 -0
  125. package/dist/core/archive/summary-render.d.ts.map +1 -0
  126. package/dist/core/archive/summary-render.js +64 -0
  127. package/dist/core/archive/summary-render.js.map +1 -0
  128. package/dist/core/archive/three-level-fence.d.ts +10 -0
  129. package/dist/core/archive/three-level-fence.d.ts.map +1 -0
  130. package/dist/core/archive/three-level-fence.js +93 -0
  131. package/dist/core/archive/three-level-fence.js.map +1 -0
  132. package/dist/core/archive/transaction.d.ts +41 -0
  133. package/dist/core/archive/transaction.d.ts.map +1 -0
  134. package/dist/core/archive/transaction.js +184 -0
  135. package/dist/core/archive/transaction.js.map +1 -0
  136. package/dist/core/archive/verify-findings-fence.d.ts +11 -0
  137. package/dist/core/archive/verify-findings-fence.d.ts.map +1 -0
  138. package/dist/core/archive/verify-findings-fence.js +80 -0
  139. package/dist/core/archive/verify-findings-fence.js.map +1 -0
  140. package/dist/core/archive/version-retrograde-fence.d.ts +10 -0
  141. package/dist/core/archive/version-retrograde-fence.d.ts.map +1 -0
  142. package/dist/core/archive/version-retrograde-fence.js +103 -0
  143. package/dist/core/archive/version-retrograde-fence.js.map +1 -0
  144. package/dist/core/artifact-graph/builder.d.ts +16 -0
  145. package/dist/core/artifact-graph/builder.d.ts.map +1 -0
  146. package/dist/core/artifact-graph/builder.js +32 -0
  147. package/dist/core/artifact-graph/builder.js.map +1 -0
  148. package/dist/core/artifact-graph/index.d.ts +3 -0
  149. package/dist/core/artifact-graph/index.d.ts.map +1 -0
  150. package/dist/core/artifact-graph/index.js +4 -0
  151. package/dist/core/artifact-graph/index.js.map +1 -0
  152. package/dist/core/artifact-graph/types.d.ts +14 -0
  153. package/dist/core/artifact-graph/types.d.ts.map +1 -0
  154. package/dist/core/artifact-graph/types.js +2 -0
  155. package/dist/core/artifact-graph/types.js.map +1 -0
  156. package/dist/core/backlog/assets/backlog-readme.md +11 -0
  157. package/dist/core/backlog/index.d.ts +20 -0
  158. package/dist/core/backlog/index.d.ts.map +1 -0
  159. package/dist/core/backlog/index.js +60 -0
  160. package/dist/core/backlog/index.js.map +1 -0
  161. package/dist/core/backlog/render.d.ts +51 -0
  162. package/dist/core/backlog/render.d.ts.map +1 -0
  163. package/dist/core/backlog/render.js +196 -0
  164. package/dist/core/backlog/render.js.map +1 -0
  165. package/dist/core/bootstrap/index.d.ts +2 -0
  166. package/dist/core/bootstrap/index.d.ts.map +1 -0
  167. package/dist/core/bootstrap/index.js +5 -0
  168. package/dist/core/bootstrap/index.js.map +1 -0
  169. package/dist/core/canonical-json.d.ts +11 -0
  170. package/dist/core/canonical-json.d.ts.map +1 -0
  171. package/dist/core/canonical-json.js +43 -0
  172. package/dist/core/canonical-json.js.map +1 -0
  173. package/dist/core/git/utils.d.ts +27 -0
  174. package/dist/core/git/utils.d.ts.map +1 -0
  175. package/dist/core/git/utils.js +53 -0
  176. package/dist/core/git/utils.js.map +1 -0
  177. package/dist/core/harness-adapters/claude.d.ts +13 -0
  178. package/dist/core/harness-adapters/claude.d.ts.map +1 -0
  179. package/dist/core/harness-adapters/claude.js +53 -0
  180. package/dist/core/harness-adapters/claude.js.map +1 -0
  181. package/dist/core/harness-adapters/codex.d.ts +14 -0
  182. package/dist/core/harness-adapters/codex.d.ts.map +1 -0
  183. package/dist/core/harness-adapters/codex.js +60 -0
  184. package/dist/core/harness-adapters/codex.js.map +1 -0
  185. package/dist/core/harness-adapters/detector.d.ts +15 -0
  186. package/dist/core/harness-adapters/detector.d.ts.map +1 -0
  187. package/dist/core/harness-adapters/detector.js +45 -0
  188. package/dist/core/harness-adapters/detector.js.map +1 -0
  189. package/dist/core/harness-adapters/hash-compare.d.ts +21 -0
  190. package/dist/core/harness-adapters/hash-compare.d.ts.map +1 -0
  191. package/dist/core/harness-adapters/hash-compare.js +49 -0
  192. package/dist/core/harness-adapters/hash-compare.js.map +1 -0
  193. package/dist/core/harness-adapters/index.d.ts +8 -0
  194. package/dist/core/harness-adapters/index.d.ts.map +1 -0
  195. package/dist/core/harness-adapters/index.js +8 -0
  196. package/dist/core/harness-adapters/index.js.map +1 -0
  197. package/dist/core/harness-adapters/interface.d.ts +52 -0
  198. package/dist/core/harness-adapters/interface.d.ts.map +1 -0
  199. package/dist/core/harness-adapters/interface.js +3 -0
  200. package/dist/core/harness-adapters/interface.js.map +1 -0
  201. package/dist/core/harness-adapters/legacy-detector.d.ts +14 -0
  202. package/dist/core/harness-adapters/legacy-detector.d.ts.map +1 -0
  203. package/dist/core/harness-adapters/legacy-detector.js +83 -0
  204. package/dist/core/harness-adapters/legacy-detector.js.map +1 -0
  205. package/dist/core/harness-adapters/transaction.d.ts +12 -0
  206. package/dist/core/harness-adapters/transaction.d.ts.map +1 -0
  207. package/dist/core/harness-adapters/transaction.js +113 -0
  208. package/dist/core/harness-adapters/transaction.js.map +1 -0
  209. package/dist/core/harness-adapters/types.d.ts +45 -0
  210. package/dist/core/harness-adapters/types.d.ts.map +1 -0
  211. package/dist/core/harness-adapters/types.js +3 -0
  212. package/dist/core/harness-adapters/types.js.map +1 -0
  213. package/dist/core/hash/content.d.ts +10 -0
  214. package/dist/core/hash/content.d.ts.map +1 -0
  215. package/dist/core/hash/content.js +131 -0
  216. package/dist/core/hash/content.js.map +1 -0
  217. package/dist/core/hash/diff.d.ts +26 -0
  218. package/dist/core/hash/diff.d.ts.map +1 -0
  219. package/dist/core/hash/diff.js +40 -0
  220. package/dist/core/hash/diff.js.map +1 -0
  221. package/dist/core/hash/index.d.ts +6 -0
  222. package/dist/core/hash/index.d.ts.map +1 -0
  223. package/dist/core/hash/index.js +7 -0
  224. package/dist/core/hash/index.js.map +1 -0
  225. package/dist/core/hash/log.d.ts +7 -0
  226. package/dist/core/hash/log.d.ts.map +1 -0
  227. package/dist/core/hash/log.js +14 -0
  228. package/dist/core/hash/log.js.map +1 -0
  229. package/dist/core/hash/tasks.d.ts +9 -0
  230. package/dist/core/hash/tasks.d.ts.map +1 -0
  231. package/dist/core/hash/tasks.js +20 -0
  232. package/dist/core/hash/tasks.js.map +1 -0
  233. package/dist/core/legacy-bridge/ack.d.ts +30 -0
  234. package/dist/core/legacy-bridge/ack.d.ts.map +1 -0
  235. package/dist/core/legacy-bridge/ack.js +133 -0
  236. package/dist/core/legacy-bridge/ack.js.map +1 -0
  237. package/dist/core/legacy-bridge/anchors.d.ts +15 -0
  238. package/dist/core/legacy-bridge/anchors.d.ts.map +1 -0
  239. package/dist/core/legacy-bridge/anchors.js +119 -0
  240. package/dist/core/legacy-bridge/anchors.js.map +1 -0
  241. package/dist/core/legacy-bridge/budget.d.ts +39 -0
  242. package/dist/core/legacy-bridge/budget.d.ts.map +1 -0
  243. package/dist/core/legacy-bridge/budget.js +83 -0
  244. package/dist/core/legacy-bridge/budget.js.map +1 -0
  245. package/dist/core/legacy-bridge/conflict.d.ts +44 -0
  246. package/dist/core/legacy-bridge/conflict.d.ts.map +1 -0
  247. package/dist/core/legacy-bridge/conflict.js +105 -0
  248. package/dist/core/legacy-bridge/conflict.js.map +1 -0
  249. package/dist/core/legacy-bridge/diff-report.d.ts +14 -0
  250. package/dist/core/legacy-bridge/diff-report.d.ts.map +1 -0
  251. package/dist/core/legacy-bridge/diff-report.js +105 -0
  252. package/dist/core/legacy-bridge/diff-report.js.map +1 -0
  253. package/dist/core/legacy-bridge/encoding.d.ts +42 -0
  254. package/dist/core/legacy-bridge/encoding.d.ts.map +1 -0
  255. package/dist/core/legacy-bridge/encoding.js +104 -0
  256. package/dist/core/legacy-bridge/encoding.js.map +1 -0
  257. package/dist/core/legacy-bridge/excel.d.ts +32 -0
  258. package/dist/core/legacy-bridge/excel.d.ts.map +1 -0
  259. package/dist/core/legacy-bridge/excel.js +124 -0
  260. package/dist/core/legacy-bridge/excel.js.map +1 -0
  261. package/dist/core/legacy-bridge/hash-anchor.d.ts +23 -0
  262. package/dist/core/legacy-bridge/hash-anchor.d.ts.map +1 -0
  263. package/dist/core/legacy-bridge/hash-anchor.js +55 -0
  264. package/dist/core/legacy-bridge/hash-anchor.js.map +1 -0
  265. package/dist/core/legacy-bridge/indexer.d.ts +28 -0
  266. package/dist/core/legacy-bridge/indexer.d.ts.map +1 -0
  267. package/dist/core/legacy-bridge/indexer.js +145 -0
  268. package/dist/core/legacy-bridge/indexer.js.map +1 -0
  269. package/dist/core/legacy-bridge/mapper.d.ts +40 -0
  270. package/dist/core/legacy-bridge/mapper.d.ts.map +1 -0
  271. package/dist/core/legacy-bridge/mapper.js +241 -0
  272. package/dist/core/legacy-bridge/mapper.js.map +1 -0
  273. package/dist/core/legacy-bridge/quality-judge.d.ts +65 -0
  274. package/dist/core/legacy-bridge/quality-judge.d.ts.map +1 -0
  275. package/dist/core/legacy-bridge/quality-judge.js +277 -0
  276. package/dist/core/legacy-bridge/quality-judge.js.map +1 -0
  277. package/dist/core/legacy-bridge/redact.d.ts +28 -0
  278. package/dist/core/legacy-bridge/redact.d.ts.map +1 -0
  279. package/dist/core/legacy-bridge/redact.js +121 -0
  280. package/dist/core/legacy-bridge/redact.js.map +1 -0
  281. package/dist/core/legacy-bridge/regenerator.d.ts +50 -0
  282. package/dist/core/legacy-bridge/regenerator.d.ts.map +1 -0
  283. package/dist/core/legacy-bridge/regenerator.js +193 -0
  284. package/dist/core/legacy-bridge/regenerator.js.map +1 -0
  285. package/dist/core/legacy-bridge/resolve.d.ts +28 -0
  286. package/dist/core/legacy-bridge/resolve.d.ts.map +1 -0
  287. package/dist/core/legacy-bridge/resolve.js +75 -0
  288. package/dist/core/legacy-bridge/resolve.js.map +1 -0
  289. package/dist/core/legacy-bridge/sync-check.d.ts +47 -0
  290. package/dist/core/legacy-bridge/sync-check.d.ts.map +1 -0
  291. package/dist/core/legacy-bridge/sync-check.js +198 -0
  292. package/dist/core/legacy-bridge/sync-check.js.map +1 -0
  293. package/dist/core/legacy-bridge/types.d.ts +114 -0
  294. package/dist/core/legacy-bridge/types.d.ts.map +1 -0
  295. package/dist/core/legacy-bridge/types.js +4 -0
  296. package/dist/core/legacy-bridge/types.js.map +1 -0
  297. package/dist/core/markers/index.d.ts +3 -0
  298. package/dist/core/markers/index.d.ts.map +1 -0
  299. package/dist/core/markers/index.js +3 -0
  300. package/dist/core/markers/index.js.map +1 -0
  301. package/dist/core/markers/parse.d.ts +12 -0
  302. package/dist/core/markers/parse.d.ts.map +1 -0
  303. package/dist/core/markers/parse.js +31 -0
  304. package/dist/core/markers/parse.js.map +1 -0
  305. package/dist/core/markers/types.d.ts +142 -0
  306. package/dist/core/markers/types.d.ts.map +1 -0
  307. package/dist/core/markers/types.js +3 -0
  308. package/dist/core/markers/types.js.map +1 -0
  309. package/dist/core/migrate/ack.d.ts +13 -0
  310. package/dist/core/migrate/ack.d.ts.map +1 -0
  311. package/dist/core/migrate/ack.js +62 -0
  312. package/dist/core/migrate/ack.js.map +1 -0
  313. package/dist/core/migrate/archive-detect.d.ts +19 -0
  314. package/dist/core/migrate/archive-detect.d.ts.map +1 -0
  315. package/dist/core/migrate/archive-detect.js +89 -0
  316. package/dist/core/migrate/archive-detect.js.map +1 -0
  317. package/dist/core/migrate/budget.d.ts +7 -0
  318. package/dist/core/migrate/budget.d.ts.map +1 -0
  319. package/dist/core/migrate/budget.js +25 -0
  320. package/dist/core/migrate/budget.js.map +1 -0
  321. package/dist/core/migrate/conflict.d.ts +49 -0
  322. package/dist/core/migrate/conflict.d.ts.map +1 -0
  323. package/dist/core/migrate/conflict.js +99 -0
  324. package/dist/core/migrate/conflict.js.map +1 -0
  325. package/dist/core/migrate/index.d.ts +7 -0
  326. package/dist/core/migrate/index.d.ts.map +1 -0
  327. package/dist/core/migrate/index.js +389 -0
  328. package/dist/core/migrate/index.js.map +1 -0
  329. package/dist/core/migrate/markdown-aware.d.ts +27 -0
  330. package/dist/core/migrate/markdown-aware.d.ts.map +1 -0
  331. package/dist/core/migrate/markdown-aware.js +112 -0
  332. package/dist/core/migrate/markdown-aware.js.map +1 -0
  333. package/dist/core/migrate/quality.d.ts +66 -0
  334. package/dist/core/migrate/quality.d.ts.map +1 -0
  335. package/dist/core/migrate/quality.js +302 -0
  336. package/dist/core/migrate/quality.js.map +1 -0
  337. package/dist/core/migrate/regenerate.d.ts +24 -0
  338. package/dist/core/migrate/regenerate.d.ts.map +1 -0
  339. package/dist/core/migrate/regenerate.js +145 -0
  340. package/dist/core/migrate/regenerate.js.map +1 -0
  341. package/dist/core/migrate/report.d.ts +36 -0
  342. package/dist/core/migrate/report.d.ts.map +1 -0
  343. package/dist/core/migrate/report.js +154 -0
  344. package/dist/core/migrate/report.js.map +1 -0
  345. package/dist/core/migrate/sources/index.d.ts +4 -0
  346. package/dist/core/migrate/sources/index.d.ts.map +1 -0
  347. package/dist/core/migrate/sources/index.js +17 -0
  348. package/dist/core/migrate/sources/index.js.map +1 -0
  349. package/dist/core/migrate/sources/openspec.d.ts +14 -0
  350. package/dist/core/migrate/sources/openspec.d.ts.map +1 -0
  351. package/dist/core/migrate/sources/openspec.js +453 -0
  352. package/dist/core/migrate/sources/openspec.js.map +1 -0
  353. package/dist/core/migrate/sources/superpowers.d.ts +12 -0
  354. package/dist/core/migrate/sources/superpowers.d.ts.map +1 -0
  355. package/dist/core/migrate/sources/superpowers.js +310 -0
  356. package/dist/core/migrate/sources/superpowers.js.map +1 -0
  357. package/dist/core/migrate/types.d.ts +183 -0
  358. package/dist/core/migrate/types.d.ts.map +1 -0
  359. package/dist/core/migrate/types.js +5 -0
  360. package/dist/core/migrate/types.js.map +1 -0
  361. package/dist/core/migrate/utils.d.ts +2 -0
  362. package/dist/core/migrate/utils.d.ts.map +1 -0
  363. package/dist/core/migrate/utils.js +28 -0
  364. package/dist/core/migrate/utils.js.map +1 -0
  365. package/dist/core/monitor/artifact-observer.d.ts +9 -0
  366. package/dist/core/monitor/artifact-observer.d.ts.map +1 -0
  367. package/dist/core/monitor/artifact-observer.js +180 -0
  368. package/dist/core/monitor/artifact-observer.js.map +1 -0
  369. package/dist/core/monitor/config.d.ts +16 -0
  370. package/dist/core/monitor/config.d.ts.map +1 -0
  371. package/dist/core/monitor/config.js +48 -0
  372. package/dist/core/monitor/config.js.map +1 -0
  373. package/dist/core/monitor/divergence-map.d.ts +5 -0
  374. package/dist/core/monitor/divergence-map.d.ts.map +1 -0
  375. package/dist/core/monitor/divergence-map.js +92 -0
  376. package/dist/core/monitor/divergence-map.js.map +1 -0
  377. package/dist/core/monitor/exit-handler.d.ts +6 -0
  378. package/dist/core/monitor/exit-handler.d.ts.map +1 -0
  379. package/dist/core/monitor/exit-handler.js +27 -0
  380. package/dist/core/monitor/exit-handler.js.map +1 -0
  381. package/dist/core/monitor/health-verdict.d.ts +9 -0
  382. package/dist/core/monitor/health-verdict.d.ts.map +1 -0
  383. package/dist/core/monitor/health-verdict.js +55 -0
  384. package/dist/core/monitor/health-verdict.js.map +1 -0
  385. package/dist/core/monitor/report-renderer.d.ts +4 -0
  386. package/dist/core/monitor/report-renderer.d.ts.map +1 -0
  387. package/dist/core/monitor/report-renderer.js +82 -0
  388. package/dist/core/monitor/report-renderer.js.map +1 -0
  389. package/dist/core/monitor/trace-store.d.ts +39 -0
  390. package/dist/core/monitor/trace-store.d.ts.map +1 -0
  391. package/dist/core/monitor/trace-store.js +130 -0
  392. package/dist/core/monitor/trace-store.js.map +1 -0
  393. package/dist/core/monitor/types.d.ts +63 -0
  394. package/dist/core/monitor/types.d.ts.map +1 -0
  395. package/dist/core/monitor/types.js +26 -0
  396. package/dist/core/monitor/types.js.map +1 -0
  397. package/dist/core/parse/design.d.ts +14 -0
  398. package/dist/core/parse/design.d.ts.map +1 -0
  399. package/dist/core/parse/design.js +17 -0
  400. package/dist/core/parse/design.js.map +1 -0
  401. package/dist/core/parse/fenced-yaml.d.ts +18 -0
  402. package/dist/core/parse/fenced-yaml.d.ts.map +1 -0
  403. package/dist/core/parse/fenced-yaml.js +45 -0
  404. package/dist/core/parse/fenced-yaml.js.map +1 -0
  405. package/dist/core/parse/index.d.ts +7 -0
  406. package/dist/core/parse/index.d.ts.map +1 -0
  407. package/dist/core/parse/index.js +8 -0
  408. package/dist/core/parse/index.js.map +1 -0
  409. package/dist/core/parse/markdown.d.ts +30 -0
  410. package/dist/core/parse/markdown.d.ts.map +1 -0
  411. package/dist/core/parse/markdown.js +66 -0
  412. package/dist/core/parse/markdown.js.map +1 -0
  413. package/dist/core/parse/proposal.d.ts +18 -0
  414. package/dist/core/parse/proposal.d.ts.map +1 -0
  415. package/dist/core/parse/proposal.js +22 -0
  416. package/dist/core/parse/proposal.js.map +1 -0
  417. package/dist/core/parse/specs.d.ts +25 -0
  418. package/dist/core/parse/specs.d.ts.map +1 -0
  419. package/dist/core/parse/specs.js +58 -0
  420. package/dist/core/parse/specs.js.map +1 -0
  421. package/dist/core/parse/tasks.d.ts +33 -0
  422. package/dist/core/parse/tasks.d.ts.map +1 -0
  423. package/dist/core/parse/tasks.js +82 -0
  424. package/dist/core/parse/tasks.js.map +1 -0
  425. package/dist/core/parse/yaml.d.ts +13 -0
  426. package/dist/core/parse/yaml.d.ts.map +1 -0
  427. package/dist/core/parse/yaml.js +39 -0
  428. package/dist/core/parse/yaml.js.map +1 -0
  429. package/dist/core/process-evidence-freeze-warnings.d.ts +24 -0
  430. package/dist/core/process-evidence-freeze-warnings.d.ts.map +1 -0
  431. package/dist/core/process-evidence-freeze-warnings.js +153 -0
  432. package/dist/core/process-evidence-freeze-warnings.js.map +1 -0
  433. package/dist/core/schema/index.d.ts +5 -0
  434. package/dist/core/schema/index.d.ts.map +1 -0
  435. package/dist/core/schema/index.js +6 -0
  436. package/dist/core/schema/index.js.map +1 -0
  437. package/dist/core/schema/model-tiers-config.d.ts +41 -0
  438. package/dist/core/schema/model-tiers-config.d.ts.map +1 -0
  439. package/dist/core/schema/model-tiers-config.js +85 -0
  440. package/dist/core/schema/model-tiers-config.js.map +1 -0
  441. package/dist/core/schema/process-verification-config.d.ts +18 -0
  442. package/dist/core/schema/process-verification-config.d.ts.map +1 -0
  443. package/dist/core/schema/process-verification-config.js +74 -0
  444. package/dist/core/schema/process-verification-config.js.map +1 -0
  445. package/dist/core/schema/stage-extensions-config.d.ts +28 -0
  446. package/dist/core/schema/stage-extensions-config.d.ts.map +1 -0
  447. package/dist/core/schema/stage-extensions-config.js +228 -0
  448. package/dist/core/schema/stage-extensions-config.js.map +1 -0
  449. package/dist/core/schema/types.d.ts +262 -0
  450. package/dist/core/schema/types.d.ts.map +1 -0
  451. package/dist/core/schema/types.js +51 -0
  452. package/dist/core/schema/types.js.map +1 -0
  453. package/dist/core/schema/writing-plans-config.d.ts +11 -0
  454. package/dist/core/schema/writing-plans-config.d.ts.map +1 -0
  455. package/dist/core/schema/writing-plans-config.js +40 -0
  456. package/dist/core/schema/writing-plans-config.js.map +1 -0
  457. package/dist/core/schemas/archive-summary.d.ts +131 -0
  458. package/dist/core/schemas/archive-summary.d.ts.map +1 -0
  459. package/dist/core/schemas/archive-summary.js +31 -0
  460. package/dist/core/schemas/archive-summary.js.map +1 -0
  461. package/dist/core/schemas/process-evidence.d.ts +156 -0
  462. package/dist/core/schemas/process-evidence.d.ts.map +1 -0
  463. package/dist/core/schemas/process-evidence.js +12 -0
  464. package/dist/core/schemas/process-evidence.js.map +1 -0
  465. package/dist/core/schemas/scope-entries.d.ts +68 -0
  466. package/dist/core/schemas/scope-entries.d.ts.map +1 -0
  467. package/dist/core/schemas/scope-entries.js +47 -0
  468. package/dist/core/schemas/scope-entries.js.map +1 -0
  469. package/dist/core/schemas/severity.d.ts +58 -0
  470. package/dist/core/schemas/severity.d.ts.map +1 -0
  471. package/dist/core/schemas/severity.js +26 -0
  472. package/dist/core/schemas/severity.js.map +1 -0
  473. package/dist/core/scope/aggregator.d.ts +49 -0
  474. package/dist/core/scope/aggregator.d.ts.map +1 -0
  475. package/dist/core/scope/aggregator.js +141 -0
  476. package/dist/core/scope/aggregator.js.map +1 -0
  477. package/dist/core/scope/index.d.ts +2 -0
  478. package/dist/core/scope/index.d.ts.map +1 -0
  479. package/dist/core/scope/index.js +2 -0
  480. package/dist/core/scope/index.js.map +1 -0
  481. package/dist/core/specs-sync/apply.d.ts +8 -0
  482. package/dist/core/specs-sync/apply.d.ts.map +1 -0
  483. package/dist/core/specs-sync/apply.js +26 -0
  484. package/dist/core/specs-sync/apply.js.map +1 -0
  485. package/dist/core/specs-sync/deltas.d.ts +15 -0
  486. package/dist/core/specs-sync/deltas.d.ts.map +1 -0
  487. package/dist/core/specs-sync/deltas.js +27 -0
  488. package/dist/core/specs-sync/deltas.js.map +1 -0
  489. package/dist/core/specs-sync/index.d.ts +3 -0
  490. package/dist/core/specs-sync/index.d.ts.map +1 -0
  491. package/dist/core/specs-sync/index.js +4 -0
  492. package/dist/core/specs-sync/index.js.map +1 -0
  493. package/dist/core/stage-extensions/convergence-judge.d.ts +35 -0
  494. package/dist/core/stage-extensions/convergence-judge.d.ts.map +1 -0
  495. package/dist/core/stage-extensions/convergence-judge.js +47 -0
  496. package/dist/core/stage-extensions/convergence-judge.js.map +1 -0
  497. package/dist/core/stage-extensions/index.d.ts +13 -0
  498. package/dist/core/stage-extensions/index.d.ts.map +1 -0
  499. package/dist/core/stage-extensions/index.js +11 -0
  500. package/dist/core/stage-extensions/index.js.map +1 -0
  501. package/dist/core/stage-extensions/output-watcher.d.ts +93 -0
  502. package/dist/core/stage-extensions/output-watcher.d.ts.map +1 -0
  503. package/dist/core/stage-extensions/output-watcher.js +163 -0
  504. package/dist/core/stage-extensions/output-watcher.js.map +1 -0
  505. package/dist/core/stage-extensions/severity-mapper.d.ts +21 -0
  506. package/dist/core/stage-extensions/severity-mapper.d.ts.map +1 -0
  507. package/dist/core/stage-extensions/severity-mapper.js +26 -0
  508. package/dist/core/stage-extensions/severity-mapper.js.map +1 -0
  509. package/dist/core/stage-extensions/state-machine.d.ts +43 -0
  510. package/dist/core/stage-extensions/state-machine.d.ts.map +1 -0
  511. package/dist/core/stage-extensions/state-machine.js +19 -0
  512. package/dist/core/stage-extensions/state-machine.js.map +1 -0
  513. package/dist/core/stage-extensions/thread-map.d.ts +60 -0
  514. package/dist/core/stage-extensions/thread-map.d.ts.map +1 -0
  515. package/dist/core/stage-extensions/thread-map.js +107 -0
  516. package/dist/core/stage-extensions/thread-map.js.map +1 -0
  517. package/dist/core/stage-extensions/trend-analyzer.d.ts +29 -0
  518. package/dist/core/stage-extensions/trend-analyzer.d.ts.map +1 -0
  519. package/dist/core/stage-extensions/trend-analyzer.js +60 -0
  520. package/dist/core/stage-extensions/trend-analyzer.js.map +1 -0
  521. package/dist/core/stage-extensions/types.d.ts +39 -0
  522. package/dist/core/stage-extensions/types.d.ts.map +1 -0
  523. package/dist/core/stage-extensions/types.js +5 -0
  524. package/dist/core/stage-extensions/types.js.map +1 -0
  525. package/dist/core/staging-lock.d.ts +36 -0
  526. package/dist/core/staging-lock.d.ts.map +1 -0
  527. package/dist/core/staging-lock.js +122 -0
  528. package/dist/core/staging-lock.js.map +1 -0
  529. package/dist/core/templates/commands/ack-confirm.md +32 -0
  530. package/dist/core/templates/commands/apply.md +220 -0
  531. package/dist/core/templates/commands/archive.md +178 -0
  532. package/dist/core/templates/commands/brainstorm.md +58 -0
  533. package/dist/core/templates/commands/codex-adversarial.md +95 -0
  534. package/dist/core/templates/commands/explore.md +29 -0
  535. package/dist/core/templates/commands/index.d.ts +12 -0
  536. package/dist/core/templates/commands/index.d.ts.map +1 -0
  537. package/dist/core/templates/commands/index.js +26 -0
  538. package/dist/core/templates/commands/index.js.map +1 -0
  539. package/dist/core/templates/commands/propose.md +90 -0
  540. package/dist/core/templates/commands/review.md +105 -0
  541. package/dist/core/templates/commands/upgrade.md +58 -0
  542. package/dist/core/templates/commands/verify.md +186 -0
  543. package/dist/core/templates/index.d.ts +3 -0
  544. package/dist/core/templates/index.d.ts.map +1 -0
  545. package/dist/core/templates/index.js +5 -0
  546. package/dist/core/templates/index.js.map +1 -0
  547. package/dist/core/templates/skills/_shared/scope-category-guidance.md +40 -0
  548. package/dist/core/templates/skills/brainstorming.md +161 -0
  549. package/dist/core/templates/skills/dispatching-parallel-agents.md +209 -0
  550. package/dist/core/templates/skills/exploring.md +476 -0
  551. package/dist/core/templates/skills/finishing-a-development-branch.md +251 -0
  552. package/dist/core/templates/skills/index.d.ts +17 -0
  553. package/dist/core/templates/skills/index.d.ts.map +1 -0
  554. package/dist/core/templates/skills/index.js +53 -0
  555. package/dist/core/templates/skills/index.js.map +1 -0
  556. package/dist/core/templates/skills/process-evidence.md +146 -0
  557. package/dist/core/templates/skills/receiving-code-review.md +294 -0
  558. package/dist/core/templates/skills/requesting-code-review.md +108 -0
  559. package/dist/core/templates/skills/subagent-driven-development.md +405 -0
  560. package/dist/core/templates/skills/subagent-driven-discipline/references/codex-tools.md +72 -0
  561. package/dist/core/templates/skills/subagent-driven-discipline/references/opencode-tools.md +104 -0
  562. package/dist/core/templates/skills/subagent-driven-discipline.md +725 -0
  563. package/dist/core/templates/skills/systematic-debugging.md +297 -0
  564. package/dist/core/templates/skills/test-driven-development.md +402 -0
  565. package/dist/core/templates/skills/using-forge.md +163 -0
  566. package/dist/core/templates/skills/using-git-worktrees.md +229 -0
  567. package/dist/core/templates/skills/verification-before-completion.md +175 -0
  568. package/dist/core/templates/skills/verifying-three-dimensions.md +245 -0
  569. package/dist/core/templates/skills/writing-plans.md +259 -0
  570. package/dist/core/templates/skills/writing-skills.md +214 -0
  571. package/dist/core/test-reporters/index.d.ts +41 -0
  572. package/dist/core/test-reporters/index.d.ts.map +1 -0
  573. package/dist/core/test-reporters/index.js +39 -0
  574. package/dist/core/test-reporters/index.js.map +1 -0
  575. package/dist/core/test-reporters/junit.d.ts +8 -0
  576. package/dist/core/test-reporters/junit.d.ts.map +1 -0
  577. package/dist/core/test-reporters/junit.js +94 -0
  578. package/dist/core/test-reporters/junit.js.map +1 -0
  579. package/dist/core/test-reporters/tap.d.ts +18 -0
  580. package/dist/core/test-reporters/tap.d.ts.map +1 -0
  581. package/dist/core/test-reporters/tap.js +73 -0
  582. package/dist/core/test-reporters/tap.js.map +1 -0
  583. package/dist/core/test-reporters/vitest-json.d.ts +8 -0
  584. package/dist/core/test-reporters/vitest-json.d.ts.map +1 -0
  585. package/dist/core/test-reporters/vitest-json.js +56 -0
  586. package/dist/core/test-reporters/vitest-json.js.map +1 -0
  587. package/dist/core/upgrade/resign-markers.d.ts +14 -0
  588. package/dist/core/upgrade/resign-markers.d.ts.map +1 -0
  589. package/dist/core/upgrade/resign-markers.js +245 -0
  590. package/dist/core/upgrade/resign-markers.js.map +1 -0
  591. package/dist/core/validate/archive-summary-schema.d.ts +8 -0
  592. package/dist/core/validate/archive-summary-schema.d.ts.map +1 -0
  593. package/dist/core/validate/archive-summary-schema.js +186 -0
  594. package/dist/core/validate/archive-summary-schema.js.map +1 -0
  595. package/dist/core/validate/auto-findings.d.ts +36 -0
  596. package/dist/core/validate/auto-findings.d.ts.map +1 -0
  597. package/dist/core/validate/auto-findings.js +38 -0
  598. package/dist/core/validate/auto-findings.js.map +1 -0
  599. package/dist/core/validate/candidate-validators.d.ts +22 -0
  600. package/dist/core/validate/candidate-validators.d.ts.map +1 -0
  601. package/dist/core/validate/candidate-validators.js +46 -0
  602. package/dist/core/validate/candidate-validators.js.map +1 -0
  603. package/dist/core/validate/change.d.ts +3 -0
  604. package/dist/core/validate/change.d.ts.map +1 -0
  605. package/dist/core/validate/change.js +205 -0
  606. package/dist/core/validate/change.js.map +1 -0
  607. package/dist/core/validate/coverage-gap.d.ts +37 -0
  608. package/dist/core/validate/coverage-gap.d.ts.map +1 -0
  609. package/dist/core/validate/coverage-gap.js +181 -0
  610. package/dist/core/validate/coverage-gap.js.map +1 -0
  611. package/dist/core/validate/finding-hash.d.ts +14 -0
  612. package/dist/core/validate/finding-hash.d.ts.map +1 -0
  613. package/dist/core/validate/finding-hash.js +29 -0
  614. package/dist/core/validate/finding-hash.js.map +1 -0
  615. package/dist/core/validate/index.d.ts +15 -0
  616. package/dist/core/validate/index.d.ts.map +1 -0
  617. package/dist/core/validate/index.js +19 -0
  618. package/dist/core/validate/index.js.map +1 -0
  619. package/dist/core/validate/marker-integrity.d.ts +28 -0
  620. package/dist/core/validate/marker-integrity.d.ts.map +1 -0
  621. package/dist/core/validate/marker-integrity.js +170 -0
  622. package/dist/core/validate/marker-integrity.js.map +1 -0
  623. package/dist/core/validate/marker-schema.d.ts +10 -0
  624. package/dist/core/validate/marker-schema.d.ts.map +1 -0
  625. package/dist/core/validate/marker-schema.js +661 -0
  626. package/dist/core/validate/marker-schema.js.map +1 -0
  627. package/dist/core/validate/orphan-tmp.d.ts +13 -0
  628. package/dist/core/validate/orphan-tmp.d.ts.map +1 -0
  629. package/dist/core/validate/orphan-tmp.js +49 -0
  630. package/dist/core/validate/orphan-tmp.js.map +1 -0
  631. package/dist/core/validate/proposal.d.ts +4 -0
  632. package/dist/core/validate/proposal.d.ts.map +1 -0
  633. package/dist/core/validate/proposal.js +40 -0
  634. package/dist/core/validate/proposal.js.map +1 -0
  635. package/dist/core/validate/scope-entries.d.ts +23 -0
  636. package/dist/core/validate/scope-entries.d.ts.map +1 -0
  637. package/dist/core/validate/scope-entries.js +108 -0
  638. package/dist/core/validate/scope-entries.js.map +1 -0
  639. package/dist/core/validate/specs.d.ts +4 -0
  640. package/dist/core/validate/specs.d.ts.map +1 -0
  641. package/dist/core/validate/specs.js +74 -0
  642. package/dist/core/validate/specs.js.map +1 -0
  643. package/dist/core/validate/tasks.d.ts +4 -0
  644. package/dist/core/validate/tasks.d.ts.map +1 -0
  645. package/dist/core/validate/tasks.js +48 -0
  646. package/dist/core/validate/tasks.js.map +1 -0
  647. package/dist/core/validate/test-failure-stub.d.ts +23 -0
  648. package/dist/core/validate/test-failure-stub.d.ts.map +1 -0
  649. package/dist/core/validate/test-failure-stub.js +21 -0
  650. package/dist/core/validate/test-failure-stub.js.map +1 -0
  651. package/dist/core/validate/types.d.ts +33 -0
  652. package/dist/core/validate/types.d.ts.map +1 -0
  653. package/dist/core/validate/types.js +20 -0
  654. package/dist/core/validate/types.js.map +1 -0
  655. package/dist/core/worktree.d.ts +52 -0
  656. package/dist/core/worktree.d.ts.map +1 -0
  657. package/dist/core/worktree.js +145 -0
  658. package/dist/core/worktree.js.map +1 -0
  659. package/dist/index.d.ts +12 -0
  660. package/dist/index.d.ts.map +1 -0
  661. package/dist/index.js +14 -0
  662. package/dist/index.js.map +1 -0
  663. package/package.json +82 -0
@@ -0,0 +1,245 @@
1
+ ---
2
+ name: forge:verifying-three-dimensions
3
+ description: Use when verifying a forge change — analyze Completeness / Correctness / Coherence three dimensions to produce verify_findings with concrete evidence and severity, instead of degenerate "tests pass" binary
4
+ ---
5
+
6
+ # forge verifying-three-dimensions
7
+
8
+ > 本 skill 走 `forge:writing-skills` 协议开发(非 bootstrap exception,沿 design §2.9.5 dogfood)。SKILL.md + scenarios 经过 RED → GREEN → REFACTOR 完整链(plan-9d Task 1 + Task 2 + Task 7)。
9
+
10
+ ## Overview
11
+
12
+ forge v0.4 的 verify 阶段退化为"测试 pass + log_hash"二值判定(沿 design §2.2.1)。测试 pass 不等于实施完整 — spec 里没被测试覆盖的 Requirement 完全不会被发现。本 skill 移植 OpenSpec `verify-change.ts` 的三维度方法论,把 verify 阶段从二值判定升级为带证据的 finding 数组,**配合 forge fence 反向加固让 AI 不能偷懒推 SUGGESTION**。
13
+
14
+ ## Methodology (reference superpowers 上游)
15
+
16
+ **REQUIRED BACKGROUND**:必须先懂 `forge:verification-before-completion`(证据先于声称的纪律)。
17
+
18
+ 核心论点:
19
+
20
+ - "测试 pass 不等于 spec 覆盖 — 没测试覆盖的 Requirement 完全无声音失败"(沿 design §2.2.1)
21
+ - 三维度协议来自 OpenSpec `src/core/templates/workflows/verify-change.ts` 第 4-7 步,forge 化的关键是**反向加固 AI 倾向**:OpenSpec verify-change.ts:152 "When uncertain, prefer SUGGESTION over WARNING" 在 AI 手里是放水按钮(沿 design §2.2.4 关键差异化)
22
+
23
+ ## When to Use
24
+
25
+ - `/forge:verify <change-id>` slash command 调用本 skill(沿 commands/verify.md 重构后协议)
26
+ - AI agent 主体在 verify 阶段产 `.verify-passed` / `.verify-failed` marker 的 `verify_findings` 数组前
27
+ - 手动 review 一个 change 实施完整度(三维度作为 checklist)
28
+
29
+ ## When NOT to Use
30
+
31
+ - 写 `forge plan`(那是 `forge:writing-plans`)
32
+ - 写新 skill(那是 `forge:writing-skills`)
33
+ - code review(那是 `forge:receiving-code-review` 或 `/forge:review` slash)
34
+ - archive 阶段 fence 校验(那是 `forge archive` CLI 自动做,不需 AI 调 skill;沿 design §2.2.4)
35
+
36
+ ## 三维度协议
37
+
38
+ | 维度 | 检查项 | 自动 / LLM | 产 finding 路径 |
39
+ | ---------------- | ----------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------- |
40
+ | **Completeness** | task 完成度(checkbox 计数) | 自动 | `forge validate` 已做(走 ValidationError → Finding;沿 plan-9d Task 4) |
41
+ | | spec 覆盖度(每个 Requirement 在 codebase 有实施证据) | 自动 + LLM | `forge validate` 已做(走 coverage_gap candidate,沿 §11.1bis;grep + 0 命中);AI 调本 skill 在 grep 命中后再判语义偏离 |
42
+ | **Correctness** | requirement 实施映射(file:line) | LLM(本 skill) | AI 调本 skill 给具体 file:line |
43
+ | | scenario 覆盖(WHEN/THEN/AND 条件在 code 或 test 中体现) | LLM(本 skill) | AI 调本 skill 给 file:line + scenario-id |
44
+ | **Coherence** | design 决策追溯(design.md `## Decision:` / `## Approach:` 段是否被实施) | LLM(本 skill) | AI 调本 skill grep design.md 关键词 + 比对 codebase |
45
+ | | 代码 pattern 一致性(命名 / 目录 / 风格 vs 项目惯例) | LLM(本 skill) | AI 调本 skill 比对项目惯例 → 通常产 SUGGESTION |
46
+
47
+ ### 主流程
48
+
49
+ 每次 verify 必须**三维度全跑**,不允许跳维度:
50
+
51
+ 1. **Completeness**:
52
+ - 先看 `forge validate` 自动产的 finding(含 spec-files-missing / coverage_gap 类,沿 §11.1bis)
53
+ - 对 spec 每个 Requirement,grep codebase 找实施证据;**完全无证据 → CRITICAL `coverage_gap`**(automated=true,工具自动判,沿 design line 446;若 spec 列了但 grep 0 命中,validate 已自动产此类 finding,AI 调本 skill 时合并即可)
54
+ - 对 tasks.md 标 [x] 但 git diff 反向 0 改动:走 `fake_completion` 路径(verify slash 阶段 AI 主动跑 `git diff` 产 CRITICAL finding,automated=true,candidate_type 不填 — 沿 v3 B-3 边界 case;**不**走 evidence_missing,因 evidence_missing 语义是 evidence.log_path 文件缺失,不同)
55
+ 2. **Correctness**:
56
+ - 对 spec 每个 Requirement,定位实施 file:line;**WHEN/THEN/AND scenario 在 test 或 code 中找证据;若找不到 → WARNING `scenario-coverage`**
57
+ 3. **Coherence**:
58
+ - design.md `## Decision:` / `## Approach:` 段提到的关键词,grep codebase 比对;**实施偏离决策 → WARNING `design-traceability`**
59
+ - 命名 / 目录 / 风格比对项目惯例;**偏离 → SUGGESTION `pattern-consistency`**(沿 \_shared/scope-category-guidance.md)
60
+
61
+ 每个 finding 必须填(8 必填字段沿 design §2.2.3 + master §3.12.1):
62
+
63
+ - `id`(单调递增整数)
64
+ - `dimension`(`completeness` / `correctness` / `coherence`)
65
+ - `check_type`(细分,如 `task-completion` / `spec-coverage` / `requirement-mapping` / `scenario-coverage` / `design-traceability` / `pattern-consistency`)
66
+ - `severity`(`CRITICAL` / `WARNING` / `SUGGESTION`)
67
+ - `automated`(true if 工具可判,false if LLM 判)
68
+ - `evidence`(必须含 file:line 或 spec:Requirement-id 或 design.md:段落标题;**禁止 vague "could be reviewed"**)
69
+ - `recommendation`(具体下一步,如 "在 src/auth/rate-limit.ts 加 sliding-window 实现" — 不允许 "consider reviewing")
70
+ - `resolved`(true / false)
71
+
72
+ ## 4-6 标定 example
73
+
74
+ ### Example 1 — Completeness/spec-coverage CRITICAL(automated)
75
+
76
+ ```yaml
77
+ - id: 1
78
+ dimension: completeness
79
+ check_type: spec-coverage
80
+ severity: CRITICAL
81
+ automated: true # 工具可判 — codebase grep 0 个 file 提及该 Requirement 关键词
82
+ evidence: "specs/auth/spec.md Requirement #3 'refresh rate limit' 在 src/auth/ 0 个 file 提及 'rate-limit' / 'rateLimit' / 'throttle' 关键词"
83
+ recommendation: '在 src/auth/rate-limit.ts 实现 sliding-window 限流,或修订 spec 移除 #3'
84
+ resolved: false
85
+ ```
86
+
87
+ **为什么 CRITICAL automated**:工具可独立验证(grep + AST 双重 0 命中是机器判定),沿 design §2.3.3 critical_candidate 协议 candidate_type=`coverage_gap`(spec 列 requirement 但 codebase 完全 0 命中,沿 design line 446)。AI 不能降级。**注**:`evidence_missing` 是 candidate_type 6 类之一但语义不同 — 它检查 `evidence.log_path` 文件是否存在(沿 design line 445),不适用于本 example 的 spec→codebase 覆盖检查。
88
+
89
+ ### Example 2 — Correctness/requirement-mapping WARNING(LLM)
90
+
91
+ ```yaml
92
+ - id: 2
93
+ dimension: correctness
94
+ check_type: requirement-mapping
95
+ severity: WARNING
96
+ automated: false # LLM 判 — 需 AI 比对 spec 描述 vs 实施语义
97
+ evidence: "specs/auth/spec.md Requirement #2 'expiry window 默认 24h' 在 src/auth/refresh.ts:42 实现为 expiryHours = 12(与 spec 不一致)"
98
+ recommendation: '改 expiryHours = 24,或修订 spec 改默认值'
99
+ resolved: false
100
+ severity_acked_by: null # WARNING 必须 ack 才能 archive
101
+ severity_acked_at: null
102
+ ```
103
+
104
+ **为什么 WARNING**:语义不一致非 0/1 判定(LLM 需读 spec + 代码语境),且可改 → 不该 CRITICAL 强 fence。AI ack 路径走 `forge ack propose`(沿 9a)。
105
+
106
+ ### Example 3 — Coherence/design-traceability WARNING(LLM)
107
+
108
+ ```yaml
109
+ - id: 3
110
+ dimension: coherence
111
+ check_type: design-traceability
112
+ severity: WARNING
113
+ automated: false
114
+ evidence: "design.md '## Decision: 选用 sliding-window 限流' 在 src/auth/ 实施为 fixed-window(rate-limit.ts:15 用 expiryAt + bucket 模式,sliding-window 关键词 0 命中)"
115
+ recommendation: '实施 sliding-window(按 design 决策),或修订 design.md 改决策为 fixed-window 并写理由'
116
+ resolved: false
117
+ severity_acked_by: null
118
+ severity_acked_at: null
119
+ ```
120
+
121
+ **为什么 WARNING 而非 CRITICAL**:design 决策偏离不直接威胁系统正确性(沿 design §2.3.2),但需用户 ack。
122
+
123
+ ### Example 4 — Coherence/pattern-consistency SUGGESTION(LLM)
124
+
125
+ ```yaml
126
+ - id: 4
127
+ dimension: coherence
128
+ check_type: pattern-consistency
129
+ severity: SUGGESTION
130
+ automated: false
131
+ evidence: 'src/auth/login.ts:23 函数名 doLogin 与项目 7 个 handler 文件 (src/handlers/) 统一 handleXxx 命名风格不一致'
132
+ recommendation: 'rename doLogin → handleLogin'
133
+ resolved: false # SUGGESTION 不要求 resolved,允许带 finding archive
134
+ ```
135
+
136
+ **为什么 SUGGESTION**:命名风格非核心目标 + 可不改 + 改起来简单,符合 \_shared/scope-category-guidance.md "本 change 内 nice-to-have" 判定。
137
+
138
+ ### Example 5 — Completeness/task-completion CRITICAL(automated,verify slash 阶段产)
139
+
140
+ ```yaml
141
+ - id: 5
142
+ dimension: completeness
143
+ check_type: task-completion
144
+ severity: CRITICAL
145
+ automated: true # 工具自动判 — git diff 是机器判定
146
+ # 注:candidate_type 字段不填(下文解释)
147
+ evidence: "tasks.md#task-4 '加 rate-limit middleware' 标 [x] 但 git diff src/middleware/ 无相关改动(命令:git diff HEAD~1 -- src/middleware/)"
148
+ recommendation: '完成 task-4 实施,或把 task-4 改回 [ ]'
149
+ resolved: false
150
+ ```
151
+
152
+ **注**(v3 B-3 修订):本类 finding(标 [x] 但 git diff 空,即 fake-completion)由 `/forge:verify` slash 阶段 AI 调本 skill 时**主动跑 `git diff <previous-base>..HEAD -- <expected-path>` 命令**产生(plan-9d v2 Task 4 `forge validate` CLI 仅产 `coverage_gap` spec-side 类 finding + `test_failure` stub,**不内嵌 git CLI** — git diff fake-completion 检测在 verify slash 路径产,沿 commands/verify.md Task 5)。automated=true 合理:git diff 命令输出是机器判定。
153
+
154
+ **关于 candidate_type 字段**:design line 443-448 列了 6 类 enum(test_failure / hash_mismatch / evidence_missing / coverage_gap / api_contract / manual_claim),但本 example "task 标 [x] 但 git diff 反向 0 改动" 不严格归入任何一类:
155
+
156
+ - **不是 `coverage_gap`**(spec→code 方向的 grep,本 example 是 task→code 方向的 git diff 反向)
157
+ - **不是 `manual_claim`**(manual_claim 工具不能自动判;本 example git diff 可自动判)
158
+ - **不是 `hash_mismatch`**(hash_mismatch 重算 tasks_hash/content_hash/log_hash/git.diff_hash,task 标 [x] 后 hash 已更新无 mismatch)
159
+ - **`fake_completion`** 不在 design 6 类 enum 之内(`Finding.candidate_type` 是 optional 字段,沿 9a severity.ts:75;不填合规)
160
+
161
+ **v1.0 处理**:`candidate_type` 字段不填(沿 9a Finding.candidate_type 是 optional);check_type=`task-completion` 即可区分本类。**v1.1 计划**:design §3.1 推迟项可加 `fake_completion` candidate_type 第 7 类(若 verify slash 场景多,值得正式 enum 化)。
162
+
163
+ **为什么 automated=true 仍合理**:design §2.3.3 表区分"工具自动产 CRITICAL"(line 457)与"AI 候选 + 工具验证"两种路径 — `git diff` 是工具自动判,落"工具自动产"路径(line 457 "forge validate 跑测试 fail / 算 hash mismatch / process_evidence 不变量违反等"语义涵盖 git diff 类工具自动判),不需要走 candidate 路径。
164
+
165
+ ### Example 6 — Correctness/scenario-coverage SUGGESTION(LLM)
166
+
167
+ ```yaml
168
+ - id: 6
169
+ dimension: correctness
170
+ check_type: scenario-coverage
171
+ severity: SUGGESTION
172
+ automated: false
173
+ evidence: "specs/auth/spec.md Scenario 'expired token retry' 的 WHEN/THEN/AND 在 tests/auth/refresh.test.ts 仅覆盖 happy-path,边缘 case (token 刚过期) 无 test"
174
+ recommendation: "加 tests/auth/refresh.test.ts:'expired-token retry edge case'"
175
+ resolved: false
176
+ ```
177
+
178
+ **为什么 SUGGESTION**:增测试是 nice-to-have(主流程已测),不影响 core verify pass。
179
+
180
+ ## forge-specific 反向加固
181
+
182
+ forge v1.0 比 OpenSpec verify-change.ts 走更远 — 假设 AI 在 verify 阶段倾向偷懒。本 skill 配合 fence 反向加固:
183
+
184
+ ### 1. automated=true CRITICAL 不可降级
185
+
186
+ 工具自动判的 CRITICAL findings(v8 M-1 修订:口径与 §11.1bis 一致):
187
+
188
+ - `forge validate` 阶段产:**spec-files-missing**(specs/ 空)+ **coverage_gap**(spec Requirement grep 0 命中)
189
+ - `forge archive` 现有路径产:**hash_mismatch**(marker tasks_hash / content_hash 重算不一致,line 274-289)
190
+ - `/forge:verify` slash AI 调 skill 阶段产:**fake_completion**(tasks 标 [x] 但 git diff 反向 0 改动,automated=true 因 git 是机器判定;candidate_type 字段不填,沿 v3 B-3 边界 case)
191
+ - **不在 v1.0 实施**(沿 §11.1bis):`evidence_missing` 由 9a candidate-validators.ts framework 处理 / `api_contract` 推迟 v1.1 / `manual_claim` 走 9a ack 流程 / `test_failure` 走 stub warning,9g 完成后接 reporter parser
192
+
193
+ 上述所有 CRITICAL finding 都由对应工具产 `finding_hash`(JCS SHA256,沿 9a `computeFindingHash`):
194
+
195
+ - AI 改 severity 重算 hash 即不一致 → archive fence 拒签(沿 design §2.2.4)
196
+ - AI 改 evidence / recommendation 也会改 hash,同样拒签
197
+ - AI 唯一合规路径:走 `forge ack propose` 启动两步 ack 流程(沿 9a;CI 模式直接拒绝)
198
+
199
+ ### 2. WARNING 必须 ack 才能 archive
200
+
201
+ LLM 判的 WARNING(automated=false)路径:
202
+
203
+ - AI 必须真给具体证据 + 具体 recommendation(不允许 vague "consider reviewing")
204
+ - archive 阶段 fence 校验 `severity_acked_by` + `severity_acked_at` 非空,否则拒签
205
+
206
+ ### 3. SUGGESTION 不是放水按钮
207
+
208
+ OpenSpec verify-change.ts:152 "When uncertain, prefer SUGGESTION over WARNING" 在 forge 是 anti-pattern:
209
+
210
+ - SUGGESTION 累积到 `archive_summary` 的 `pending_suggestions` 数组(沿 9e),v1.1 backlog registry 全表索引(沿 design §3.1)
211
+ - AI 偷懒推 SUGGESTION 会留下持续可见的 SUGGESTION 堆积反向暴露
212
+ - 沿 `skills/_shared/scope-category-guidance.md`:"本 change 不做但跨 change 项" 应走 Out of Scope / Future Work / Non-Goal,不是 SUGGESTION
213
+
214
+ ### 4. 三维度必须全跑
215
+
216
+ 不允许跳维度。即使 Completeness 全 pass 也必须跑 Correctness + Coherence(典型借口:"测试都过了,看着没问题")。
217
+
218
+ ## 红旗清单 — STOP and Start Over
219
+
220
+ | 想法 | 现实 |
221
+ | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
222
+ | "测试都 pass 了,跳 Correctness/Coherence" | 测试 pass 只覆盖被写出来的 test。spec 里没测试覆盖的 Requirement 完全 silent。**跳维度 = 重新走第 1 维度** |
223
+ | "这个 Requirement 在 codebase 没找到,但应该不重要,推 SUGGESTION" | `coverage_gap` 是 automated CRITICAL candidate(沿 §11.1bis;evidence_missing 仅指 evidence.log_path 文件缺失);推 SUGGESTION = 偷懒。fence 拒签的不是你判定 SUGGESTION,而是你没让工具自动判 |
224
+ | "vague 'consider reviewing X'" | fence 看不到具体证据 → recommendation 等价无效。重写带 file:line / spec:Requirement-id |
225
+ | "WARNING 我直接给 severity_acked_by = ai-agent 算自 ack" | WARNING ack 必须走 `forge ack propose` 两步流程(沿 9a),AI 自 ack 不存在;archive fence 校验 ack-log.jsonl 一致性 |
226
+ | "automated=true CRITICAL 我改成 false 让 LLM 判" | finding_hash 重算 + 比对会拒签。修法是让工具自动产,不是改 automated 字段 |
227
+ | "三个维度合并写成一段总论" | finding 是结构化数组,每项必须明确 dimension / check_type;合并 = 工具无法解析,fence 报 schema 错 |
228
+ | "时间紧,只跑 Completeness" | 跳维度是 baseline AI 的典型失败模式(沿 plan-9d scenario pressure-skip-coherence)。本 skill 存在的全部理由就是挡这个 |
229
+
230
+ **全部触发表示:回归三维度协议,从 Completeness 开始**。
231
+
232
+ ## 配套引用
233
+
234
+ - `skills/_shared/scope-category-guidance.md`(9b 落地;**plugin runtime 下:`_shared/scope-category-guidance.md`** — 沿 receiving-code-review SKILL.md:292 convention):决策表区分 "本 change SUGGESTION" vs "跨 change Out of Scope / Future Work / Non-Goal"
235
+ - design §2.2.3 verify_findings YAML schema(权威字段定义)
236
+ - design §2.3.3 critical_candidate 协议(automated CRITICAL 不可降级机制)
237
+ - design §2.3.6 finding_hash JCS 算法(9a 实施)
238
+ - 9a `src/core/schemas/severity.ts`:Finding / FindingHashPayload 接口
239
+ - 9b `src/core/scope/aggregator.ts`:跨 change followups 数据源
240
+
241
+ ## Bottom Line
242
+
243
+ **verify 不只是测试 pass — 是三维度评估** + **fence 反向加固让"偷懒推 SUGGESTION"不再是低风险选择**。
244
+
245
+ 每次 verify 产出的 verify_findings 数组 = 后续 archive / `archive_summary` handoff / v1.1 backlog 的全链数据源;偷懒会留下持续可见的痕迹。
@@ -0,0 +1,259 @@
1
+ ---
2
+ name: forge:writing-plans
3
+ description: Use when you have a spec or requirements for a multi-step task, before touching code
4
+ ---
5
+
6
+ # Writing Plans
7
+
8
+ ## Overview
9
+
10
+ Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
11
+
12
+ Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
13
+
14
+ **Announce at start:** "I'm using the forge:writing-plans skill to create the implementation plan."
15
+
16
+ **Context:** This should be run in a dedicated worktree (created by brainstorming skill).
17
+
18
+ **Save plans to:** `forge/changes/<change-id>/tasks.md`(forge 把 plan 直接落到 change 的 tasks.md;design.md 与 specs/ 由 propose 模板另行生成)
19
+
20
+ - (User preferences for plan location override this default)
21
+
22
+ ## Scope Check
23
+
24
+ If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans — one per subsystem. Each plan should produce working, testable software on its own.
25
+
26
+ ## Scale-aware mode (P3 fix from v0.2 fixture testing)
27
+
28
+ **Before writing tasks**, decide between **light mode** (1-2 tasks, ~50-80 lines) vs **full mode** (5+ tasks, ~200+ lines with strict RED → GREEN → REFACTOR + verification per task).
29
+
30
+ ### Decision logic
31
+
32
+ 1. **Read** `forge/changes/<change-id>/proposal.md` — count the line number (e.g., `wc -l`)
33
+ 2. **Read** `forge/config.yaml#writing_plans.light_threshold`(if exists);默认 200(由 `validateWritingPlansConfig` fallback,见 `src/core/schema/writing-plans-config.ts`)
34
+ 3. **Check** `--light` flag(若用户 `/forge:propose <id> --light` 显式传 → 强制 light mode,跳过 threshold 判定)
35
+ 4. **Decide**:
36
+ - proposal 行数 < `light_threshold` 或 `--light` flag → **light mode**
37
+ - proposal 行数 >= `light_threshold`(默认)→ **full mode**
38
+
39
+ ### Light mode template (trivial change)
40
+
41
+ - 1-2 tasks(typically 1 task with multiple steps)
42
+ - 跳过 RED → GREEN → REFACTOR 三段强约束(直接写实现 + 写测试,合并到 1-2 step)
43
+ - 跳过 per-task verification + commit(只在 task 末尾一次性 verify + commit)
44
+ - 总长度 ~50-80 行 tasks.md
45
+
46
+ **适用场景**:加 1 个字段、加 1 个 CLI flag、改 1 个常量、修 1 个简单 bug、纯文本修改 / docs 改动
47
+
48
+ ### Full mode template (complex feature, 默认)
49
+
50
+ - 5+ tasks,each with `RED → GREEN → REFACTOR` + verification + commit
51
+ - 每 task 独立可 review,每 step 2-5 分钟可执行
52
+ - 总长度 200+ 行(参见现有 forge-repo plans)
53
+
54
+ **适用场景**:新模块、跨多文件 refactor、协议变动、新增子系统
55
+
56
+ ### Why this matters (v0.2 P3 fixture test 教训)
57
+
58
+ v0.2 fixture 测试发现:trivial change(用户原话"加 1 个 priority 字段 + `-p` flag")被 writing-plans 强制套 5-task 完整模板 + 每 task RED/GREEN/REFACTOR + verification → tasks.md **511 行**(后续 Plan 0b.1 实测进一步发现可达 1378 行)。
59
+
60
+ scale-aware mode 让 trivial change 走 light mode,避免:
61
+
62
+ - 文档冗长降低 review 体验
63
+ - AI 单次输出长度边界压力
64
+ - "为了 TDD 而 TDD" 形式主义
65
+
66
+ ## File Structure
67
+
68
+ Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.
69
+
70
+ - Design units with clear boundaries and well-defined interfaces. Each file should have one clear responsibility.
71
+ - You reason best about code you can hold in context at once, and your edits are more reliable when files are focused. Prefer smaller, focused files over large ones that do too much.
72
+ - Files that change together should live together. Split by responsibility, not by technical layer.
73
+ - In existing codebases, follow established patterns. If the codebase uses large files, don't unilaterally restructure - but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.
74
+
75
+ This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
76
+
77
+ ## Bite-Sized Task Granularity
78
+
79
+ **Each step is one action (2-5 minutes):**
80
+
81
+ - "Write the failing test" - step
82
+ - "Run it to make sure it fails" - step
83
+ - "Implement the minimal code to make the test pass" - step
84
+ - "Run the tests and make sure they pass" - step
85
+ - "Commit" - step
86
+
87
+ ## Plan Document Header
88
+
89
+ **Every plan MUST start with this header:**
90
+
91
+ ```markdown
92
+ # [Feature Name] Implementation Plan
93
+
94
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use forge:subagent-driven-development to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. (forge v0.1 不提供 inline executing 模式,统一用 subagent 派发)
95
+
96
+ **Goal:** [One sentence describing what this builds]
97
+
98
+ **Architecture:** [2-3 sentences about approach]
99
+
100
+ **Tech Stack:** [Key technologies/libraries]
101
+
102
+ ---
103
+ ```
104
+
105
+ ## Task Structure
106
+
107
+ ````markdown
108
+ ### Task N: [Component Name]
109
+
110
+ **Files:**
111
+
112
+ - Create: `exact/path/to/file.py`
113
+ - Modify: `exact/path/to/existing.py:123-145`
114
+ - Test: `tests/exact/path/to/test.py`
115
+
116
+ - [ ] **Step 1: Write the failing test**
117
+
118
+ ```python
119
+ def test_specific_behavior():
120
+ result = function(input)
121
+ assert result == expected
122
+ ```
123
+
124
+ - [ ] **Step 2: Run test to verify it fails**
125
+
126
+ Run: `pytest tests/path/test.py::test_name -v`
127
+ Expected: FAIL with "function not defined"
128
+
129
+ - [ ] **Step 3: Write minimal implementation**
130
+
131
+ ```python
132
+ def function(input):
133
+ return expected
134
+ ```
135
+
136
+ - [ ] **Step 4: Run test to verify it passes**
137
+
138
+ Run: `pytest tests/path/test.py::test_name -v`
139
+ Expected: PASS
140
+
141
+ - [ ] **Step 5: Commit**
142
+
143
+ ```bash
144
+ git add tests/path/test.py src/path/file.py
145
+ git commit -m "feat: add specific feature"
146
+ ```
147
+ ````
148
+
149
+ ## No Placeholders
150
+
151
+ Every step must contain the actual content an engineer needs. These are **plan failures** — never write them:
152
+
153
+ - "TBD", "TODO", "implement later", "fill in details"
154
+ - "Add appropriate error handling" / "add validation" / "handle edge cases"
155
+ - "Write tests for the above" (without actual test code)
156
+ - "Similar to Task N" (repeat the code — the engineer may be reading tasks out of order)
157
+ - Steps that describe what to do without showing how (code blocks required for code steps)
158
+ - References to types, functions, or methods not defined in any task
159
+
160
+ ## Remember
161
+
162
+ - Exact file paths always
163
+ - Complete code in every step — if a step changes code, show the code
164
+ - Exact commands with expected output
165
+ - DRY, YAGNI, TDD, frequent commits
166
+
167
+ ## Path Pre-flight Verify(plan-v1.1 Task 6 加 — Pattern X #2/#3/#4 实证)
168
+
169
+ **Trigger**:plan writer 起草 plan 时引用 file path / yaml 名 / skill 名 / SKILL.md §X.Y 字面位置。
170
+
171
+ **Required action**:**plan writer 起草 plan 前必跑 grep verify** path / yaml / skill / section 真实存在;**不假定 prefix 或路径**(忌"我以为在 .claude/skills/")。
172
+
173
+ **Why**(Pattern X #2/#3/#4 累计实证 — REINFORCE Pattern S):
174
+
175
+ - **plan-9z plan v1 起草字面错 4 处**:
176
+ - 假定 `.claude/skills/writing-skills/` prefix(**实际** `skills/writing-skills/` 无 prefix — 顶层 skills/)
177
+ - 假定 `main-agent-stop.yaml` 名(**实际** merge 进 SDD yaml `subagent-driven-development.yaml`)
178
+ - 假定 `forge:subagent-driven-discipline` §"STOP Triggers"(**实际** 段在 `forge:subagent-driven-development`)
179
+ - plan-9z Task 4/5 实施第一步 grep 真实路径才发现(implementer commit 字面用真实路径,但 plan v1 字面错保留)
180
+ - **plan-v1.1 Task 0 起草自身同款实证**:
181
+ - v1 假定 `.claude/skills/writing-plans/` prefix(**实际** `skills/writing-plans/SKILL.md` 顶层 skills/ 无 prefix)
182
+ - v3 起草时 plan writer 自身 grep verify 才 catch + 修(plan-v1.1 §14 v3 起草过程 self-aware retrospect)
183
+ - **root cause** 是 plan writer 同源审查盲点(Pattern S),不是 implementer 错;Codex external review 也兜底找到字面错
184
+
185
+ **Plan writer checklist(起草 plan 前 — 不眼测,跑 grep)**:
186
+
187
+ ```bash
188
+ # 1. 引用的每个 file path 都跑 ls verify
189
+ ls .claude/skills/<scope-skill>/SKILL.md # 路径是否存在(对 .claude/ 下 skill)
190
+ ls skills/<scope-skill>/SKILL.md # 路径是否存在(对顶层 skills/ 下 skill — 无 .claude/ prefix)
191
+
192
+ # 2. 引用的 section §X.Y 字面是否存在
193
+ grep -n "<section-title>" <skill-path> # section 字面是否在 SKILL.md 内
194
+
195
+ # 3. 引用的 yaml 文件名是否存在
196
+ grep -rn "<yaml-name>" forge-eval/scenarios/ # yaml 文件名是否存在
197
+ ls forge-eval/scenarios/<yaml-name>.yaml # yaml 路径是否存在
198
+
199
+ # 4. 引用的 file:line 字面是否在 file 内
200
+ sed -n '<line>,<line+5>p' <file-path> # 实际看 line range 内容是否符 plan claim
201
+ ```
202
+
203
+ 若 verify 失败 → **改 plan 字面用真实路径 / yaml / section**;不假定 prefix。
204
+
205
+ **Implementer 兜底**(双层防护):
206
+
207
+ 若 plan 字面与实际路径不符,implementer 第一步 grep 真实路径 verify(沿 `forge:subagent-driven-discipline §2.1.1 External Protocol Assumption Verify` 协议)— 但 implementer commit 字面用真实路径,plan v1 字面错保留 → **plan writer 仍是 root cause 防线**;implementer 兜底不能 substitute plan writer verify。
208
+
209
+ **参考**:`forge:subagent-driven-discipline §2.1.1 External Protocol Assumption Verify`(implementer verify 协议);
210
+ plan-v1.1 Task 0 `docs/plans/2026-05-14-plan-v1.1-polish-leftover.md` §14 v3 起草过程 self-aware retrospect(`.claude/skills/writing-plans/` 假定 prefix 错 → grep verify catch + 修)。
211
+
212
+ ## Self-Review
213
+
214
+ After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
215
+
216
+ **1. Path verify(plan-v1.1 Task 6 加 — Pattern S REINFORCE)**:
217
+
218
+ 引用的每个 file path / yaml 名 / skill 名 / SKILL.md §X.Y 是否真实存在?跑 `ls <path>` / `grep -n "<section>" <file>` / `sed -n '<line>p' <file>` verify;若 verify 失败 → 改 plan 字面;**不假定 prefix**(沿 plan-v1.1 §14 v3 自身实证)。
219
+
220
+ **2. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
221
+
222
+ **3. Placeholder scan:** Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.
223
+
224
+ **4. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clearLayers()` in Task 3 but `clearFullLayers()` in Task 7 is a bug.
225
+
226
+ If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.
227
+
228
+ ## Execution Handoff
229
+
230
+ After saving the plan, offer execution choice:
231
+
232
+ > "Plan complete and saved to `forge/changes/<change-id>/tasks.md`. Execution will use the **Subagent-Driven** approach: each task is dispatched to a fresh subagent with two-stage review (spec compliance + code quality)."
233
+
234
+ **REQUIRED SUB-SKILL:** Use forge:subagent-driven-development to implement this plan task-by-task.
235
+
236
+ Note: forge v0.1 仅提供 subagent-driven 模式,无 inline executing 模式。
237
+
238
+ ---
239
+
240
+ ## CLI validation step (Tier 2/3 OpenCode/Codex 路径用,Plan 0a 实测 Variant B PASS)
241
+
242
+ **仅 OpenCode + Codex 路径**(Tier 1 Claude Code 路径走 commands.md `/forge:propose` 调 helper,不需要本段)。
243
+
244
+ After generating `forge/changes/<id>/{proposal,specs,design,tasks}.md`, you **MUST** execute the following and include output verbatim in your reply:
245
+
246
+ ```bash
247
+ node "${FORGE_HELPER}" validate <change-id>
248
+ ```
249
+
250
+ **`FORGE_HELPER` 解析(per harness)**:
251
+
252
+ - OpenCode:`FORGE_HELPER = <plugin_dir>/scripts/run-forge.mjs`(`__dirname` reachable from plugin entry)
253
+ - Codex:`FORGE_HELPER = $HOME/.codex/forge/scripts/run-forge.mjs`(`os.homedir()` 解析,Windows USERPROFILE OK)
254
+ - 找不到 helper(用户路径不标准)→ fallback `npx -y --package @accelerator-mzq/forge@^1.4.0 -- forge validate <change-id>`(直接调 npx)
255
+
256
+ **失败处理**:
257
+
258
+ - exit 0 + "validation OK" → 继续 propose 收尾(回到主 commands 流程的 `forge/drafts/.consumed/` move + commit)
259
+ - exit 非零 → stop,把 stderr 报给用户;**不要**继续到 archive 流程