@warpgogol/forge 4.2.4 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/AGENTS.md +13 -5
  2. package/dist/os/adr/handlers/list-create.d.ts.map +1 -1
  3. package/dist/os/adr/handlers/list-create.js +4 -1
  4. package/dist/os/adr/handlers/list-create.js.map +1 -1
  5. package/dist/os/adr/handlers/validate.d.ts.map +1 -1
  6. package/dist/os/adr/handlers/validate.js +6 -1
  7. package/dist/os/adr/handlers/validate.js.map +1 -1
  8. package/dist/os/adr/types.d.ts.map +1 -1
  9. package/dist/os/adr/types.js +7 -3
  10. package/dist/os/adr/types.js.map +1 -1
  11. package/dist/os/compass/compass.module.d.ts.map +1 -1
  12. package/dist/os/compass/compass.module.js +76 -10
  13. package/dist/os/compass/compass.module.js.map +1 -1
  14. package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -1
  15. package/dist/os/compass/handlers/compass-audit-handler.js +7 -3
  16. package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
  17. package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +1 -9
  18. package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -1
  19. package/dist/os/compass/handlers/compass-change-summary-handler.js +44 -186
  20. package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -1
  21. package/dist/os/compass/handlers/compass-inventory-handler.d.ts +2 -0
  22. package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -1
  23. package/dist/os/compass/handlers/compass-inventory-handler.js +24 -12
  24. package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -1
  25. package/dist/os/compass/handlers/compass-inventory.d.ts +7 -5
  26. package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -1
  27. package/dist/os/compass/handlers/compass-inventory.js +84 -241
  28. package/dist/os/compass/handlers/compass-inventory.js.map +1 -1
  29. package/dist/os/compass/handlers/compass-migrate-handler.d.ts +4 -0
  30. package/dist/os/compass/handlers/compass-migrate-handler.d.ts.map +1 -0
  31. package/dist/os/compass/handlers/compass-migrate-handler.js +100 -0
  32. package/dist/os/compass/handlers/compass-migrate-handler.js.map +1 -0
  33. package/dist/os/compass/handlers/compass-migrate.d.ts +34 -0
  34. package/dist/os/compass/handlers/compass-migrate.d.ts.map +1 -0
  35. package/dist/os/compass/handlers/compass-migrate.js +273 -0
  36. package/dist/os/compass/handlers/compass-migrate.js.map +1 -0
  37. package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +1 -1
  38. package/dist/os/compass/handlers/resolve-scan-root.js +15 -8
  39. package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -1
  40. package/dist/os/compass/handlers/summary-record.d.ts +46 -0
  41. package/dist/os/compass/handlers/summary-record.d.ts.map +1 -0
  42. package/dist/os/compass/handlers/summary-record.js +233 -0
  43. package/dist/os/compass/handlers/summary-record.js.map +1 -0
  44. package/dist/os/compass/index.d.ts +4 -1
  45. package/dist/os/compass/index.d.ts.map +1 -1
  46. package/dist/os/compass/index.js +9 -1
  47. package/dist/os/compass/index.js.map +1 -1
  48. package/dist/os/compass/policy.d.ts +65 -0
  49. package/dist/os/compass/policy.d.ts.map +1 -0
  50. package/dist/os/compass/policy.js +241 -0
  51. package/dist/os/compass/policy.js.map +1 -0
  52. package/dist/os/core/core.module.d.ts.map +1 -1
  53. package/dist/os/core/core.module.js +9 -21
  54. package/dist/os/core/core.module.js.map +1 -1
  55. package/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +1 -1
  56. package/dist/os/core/handlers/forge-autonomy-validate.js +7 -1
  57. package/dist/os/core/handlers/forge-autonomy-validate.js.map +1 -1
  58. package/dist/os/core/handlers/package-health.d.ts.map +1 -1
  59. package/dist/os/core/handlers/package-health.js +6 -1
  60. package/dist/os/core/handlers/package-health.js.map +1 -1
  61. package/dist/os/core/handlers/pinned-check.d.ts.map +1 -1
  62. package/dist/os/core/handlers/pinned-check.js +6 -1
  63. package/dist/os/core/handlers/pinned-check.js.map +1 -1
  64. package/dist/os/core/handlers/pinned-validate.d.ts.map +1 -1
  65. package/dist/os/core/handlers/pinned-validate.js +6 -1
  66. package/dist/os/core/handlers/pinned-validate.js.map +1 -1
  67. package/dist/os/core/handlers/validate.d.ts.map +1 -1
  68. package/dist/os/core/handlers/validate.js +6 -1
  69. package/dist/os/core/handlers/validate.js.map +1 -1
  70. package/dist/os/exploration/exploration.module.d.ts.map +1 -1
  71. package/dist/os/exploration/exploration.module.js +6 -4
  72. package/dist/os/exploration/exploration.module.js.map +1 -1
  73. package/dist/os/exploration/handlers/list.d.ts.map +1 -1
  74. package/dist/os/exploration/handlers/list.js +4 -1
  75. package/dist/os/exploration/handlers/list.js.map +1 -1
  76. package/dist/os/mission/handlers/archive.d.ts.map +1 -1
  77. package/dist/os/mission/handlers/archive.js +7 -3
  78. package/dist/os/mission/handlers/archive.js.map +1 -1
  79. package/dist/os/mission/index.d.ts.map +1 -1
  80. package/dist/os/mission/index.js +13 -0
  81. package/dist/os/mission/index.js.map +1 -1
  82. package/dist/os/notes/index.d.ts.map +1 -1
  83. package/dist/os/notes/index.js +7 -1
  84. package/dist/os/notes/index.js.map +1 -1
  85. package/dist/os/rfc/frontmatter-io.d.ts.map +1 -1
  86. package/dist/os/rfc/frontmatter-io.js +6 -1
  87. package/dist/os/rfc/frontmatter-io.js.map +1 -1
  88. package/dist/os/rfc/handlers/archive.d.ts.map +1 -1
  89. package/dist/os/rfc/handlers/archive.js +6 -1
  90. package/dist/os/rfc/handlers/archive.js.map +1 -1
  91. package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
  92. package/dist/os/rfc/handlers/implement-stamp.js +7 -3
  93. package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
  94. package/dist/os/rfc/handlers/index-graph.d.ts.map +1 -1
  95. package/dist/os/rfc/handlers/index-graph.js +6 -1
  96. package/dist/os/rfc/handlers/index-graph.js.map +1 -1
  97. package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -1
  98. package/dist/os/rfc/handlers/lifecycle.js +6 -1
  99. package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
  100. package/dist/os/rfc/handlers/list-create.d.ts.map +1 -1
  101. package/dist/os/rfc/handlers/list-create.js +6 -1
  102. package/dist/os/rfc/handlers/list-create.js.map +1 -1
  103. package/dist/os/rfc/handlers/pipeline-status.d.ts.map +1 -1
  104. package/dist/os/rfc/handlers/pipeline-status.js +6 -1
  105. package/dist/os/rfc/handlers/pipeline-status.js.map +1 -1
  106. package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -1
  107. package/dist/os/rfc/handlers/supersede-propose.js +6 -1
  108. package/dist/os/rfc/handlers/supersede-propose.js.map +1 -1
  109. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  110. package/dist/os/rfc/handlers/validate-rules.js +7 -3
  111. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  112. package/dist/os/rfc/handlers/validate.d.ts.map +1 -1
  113. package/dist/os/rfc/handlers/validate.js +6 -1
  114. package/dist/os/rfc/handlers/validate.js.map +1 -1
  115. package/dist/os/rfc/index.d.ts.map +1 -1
  116. package/dist/os/rfc/index.js +6 -1
  117. package/dist/os/rfc/index.js.map +1 -1
  118. package/dist/os/rfc/rfc.module.d.ts.map +1 -1
  119. package/dist/os/rfc/rfc.module.js +6 -1
  120. package/dist/os/rfc/rfc.module.js.map +1 -1
  121. package/dist/os/rfc/types.d.ts +7 -4
  122. package/dist/os/rfc/types.d.ts.map +1 -1
  123. package/dist/os/rfc/types.js +7 -4
  124. package/dist/os/rfc/types.js.map +1 -1
  125. package/dist/os/session/handlers/save.d.ts.map +1 -1
  126. package/dist/os/session/handlers/save.js +6 -1
  127. package/dist/os/session/handlers/save.js.map +1 -1
  128. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -1
  129. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +6 -1
  130. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -1
  131. package/dist/os/werkstatt/handlers/workspace-deps.js +3 -3
  132. package/dist/os/werkstatt/handlers/workspace-deps.js.map +1 -1
  133. package/dist/os/workflow/index.d.ts.map +1 -1
  134. package/dist/os/workflow/index.js +6 -1
  135. package/dist/os/workflow/index.js.map +1 -1
  136. package/dist/src/config/forge-config.d.ts +50 -4
  137. package/dist/src/config/forge-config.d.ts.map +1 -1
  138. package/dist/src/config/forge-config.js +11 -19
  139. package/dist/src/config/forge-config.js.map +1 -1
  140. package/dist/src/forge-module.d.ts.map +1 -1
  141. package/dist/src/forge-module.js +6 -1
  142. package/dist/src/forge-module.js.map +1 -1
  143. package/dist/src/index.d.ts.map +1 -1
  144. package/dist/src/index.js +10 -2
  145. package/dist/src/index.js.map +1 -1
  146. package/dist/src/migration-adapters/git-utils.d.ts.map +1 -1
  147. package/dist/src/migration-adapters/git-utils.js +6 -2
  148. package/dist/src/migration-adapters/git-utils.js.map +1 -1
  149. package/dist/src/migration-adapters/ignored-files.d.ts.map +1 -1
  150. package/dist/src/migration-adapters/ignored-files.js +6 -1
  151. package/dist/src/migration-adapters/ignored-files.js.map +1 -1
  152. package/dist/src/migration-adapters/index.d.ts.map +1 -1
  153. package/dist/src/migration-adapters/index.js +4 -1
  154. package/dist/src/migration-adapters/index.js.map +1 -1
  155. package/dist/src/migration-adapters/types.d.ts.map +1 -1
  156. package/dist/src/migration-adapters/types.js +6 -2
  157. package/dist/src/migration-adapters/types.js.map +1 -1
  158. package/dist/src/onboarding/agents-generate.js +7 -7
  159. package/dist/src/onboarding/create.d.ts.map +1 -1
  160. package/dist/src/onboarding/create.js +7 -6
  161. package/dist/src/onboarding/create.js.map +1 -1
  162. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  163. package/dist/src/onboarding/doctor.js +7 -13
  164. package/dist/src/onboarding/doctor.js.map +1 -1
  165. package/dist/src/onboarding/init.d.ts.map +1 -1
  166. package/dist/src/onboarding/init.js +7 -12
  167. package/dist/src/onboarding/init.js.map +1 -1
  168. package/dist/src/onboarding/invariant-engine.d.ts.map +1 -1
  169. package/dist/src/onboarding/invariant-engine.js +7 -2
  170. package/dist/src/onboarding/invariant-engine.js.map +1 -1
  171. package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
  172. package/dist/src/onboarding/nested-agents-generate.js +7 -2
  173. package/dist/src/onboarding/nested-agents-generate.js.map +1 -1
  174. package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -1
  175. package/dist/src/onboarding/nested-agents-templates.js +6 -1
  176. package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
  177. package/dist/src/onboarding/scaffold-project.d.ts.map +1 -1
  178. package/dist/src/onboarding/scaffold-project.js +6 -1
  179. package/dist/src/onboarding/scaffold-project.js.map +1 -1
  180. package/dist/src/onboarding/upgrade.d.ts.map +1 -1
  181. package/dist/src/onboarding/upgrade.js +7 -3
  182. package/dist/src/onboarding/upgrade.js.map +1 -1
  183. package/dist/src/profiles/profile-schema.d.ts +54 -4
  184. package/dist/src/profiles/profile-schema.d.ts.map +1 -1
  185. package/dist/src/profiles/profile-schema.js +34 -14
  186. package/dist/src/profiles/profile-schema.js.map +1 -1
  187. package/dist/src/profiles/stack-profile.d.ts +24 -0
  188. package/dist/src/profiles/stack-profile.d.ts.map +1 -1
  189. package/dist/src/profiles/stack-profile.js +7 -3
  190. package/dist/src/profiles/stack-profile.js.map +1 -1
  191. package/dist/src/registry.d.ts.map +1 -1
  192. package/dist/src/registry.js +7 -9
  193. package/dist/src/registry.js.map +1 -1
  194. package/dist/src/types.d.ts.map +1 -1
  195. package/dist/src/types.js +6 -1
  196. package/dist/src/types.js.map +1 -1
  197. package/dist/src/utils/fs-atomic.d.ts.map +1 -1
  198. package/dist/src/utils/fs-atomic.js +13 -1
  199. package/dist/src/utils/fs-atomic.js.map +1 -1
  200. package/dist/src/utils/fs-idempotent.d.ts.map +1 -1
  201. package/dist/src/utils/fs-idempotent.js +13 -0
  202. package/dist/src/utils/fs-idempotent.js.map +1 -1
  203. package/dist/src/utils/fs-trash-sync.d.ts.map +1 -1
  204. package/dist/src/utils/fs-trash-sync.js +13 -1
  205. package/dist/src/utils/fs-trash-sync.js.map +1 -1
  206. package/dist/src/utils/fs-trash.d.ts.map +1 -1
  207. package/dist/src/utils/fs-trash.js +13 -1
  208. package/dist/src/utils/fs-trash.js.map +1 -1
  209. package/dist/src/utils/fs.d.ts.map +1 -1
  210. package/dist/src/utils/fs.js +14 -3
  211. package/dist/src/utils/fs.js.map +1 -1
  212. package/dist/src/utils/hash.d.ts.map +1 -1
  213. package/dist/src/utils/hash.js +12 -1
  214. package/dist/src/utils/hash.js.map +1 -1
  215. package/dist/src/utils/index.d.ts.map +1 -1
  216. package/dist/src/utils/index.js +13 -2
  217. package/dist/src/utils/index.js.map +1 -1
  218. package/dist/src/utils/string-utils.d.ts.map +1 -1
  219. package/dist/src/utils/string-utils.js +12 -1
  220. package/dist/src/utils/string-utils.js.map +1 -1
  221. package/dist/src/validators/port-validate.js +1 -1
  222. package/dist/src/validators/port-validate.js.map +1 -1
  223. package/dist/src/validators/skill-validate.d.ts.map +1 -1
  224. package/dist/src/validators/skill-validate.js +7 -8
  225. package/dist/src/validators/skill-validate.js.map +1 -1
  226. package/docs/reference/forge-yaml.md +38 -9
  227. package/os/adr/handlers/list-create.ts +4 -1
  228. package/os/adr/handlers/validate.ts +6 -1
  229. package/os/adr/types.ts +7 -3
  230. package/os/compass/compass.module.ts +79 -13
  231. package/os/compass/handlers/compass-audit-handler.ts +22 -3
  232. package/os/compass/handlers/compass-change-summary-handler.ts +55 -227
  233. package/os/compass/handlers/compass-inventory-handler.ts +30 -12
  234. package/os/compass/handlers/compass-inventory.ts +103 -240
  235. package/os/compass/handlers/compass-migrate-handler.ts +122 -0
  236. package/os/compass/handlers/compass-migrate.ts +361 -0
  237. package/os/compass/handlers/resolve-scan-root-package.test.ts +70 -0
  238. package/os/compass/handlers/resolve-scan-root.ts +15 -8
  239. package/os/compass/handlers/summary-record.ts +313 -0
  240. package/os/compass/handlers/tests/compass-migrate.test.ts +291 -0
  241. package/os/compass/handlers/tests/compass-policy.test.ts +249 -0
  242. package/os/compass/handlers/tests/compass-v2-contract.test.ts +9 -9
  243. package/os/compass/handlers/tests/summary-record.test.ts +224 -0
  244. package/os/compass/index.ts +23 -5
  245. package/os/compass/policy.ts +350 -0
  246. package/os/core/core.module.ts +9 -21
  247. package/os/core/handlers/forge-autonomy-validate.ts +7 -1
  248. package/os/core/handlers/package-health.ts +6 -1
  249. package/os/core/handlers/pinned-check.ts +6 -1
  250. package/os/core/handlers/pinned-validate.ts +6 -1
  251. package/os/core/handlers/validate.ts +6 -1
  252. package/os/exploration/exploration.module.ts +72 -71
  253. package/os/exploration/handlers/list.ts +4 -1
  254. package/os/mission/handlers/archive.ts +7 -3
  255. package/os/mission/index.ts +14 -0
  256. package/os/notes/index.ts +7 -1
  257. package/os/rfc/frontmatter-io.ts +6 -1
  258. package/os/rfc/handlers/archive.ts +6 -1
  259. package/os/rfc/handlers/implement-stamp.ts +7 -3
  260. package/os/rfc/handlers/index-graph.ts +6 -1
  261. package/os/rfc/handlers/lifecycle.ts +6 -1
  262. package/os/rfc/handlers/list-create.ts +6 -1
  263. package/os/rfc/handlers/pipeline-status.ts +6 -1
  264. package/os/rfc/handlers/supersede-propose.ts +6 -1
  265. package/os/rfc/handlers/validate-rules.ts +7 -3
  266. package/os/rfc/handlers/validate.ts +6 -1
  267. package/os/rfc/index.ts +6 -1
  268. package/os/rfc/rfc.module.ts +6 -1
  269. package/os/rfc/types.ts +7 -4
  270. package/os/session/handlers/save.ts +6 -1
  271. package/os/werkstatt/handlers/werkstatt-lock-recover.ts +6 -1
  272. package/os/werkstatt/handlers/workspace-deps.ts +3 -3
  273. package/os/workflow/index.ts +6 -1
  274. package/package.json +1 -1
  275. package/skills/fo/fo-add-tests/SKILL.md +14 -0
  276. package/skills/fo/fo-architecture/SKILL.md +14 -0
  277. package/skills/fo/fo-compass-annotate/SKILL.md +14 -0
  278. package/skills/fo/fo-design-summit/SKILL.md +14 -0
  279. package/skills/fo/fo-doc-audit/SKILL.md +14 -0
  280. package/skills/fo/fo-explore/SKILL.md +14 -0
  281. package/skills/fo/fo-extract-dna/SKILL.md +14 -0
  282. package/skills/fo/fo-fix/SKILL.md +14 -0
  283. package/skills/fo/fo-handoff/SKILL.md +14 -0
  284. package/skills/fo/fo-harvest/SKILL.md +14 -0
  285. package/skills/fo/fo-idea/SKILL.md +14 -0
  286. package/skills/fo/fo-idea-audit/SKILL.md +14 -0
  287. package/skills/fo/fo-idea-create-adr/SKILL.md +14 -0
  288. package/skills/fo/fo-idea-create-rfc/SKILL.md +14 -0
  289. package/skills/fo/fo-idea-enhance/SKILL.md +14 -0
  290. package/skills/fo/fo-idea-i-just-want-to-see-the-plan/SKILL.md +14 -0
  291. package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +14 -0
  292. package/skills/fo/fo-idea-implement/SKILL.md +14 -0
  293. package/skills/fo/fo-idea-plan/SKILL.md +14 -0
  294. package/skills/fo/fo-idea-status/SKILL.md +14 -0
  295. package/skills/fo/fo-knowledge-distill/SKILL.md +14 -0
  296. package/skills/fo/fo-memory-sync/SKILL.md +14 -0
  297. package/skills/fo/fo-qa/SKILL.md +14 -0
  298. package/skills/fo/fo-review/SKILL.md +14 -0
  299. package/skills/fo/fo-session-retro/SKILL.md +14 -0
  300. package/skills/fo/fo-session-save/SKILL.md +14 -0
  301. package/skills/fo/fo-spec-ingest/SKILL.md +14 -0
  302. package/skills/fo/fo-step-commit/SKILL.md +14 -0
  303. package/skills/fo/fo-triage/SKILL.md +14 -0
  304. package/skills/meta/forge-bootstrap/SKILL.md +14 -0
  305. package/skills/meta/port-to-forge/SKILL.md +14 -0
  306. package/skills/meta/skill-create/SKILL.md +14 -0
  307. package/skills/shared/grilling/SKILL.md +14 -0
  308. package/skills/shared/my-preferences/SKILL.md +14 -0
  309. package/skills/shared/windows-ai-tooling/SKILL.md +14 -0
  310. package/skills/shared/writing-great-skills/SKILL.md +14 -0
  311. package/src/config/forge-config.ts +16 -23
  312. package/src/forge-module.ts +6 -1
  313. package/src/index.ts +10 -2
  314. package/src/migration-adapters/git-utils.ts +6 -2
  315. package/src/migration-adapters/ignored-files.ts +6 -1
  316. package/src/migration-adapters/index.ts +4 -1
  317. package/src/migration-adapters/types.ts +6 -2
  318. package/src/onboarding/agents-generate.ts +7 -7
  319. package/src/onboarding/create.ts +7 -6
  320. package/src/onboarding/doctor.ts +7 -13
  321. package/src/onboarding/init.ts +7 -12
  322. package/src/onboarding/invariant-engine.ts +7 -2
  323. package/src/onboarding/nested-agents-generate.ts +7 -2
  324. package/src/onboarding/nested-agents-templates.ts +6 -1
  325. package/src/onboarding/scaffold-project.ts +6 -1
  326. package/src/onboarding/upgrade.ts +7 -3
  327. package/src/profiles/profile-schema.ts +42 -18
  328. package/src/profiles/stack-profile.ts +7 -3
  329. package/src/registry.ts +7 -9
  330. package/src/tests/agents-generate.test.ts +2 -2
  331. package/src/tests/forge-autonomy-validate.test.ts +1 -1
  332. package/src/types.ts +6 -1
  333. package/src/utils/fs-atomic.ts +13 -1
  334. package/src/utils/fs-idempotent.ts +13 -0
  335. package/src/utils/fs-trash-sync.ts +13 -1
  336. package/src/utils/fs-trash.ts +13 -1
  337. package/src/utils/fs.ts +14 -3
  338. package/src/utils/hash.ts +12 -1
  339. package/src/utils/index.ts +13 -2
  340. package/src/utils/string-utils.ts +12 -1
  341. package/src/validators/port-validate.ts +1 -1
  342. package/src/validators/skill-validate.ts +7 -8
  343. package/skills/shared/extension-e2e-mitm/SKILL.md +0 -53
  344. package/skills/shared/extension-e2e-mitm/fixture-proxy.ts +0 -113
  345. package/src/types/werkstatt-engine-shims.d.ts +0 -1416
  346. package/src/types/werkstatt-shared-shims.d.ts +0 -5686
@@ -0,0 +1,233 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>compass.summary.record — commit-time append of governance-referencing
4
+ items to CHANGE_SUMMARY blocks per RFC-1095. Collapses the 5-item window into
5
+ <history>, dedupes by ID+text, and reminds about KEY_DECISIONS on risk files.</purpose>
6
+ <non-goals>
7
+ <item>Do not create CHANGE_SUMMARY blocks — headers are authored by fo-compass-annotate.</item>
8
+ <item>Do not validate semantic quality of item text — record writes what the commit declares.</item>
9
+ <item>Do not import @warpgogol/* packages — this handler is autonomous (FORGE-AUTONOMY-01).</item>
10
+ </non-goals>
11
+ </MODULE_CONTRACT>
12
+ <KEY_DECISIONS>
13
+ <item>The 5-item window collapses oldest-first into history — history holds IDs only, never prose.</item>
14
+ <item>Recording is header-region guarded — a CHANGE_SUMMARY deeper than 120 lines is a doc example, not a header.</item>
15
+ <item>Item text is sanitized on record — literal Compass tags would corrupt history parsing.</item>
16
+ </KEY_DECISIONS>
17
+ <CHANGE_SUMMARY>
18
+ <item>RFC-1095: header-region guard in summary.record, restore test fixture with dynamic tags</item>
19
+ <item>RFC-1097: steps 1-4 — compass.migrate codemod
20
+
21
+ Add the v1 to v2 Compass header codemod: migrateFile pure transform (collapse, strip, seed, reorder, purpose-flag actions), migrateWorkspace walker, runCompassMigrate handler with dirty-tree refusal and --force/--files/--dry-run flags, module registration, and 15 unit tests.</item>
22
+ <item>RFC-1097: sweep — packages/forge + services clean
23
+
24
+ Sweep batch 2: real KEY_DECISIONS on 10 files, expanded purposes (CONTRACT-02/PURPOSE-02), headers on mission/index + gen-upstreams, sanitizeItemText in summary.record (literal Compass tags corrupted history), excludedPaths for wrangler types, test-fixtures testPattern. forge+services now 0 diagnostics under --mode error.</item>
25
+ <item>RFC-1097: sweep — engine package clean
26
+
27
+ Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. engine package now 0 diagnostics.</item>
28
+ <item>RFC-1097: AC-4 banned literal in os/compass handlers
29
+
30
+ compass-migrate-handler hint used a consumer-specific run command — switched to generic 'pnpm exec forge run' convention. Reworded recorded CHANGE_SUMMARY items in 3 handlers to drop the consumer-specific literal. compass-policy AC-4 test green (65/65).</item>
31
+ <history>RFC-1095</history>
32
+ </CHANGE_SUMMARY>
33
+ */
34
+ import { existsSync } from "node:fs";
35
+ import { readFile } from "node:fs/promises";
36
+ import { resolve, relative } from "node:path";
37
+ import { detectRiskClass, getWorkspaceRelativeSegments } from "./compass-inventory.js";
38
+ import { parseGovernanceIdParts, resolveCompassPolicy } from "../policy.js";
39
+ import { resolveCompassScanRoot } from "./resolve-scan-root.js";
40
+ import { writeFileIfChanged } from "../../../src/utils/fs-idempotent.js";
41
+ const CHANGE_SUMMARY_BLOCK_RE = /<CHANGE_SUMMARY>[\s\S]*?<\/CHANGE_SUMMARY>/;
42
+ const ITEM_RE = /<item>([\s\S]*?)<\/item>/g;
43
+ const HISTORY_RE = /<history>([\s\S]*?)<\/history>/;
44
+ const CONVENTIONAL_PREFIX_RE = /^[a-z]+(\([^)]*\))?!?:\s*/i;
45
+ export const CHANGE_SUMMARY_WINDOW = 5;
46
+ // A CHANGE_SUMMARY block is a file header only when it starts within this many
47
+ // lines from the top. Deeper matches are examples inside template literals or
48
+ // fenced doc sections, not headers.
49
+ const HEADER_SCAN_LINES = 120;
50
+ export function parseChangeSummary(block) {
51
+ const items = [];
52
+ let m;
53
+ const re = new RegExp(ITEM_RE.source, "g");
54
+ while ((m = re.exec(block)) !== null) {
55
+ items.push(m[1].trim());
56
+ }
57
+ const historyMatch = block.match(HISTORY_RE);
58
+ const historyIds = historyMatch
59
+ ? historyMatch[1]
60
+ .split(",")
61
+ .map((t) => t.trim())
62
+ .filter(Boolean)
63
+ : [];
64
+ return { items, historyIds };
65
+ }
66
+ function normalizeItemText(text) {
67
+ return text.trim().replace(/\s+/g, " ");
68
+ }
69
+ function leadingGovernanceId(item, policy) {
70
+ const match = item.match(policy.idPattern);
71
+ return match && match.index === 0 ? match[0] : null;
72
+ }
73
+ /** Merge existing + new history IDs: dedupe, per-namespace ascending numeric order. */
74
+ export function mergeHistoryIds(existing, incoming, policy) {
75
+ const all = [...new Set([...existing, ...incoming])].filter((id) => policy.idPatternFull.test(id));
76
+ return all.sort((a, b) => {
77
+ const pa = parseGovernanceIdParts(a);
78
+ const pb = parseGovernanceIdParts(b);
79
+ const ns = pa.namespace.localeCompare(pb.namespace);
80
+ return ns !== 0 ? ns : pa.numeric - pb.numeric;
81
+ });
82
+ }
83
+ export function getLineCommentPrefix(filePath) {
84
+ if (filePath.endsWith(".gd"))
85
+ return "# ";
86
+ if (filePath.endsWith(".tscn") || filePath.endsWith(".tres"))
87
+ return "; ";
88
+ return null;
89
+ }
90
+ export function buildChangeSummaryBlock(items, historyIds, filePath) {
91
+ const prefix = getLineCommentPrefix(filePath);
92
+ const lines = ["<CHANGE_SUMMARY>"];
93
+ for (const item of items) {
94
+ lines.push(` <item>${item}</item>`);
95
+ }
96
+ if (historyIds.length > 0) {
97
+ lines.push(` <history>${historyIds.join(", ")}</history>`);
98
+ }
99
+ lines.push("</CHANGE_SUMMARY>");
100
+ if (prefix) {
101
+ return lines.map((line, i) => (i === 0 ? line : prefix + line)).join("\n");
102
+ }
103
+ return lines.join("\n");
104
+ }
105
+ export function stripConventionalPrefix(subject) {
106
+ return subject.replace(CONVENTIONAL_PREFIX_RE, "").trim();
107
+ }
108
+ // Literal Compass block tags inside an item corrupt block parsing — a commit
109
+ // message saying "collapsed into history" would be matched by HISTORY_RE and
110
+ // produce phantom non-ID tokens (CS-07). Strip the angle brackets on record.
111
+ const COMPASS_TAG_LITERAL_RE = /<\/?(?:CHANGE_SUMMARY|MODULE_CONTRACT|KEY_DECISIONS|history|item|purpose|non-goals)>/g;
112
+ export function sanitizeItemText(text) {
113
+ return text.replace(COMPASS_TAG_LITERAL_RE, (tag) => tag.replace(/[<>]/g, ""));
114
+ }
115
+ export function isValidGovernanceId(id, policy) {
116
+ return policy.idPatternFull.test(id);
117
+ }
118
+ /**
119
+ * Append `ID: text` to one file's CHANGE_SUMMARY and collapse the window.
120
+ * Returns the outcome; writes the file only when mutated and not dry-run.
121
+ */
122
+ export async function recordSummaryItem(absPath, relPath, id, text, dryRun, policy) {
123
+ const source = await readFile(absPath, "utf8");
124
+ const blockMatch = source.match(CHANGE_SUMMARY_BLOCK_RE);
125
+ // Header-region guard: a CHANGE_SUMMARY is a header only when it sits at the
126
+ // top of the file. Blocks deeper in the source are examples inside template
127
+ // literals or fenced doc sections — recording into them corrupts the file.
128
+ const inHeaderRegion = blockMatch !== null &&
129
+ blockMatch.index !== undefined &&
130
+ source.slice(0, blockMatch.index).split("\n").length <= HEADER_SCAN_LINES;
131
+ if (!blockMatch || !inHeaderRegion) {
132
+ return {
133
+ recorded: false,
134
+ collapsed: false,
135
+ skipReason: source.includes("<CHANGE_SUMMARY>") ? "unparseable" : "no-block",
136
+ };
137
+ }
138
+ const { items, historyIds } = parseChangeSummary(blockMatch[0]);
139
+ // Avoid "RFC-1095: RFC-1095 ..." when the text already leads with the same ID;
140
+ // a text equal to the bare ID collapses to the bare-ID item form.
141
+ const strippedText = text.startsWith(id)
142
+ ? text.slice(id.length).replace(/^\s*[:—-]?\s*/, "")
143
+ : text;
144
+ const newItem = strippedText.length > 0 ? `${id}: ${sanitizeItemText(strippedText)}` : id;
145
+ const normalizedNew = normalizeItemText(newItem);
146
+ if (items.some((item) => normalizeItemText(item) === normalizedNew)) {
147
+ return { recorded: false, collapsed: false, skipReason: "duplicate" };
148
+ }
149
+ const nextItems = [...items, newItem];
150
+ const collapsedIds = [];
151
+ while (nextItems.length > CHANGE_SUMMARY_WINDOW) {
152
+ const oldest = nextItems.shift();
153
+ const oldId = leadingGovernanceId(oldest, policy);
154
+ if (oldId)
155
+ collapsedIds.push(oldId);
156
+ }
157
+ const collapsed = collapsedIds.length > 0;
158
+ const nextHistory = mergeHistoryIds(historyIds, collapsedIds, policy);
159
+ const newBlock = buildChangeSummaryBlock(nextItems, nextHistory, relPath);
160
+ const transformed = source.replace(CHANGE_SUMMARY_BLOCK_RE, newBlock);
161
+ if (!dryRun && transformed !== source) {
162
+ await writeFileIfChanged(absPath, transformed);
163
+ }
164
+ return { recorded: true, collapsed };
165
+ }
166
+ function riskReminderNeeded(relPath, source, policy) {
167
+ const segments = relPath.split("/").filter(Boolean);
168
+ const workspaceRel = getWorkspaceRelativeSegments(segments, policy).join("/");
169
+ const risk = detectRiskClass(relPath, workspaceRel, policy);
170
+ return risk === "medium" || risk === "high" || source.includes("<KEY_DECISIONS>");
171
+ }
172
+ export async function runCompassSummaryRecord(input, context) {
173
+ const scanRoot = resolveCompassScanRoot(input, context);
174
+ const baseRoot = scanRoot ?? context.workspaceRoot;
175
+ const policy = resolveCompassPolicy(baseRoot, context.forgeRoot);
176
+ const id = input.flags["id"];
177
+ if (typeof id !== "string" || !isValidGovernanceId(id, policy)) {
178
+ context.logger.error(`[compass.summary.record] --id is required and must be a governance ID (e.g. RFC-1095), got: ${String(id)}`);
179
+ return { exitCode: 1, summary: "invalid or missing --id" };
180
+ }
181
+ const rawFiles = input.flags["files"];
182
+ const files = Array.isArray(rawFiles)
183
+ ? rawFiles
184
+ : typeof rawFiles === "string"
185
+ ? rawFiles.split(/\s+/).filter(Boolean)
186
+ : [];
187
+ const rawText = input.flags["text"];
188
+ const text = typeof rawText === "string" && rawText.trim().length > 0 ? rawText.trim() : id;
189
+ const result = {
190
+ command: "compass.summary.record",
191
+ status: "pass",
192
+ recorded: [],
193
+ collapsed: [],
194
+ skipped: [],
195
+ keyDecisionsReminders: [],
196
+ };
197
+ for (const file of files) {
198
+ const absPath = resolve(baseRoot, file);
199
+ const relPath = relative(baseRoot, absPath).replace(/\\/g, "/");
200
+ if (!existsSync(absPath)) {
201
+ result.skipped.push({ file, reason: "unparseable" });
202
+ context.logger.warn(`[compass.summary.record] skipped ${file}: file not found`);
203
+ continue;
204
+ }
205
+ try {
206
+ const outcome = await recordSummaryItem(absPath, relPath, id, text, context.dryRun, policy);
207
+ if (outcome.skipReason) {
208
+ result.skipped.push({ file, reason: outcome.skipReason });
209
+ continue;
210
+ }
211
+ if (outcome.recorded) {
212
+ result.recorded.push(relPath);
213
+ if (outcome.collapsed)
214
+ result.collapsed.push(relPath);
215
+ const source = await readFile(absPath, "utf8");
216
+ if (riskReminderNeeded(relPath, source, policy)) {
217
+ result.keyDecisionsReminders.push(relPath);
218
+ context.logger.warn(`[compass.summary.record] review KEY_DECISIONS in ${relPath}`);
219
+ }
220
+ }
221
+ }
222
+ catch (err) {
223
+ result.skipped.push({ file, reason: "unparseable" });
224
+ context.logger.warn(`[compass.summary.record] skipped ${file}: ${err instanceof Error ? err.message : String(err)}`);
225
+ }
226
+ }
227
+ return {
228
+ data: result,
229
+ exitCode: 0,
230
+ summary: `[compass.summary.record] recorded=${result.recorded.length}, collapsed=${result.collapsed.length}, skipped=${result.skipped.length}`,
231
+ };
232
+ }
233
+ //# sourceMappingURL=summary-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-record.js","sourceRoot":"","sources":["../../../../os/compass/handlers/summary-record.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,8 @@ export { resolveCompassScanRoot } from "./handlers/resolve-scan-root.ts";
4
4
  export { getRevisionByPath, type RevisionByPathResult } from "./handlers/git-revision.ts";
5
5
  export { runCompassInventory, runCompassValidation } from "./handlers/compass-inventory-handler.ts";
6
6
  export { runCompassAuditPlan, runCompassAuditRecord, runCompassAuditBaseline, runCompassAuditValidate, isAuditDue, } from "./handlers/compass-audit-handler.ts";
7
- export { runCompassChangeSummaryValidate, runCompassSummaryTrim, classifyChangeSummaryItem, type ChangeSummaryItemClass, } from "./handlers/compass-change-summary-handler.ts";
7
+ export { runCompassSummaryTrim } from "./handlers/compass-change-summary-handler.ts";
8
+ export { runCompassMigrate } from "./handlers/compass-migrate-handler.ts";
9
+ export { migrateFile, migrateWorkspace, type MigrateAction, type MigrateResult, } from "./handlers/compass-migrate.ts";
10
+ export { runCompassSummaryRecord, parseChangeSummary, mergeHistoryIds, buildChangeSummaryBlock, stripConventionalPrefix, isValidGovernanceId, CHANGE_SUMMARY_WINDOW, type SummaryRecordResult, type SummaryRecordSkipReason, } from "./handlers/summary-record.ts";
8
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../os/compass/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,+BAA+B,EAC/B,qBAAqB,EACrB,yBAAyB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../os/compass/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,8BAA8B,CAAC"}
@@ -7,6 +7,11 @@
7
7
  </MODULE_CONTRACT>
8
8
  <CHANGE_SUMMARY>
9
9
  <item>RFC-0374: initial compass module barrel.</item>
10
+ <item>RFC-1095: compass.summary.record, trim repair rewrite, commit integration</item>
11
+ <item>RFC-1095: review findings: execFileSync git add, drop speculative barrel exports</item>
12
+ <item>RFC-1097: steps 1-4 — compass.migrate codemod
13
+
14
+ Add the v1 to v2 Compass header codemod: migrateFile pure transform (collapse, strip, seed, reorder, purpose-flag actions), migrateWorkspace walker, runCompassMigrate handler with dirty-tree refusal and --force/--files/--dry-run flags, module registration, and 15 unit tests.</item>
10
15
  </CHANGE_SUMMARY>
11
16
  */
12
17
  export { forgeCompassModule } from "./compass.module.js";
@@ -15,5 +20,8 @@ export { resolveCompassScanRoot } from "./handlers/resolve-scan-root.js";
15
20
  export { getRevisionByPath } from "./handlers/git-revision.js";
16
21
  export { runCompassInventory, runCompassValidation } from "./handlers/compass-inventory-handler.js";
17
22
  export { runCompassAuditPlan, runCompassAuditRecord, runCompassAuditBaseline, runCompassAuditValidate, isAuditDue, } from "./handlers/compass-audit-handler.js";
18
- export { runCompassChangeSummaryValidate, runCompassSummaryTrim, classifyChangeSummaryItem, } from "./handlers/compass-change-summary-handler.js";
23
+ export { runCompassSummaryTrim } from "./handlers/compass-change-summary-handler.js";
24
+ export { runCompassMigrate } from "./handlers/compass-migrate-handler.js";
25
+ export { migrateFile, migrateWorkspace, } from "./handlers/compass-migrate.js";
26
+ export { runCompassSummaryRecord, parseChangeSummary, mergeHistoryIds, buildChangeSummaryBlock, stripConventionalPrefix, isValidGovernanceId, CHANGE_SUMMARY_WINDOW, } from "./handlers/summary-record.js";
19
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../os/compass/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,6BAA6B,GAE9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAA6B,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,+BAA+B,EAC/B,qBAAqB,EACrB,yBAAyB,GAE1B,MAAM,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../os/compass/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE;AAEF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,6BAA6B,GAE9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAA6B,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EACL,WAAW,EACX,gBAAgB,GAGjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,65 @@
1
+ export type CompassRiskClass = "high" | "medium" | "low";
2
+ export type CompassWorkspaceKind = "app" | "package" | "service";
3
+ export interface CompassLayerRule {
4
+ pattern: string;
5
+ layer: string;
6
+ risk: CompassRiskClass;
7
+ }
8
+ export interface CompassExcludedPath {
9
+ pattern: string;
10
+ reason: string;
11
+ }
12
+ export interface CompassPolicySource {
13
+ /** Stack profile id that contributed a `compass:` section, or null. */
14
+ profile: string | null;
15
+ /** Keys the consumer's bindings.compass overrode. */
16
+ overriddenKeys: string[];
17
+ }
18
+ export interface CompassPolicy {
19
+ fileExtensions: ReadonlySet<string>;
20
+ testPatterns: readonly string[];
21
+ scanRoots: readonly string[];
22
+ ignoredDirs: ReadonlySet<string>;
23
+ ignoredDirPrefixes: readonly string[];
24
+ /** picomatch globs on the root-relative path that force riskClass=high. */
25
+ highRiskPaths: readonly string[];
26
+ /** Governance-ID detection pattern (unanchored, as configured). */
27
+ idPattern: RegExp;
28
+ /** `^(?:idPattern)$` — full-string governance-ID match. */
29
+ idPatternFull: RegExp;
30
+ /** `^(?:idPattern)` — leading governance-ID match. */
31
+ idPatternPrefix: RegExp;
32
+ purposeBoilerplatePatterns: readonly RegExp[];
33
+ /** Ordered first-match layer rules on the workspace-relative path. */
34
+ layerRules: readonly CompassLayerRule[];
35
+ workspaceKinds: Readonly<Record<string, CompassWorkspaceKind>>;
36
+ /** Workspace-relative globs that mark a file excluded with a reason. */
37
+ excludedPaths: readonly CompassExcludedPath[];
38
+ source: CompassPolicySource;
39
+ /** First-match layer rule for a workspace-relative path. */
40
+ matchLayer(workspaceRelativePath: string): CompassLayerRule | undefined;
41
+ /** Whether a root-relative path is forced high-risk. */
42
+ isHighRisk(pathFromRoot: string): boolean;
43
+ /** Whether a workspace-relative path is a test file. */
44
+ isTestPath(workspaceRelativePath: string): boolean;
45
+ /** Exclusion reason for a workspace-relative path, if any. */
46
+ excludedReason(workspaceRelativePath: string): string | undefined;
47
+ }
48
+ export declare class CompassPolicyConfigError extends Error {
49
+ readonly key: string;
50
+ constructor(key: string, detail: string);
51
+ }
52
+ /** Split a `NAMESPACE-NUMBER` governance ID on its last dash. */
53
+ export declare function parseGovernanceIdParts(id: string): {
54
+ namespace: string;
55
+ numeric: number;
56
+ } | null;
57
+ /**
58
+ * Resolve the effective Compass policy for a workspace: generic defaults,
59
+ * overlaid by the stack profile `compass:` section (when forge.yaml declares
60
+ * `profile`), then by `bindings.compass`. Missing or unreadable forge.yaml
61
+ * yields the generic policy. Invalid regexes throw CompassPolicyConfigError
62
+ * naming the offending key.
63
+ */
64
+ export declare function resolveCompassPolicy(workspaceRoot: string, forgeRoot?: string): CompassPolicy;
65
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../os/compass/policy.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzD,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,2EAA2E;IAC3E,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,sEAAsE;IACtE,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACxC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC/D,wEAAwE;IACxE,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,4DAA4D;IAC5D,UAAU,CAAC,qBAAqB,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACxE,wDAAwD;IACxD,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,wDAAwD;IACxD,UAAU,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC;IACnD,8DAA8D;IAC9D,cAAc,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnE;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAKxC;AAsID,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIhG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAyH7F"}
@@ -0,0 +1,241 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Compass policy resolution — generic defaults overlaid by the stack
4
+ profile's compass section (forge.yaml `profile` field, RFC-0643) and the
5
+ consumer's bindings.compass overrides. Single source of truth for which files
6
+ are authored, how risky they are, and what counts as a governance ID
7
+ (RFC-1096).</purpose>
8
+ <non-goals>
9
+ <item>Do not scan files or classify entries — that lives in handlers/compass-inventory.ts.</item>
10
+ <item>Do not register commands — this is a pure policy module.</item>
11
+ </non-goals>
12
+ </MODULE_CONTRACT>
13
+ <CHANGE_SUMMARY>
14
+ <item>RFC-1096: initial policy resolver — generic defaults + profile compass section + bindings.compass overrides.</item>
15
+ </CHANGE_SUMMARY>
16
+ */
17
+ import picomatch from "picomatch";
18
+ import { loadForgeConfig } from "../../src/config/forge-config.js";
19
+ export class CompassPolicyConfigError extends Error {
20
+ key;
21
+ constructor(key, detail) {
22
+ super(`[compass.policy] invalid compass policy key "${key}": ${detail}`);
23
+ this.name = "CompassPolicyConfigError";
24
+ this.key = key;
25
+ }
26
+ }
27
+ // ---------------------------------------------------------------------------
28
+ // Generic defaults — stack-neutral values only. Consumer- or stack-specific
29
+ // literals are forbidden here (RFC-1096 AC-4); they live in profiles or
30
+ // forge.yaml bindings.compass.
31
+ // ---------------------------------------------------------------------------
32
+ const GENERIC_FILE_EXTENSIONS = [
33
+ ".ts",
34
+ ".tsx",
35
+ ".astro",
36
+ ".js",
37
+ ".jsx",
38
+ ".mjs",
39
+ ".mts",
40
+ ".css",
41
+ ".cs",
42
+ ".tscn",
43
+ ".tres",
44
+ ".gd",
45
+ ".md",
46
+ ];
47
+ const GENERIC_IGNORED_DIRS = [
48
+ ".git",
49
+ ".turbo",
50
+ ".astro",
51
+ ".wrangler",
52
+ ".vscode",
53
+ ".cache",
54
+ "coverage",
55
+ "dist",
56
+ "node_modules",
57
+ ];
58
+ const GENERIC_SCAN_ROOTS = ["src", "apps", "packages", "services"];
59
+ const GENERIC_TEST_PATTERNS = [
60
+ "test/**",
61
+ "**/*.test.ts",
62
+ "**/*.test.js",
63
+ "**/*.spec.ts",
64
+ "**/*.spec.js",
65
+ ];
66
+ const GENERIC_ID_PATTERN = "\\b([A-Z][A-Z0-9]*-)+\\d+\\b";
67
+ const GENERIC_PURPOSE_BOILERPLATE = [
68
+ "^(this file|the file|a file|this module|a module)\\b",
69
+ "^(utility|utilities|helper|helpers|misc)\\b",
70
+ "^(todo|placeholder|fixme)\\b",
71
+ ];
72
+ const GENERIC_LAYER_RULES = [
73
+ { pattern: "bin/**", layer: "bin", risk: "low" },
74
+ { pattern: "src/middleware.ts", layer: "middleware", risk: "low" },
75
+ { pattern: "src/middleware/**", layer: "middleware", risk: "high" },
76
+ { pattern: "src/pages/**", layer: "page", risk: "medium" },
77
+ { pattern: "src/components/**", layer: "component", risk: "medium" },
78
+ { pattern: "src/content/schemas/**", layer: "schema", risk: "medium" },
79
+ { pattern: "src/content/**", layer: "content", risk: "low" },
80
+ { pattern: "src/styles/**", layer: "style", risk: "low" },
81
+ { pattern: "src/scripts/**", layer: "script", risk: "medium" },
82
+ { pattern: "src/layouts/**", layer: "layout", risk: "high" },
83
+ { pattern: "src/utils/**", layer: "utility", risk: "medium" },
84
+ { pattern: "src/configure/**", layer: "config", risk: "low" },
85
+ { pattern: "test/**", layer: "test", risk: "low" },
86
+ { pattern: "src/tests/**", layer: "test", risk: "low" },
87
+ { pattern: "**/*.test.ts", layer: "test", risk: "low" },
88
+ { pattern: "**/*.spec.ts", layer: "test", risk: "low" },
89
+ { pattern: "src/**", layer: "source", risk: "low" },
90
+ { pattern: "**/SKILL.md", layer: "skill", risk: "low" },
91
+ ];
92
+ const GENERIC_WORKSPACE_KINDS = {
93
+ apps: "app",
94
+ packages: "package",
95
+ services: "service",
96
+ };
97
+ // ---------------------------------------------------------------------------
98
+ // Merge semantics (RFC-1096): union keys merge with `!entry` subtraction
99
+ // (fileExtensions, testPatterns, ignoredDirs, ignoredDirPrefixes, highRiskPaths,
100
+ // excludedPaths — matched by `pattern`); scanRoots, idPattern,
101
+ // purposeBoilerplatePatterns, layerRules, and workspaceKinds replace wholesale
102
+ // (bindings > profile > generic).
103
+ // ---------------------------------------------------------------------------
104
+ function mergeStringList(generic, ...overrides) {
105
+ const result = new Set(generic);
106
+ for (const list of overrides) {
107
+ for (const item of list ?? []) {
108
+ if (item.startsWith("!")) {
109
+ result.delete(item.slice(1));
110
+ }
111
+ else {
112
+ result.add(item);
113
+ }
114
+ }
115
+ }
116
+ return [...result];
117
+ }
118
+ function mergeExcludedPaths(generic, ...overrides) {
119
+ const byPattern = new Map();
120
+ for (const entry of generic) {
121
+ byPattern.set(entry.pattern, entry.reason);
122
+ }
123
+ for (const list of overrides) {
124
+ for (const entry of list ?? []) {
125
+ if (entry.pattern.startsWith("!")) {
126
+ byPattern.delete(entry.pattern.slice(1));
127
+ }
128
+ else {
129
+ byPattern.set(entry.pattern, entry.reason);
130
+ }
131
+ }
132
+ }
133
+ return [...byPattern.entries()].map(([pattern, reason]) => ({ pattern, reason }));
134
+ }
135
+ function compilePattern(key, pattern, flags) {
136
+ try {
137
+ return new RegExp(pattern, flags);
138
+ }
139
+ catch {
140
+ throw new CompassPolicyConfigError(key, `not a compilable regex: ${pattern}`);
141
+ }
142
+ }
143
+ /** Split a `NAMESPACE-NUMBER` governance ID on its last dash. */
144
+ export function parseGovernanceIdParts(id) {
145
+ const match = id.match(/^(.*)-(\d+)$/);
146
+ if (!match)
147
+ return null;
148
+ return { namespace: match[1], numeric: Number(match[2]) };
149
+ }
150
+ /**
151
+ * Resolve the effective Compass policy for a workspace: generic defaults,
152
+ * overlaid by the stack profile `compass:` section (when forge.yaml declares
153
+ * `profile`), then by `bindings.compass`. Missing or unreadable forge.yaml
154
+ * yields the generic policy. Invalid regexes throw CompassPolicyConfigError
155
+ * naming the offending key.
156
+ */
157
+ export function resolveCompassPolicy(workspaceRoot, forgeRoot) {
158
+ let profileCompass;
159
+ let bindingsCompass;
160
+ let profileId = null;
161
+ try {
162
+ const config = loadForgeConfig(workspaceRoot, forgeRoot);
163
+ profileCompass = config.profile?.compass;
164
+ bindingsCompass = config.bindings?.compass;
165
+ profileId = config.profile?.id ?? null;
166
+ }
167
+ catch {
168
+ // No forge.yaml or unreadable config — generic policy only.
169
+ }
170
+ const overriddenKeys = Object.keys(bindingsCompass ?? {}).filter((key) => bindingsCompass[key] !== undefined);
171
+ const fileExtensions = mergeStringList(GENERIC_FILE_EXTENSIONS, profileCompass?.fileExtensions, bindingsCompass?.fileExtensions);
172
+ const testPatterns = mergeStringList(GENERIC_TEST_PATTERNS, profileCompass?.testPatterns, bindingsCompass?.testPatterns);
173
+ const ignoredDirs = mergeStringList(GENERIC_IGNORED_DIRS, profileCompass?.ignoredDirs, bindingsCompass?.ignoredDirs);
174
+ const ignoredDirPrefixes = mergeStringList([], profileCompass?.ignoredDirPrefixes, bindingsCompass?.ignoredDirPrefixes);
175
+ const highRiskPaths = mergeStringList([], profileCompass?.highRiskPaths, bindingsCompass?.highRiskPaths);
176
+ const excludedPaths = mergeExcludedPaths([], profileCompass?.excludedPaths, bindingsCompass?.excludedPaths);
177
+ const layerRules = bindingsCompass?.layerRules ?? profileCompass?.layerRules ?? GENERIC_LAYER_RULES;
178
+ const workspaceKinds = bindingsCompass?.workspaceKinds ?? profileCompass?.workspaceKinds ?? GENERIC_WORKSPACE_KINDS;
179
+ const scanRoots = bindingsCompass?.scanRoots ?? profileCompass?.scanRoots ?? GENERIC_SCAN_ROOTS;
180
+ const idPatternRaw = bindingsCompass?.idPattern ?? profileCompass?.idPattern ?? GENERIC_ID_PATTERN;
181
+ const idPattern = compilePattern("idPattern", idPatternRaw);
182
+ if (!idPattern.test("ABC-123")) {
183
+ throw new CompassPolicyConfigError("idPattern", `must match NAMESPACE-NUMBER governance ids (probe "ABC-123" failed): ${idPatternRaw}`);
184
+ }
185
+ const idPatternFull = new RegExp(`^(?:${idPattern.source})$`);
186
+ const idPatternPrefix = new RegExp(`^(?:${idPattern.source})`);
187
+ const boilerplateRaw = bindingsCompass?.purposeBoilerplatePatterns ??
188
+ profileCompass?.purposeBoilerplatePatterns ??
189
+ GENERIC_PURPOSE_BOILERPLATE;
190
+ // Boilerplate detectors match English prose — always case-insensitive.
191
+ const purposeBoilerplatePatterns = boilerplateRaw.map((pattern) => compilePattern("purposeBoilerplatePatterns", pattern, "i"));
192
+ const layerMatchers = layerRules.map((rule) => ({
193
+ rule,
194
+ is: picomatch(rule.pattern, { dot: true }),
195
+ }));
196
+ const highRiskMatchers = highRiskPaths.map((pattern) => picomatch(pattern, { dot: true }));
197
+ const testMatchers = testPatterns.map((pattern) => picomatch(pattern, { dot: true }));
198
+ const excludedMatchers = excludedPaths.map((entry) => ({
199
+ reason: entry.reason,
200
+ is: picomatch(entry.pattern, { dot: true }),
201
+ }));
202
+ // Shallow freeze: the Readonly* types are the real immutability contract —
203
+ // do not mutate the nested Sets/arrays after resolution.
204
+ return Object.freeze({
205
+ fileExtensions: new Set(fileExtensions),
206
+ testPatterns,
207
+ scanRoots,
208
+ ignoredDirs: new Set(ignoredDirs),
209
+ ignoredDirPrefixes,
210
+ highRiskPaths,
211
+ idPattern,
212
+ idPatternFull,
213
+ idPatternPrefix,
214
+ purposeBoilerplatePatterns,
215
+ layerRules,
216
+ workspaceKinds,
217
+ excludedPaths,
218
+ source: { profile: profileId, overriddenKeys },
219
+ matchLayer(workspaceRelativePath) {
220
+ for (const { rule, is } of layerMatchers) {
221
+ if (is(workspaceRelativePath))
222
+ return rule;
223
+ }
224
+ return undefined;
225
+ },
226
+ isHighRisk(pathFromRoot) {
227
+ return highRiskMatchers.some((is) => is(pathFromRoot));
228
+ },
229
+ isTestPath(workspaceRelativePath) {
230
+ return testMatchers.some((is) => is(workspaceRelativePath));
231
+ },
232
+ excludedReason(workspaceRelativePath) {
233
+ for (const { reason, is } of excludedMatchers) {
234
+ if (is(workspaceRelativePath))
235
+ return reason;
236
+ }
237
+ return undefined;
238
+ },
239
+ });
240
+ }
241
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../os/compass/policy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.module.d.ts","sourceRoot":"","sources":["../../../os/core/core.module.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAgB7D,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAu7BlE"}
1
+ {"version":3,"file":"core.module.d.ts","sourceRoot":"","sources":["../../../os/core/core.module.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAgB7D,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAy7BlE"}