@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,77 @@
1
+ schema: forge/stack-profile@1
2
+ id: forge-shell
3
+ displayName: Forge Shell (minimal)
4
+ detect:
5
+ anyOf:
6
+ - forge-shell.marker
7
+ workspace:
8
+ dirs:
9
+ - docs
10
+ - scripts
11
+ files:
12
+ - path: .gitignore
13
+ content: |
14
+ node_modules
15
+ dist
16
+ .turbo
17
+ .cache
18
+ operator-profile.md
19
+ - path: package.json
20
+ content: |
21
+ {
22
+ "name": "__PROJECT_NAME__",
23
+ "version": "0.1.0",
24
+ "private": true,
25
+ "type": "module",
26
+ "engines": {
27
+ "node": ">=22"
28
+ },
29
+ "scripts": {
30
+ "clean": "node scripts/clean.mjs",
31
+ "format": "prettier --write .",
32
+ "format:check": "prettier --check .",
33
+ "test": "vitest run --passWithNoTests",
34
+ "upgrade-packages": "pnpm up"
35
+ }
36
+ }
37
+ - path: scripts/clean.mjs
38
+ content: |
39
+ import { readdir, rm } from "node:fs/promises";
40
+ import { join } from "node:path";
41
+ import { fileURLToPath } from "node:url";
42
+
43
+ const TARGETS = new Set(["node_modules", ".turbo", "dist", ".astro", ".cache", ".wrangler"]);
44
+
45
+ const repoRoot = join(fileURLToPath(import.meta.url), "..", "..");
46
+
47
+ async function walk(dir, toDelete) {
48
+ const entries = await readdir(dir, { withFileTypes: true });
49
+ for (const entry of entries) {
50
+ if (!entry.isDirectory()) continue;
51
+ const name = entry.name;
52
+ const fullPath = join(dir, name);
53
+ if (TARGETS.has(name)) {
54
+ toDelete.push(fullPath);
55
+ continue;
56
+ }
57
+ await walk(fullPath, toDelete);
58
+ }
59
+ }
60
+
61
+ const toDelete = [];
62
+ await walk(repoRoot, toDelete);
63
+
64
+ if (toDelete.length === 0) {
65
+ console.log("Nothing to clean.");
66
+ process.exit(0);
67
+ }
68
+
69
+ await Promise.all(toDelete.map((p) => rm(p, { recursive: true, force: true })));
70
+
71
+ for (const p of toDelete) {
72
+ console.log("deleted", p.replace(repoRoot + "/", ""));
73
+ }
74
+
75
+ console.log(`Cleaned ${toDelete.length} directories.`);
76
+ install:
77
+ - pnpm add -D @warpgogol/forge prettier vitest
@@ -0,0 +1,144 @@
1
+ schema: forge/stack-profile@1
2
+ id: phaser-turborepo
3
+ displayName: Phaser + Turborepo
4
+ detect:
5
+ anyOf:
6
+ - phaser.config.*
7
+ - package.json
8
+ workspace:
9
+ dirs:
10
+ - games
11
+ - packages
12
+ - services
13
+ - scripts
14
+ files:
15
+ - path: pnpm-workspace.yaml
16
+ content: |
17
+ packages:
18
+ - "games/*"
19
+ - "packages/*"
20
+ - "services/*"
21
+ - path: turbo.json
22
+ content: |
23
+ {
24
+ "$schema": "https://turbo.build/schema.json",
25
+ "tasks": {
26
+ "build": {
27
+ "dependsOn": ["^build"],
28
+ "outputs": ["dist/**"]
29
+ },
30
+ "build:check": {
31
+ "dependsOn": ["^build:check"]
32
+ },
33
+ "test": {
34
+ "dependsOn": ["^build:check"]
35
+ }
36
+ }
37
+ }
38
+ - path: tsconfig.base.json
39
+ content: |
40
+ {
41
+ "compilerOptions": {
42
+ "target": "ESNext",
43
+ "module": "ESNext",
44
+ "moduleResolution": "bundler",
45
+ "strict": true,
46
+ "esModuleInterop": true,
47
+ "skipLibCheck": true,
48
+ "forceConsistentCasingInFileNames": true
49
+ }
50
+ }
51
+ - path: .gitignore
52
+ content: |
53
+ node_modules
54
+ dist
55
+ .turbo
56
+ .cache
57
+ operator-profile.md
58
+ - path: package.json
59
+ content: |
60
+ {
61
+ "name": "__PROJECT_NAME__",
62
+ "version": "0.1.0",
63
+ "private": true,
64
+ "type": "module",
65
+ "engines": {
66
+ "node": ">=22"
67
+ },
68
+ "scripts": {
69
+ "clean": "node scripts/clean.mjs",
70
+ "format": "prettier --write .",
71
+ "format:check": "prettier --check .",
72
+ "build": "turbo run build",
73
+ "build:check": "turbo run build:check",
74
+ "test": "turbo run test",
75
+ "upgrade-packages": "pnpm -r up"
76
+ }
77
+ }
78
+ - path: scripts/clean.mjs
79
+ content: |
80
+ import { readdir, rm } from "node:fs/promises";
81
+ import { join } from "node:path";
82
+ import { fileURLToPath } from "node:url";
83
+
84
+ const TARGETS = new Set(["node_modules", ".turbo", "dist", ".astro", ".cache", ".wrangler"]);
85
+
86
+ const repoRoot = join(fileURLToPath(import.meta.url), "..", "..");
87
+
88
+ async function walk(dir, toDelete) {
89
+ const entries = await readdir(dir, { withFileTypes: true });
90
+ for (const entry of entries) {
91
+ if (!entry.isDirectory()) continue;
92
+ const name = entry.name;
93
+ const fullPath = join(dir, name);
94
+ if (TARGETS.has(name)) {
95
+ toDelete.push(fullPath);
96
+ continue;
97
+ }
98
+ await walk(fullPath, toDelete);
99
+ }
100
+ }
101
+
102
+ const toDelete = [];
103
+ await walk(repoRoot, toDelete);
104
+
105
+ if (toDelete.length === 0) {
106
+ console.log("Nothing to clean.");
107
+ process.exit(0);
108
+ }
109
+
110
+ await Promise.all(toDelete.map((p) => rm(p, { recursive: true, force: true })));
111
+
112
+ for (const p of toDelete) {
113
+ console.log("deleted", p.replace(repoRoot + "/", ""));
114
+ }
115
+
116
+ console.log(`Cleaned ${toDelete.length} directories.`);
117
+ install:
118
+ - pnpm add -D typescript turbo @warpgogol/forge prettier
119
+ firstWorkspace:
120
+ path: games/my-game
121
+ files:
122
+ - path: package.json
123
+ content: |
124
+ {
125
+ "name": "my-game",
126
+ "version": "0.1.0",
127
+ "private": true,
128
+ "type": "module",
129
+ "scripts": {
130
+ "build:check": "pnpm exec tsc -p tsconfig.json --noEmit",
131
+ "test": "vitest run --passWithNoTests"
132
+ }
133
+ }
134
+ - path: tsconfig.json
135
+ content: |
136
+ {
137
+ "extends": "../tsconfig.base.json",
138
+ "compilerOptions": {
139
+ "outDir": "./dist"
140
+ }
141
+ }
142
+ install:
143
+ - pnpm add phaser
144
+ - pnpm add -D vitest
@@ -0,0 +1,119 @@
1
+ # WG Pipeline Shared Conventions
2
+
3
+ Reference file for all `fo-*` skills. Each skill links to the sections it needs via context pointers like "Read `_shared/fo-pipeline-conventions.md` §Recoverable errors".
4
+
5
+ ## PREFERENCES
6
+
7
+ Read `PREFERENCES.md` at the repository root before starting. If the file is missing or `aiLanguage` is unset, ask the operator once and create the file using the `my-preferences` skill semantics.
8
+
9
+ ## Language policy
10
+
11
+ - Every natural-language message shown to the operator — greetings, questions, explanations, summaries, status updates — must use `aiLanguage`.
12
+ - Generated documentation, commit messages, and persisted artifacts must use `documentationLanguage`.
13
+ - Internal reasoning, tool-call planning, and intermediate agent monologue may stay in the agent's working language (usually English).
14
+ - Do not translate existing files automatically; preferences affect only new output and the current session.
15
+ - **Report and summary templates in skill definitions are structural examples only.** All labels, headings, table headers, column names, and descriptions in operator-facing output must be translated to `aiLanguage`. Only identifiers (RFC-XXXX, ADR-XXXX, file paths, slash commands, CLI flags) stay in their original form. Do not copy English template labels verbatim into the operator-facing output.
16
+
17
+ ## Recoverable errors
18
+
19
+ No pauses for recoverable tool errors. If a tool call fails with a recoverable error — `write_to_file` content too long, JSON truncation, line count/character limit exceeded, or similar — recover autonomously: split content into smaller writes, use `edit`/`multi_edit`, decompose oversized files, and retry immediately. The operator's default answer to "Shall I proceed?" is always "yes".
20
+
21
+ ## Commit discipline
22
+
23
+ Stage only the files this skill produces or modifies. Another agent may be working in a different session; `git add -A` or `git add .` is forbidden.
24
+
25
+ ## Pipeline reference
26
+
27
+ - **RFC pipeline**: create → audit → enhance → plan → implement (includes review → fix)
28
+ - **ADR pipeline**: create → implement (includes review → fix)
29
+
30
+ ## Forward-only discipline
31
+
32
+ The ecosystem is forward-only. No backward compatibility layers, no shims, no dual-paths. Legacy code paths are deleted, not maintained behind a flag. Deprecation means removal in the same change, not an indefinite grace period.
33
+
34
+ ## Compass terminology
35
+
36
+ Use Compass (not GRACE) in all new code, documentation, and log messages.
37
+
38
+ ## Compass scaffolding
39
+
40
+ Non-trivial new source files in `apps/` or `packages/` must carry `MODULE_CONTRACT` and `CHANGE_SUMMARY` scaffolding. Check the project's invariants file for the canonical Compass markup rule.
41
+
42
+ ## Build verification discipline
43
+
44
+ MUST NOT run root `root build` or `turbo run build` — these build every workspace and are prohibitively expensive for iterative workflows. Run scoped checks only: `astro check` for touched apps, `tsc --noEmit` (via `build:check`) for touched packages. See root AGENTS.md §Build verification discipline.
45
+
46
+ ## Command execution timeout discipline
47
+
48
+ Every `run_command` call MUST use a 6-minute (360 000 ms) execution budget. This prevents the agent from blocking on hung or excessively long commands.
49
+
50
+ ### Rules
51
+
52
+ 1. **Always non-blocking**: Call `run_command` with `Blocking: false` and `WaitMsBeforeAsync: 360000` (6 min). This lets the agent regain control if the command hasn't finished.
53
+ 2. **Check status**: After `WaitMsBeforeAsync` elapses, call `command_status` with `WaitDurationSeconds: 0` to see if the command completed.
54
+ 3. **If completed**: Read the output and proceed normally.
55
+ 4. **If still running after 6 min**: Abandon the command — do not wait further. Try an alternative approach (different command, different scope, or skip the step). If no alternative exists, retry the same command once with the same 6-min budget.
56
+ 5. **Max retries**: 2 attempts per command. After 2 failed attempts, report to the operator and ask how to proceed.
57
+ 6. **No infinite waits**: NEVER call `command_status` with `WaitDurationSeconds` > 60. NEVER use `Blocking: true` for commands that may hang (builds, checks, `site-kernel run`, `astro check`, `tsc`, `pnpm install`).
58
+ 7. **Exceptions**: `Blocking: true` is allowed only for trivially fast commands (e.g., `node --version`, `git log -n 1`, `git status --short`) that are guaranteed to complete in seconds.
59
+
60
+ ### Rationale
61
+
62
+ - The `run_command` tool has no built-in timeout parameter. `WaitMsBeforeAsync` is the only mechanism to regain control after a fixed duration.
63
+ - Abandoning a still-running process is acceptable — the process may complete in the background, but the agent is unblocked and can retry or try an alternative.
64
+ - This covers all command classes: `pnpm exec site-kernel run ...`, `pnpm --filter <pkg> run build:check`, `astro check`, `git`, `pnpm install`, etc.
65
+ - Site-kernel commands already have internal `timeoutMs`, but the agent-side 6-min budget is a safety net for ALL commands, not just site-kernel.
66
+
67
+ ## Binding resolution and degradation
68
+
69
+ ### How to resolve bindings
70
+
71
+ Skills reference bindings by key, never by value. To resolve a binding:
72
+
73
+ 1. Read `forge.yaml` at the project root.
74
+ 2. Navigate to the `bindings` section.
75
+ 3. Resolve the key (e.g. `commands.validateRfc`) to its value.
76
+ 4. If the value contains placeholders (`{id}`, `{workspace}`, `{file}`), substitute them with the actual values for the current operation.
77
+ 5. If the binding is `null` or the `bindings` section is absent, the capability is absent.
78
+
79
+ ### Binding keys
80
+
81
+ | Key | Type | Description |
82
+ | ----------------------- | ---------------------- | -------------------------------------- |
83
+ | `commands.validateRfc` | string \| null | Command to validate an RFC |
84
+ | `commands.validateAdr` | string \| null | Command to validate an ADR |
85
+ | `commands.typecheck` | string \| null | Scoped typecheck command |
86
+ | `commands.test` | string \| null | Scoped test command |
87
+ | `commands.scopedBuild` | string \| null | Scoped build command |
88
+ | `commands.specValidate` | string \| null | Spec validation command |
89
+ | `paths.invariantsFile` | string \| null | Path to the project's invariants file |
90
+ | `paths.compassDocs` | string[] | Machine-readable semantic docs to sync |
91
+ | `paths.reviewsDir` | string \| null | Directory for code reviews |
92
+ | `paths.handoffsDir` | string \| null | Directory for handoff documents |
93
+ | `terminology` | Record<string, string> | Project-specific terminology mapping |
94
+
95
+ ### Degradation contract
96
+
97
+ - **Required binding unresolvable** (missing or `null`): the skill refuses to start with: `Skill <name> requires binding <key>; add it to forge.yaml or mark the capability absent deliberately.`
98
+ - **Optional binding absent** (`null` / empty): the dependent step is skipped and the skill's final report MUST contain a `Degraded:` line naming each skipped capability.
99
+ - **Silent skips are a contract violation.** Every skipped capability must appear in the final report.
100
+
101
+ ### Worked example
102
+
103
+ A skill needs to run `rfc.validate` for `RFC-XXXX`:
104
+
105
+ 1. Read `forge.yaml` → `bindings.commands.validateRfc` = `"pnpm exec site-kernel run rfc.validate {id} --json"`
106
+ 2. Substitute `{id}` → `"pnpm exec site-kernel run rfc.validate RFC-XXXX --json"`
107
+ 3. Run the resolved command.
108
+
109
+ If `bindings.commands.validateRfc` were `null`, the skill would skip the step and report: `Degraded: commands.validateRfc — not configured in forge.yaml`.
110
+
111
+ ## Session-end sequence
112
+
113
+ After completing implementation work, the operator may run a three-step session-end sequence. These are **operator-invoked**, never automatic:
114
+
115
+ 1. **`fo-doc-audit`** — are existing docs in sync with code changes? (mechanical check)
116
+ 2. **`fo-session-retro`** — did the session produce insights worth routing to a durable home? (reflective triage)
117
+ 3. **`fo-handoff`** — what does the next agent need? (continuity document)
118
+
119
+ Most sessions need only `fo-doc-audit`. `fo-session-retro` is valuable after debugging sessions, exploratory work, or when non-obvious behaviors were discovered. `fo-handoff` is needed when work is incomplete and another agent will continue.
@@ -0,0 +1,95 @@
1
+ # WG Session Summary & Next Steps — Mandatory Closing Block
2
+
3
+ Reference file for all `fo-*` skills. Every `fo-*` skill MUST end its session by presenting the closing block defined here. This is not optional — it is the mandatory final output before the skill stops.
4
+
5
+ ## When to emit
6
+
7
+ The closing block is emitted **once**, at the very end of the skill's execution — after all work is done, after all commits, after any batch summaries. It is the last thing the operator sees.
8
+
9
+ For orchestrator skills (`fo-idea-i-just-want-to-see-the-result`, `fo-idea-i-just-want-to-see-the-plan`), the closing block replaces any ad-hoc "next step" hints with the structured format below.
10
+
11
+ For skills that produce batch summaries (`fo-idea-implement`, `fo-idea-plan`, `fo-idea-enhance`, `fo-idea-audit`), the closing block comes **after** the batch summary.
12
+
13
+ ## Language
14
+
15
+ The closing block MUST use `aiLanguage` (from `PREFERENCES.md`), same as all other operator-facing output. See `_shared/fo-pipeline-conventions.md` §Language policy.
16
+
17
+ **All labels and headings in the closing block must be translated to `aiLanguage`.** The structural format below uses placeholder labels — replace them with the equivalent in the operator's language. Only slash commands and document identifiers (RFC-XXXX, ADR-XXXX, file paths) stay in their original form.
18
+
19
+ ## Closing block format
20
+
21
+ ```
22
+ ---
23
+
24
+ **<Summary label in aiLanguage>**
25
+
26
+ <1–3 sentences in aiLanguage: what was done in this session — concretely, with document ids, commit count, review verdict. No filler.>
27
+
28
+ **<Next steps label in aiLanguage>**
29
+
30
+ - `/fo-idea-audit RFC-XXXX` — <one line in aiLanguage: why>
31
+ - `/fo-idea-enhance RFC-XXXX` — <one line in aiLanguage: why>
32
+ - `/fo-idea-implement RFC-XXXX` — <one line in aiLanguage: why>
33
+ ```
34
+
35
+ ### Rules
36
+
37
+ 1. **Summary** — 1–3 concise sentences in `aiLanguage`. State what was done: document ids, commit count, review verdict, key outcomes. No filler, no repetition of the batch summary — the summary is the _essence_.
38
+ 2. **Next steps** — a bulleted list of 1–3 items. Each item is a copy-pasteable slash-command invocation followed by a short `aiLanguage` explanation of why the operator might want to run it.
39
+ 3. **Only relevant commands** — list only skills that are genuinely applicable as the next step given the current state. Do not list commands that were already completed or that do not apply. If the skill is terminal (e.g. `fo-idea-status` is read-only), list 0–1 relevant follow-up commands.
40
+ 4. **Copy-pasteable** — the slash command must be the exact invocation string the operator can paste into chat. Include the document id if known.
41
+ 5. **No more than 3 items** — the operator should not be overwhelmed. Pick the most relevant next steps.
42
+ 6. **Translate labels** — the section headings ("Summary", "Next steps") must be in `aiLanguage`, not English. Only slash commands and identifiers stay untranslated.
43
+
44
+ ### Examples
45
+
46
+ **After `fo-idea-create-rfc` completes (aiLanguage = ru):**
47
+
48
+ ```
49
+ ---
50
+
51
+ **Сводка**
52
+
53
+ Создан драфт RFC-0380 «Standardize kernel execution reports» (status: draft, 1 коммит). `rfc.validate` проходит без нарушений. Документ ожидает архитектурного ревью.
54
+
55
+ **Дальнейшие шаги**
56
+
57
+ - `/fo-idea-audit RFC-0380` — семантический аудит RFC перед энхансментом
58
+ - `/fo-idea-i-just-want-to-see-the-result RFC-0380` — полный пайплайн до реализации
59
+ ```
60
+
61
+ **After `fo-idea-implement` completes (aiLanguage = en):**
62
+
63
+ ```
64
+ ---
65
+
66
+ **Summary**
67
+
68
+ RFC-0377 implemented: 4 plan steps, 3 commits, scoped build — pass. Review: approved (0 findings). Status: implemented (2026-07-13).
69
+
70
+ **Next steps**
71
+
72
+ - `/fo-idea-status` — overview of current RFC/ADR statuses
73
+ ```
74
+
75
+ **After `fo-review` completes (aiLanguage = ru):**
76
+
77
+ ```
78
+ ---
79
+
80
+ **Сводка**
81
+
82
+ Ревью кода завершено: вердикт needs-revision, 3 замечания (Axis B: DNA-23 нарушение, Axis D: legacy путь, Axis E: нет Compass-разметки). Отчёт сохранён в docs/reviews/code/packages-os-site-kernel-checks/.
83
+
84
+ **Дальнейшие шаги**
85
+
86
+ - `/fo-fix` — применить исправления по замечаниям ревью
87
+ ```
88
+
89
+ ## Mandatory for new skills
90
+
91
+ Any new `fo-*` skill created via `skill-create` or any other method MUST include a reference to this file in its Constraints section:
92
+
93
+ ```
94
+ - **Session summary.** End every session with the closing block defined in `_shared/fo-session-summary.md`.
95
+ ```
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: fo-add-tests
3
+ description: Write unit and property-based tests for session-produced or specified code. Uses vitest + fast-check per RFC-XXXX.
4
+ invocation: user
5
+ category: fo
6
+ concerns: code-mutation
7
+ dependsOn: ['my-preferences']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ triggers: ["write tests for this code", "add unit tests", "add property-based tests", "write test coverage for this function"]
10
+ ---
11
+
12
+ # fo-add-tests
13
+
14
+ Before starting, read `PREFERENCES.md` at the repository root. If the file is missing or `aiLanguage` is unset, ask the operator once and create the file using the `my-preferences` skill semantics.
15
+
16
+ Write tests for code that was produced in the current session, or for a file/module the operator points at. The skill decides per-function whether to write example-based tests, property based tests (PBT), or both — following the RFC-XXXX decision tree and the TDD discipline absorbed from the former `tdd` skill.
17
+
18
+ ## Preconditions
19
+
20
+ - The code to test must exist in the workspace — either produced earlier in this session, or at a path the operator provides.
21
+ - The target package must have `vitest` configured. If it does not, set it up first (see "Package setup" below).
22
+
23
+ ## Process
24
+
25
+ ### 1. Identify the code to test
26
+
27
+ Determine the target in this order:
28
+
29
+ 1. **Operator argument** — a file path, package name, or function name.
30
+ 2. **Session context** — files created or modified earlier in this session (check git diff or the session's edit history).
31
+ 3. **Ask** — if neither yields a target, ask the operator what to test.
32
+
33
+ ### 2. Read the code and classify each function
34
+
35
+ For each exported function in the target file(s), classify it using the RFC-XXXX decision tree (see `pbt-guide.md` for the full tree and property patterns catalog):
36
+
37
+ ```
38
+ Is the function pure (no I/O, no side effects, no mutation of inputs)?
39
+ ├── No → Example-based tests or integration tests. Do NOT use PBT.
40
+ └── Yes → Does the function have at least one verifiable algebraic property?
41
+ ├── No → Example-based tests. Do NOT use PBT.
42
+ └── Yes → Is the input domain large enough that examples are insufficient?
43
+ ├── No (small enum, <10 values) → Example-based tests with exhaustive coverage.
44
+ └── Yes → Write PBT in a *.pbt.test.ts file using fast-check.
45
+ ```
46
+
47
+ Record the classification for each function. Present a brief summary to the operator before writing tests. Report in `aiLanguage`.
48
+
49
+ ### 3. Determine the test seam
50
+
51
+ Tests verify behavior through **public interfaces**, not implementation details. The seam is:
52
+
53
+ - **For exported functions** — call the function directly, assert on its return value or observable side effects.
54
+ - **For modules** — call through the module's public API, not its internals.
55
+ - **For integration** — call through the command handler or CLI entry point.
56
+
57
+ See `tests-reference.md` for good and bad test examples — the anti-patterns (tautological, implementation-coupled, horizontal slicing) are load-bearing.
58
+
59
+ ### 4. Write the tests
60
+
61
+ #### Example-based tests (`*.test.ts`)
62
+
63
+ - Import from `vitest`: `import { test, expect } from "vitest"`.
64
+ - Do NOT import from `node:test` or `node:assert/strict` (RFC-XXXX, forward-only).
65
+ - One test per behavior, named as a specification: `"user can checkout with valid cart"`.
66
+ - Expected values are independent known literals — never recompute the expected value the same way the code computes it.
67
+ - Place in `src/tests/**/*.test.ts` (or `src/**/tests/**/*.test.ts` for nested source).
68
+
69
+ #### Property-based tests (`*.pbt.test.ts`)
70
+
71
+ - Import from `vitest` and `fast-check`: `import { test, expect } from "vitest"; import fc from "fast-check"`.
72
+ - Use `fc.assert(fc.property(arb, fn))` or `fc.assert(fc.asyncProperty(arb, fn))`.
73
+ - PBT tests are **additive** — never replace existing example-based tests with PBT.
74
+ - Write a comment above each property stating which algebraic property it verifies and why it holds.
75
+ - Place in `src/tests/**/*.pbt.test.ts` alongside existing tests.
76
+ - See `pbt-guide.md` for the full property patterns catalog and worked examples.
77
+
78
+ #### Mocking
79
+
80
+ Mock at **system boundaries** only — external APIs, databases, time, randomness. Do NOT mock your own modules or internal collaborators. See `mocking.md` for the full rules.
81
+
82
+ ### 5. Run the tests
83
+
84
+ For the target package:
85
+
86
+ ```sh
87
+ pnpm --filter <package-name> test
88
+ ```
89
+
90
+ If the tests fail (red):
91
+
92
+ 1. Read the failure output.
93
+ 2. Determine whether the test is wrong (bad assertion, wrong seam) or the code is wrong (bug).
94
+ 3. Fix the test or report the bug to the operator — do NOT silence a failing test by weakening it.
95
+
96
+ If the tests pass (green), proceed.
97
+
98
+ ### 6. Commit
99
+
100
+ Stage only the test files and any test infrastructure changes (e.g. `vitest.config.ts`, `package.json` devDependencies).
101
+
102
+ ```text
103
+ test(scope): add unit and PBT coverage for <module>
104
+ ```
105
+
106
+ Do not stage unrelated changes. See `_shared/fo-pipeline-conventions.md` §Commit discipline.
107
+
108
+ ### 7. Check whether AGENTS / README updates are needed
109
+
110
+ This step is **always performed** — it is not optional and must not be skipped.
111
+
112
+ Analyze whether the new tests introduced patterns, conventions, or infrastructure that other agents should know about:
113
+
114
+ - Did you add `fast-check` to a package that didn't have it? Update the package's README or AGENTS.md.
115
+ - Did you create a new `vitest.config.ts`? Document it.
116
+ - Did you establish a new test seam or pattern worth documenting?
117
+
118
+ If no updates are needed, state this explicitly.
119
+
120
+ ## Package setup (if needed)
121
+
122
+ If the target package does not yet have `vitest` configured:
123
+
124
+ 1. Add `vitest` and `fast-check` to `devDependencies` in `package.json`.
125
+ 2. Set `"test": "vitest run"` and `"test:watch": "vitest"` in scripts.
126
+ 3. Create `vitest.config.ts` at the package root:
127
+
128
+ ```ts
129
+ import { defineConfig } from "vitest/config";
130
+
131
+ export default defineConfig({
132
+ test: {
133
+ environment: "node",
134
+ include: ["src/tests/**/*.test.ts", "src/**/tests/**/*.test.ts"],
135
+ },
136
+ });
137
+ ```
138
+
139
+ 4. Run `pnpm install` to update the lockfile.
140
+ 5. Do NOT add `node:test` shims or legacy assertion wrappers — the migration is forward-only.
141
+
142
+ ## TDD mode
143
+
144
+ When invoked as `/fo-add-tests --tdd` or when the operator says "test-first" / "red-green":
145
+
146
+ 1. Write the test **before** the implementation.
147
+ 2. Watch it fail (red).
148
+ 3. Write the minimum implementation to pass.
149
+ 4. Watch it pass (green).
150
+ 5. Refactor.
151
+
152
+ This is the red → green loop. Each cycle produces one test worth keeping — a test that reads like a specification and survives refactors because it doesn't care about internal structure.
153
+
154
+ ## Constraints
155
+
156
+ - **Per-function classification.** The PBT-vs-example decision is made per-function, not per-file. A single file may have both `*.test.ts` and `*.pbt.test.ts` tests.
157
+ - **PBT is additive.** Never replace existing example-based tests with PBT. PBT complements, not replaces.
158
+ - **No `node:test`.** All tests use `vitest` imports. No `node:test` or `node:assert/strict` (RFC-XXXX, forward-only).
159
+ - **No `as any` to silence type errors.** Fix the type or use proper test utilities.
160
+ - **Do not weaken or delete existing tests** without explicit operator direction.
161
+ - **Test through public interfaces.** Tests that couple to implementation details break on refactors and give false confidence.
162
+ - **Deterministic PBT.** If the property involves randomness, the random source must be the fast-check generator, not `Math.random()` or `Date.now()`.
163
+ - **Comment every property.** State which algebraic property it verifies and why it holds.
164
+ - **Scoped verification only.** Run `pnpm --filter <package> test` — do NOT run root `build` or `turbo run build`. See `_shared/fo-pipeline-conventions.md` §Build verification discipline.
165
+ - **Commit only your own files.** Stage only test files and test infrastructure. See `_shared/fo-pipeline-conventions.md` §Commit discipline.
166
+ - **Session summary.** End every session with the closing block defined in `_shared/fo-session-summary.md`.
@@ -0,0 +1,60 @@
1
+ # When to Mock
2
+
3
+ Mock at **system boundaries** only:
4
+
5
+ - External APIs (payment, email, etc.)
6
+ - Databases (sometimes — prefer test DB)
7
+ - Time / randomness
8
+ - File system (sometimes)
9
+
10
+ Don't mock:
11
+
12
+ - Your own classes / modules
13
+ - Internal collaborators
14
+ - Anything you control
15
+
16
+ ## Designing for Mockability
17
+
18
+ At system boundaries, design interfaces that are easy to mock:
19
+
20
+ ### 1. Use dependency injection
21
+
22
+ Pass external dependencies in rather than creating them internally:
23
+
24
+ ```typescript
25
+ // Easy to mock
26
+ function processPayment(order, paymentClient) {
27
+ return paymentClient.charge(order.total);
28
+ }
29
+
30
+ // Hard to mock
31
+ function processPayment(order) {
32
+ const client = new StripeClient(process.env.STRIPE_KEY);
33
+ return client.charge(order.total);
34
+ }
35
+ ```
36
+
37
+ ### 2. Prefer SDK-style interfaces over generic fetchers
38
+
39
+ Create specific functions for each external operation instead of one generic function with conditional logic:
40
+
41
+ ```typescript
42
+ // GOOD: Each function is independently mockable
43
+ const api = {
44
+ getUser: (id) => fetch(`/users/${id}`),
45
+ getOrders: (userId) => fetch(`/users/${userId}/orders`),
46
+ createOrder: (data) => fetch('/orders', { method: 'POST', body: data }),
47
+ };
48
+
49
+ // BAD: Mocking requires conditional logic inside the mock
50
+ const api = {
51
+ fetch: (endpoint, options) => fetch(endpoint, options),
52
+ };
53
+ ```
54
+
55
+ The SDK approach means:
56
+
57
+ - Each mock returns one specific shape
58
+ - No conditional logic in test setup
59
+ - Easier to see which endpoints a test exercises
60
+ - Type safety per endpoint