@warpgogol/forge 5.2.4 → 5.3.1

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 (590) hide show
  1. package/README.md +1 -1
  2. package/README.uk.md +8 -8
  3. package/bin/cli.ts +25 -33
  4. package/dist/bin/cli.js +21 -32
  5. package/dist/bin/cli.js.map +1 -1
  6. package/dist/os/adr/adr.module.d.ts.map +1 -1
  7. package/dist/os/adr/adr.module.js +8 -3
  8. package/dist/os/adr/adr.module.js.map +1 -1
  9. package/dist/os/adr/frontmatter-io.js +5 -5
  10. package/dist/os/adr/frontmatter-io.js.map +1 -1
  11. package/dist/os/adr/handlers/archive.d.ts.map +1 -1
  12. package/dist/os/adr/handlers/archive.js +10 -4
  13. package/dist/os/adr/handlers/archive.js.map +1 -1
  14. package/dist/os/adr/handlers/implement-stamp.d.ts.map +1 -1
  15. package/dist/os/adr/handlers/implement-stamp.js +10 -10
  16. package/dist/os/adr/handlers/implement-stamp.js.map +1 -1
  17. package/dist/os/adr/handlers/list-create.js +5 -5
  18. package/dist/os/adr/handlers/list-create.js.map +1 -1
  19. package/dist/os/adr/handlers/validate.js +1 -1
  20. package/dist/os/adr/handlers/validate.js.map +1 -1
  21. package/dist/os/audit/audit.module.js +3 -3
  22. package/dist/os/audit/audit.module.js.map +1 -1
  23. package/dist/os/audit/frontmatter-io.js +5 -5
  24. package/dist/os/audit/frontmatter-io.js.map +1 -1
  25. package/dist/os/audit/handlers/archive.d.ts.map +1 -1
  26. package/dist/os/audit/handlers/archive.js +10 -4
  27. package/dist/os/audit/handlers/archive.js.map +1 -1
  28. package/dist/os/compass/compass.module.d.ts.map +1 -1
  29. package/dist/os/compass/compass.module.js +17 -1
  30. package/dist/os/compass/compass.module.js.map +1 -1
  31. package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -1
  32. package/dist/os/compass/handlers/compass-audit-handler.js +12 -5
  33. package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
  34. package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -1
  35. package/dist/os/compass/handlers/compass-change-summary-handler.js +3 -2
  36. package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -1
  37. package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -1
  38. package/dist/os/compass/handlers/compass-inventory-handler.js +6 -4
  39. package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -1
  40. package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -1
  41. package/dist/os/compass/handlers/compass-inventory.js +10 -8
  42. package/dist/os/compass/handlers/compass-inventory.js.map +1 -1
  43. package/dist/os/compass/handlers/compass-migrate-handler.js +1 -1
  44. package/dist/os/compass/handlers/compass-migrate-handler.js.map +1 -1
  45. package/dist/os/compass/handlers/compass-migrate.d.ts.map +1 -1
  46. package/dist/os/compass/handlers/compass-migrate.js +6 -3
  47. package/dist/os/compass/handlers/compass-migrate.js.map +1 -1
  48. package/dist/os/compass/handlers/git-revision.d.ts.map +1 -1
  49. package/dist/os/compass/handlers/git-revision.js +9 -6
  50. package/dist/os/compass/handlers/git-revision.js.map +1 -1
  51. package/dist/os/compass/handlers/resolve-scan-root.js +1 -1
  52. package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -1
  53. package/dist/os/compass/handlers/summary-record.d.ts.map +1 -1
  54. package/dist/os/compass/handlers/summary-record.js +8 -4
  55. package/dist/os/compass/handlers/summary-record.js.map +1 -1
  56. package/dist/os/core/core.module.d.ts.map +1 -1
  57. package/dist/os/core/core.module.js +43 -4
  58. package/dist/os/core/core.module.js.map +1 -1
  59. package/dist/os/core/handlers/assets-helpers.d.ts.map +1 -1
  60. package/dist/os/core/handlers/assets-helpers.js +6 -3
  61. package/dist/os/core/handlers/assets-helpers.js.map +1 -1
  62. package/dist/os/core/handlers/build.js +1 -1
  63. package/dist/os/core/handlers/build.js.map +1 -1
  64. package/dist/os/core/handlers/determinism-check.d.ts.map +1 -1
  65. package/dist/os/core/handlers/determinism-check.js +10 -6
  66. package/dist/os/core/handlers/determinism-check.js.map +1 -1
  67. package/dist/os/core/handlers/dev.js +1 -1
  68. package/dist/os/core/handlers/dev.js.map +1 -1
  69. package/dist/os/core/handlers/file-size-lint.d.ts.map +1 -1
  70. package/dist/os/core/handlers/file-size-lint.js +11 -7
  71. package/dist/os/core/handlers/file-size-lint.js.map +1 -1
  72. package/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +1 -1
  73. package/dist/os/core/handlers/forge-autonomy-validate.js +9 -5
  74. package/dist/os/core/handlers/forge-autonomy-validate.js.map +1 -1
  75. package/dist/os/core/handlers/knowledge-compact.js +1 -1
  76. package/dist/os/core/handlers/knowledge-compact.js.map +1 -1
  77. package/dist/os/core/handlers/package-health.js +1 -1
  78. package/dist/os/core/handlers/package-health.js.map +1 -1
  79. package/dist/os/core/handlers/pinned-check.js +2 -2
  80. package/dist/os/core/handlers/pinned-check.js.map +1 -1
  81. package/dist/os/core/handlers/pinned-init.d.ts.map +1 -1
  82. package/dist/os/core/handlers/pinned-init.js +9 -8
  83. package/dist/os/core/handlers/pinned-init.js.map +1 -1
  84. package/dist/os/core/handlers/pinned-validate.js +3 -3
  85. package/dist/os/core/handlers/pinned-validate.js.map +1 -1
  86. package/dist/os/core/handlers/profile-resolve.js +1 -1
  87. package/dist/os/core/handlers/profile-resolve.js.map +1 -1
  88. package/dist/os/core/handlers/public-surface.js +1 -1
  89. package/dist/os/core/handlers/public-surface.js.map +1 -1
  90. package/dist/os/core/handlers/release-prepare.d.ts.map +1 -1
  91. package/dist/os/core/handlers/release-prepare.js +10 -6
  92. package/dist/os/core/handlers/release-prepare.js.map +1 -1
  93. package/dist/os/core/handlers/release-publish.js +6 -6
  94. package/dist/os/core/handlers/release-publish.js.map +1 -1
  95. package/dist/os/core/handlers/validate.js +1 -1
  96. package/dist/os/core/handlers/validate.js.map +1 -1
  97. package/dist/os/exploration/exploration.module.d.ts.map +1 -1
  98. package/dist/os/exploration/exploration.module.js +1 -0
  99. package/dist/os/exploration/exploration.module.js.map +1 -1
  100. package/dist/os/exploration/frontmatter-io.js +4 -4
  101. package/dist/os/exploration/frontmatter-io.js.map +1 -1
  102. package/dist/os/exploration/handlers/archive.js +3 -3
  103. package/dist/os/exploration/handlers/archive.js.map +1 -1
  104. package/dist/os/mission/handlers/archive.d.ts.map +1 -1
  105. package/dist/os/mission/handlers/archive.js +44 -23
  106. package/dist/os/mission/handlers/archive.js.map +1 -1
  107. package/dist/os/mission/mission.module.js +3 -3
  108. package/dist/os/mission/mission.module.js.map +1 -1
  109. package/dist/os/naming/naming-convention.d.ts.map +1 -1
  110. package/dist/os/naming/naming-convention.js +7 -3
  111. package/dist/os/naming/naming-convention.js.map +1 -1
  112. package/dist/os/naming/naming.module.d.ts.map +1 -1
  113. package/dist/os/naming/naming.module.js +4 -3
  114. package/dist/os/naming/naming.module.js.map +1 -1
  115. package/dist/os/notes/notes.module.d.ts.map +1 -1
  116. package/dist/os/notes/notes.module.js +6 -3
  117. package/dist/os/notes/notes.module.js.map +1 -1
  118. package/dist/os/plan/frontmatter-io.js +5 -5
  119. package/dist/os/plan/frontmatter-io.js.map +1 -1
  120. package/dist/os/plan/handlers/archive.d.ts.map +1 -1
  121. package/dist/os/plan/handlers/archive.js +10 -4
  122. package/dist/os/plan/handlers/archive.js.map +1 -1
  123. package/dist/os/plan/plan.module.js +3 -3
  124. package/dist/os/plan/plan.module.js.map +1 -1
  125. package/dist/os/plugin/plugin.module.d.ts.map +1 -1
  126. package/dist/os/plugin/plugin.module.js +6 -3
  127. package/dist/os/plugin/plugin.module.js.map +1 -1
  128. package/dist/os/program/discovery.js +2 -2
  129. package/dist/os/program/discovery.js.map +1 -1
  130. package/dist/os/program/handlers/complete.js +1 -1
  131. package/dist/os/program/handlers/complete.js.map +1 -1
  132. package/dist/os/program/handlers/lease.js +1 -1
  133. package/dist/os/program/handlers/lease.js.map +1 -1
  134. package/dist/os/program/handlers/seal.js +1 -1
  135. package/dist/os/program/handlers/seal.js.map +1 -1
  136. package/dist/os/program/lease.js +1 -1
  137. package/dist/os/program/lease.js.map +1 -1
  138. package/dist/os/program/program.module.d.ts.map +1 -1
  139. package/dist/os/program/program.module.js +9 -3
  140. package/dist/os/program/program.module.js.map +1 -1
  141. package/dist/os/queue/index.js +1 -1
  142. package/dist/os/queue/manifest.d.ts.map +1 -1
  143. package/dist/os/queue/manifest.js +4 -8
  144. package/dist/os/queue/manifest.js.map +1 -1
  145. package/dist/os/rfc/acceptance.d.ts.map +1 -1
  146. package/dist/os/rfc/acceptance.js +10 -6
  147. package/dist/os/rfc/acceptance.js.map +1 -1
  148. package/dist/os/rfc/decision-log.d.ts.map +1 -1
  149. package/dist/os/rfc/decision-log.js +4 -3
  150. package/dist/os/rfc/decision-log.js.map +1 -1
  151. package/dist/os/rfc/dna-trace.d.ts.map +1 -1
  152. package/dist/os/rfc/dna-trace.js +7 -2
  153. package/dist/os/rfc/dna-trace.js.map +1 -1
  154. package/dist/os/rfc/frontmatter-io.js +5 -5
  155. package/dist/os/rfc/frontmatter-io.js.map +1 -1
  156. package/dist/os/rfc/handlers/archive.d.ts.map +1 -1
  157. package/dist/os/rfc/handlers/archive.js +11 -5
  158. package/dist/os/rfc/handlers/archive.js.map +1 -1
  159. package/dist/os/rfc/handlers/check.d.ts.map +1 -1
  160. package/dist/os/rfc/handlers/check.js +6 -3
  161. package/dist/os/rfc/handlers/check.js.map +1 -1
  162. package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
  163. package/dist/os/rfc/handlers/implement-stamp.js +11 -10
  164. package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
  165. package/dist/os/rfc/handlers/index-graph.js +3 -3
  166. package/dist/os/rfc/handlers/index-graph.js.map +1 -1
  167. package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -1
  168. package/dist/os/rfc/handlers/lifecycle.js +6 -2
  169. package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
  170. package/dist/os/rfc/handlers/list-create.d.ts.map +1 -1
  171. package/dist/os/rfc/handlers/list-create.js +7 -6
  172. package/dist/os/rfc/handlers/list-create.js.map +1 -1
  173. package/dist/os/rfc/handlers/shared.js +3 -3
  174. package/dist/os/rfc/handlers/shared.js.map +1 -1
  175. package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -1
  176. package/dist/os/rfc/handlers/supersede-propose.js +7 -3
  177. package/dist/os/rfc/handlers/supersede-propose.js.map +1 -1
  178. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  179. package/dist/os/rfc/handlers/validate-rules.js +8 -5
  180. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  181. package/dist/os/rfc/handlers/validate.d.ts.map +1 -1
  182. package/dist/os/rfc/handlers/validate.js +6 -1
  183. package/dist/os/rfc/handlers/validate.js.map +1 -1
  184. package/dist/os/rfc/rfc.module.d.ts.map +1 -1
  185. package/dist/os/rfc/rfc.module.js +44 -4
  186. package/dist/os/rfc/rfc.module.js.map +1 -1
  187. package/dist/os/rfc/verification-evidence.d.ts.map +1 -1
  188. package/dist/os/rfc/verification-evidence.js +9 -5
  189. package/dist/os/rfc/verification-evidence.js.map +1 -1
  190. package/dist/os/rfc/verification-refresh.d.ts.map +1 -1
  191. package/dist/os/rfc/verification-refresh.js +4 -3
  192. package/dist/os/rfc/verification-refresh.js.map +1 -1
  193. package/dist/os/session/frontmatter-io.js +12 -12
  194. package/dist/os/session/frontmatter-io.js.map +1 -1
  195. package/dist/os/session/handlers/archive.d.ts.map +1 -1
  196. package/dist/os/session/handlers/archive.js +10 -4
  197. package/dist/os/session/handlers/archive.js.map +1 -1
  198. package/dist/os/session/handlers/metrics-aggregate.d.ts.map +1 -1
  199. package/dist/os/session/handlers/metrics-aggregate.js +9 -5
  200. package/dist/os/session/handlers/metrics-aggregate.js.map +1 -1
  201. package/dist/os/session/handlers/metrics-rfc.d.ts.map +1 -1
  202. package/dist/os/session/handlers/metrics-rfc.js +11 -8
  203. package/dist/os/session/handlers/metrics-rfc.js.map +1 -1
  204. package/dist/os/session/handlers/metrics-session.d.ts.map +1 -1
  205. package/dist/os/session/handlers/metrics-session.js +6 -3
  206. package/dist/os/session/handlers/metrics-session.js.map +1 -1
  207. package/dist/os/session/handlers/save.d.ts.map +1 -1
  208. package/dist/os/session/handlers/save.js +14 -8
  209. package/dist/os/session/handlers/save.js.map +1 -1
  210. package/dist/os/session/session.module.d.ts.map +1 -1
  211. package/dist/os/session/session.module.js +6 -0
  212. package/dist/os/session/session.module.js.map +1 -1
  213. package/dist/os/spec/live-spec-list.js +4 -4
  214. package/dist/os/spec/live-spec-list.js.map +1 -1
  215. package/dist/os/spec/live-spec-merge.js +5 -5
  216. package/dist/os/spec/live-spec-merge.js.map +1 -1
  217. package/dist/os/spec/live-spec-show.js +3 -3
  218. package/dist/os/spec/live-spec-show.js.map +1 -1
  219. package/dist/os/spec/live-spec-validate.js +4 -4
  220. package/dist/os/spec/live-spec-validate.js.map +1 -1
  221. package/dist/os/spec/spec-materialize.js +9 -9
  222. package/dist/os/spec/spec-materialize.js.map +1 -1
  223. package/dist/os/spec/spec-status.js +9 -9
  224. package/dist/os/spec/spec-status.js.map +1 -1
  225. package/dist/os/spec/spec-validate.js +7 -7
  226. package/dist/os/spec/spec-validate.js.map +1 -1
  227. package/dist/os/spec/spec.module.d.ts.map +1 -1
  228. package/dist/os/spec/spec.module.js +8 -0
  229. package/dist/os/spec/spec.module.js.map +1 -1
  230. package/dist/os/werkstatt/handlers/lock.js +16 -16
  231. package/dist/os/werkstatt/handlers/lock.js.map +1 -1
  232. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +3 -3
  233. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -1
  234. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -1
  235. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +3 -2
  236. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -1
  237. package/dist/os/werkstatt/handlers/workspace-deps.d.ts.map +1 -1
  238. package/dist/os/werkstatt/handlers/workspace-deps.js +0 -1
  239. package/dist/os/werkstatt/handlers/workspace-deps.js.map +1 -1
  240. package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -1
  241. package/dist/os/werkstatt/werkstatt.module.js +6 -2
  242. package/dist/os/werkstatt/werkstatt.module.js.map +1 -1
  243. package/dist/os/workflow/handlers.d.ts.map +1 -1
  244. package/dist/os/workflow/handlers.js +8 -5
  245. package/dist/os/workflow/handlers.js.map +1 -1
  246. package/dist/os/workflow/workflow.module.d.ts.map +1 -1
  247. package/dist/os/workflow/workflow.module.js +6 -3
  248. package/dist/os/workflow/workflow.module.js.map +1 -1
  249. package/dist/src/cli-flags.d.ts +28 -0
  250. package/dist/src/cli-flags.d.ts.map +1 -0
  251. package/dist/src/cli-flags.js +232 -0
  252. package/dist/src/cli-flags.js.map +1 -0
  253. package/dist/src/compass/contract-registry.js +1 -1
  254. package/dist/src/compass/contract-registry.js.map +1 -1
  255. package/dist/src/config/forge-config.d.ts +1 -1
  256. package/dist/src/config/forge-config.js +1 -1
  257. package/dist/src/config/forge-config.js.map +1 -1
  258. package/dist/src/knowledge/budgets.js +1 -1
  259. package/dist/src/knowledge/budgets.js.map +1 -1
  260. package/dist/src/knowledge/compact.js +1 -1
  261. package/dist/src/knowledge/compact.js.map +1 -1
  262. package/dist/src/knowledge/parse.js +1 -1
  263. package/dist/src/knowledge/parse.js.map +1 -1
  264. package/dist/src/knowledge/sync.d.ts.map +1 -1
  265. package/dist/src/knowledge/sync.js +3 -5
  266. package/dist/src/knowledge/sync.js.map +1 -1
  267. package/dist/src/migration-adapters/git-utils.js +2 -2
  268. package/dist/src/migration-adapters/git-utils.js.map +1 -1
  269. package/dist/src/migration-adapters/ignored-files.js +2 -2
  270. package/dist/src/migration-adapters/ignored-files.js.map +1 -1
  271. package/dist/src/migration-adapters/node-typescript-pnpm/index.js +1 -1
  272. package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +1 -1
  273. package/dist/src/migration-adapters/phaser-pnpm/index.js +1 -1
  274. package/dist/src/migration-adapters/phaser-pnpm/index.js.map +1 -1
  275. package/dist/src/onboarding/agents-generate.d.ts.map +1 -1
  276. package/dist/src/onboarding/agents-generate.js +76 -34
  277. package/dist/src/onboarding/agents-generate.js.map +1 -1
  278. package/dist/src/onboarding/create.d.ts.map +1 -1
  279. package/dist/src/onboarding/create.js +10 -10
  280. package/dist/src/onboarding/create.js.map +1 -1
  281. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  282. package/dist/src/onboarding/doctor.js +68 -59
  283. package/dist/src/onboarding/doctor.js.map +1 -1
  284. package/dist/src/onboarding/init.d.ts.map +1 -1
  285. package/dist/src/onboarding/init.js +30 -1
  286. package/dist/src/onboarding/init.js.map +1 -1
  287. package/dist/src/onboarding/invariant-engine.js +1 -1
  288. package/dist/src/onboarding/invariant-engine.js.map +1 -1
  289. package/dist/src/onboarding/memory-compact.d.ts.map +1 -1
  290. package/dist/src/onboarding/memory-compact.js +5 -4
  291. package/dist/src/onboarding/memory-compact.js.map +1 -1
  292. package/dist/src/onboarding/memory-scaffold.js +1 -1
  293. package/dist/src/onboarding/memory-scaffold.js.map +1 -1
  294. package/dist/src/onboarding/nested-agents-generate.d.ts +4 -1
  295. package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
  296. package/dist/src/onboarding/nested-agents-generate.js +34 -5
  297. package/dist/src/onboarding/nested-agents-generate.js.map +1 -1
  298. package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -1
  299. package/dist/src/onboarding/nested-agents-templates.js +8 -12
  300. package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
  301. package/dist/src/onboarding/npm-token-check.js +2 -2
  302. package/dist/src/onboarding/npm-token-check.js.map +1 -1
  303. package/dist/src/onboarding/prettierignore.d.ts +29 -0
  304. package/dist/src/onboarding/prettierignore.d.ts.map +1 -0
  305. package/dist/src/onboarding/prettierignore.js +231 -0
  306. package/dist/src/onboarding/prettierignore.js.map +1 -0
  307. package/dist/src/onboarding/profile-validate.d.ts.map +1 -1
  308. package/dist/src/onboarding/profile-validate.js +5 -4
  309. package/dist/src/onboarding/profile-validate.js.map +1 -1
  310. package/dist/src/onboarding/scaffold-project.d.ts.map +1 -1
  311. package/dist/src/onboarding/scaffold-project.js +35 -27
  312. package/dist/src/onboarding/scaffold-project.js.map +1 -1
  313. package/dist/src/onboarding/scaffold.js +1 -1
  314. package/dist/src/onboarding/scaffold.js.map +1 -1
  315. package/dist/src/onboarding/skill-markers.d.ts +27 -0
  316. package/dist/src/onboarding/skill-markers.d.ts.map +1 -0
  317. package/dist/src/onboarding/skill-markers.js +131 -0
  318. package/dist/src/onboarding/skill-markers.js.map +1 -0
  319. package/dist/src/onboarding/upgrade.d.ts +10 -0
  320. package/dist/src/onboarding/upgrade.d.ts.map +1 -1
  321. package/dist/src/onboarding/upgrade.js +215 -74
  322. package/dist/src/onboarding/upgrade.js.map +1 -1
  323. package/dist/src/onboarding/workspace-discovery.js +1 -1
  324. package/dist/src/onboarding/workspace-discovery.js.map +1 -1
  325. package/dist/src/pipeline-status.d.ts +6 -5
  326. package/dist/src/pipeline-status.d.ts.map +1 -1
  327. package/dist/src/pipeline-status.js +24 -19
  328. package/dist/src/pipeline-status.js.map +1 -1
  329. package/dist/src/profiles/stack-profile.js +1 -1
  330. package/dist/src/profiles/stack-profile.js.map +1 -1
  331. package/dist/src/registry.d.ts +1 -1
  332. package/dist/src/registry.d.ts.map +1 -1
  333. package/dist/src/registry.js +3 -3
  334. package/dist/src/registry.js.map +1 -1
  335. package/dist/src/skill-schema.d.ts +1 -1
  336. package/dist/src/skill-schema.d.ts.map +1 -1
  337. package/dist/src/skill-schema.js +4 -1
  338. package/dist/src/skill-schema.js.map +1 -1
  339. package/dist/src/types.d.ts +116 -0
  340. package/dist/src/types.d.ts.map +1 -1
  341. package/dist/src/utils/editable-region.d.ts +46 -0
  342. package/dist/src/utils/editable-region.d.ts.map +1 -0
  343. package/dist/src/utils/editable-region.js +125 -0
  344. package/dist/src/utils/editable-region.js.map +1 -0
  345. package/dist/src/utils/fs-idempotent.d.ts +2 -1
  346. package/dist/src/utils/fs-idempotent.d.ts.map +1 -1
  347. package/dist/src/utils/fs-idempotent.js +11 -7
  348. package/dist/src/utils/fs-idempotent.js.map +1 -1
  349. package/dist/src/utils/generated-marker.d.ts +17 -0
  350. package/dist/src/utils/generated-marker.d.ts.map +1 -1
  351. package/dist/src/utils/generated-marker.js +29 -1
  352. package/dist/src/utils/generated-marker.js.map +1 -1
  353. package/dist/src/utils/index.d.ts +3 -1
  354. package/dist/src/utils/index.d.ts.map +1 -1
  355. package/dist/src/utils/index.js +3 -1
  356. package/dist/src/utils/index.js.map +1 -1
  357. package/dist/src/utils/io.d.ts +9 -0
  358. package/dist/src/utils/io.d.ts.map +1 -0
  359. package/dist/src/utils/io.js +130 -0
  360. package/dist/src/utils/io.js.map +1 -0
  361. package/dist/src/utils/markdown-table.d.ts +21 -0
  362. package/dist/src/utils/markdown-table.d.ts.map +1 -0
  363. package/dist/src/utils/markdown-table.js +116 -0
  364. package/dist/src/utils/markdown-table.js.map +1 -0
  365. package/dist/src/utils/sync-fs.d.ts +5 -0
  366. package/dist/src/utils/sync-fs.d.ts.map +1 -0
  367. package/dist/src/utils/sync-fs.js +26 -0
  368. package/dist/src/utils/sync-fs.js.map +1 -0
  369. package/dist/src/validators/note-frontmatter-validate.js +1 -1
  370. package/dist/src/validators/note-frontmatter-validate.js.map +1 -1
  371. package/dist/src/validators/note-link-validate.js +1 -1
  372. package/dist/src/validators/note-link-validate.js.map +1 -1
  373. package/dist/src/validators/note-orphan-detect.js +1 -1
  374. package/dist/src/validators/note-orphan-detect.js.map +1 -1
  375. package/dist/src/validators/port-validate.js +1 -1
  376. package/dist/src/validators/port-validate.js.map +1 -1
  377. package/dist/src/validators/skill-validate.d.ts.map +1 -1
  378. package/dist/src/validators/skill-validate.js +34 -13
  379. package/dist/src/validators/skill-validate.js.map +1 -1
  380. package/os/adr/adr.module.ts +136 -132
  381. package/os/adr/frontmatter-io.ts +5 -5
  382. package/os/adr/handlers/archive.ts +8 -4
  383. package/os/adr/handlers/implement-stamp.ts +14 -10
  384. package/os/adr/handlers/list-create.ts +5 -5
  385. package/os/adr/handlers/validate.ts +1 -1
  386. package/os/audit/audit.module.ts +33 -34
  387. package/os/audit/frontmatter-io.ts +5 -5
  388. package/os/audit/handlers/archive.ts +8 -4
  389. package/os/compass/compass.module.ts +17 -1
  390. package/os/compass/handlers/compass-audit-handler.ts +13 -5
  391. package/os/compass/handlers/compass-change-summary-handler.ts +4 -2
  392. package/os/compass/handlers/compass-inventory-handler.ts +7 -4
  393. package/os/compass/handlers/compass-inventory.ts +11 -8
  394. package/os/compass/handlers/compass-migrate-handler.ts +1 -1
  395. package/os/compass/handlers/compass-migrate.ts +7 -3
  396. package/os/compass/handlers/git-revision.ts +11 -6
  397. package/os/compass/handlers/resolve-scan-root.ts +1 -1
  398. package/os/compass/handlers/summary-record.ts +10 -4
  399. package/os/compass/handlers/tests/compass-audit-plan.test.ts +2 -1
  400. package/os/core/core.module.ts +43 -4
  401. package/os/core/handlers/assets-helpers.ts +7 -3
  402. package/os/core/handlers/build.ts +1 -1
  403. package/os/core/handlers/determinism-check.ts +12 -6
  404. package/os/core/handlers/dev.ts +1 -1
  405. package/os/core/handlers/file-size-lint.ts +16 -9
  406. package/os/core/handlers/forge-autonomy-validate.ts +10 -5
  407. package/os/core/handlers/knowledge-compact.ts +1 -1
  408. package/os/core/handlers/package-health.ts +1 -1
  409. package/os/core/handlers/pinned-check.ts +2 -2
  410. package/os/core/handlers/pinned-init.ts +9 -8
  411. package/os/core/handlers/pinned-validate.ts +3 -3
  412. package/os/core/handlers/profile-resolve.ts +1 -1
  413. package/os/core/handlers/public-surface.ts +1 -1
  414. package/os/core/handlers/release-prepare.ts +11 -6
  415. package/os/core/handlers/release-publish.ts +6 -6
  416. package/os/core/handlers/validate.ts +1 -1
  417. package/os/exploration/exploration.module.ts +1 -0
  418. package/os/exploration/frontmatter-io.ts +4 -4
  419. package/os/exploration/handlers/archive.ts +3 -3
  420. package/os/mission/handlers/archive.test.ts +38 -1
  421. package/os/mission/handlers/archive.ts +54 -23
  422. package/os/mission/mission.module.ts +38 -39
  423. package/os/naming/naming-convention.ts +9 -3
  424. package/os/naming/naming.module.ts +25 -25
  425. package/os/notes/notes.module.ts +87 -85
  426. package/os/plan/frontmatter-io.ts +5 -5
  427. package/os/plan/handlers/archive.ts +8 -4
  428. package/os/plan/plan.module.ts +33 -34
  429. package/os/plugin/plugin.module.ts +8 -6
  430. package/os/program/discovery.ts +2 -2
  431. package/os/program/handlers/complete.ts +1 -1
  432. package/os/program/handlers/lease.ts +1 -1
  433. package/os/program/handlers/seal.ts +1 -1
  434. package/os/program/lease.ts +1 -1
  435. package/os/program/program.module.ts +198 -193
  436. package/os/queue/index.ts +1 -1
  437. package/os/queue/manifest.ts +10 -9
  438. package/os/queue/queue-validate.test.ts +6 -15
  439. package/os/rfc/acceptance.ts +12 -6
  440. package/os/rfc/decision-log.ts +4 -3
  441. package/os/rfc/dna-trace.ts +8 -2
  442. package/os/rfc/frontmatter-io.ts +5 -5
  443. package/os/rfc/handlers/archive.ts +9 -5
  444. package/os/rfc/handlers/check.ts +5 -3
  445. package/os/rfc/handlers/implement-stamp.ts +15 -10
  446. package/os/rfc/handlers/index-graph.ts +3 -3
  447. package/os/rfc/handlers/lifecycle.ts +7 -2
  448. package/os/rfc/handlers/list-create.ts +7 -6
  449. package/os/rfc/handlers/shared.ts +3 -3
  450. package/os/rfc/handlers/supersede-propose.ts +8 -3
  451. package/os/rfc/handlers/validate-rules-rfc1006.test.ts +18 -6
  452. package/os/rfc/handlers/validate-rules.ts +10 -5
  453. package/os/rfc/handlers/validate.test.ts +71 -0
  454. package/os/rfc/handlers/validate.ts +6 -1
  455. package/os/rfc/rfc-create-concurrent.test.ts +11 -3
  456. package/os/rfc/rfc.module.ts +413 -374
  457. package/os/rfc/verification-evidence.ts +11 -5
  458. package/os/rfc/verification-refresh.ts +4 -3
  459. package/os/session/frontmatter-io.ts +14 -14
  460. package/os/session/handlers/archive.ts +8 -4
  461. package/os/session/handlers/metrics-aggregate.ts +34 -13
  462. package/os/session/handlers/metrics-rfc.ts +13 -8
  463. package/os/session/handlers/metrics-session.ts +7 -3
  464. package/os/session/handlers/save.ts +12 -8
  465. package/os/session/session.module.ts +6 -0
  466. package/os/spec/live-spec-list.ts +4 -4
  467. package/os/spec/live-spec-merge.ts +5 -5
  468. package/os/spec/live-spec-show.ts +3 -3
  469. package/os/spec/live-spec-validate.ts +4 -4
  470. package/os/spec/spec-materialize.ts +9 -9
  471. package/os/spec/spec-status.ts +9 -9
  472. package/os/spec/spec-validate.ts +7 -7
  473. package/os/spec/spec.module.ts +8 -0
  474. package/os/werkstatt/handlers/lock.ts +16 -16
  475. package/os/werkstatt/handlers/werkstatt-lock-recover.ts +3 -3
  476. package/os/werkstatt/handlers/werkstatt-operation-validate.ts +4 -2
  477. package/os/werkstatt/handlers/workspace-deps.ts +0 -1
  478. package/os/werkstatt/werkstatt.module.ts +8 -5
  479. package/os/workflow/handlers.ts +7 -5
  480. package/os/workflow/workflow.module.ts +45 -44
  481. package/package.json +1 -1
  482. package/profiles/forge-shell.yaml +1 -1
  483. package/profiles/godot-game.yaml +1 -1
  484. package/profiles/knowledge.yaml +1 -1
  485. package/profiles/phaser-game.yaml +1 -1
  486. package/profiles/site-workshop.yaml +1 -1
  487. package/profiles/typescript.yaml +1 -1
  488. package/skills/fo/fo-add-tests/SKILL.md +2 -2
  489. package/skills/fo/fo-architecture/SKILL.md +2 -2
  490. package/skills/fo/fo-compass-annotate/SKILL.md +2 -2
  491. package/skills/fo/fo-design-summit/SKILL.md +2 -2
  492. package/skills/fo/fo-doc-audit/SKILL.md +2 -2
  493. package/skills/fo/fo-explore/SKILL.md +2 -2
  494. package/skills/fo/fo-extract-dna/SKILL.md +2 -2
  495. package/skills/fo/fo-fix/SKILL.md +2 -2
  496. package/skills/fo/fo-handoff/SKILL.md +2 -2
  497. package/skills/fo/fo-harvest/SKILL.md +2 -2
  498. package/skills/fo/fo-idea/SKILL.md +2 -2
  499. package/skills/fo/fo-idea-audit/SKILL.md +2 -2
  500. package/skills/fo/fo-idea-create-adr/SKILL.md +3 -3
  501. package/skills/fo/fo-idea-create-rfc/SKILL.md +3 -3
  502. package/skills/fo/fo-idea-enhance/SKILL.md +2 -2
  503. package/skills/fo/fo-idea-i-just-want-to-see-the-plan/SKILL.md +2 -2
  504. package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +1 -1
  505. package/skills/fo/fo-idea-implement/SKILL.md +2 -2
  506. package/skills/fo/fo-idea-plan/SKILL.md +2 -2
  507. package/skills/fo/fo-idea-status/SKILL.md +2 -2
  508. package/skills/fo/fo-knowledge-distill/SKILL.md +2 -2
  509. package/skills/fo/fo-memory-sync/SKILL.md +2 -2
  510. package/skills/fo/fo-qa/SKILL.md +2 -2
  511. package/skills/fo/fo-review/SKILL.md +2 -2
  512. package/skills/fo/fo-session-retro/SKILL.md +2 -2
  513. package/skills/fo/fo-session-save/SKILL.md +2 -2
  514. package/skills/fo/fo-spec-ingest/SKILL.md +2 -2
  515. package/skills/fo/fo-step-commit/SKILL.md +1 -1
  516. package/skills/fo/fo-triage/SKILL.md +2 -2
  517. package/skills/meta/forge-bootstrap/SKILL.md +1 -1
  518. package/skills/meta/port-to-forge/SKILL.md +1 -1
  519. package/skills/meta/skill-create/SKILL.md +1 -1
  520. package/skills/shared/grilling/SKILL.md +1 -1
  521. package/skills/shared/grilling/learned-principles.archive.md +17 -0
  522. package/skills/shared/grilling/learned-principles.md +0 -1
  523. package/skills/shared/knowledge/learned-principles.md +6 -0
  524. package/skills/shared/my-preferences/SKILL.md +1 -1
  525. package/skills/shared/windows-ai-tooling/SKILL.md +1 -1
  526. package/skills/shared/writing-great-skills/SKILL.md +1 -1
  527. package/src/cli-flags.ts +285 -0
  528. package/src/compass/contract-registry.ts +1 -1
  529. package/src/config/forge-config.ts +1 -1
  530. package/src/knowledge/__tests__/sync.test.ts +2 -7
  531. package/src/knowledge/budgets.ts +1 -1
  532. package/src/knowledge/compact.ts +1 -1
  533. package/src/knowledge/parse.ts +1 -1
  534. package/src/knowledge/sync.ts +3 -5
  535. package/src/migration-adapters/git-utils.ts +2 -2
  536. package/src/migration-adapters/ignored-files.ts +2 -2
  537. package/src/migration-adapters/node-typescript-pnpm/index.ts +1 -1
  538. package/src/migration-adapters/phaser-pnpm/index.ts +1 -1
  539. package/src/onboarding/agents-generate.ts +92 -36
  540. package/src/onboarding/create.ts +10 -10
  541. package/src/onboarding/doctor.ts +70 -55
  542. package/src/onboarding/init.ts +38 -1
  543. package/src/onboarding/invariant-engine.ts +1 -1
  544. package/src/onboarding/memory-compact.ts +5 -4
  545. package/src/onboarding/memory-scaffold.ts +1 -1
  546. package/src/onboarding/nested-agents-generate.ts +45 -4
  547. package/src/onboarding/nested-agents-templates.ts +19 -13
  548. package/src/onboarding/npm-token-check.ts +2 -2
  549. package/src/onboarding/prettierignore.ts +263 -0
  550. package/src/onboarding/profile-validate.ts +5 -4
  551. package/src/onboarding/scaffold-project.ts +38 -27
  552. package/src/onboarding/scaffold.ts +1 -1
  553. package/src/onboarding/skill-markers.ts +162 -0
  554. package/src/onboarding/templates/behavioral-layer-core.md +2 -4
  555. package/src/onboarding/upgrade.ts +285 -89
  556. package/src/onboarding/workspace-discovery.ts +1 -1
  557. package/src/pipeline-status.test.ts +1 -4
  558. package/src/pipeline-status.ts +30 -13
  559. package/src/profiles/stack-profile.ts +1 -1
  560. package/src/registry.ts +4 -4
  561. package/src/skill-schema.ts +4 -1
  562. package/src/tests/acceptance-probe-kinds.test.ts +5 -15
  563. package/src/tests/agents-generate.test.ts +28 -5
  564. package/src/tests/cli-flags.test.ts +169 -0
  565. package/src/tests/contract-registry.test.ts +12 -6
  566. package/src/tests/doctor-fix.test.ts +1 -4
  567. package/src/tests/doctor-nested-agents.test.ts +53 -1
  568. package/src/tests/editable-generated-region.test.ts +231 -0
  569. package/src/tests/file-size-lint.test.ts +8 -12
  570. package/src/tests/fixtures/agents-generate-business-before.txt +85 -56
  571. package/src/tests/markdown-table.test.ts +107 -0
  572. package/src/tests/prettierignore-manage.test.ts +134 -0
  573. package/src/tests/skill-agents-sync.test.ts +168 -0
  574. package/src/tests/skill-sync-marker.test.ts +134 -0
  575. package/src/tests/skill-validate.test.ts +12 -5
  576. package/src/tests/upgrade.test.ts +87 -41
  577. package/src/types.ts +123 -0
  578. package/src/utils/editable-region.ts +156 -0
  579. package/src/utils/fs-idempotent.ts +12 -6
  580. package/src/utils/generated-marker.ts +36 -2
  581. package/src/utils/index.ts +17 -0
  582. package/src/utils/io.ts +143 -0
  583. package/src/utils/markdown-table.ts +121 -0
  584. package/src/utils/sync-fs.ts +43 -0
  585. package/src/validators/note-frontmatter-validate.ts +1 -1
  586. package/src/validators/note-link-validate.ts +1 -1
  587. package/src/validators/note-orphan-detect.ts +1 -1
  588. package/src/validators/port-validate.ts +1 -1
  589. package/src/validators/skill-validate.ts +38 -13
  590. package/AGENTS.md +0 -502
@@ -8,210 +8,215 @@ kernel registry (RFC-0856).</purpose>
8
8
  </MODULE_CONTRACT>
9
9
  <CHANGE_SUMMARY>
10
10
  <item>RFC-0856: initial program module registration.</item>
11
+ <item>RFC-1173: declare mutatesState on all kernel commands — collectDeclarationDiagnostics emits error-severity MUTATES-STATE-DECLARED, command.manifest.validate is the blocking consumer in packages.check, sweep declares the flag on every command definition (factories hardcode false for read-only check specs)</item>
11
12
  </CHANGE_SUMMARY>
12
13
  */
13
14
 
14
15
  import type { ForgeModule } from "../../src/forge-module.ts";
15
16
 
16
17
  export async function createForgeProgramModule(): Promise<ForgeModule> {
17
- const { runValidate } = await import("./handlers/validate.ts");
18
- const { runSeal } = await import("./handlers/seal.ts");
19
- const { runLease } = await import("./handlers/lease.ts");
20
- const { runComplete } = await import("./handlers/complete.ts");
18
+ const { runValidate } = await import("./handlers/validate.ts");
19
+ const { runSeal } = await import("./handlers/seal.ts");
20
+ const { runLease } = await import("./handlers/lease.ts");
21
+ const { runComplete } = await import("./handlers/complete.ts");
21
22
  return {
22
- name: "forge-program",
23
- version: "0.1.0",
24
- runtime: "autonomous",
23
+ name: "forge-program",
24
+ version: "0.1.0",
25
+ runtime: "autonomous",
25
26
 
26
27
  declarations: [],
27
- commands: [
28
- {
29
- name: "program.packet.validate",
30
- contract: "program",
31
- rules: [],
32
- description:
33
- "Validate a program packet against schema, source hashes, branch/head, " +
34
- "and state machine rules. Read-only. " +
35
- "Usage: program.packet.validate --program=RFC-XXXX --packet=NNN-foo --phase=draft --json",
36
- scope: "workspace",
37
- supportsAllSites: false,
38
- flags: {
39
- program: {
40
- kind: "string",
41
- required: true,
42
- description: "Program RFC id (e.g. RFC-0855).",
43
- },
44
- packet: {
45
- kind: "string",
46
- required: true,
47
- description: "Packet id (e.g. 010-node-24).",
48
- },
49
- phase: {
50
- kind: "string",
51
- description: "Validation phase: draft, sealed, active, or completion.",
52
- },
53
- json: {
54
- kind: "boolean",
55
- description: "Machine-readable JSON output.",
56
- },
28
+ commands: [
29
+ {
30
+ name: "program.packet.validate",
31
+ mutatesState: false,
32
+ execOnReadOnly: true,
33
+ contract: "program",
34
+ rules: [],
35
+ description:
36
+ "Validate a program packet against schema, source hashes, branch/head, " +
37
+ "and state machine rules. Read-only. " +
38
+ "Usage: program.packet.validate --program=RFC-XXXX --packet=NNN-foo --phase=draft --json",
39
+ scope: "workspace",
40
+ supportsAllSites: false,
41
+ flags: {
42
+ program: {
43
+ kind: "string",
44
+ required: true,
45
+ description: "Program RFC id (e.g. RFC-0855).",
46
+ },
47
+ packet: {
48
+ kind: "string",
49
+ required: true,
50
+ description: "Packet id (e.g. 010-node-24).",
51
+ },
52
+ phase: {
53
+ kind: "string",
54
+ description: "Validation phase: draft, sealed, active, or completion.",
55
+ },
56
+ json: {
57
+ kind: "boolean",
58
+ description: "Machine-readable JSON output.",
59
+ },
60
+ },
61
+ reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
62
+ cacheable: false,
63
+ execute: runValidate,
57
64
  },
58
- reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
59
- cacheable: false,
60
- execute: runValidate,
61
- },
62
- {
63
- name: "program.packet.seal",
64
- description:
65
- "Steward finalizes a packet against the predecessor's completion commit, " +
66
- "updates packet state from draft to sealed, and records the seal in the " +
67
- "program manifest. Does not commit — use ecosystem.commit after. " +
68
- "Usage: program.packet.seal --program=RFC-XXXX --packet=NNN-foo " +
69
- "--steward=human:id --idempotency-key=<key> --json",
70
- scope: "workspace",
71
- supportsAllSites: false,
72
- mutatesState: true,
73
- flags: {
74
- program: {
75
- kind: "string",
76
- required: true,
77
- description: "Program RFC id.",
78
- },
79
- packet: {
80
- kind: "string",
81
- required: true,
82
- description: "Packet id to seal.",
83
- },
84
- steward: {
85
- kind: "string",
86
- required: true,
87
- description: "Steward actor id (human:<id> or agent:<id>).",
88
- },
89
- "idempotency-key": {
90
- kind: "string",
91
- description: "Idempotency key for retry-safe sealing.",
92
- },
93
- json: {
94
- kind: "boolean",
95
- description: "Machine-readable JSON output.",
96
- },
65
+ {
66
+ name: "program.packet.seal",
67
+ description:
68
+ "Steward finalizes a packet against the predecessor's completion commit, " +
69
+ "updates packet state from draft to sealed, and records the seal in the " +
70
+ "program manifest. Does not commit — use ecosystem.commit after. " +
71
+ "Usage: program.packet.seal --program=RFC-XXXX --packet=NNN-foo " +
72
+ "--steward=human:id --idempotency-key=<key> --json",
73
+ scope: "workspace",
74
+ supportsAllSites: false,
75
+ mutatesState: true,
76
+ flags: {
77
+ program: {
78
+ kind: "string",
79
+ required: true,
80
+ description: "Program RFC id.",
81
+ },
82
+ packet: {
83
+ kind: "string",
84
+ required: true,
85
+ description: "Packet id to seal.",
86
+ },
87
+ steward: {
88
+ kind: "string",
89
+ required: true,
90
+ description: "Steward actor id (human:<id> or agent:<id>).",
91
+ },
92
+ "idempotency-key": {
93
+ kind: "string",
94
+ description: "Idempotency key for retry-safe sealing.",
95
+ },
96
+ json: {
97
+ kind: "boolean",
98
+ description: "Machine-readable JSON output.",
99
+ },
100
+ },
101
+ writes: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
102
+ generates: [],
103
+ reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
104
+ cacheable: false,
105
+ execute: runSeal,
97
106
  },
98
- writes: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
99
- reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
100
- cacheable: false,
101
- execute: runSeal,
102
- },
103
- {
104
- name: "program.packet.lease",
105
- description:
106
- "Manage the exclusive local executor lease for a sealed packet. " +
107
- "Actions: start, heartbeat, release, recover. " +
108
- "Raw lease tokens are never persisted — only the SHA-256 hash. " +
109
- "Usage: program.packet.lease --program=RFC-XXXX --packet=NNN-foo " +
110
- "--action=start --executor=agent:id --json",
111
- scope: "workspace",
112
- supportsAllSites: false,
113
- flags: {
114
- program: {
115
- kind: "string",
116
- required: true,
117
- description: "Program RFC id.",
118
- },
119
- packet: {
120
- kind: "string",
121
- required: true,
122
- description: "Packet id.",
123
- },
124
- action: {
125
- kind: "string",
126
- required: true,
127
- description: "Lease action: start, heartbeat, release, or recover.",
128
- },
129
- executor: {
130
- kind: "string",
131
- description: "Executor actor id (required for --action=start).",
132
- },
133
- steward: {
134
- kind: "string",
135
- description: "Steward actor id (required for --action=recover).",
136
- },
137
- "lease-token": {
138
- kind: "string",
139
- description: "Opaque lease token (required for heartbeat and release).",
140
- },
141
- reason: {
142
- kind: "string",
143
- description: "Recovery reason (required for --action=recover).",
144
- },
145
- json: {
146
- kind: "boolean",
147
- description: "Machine-readable JSON output.",
148
- },
107
+ {
108
+ name: "program.packet.lease",
109
+ mutatesState: true,
110
+ description:
111
+ "Manage the exclusive local executor lease for a sealed packet. " +
112
+ "Actions: start, heartbeat, release, recover. " +
113
+ "Raw lease tokens are never persisted — only the SHA-256 hash. " +
114
+ "Usage: program.packet.lease --program=RFC-XXXX --packet=NNN-foo " +
115
+ "--action=start --executor=agent:id --json",
116
+ scope: "workspace",
117
+ supportsAllSites: false,
118
+ flags: {
119
+ program: {
120
+ kind: "string",
121
+ required: true,
122
+ description: "Program RFC id.",
123
+ },
124
+ packet: {
125
+ kind: "string",
126
+ required: true,
127
+ description: "Packet id.",
128
+ },
129
+ action: {
130
+ kind: "string",
131
+ required: true,
132
+ description: "Lease action: start, heartbeat, release, or recover.",
133
+ },
134
+ executor: {
135
+ kind: "string",
136
+ description: "Executor actor id (required for --action=start).",
137
+ },
138
+ steward: {
139
+ kind: "string",
140
+ description: "Steward actor id (required for --action=recover).",
141
+ },
142
+ "lease-token": {
143
+ kind: "string",
144
+ description: "Opaque lease token (required for heartbeat and release).",
145
+ },
146
+ reason: {
147
+ kind: "string",
148
+ description: "Recovery reason (required for --action=recover).",
149
+ },
150
+ json: {
151
+ kind: "boolean",
152
+ description: "Machine-readable JSON output.",
153
+ },
154
+ },
155
+ writes: [".forge/program-leases/**"],
156
+ generates: [],
157
+ reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
158
+ cacheable: false,
159
+ execute: runLease,
149
160
  },
150
- writes: [".forge/program-leases/**"],
151
- reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
152
- cacheable: false,
153
- execute: runLease,
154
- },
155
- {
156
- name: "program.packet.complete",
157
- description:
158
- "Steward validates the implementation range, writes the completion report, " +
159
- "and updates the program manifest. Supports --bootstrap for packet 000. " +
160
- "Does not commit — use ecosystem.commit after. " +
161
- "Usage: program.packet.complete --program=RFC-XXXX --packet=NNN-foo " +
162
- "--steward=human:id --lease-token=<token> --implementation-head=<sha> --json",
163
- scope: "workspace",
164
- supportsAllSites: false,
165
- mutatesState: true,
166
- flags: {
167
- program: {
168
- kind: "string",
169
- required: true,
170
- description: "Program RFC id.",
171
- },
172
- packet: {
173
- kind: "string",
174
- required: true,
175
- description: "Packet id to complete.",
176
- },
177
- steward: {
178
- kind: "string",
179
- required: true,
180
- description: "Steward actor id (must differ from executor).",
181
- },
182
- "lease-token": {
183
- kind: "string",
184
- description: "Lease token (required for non-bootstrap).",
185
- },
186
- "implementation-head": {
187
- kind: "string",
188
- description: "SHA of the implementation head commit (required for non-bootstrap).",
189
- },
190
- "idempotency-key": {
191
- kind: "string",
192
- description: "Idempotency key for retry-safe completion.",
193
- },
194
- bootstrap: {
195
- kind: "boolean",
196
- description: "Bootstrap completion (packet 000 only).",
197
- },
198
- "seal-commit": {
199
- kind: "string",
200
- description: "Seal commit SHA (required for --bootstrap).",
201
- },
202
- json: {
203
- kind: "boolean",
204
- description: "Machine-readable JSON output.",
205
- },
161
+ {
162
+ name: "program.packet.complete",
163
+ description:
164
+ "Steward validates the implementation range, writes the completion report, " +
165
+ "and updates the program manifest. Supports --bootstrap for packet 000. " +
166
+ "Does not commit — use ecosystem.commit after. " +
167
+ "Usage: program.packet.complete --program=RFC-XXXX --packet=NNN-foo " +
168
+ "--steward=human:id --lease-token=<token> --implementation-head=<sha> --json",
169
+ scope: "workspace",
170
+ supportsAllSites: false,
171
+ mutatesState: true,
172
+ flags: {
173
+ program: {
174
+ kind: "string",
175
+ required: true,
176
+ description: "Program RFC id.",
177
+ },
178
+ packet: {
179
+ kind: "string",
180
+ required: true,
181
+ description: "Packet id to complete.",
182
+ },
183
+ steward: {
184
+ kind: "string",
185
+ required: true,
186
+ description: "Steward actor id (must differ from executor).",
187
+ },
188
+ "lease-token": {
189
+ kind: "string",
190
+ description: "Lease token (required for non-bootstrap).",
191
+ },
192
+ "implementation-head": {
193
+ kind: "string",
194
+ description: "SHA of the implementation head commit (required for non-bootstrap).",
195
+ },
196
+ "idempotency-key": {
197
+ kind: "string",
198
+ description: "Idempotency key for retry-safe completion.",
199
+ },
200
+ bootstrap: {
201
+ kind: "boolean",
202
+ description: "Bootstrap completion (packet 000 only).",
203
+ },
204
+ "seal-commit": {
205
+ kind: "string",
206
+ description: "Seal commit SHA (required for --bootstrap).",
207
+ },
208
+ json: {
209
+ kind: "boolean",
210
+ description: "Machine-readable JSON output.",
211
+ },
212
+ },
213
+ writes: ["docs/plans/**/completions/**", "docs/plans/**/program.yaml"],
214
+ generates: [],
215
+ reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
216
+ cacheable: false,
217
+ execute: runComplete,
206
218
  },
207
- writes: ["docs/plans/**/completions/**", "docs/plans/**/program.yaml"],
208
- reads: ["docs/plans/**/program.yaml", "docs/plans/**/*.md"],
209
- cacheable: false,
210
- execute: runComplete,
211
- }
212
- ],
213
- pipelines: [
214
-
215
- ]};
219
+ ],
220
+ pipelines: [],
221
+ };
216
222
  }
217
- ;
package/os/queue/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  <MODULE_CONTRACT>
3
- <purpose>Barrel export for the forge queue module (RFC-1140).</purpose>
3
+ <purpose>Barrel export for the forge queue module — re-exports queue.validate and its helpers (RFC-1140).</purpose>
4
4
  <non-goals>
5
5
  <item>Do not add logic here — re-exports only.</item>
6
6
  </non-goals>
@@ -16,7 +16,7 @@ Extract pipeline-status derivation into packages/forge/src/pipeline-status.ts, r
16
16
  </CHANGE_SUMMARY>
17
17
  */
18
18
 
19
- import fs from "node:fs/promises";
19
+ import { ambientIo as fs } from "../../src/utils/io.ts";
20
20
  import path from "node:path";
21
21
  import YAML from "yaml";
22
22
 
@@ -51,16 +51,12 @@ export async function loadQueueManifest(
51
51
  ): Promise<LoadedQueueManifest> {
52
52
  const errors: Diagnostic[] = [];
53
53
  const warnings: Diagnostic[] = [];
54
- const absolutePath = path.isAbsolute(filePath)
55
- ? filePath
56
- : path.join(workspaceRoot, filePath);
57
- const displayPath = path.isAbsolute(filePath)
58
- ? path.relative(workspaceRoot, filePath)
59
- : filePath;
54
+ const absolutePath = path.isAbsolute(filePath) ? filePath : path.join(workspaceRoot, filePath);
55
+ const displayPath = path.isAbsolute(filePath) ? path.relative(workspaceRoot, filePath) : filePath;
60
56
 
61
57
  let source: string;
62
58
  try {
63
- source = await fs.readFile(absolutePath, "utf-8");
59
+ source = await fs.readFile(absolutePath);
64
60
  } catch (e) {
65
61
  errors.push(
66
62
  diag(
@@ -125,7 +121,12 @@ export async function loadQueueManifest(
125
121
  const id = item.id.trim();
126
122
  if (!QUEUE_ITEM_ID_PATTERN.test(id)) {
127
123
  errors.push(
128
- diag("QUEUE-03", "error", `Item id "${item.id}" does not match ^(RFC|ADR)-\\d{4}$`, displayPath),
124
+ diag(
125
+ "QUEUE-03",
126
+ "error",
127
+ `Item id "${item.id}" does not match ^(RFC|ADR)-\\d{4}$`,
128
+ displayPath,
129
+ ),
129
130
  );
130
131
  continue;
131
132
  }
@@ -119,9 +119,9 @@ describe("loadQueueManifest — validation rules (RFC-1140)", () => {
119
119
 
120
120
  describe("runQueueValidate — command contract (RFC-1140)", () => {
121
121
  test("throws without --file", async () => {
122
- await expect(
123
- runQueueValidate({ argv: [], flags: {} }, testContext()),
124
- ).rejects.toThrow("--file");
122
+ await expect(runQueueValidate({ argv: [], flags: {} }, testContext())).rejects.toThrow(
123
+ "--file",
124
+ );
125
125
  });
126
126
 
127
127
  test("valid manifest → pass, items + next in JSON output", async () => {
@@ -132,10 +132,7 @@ describe("runQueueValidate — command contract (RFC-1140)", () => {
132
132
  "id: block-h\ncreatedAt: 2026-09-23\nitems:\n - id: RFC-1400\n - id: RFC-1401\n",
133
133
  );
134
134
 
135
- const result = await runQueueValidate(
136
- { argv: [], flags: { file } },
137
- testContext(),
138
- );
135
+ const result = await runQueueValidate({ argv: [], flags: { file } }, testContext());
139
136
 
140
137
  expect(result?.data?.status).toBe("pass");
141
138
  expect(result?.data?.queue).toBe("block-h");
@@ -152,10 +149,7 @@ describe("runQueueValidate — command contract (RFC-1140)", () => {
152
149
  "id: block-i\ncreatedAt: 2026-09-23\nitems:\n - id: RFC-9999\n",
153
150
  );
154
151
 
155
- const result = await runQueueValidate(
156
- { argv: [], flags: { file } },
157
- testContext(),
158
- );
152
+ const result = await runQueueValidate({ argv: [], flags: { file } }, testContext());
159
153
 
160
154
  expect(result?.data?.status).toBe("fail");
161
155
  expect(result?.exitCode).toBe(1);
@@ -165,10 +159,7 @@ describe("runQueueValidate — command contract (RFC-1140)", () => {
165
159
  test("empty items → pass with next null", async () => {
166
160
  const file = await writeManifest("block-j", "id: block-j\ncreatedAt: 2026-09-23\nitems: []\n");
167
161
 
168
- const result = await runQueueValidate(
169
- { argv: [], flags: { file } },
170
- testContext(),
171
- );
162
+ const result = await runQueueValidate({ argv: [], flags: { file } }, testContext());
172
163
 
173
164
  expect(result?.data?.status).toBe("pass");
174
165
  expect(result?.data?.items).toEqual([]);
@@ -18,8 +18,9 @@ prose checklist.
18
18
  </CHANGE_SUMMARY>
19
19
  */
20
20
 
21
- import { spawn } from "node:child_process";
22
- import { stat, readFile } from "node:fs/promises";
21
+ import { spawn } from "../../src/utils/sync-fs.ts";
22
+ import { ambientIo, resolveIo } from "../../src/utils/io.ts";
23
+
23
24
  import path from "node:path";
24
25
  import { parse as yamlParse } from "yaml";
25
26
  import { Ajv } from "ajv";
@@ -40,12 +41,16 @@ import { RFC_DIR, RFC_PROBE_BINDING_CUTOFF } from "./types.ts";
40
41
  import { listRfcFiles, readAndParseRfc } from "./frontmatter-io.ts";
41
42
  import { evaluateAcceptanceCriteria, computeProbeCoverage } from "./handlers/validate-rules.ts";
42
43
 
44
+ // Ambient default for helper fns without a context param — handlers override
45
+ // with `const io = resolveIo(context.io)` inside their own scope.
46
+ const io = ambientIo;
47
+
43
48
  const RUN_PROBE_ALLOWED_PREFIX = "werkstatt ";
44
49
 
45
50
  async function loadManifestCommandNames(workspaceRoot: string): Promise<Set<string>> {
46
51
  const manifestPath = path.join(workspaceRoot, "docs", "command-manifest.generated.yaml");
47
52
  try {
48
- const raw = await readFile(manifestPath, "utf-8");
53
+ const raw = await io.readFile(manifestPath);
49
54
  const manifest = yamlParse(raw) as { commands?: Array<{ name: string }> };
50
55
  return new Set((manifest.commands ?? []).map((c) => c.name));
51
56
  } catch {
@@ -290,7 +295,7 @@ export async function runProbe(
290
295
  }
291
296
  case "file-exists": {
292
297
  try {
293
- await stat(path.join(workspaceRoot, probe.path));
298
+ await io.stat(path.join(workspaceRoot, probe.path));
294
299
  return { probe, ok: true, detail: "exists" };
295
300
  } catch {
296
301
  return { probe, ok: false, detail: "does not exist" };
@@ -298,7 +303,7 @@ export async function runProbe(
298
303
  }
299
304
  case "file-contains": {
300
305
  try {
301
- const content = await readFile(path.join(workspaceRoot, probe.path), "utf8");
306
+ const content = await io.readFile(path.join(workspaceRoot, probe.path));
302
307
  const re = new RegExp(probe.pattern, "m");
303
308
  const ok = re.test(content);
304
309
  return { probe, ok, detail: ok ? "pattern found" : "pattern not found" };
@@ -336,7 +341,7 @@ export async function runProbe(
336
341
  const artifactPath = path.join(workspaceRoot, probe.artifact);
337
342
  let raw: string;
338
343
  try {
339
- raw = await readFile(artifactPath, "utf8");
344
+ raw = await io.readFile(artifactPath);
340
345
  } catch {
341
346
  return { probe, ok: false, detail: "artifact file not found" };
342
347
  }
@@ -373,6 +378,7 @@ export async function runRfcAcceptanceRun(
373
378
  input: ForgeCommandInput,
374
379
  context: ForgeRuntimeContext,
375
380
  ): Promise<ForgeCommandResult<RfcAcceptanceRunResult>> {
381
+ const _io = resolveIo(context.io);
376
382
  const { workspaceRoot } = context;
377
383
  const rfcDirPath = path.join(workspaceRoot, RFC_DIR);
378
384
  const targetId = input.flags["id"] as string | undefined;
@@ -15,8 +15,8 @@ keywords for rfc.create consultation, and generate/validate projections.
15
15
  </CHANGE_SUMMARY>
16
16
  */
17
17
 
18
- import { readFile } from "node:fs/promises";
19
18
  import { join } from "node:path";
19
+ import { resolveIo } from "../../src/utils/io.ts";
20
20
 
21
21
  import { writeFileAtomic } from "../../src/utils/fs-atomic.ts";
22
22
  import { buildGeneratedHeader } from "../../src/utils/generated-marker.ts";
@@ -209,6 +209,7 @@ export async function runRfcDecisionLogGenerate(
209
209
  input: ForgeCommandInput,
210
210
  context: ForgeRuntimeContext,
211
211
  ): Promise<ForgeCommandResult<DecisionLogResult>> {
212
+ const io = resolveIo(context.io);
212
213
  const { workspaceRoot, logger, outputFormat } = context;
213
214
  const checkMode = Boolean(input.flags["check"]);
214
215
  const rfcDirPath = join(workspaceRoot, RFC_DIR);
@@ -223,7 +224,7 @@ export async function runRfcDecisionLogGenerate(
223
224
  let drift = false;
224
225
 
225
226
  try {
226
- const existingJson = await readFile(join(workspaceRoot, jsonRelPath), "utf-8");
227
+ const existingJson = await io.readFile(join(workspaceRoot, jsonRelPath));
227
228
  const expectedJson = `${buildGeneratedHeader({ filePath: jsonRelPath, ownerCommand: "rfc.decision-log.generate" })}${yamlStringify({ command: "rfc.decision-log.generate", status: "ok", count: entries.length, entries })}\n`;
228
229
  if (existingJson !== expectedJson) {
229
230
  drift = true;
@@ -245,7 +246,7 @@ export async function runRfcDecisionLogGenerate(
245
246
  }
246
247
 
247
248
  try {
248
- const existingMd = await readFile(join(workspaceRoot, mdRelPath), "utf-8");
249
+ const existingMd = await io.readFile(join(workspaceRoot, mdRelPath));
249
250
  const expectedMd = renderMarkdown(entries);
250
251
  if (existingMd !== expectedMd) {
251
252
  drift = true;