@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,214 @@
1
+ ---
2
+ name: forge:writing-skills
3
+ description: Use when creating or modifying a forge skill — RED-GREEN-REFACTOR discipline + frontmatter conventions + forge-eval integration so new skills actually shape AI behavior in forge contexts
4
+ ---
5
+
6
+ # forge writing-skills
7
+
8
+ > **本 skill 自身的初次开发使用 superpowers 上游 writing-skills 完成(bootstrap exception,沿 design §2.9.5)**;后续修订使用 forge:writing-skills 自身。元数据 `bootstrap_exception` 标记在 `forge-eval/scenarios/writing-skills.yaml` 顶层注释(yaml 文档元数据,forge-eval runner 忽略未识别 key)。
9
+
10
+ ## 方法论基础(reference superpowers 上游)
11
+
12
+ writing-skills 的核心论点和 RED-GREEN-REFACTOR 映射沿 superpowers 上游 `writing-skills/SKILL.md` line 10-45。**REQUIRED BACKGROUND**:必须先懂 `forge:test-driven-development`。
13
+
14
+ 核心论点(superpowers 上游 line 10-18):
15
+
16
+ - **"Writing skills IS Test-Driven Development applied to process documentation"**
17
+ - 不变量(line 16):**If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing**
18
+
19
+ TDD 到 skill 文档的映射:
20
+
21
+ | TDD 概念 | Skill 创建 |
22
+ | ------------------- | ----------------------------------------------- |
23
+ | Test case | Pressure scenario with subagent |
24
+ | Production code | SKILL.md |
25
+ | Test fails (RED) | Agent violates rule **without** skill bootstrap |
26
+ | Test passes (GREEN) | Agent complies with skill **present** |
27
+ | Refactor | Close rationalization loopholes |
28
+
29
+ ## When to Use
30
+
31
+ - 创建一个新 forge skill(`skills/<name>/SKILL.md`)
32
+ - 修订一个已有 forge skill 的 behavior(不是 typo / 加示例)
33
+ - forge-eval baseline 重跑发现某 skill 失效需要 REFACTOR
34
+
35
+ ## When NOT to Use
36
+
37
+ - 写 forge plan(用 superpowers 上游 writing-plans 或 `forge:writing-plans`)
38
+ - 写 `commands/*.md` slash command(slash 是 CLI 薄包装,不是行为塑形 skill)
39
+ - 修一个 typo / 加一行示例(non-behavior change,跳协议)
40
+
41
+ ## forge 化适配(五步骤)
42
+
43
+ > 本五步骤走 **现有 forge-eval runner 双轨设计**(`forge-eval/runner.ts:106-131` 对每个 scenario 自动 RED+GREEN 配对,`withSkill: false/true` 切换 bootstrap)。**不引入** design §2.9.4 提的 `phase: red/green` / `expected_judge_score_max` / `expected_violations` / `bootstrap_skill` 字段 — 这些当前 runner 不读,留 v1.0 之后独立 sub-plan reconcile(详 plan-9i §8.4.1)。
44
+
45
+ ### 步骤 1:先写 scenarios + 最小骨架 SKILL.md(baseline 验证)
46
+
47
+ 新建 `forge-eval/scenarios/<new-skill-name>.yaml`,**每个 scenario 同时是 RED + GREEN 的输入**(runner 自动跑两次):
48
+
49
+ - 在 `scenarios:` 数组写至少 1 个 scenario,含 `id` / `turns[]` / `judge_rubric`(沿 `forge-eval/types.ts:13-46` schema)
50
+ - `judge_rubric` 同时覆盖 RED 评判(baseline 没 skill 时该得多少分)+ GREEN 评判(有 skill 后该得多少分)— 一段 rubric 文字覆盖两侧
51
+ - 用 `must_match` / `must_not_match` 锁结构性信号(RED + GREEN 共享断言)
52
+ - **同步创建 `skills/<new-skill-name>/SKILL.md` 最小骨架**(~10-15 行,仅 frontmatter + 占位 body)— 让 runner GREEN leg 不抛 ENOENT(沿 `loadSkillBootstrap` `readFile` 路径)
53
+
54
+ > **NOTE(Pattern O — plan-9z polish;plan-9f / plan-9i 实证)**:registry 扩展(`SKILL_NAMES` 数组扩 + hardcoded 断言改)+ scenarios yaml + 最小骨架 SKILL.md 必须**一起 commit**(同 commit 内含 vitest GREEN baseline),分开 commit 触发 `forge-eval` runner `it.each` ENOENT(因 runner 1:1 yaml→test 加载;沿 `runner.ts:106-131` + `registry.ts` `SKILL_NAMES` 数组)。实证:plan-9i Task 0 commit `92de387` + plan-9f Task 0+1 合并 commit `1d220ef`。
55
+
56
+ - 跑 `pnpm build && pnpm eval:skill <name>` → 读 `eval-report.md` 总览表 `RED avg` 列 ≤ 5
57
+
58
+ > **HARD TRIGGER(Pattern R — plan-9z polish;plan-9f v1 vague-idea RED 6.0 实证)**:若总览表**任一 scenario RED avg > 5** → **立即 REFACTOR scenarios(不是 SKILL.md)**:提升 forge-specific 维度权重 / 收紧 judge rubric / 加 must_not_match / 加判分锚点段;再跑 baseline 直到所有 RED ≤ 5。**不响应 RED > 5 → forge-eval 验证强度失效**(走形)。
59
+
60
+ - **如果 RED 不失败 → skill 没必要**(沿 superpowers 上游 writing-skills line 16 不变量);要么收紧 must_match / judge_rubric,要么放弃此 skill
61
+ - 此阶段 delta 接近 0 是预期(骨架不教协议,GREEN 也低)
62
+
63
+ #### 步骤 1.1 Pattern P — rubric 维度权重设计原则(plan-9z polish)
64
+
65
+ `judge_rubric` 各维度权重设计的核心问题:
66
+
67
+ > "baseline AI(无本 skill)能否在此维度做对?"
68
+
69
+ - **能做对** → 该维度**权重低**(否则即使 RED 也 PASS,假性 GREEN);
70
+ - **做不对** → 该维度**权重高**(forge-specific 维度高权重 = baseline AI 必然失分锚点)。
71
+
72
+ 实证:plan-9f v1 scenarios 1/3 pair_pass 假性 GREEN(option-compare skeleton GREEN=8.0)— baseline AI 早能写 option-compare,该维度不应作为高权重锚点;sub-plan v2 修订把 forge-specific 维度(must_match SKILL.md 强制字面)权重提升后 RED 0.0 / GREEN 6.0 / delta 6.0 pair_pass=true。
73
+
74
+ ### 步骤 2:写完整 SKILL.md(production code)
75
+
76
+ frontmatter 严格约束(详 `frontmatter-conventions.md`):
77
+
78
+ - `name`:小写 + 连字符,无前缀(`forge:` namespace 由 plugin manifest 隐含;`scripts/copy-templates.mjs:49` reverse-sync 时自动加 `forge:` 前缀写入 `src/core/templates/skills/`)
79
+ - `description`:第三人称 + `Use when...` 开头 + 描述 **触发条件**(NOT skill 做什么)+ 500 字内
80
+ - 不允许 frontmatter 含 process 描述(描述 process 是 body 的事;包含 "detect/guard/prevent/find/check" 动词作主语就违反规则)
81
+
82
+ **body 必须严格按以下模板**(不是建议,是强制结构):
83
+
84
+ ```markdown
85
+ ---
86
+ name: <new-skill-name>
87
+ description: Use when <triggering condition> — <one-line purpose>
88
+ ---
89
+
90
+ # forge <new-skill-name>
91
+
92
+ ## Overview
93
+
94
+ <1-2 句核心论点>
95
+
96
+ ## Methodology (reference superpowers 上游)
97
+
98
+ **REQUIRED BACKGROUND**: <prerequisite skill,如 forge:test-driven-development>。
99
+
100
+ 核心论点(沿 superpowers 上游 writing-skills line 16 不变量):
101
+
102
+ - "If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing"
103
+
104
+ ## When to Use
105
+
106
+ - <具体触发场景 1>
107
+ - <具体触发场景 2>
108
+
109
+ ## When NOT to Use
110
+
111
+ - <显式不触发条件 1>
112
+ - <显式不触发条件 2>
113
+
114
+ ## 主流程
115
+
116
+ <numbered steps 或 dot graph>
117
+
118
+ ## forge-specific 反向加固
119
+
120
+ forge skill 与 superpowers 上游差异:假设 AI 在 <场景> 下会偷懒或撒谎。
121
+ 本 skill 涉及此场景必须:
122
+
123
+ 1. <反向加固机制 1>(CLI fence / fixture / RED scenario)
124
+ 2. <反向加固机制 2>
125
+
126
+ ## 红旗清单 — STOP and Start Over
127
+
128
+ | 想法 | 现实 |
129
+ | --------------------- | ----------------- |
130
+ | "<rationalization 1>" | <reality counter> |
131
+ | "<rationalization 2>" | <reality counter> |
132
+ ```
133
+
134
+ **4 个必须出现的 section**:
135
+
136
+ 1. `## Methodology (reference superpowers 上游)` — 显式引用 superpowers 上游 writing-skills line 16 不变量
137
+ 2. `## When to Use` / `## When NOT to Use` — 对称写
138
+ 3. `## forge-specific 反向加固` — AI 不可信前提的具体加固
139
+ 4. `## 红旗清单` — anti-pattern table
140
+
141
+ **不能** 写 TODO 占位符 body — 必须填实际内容。SKILL.md skeleton 只在 Task 1 步骤 1 baseline 验证期允许;production 阶段(本步骤)body 必须完整。
142
+
143
+ ### 步骤 3:跑 GREEN leg 验证 skill 起作用
144
+
145
+ ```bash
146
+ pnpm build && pnpm eval:skill <new-skill-name>
147
+ ```
148
+
149
+ 读 `eval-report.md` 看:
150
+
151
+ - GREEN leg avg judge ≥ 6.5
152
+ - delta = GREEN avg - RED avg ≥ 1.5(沿 `forge-eval/compare.ts:14` `DEFAULT_DELTA_THRESHOLD`)
153
+ - pair pass = `green.scenarioPass && delta >= 1.5`(沿 `compare.ts:28`)
154
+
155
+ 若 GREEN 评分 < 6 或 delta < 1.5 → SKILL.md 写得不到位,回步骤 2 加红旗清单 / 改示例 / 加反向加固段。
156
+
157
+ ### 步骤 4:REFACTOR(close rationalization loopholes)
158
+
159
+ `eval-report.md` 失败详情段含失败 GREEN turn 的 `judge.score` + `judge.reasoning`(沿 `forge-eval/report.ts:45-55`)。**注意**:report **不含** `assistantResponse` 完整文本字段。
160
+
161
+ 实操路径:
162
+
163
+ - 读 `eval-report.md` 失败详情段:`grep -A 5 "失败 turn 列表" eval-report.md`(或直接 `cat`)
164
+ - 看 judge reasoning 推 AI 说辞(如 reasoning 提到 "AI 把这个当 quick prototype" / "AI 妥协跳 RED 直接写")
165
+ - 在 SKILL.md 加红旗清单显式 plug — 把这些借口列为 anti-pattern
166
+ - 重跑 `pnpm eval:skill <name>` 验证 plug 起作用(分数提高 / must_not_match 不再命中)
167
+
168
+ ### 步骤 5:集成到 using-forge bootstrap(可选)
169
+
170
+ - **process discipline 类**(必须主动 invoke,如 verifying-three-dimensions / receiving-code-review):加到 `skills/using-forge/SKILL.md` 的 skill chain 表
171
+ - **reference / utility 类**(用户主动 invoke,如 writing-plans):不加 bootstrap,只在 README / docs 引用
172
+
173
+ **registry 部署强约束**(每加新 forge skill 必须):
174
+
175
+ 1. 在 `src/core/templates/skills/index.ts` 的 `SKILL_NAMES` 数组追加 `'<new-skill-name>'`
176
+ 2. 同步改 hardcoded 12-item 断言(`tests/core/templates/registry.test.ts:8/13` + `tests/smoke.test.ts:44`)→ 改为新数量 + 完整数组
177
+ 3. 跑 `pnpm build` 让 reverse-sync 自动生成 `src/core/templates/skills/<name>.md`(自动加 `forge:` 前缀)
178
+ 4. **不要手 `cp skills/.../SKILL.md src/core/templates/...`** — 直接复制不会做 `forge:` 前缀 transform,违反 `tests/core/templates/skills.test.ts:12` 断言
179
+
180
+ ## forge-specific 反向加固
181
+
182
+ forge skill 与 superpowers 上游的关键差异:**forge 假设 AI 在 verify / archive / process_evidence 等场景下会偷懒或撒谎**(沿 design §2.7.5 四类伪造攻击)。新 forge skill 涉及这些场景时必须:
183
+
184
+ 1. **不能假设 AI 会自我约束**:每条规则配一个反向加固机制(CLI fence / fixture 测试 / forge-eval RED scenario 验证 baseline)
185
+ 2. **不能用"AI 自决"作为唯一防线**:严肃问题必须工具独立验证(沿 design §2.3.3 critical_candidate 协议)
186
+ 3. **不能跳 forge-eval RED**:超 200 行 / 跨多文件 / 涉及伪造攻击的 skill 必须 RED + GREEN + REFACTOR 全套(无简化路径)
187
+
188
+ ## 红旗清单 — STOP and Start Over
189
+
190
+ 这些念头说明你正在 rationalize,STOP:
191
+
192
+ | 想法 | 现实 |
193
+ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
194
+ | "这个 skill 短/简单,跳 RED scenario 吧" | RED scenario 是验证 skill 必要性的唯一办法。跳 RED = 不知道 skill 教对没 |
195
+ | "时间紧,直接写 SKILL.md 跳 RED" | 时间压力下跳 RED 是 baseline AI 的典型失败模式。如果你正想这样做,说明你正是 RED scenario 要捕获的对象 |
196
+ | "frontmatter description 写清楚 skill 做什么" | 错。description 写**什么时候用**(`Use when...`);做什么留给 body |
197
+ | "description 用 'detect/guard/prevent/find/check' 动词开头" | 错。这些是 process 动词,写在 description 违反规则(plan §3 baseline scenario 已实测此 anti-pattern) |
198
+ | "superpowers 上游就够了,forge 直接复制" | v0.2 fusion 的失败模式 — 复制不验证 forge 路径下是否生效 |
199
+ | "GREEN 跑了能过就行,REFACTOR 跳过" | REFACTOR 是堵 AI 借口的关键步骤;跳过 = skill 在压力场景下会失效 |
200
+ | "我用 forge:writing-skills 自己开发 forge:writing-skills" | 逻辑悖论。第一个开发用 superpowers 上游 writing-skills(bootstrap exception) |
201
+ | "手 cp SKILL.md 到 src/core/templates/" | 错。reverse-sync 由 `pnpm build` 做,手 cp 不加 `forge:` 前缀,触发 `tests/core/templates/skills.test.ts:12` 断言失败 |
202
+
203
+ **全部触发表示:回归 RED-GREEN-REFACTOR 五步骤,从步骤 1 开始**。
204
+
205
+ ## 配套文件
206
+
207
+ - `frontmatter-conventions.md` — name / description 严格规范 + 反例(由 Task 3 创建)
208
+ - `forge-eval-integration.md` — yaml schema 字段细节 + runner 调用 + CI trigger(由 Task 4 创建)
209
+
210
+ ## Bottom Line
211
+
212
+ **Skills are tested documentation, not memos.** 不跑 RED-GREEN-REFACTOR + forge-eval 验证,你写的是不被 AI 遵循的 memo,不是 skill。
213
+
214
+ 新 skill 不跑 forge-eval delta ≥ 1.5 → 等于没写。
@@ -0,0 +1,41 @@
1
+ /** Reporter 类型 union(沿 ForgeConfig['test'].reporter) */
2
+ export type ReporterType = 'junit' | 'tap' | 'vitest-json';
3
+ /** 单 test case 解析结果 */
4
+ export interface TestCaseResult {
5
+ /** 相对 repo 根的测试文件路径(可能为空字符串若 reporter 不提供) */
6
+ test_file: string;
7
+ /** 测试名(对应 describe/it 嵌套全名) */
8
+ test_name: string;
9
+ /** 'pass' | 'fail' | 'skip' */
10
+ status: 'pass' | 'fail' | 'skip';
11
+ /** 若 fail,失败类型(对应 ExpectedFailure.failure_type) */
12
+ failure_type?: 'assertion' | 'timeout' | 'error' | 'not-implemented';
13
+ /** 错误消息(若 fail) */
14
+ message?: string;
15
+ }
16
+ /** 完整 reporter 解析结果 */
17
+ export interface ReporterResult {
18
+ /** 所有 test case */
19
+ tests: TestCaseResult[];
20
+ /** 总数 */
21
+ totalCount: number;
22
+ /** pass 计数 */
23
+ passCount: number;
24
+ /** fail 计数 */
25
+ failCount: number;
26
+ /** skip 计数 */
27
+ skipCount: number;
28
+ }
29
+ /**
30
+ * parseReporter — 根据 reporter 类型 dispatch 解析
31
+ *
32
+ * @param reportPath — reporter 文件绝对路径
33
+ * @param type — reporter 类型('junit' | 'tap' | 'vitest-json')
34
+ * @returns Promise<ReporterResult> 统一格式
35
+ * @throws Error 若文件不存在 / 解析失败
36
+ */
37
+ export declare function parseReporter(reportPath: string, type: ReporterType): Promise<ReporterResult>;
38
+ export { parseJUnit } from './junit.js';
39
+ export { parseTAP } from './tap.js';
40
+ export { parseVitestJSON } from './vitest-json.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/test-reporters/index.ts"],"names":[],"mappings":"AAcA,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC;AAE3D,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,mDAAmD;IACnD,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,iBAAiB,CAAC;IACrE,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CAczB;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,39 @@
1
+ // src/core/test-reporters/index.ts — plan-9g Task 2.3
2
+ // parseReporter(path, type) factory + ReporterResult 统一类型
3
+ // 沿 brainstorm spec 决策点 1:三档各引独立 npm 包
4
+ //
5
+ // 三档:
6
+ // - junit → fast-xml-parser wrap(vitest/jest/mocha 通用)
7
+ // - tap → tap-parser wrap(node:test)
8
+ // - vitest-json → 原生 JSON.parse + Vitest schema
9
+ import { readFile } from 'node:fs/promises';
10
+ import { parseJUnit } from './junit.js';
11
+ import { parseTAP } from './tap.js';
12
+ import { parseVitestJSON } from './vitest-json.js';
13
+ /**
14
+ * parseReporter — 根据 reporter 类型 dispatch 解析
15
+ *
16
+ * @param reportPath — reporter 文件绝对路径
17
+ * @param type — reporter 类型('junit' | 'tap' | 'vitest-json')
18
+ * @returns Promise<ReporterResult> 统一格式
19
+ * @throws Error 若文件不存在 / 解析失败
20
+ */
21
+ export async function parseReporter(reportPath, type) {
22
+ const content = await readFile(reportPath, 'utf8');
23
+ switch (type) {
24
+ case 'junit':
25
+ return parseJUnit(content); // 注:parseJUnit 返 ReporterResult 同步,await 不影响
26
+ case 'tap':
27
+ return parseTAP(content); // async Promise(M-1 修:去 await,no-return-await rule)
28
+ case 'vitest-json':
29
+ return parseVitestJSON(content);
30
+ default: {
31
+ const _exhaustive = type;
32
+ throw new Error(`Unknown reporter type: ${String(_exhaustive)}`);
33
+ }
34
+ }
35
+ }
36
+ export { parseJUnit } from './junit.js';
37
+ export { parseTAP } from './tap.js';
38
+ export { parseVitestJSON } from './vitest-json.js';
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/test-reporters/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,0DAA0D;AAC1D,uCAAuC;AACvC,EAAE;AACF,MAAM;AACN,0DAA0D;AAC1D,0CAA0C;AAC1C,kDAAkD;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiCnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,IAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,6CAA6C;QAC3E,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,oDAAoD;QAChF,KAAK,aAAa;YAChB,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReporterResult } from './index.js';
2
+ /**
3
+ * parseJUnit — 解析 JUnit XML 字符串
4
+ * @param xmlContent JUnit XML 字符串
5
+ * @returns ReporterResult
6
+ */
7
+ export declare function parseJUnit(xmlContent: string): ReporterResult;
8
+ //# sourceMappingURL=junit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junit.d.ts","sourceRoot":"","sources":["../../../src/core/test-reporters/junit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAqDjE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CA4E7D"}
@@ -0,0 +1,94 @@
1
+ // src/core/test-reporters/junit.ts — plan-9g Task 2.3
2
+ // JUnit XML reporter 解析(沿 vitest/jest/mocha 通用 schema)
3
+ // fast-xml-parser ^4 wrap
4
+ import { XMLParser } from 'fast-xml-parser';
5
+ const parser = new XMLParser({
6
+ ignoreAttributes: false,
7
+ attributeNamePrefix: '@_',
8
+ parseAttributeValue: false,
9
+ isArray: (name) => name === 'testsuite' || name === 'testcase',
10
+ });
11
+ /**
12
+ * parseJUnit — 解析 JUnit XML 字符串
13
+ * @param xmlContent JUnit XML 字符串
14
+ * @returns ReporterResult
15
+ */
16
+ export function parseJUnit(xmlContent) {
17
+ let doc;
18
+ try {
19
+ doc = parser.parse(xmlContent);
20
+ }
21
+ catch (e) {
22
+ throw new Error(`JUnit XML parse failed: ${e instanceof Error ? e.message : String(e)}`);
23
+ }
24
+ // 兼容 <testsuites> 包裹 vs 直接 <testsuite>
25
+ const suites = doc.testsuites?.testsuite
26
+ ? Array.isArray(doc.testsuites.testsuite)
27
+ ? doc.testsuites.testsuite
28
+ : [doc.testsuites.testsuite]
29
+ : doc.testsuite
30
+ ? Array.isArray(doc.testsuite)
31
+ ? doc.testsuite
32
+ : [doc.testsuite]
33
+ : [];
34
+ const tests = [];
35
+ for (const suite of suites) {
36
+ if (!suite.testcase)
37
+ continue;
38
+ const cases = Array.isArray(suite.testcase) ? suite.testcase : [suite.testcase];
39
+ for (const tc of cases) {
40
+ const test = {
41
+ test_file: tc['@_file'] ?? tc['@_classname'] ?? '',
42
+ test_name: tc['@_name'],
43
+ status: 'pass',
44
+ };
45
+ if (tc.skipped !== undefined) {
46
+ test.status = 'skip';
47
+ }
48
+ else if (tc.failure !== undefined || tc.error !== undefined) {
49
+ // C-1 修:fast-xml-parser 对 <failure/> 自闭合空元素返 ""(empty string),
50
+ // 直接 truthy 判断会误入 else 分支 + 越界拿 undefined → TypeError;
51
+ // 用 typeof === 'object' guard 排除空字符串/null,兜底空对象不抛错
52
+ const rawFailure = tc.failure ?? null;
53
+ const rawError = tc.error ?? null;
54
+ const failNode = rawFailure && typeof rawFailure === 'object'
55
+ ? Array.isArray(rawFailure)
56
+ ? (rawFailure[0] ?? { '@_message': '', '#text': '', '@_type': '' })
57
+ : rawFailure
58
+ : rawError && typeof rawError === 'object'
59
+ ? Array.isArray(rawError)
60
+ ? (rawError[0] ?? { '@_message': '', '#text': '', '@_type': '' })
61
+ : rawError
62
+ : { '@_message': '', '#text': '', '@_type': '' }; // 空元素/无内容兜底
63
+ test.status = 'fail';
64
+ test.message = failNode['@_message'] ?? failNode['#text'] ?? '';
65
+ // failure type 映射(JUnit 标准 type 字段 → ExpectedFailure.failure_type)
66
+ const rawType = (failNode['@_type'] ?? '').toLowerCase();
67
+ if (rawType.includes('assertion') || rawType.includes('expect')) {
68
+ test.failure_type = 'assertion';
69
+ }
70
+ else if (rawType.includes('timeout')) {
71
+ test.failure_type = 'timeout';
72
+ }
73
+ else if (rawType.includes('notimplemented') || rawType.includes('skip')) {
74
+ test.failure_type = 'not-implemented';
75
+ }
76
+ else {
77
+ test.failure_type = 'error';
78
+ }
79
+ }
80
+ tests.push(test);
81
+ }
82
+ }
83
+ const passCount = tests.filter((t) => t.status === 'pass').length;
84
+ const failCount = tests.filter((t) => t.status === 'fail').length;
85
+ const skipCount = tests.filter((t) => t.status === 'skip').length;
86
+ return {
87
+ tests,
88
+ totalCount: tests.length,
89
+ passCount,
90
+ failCount,
91
+ skipCount,
92
+ };
93
+ }
94
+ //# sourceMappingURL=junit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junit.js","sourceRoot":"","sources":["../../../src/core/test-reporters/junit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ReporterResult } from './index.js';
2
+ /**
3
+ * parseTAP — 解析 TAP stream 字符串
4
+ *
5
+ * TAP 格式:
6
+ * TAP version 13
7
+ * 1..N
8
+ * ok 1 - testname
9
+ * not ok 2 - testname2
10
+ * ---
11
+ * message: 'assertion failed'
12
+ * ...
13
+ *
14
+ * @param tapContent TAP stream 字符串
15
+ * @returns Promise<ReporterResult>
16
+ */
17
+ export declare function parseTAP(tapContent: string): Promise<ReporterResult>;
18
+ //# sourceMappingURL=tap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../../src/core/test-reporters/tap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAiBjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAiDpE"}
@@ -0,0 +1,73 @@
1
+ // src/core/test-reporters/tap.ts — plan-9g Task 2.3
2
+ // TAP stream reporter 解析(node:test --reporter=tap 用)
3
+ // tap-parser ^15 wrap
4
+ //
5
+ // Observation(plan latent bug #2):plan line 1825 写 `import Parser from 'tap-parser'`,
6
+ // 但 tap-parser v15 无 default export;自修为 `import { Parser } from 'tap-parser'`
7
+ import { Parser } from 'tap-parser';
8
+ /**
9
+ * parseTAP — 解析 TAP stream 字符串
10
+ *
11
+ * TAP 格式:
12
+ * TAP version 13
13
+ * 1..N
14
+ * ok 1 - testname
15
+ * not ok 2 - testname2
16
+ * ---
17
+ * message: 'assertion failed'
18
+ * ...
19
+ *
20
+ * @param tapContent TAP stream 字符串
21
+ * @returns Promise<ReporterResult>
22
+ */
23
+ export function parseTAP(tapContent) {
24
+ return new Promise((resolve, reject) => {
25
+ const tests = [];
26
+ const parser = new Parser();
27
+ parser.on('assert', (assert) => {
28
+ const test = {
29
+ test_file: '', // TAP 不含 test_file 信息
30
+ test_name: assert.name,
31
+ status: 'pass',
32
+ };
33
+ if (assert.skip || assert.todo) {
34
+ test.status = 'skip';
35
+ }
36
+ else if (!assert.ok) {
37
+ test.status = 'fail';
38
+ const diag = assert.diag ?? {};
39
+ test.message = diag.message ?? '';
40
+ const rawType = (diag.type ?? '').toLowerCase();
41
+ if (rawType.includes('assertion')) {
42
+ test.failure_type = 'assertion';
43
+ }
44
+ else if (rawType.includes('timeout')) {
45
+ test.failure_type = 'timeout';
46
+ }
47
+ else if (diag.expected !== undefined || diag.actual !== undefined) {
48
+ test.failure_type = 'assertion';
49
+ }
50
+ else {
51
+ test.failure_type = 'error';
52
+ }
53
+ }
54
+ tests.push(test);
55
+ });
56
+ parser.on('complete', () => {
57
+ const passCount = tests.filter((t) => t.status === 'pass').length;
58
+ const failCount = tests.filter((t) => t.status === 'fail').length;
59
+ const skipCount = tests.filter((t) => t.status === 'skip').length;
60
+ resolve({
61
+ tests,
62
+ totalCount: tests.length,
63
+ passCount,
64
+ failCount,
65
+ skipCount,
66
+ });
67
+ });
68
+ parser.on('error', (e) => reject(new Error(`TAP parse failed: ${e.message}`)));
69
+ parser.write(tapContent);
70
+ parser.end();
71
+ });
72
+ }
73
+ //# sourceMappingURL=tap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../src/core/test-reporters/tap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ReporterResult } from './index.js';
2
+ /**
3
+ * parseVitestJSON — 解析 Vitest JSON reporter 字符串
4
+ * @param jsonContent Vitest --reporter=json 输出
5
+ * @returns ReporterResult
6
+ */
7
+ export declare function parseVitestJSON(jsonContent: string): ReporterResult;
8
+ //# sourceMappingURL=vitest-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-json.d.ts","sourceRoot":"","sources":["../../../src/core/test-reporters/vitest-json.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAkCjE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA8CnE"}
@@ -0,0 +1,56 @@
1
+ // src/core/test-reporters/vitest-json.ts — plan-9g Task 2.3
2
+ // Vitest --reporter=json 原生 JSON.parse + schema
3
+ // 沿 Vitest 4.x 的 json reporter schema(2026 锁定 — brainstorm spec §9.5 留)
4
+ /**
5
+ * parseVitestJSON — 解析 Vitest JSON reporter 字符串
6
+ * @param jsonContent Vitest --reporter=json 输出
7
+ * @returns ReporterResult
8
+ */
9
+ export function parseVitestJSON(jsonContent) {
10
+ let doc;
11
+ try {
12
+ doc = JSON.parse(jsonContent);
13
+ }
14
+ catch (e) {
15
+ throw new Error(`Vitest JSON parse failed: ${e instanceof Error ? e.message : String(e)}`);
16
+ }
17
+ const tests = [];
18
+ for (const file of doc.testResults ?? []) {
19
+ for (const assertion of file.assertionResults ?? []) {
20
+ const test = {
21
+ test_file: file.name,
22
+ test_name: assertion.fullName,
23
+ status: assertion.status === 'passed' ? 'pass' : assertion.status === 'failed' ? 'fail' : 'skip',
24
+ };
25
+ if (test.status === 'fail') {
26
+ const msgs = assertion.failureMessages ?? [];
27
+ test.message = msgs.join('\n');
28
+ const msgLower = test.message.toLowerCase();
29
+ if (msgLower.includes('assertionerror') || msgLower.includes('expect')) {
30
+ test.failure_type = 'assertion';
31
+ }
32
+ else if (msgLower.includes('timeout')) {
33
+ test.failure_type = 'timeout';
34
+ }
35
+ else if (msgLower.includes('not implemented')) {
36
+ test.failure_type = 'not-implemented';
37
+ }
38
+ else {
39
+ test.failure_type = 'error';
40
+ }
41
+ }
42
+ tests.push(test);
43
+ }
44
+ }
45
+ const passCount = tests.filter((t) => t.status === 'pass').length;
46
+ const failCount = tests.filter((t) => t.status === 'fail').length;
47
+ const skipCount = tests.filter((t) => t.status === 'skip').length;
48
+ return {
49
+ tests,
50
+ totalCount: tests.length,
51
+ passCount,
52
+ failCount,
53
+ skipCount,
54
+ };
55
+ }
56
+ //# sourceMappingURL=vitest-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-json.js","sourceRoot":"","sources":["../../../src/core/test-reporters/vitest-json.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,gDAAgD;AAChD,wEAAwE;AAoCxE;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,IAAI,GAAkB,CAAC;IACvB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAkB,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,GAAmB;gBAC3B,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,SAAS,EAAE,SAAS,CAAC,QAAQ;gBAC7B,MAAM,EACJ,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;aAC3F,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC;gBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;gBAClC,CAAC;qBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBAChC,CAAC;qBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;gBAC9B,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAElE,OAAO;QACL,KAAK;QACL,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,SAAS;QACT,SAAS;QACT,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** resign-markers 单 marker 处理结果 */
2
+ export interface ResignResult {
3
+ kind: 'resigned' | 'skipped-already-v1' | 'needs-c-propose' | 'failed';
4
+ message: string;
5
+ markerPath?: string;
6
+ pendingPaths?: string[];
7
+ }
8
+ /** 一次性入口 — 对 change 目录两 marker(.verify-passed + .review-passed)处理
9
+ *
10
+ * v7 BLOCKER 1 修订:加 forgeCliPath 参数(沿调用链传到 proposeForCSimcode 真调 ack CLI)
11
+ * caller(upgrade.ts action handler)需传 dist/cli/index.js 真实路径;测试可注入 mock CLI 路径
12
+ */
13
+ export declare function resignChangeMarkers(forgeRoot: string, changeId: string, forgeCliPath: string, cliVersion?: string): Promise<ResignResult[]>;
14
+ //# sourceMappingURL=resign-markers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resign-markers.d.ts","sourceRoot":"","sources":["../../../src/core/upgrade/resign-markers.ts"],"names":[],"mappings":"AAwBA,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,UAAU,GAAE,MAAgB,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB"}