@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
@@ -10,6 +10,7 @@ knowledge:
10
10
  - qa-log.md
11
11
  - learned-principles.md
12
12
  ---
13
+
13
14
  <!--
14
15
  <MODULE_CONTRACT>
15
16
  <purpose>grilling skill — Grill the user relentlessly about a plan or design. Use when the user wants to stress-test a plan before building, or uses any 'grill' trigger phrases.</purpose>
@@ -24,7 +25,6 @@ Sweep batch 1: add Compass v2 headers to 45 SKILL.md files (purpose derived from
24
25
  </CHANGE_SUMMARY>
25
26
  -->
26
27
 
27
-
28
28
  Before starting, read `PREFERENCES.md` at the repository root. If the file is missing or `aiLanguage` is unset, ask the operator once and create the file using the `my-preferences` skill semantics.
29
29
 
30
30
  Read `learned-principles.md` (L2) at the start of each session to improve recommended answers. Apply only entries with `status: active`; skip entries with `status: stale`, `superseded`, or `archived`. Principles with `confirmations >= 3` may be applied autonomously — but re-evaluate if context changes.
@@ -1,7 +1,9 @@
1
1
  <!-- knowledge-layer: L2 -->
2
+
2
3
  # learned-principles.md (archive)
3
4
 
4
5
  Archived entries from learned-principles.md. Generated by forge.skill.knowledge.compact (RFC-0662).
6
+
5
7
  ### K-0001: Extend infrastructure before feature logic
6
8
 
7
9
  ```knowledge-entry
@@ -15,6 +17,7 @@ status: superseded
15
17
  ```
16
18
 
17
19
  Promoted to shared layer as shared/K-0003.
20
+
18
21
  ### K-0002: Unknown is not green
19
22
 
20
23
  ```knowledge-entry
@@ -28,6 +31,7 @@ status: superseded
28
31
  ```
29
32
 
30
33
  Promoted to shared layer as shared/K-0001.
34
+
31
35
  ### K-0003: Quality claims bind to immutable identity
32
36
 
33
37
  ```knowledge-entry
@@ -41,6 +45,7 @@ status: superseded
41
45
  ```
42
46
 
43
47
  Promoted to shared layer as shared/K-0001.
48
+
44
49
  ### K-0004: Evaluation must not mutate its subject
45
50
 
46
51
  ```knowledge-entry
@@ -54,6 +59,7 @@ status: superseded
54
59
  ```
55
60
 
56
61
  Promoted to shared layer as shared/K-0004.
62
+
57
63
  ### K-0005: Immutable history and current health are separate
58
64
 
59
65
  ```knowledge-entry
@@ -67,6 +73,7 @@ status: superseded
67
73
  ```
68
74
 
69
75
  Promoted to shared layer as shared/K-0001.
76
+
70
77
  ### K-0006: Migration complexity follows the real estate
71
78
 
72
79
  ```knowledge-entry
@@ -80,6 +87,7 @@ status: superseded
80
87
  ```
81
88
 
82
89
  Promoted to shared layer as shared/K-0003.
90
+
83
91
  ### K-0007: Integrity requires an independent authority
84
92
 
85
93
  ```knowledge-entry
@@ -93,6 +101,7 @@ status: superseded
93
101
  ```
94
102
 
95
103
  Promoted to shared layer as shared/K-0002.
104
+
96
105
  ### K-0008: Historical verification preserves policy bytes
97
106
 
98
107
  ```knowledge-entry
@@ -106,6 +115,7 @@ status: superseded
106
115
  ```
107
116
 
108
117
  Promoted to shared layer as shared/K-0001.
118
+
109
119
  ### K-0009: Distributed evidence uses authority order and immutable cuts
110
120
 
111
121
  ```knowledge-entry
@@ -119,6 +129,7 @@ status: superseded
119
129
  ```
120
130
 
121
131
  Promoted to shared layer as shared/K-0002.
132
+
122
133
  ### K-0010: Bootstrap safety does not create legacy authority
123
134
 
124
135
  ```knowledge-entry
@@ -132,6 +143,7 @@ status: superseded
132
143
  ```
133
144
 
134
145
  Promoted to shared layer as shared/K-0003.
146
+
135
147
  ### K-0011: Documents are execution boundaries
136
148
 
137
149
  ```knowledge-entry
@@ -145,6 +157,7 @@ status: superseded
145
157
  ```
146
158
 
147
159
  Promoted to shared layer as shared/K-0005.
160
+
148
161
  ### K-0012: Supersede decision authority, preserve useful mechanisms deliberately
149
162
 
150
163
  ```knowledge-entry
@@ -158,6 +171,7 @@ status: superseded
158
171
  ```
159
172
 
160
173
  Promoted to shared layer as shared/K-0003.
174
+
161
175
  ### K-0013: Deterministic aggregators need scale contracts
162
176
 
163
177
  ```knowledge-entry
@@ -171,6 +185,7 @@ status: superseded
171
185
  ```
172
186
 
173
187
  Promoted to shared layer as shared/K-0006.
188
+
174
189
  ### K-0014: Canonical identities require a closed snapshot boundary
175
190
 
176
191
  ```knowledge-entry
@@ -184,6 +199,7 @@ status: superseded
184
199
  ```
185
200
 
186
201
  Promoted to shared layer as shared/K-0007.
202
+
187
203
  ### K-0015: Permanent formats profile standards instead of imitating them
188
204
 
189
205
  ```knowledge-entry
@@ -197,6 +213,7 @@ status: superseded
197
213
  ```
198
214
 
199
215
  Promoted to shared layer as shared/K-0007.
216
+
200
217
  ### K-0016: Cutover enforcement starts after executor bootstrap
201
218
 
202
219
  ```knowledge-entry
@@ -10,4 +10,3 @@ Concrete principles distilled from past grilling sessions. Each principle has a
10
10
  - **confirmations:** <N>
11
11
  - **Added:** <date>
12
12
  -->
13
-
@@ -18,6 +18,7 @@ status: active
18
18
 
19
19
  - **Condition:** A consequential durable decision depends on evidence, policy, or artifact state that may later change or become unavailable.
20
20
  - **Recommended answer:** Represent missing, stale, malformed, or unavailable evidence explicitly and fail closed. Bind the decision to immutable subject and policy bytes, preserve its evidence as append-only history, and calculate current health separately rather than rewriting the historical result.
21
+
21
22
  ### K-0002: Integrity requires authority ordering
22
23
 
23
24
  ```knowledge-entry
@@ -32,6 +33,7 @@ status: active
32
33
 
33
34
  - **Condition:** Evidence or events may be produced concurrently, retried, submitted by the artifact author, delivered out of order, or received after a decision closes.
34
35
  - **Recommended answer:** Admit evidence through a separate least-privilege authority that assigns a monotonic sequence and freezes every decision at an explicit evaluation cut. Producer timestamps never determine precedence, self-authored consistency is not authority, and late results create a new decision or incident instead of rewriting history.
36
+
35
37
  ### K-0003: Forward-only cutovers preserve recovery, not legacy authority
36
38
 
37
39
  ```knowledge-entry
@@ -46,6 +48,7 @@ status: active
46
48
 
47
49
  - **Condition:** A forward-only transition replaces an authority model, runtime, toolchain, or deployment contract while still requiring prerequisites and a recoverable first cutover.
48
50
  - **Recommended answer:** Provision and verify the required executor and infrastructure before activating enforcement. Then supersede the old authority through the smallest complete cutover that fits the real estate. Preserve useful old mechanisms only as explicitly non-authorizing infrastructure; permit a narrow, one-time rollback target with explicit closure conditions, never an indefinite compatibility path.
51
+
49
52
  ### K-0004: Evaluation must not mutate its subject
50
53
 
51
54
  ```knowledge-entry
@@ -60,6 +63,7 @@ status: active
60
63
 
61
64
  - **Condition:** A gate, evaluator, audit, review, or certification process discovers a defect in the artifact it judges.
62
65
  - **Recommended answer:** Keep evaluation read-only with respect to the judged artifact. Emit precise, anchored remediation tasks; apply fixes in a separate authoring flow that produces a new artifact identity and a new evidence chain.
66
+
63
67
  ### K-0005: Documents are executable boundaries
64
68
 
65
69
  ```knowledge-entry
@@ -74,6 +78,7 @@ status: active
74
78
 
75
79
  - **Condition:** A specification or implementation document will be executed by another agent—possibly less capable—in an isolated session.
76
80
  - **Recommended answer:** Decompose work into dependency-ordered documents that each define their inputs, outputs, forbidden shortcuts, acceptance evidence, and bounded validation. Every document must leave its affected scope internally consistent; use a final integration document for cross-module laws instead of relying on unstated context.
81
+
77
82
  ### K-0006: Deterministic mechanisms require scale contracts
78
83
 
79
84
  ```knowledge-entry
@@ -88,6 +93,7 @@ status: active
88
93
 
89
94
  - **Condition:** A deterministic evaluator, selector, validator, or aggregator processes potentially growing collections and may gate a consequential transition.
90
95
  - **Recommended answer:** Specify hard input limits, time and memory complexity, overflow behavior, and a deterministic stress fixture. Reject overflow explicitly without truncation or synthesized success, and forbid repeated full scans when an indexed or single-pass design is available.
96
+
91
97
  ### K-0007: Canonical identities use closed snapshots and named standards
92
98
 
93
99
  ```knowledge-entry
@@ -7,6 +7,7 @@ concerns: document-only
7
7
  dependsOn: []
8
8
  languagePolicy: ref(PREFERENCES.md)
9
9
  ---
10
+
10
11
  <!--
11
12
  <MODULE_CONTRACT>
12
13
  <purpose>my-preferences skill — Read, create, or edit the operator's preferences file at the repository root. Run when the operator wants to change language settings for AI conversations, grilling, or project documentation.</purpose>
@@ -21,7 +22,6 @@ Sweep batch 1: add Compass v2 headers to 45 SKILL.md files (purpose derived from
21
22
  </CHANGE_SUMMARY>
22
23
  -->
23
24
 
24
-
25
25
  # my-preferences
26
26
 
27
27
  Before starting, read `PREFERENCES.md` at the repository root. If the file is missing, create it using the semantics below.
@@ -7,6 +7,7 @@ concerns: code-mutation
7
7
  dependsOn: []
8
8
  languagePolicy: ref(PREFERENCES.md)
9
9
  ---
10
+
10
11
  <!--
11
12
  <MODULE_CONTRACT>
12
13
  <purpose>windows-ai-tooling skill — Bootstrap a Windows project for AI agents. Installs verified tools, generates .gitattributes, and emits a command allow-list for agent prompts. Run when starting a new project or when agents fail.</purpose>
@@ -21,7 +22,6 @@ Sweep batch 1: add Compass v2 headers to 45 SKILL.md files (purpose derived from
21
22
  </CHANGE_SUMMARY>
22
23
  -->
23
24
 
24
-
25
25
  # Windows AI Tooling
26
26
 
27
27
  Before starting, read `PREFERENCES.md` at the repository root. If the file is missing or `aiLanguage` is unset, ask the operator once and create the file using the `my-preferences` skill semantics.
@@ -7,6 +7,7 @@ concerns: read-only
7
7
  dependsOn: []
8
8
  languagePolicy: ref(PREFERENCES.md)
9
9
  ---
10
+
10
11
  <!--
11
12
  <MODULE_CONTRACT>
12
13
  <purpose>writing-great-skills skill — Reference for writing and editing skills well — the vocabulary and principles that make a skill predictable.</purpose>
@@ -21,7 +22,6 @@ Sweep batch 1: add Compass v2 headers to 45 SKILL.md files (purpose derived from
21
22
  </CHANGE_SUMMARY>
22
23
  -->
23
24
 
24
-
25
25
  Before starting, read `PREFERENCES.md` at the repository root. If the file is missing or `aiLanguage` is unset, ask the operator once and create the file using the `my-preferences` skill semantics.
26
26
 
27
27
  A skill exists to wrangle determinism out of a stochastic system. **Predictability** — the agent taking the same _process_ every run, not producing the same output — is the root virtue; every lever below serves it.
@@ -0,0 +1,285 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Argv-to-flags resolution for the standalone forge CLI — a standalone
4
+ port of the kernel's RFC-0260 semantics (resolveCommandFlags for schema-carrying
5
+ commands, the heuristic parser for schema-less ones). Ensures a declared string
6
+ flag never reaches a handler as `true`, which crashed `forge rfc.validate --id`
7
+ with `TypeError: targetId.toLowerCase is not a function`.</purpose>
8
+ <non-goals>
9
+ <item>Do not import from @warpgogol/* — forge is autonomous (FORGE-AUTONOMY-01); keep this a self-contained port.</item>
10
+ <item>Do not call console.* or process.exit — bin/cli.ts renders diagnostics and decides the exit code.</item>
11
+ </non-goals>
12
+ </MODULE_CONTRACT>
13
+ <CHANGE_SUMMARY>
14
+ <item>Standalone port of kernel argv resolution for the forge CLI: strict KERNEL-FLAG-01/02/03 + KERNEL-ARG-01 diagnostics for schema-carrying commands, legacy heuristic parse (with KERNEL-ARG-01) for schema-less commands; repeated single-value string flags diagnose instead of silently promoting to an array that crashes handlers.</item>
15
+ </CHANGE_SUMMARY>
16
+ */
17
+
18
+ import type {
19
+ Diagnostic,
20
+ ForgeCommandDefinition,
21
+ ForgeFlagSpec,
22
+ ForgeFlagValue,
23
+ } from "./types.ts";
24
+
25
+ /**
26
+ * Flags every CLI command accepts regardless of its own declared schema —
27
+ * mirrors the kernel's KERNEL_UNIVERSAL_FLAGS so both entry points accept the
28
+ * same universal switches.
29
+ */
30
+ export const CLI_UNIVERSAL_FLAGS: Record<string, ForgeFlagSpec> = {
31
+ site: { kind: "string", description: "Target a specific site by name." },
32
+ all: { kind: "boolean", description: "Run against every discovered app." },
33
+ json: { kind: "boolean", description: "Emit machine-readable JSON instead of pretty output." },
34
+ quiet: { kind: "boolean", description: "Suppress non-essential log output." },
35
+ verbose: { kind: "boolean", description: "Emit additional diagnostic log output." },
36
+ root: { kind: "string", description: "Override the resolved workspace root." },
37
+ "dry-run": { kind: "boolean", description: "Report intended mutations without writing them." },
38
+ force: { kind: "boolean", description: "Bypass a normally-blocking safety check." },
39
+ help: { kind: "boolean", description: "Print command help instead of executing." },
40
+ };
41
+
42
+ /**
43
+ * Boolean switches for the legacy heuristic path (schema-less commands).
44
+ * Mirrors the kernel's KERNEL_BOOLEAN_FLAGS: a listed flag never consumes the
45
+ * following token as its value.
46
+ */
47
+ const CLI_BOOLEAN_FLAGS = new Set<string>([
48
+ "all",
49
+ "all-apps",
50
+ "approve-all",
51
+ "dry-run",
52
+ "force",
53
+ "help",
54
+ "inplace",
55
+ "json",
56
+ "mini",
57
+ "packages",
58
+ "page",
59
+ "prod",
60
+ "quiet",
61
+ "regen",
62
+ "regenerate",
63
+ "report-only",
64
+ "show-versions",
65
+ "strict",
66
+ "verbose",
67
+ "version",
68
+ "write",
69
+ ]);
70
+
71
+ function addFlagValue(
72
+ target: Record<string, ForgeFlagValue>,
73
+ key: string,
74
+ value: string | boolean,
75
+ ): void {
76
+ const existing = target[key];
77
+
78
+ if (existing === undefined) {
79
+ target[key] = value;
80
+ return;
81
+ }
82
+
83
+ if (Array.isArray(existing)) {
84
+ if (typeof value === "string") {
85
+ target[key] = [...existing, value];
86
+ }
87
+ return;
88
+ }
89
+
90
+ if (typeof existing === "string") {
91
+ if (typeof value === "string") {
92
+ target[key] = [existing, value];
93
+ return;
94
+ }
95
+
96
+ target[key] = existing;
97
+ return;
98
+ }
99
+
100
+ target[key] = value;
101
+ }
102
+
103
+ function positionalDiagnostic(entry: string, commandName?: string): Diagnostic {
104
+ const scope = commandName ? ` for command "${commandName}"` : "";
105
+ return {
106
+ ruleId: "KERNEL-ARG-01",
107
+ severity: "error",
108
+ message: `Unexpected positional argument "${entry}"${scope}. All arguments must be passed as flags.`,
109
+ fixHint: `Convert "${entry}" to a flag, e.g. --id ${entry}.`,
110
+ };
111
+ }
112
+
113
+ /**
114
+ * Legacy heuristic parse for commands without a `flags` schema — mirrors the
115
+ * kernel's parseKernelArgv: unknown flags are accepted, boolean-ness comes
116
+ * from CLI_BOOLEAN_FLAGS, and positional tokens produce KERNEL-ARG-01.
117
+ */
118
+ export function parseCliArgs(argv: string[]): {
119
+ flags: Record<string, ForgeFlagValue>;
120
+ diagnostics: Diagnostic[];
121
+ } {
122
+ const flags: Record<string, ForgeFlagValue> = {};
123
+ const diagnostics: Diagnostic[] = [];
124
+ let passthrough = false;
125
+
126
+ for (let index = 0; index < argv.length; index += 1) {
127
+ const entry = argv[index]!;
128
+
129
+ if (passthrough) {
130
+ diagnostics.push(positionalDiagnostic(entry));
131
+ continue;
132
+ }
133
+
134
+ if (entry === "--") {
135
+ passthrough = true;
136
+ continue;
137
+ }
138
+
139
+ if (!entry.startsWith("--")) {
140
+ diagnostics.push(positionalDiagnostic(entry));
141
+ continue;
142
+ }
143
+
144
+ const withoutPrefix = entry.slice(2);
145
+ const [flagName, inlineValue] = withoutPrefix.split("=", 2);
146
+ if (!flagName) continue;
147
+
148
+ if (inlineValue !== undefined) {
149
+ addFlagValue(flags, flagName, inlineValue);
150
+ continue;
151
+ }
152
+
153
+ if (CLI_BOOLEAN_FLAGS.has(flagName)) {
154
+ addFlagValue(flags, flagName, true);
155
+ continue;
156
+ }
157
+
158
+ const next = argv[index + 1];
159
+ if (typeof next === "string" && !next.startsWith("--")) {
160
+ addFlagValue(flags, flagName, next);
161
+ index += 1;
162
+ continue;
163
+ }
164
+
165
+ addFlagValue(flags, flagName, true);
166
+ }
167
+
168
+ return { flags, diagnostics };
169
+ }
170
+
171
+ function resolveStrict(
172
+ rawArgv: string[],
173
+ command: ForgeCommandDefinition,
174
+ ): { flags: Record<string, ForgeFlagValue>; diagnostics: Diagnostic[] } {
175
+ const schema: Record<string, ForgeFlagSpec> = {
176
+ ...CLI_UNIVERSAL_FLAGS,
177
+ ...(command.flags ?? {}),
178
+ };
179
+ const validFlagNames = Object.keys(schema).sort();
180
+ const flags: Record<string, ForgeFlagValue> = {};
181
+ const diagnostics: Diagnostic[] = [];
182
+ let passthrough = false;
183
+
184
+ for (let index = 0; index < rawArgv.length; index += 1) {
185
+ const entry = rawArgv[index]!;
186
+
187
+ if (passthrough) {
188
+ diagnostics.push(positionalDiagnostic(entry, command.name));
189
+ continue;
190
+ }
191
+
192
+ if (entry === "--") {
193
+ passthrough = true;
194
+ continue;
195
+ }
196
+
197
+ if (!entry.startsWith("--")) {
198
+ diagnostics.push(positionalDiagnostic(entry, command.name));
199
+ continue;
200
+ }
201
+
202
+ const withoutPrefix = entry.slice(2);
203
+ const [flagName, inlineValue] = withoutPrefix.split("=", 2);
204
+ if (!flagName) continue;
205
+
206
+ const spec = schema[flagName];
207
+ if (!spec) {
208
+ diagnostics.push({
209
+ ruleId: "KERNEL-FLAG-01",
210
+ severity: "error",
211
+ message: `Unknown flag "--${flagName}" for command "${command.name}". Valid flags: ${validFlagNames.join(", ")}`,
212
+ fixHint: `Remove --${flagName}, fix the typo, or add it to the flags schema for ${command.name}.`,
213
+ });
214
+ continue;
215
+ }
216
+
217
+ if (inlineValue !== undefined) {
218
+ addFlagValue(
219
+ flags,
220
+ flagName,
221
+ spec.kind === "boolean" ? inlineValue !== "false" : inlineValue,
222
+ );
223
+ continue;
224
+ }
225
+
226
+ if (spec.kind === "boolean") {
227
+ addFlagValue(flags, flagName, true);
228
+ continue;
229
+ }
230
+
231
+ const next = rawArgv[index + 1];
232
+ if (typeof next === "string" && !next.startsWith("--")) {
233
+ addFlagValue(flags, flagName, next);
234
+ index += 1;
235
+ continue;
236
+ }
237
+
238
+ diagnostics.push({
239
+ ruleId: "KERNEL-FLAG-02",
240
+ severity: "error",
241
+ message: `Flag "--${flagName}" for command "${command.name}" requires a value but none was given.`,
242
+ fixHint: `Pass --${flagName} <value> or --${flagName}=<value>.`,
243
+ });
244
+ }
245
+
246
+ for (const [flagName, spec] of Object.entries(schema)) {
247
+ const value = flags[flagName];
248
+ if (spec.required && value === undefined) {
249
+ diagnostics.push({
250
+ ruleId: "KERNEL-FLAG-03",
251
+ severity: "error",
252
+ message: `Required flag "--${flagName}" is missing for command "${command.name}".`,
253
+ fixHint: `Pass --${flagName} <value>.`,
254
+ });
255
+ } else if (value === undefined && spec.default !== undefined) {
256
+ flags[flagName] = spec.default;
257
+ } else if (spec.kind === "string" && Array.isArray(value)) {
258
+ diagnostics.push({
259
+ ruleId: "KERNEL-FLAG-02",
260
+ severity: "error",
261
+ message: `Flag "--${flagName}" for command "${command.name}" accepts a single value but was given multiple.`,
262
+ fixHint: `Pass --${flagName} once, or declare the flag as kind "string[]" if multiple values are intended.`,
263
+ });
264
+ }
265
+ }
266
+
267
+ return { flags, diagnostics };
268
+ }
269
+
270
+ /**
271
+ * Resolve raw argv against a command's declared flag schema (merged with
272
+ * CLI_UNIVERSAL_FLAGS) — the standalone-CLI counterpart of the kernel's
273
+ * resolveCommandFlags. Schema-carrying commands (`command.flags` set,
274
+ * including `{}`) resolve strictly; schema-less commands keep the legacy
275
+ * heuristic parse. Either way, positional tokens produce KERNEL-ARG-01.
276
+ */
277
+ export function resolveCliFlags(
278
+ argv: string[],
279
+ command: ForgeCommandDefinition,
280
+ ): { flags: Record<string, ForgeFlagValue>; diagnostics: Diagnostic[] } {
281
+ if (command.flags) {
282
+ return resolveStrict(argv, command);
283
+ }
284
+ return parseCliArgs(argv);
285
+ }
@@ -12,7 +12,7 @@
12
12
  </CHANGE_SUMMARY>
13
13
  */
14
14
 
15
- import fs from "node:fs";
15
+ import * as fs from "../utils/sync-fs.ts";
16
16
  import path from "node:path";
17
17
  import { parse as parseYaml } from "yaml";
18
18
  import picomatch from "picomatch";
@@ -19,7 +19,7 @@ Sweep batch 2: real KEY_DECISIONS on 10 files, expanded purposes (CONTRACT-02/PU
19
19
  </CHANGE_SUMMARY>
20
20
  */
21
21
 
22
- import fs from "node:fs";
22
+ import * as fs from "../utils/sync-fs.ts";
23
23
  import path from "node:path";
24
24
  import { z } from "zod";
25
25
  import { parse as parseYaml } from "yaml";
@@ -24,8 +24,7 @@ afterEach(() => {
24
24
  });
25
25
 
26
26
  function entry(id: string, title: string, body: string, layer = "L0"): string {
27
- const confirmations =
28
- layer === "L2" ? `lastConfirmedAt: 2026-08-03\nconfirmations: 1\n` : "";
27
+ const confirmations = layer === "L2" ? `lastConfirmedAt: 2026-08-03\nconfirmations: 1\n` : "";
29
28
  return `### ${id}: ${title}\n\n\`\`\`knowledge-entry\nid: ${id}\nlayer: ${layer}\ncreated: 2026-08-03\n${confirmations}status: active\n\`\`\`\n\n${body}\n`;
30
29
  }
31
30
 
@@ -99,11 +98,7 @@ test("merges: local entries preserved, new source entries appended", () => {
99
98
  test("merge into empty template appends all source entries", () => {
100
99
  const src = join(tempDir, "qa-log.md");
101
100
  const dest = join(tempDir, "dest.md");
102
- writeFileSync(
103
- src,
104
- knowledgeFile("L0", [entry("K-0001", "First", "Body one.")]),
105
- "utf8",
106
- );
101
+ writeFileSync(src, knowledgeFile("L0", [entry("K-0001", "First", "Body one.")]), "utf8");
107
102
  // Destination is the shipped empty template (layer marker, no entries)
108
103
  writeFileSync(dest, `<!-- knowledge-layer: L0 -->\n\n# Q&A Log (L0)\n`, "utf8");
109
104
 
@@ -13,7 +13,7 @@
13
13
  */
14
14
 
15
15
  import path from "node:path";
16
- import { readFileSync } from "node:fs";
16
+ import { readFileSync } from "../utils/sync-fs.ts";
17
17
  import { parse as parseYaml } from "yaml";
18
18
  import type { ParsedKnowledgeFile, KnowledgeLayer } from "./schema.ts";
19
19
 
@@ -13,7 +13,7 @@
13
13
  </CHANGE_SUMMARY>
14
14
  */
15
15
 
16
- import fs from "node:fs";
16
+ import * as fs from "../utils/sync-fs.ts";
17
17
  import path from "node:path";
18
18
  import { parse as parseYaml } from "yaml";
19
19
  import type { ParsedKnowledgeFile, KnowledgeEntry, KnowledgeEntryMeta } from "./schema.ts";
@@ -11,7 +11,7 @@
11
11
  </CHANGE_SUMMARY>
12
12
  */
13
13
 
14
- import fs from "node:fs";
14
+ import * as fs from "../utils/sync-fs.ts";
15
15
  import path from "node:path";
16
16
  import { parse as parseYaml } from "yaml";
17
17
  import {
@@ -12,11 +12,11 @@ the synced copy with the package version.</purpose>
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>2026-09-24: initial append-only knowledge sync — merge by entry-ID union, local wins conflicts, skip divergent non-cumulative files, recurse into declared directories.</item>
15
+ <item>RFC-0660: initial append-only knowledge sync — merge by entry-ID union, local wins conflicts, skip divergent non-cumulative files, recurse into declared directories.</item>
16
16
  </CHANGE_SUMMARY>
17
17
  */
18
18
 
19
- import fs from "node:fs";
19
+ import * as fs from "../utils/sync-fs.ts";
20
20
  import path from "node:path";
21
21
  import { parseKnowledgeFile } from "./parse.ts";
22
22
  import { serializeKnowledgeFile } from "./serialize.ts";
@@ -80,9 +80,7 @@ function planFileSync(srcPath: string, destPath: string): KnowledgeSyncPlan {
80
80
  if (isCumulative(srcParsed) && isCumulative(destParsed)) {
81
81
  const destIds = new Set(destParsed.entries.map((e) => e.meta.id));
82
82
  const appendedEntries = srcParsed.entries.filter((e) => !destIds.has(e.meta.id));
83
- const conflicts = srcParsed.entries
84
- .filter((e) => destIds.has(e.meta.id))
85
- .map((e) => e.meta.id);
83
+ const conflicts = srcParsed.entries.filter((e) => destIds.has(e.meta.id)).map((e) => e.meta.id);
86
84
 
87
85
  const destLegacyTexts = new Set(destParsed.legacySections.map((l) => l.text.trim()));
88
86
  const appendedLegacy = srcParsed.legacySections.filter(
@@ -17,9 +17,9 @@ Sweep batch 4: 73 Compass headers on headerless engine files (certification, com
17
17
  </CHANGE_SUMMARY>
18
18
  */
19
19
 
20
- import fs from "node:fs";
20
+ import * as fs from "../utils/sync-fs.ts";
21
21
  import path from "node:path";
22
- import { execFileSync } from "node:child_process";
22
+ import { execFileSync } from "../utils/sync-fs.ts";
23
23
  import { trashSync } from "../utils/fs-trash-sync.ts";
24
24
  import type { AdapterAnalysis } from "./types.ts";
25
25
 
@@ -16,9 +16,9 @@ Sweep batch 4: 73 Compass headers on headerless engine files (certification, com
16
16
  </CHANGE_SUMMARY>
17
17
  */
18
18
 
19
- import fs from "node:fs";
19
+ import * as fs from "../utils/sync-fs.ts";
20
20
  import path from "node:path";
21
- import { execFileSync } from "node:child_process";
21
+ import { execFileSync } from "../utils/sync-fs.ts";
22
22
 
23
23
  export type IgnoredFileCategoryId = "config" | "data" | "runtime-state" | "cache" | "other";
24
24
 
@@ -13,7 +13,7 @@
13
13
  </CHANGE_SUMMARY>
14
14
  */
15
15
 
16
- import fs from "node:fs";
16
+ import * as fs from "../../utils/sync-fs.ts";
17
17
  import path from "node:path";
18
18
  import type { MigrationAdapter, AdapterAnalysis, MigrationResult, Conflict } from "../types.ts";
19
19
  import { FORGE_PROTECTED_PATHS, DEFAULT_EXCLUDE_PATTERNS } from "../types.ts";
@@ -13,7 +13,7 @@
13
13
  </CHANGE_SUMMARY>
14
14
  */
15
15
 
16
- import fs from "node:fs";
16
+ import * as fs from "../../utils/sync-fs.ts";
17
17
  import path from "node:path";
18
18
  import type { MigrationAdapter, AdapterAnalysis, MigrationResult, Conflict } from "../types.ts";
19
19
  import { FORGE_PROTECTED_PATHS, DEFAULT_EXCLUDE_PATTERNS } from "../types.ts";