@warpgogol/forge 0.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 (516) hide show
  1. package/AGENTS.md +149 -0
  2. package/README.md +164 -0
  3. package/bin/cli.js +16 -0
  4. package/dist/bin/cli.d.ts +3 -0
  5. package/dist/bin/cli.d.ts.map +1 -0
  6. package/dist/bin/cli.js +265 -0
  7. package/dist/bin/cli.js.map +1 -0
  8. package/dist/os/adr/adr.module.d.ts +3 -0
  9. package/dist/os/adr/adr.module.d.ts.map +1 -0
  10. package/dist/os/adr/adr.module.js +112 -0
  11. package/dist/os/adr/adr.module.js.map +1 -0
  12. package/dist/os/adr/frontmatter-io.d.ts +11 -0
  13. package/dist/os/adr/frontmatter-io.d.ts.map +1 -0
  14. package/dist/os/adr/frontmatter-io.js +64 -0
  15. package/dist/os/adr/frontmatter-io.js.map +1 -0
  16. package/dist/os/adr/handlers/archive.d.ts +24 -0
  17. package/dist/os/adr/handlers/archive.d.ts.map +1 -0
  18. package/dist/os/adr/handlers/archive.js +162 -0
  19. package/dist/os/adr/handlers/archive.js.map +1 -0
  20. package/dist/os/adr/handlers/list-create.d.ts +5 -0
  21. package/dist/os/adr/handlers/list-create.d.ts.map +1 -0
  22. package/dist/os/adr/handlers/list-create.js +165 -0
  23. package/dist/os/adr/handlers/list-create.js.map +1 -0
  24. package/dist/os/adr/handlers/validate.d.ts +4 -0
  25. package/dist/os/adr/handlers/validate.d.ts.map +1 -0
  26. package/dist/os/adr/handlers/validate.js +219 -0
  27. package/dist/os/adr/handlers/validate.js.map +1 -0
  28. package/dist/os/adr/index.d.ts +8 -0
  29. package/dist/os/adr/index.d.ts.map +1 -0
  30. package/dist/os/adr/index.js +18 -0
  31. package/dist/os/adr/index.js.map +1 -0
  32. package/dist/os/adr/types.d.ts +59 -0
  33. package/dist/os/adr/types.d.ts.map +1 -0
  34. package/dist/os/adr/types.js +54 -0
  35. package/dist/os/adr/types.js.map +1 -0
  36. package/dist/os/audit/audit.module.d.ts +3 -0
  37. package/dist/os/audit/audit.module.d.ts.map +1 -0
  38. package/dist/os/audit/audit.module.js +44 -0
  39. package/dist/os/audit/audit.module.js.map +1 -0
  40. package/dist/os/audit/frontmatter-io.d.ts +12 -0
  41. package/dist/os/audit/frontmatter-io.d.ts.map +1 -0
  42. package/dist/os/audit/frontmatter-io.js +73 -0
  43. package/dist/os/audit/frontmatter-io.js.map +1 -0
  44. package/dist/os/audit/handlers/archive.d.ts +4 -0
  45. package/dist/os/audit/handlers/archive.d.ts.map +1 -0
  46. package/dist/os/audit/handlers/archive.js +167 -0
  47. package/dist/os/audit/handlers/archive.js.map +1 -0
  48. package/dist/os/audit/index.d.ts +6 -0
  49. package/dist/os/audit/index.d.ts.map +1 -0
  50. package/dist/os/audit/index.js +16 -0
  51. package/dist/os/audit/index.js.map +1 -0
  52. package/dist/os/audit/types.d.ts +12 -0
  53. package/dist/os/audit/types.d.ts.map +1 -0
  54. package/dist/os/audit/types.js +17 -0
  55. package/dist/os/audit/types.js.map +1 -0
  56. package/dist/os/compass/compass.module.d.ts +3 -0
  57. package/dist/os/compass/compass.module.d.ts.map +1 -0
  58. package/dist/os/compass/compass.module.js +162 -0
  59. package/dist/os/compass/compass.module.js.map +1 -0
  60. package/dist/os/compass/handlers/compass-audit-handler.d.ts +36 -0
  61. package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -0
  62. package/dist/os/compass/handlers/compass-audit-handler.js +238 -0
  63. package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -0
  64. package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +19 -0
  65. package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -0
  66. package/dist/os/compass/handlers/compass-change-summary-handler.js +205 -0
  67. package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -0
  68. package/dist/os/compass/handlers/compass-inventory-handler.d.ts +28 -0
  69. package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -0
  70. package/dist/os/compass/handlers/compass-inventory-handler.js +213 -0
  71. package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -0
  72. package/dist/os/compass/handlers/compass-inventory.d.ts +30 -0
  73. package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -0
  74. package/dist/os/compass/handlers/compass-inventory.js +418 -0
  75. package/dist/os/compass/handlers/compass-inventory.js.map +1 -0
  76. package/dist/os/compass/handlers/git-revision.d.ts +8 -0
  77. package/dist/os/compass/handlers/git-revision.d.ts.map +1 -0
  78. package/dist/os/compass/handlers/git-revision.js +99 -0
  79. package/dist/os/compass/handlers/git-revision.js.map +1 -0
  80. package/dist/os/compass/handlers/resolve-scan-root.d.ts +3 -0
  81. package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +1 -0
  82. package/dist/os/compass/handlers/resolve-scan-root.js +41 -0
  83. package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -0
  84. package/dist/os/compass/index.d.ts +8 -0
  85. package/dist/os/compass/index.d.ts.map +1 -0
  86. package/dist/os/compass/index.js +19 -0
  87. package/dist/os/compass/index.js.map +1 -0
  88. package/dist/os/core/core.module.d.ts +3 -0
  89. package/dist/os/core/core.module.d.ts.map +1 -0
  90. package/dist/os/core/core.module.js +318 -0
  91. package/dist/os/core/core.module.js.map +1 -0
  92. package/dist/os/core/index.d.ts +2 -0
  93. package/dist/os/core/index.d.ts.map +1 -0
  94. package/dist/os/core/index.js +13 -0
  95. package/dist/os/core/index.js.map +1 -0
  96. package/dist/os/mission/handlers/archive.d.ts +4 -0
  97. package/dist/os/mission/handlers/archive.d.ts.map +1 -0
  98. package/dist/os/mission/handlers/archive.js +209 -0
  99. package/dist/os/mission/handlers/archive.js.map +1 -0
  100. package/dist/os/mission/index.d.ts +2 -0
  101. package/dist/os/mission/index.d.ts.map +1 -0
  102. package/dist/os/mission/index.js +2 -0
  103. package/dist/os/mission/index.js.map +1 -0
  104. package/dist/os/mission/mission.module.d.ts +3 -0
  105. package/dist/os/mission/mission.module.d.ts.map +1 -0
  106. package/dist/os/mission/mission.module.js +44 -0
  107. package/dist/os/mission/mission.module.js.map +1 -0
  108. package/dist/os/mission/types.d.ts +23 -0
  109. package/dist/os/mission/types.d.ts.map +1 -0
  110. package/dist/os/mission/types.js +18 -0
  111. package/dist/os/mission/types.js.map +1 -0
  112. package/dist/os/naming/index.d.ts +3 -0
  113. package/dist/os/naming/index.d.ts.map +1 -0
  114. package/dist/os/naming/index.js +14 -0
  115. package/dist/os/naming/index.js.map +1 -0
  116. package/dist/os/naming/naming-convention.d.ts +25 -0
  117. package/dist/os/naming/naming-convention.d.ts.map +1 -0
  118. package/dist/os/naming/naming-convention.js +324 -0
  119. package/dist/os/naming/naming-convention.js.map +1 -0
  120. package/dist/os/naming/naming.module.d.ts +3 -0
  121. package/dist/os/naming/naming.module.d.ts.map +1 -0
  122. package/dist/os/naming/naming.module.js +33 -0
  123. package/dist/os/naming/naming.module.js.map +1 -0
  124. package/dist/os/plan/frontmatter-io.d.ts +12 -0
  125. package/dist/os/plan/frontmatter-io.d.ts.map +1 -0
  126. package/dist/os/plan/frontmatter-io.js +71 -0
  127. package/dist/os/plan/frontmatter-io.js.map +1 -0
  128. package/dist/os/plan/handlers/archive.d.ts +4 -0
  129. package/dist/os/plan/handlers/archive.d.ts.map +1 -0
  130. package/dist/os/plan/handlers/archive.js +166 -0
  131. package/dist/os/plan/handlers/archive.js.map +1 -0
  132. package/dist/os/plan/index.d.ts +6 -0
  133. package/dist/os/plan/index.d.ts.map +1 -0
  134. package/dist/os/plan/index.js +16 -0
  135. package/dist/os/plan/index.js.map +1 -0
  136. package/dist/os/plan/plan.module.d.ts +3 -0
  137. package/dist/os/plan/plan.module.d.ts.map +1 -0
  138. package/dist/os/plan/plan.module.js +44 -0
  139. package/dist/os/plan/plan.module.js.map +1 -0
  140. package/dist/os/plan/types.d.ts +12 -0
  141. package/dist/os/plan/types.d.ts.map +1 -0
  142. package/dist/os/plan/types.js +17 -0
  143. package/dist/os/plan/types.js.map +1 -0
  144. package/dist/os/rfc/acceptance.d.ts +15 -0
  145. package/dist/os/rfc/acceptance.d.ts.map +1 -0
  146. package/dist/os/rfc/acceptance.js +290 -0
  147. package/dist/os/rfc/acceptance.js.map +1 -0
  148. package/dist/os/rfc/decision-log.d.ts +6 -0
  149. package/dist/os/rfc/decision-log.d.ts.map +1 -0
  150. package/dist/os/rfc/decision-log.js +269 -0
  151. package/dist/os/rfc/decision-log.js.map +1 -0
  152. package/dist/os/rfc/dna-trace.d.ts +27 -0
  153. package/dist/os/rfc/dna-trace.d.ts.map +1 -0
  154. package/dist/os/rfc/dna-trace.js +214 -0
  155. package/dist/os/rfc/dna-trace.js.map +1 -0
  156. package/dist/os/rfc/frontmatter-io.d.ts +14 -0
  157. package/dist/os/rfc/frontmatter-io.d.ts.map +1 -0
  158. package/dist/os/rfc/frontmatter-io.js +98 -0
  159. package/dist/os/rfc/frontmatter-io.js.map +1 -0
  160. package/dist/os/rfc/handlers/archive.d.ts +24 -0
  161. package/dist/os/rfc/handlers/archive.d.ts.map +1 -0
  162. package/dist/os/rfc/handlers/archive.js +161 -0
  163. package/dist/os/rfc/handlers/archive.js.map +1 -0
  164. package/dist/os/rfc/handlers/check.d.ts +4 -0
  165. package/dist/os/rfc/handlers/check.d.ts.map +1 -0
  166. package/dist/os/rfc/handlers/check.js +195 -0
  167. package/dist/os/rfc/handlers/check.js.map +1 -0
  168. package/dist/os/rfc/handlers/implement-stamp.d.ts +4 -0
  169. package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -0
  170. package/dist/os/rfc/handlers/implement-stamp.js +334 -0
  171. package/dist/os/rfc/handlers/implement-stamp.js.map +1 -0
  172. package/dist/os/rfc/handlers/index-graph.d.ts +13 -0
  173. package/dist/os/rfc/handlers/index-graph.d.ts.map +1 -0
  174. package/dist/os/rfc/handlers/index-graph.js +189 -0
  175. package/dist/os/rfc/handlers/index-graph.js.map +1 -0
  176. package/dist/os/rfc/handlers/lifecycle.d.ts +13 -0
  177. package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -0
  178. package/dist/os/rfc/handlers/lifecycle.js +150 -0
  179. package/dist/os/rfc/handlers/lifecycle.js.map +1 -0
  180. package/dist/os/rfc/handlers/list-create.d.ts +6 -0
  181. package/dist/os/rfc/handlers/list-create.d.ts.map +1 -0
  182. package/dist/os/rfc/handlers/list-create.js +235 -0
  183. package/dist/os/rfc/handlers/list-create.js.map +1 -0
  184. package/dist/os/rfc/handlers/pipeline-status.d.ts +26 -0
  185. package/dist/os/rfc/handlers/pipeline-status.d.ts.map +1 -0
  186. package/dist/os/rfc/handlers/pipeline-status.js +124 -0
  187. package/dist/os/rfc/handlers/pipeline-status.js.map +1 -0
  188. package/dist/os/rfc/handlers/shared.d.ts +22 -0
  189. package/dist/os/rfc/handlers/shared.d.ts.map +1 -0
  190. package/dist/os/rfc/handlers/shared.js +99 -0
  191. package/dist/os/rfc/handlers/shared.js.map +1 -0
  192. package/dist/os/rfc/handlers/supersede-propose.d.ts +4 -0
  193. package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -0
  194. package/dist/os/rfc/handlers/supersede-propose.js +200 -0
  195. package/dist/os/rfc/handlers/supersede-propose.js.map +1 -0
  196. package/dist/os/rfc/handlers/validate-rules.d.ts +29 -0
  197. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -0
  198. package/dist/os/rfc/handlers/validate-rules.js +461 -0
  199. package/dist/os/rfc/handlers/validate-rules.js.map +1 -0
  200. package/dist/os/rfc/handlers/validate.d.ts +4 -0
  201. package/dist/os/rfc/handlers/validate.d.ts.map +1 -0
  202. package/dist/os/rfc/handlers/validate.js +101 -0
  203. package/dist/os/rfc/handlers/validate.js.map +1 -0
  204. package/dist/os/rfc/handlers.d.ts +7 -0
  205. package/dist/os/rfc/handlers.d.ts.map +1 -0
  206. package/dist/os/rfc/handlers.js +19 -0
  207. package/dist/os/rfc/handlers.js.map +1 -0
  208. package/dist/os/rfc/index.d.ts +18 -0
  209. package/dist/os/rfc/index.d.ts.map +1 -0
  210. package/dist/os/rfc/index.js +24 -0
  211. package/dist/os/rfc/index.js.map +1 -0
  212. package/dist/os/rfc/rfc.module.d.ts +3 -0
  213. package/dist/os/rfc/rfc.module.d.ts.map +1 -0
  214. package/dist/os/rfc/rfc.module.js +355 -0
  215. package/dist/os/rfc/rfc.module.js.map +1 -0
  216. package/dist/os/rfc/types.d.ts +448 -0
  217. package/dist/os/rfc/types.d.ts.map +1 -0
  218. package/dist/os/rfc/types.js +95 -0
  219. package/dist/os/rfc/types.js.map +1 -0
  220. package/dist/os/rfc/verification-evidence.d.ts +8 -0
  221. package/dist/os/rfc/verification-evidence.d.ts.map +1 -0
  222. package/dist/os/rfc/verification-evidence.js +182 -0
  223. package/dist/os/rfc/verification-evidence.js.map +1 -0
  224. package/dist/os/session/atif-parser.d.ts +29 -0
  225. package/dist/os/session/atif-parser.d.ts.map +1 -0
  226. package/dist/os/session/atif-parser.js +138 -0
  227. package/dist/os/session/atif-parser.js.map +1 -0
  228. package/dist/os/session/frontmatter-io.d.ts +31 -0
  229. package/dist/os/session/frontmatter-io.d.ts.map +1 -0
  230. package/dist/os/session/frontmatter-io.js +146 -0
  231. package/dist/os/session/frontmatter-io.js.map +1 -0
  232. package/dist/os/session/handlers/archive.d.ts +4 -0
  233. package/dist/os/session/handlers/archive.d.ts.map +1 -0
  234. package/dist/os/session/handlers/archive.js +209 -0
  235. package/dist/os/session/handlers/archive.js.map +1 -0
  236. package/dist/os/session/handlers/list.d.ts +4 -0
  237. package/dist/os/session/handlers/list.d.ts.map +1 -0
  238. package/dist/os/session/handlers/list.js +147 -0
  239. package/dist/os/session/handlers/list.js.map +1 -0
  240. package/dist/os/session/handlers/save.d.ts +6 -0
  241. package/dist/os/session/handlers/save.d.ts.map +1 -0
  242. package/dist/os/session/handlers/save.js +285 -0
  243. package/dist/os/session/handlers/save.js.map +1 -0
  244. package/dist/os/session/handlers/validate.d.ts +4 -0
  245. package/dist/os/session/handlers/validate.d.ts.map +1 -0
  246. package/dist/os/session/handlers/validate.js +188 -0
  247. package/dist/os/session/handlers/validate.js.map +1 -0
  248. package/dist/os/session/index.d.ts +9 -0
  249. package/dist/os/session/index.d.ts.map +1 -0
  250. package/dist/os/session/index.js +20 -0
  251. package/dist/os/session/index.js.map +1 -0
  252. package/dist/os/session/session.module.d.ts +3 -0
  253. package/dist/os/session/session.module.d.ts.map +1 -0
  254. package/dist/os/session/session.module.js +113 -0
  255. package/dist/os/session/session.module.js.map +1 -0
  256. package/dist/os/session/types.d.ts +101 -0
  257. package/dist/os/session/types.d.ts.map +1 -0
  258. package/dist/os/session/types.js +52 -0
  259. package/dist/os/session/types.js.map +1 -0
  260. package/dist/os/spec/spec-materialize.d.ts +21 -0
  261. package/dist/os/spec/spec-materialize.d.ts.map +1 -0
  262. package/dist/os/spec/spec-materialize.js +342 -0
  263. package/dist/os/spec/spec-materialize.js.map +1 -0
  264. package/dist/os/spec/spec-schema.d.ts +132 -0
  265. package/dist/os/spec/spec-schema.d.ts.map +1 -0
  266. package/dist/os/spec/spec-schema.js +118 -0
  267. package/dist/os/spec/spec-schema.js.map +1 -0
  268. package/dist/os/spec/spec-status.d.ts +33 -0
  269. package/dist/os/spec/spec-status.d.ts.map +1 -0
  270. package/dist/os/spec/spec-status.js +222 -0
  271. package/dist/os/spec/spec-status.js.map +1 -0
  272. package/dist/os/spec/spec-validate.d.ts +4 -0
  273. package/dist/os/spec/spec-validate.d.ts.map +1 -0
  274. package/dist/os/spec/spec-validate.js +435 -0
  275. package/dist/os/spec/spec-validate.js.map +1 -0
  276. package/dist/os/spec/spec.module.d.ts +3 -0
  277. package/dist/os/spec/spec.module.d.ts.map +1 -0
  278. package/dist/os/spec/spec.module.js +67 -0
  279. package/dist/os/spec/spec.module.js.map +1 -0
  280. package/dist/os/werkstatt/handlers/lock.d.ts +10 -0
  281. package/dist/os/werkstatt/handlers/lock.d.ts.map +1 -0
  282. package/dist/os/werkstatt/handlers/lock.js +127 -0
  283. package/dist/os/werkstatt/handlers/lock.js.map +1 -0
  284. package/dist/os/werkstatt/handlers/schema.d.ts +32 -0
  285. package/dist/os/werkstatt/handlers/schema.d.ts.map +1 -0
  286. package/dist/os/werkstatt/handlers/schema.js +41 -0
  287. package/dist/os/werkstatt/handlers/schema.js.map +1 -0
  288. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts +15 -0
  289. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -0
  290. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +142 -0
  291. package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -0
  292. package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts +18 -0
  293. package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts.map +1 -0
  294. package/dist/os/werkstatt/handlers/werkstatt-lock-status.js +43 -0
  295. package/dist/os/werkstatt/handlers/werkstatt-lock-status.js.map +1 -0
  296. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts +11 -0
  297. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -0
  298. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +79 -0
  299. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -0
  300. package/dist/os/werkstatt/index.d.ts +7 -0
  301. package/dist/os/werkstatt/index.d.ts.map +1 -0
  302. package/dist/os/werkstatt/index.js +18 -0
  303. package/dist/os/werkstatt/index.js.map +1 -0
  304. package/dist/os/werkstatt/werkstatt.module.d.ts +3 -0
  305. package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -0
  306. package/dist/os/werkstatt/werkstatt.module.js +58 -0
  307. package/dist/os/werkstatt/werkstatt.module.js.map +1 -0
  308. package/dist/os/workflow/handlers.d.ts +12 -0
  309. package/dist/os/workflow/handlers.d.ts.map +1 -0
  310. package/dist/os/workflow/handlers.js +254 -0
  311. package/dist/os/workflow/handlers.js.map +1 -0
  312. package/dist/os/workflow/index.d.ts +4 -0
  313. package/dist/os/workflow/index.d.ts.map +1 -0
  314. package/dist/os/workflow/index.js +18 -0
  315. package/dist/os/workflow/index.js.map +1 -0
  316. package/dist/os/workflow/types.d.ts +69 -0
  317. package/dist/os/workflow/types.d.ts.map +1 -0
  318. package/dist/os/workflow/types.js +23 -0
  319. package/dist/os/workflow/types.js.map +1 -0
  320. package/dist/os/workflow/workflow.module.d.ts +3 -0
  321. package/dist/os/workflow/workflow.module.d.ts.map +1 -0
  322. package/dist/os/workflow/workflow.module.js +48 -0
  323. package/dist/os/workflow/workflow.module.js.map +1 -0
  324. package/dist/src/cli-output.d.ts +5 -0
  325. package/dist/src/cli-output.d.ts.map +1 -0
  326. package/dist/src/cli-output.js +52 -0
  327. package/dist/src/cli-output.js.map +1 -0
  328. package/dist/src/config/forge-config.d.ts +170 -0
  329. package/dist/src/config/forge-config.d.ts.map +1 -0
  330. package/dist/src/config/forge-config.js +259 -0
  331. package/dist/src/config/forge-config.js.map +1 -0
  332. package/dist/src/forge-module.d.ts +16 -0
  333. package/dist/src/forge-module.d.ts.map +1 -0
  334. package/dist/src/forge-module.js +15 -0
  335. package/dist/src/forge-module.js.map +1 -0
  336. package/dist/src/index.d.ts +30 -0
  337. package/dist/src/index.d.ts.map +1 -0
  338. package/dist/src/index.js +48 -0
  339. package/dist/src/index.js.map +1 -0
  340. package/dist/src/migration-adapters/git-utils.d.ts +3 -0
  341. package/dist/src/migration-adapters/git-utils.d.ts.map +1 -0
  342. package/dist/src/migration-adapters/git-utils.js +46 -0
  343. package/dist/src/migration-adapters/git-utils.js.map +1 -0
  344. package/dist/src/migration-adapters/ignored-files.d.ts +12 -0
  345. package/dist/src/migration-adapters/ignored-files.d.ts.map +1 -0
  346. package/dist/src/migration-adapters/ignored-files.js +190 -0
  347. package/dist/src/migration-adapters/ignored-files.js.map +1 -0
  348. package/dist/src/migration-adapters/index.d.ts +8 -0
  349. package/dist/src/migration-adapters/index.d.ts.map +1 -0
  350. package/dist/src/migration-adapters/index.js +17 -0
  351. package/dist/src/migration-adapters/index.js.map +1 -0
  352. package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts +3 -0
  353. package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts.map +1 -0
  354. package/dist/src/migration-adapters/node-typescript-pnpm/index.js +141 -0
  355. package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +1 -0
  356. package/dist/src/migration-adapters/phaser-pnpm/index.d.ts +3 -0
  357. package/dist/src/migration-adapters/phaser-pnpm/index.d.ts.map +1 -0
  358. package/dist/src/migration-adapters/phaser-pnpm/index.js +142 -0
  359. package/dist/src/migration-adapters/phaser-pnpm/index.js.map +1 -0
  360. package/dist/src/migration-adapters/registry.d.ts +6 -0
  361. package/dist/src/migration-adapters/registry.d.ts.map +1 -0
  362. package/dist/src/migration-adapters/registry.js +58 -0
  363. package/dist/src/migration-adapters/registry.js.map +1 -0
  364. package/dist/src/migration-adapters/types.d.ts +35 -0
  365. package/dist/src/migration-adapters/types.d.ts.map +1 -0
  366. package/dist/src/migration-adapters/types.js +31 -0
  367. package/dist/src/migration-adapters/types.js.map +1 -0
  368. package/dist/src/onboarding/agents-generate.d.ts +11 -0
  369. package/dist/src/onboarding/agents-generate.d.ts.map +1 -0
  370. package/dist/src/onboarding/agents-generate.js +415 -0
  371. package/dist/src/onboarding/agents-generate.js.map +1 -0
  372. package/dist/src/onboarding/create.d.ts +12 -0
  373. package/dist/src/onboarding/create.d.ts.map +1 -0
  374. package/dist/src/onboarding/create.js +232 -0
  375. package/dist/src/onboarding/create.js.map +1 -0
  376. package/dist/src/onboarding/doctor.d.ts +30 -0
  377. package/dist/src/onboarding/doctor.d.ts.map +1 -0
  378. package/dist/src/onboarding/doctor.js +380 -0
  379. package/dist/src/onboarding/doctor.js.map +1 -0
  380. package/dist/src/onboarding/extended-behavioral-layer.d.ts +10 -0
  381. package/dist/src/onboarding/extended-behavioral-layer.d.ts.map +1 -0
  382. package/dist/src/onboarding/extended-behavioral-layer.js +82 -0
  383. package/dist/src/onboarding/extended-behavioral-layer.js.map +1 -0
  384. package/dist/src/onboarding/init.d.ts +25 -0
  385. package/dist/src/onboarding/init.d.ts.map +1 -0
  386. package/dist/src/onboarding/init.js +260 -0
  387. package/dist/src/onboarding/init.js.map +1 -0
  388. package/dist/src/onboarding/scaffold-project.d.ts +12 -0
  389. package/dist/src/onboarding/scaffold-project.d.ts.map +1 -0
  390. package/dist/src/onboarding/scaffold-project.js +167 -0
  391. package/dist/src/onboarding/scaffold-project.js.map +1 -0
  392. package/dist/src/onboarding/scaffold.d.ts +15 -0
  393. package/dist/src/onboarding/scaffold.d.ts.map +1 -0
  394. package/dist/src/onboarding/scaffold.js +120 -0
  395. package/dist/src/onboarding/scaffold.js.map +1 -0
  396. package/dist/src/onboarding/upgrade.d.ts +17 -0
  397. package/dist/src/onboarding/upgrade.d.ts.map +1 -0
  398. package/dist/src/onboarding/upgrade.js +293 -0
  399. package/dist/src/onboarding/upgrade.js.map +1 -0
  400. package/dist/src/profiles/stack-profile.d.ts +51 -0
  401. package/dist/src/profiles/stack-profile.d.ts.map +1 -0
  402. package/dist/src/profiles/stack-profile.js +119 -0
  403. package/dist/src/profiles/stack-profile.js.map +1 -0
  404. package/dist/src/registry.d.ts +38 -0
  405. package/dist/src/registry.d.ts.map +1 -0
  406. package/dist/src/registry.js +135 -0
  407. package/dist/src/registry.js.map +1 -0
  408. package/dist/src/skill-schema.d.ts +30 -0
  409. package/dist/src/skill-schema.d.ts.map +1 -0
  410. package/dist/src/skill-schema.js +34 -0
  411. package/dist/src/skill-schema.js.map +1 -0
  412. package/dist/src/types.d.ts +153 -0
  413. package/dist/src/types.d.ts.map +1 -0
  414. package/dist/src/types.js +17 -0
  415. package/dist/src/types.js.map +1 -0
  416. package/dist/src/utils/fs-atomic.d.ts +7 -0
  417. package/dist/src/utils/fs-atomic.d.ts.map +1 -0
  418. package/dist/src/utils/fs-atomic.js +81 -0
  419. package/dist/src/utils/fs-atomic.js.map +1 -0
  420. package/dist/src/utils/fs-idempotent.d.ts +2 -0
  421. package/dist/src/utils/fs-idempotent.d.ts.map +1 -0
  422. package/dist/src/utils/fs-idempotent.js +30 -0
  423. package/dist/src/utils/fs-idempotent.js.map +1 -0
  424. package/dist/src/utils/fs.d.ts +8 -0
  425. package/dist/src/utils/fs.d.ts.map +1 -0
  426. package/dist/src/utils/fs.js +60 -0
  427. package/dist/src/utils/fs.js.map +1 -0
  428. package/dist/src/utils/generated-marker.d.ts +21 -0
  429. package/dist/src/utils/generated-marker.d.ts.map +1 -0
  430. package/dist/src/utils/generated-marker.js +128 -0
  431. package/dist/src/utils/generated-marker.js.map +1 -0
  432. package/dist/src/utils/hash.d.ts +2 -0
  433. package/dist/src/utils/hash.d.ts.map +1 -0
  434. package/dist/src/utils/hash.js +18 -0
  435. package/dist/src/utils/hash.js.map +1 -0
  436. package/dist/src/utils/index.d.ts +7 -0
  437. package/dist/src/utils/index.d.ts.map +1 -0
  438. package/dist/src/utils/index.js +19 -0
  439. package/dist/src/utils/index.js.map +1 -0
  440. package/dist/src/utils/string-utils.d.ts +2 -0
  441. package/dist/src/utils/string-utils.d.ts.map +1 -0
  442. package/dist/src/utils/string-utils.js +19 -0
  443. package/dist/src/utils/string-utils.js.map +1 -0
  444. package/dist/src/validators/port-validate.d.ts +12 -0
  445. package/dist/src/validators/port-validate.d.ts.map +1 -0
  446. package/dist/src/validators/port-validate.js +73 -0
  447. package/dist/src/validators/port-validate.js.map +1 -0
  448. package/dist/src/validators/skill-validate.d.ts +14 -0
  449. package/dist/src/validators/skill-validate.d.ts.map +1 -0
  450. package/dist/src/validators/skill-validate.js +487 -0
  451. package/dist/src/validators/skill-validate.js.map +1 -0
  452. package/os/rfc/rfc-0000-template.md +222 -0
  453. package/package.json +262 -0
  454. package/profiles/astro-typescript-turborepo.yaml +144 -0
  455. package/profiles/forge-shell.yaml +77 -0
  456. package/profiles/phaser-turborepo.yaml +144 -0
  457. package/skills/_shared/fo-pipeline-conventions.md +119 -0
  458. package/skills/_shared/fo-session-summary.md +95 -0
  459. package/skills/fo/fo-add-tests/SKILL.md +166 -0
  460. package/skills/fo/fo-add-tests/mocking.md +60 -0
  461. package/skills/fo/fo-add-tests/pbt-guide.md +193 -0
  462. package/skills/fo/fo-add-tests/tests-reference.md +92 -0
  463. package/skills/fo/fo-architecture/SKILL.md +83 -0
  464. package/skills/fo/fo-architecture/architecture-vocabulary.md +104 -0
  465. package/skills/fo/fo-architecture/deepening.md +37 -0
  466. package/skills/fo/fo-architecture/design-it-twice.md +44 -0
  467. package/skills/fo/fo-architecture/html-report.md +104 -0
  468. package/skills/fo/fo-compass-annotate/SKILL.md +128 -0
  469. package/skills/fo/fo-compass-annotate/reference/comment-styles.md +25 -0
  470. package/skills/fo/fo-compass-annotate/reference/learned-principles.md +12 -0
  471. package/skills/fo/fo-compass-annotate/reference/risk-patterns.md +23 -0
  472. package/skills/fo/fo-compass-annotate/templates/audit-prompt.md +36 -0
  473. package/skills/fo/fo-compass-annotate/templates/header-format.md +57 -0
  474. package/skills/fo/fo-compass-annotate/templates/header-prompt.md +35 -0
  475. package/skills/fo/fo-doc-audit/SKILL.md +264 -0
  476. package/skills/fo/fo-extract-dna/SKILL.md +248 -0
  477. package/skills/fo/fo-fix/SKILL.md +152 -0
  478. package/skills/fo/fo-fix/bug-diagnosis.md +128 -0
  479. package/skills/fo/fo-handoff/SKILL.md +58 -0
  480. package/skills/fo/fo-harvest/SKILL.md +80 -0
  481. package/skills/fo/fo-idea/SKILL.md +242 -0
  482. package/skills/fo/fo-idea-audit/SKILL.md +248 -0
  483. package/skills/fo/fo-idea-create-adr/SKILL.md +130 -0
  484. package/skills/fo/fo-idea-create-rfc/SKILL.md +130 -0
  485. package/skills/fo/fo-idea-enhance/SKILL.md +218 -0
  486. package/skills/fo/fo-idea-i-just-want-to-see-the-plan/SKILL.md +36 -0
  487. package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +167 -0
  488. package/skills/fo/fo-idea-implement/SKILL.md +463 -0
  489. package/skills/fo/fo-idea-plan/SKILL.md +230 -0
  490. package/skills/fo/fo-idea-status/SKILL.md +103 -0
  491. package/skills/fo/fo-memory-sync/SKILL.md +204 -0
  492. package/skills/fo/fo-memory-sync/fix-patterns.md +24 -0
  493. package/skills/fo/fo-memory-sync/learned-principles.md +6 -0
  494. package/skills/fo/fo-memory-sync/qa-log.md +5 -0
  495. package/skills/fo/fo-qa/SKILL.md +142 -0
  496. package/skills/fo/fo-review/SKILL.md +273 -0
  497. package/skills/fo/fo-session-retro/SKILL.md +276 -0
  498. package/skills/fo/fo-session-save/SKILL.md +71 -0
  499. package/skills/fo/fo-session-save/fix-patterns.md +33 -0
  500. package/skills/fo/fo-session-save/learned-principles.md +19 -0
  501. package/skills/fo/fo-session-save/qa-log.md +11 -0
  502. package/skills/fo/fo-spec-ingest/SKILL.md +127 -0
  503. package/skills/fo/fo-triage/SKILL.md +97 -0
  504. package/skills/meta/forge-bootstrap/SKILL.md +335 -0
  505. package/skills/meta/forge-bootstrap/forge-about.md +35 -0
  506. package/skills/meta/forge-bootstrap/milestone-gallery/.gitkeep +0 -0
  507. package/skills/meta/forge-bootstrap/operator-profile-template.md +53 -0
  508. package/skills/meta/forge-bootstrap/project-narrative-template.md +31 -0
  509. package/skills/meta/port-to-forge/SKILL.md +65 -0
  510. package/skills/meta/skill-create/SKILL.md +73 -0
  511. package/skills/shared/grilling/SKILL.md +28 -0
  512. package/skills/shared/grilling/learned-principles.md +12 -0
  513. package/skills/shared/grilling/qa-log.md +10 -0
  514. package/skills/shared/my-preferences/SKILL.md +77 -0
  515. package/skills/shared/windows-ai-tooling/SKILL.md +200 -0
  516. package/skills/shared/writing-great-skills/SKILL.md +132 -0
@@ -0,0 +1,44 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Register the mission archive command with the forge kernel registry.</purpose>
4
+ <non-goals>
5
+ <item>Do not implement handler logic here — delegate to handlers/archive.ts.</item>
6
+ </non-goals>
7
+ </MODULE_CONTRACT>
8
+ <CHANGE_SUMMARY>
9
+ <item>RFC-0573: initial forgeMissionModule registering mission.archive command.</item>
10
+ </CHANGE_SUMMARY>
11
+ */
12
+ export const forgeMissionModule = {
13
+ name: "forge-mission",
14
+ version: "0.1.0",
15
+ async register(registry) {
16
+ const { runMissionArchive } = await import("./handlers/archive.js");
17
+ registry.registerCommand({
18
+ name: "mission.archive",
19
+ description: "Move terminal-state mission directories (state: closed or aborted in " +
20
+ "mission.yaml) into missions/archive/<state>/<missionId>/ subdirectories. " +
21
+ "Bidirectional: moves open missions found in archive subdirectories back " +
22
+ "to missions/. Use --dry-run to preview. Use --status to filter to a " +
23
+ "single terminal status (closed, aborted). " +
24
+ "Prefer the docs.archive umbrella command unless you need to archive only missions.",
25
+ scope: "workspace",
26
+ mutatesState: true,
27
+ writes: ["missions/*", "missions/archive/**"],
28
+ reads: ["missions/**"],
29
+ cacheable: false,
30
+ flags: {
31
+ "dry-run": {
32
+ kind: "boolean",
33
+ description: "Preview what would be moved without touching the filesystem.",
34
+ },
35
+ status: {
36
+ kind: "string",
37
+ description: "Filter to a single terminal status (closed, aborted).",
38
+ },
39
+ },
40
+ execute: runMissionArchive,
41
+ });
42
+ },
43
+ };
44
+ //# sourceMappingURL=mission.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission.module.js","sourceRoot":"","sources":["../../../os/mission/mission.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEpE,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EACT,uEAAuE;gBACvE,2EAA2E;gBAC3E,0EAA0E;gBAC1E,sEAAsE;gBACtE,4CAA4C;gBAC5C,oFAAoF;YACtF,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC;YAC7C,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE;gBACL,SAAS,EAAE;oBACT,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,8DAA8D;iBAC5E;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uDAAuD;iBACrE;aACF;YACD,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare const MISSIONS_DIR = "missions";
2
+ export declare const ARCHIVE_DIR_NAME = "archive";
3
+ export declare const MISSION_TERMINAL_STATUSES: readonly ["closed", "aborted"];
4
+ export interface MissionArchiveMove {
5
+ missionId: string;
6
+ state: string;
7
+ from: string;
8
+ to: string;
9
+ direction: "into-archive" | "out-of-archive";
10
+ }
11
+ export interface MissionArchiveSkip {
12
+ missionId: string;
13
+ dir: string;
14
+ reason: string;
15
+ }
16
+ export interface MissionArchiveResult {
17
+ command: "mission.archive";
18
+ status: "ok";
19
+ moved: MissionArchiveMove[];
20
+ skipped: MissionArchiveSkip[];
21
+ dryRun: boolean;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../os/mission/types.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,YAAY,aAAa,CAAC;AACvC,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,eAAO,MAAM,yBAAyB,gCAAiC,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,cAAc,GAAG,gBAAgB,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;CACjB"}
@@ -0,0 +1,18 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>
4
+ Type definitions for the mission archive domain — mission directory discovery,
5
+ manifest state extraction, and archive result shapes.
6
+ </purpose>
7
+ <non-goals>
8
+ <item>Do not define archive handler logic here — that lives in handlers/archive.ts.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+ <CHANGE_SUMMARY>
12
+ <item>RFC-0573: initial mission archive types.</item>
13
+ </CHANGE_SUMMARY>
14
+ */
15
+ export const MISSIONS_DIR = "missions";
16
+ export const ARCHIVE_DIR_NAME = "archive";
17
+ export const MISSION_TERMINAL_STATUSES = ["closed", "aborted"];
18
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../os/mission/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { forgeNamingModule } from "./naming.module.ts";
2
+ export { runNamingConventionLint } from "./naming-convention.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../os/naming/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Expose forge naming lint command handlers through a stable package subpath.</purpose>
4
+ <non-goals>
5
+ <item>Do not register project-specific naming commands.</item>
6
+ </non-goals>
7
+ </MODULE_CONTRACT>
8
+ <CHANGE_SUMMARY>
9
+ <item>RFC-0374: initial naming module barrel.</item>
10
+ </CHANGE_SUMMARY>
11
+ */
12
+ export { forgeNamingModule } from "./naming.module.js";
13
+ export { runNamingConventionLint } from "./naming-convention.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../os/naming/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../src/types.ts";
2
+ /**
3
+ * Validates that all filenames in registered repo roots use kebab-case.
4
+ *
5
+ * Rule: filenames must use only lowercase letters, digits, and hyphens.
6
+ * Violations: underscores, uppercase letters (PascalCase, camelCase, ALLCAPS).
7
+ *
8
+ * Exceptions (not flagged):
9
+ * - Files starting with a dot (.env, .gitignore)
10
+ * - Files starting with an underscore (_shared.ts, _headers, _redirects, _routes.json)
11
+ * - Tool-mandated filenames (Dockerfile, Caddyfile)
12
+ * - Files containing "config" or "module" in their name (astro.config.mjs, check.module.ts)
13
+ * - Files in directories starting with a dot (.git, .astro, .vscode)
14
+ * - Files excluded by .gitignore or .windsurfignore (simple non-wildcard patterns only)
15
+ *
16
+ * See packages/site-kernel/docs/naming-conventions.md — "Global Rule" section.
17
+ */
18
+ export declare function runNamingConventionLint(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<{
19
+ violations: number;
20
+ checkedFiles: number;
21
+ scannedRoots?: string[];
22
+ ephemeralRootsSkipped?: string[];
23
+ unknownTopLevelDirs?: string[];
24
+ }>>;
25
+ //# sourceMappingURL=naming-convention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-convention.d.ts","sourceRoot":"","sources":["../../../os/naming/naming-convention.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAkN5B;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CACR,kBAAkB,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC,CACH,CAsHA"}
@@ -0,0 +1,324 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>naming.convention.lint — validates that every filename in registered repo roots
4
+ uses kebab-case (lowercase letters, digits, hyphens only), with documented exemptions.</purpose>
5
+ <non-goals>
6
+ <item>Do not introduce app-specific runtime composition or deployment behavior into this reusable package source file.</item>
7
+ </non-goals>
8
+ </MODULE_CONTRACT>
9
+ <CHANGE_SUMMARY>
10
+ <item>RFC-0303: split out of structure.ts (Phase 3 file-size split).</item>
11
+ <item>RFC-0360: extend scan roots from apps/ and packages/ to the whole repo.</item>
12
+ </CHANGE_SUMMARY>
13
+ */
14
+ import { basename, join, relative } from "node:path";
15
+ import { readFile } from "node:fs/promises";
16
+ import { readdirSync } from "node:fs";
17
+ import { collectFiles } from "../../src/utils/fs.js";
18
+ // @ai-invariant The exception rules below are the canonical source for naming.convention.lint.
19
+ // Update naming-conventions.md (packages/site-kernel/docs/) when these rules change.
20
+ // RFC-0360: Registered recursive roots — scanned recursively for filename violations.
21
+ const NAMING_CONVENTION_RECURSIVE_ROOTS = [
22
+ "apps",
23
+ "packages",
24
+ "services",
25
+ "docs",
26
+ "integrations",
27
+ "onboarding",
28
+ "fleet",
29
+ "hooks",
30
+ "tools",
31
+ "scripts",
32
+ "systems",
33
+ "tsconfig",
34
+ ];
35
+ // RFC-0360: Registered ephemeral roots — root name validated, contents skipped unless --include-ignored.
36
+ const NAMING_CONVENTION_EPHEMERAL_ROOTS = ["missions", "releases", "agents", ".werkstatt"];
37
+ // RFC-0360: Tool/cache directories that are never scanned at any level.
38
+ const NAMING_CONVENTION_IGNORED_TOP_LEVEL = new Set([
39
+ "node_modules",
40
+ ".git",
41
+ ".turbo",
42
+ ".astro",
43
+ ".wrangler",
44
+ ".vscode",
45
+ ".idea",
46
+ "coverage",
47
+ ".changelog-system",
48
+ ".codex-runlogs",
49
+ ".agents",
50
+ ".claude",
51
+ ".github",
52
+ ".opencode",
53
+ ".windsurf",
54
+ ".cache",
55
+ "tmp",
56
+ ]);
57
+ // Tool-mandated filenames exempt from kebab-case (Docker, Caddy use these exact names).
58
+ const NAMING_CONVENTION_TOOL_MANDATED = new Set(["Dockerfile", "Caddyfile"]);
59
+ const NAMING_CONVENTION_IGNORED_DIRS = new Set([
60
+ "node_modules",
61
+ "dist",
62
+ ".git",
63
+ ".turbo",
64
+ ".astro",
65
+ ".wrangler",
66
+ ".vscode",
67
+ ".idea",
68
+ "coverage",
69
+ "spec",
70
+ "todo",
71
+ // Generated, gitignored media-artifact dirs under public/ — their filenames are owned by the
72
+ // generators, not authored: RFC-0204 responsive image variants (_img) and RFC-0210 video
73
+ // variants / HLS segments (_video, e.g. "1080p_000.ts", where ".ts" is MPEG-TS, not TypeScript).
74
+ "_img",
75
+ "_video",
76
+ // DB migration dirs follow the ordered tool convention "NNN_name.sql" (Supabase/Postgres,
77
+ // RFC-0186) — the numeric-underscore prefix is required for ordering and is not authored prose.
78
+ "migrations",
79
+ ]);
80
+ const NAMING_CONVENTION_EXEMPT_KEYWORDS = ["config", "module"];
81
+ // Set of directory paths that are exempt from naming convention (generated files)
82
+ const NAMING_CONVENTION_EXEMPT_DIRS = new Set([
83
+ "components/icons/gen", // Generated icon components — naming controlled by generator
84
+ ]);
85
+ /**
86
+ * Returns true when a filename is exempt from kebab-case enforcement.
87
+ *
88
+ * Exemptions (see naming-conventions.md for the canonical description):
89
+ * 1. File name starts with a dot (.env, .gitignore, ...).
90
+ * 2. File name starts with an underscore (_shared.ts, _headers, etc.).
91
+ * 3. File name is ALLCAPS (AGENTS.md, README.md, LICENSE, etc.).
92
+ * 4. File name (full, including extension) contains "config" or "module".
93
+ * 5. File is in an exempt directory (components/icons/gen — generated files).
94
+ * 6. Base icon component (LordIconBase.astro) — used by generated icon components.
95
+ */
96
+ function isNamingExempt(fileName, filePath) {
97
+ if (fileName.startsWith("."))
98
+ return true;
99
+ if (fileName.startsWith("_"))
100
+ return true;
101
+ if (NAMING_CONVENTION_TOOL_MANDATED.has(fileName))
102
+ return true;
103
+ // SHOUTY_SNAKE_CASE files are exempt (AGENTS.md, README.md, LICENSE,
104
+ // ICONS_GENERATE.md, etc.). RFC-0132 extension: the check uses the FIRST
105
+ // stem segment so multi-segment names like AGENTS.template.md and
106
+ // SCHEMA.draft.md inherit the exemption from their canonical first segment
107
+ // — this is intentional for template files whose generated artifact carries
108
+ // the canonical name (AGENTS.template.md → AGENTS.md after agents.generate).
109
+ const firstDotIndex = fileName.indexOf(".");
110
+ const firstStem = firstDotIndex > 0 ? fileName.slice(0, firstDotIndex) : fileName;
111
+ if (firstStem.length > 0 && /^[A-Z]+(_[A-Z]+)*$/.test(firstStem))
112
+ return true;
113
+ for (const keyword of NAMING_CONVENTION_EXEMPT_KEYWORDS) {
114
+ if (fileName.includes(keyword))
115
+ return true;
116
+ }
117
+ // Check if file is in an exempt directory
118
+ if (filePath) {
119
+ for (const exemptDir of NAMING_CONVENTION_EXEMPT_DIRS) {
120
+ if (filePath.includes(exemptDir))
121
+ return true;
122
+ }
123
+ }
124
+ return false;
125
+ }
126
+ /**
127
+ * Returns true when a filename violates the kebab-case convention.
128
+ * Violations: underscores OR mixed-case (PascalCase, camelCase).
129
+ * Note: ALLCAPS files are exempt, not violations.
130
+ * Only called when the file is not already exempt.
131
+ */
132
+ function hasNamingViolation(fileName) {
133
+ const dotIndex = fileName.lastIndexOf(".");
134
+ const stem = dotIndex > 0 ? fileName.slice(0, dotIndex) : fileName;
135
+ // kebab-case allows only lowercase letters, digits, and hyphens
136
+ // Violations: underscores OR mixed-case (contains both upper and lower)
137
+ if (stem.includes("_"))
138
+ return true;
139
+ // Mixed case: has at least one uppercase AND at least one lowercase
140
+ const hasUpper = /[A-Z]/.test(stem);
141
+ const hasLower = /[a-z]/.test(stem);
142
+ return hasUpper && hasLower;
143
+ }
144
+ /**
145
+ * Reads a gitignore-style file and returns a set of simple (no-wildcard) patterns.
146
+ * Patterns containing `*` or `?` are skipped — too complex without a full gitignore engine.
147
+ */
148
+ async function readSimpleIgnorePatterns(filePath) {
149
+ const patterns = new Set();
150
+ try {
151
+ const content = await readFile(filePath, "utf8");
152
+ for (const rawLine of content.split("\n")) {
153
+ const line = rawLine.trim();
154
+ if (!line || line.startsWith("#"))
155
+ continue;
156
+ if (line.includes("*") || line.includes("?"))
157
+ continue;
158
+ patterns.add(line.replace(/^\//, "").replace(/\/$/, ""));
159
+ }
160
+ }
161
+ catch {
162
+ // File absent — silently skip
163
+ }
164
+ return patterns;
165
+ }
166
+ function isSegmentIgnored(relPath, ignorePatterns) {
167
+ for (const segment of relPath.split("/")) {
168
+ if (ignorePatterns.has(segment))
169
+ return true;
170
+ }
171
+ return false;
172
+ }
173
+ async function collectAllFilesForNaming(dirPath, ignorePatterns) {
174
+ return collectFiles(dirPath, {
175
+ ignore: (name) => name.startsWith(".") ||
176
+ NAMING_CONVENTION_IGNORED_DIRS.has(name) ||
177
+ ignorePatterns.has(name) ||
178
+ ignorePatterns.has(`${name}/`),
179
+ });
180
+ }
181
+ function isRegisteredOrIgnoredTopLevel(name) {
182
+ return (NAMING_CONVENTION_RECURSIVE_ROOTS.includes(name) ||
183
+ NAMING_CONVENTION_EPHEMERAL_ROOTS.includes(name) ||
184
+ NAMING_CONVENTION_IGNORED_TOP_LEVEL.has(name));
185
+ }
186
+ function resolveScanPlan(repoRoot) {
187
+ let entries;
188
+ try {
189
+ entries = readdirSync(repoRoot, { withFileTypes: true });
190
+ }
191
+ catch {
192
+ return {
193
+ recursiveRoots: [...NAMING_CONVENTION_RECURSIVE_ROOTS],
194
+ ephemeralRoots: [...NAMING_CONVENTION_EPHEMERAL_ROOTS],
195
+ unknown: [],
196
+ };
197
+ }
198
+ const topLevelDirs = entries
199
+ .filter((e) => e.isDirectory() && !e.isSymbolicLink())
200
+ .map((e) => e.name);
201
+ const unknown = topLevelDirs.filter((name) => !isRegisteredOrIgnoredTopLevel(name));
202
+ const recursiveRoots = NAMING_CONVENTION_RECURSIVE_ROOTS.filter((name) => topLevelDirs.includes(name));
203
+ const ephemeralRoots = NAMING_CONVENTION_EPHEMERAL_ROOTS.filter((name) => topLevelDirs.includes(name));
204
+ return { recursiveRoots, ephemeralRoots, unknown };
205
+ }
206
+ /**
207
+ * Validates that all filenames in registered repo roots use kebab-case.
208
+ *
209
+ * Rule: filenames must use only lowercase letters, digits, and hyphens.
210
+ * Violations: underscores, uppercase letters (PascalCase, camelCase, ALLCAPS).
211
+ *
212
+ * Exceptions (not flagged):
213
+ * - Files starting with a dot (.env, .gitignore)
214
+ * - Files starting with an underscore (_shared.ts, _headers, _redirects, _routes.json)
215
+ * - Tool-mandated filenames (Dockerfile, Caddyfile)
216
+ * - Files containing "config" or "module" in their name (astro.config.mjs, check.module.ts)
217
+ * - Files in directories starting with a dot (.git, .astro, .vscode)
218
+ * - Files excluded by .gitignore or .windsurfignore (simple non-wildcard patterns only)
219
+ *
220
+ * See packages/site-kernel/docs/naming-conventions.md — "Global Rule" section.
221
+ */
222
+ export async function runNamingConventionLint(input, context) {
223
+ const workspaceRoot = context.workspaceRoot;
224
+ const includeIgnored = input.flags["include-ignored"] === true;
225
+ const gitignorePatterns = await readSimpleIgnorePatterns(join(workspaceRoot, ".gitignore"));
226
+ const windsurfignorePatterns = await readSimpleIgnorePatterns(join(workspaceRoot, ".windsurfignore"));
227
+ const ignorePatterns = new Set([...gitignorePatterns, ...windsurfignorePatterns]);
228
+ let violations = 0;
229
+ let checkedFiles = 0;
230
+ // App-scoped mode: scan only the app directory
231
+ if (context.site) {
232
+ const files = await collectAllFilesForNaming(context.site.directory, ignorePatterns);
233
+ for (const filePath of files) {
234
+ const fileName = basename(filePath);
235
+ const relPath = relative(workspaceRoot, filePath).replace(/\\/g, "/");
236
+ if (isNamingExempt(fileName, relPath))
237
+ continue;
238
+ if (isSegmentIgnored(relPath, ignorePatterns))
239
+ continue;
240
+ checkedFiles += 1;
241
+ if (hasNamingViolation(fileName)) {
242
+ context.logger.error(`${relPath}: "${fileName}" violates kebab-case — use only lowercase letters, digits, and hyphens`);
243
+ violations += 1;
244
+ }
245
+ }
246
+ return {
247
+ data: { violations, checkedFiles },
248
+ exitCode: violations > 0 ? 1 : 0,
249
+ summary: violations > 0
250
+ ? undefined
251
+ : `[naming.convention] OK (${checkedFiles} non-exempt files checked)`,
252
+ };
253
+ }
254
+ // Workspace-scoped mode: resolve scan plan from filesystem
255
+ const scanPlan = resolveScanPlan(workspaceRoot);
256
+ // Report unknown top-level directories
257
+ for (const unknownDir of scanPlan.unknown) {
258
+ context.logger.error(`[naming.convention.lint] unknown top-level directory '${unknownDir}'; register it or remove it`);
259
+ violations += 1;
260
+ }
261
+ // Validate ephemeral root names (kebab-case check on the root name itself)
262
+ for (const ephemeral of scanPlan.ephemeralRoots) {
263
+ const name = ephemeral.startsWith(".") ? ephemeral.slice(1) : ephemeral;
264
+ if (name && !name.includes("_") && !(/[A-Z]/.test(name) && /[a-z]/.test(name))) {
265
+ // ok
266
+ }
267
+ else if (name && (name.includes("_") || (/[A-Z]/.test(name) && /[a-z]/.test(name)))) {
268
+ context.logger.error(`[naming.convention.lint] top-level directory '${ephemeral}' violates naming convention`);
269
+ violations += 1;
270
+ }
271
+ }
272
+ // Scan recursive roots
273
+ for (const rootName of scanPlan.recursiveRoots) {
274
+ const scanDir = join(workspaceRoot, rootName);
275
+ const files = await collectAllFilesForNaming(scanDir, ignorePatterns);
276
+ for (const filePath of files) {
277
+ const fileName = basename(filePath);
278
+ const relPath = relative(workspaceRoot, filePath).replace(/\\/g, "/");
279
+ if (isNamingExempt(fileName, relPath))
280
+ continue;
281
+ if (isSegmentIgnored(relPath, ignorePatterns))
282
+ continue;
283
+ checkedFiles += 1;
284
+ if (hasNamingViolation(fileName)) {
285
+ context.logger.error(`${relPath}: "${fileName}" violates kebab-case — use only lowercase letters, digits, and hyphens`);
286
+ violations += 1;
287
+ }
288
+ }
289
+ }
290
+ // Scan ephemeral root contents only when --include-ignored is passed
291
+ if (includeIgnored) {
292
+ for (const rootName of scanPlan.ephemeralRoots) {
293
+ const scanDir = join(workspaceRoot, rootName);
294
+ const files = await collectAllFilesForNaming(scanDir, ignorePatterns);
295
+ for (const filePath of files) {
296
+ const fileName = basename(filePath);
297
+ const relPath = relative(workspaceRoot, filePath).replace(/\\/g, "/");
298
+ if (isNamingExempt(fileName, relPath))
299
+ continue;
300
+ if (isSegmentIgnored(relPath, ignorePatterns))
301
+ continue;
302
+ checkedFiles += 1;
303
+ if (hasNamingViolation(fileName)) {
304
+ context.logger.error(`${relPath}: "${fileName}" violates kebab-case — use only lowercase letters, digits, and hyphens`);
305
+ violations += 1;
306
+ }
307
+ }
308
+ }
309
+ }
310
+ return {
311
+ data: {
312
+ violations,
313
+ checkedFiles,
314
+ scannedRoots: scanPlan.recursiveRoots,
315
+ ephemeralRootsSkipped: includeIgnored ? [] : scanPlan.ephemeralRoots,
316
+ unknownTopLevelDirs: scanPlan.unknown,
317
+ },
318
+ exitCode: violations > 0 ? 1 : 0,
319
+ summary: violations > 0
320
+ ? undefined
321
+ : `[naming.convention] OK (${checkedFiles} non-exempt files checked)`,
322
+ };
323
+ }
324
+ //# sourceMappingURL=naming-convention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-convention.js","sourceRoot":"","sources":["../../../os/naming/naming-convention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAEF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOrD,+FAA+F;AAC/F,qFAAqF;AAErF,sFAAsF;AACtF,MAAM,iCAAiC,GAAG;IACxC,MAAM;IACN,UAAU;IACV,UAAU;IACV,MAAM;IACN,cAAc;IACd,YAAY;IACZ,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;CACF,CAAC;AAEX,yGAAyG;AACzG,MAAM,iCAAiC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;AAEpG,wEAAwE;AACxE,MAAM,mCAAmC,GAAG,IAAI,GAAG,CAAC;IAClD,cAAc;IACd,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,SAAS;IACT,OAAO;IACP,UAAU;IACV,mBAAmB;IACnB,gBAAgB;IAChB,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;IACX,QAAQ;IACR,KAAK;CACN,CAAC,CAAC;AAEH,wFAAwF;AACxF,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;AAC7E,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IAC7C,cAAc;IACd,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,SAAS;IACT,OAAO;IACP,UAAU;IACV,MAAM;IACN,MAAM;IACN,6FAA6F;IAC7F,yFAAyF;IACzF,iGAAiG;IACjG,MAAM;IACN,QAAQ;IACR,0FAA0F;IAC1F,gGAAgG;IAChG,YAAY;CACb,CAAC,CAAC;AACH,MAAM,iCAAiC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAExE,kFAAkF;AAClF,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC5C,sBAAsB,EAAE,6DAA6D;CACtF,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,QAAgB,EAAE,QAAiB;IACzD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,qEAAqE;IACrE,yEAAyE;IACzE,kEAAkE;IAClE,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,KAAK,MAAM,OAAO,IAAI,iCAAiC,EAAE,CAAC;QACxD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC9C,CAAC;IACD,0CAA0C;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,SAAS,IAAI,6BAA6B,EAAE,CAAC;YACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnE,gEAAgE;IAChE,wEAAwE;IACxE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,oEAAoE;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,QAAQ,IAAI,QAAQ,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,wBAAwB,CAAC,QAAgB;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS;YACvD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,cAA2B;IACpE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,OAAe,EACf,cAA2B;IAE3B,OAAO,YAAY,CAAC,OAAO,EAAE;QAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC;YACxC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;KACjC,CAAC,CAAC;AACL,CAAC;AAQD,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,CACJ,iCAAuD,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtE,iCAAuD,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvE,mCAAmC,CAAC,GAAG,CAAC,IAAI,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,cAAc,EAAE,CAAC,GAAG,iCAAiC,CAAC;YACtD,cAAc,EAAE,CAAC,GAAG,iCAAiC,CAAC;YACtD,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,OAAO;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;SACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,MAAM,cAAc,GAAI,iCAAuD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9F,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5B,CAAC;IACF,MAAM,cAAc,GAAI,iCAAuD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9F,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5B,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAwB,EACxB,OAA4B;IAU5B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAE/D,MAAM,iBAAiB,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5F,MAAM,sBAAsB,GAAG,MAAM,wBAAwB,CAC3D,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CACvC,CAAC;IACF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC;IAElF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,+CAA+C;IAC/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACrF,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAAE,SAAS;YAChD,IAAI,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC;gBAAE,SAAS;YACxD,YAAY,IAAI,CAAC,CAAC;YAClB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,OAAO,MAAM,QAAQ,yEAAyE,CAClG,CAAC;gBACF,UAAU,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;YAClC,QAAQ,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,EACL,UAAU,GAAG,CAAC;gBACZ,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,2BAA2B,YAAY,4BAA4B;SAC1E,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEhD,uCAAuC;IACvC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yDAAyD,UAAU,6BAA6B,CACjG,CAAC;QACF,UAAU,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E,KAAK;QACP,CAAC;aAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iDAAiD,SAAS,8BAA8B,CACzF,CAAC;YACF,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAEtE,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAAE,SAAS;YAChD,IAAI,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC;gBAAE,SAAS;YACxD,YAAY,IAAI,CAAC,CAAC;YAClB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,OAAO,MAAM,QAAQ,yEAAyE,CAClG,CAAC;gBACF,UAAU,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACtE,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACtE,IAAI,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;oBAAE,SAAS;gBAChD,IAAI,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC;oBAAE,SAAS;gBACxD,YAAY,IAAI,CAAC,CAAC;gBAClB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,OAAO,MAAM,QAAQ,yEAAyE,CAClG,CAAC;oBACF,UAAU,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE;YACJ,UAAU;YACV,YAAY;YACZ,YAAY,EAAE,QAAQ,CAAC,cAAc;YACrC,qBAAqB,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc;YACpE,mBAAmB,EAAE,QAAQ,CAAC,OAAO;SACtC;QACD,QAAQ,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,EACL,UAAU,GAAG,CAAC;YACZ,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,2BAA2B,YAAY,4BAA4B;KAC1E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ForgeModule } from "../../src/forge-module.ts";
2
+ export declare const forgeNamingModule: ForgeModule;
3
+ //# sourceMappingURL=naming.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.module.d.ts","sourceRoot":"","sources":["../../../os/naming/naming.module.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,iBAAiB,EAAE,WAqB/B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Register the forge naming convention lint command with the Site OS kernel registry.</purpose>
4
+ <non-goals>
5
+ <item>Do not register project-specific naming commands (naming.pages.lint, etc.) — those stay in site-kernel-checks.</item>
6
+ </non-goals>
7
+ </MODULE_CONTRACT>
8
+ <CHANGE_SUMMARY>
9
+ <item>RFC-0374: initial forgeNamingModule registering naming.convention.lint.</item>
10
+ </CHANGE_SUMMARY>
11
+ */
12
+ export const forgeNamingModule = {
13
+ name: "forge-naming",
14
+ version: "0.1.0",
15
+ async register(registry) {
16
+ const { runNamingConventionLint } = await import("./naming-convention.js");
17
+ registry.registerCommand({
18
+ name: "naming.convention.lint",
19
+ description: "Validate all filenames use kebab-case (no underscores) across registered workspace roots.",
20
+ scope: "workspace",
21
+ supportsAllSites: true,
22
+ flags: {
23
+ "include-ignored": {
24
+ kind: "boolean",
25
+ description: "Also scan files ignored by .gitignore or .windsurfignore.",
26
+ },
27
+ },
28
+ reads: ["packages/**/*.{ts,tsx}", "apps/**/*.{ts,tsx}", "services/**/*.{ts,tsx}"],
29
+ execute: runNamingConventionLint,
30
+ });
31
+ },
32
+ };
33
+ //# sourceMappingURL=naming.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.module.js","sourceRoot":"","sources":["../../../os/naming/naming.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAIF,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC3E,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EACT,2FAA2F;YAC7F,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,IAAI;YACtB,KAAK,EAAE;gBACL,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,2DAA2D;iBACzE;aACF;YACD,KAAK,EAAE,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,wBAAwB,CAAC;YACjF,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface ParsedPlan {
2
+ frontmatter: Record<string, unknown>;
3
+ body: string;
4
+ }
5
+ export declare function parsePlanFile(source: string): ParsedPlan;
6
+ export declare function listPlanFiles(planDirPath: string): Promise<string[]>;
7
+ export declare function readAndParsePlan(planDirPath: string, fileName: string): Promise<{
8
+ fileName: string;
9
+ parsed: ParsedPlan;
10
+ } | undefined>;
11
+ export declare function extractRfcIdFromPlanFile(fileName: string): string | undefined;
12
+ //# sourceMappingURL=frontmatter-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter-io.d.ts","sourceRoot":"","sources":["../../../os/plan/frontmatter-io.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CASxD;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6B1E;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,SAAS,CAAC,CAQ/D;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7E"}
@@ -0,0 +1,71 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>
4
+ Plan frontmatter file I/O — recursive file discovery and YAML frontmatter
5
+ parsing for plan files under docs/plans/.
6
+ </purpose>
7
+ <non-goals>
8
+ <item>Do not validate plan content — that is a future concern.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+ <CHANGE_SUMMARY>
12
+ <item>RFC-0521: initial plan frontmatter I/O.</item>
13
+ </CHANGE_SUMMARY>
14
+ */
15
+ import fs from "node:fs/promises";
16
+ import path from "node:path";
17
+ import YAML from "yaml";
18
+ import { PLAN_FILE_PATTERN } from "./types.js";
19
+ export function parsePlanFile(source) {
20
+ const match = source.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
21
+ if (!match) {
22
+ return { frontmatter: {}, body: source };
23
+ }
24
+ return {
25
+ frontmatter: (YAML.parse(match[1]) ?? {}),
26
+ body: match[2] ?? "",
27
+ };
28
+ }
29
+ export async function listPlanFiles(planDirPath) {
30
+ const results = [];
31
+ async function scanDir(dirPath, relativePrefix) {
32
+ try {
33
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
34
+ for (const entry of entries) {
35
+ const relativePath = relativePrefix
36
+ ? `${relativePrefix}/${entry.name}`
37
+ : entry.name;
38
+ if (entry.isDirectory()) {
39
+ await scanDir(path.join(dirPath, entry.name), relativePath);
40
+ }
41
+ else if (entry.isFile() &&
42
+ entry.name.endsWith(".md") &&
43
+ !entry.name.startsWith("plan-0000") &&
44
+ entry.name !== "README.md" &&
45
+ PLAN_FILE_PATTERN.test(entry.name)) {
46
+ results.push(relativePath);
47
+ }
48
+ }
49
+ }
50
+ catch {
51
+ // Directory doesn't exist or is unreadable — return empty
52
+ }
53
+ }
54
+ await scanDir(planDirPath, "");
55
+ return results.sort();
56
+ }
57
+ export async function readAndParsePlan(planDirPath, fileName) {
58
+ try {
59
+ const filePath = path.join(planDirPath, fileName);
60
+ const content = await fs.readFile(filePath, "utf-8");
61
+ return { fileName, parsed: parsePlanFile(content) };
62
+ }
63
+ catch {
64
+ return undefined;
65
+ }
66
+ }
67
+ export function extractRfcIdFromPlanFile(fileName) {
68
+ const match = path.basename(fileName).match(/^plan-(rfc-\d{4})-/i);
69
+ return match ? match[1].toUpperCase() : undefined;
70
+ }
71
+ //# sourceMappingURL=frontmatter-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter-io.js","sourceRoot":"","sources":["../../../os/plan/frontmatter-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
2
+ import type { PlanArchiveResult } from "../types.ts";
3
+ export declare function runPlanArchive(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<PlanArchiveResult>>;
4
+ //# sourceMappingURL=archive.d.ts.map