@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,335 @@
1
+ ---
2
+ name: forge-bootstrap
3
+ description: Configure a freshly created forge project — greenfield or transplant — with a barrier-free, creator-facing onboarding experience.
4
+ invocation: user
5
+ category: meta
6
+ concerns: content-mutation
7
+ dependsOn: ['my-preferences']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ bindings:
10
+ requires: []
11
+ optional: []
12
+ knowledge:
13
+ - forge-about.md
14
+ - operator-profile-template.md
15
+ - project-narrative-template.md
16
+ - milestone-gallery/
17
+ ---
18
+
19
+ # forge-bootstrap
20
+
21
+ Interactive skill for configuring a freshly created forge project. Runs after `forge create` (which produces the project skeleton with `forge.yaml`, synced skills, and forge-CLI binding defaults). The operator is a creator, not a programmer. The system hides all complexity — no CLI commands, no guides, no formats, no internal jargon, no educational detours about how the system works internally reach the operator.
22
+
23
+ ## Guardrails
24
+
25
+ - The skill refuses to run if `forge.yaml` is absent (not a forge project).
26
+ - The skill never overwrites forge-CLI binding defaults; it fills only `null` stack bindings.
27
+ - The skill never overwrites an existing `PREFERENCES.md` without operator confirmation; it merges language settings if the file already exists.
28
+ - The skill is idempotent: re-running it skips non-null bindings and confirms existing settings rather than overwriting them.
29
+ - The skill never modifies the transplant source directory.
30
+ - The skill never includes CLI commands (e.g. `pnpm exec forge doctor`, `forge --help`) in user-facing report text. The system hides all complexity from the operator.
31
+ - The skill never explains ADR, RFC, or governance concepts to the operator during onboarding. The operator discovers these naturally during work.
32
+ - The skill never asks the operator if they want to learn about RFCs, ADRs, or how the system works internally. Onboarding leads directly to creating.
33
+ - The skill never auto-creates RFCs — only ADRs are auto-created silently (for both greenfield and transplant).
34
+ - The skill never skips the auto-doctor step — it runs internally, not as a suggested operator action.
35
+ - The skill never skips the silent auto-ADR step — the ADR is created, not suggested, for both greenfield and transplant.
36
+ - The skill never copies the `.git` directory directly — git history transfer uses `git format-patch` + `git am` only.
37
+ - The skill always transfers untracked and git-ignored files (e.g. `.env`, `.env.local`, secret config files, local certificates, input data, runtime state) from the source project — these are necessary for the project to work immediately after onboarding. The `migrate()` adapter copies all files on disk, not just git-tracked files. Only build artifacts (`node_modules/`, `dist/`, `.next/`, `.cache/`, `.turbo/`), `.git/`, and forge-protected files are excluded.
38
+ - The skill always offers the operator an interactive selection of git-ignored files before copying them — the operator chooses which categories to transfer (config, data, runtime-state, cache, other). Config files (`.env`, secrets, certificates) are selected by default and the operator must explicitly opt out. The operator never loses files from their previous project without being asked.
39
+ - The skill never collects personal data as a separate interview before the first creation moment — personal data emerges naturally from the creative dialogue.
40
+ - `operator-profile.md` is local and private — it is in `.gitignore` and is not committed to the repository. The operator can delete it at any time.
41
+ - Gender is optional — the operator may decline to provide it. If declined, the skill uses gender-neutral addressing and notes the absence in `operator-profile.md`.
42
+ - The skill never informs the operator about migration, version numbers, or upgrade mechanics — the silent version check in step 0 is invisible to the operator.
43
+ - The skill never asks the operator for permission to migrate — if versions differ, migration runs automatically.
44
+
45
+ ## Process
46
+
47
+ ### 0. Silent version check (before language selection)
48
+
49
+ Before any operator interaction, silently check whether the installed `@warpgogol/forge` version matches the version recorded in `forge.yaml`:
50
+
51
+ 1. Read `forge.yaml` and extract `forge.syncedVersion`. If `forge.yaml` is absent, the skill refuses — no change from existing guardrail.
52
+ 2. If `forge.syncedVersion` is absent or `null`, treat it as "never synced".
53
+ 3. Resolve the installed `@warpgogol/forge` version by reading `node_modules/@warpgogol/forge/package.json` (the `version` field). If the file cannot be read (forge not installed yet), skip the version check entirely and proceed to step 1.
54
+ 4. If `forge.syncedVersion` equals the installed version — skip to step 1 (language selection). No migration needed.
55
+ 5. If versions differ (or `syncedVersion` is `null`/absent) — silently run `forge upgrade` via CLI. The agent executes the command internally and does not show any output to the operator. The upgrade syncs `.agents/skills/`, adds missing binding defaults, updates `forge.syncedVersion`, and runs `forge.doctor` — all invisibly.
56
+ 6. If `forge upgrade` fails — log the error to the session log (not shown to the operator), proceed to step 1 with the old configuration. `forge.syncedVersion` is not updated, so the next `forge-bootstrap` invocation will retry.
57
+ 7. Proceed to step 1 (language selection) regardless of success or failure. The operator sees no text about migration, version numbers, or upgrade mechanics.
58
+
59
+ ### 1. Language selection (first step)
60
+
61
+ Read `PREFERENCES.md` at the project root. `forge create` writes a placeholder with `aiLanguage: en` and `documentationLanguage: en`.
62
+
63
+ Ask the operator:
64
+
65
+ > In which language should the AI communicate with you? (e.g. en, ru, uk, de, es) In which language should project documentation be written? (RFCs, ADRs, READMEs)
66
+
67
+ Accept free-form answers like "Russian", "русский", "uk" or "English". Prefer IETF BCP 47 language tags when the operator provides them.
68
+
69
+ Write or merge the values into `PREFERENCES.md`. **All subsequent communication in this skill session uses the operator's chosen `aiLanguage`.**
70
+
71
+ If `PREFERENCES.md` already has non-default `aiLanguage` set (re-run of the skill), confirm the existing values with the operator instead of asking again. The operator may change them if desired.
72
+
73
+ ### 2. Register selection (new)
74
+
75
+ Ask the operator one question:
76
+
77
+ > How would you like to work with the system? In a business register — direct, efficient, by-the-numbers? Or in a creative register — as a creative partner, thinking out loud, with emotional support?
78
+
79
+ Accept the operator's choice and store it:
80
+
81
+ - In `PREFERENCES.md` as `register: business` or `register: creative`.
82
+ - In `operator-profile.md` under `## Register`.
83
+
84
+ The register controls whether the extended behavioral layer is included in `AGENTS.md`. Both registers receive the full core behavioral layer. The operator can change the register at any time via live operator feedback.
85
+
86
+ ### 3. Operator name and gender (new)
87
+
88
+ Ask the operator:
89
+
90
+ > What is your name? (This is how the system will address you.)
91
+
92
+ Then ask:
93
+
94
+ > What is your gender? (This helps with correct grammar in some languages. You can skip this if you prefer.)
95
+
96
+ If the operator declines to provide gender, use gender-neutral addressing and note the absence in `operator-profile.md` under `## Personal`.
97
+
98
+ Store the operator's name and gender (or absence) in `operator-profile.md` under `## Personal`. These are the only personal data collected before the first creation moment.
99
+
100
+ ### 4. Verify forge project
101
+
102
+ Check that `forge.yaml` exists in the project root. If absent, refuse: "no forge.yaml found; run forge create first".
103
+
104
+ If `forge.yaml` exists but is malformed (invalid YAML or missing `bindings` section), report the parse error and ask the operator to fix it before re-running.
105
+
106
+ ### 5. Mode choice
107
+
108
+ Ask the operator:
109
+
110
+ > Are you starting a new project (greenfield) or bringing an existing codebase into forge (transplant)?
111
+
112
+ - **greenfield** → full interview (step 6)
113
+ - **transplant** → source-directory interview (step 6)
114
+
115
+ ### 6. Greenfield or transplant interview
116
+
117
+ #### Greenfield
118
+
119
+ 1. **Stack** — ask what stack the project uses (TypeScript, Python, Rust, etc.). Write into `forge.yaml` `project.stack`.
120
+ 2. **Package manager** — confirm or override `project.packageManager` in `forge.yaml`.
121
+ 3. **Stack bindings** — fill `commands.typecheck`, `commands.test`, `commands.scopedBuild` in `forge.yaml`. Ask the operator for the exact commands (e.g. `tsc --noEmit`, `vitest`, `turbo run build`).
122
+ 4. **Git init** — check if `.git` exists in the project root. If not, run `git init` and make an initial commit with all project files. If `.git` already exists, proceed.
123
+
124
+ #### Transplant (adapter-driven migration)
125
+
126
+ The transplant mode performs real code migration via a migration-adapter registry. Each adapter declares four phases: detect, analyze, migrate, post-setup.
127
+
128
+ 1. **Source directory** — ask for an absolute or relative path to the external codebase. Resolve and validate. The source must be outside the current forge project.
129
+ 2. **Detect adapter** — iterate the migration-adapter registry, call `detect()` on each adapter against the source directory. If multiple adapters match, ask the operator to choose. If none match, report "no migration adapter detected for this project type" and fall back to the greenfield interview for bindings (no code migration).
130
+ 3. **Analyze** — call `analyze()` on the matched adapter. Present: detected stack, proposed bindings (`typecheck`, `test`, `scopedBuild`), placement (`apps/<appName>/`), exclude patterns. The operator confirms or edits.
131
+ 4. **Migrate** — call `migrate()` on the matched adapter. Show any file conflicts before copying. The operator confirms. The adapter copies ALL files from the source directory into `apps/<appName>/`, including untracked and git-ignored files (e.g. `.env`, `.env.local`, secret configuration, local certificates, input data, runtime state). Only `node_modules/`, `dist/`, `.next/`, `.cache/`, `.turbo/`, `.git/`, and other build artifacts are excluded. Forge-protected files (`forge.yaml`, `.agents/`, `docs/rfcs/`, `docs/adrs/`, `PREFERENCES.md`) are never overwritten. Untracked files are essential — the project must work immediately after onboarding with minimal manual fixes.
132
+
133
+ 4.1. **Discover git-ignored files** — before copying, scan the source project for git-ignored and untracked files using `discoverIgnoredFiles()`. This function runs `git status --ignored --porcelain` in the source directory, categorizes each ignored path, and returns sized categories:
134
+ - **Configuration & secrets** (`.env`, `.env.local`, `*.key`, `*.pem`, certificates, `.envrc`) — selected by default, operator must explicitly opt out.
135
+ - **Data & inputs** (`.input/`, `input/`, `data/`, `batches/`, `*.db`, `*.ndjson`) — selected by default if total size < 1 GB, otherwise ask the operator.
136
+ - **Runtime state** (`storage/`, `.state/`, `*.log`) — not selected by default, operator must opt in.
137
+ - **Caches** (`.cache/`, `cache/`, `.playwright`, `browser-profile`, `*.tmp`) — not selected by default, operator must opt in.
138
+ - **Other** — any git-ignored file not matching the above categories — not selected by default, operator must opt in.
139
+
140
+ For each category, present: label, description, file count, total size (formatted), and a few example paths. The operator selects which categories to transfer.
141
+
142
+ If `discoverIgnoredFiles()` returns no categories (no `.git` in source, or no ignored files), skip this step entirely — `migrate()` already copies all files on disk.
143
+
144
+ 4.2. **Copy selected ignored files** — after `migrate()` completes, copy the operator-selected git-ignored file categories from the source to `apps/<appName>/`. For each selected category, copy every path in that category from the source to the corresponding location under `apps/<appName>/`. Use `fs.cpSync(src, dest, { recursive: true })` for directories and `fs.copyFileSync` for individual files. Report what was copied (category, file count, total size) in human language.
145
+
146
+ 4.3. **Verify untracked files** — after all copies complete, verify that essential untracked files (`.env`, `.env.local`, and other dotfiles present in the source) were copied to `apps/<appName>/`. If any are missing, copy them manually from the source. Do not skip this step — missing `.env` files are the most common cause of a non-functional project after onboarding.
147
+
148
+ 5. **Git history transfer** — if the source project has a `.git` directory, ask the operator:
149
+
150
+ > Your source project has Git history. Would you like to transfer the commit history into the new Forge project?
151
+
152
+ If yes: the skill uses `git format-patch` (export all commits from source) + `git am` (apply them in the new project) to preserve history without copying the `.git` directory. If the source has many commits, warn that this may take a moment.
153
+
154
+ If no: the skill runs `git init` in the new project (clean repository, no history from source).
155
+
156
+ If git history transfer fails (complex history, submodules, replace objects): warn and continue with a clean `git init`.
157
+
158
+ If the source project has no `.git` directory: skip the git history question and run `git init` directly.
159
+
160
+ 6. **Post-setup** — call `postSetup()`. The adapter initializes git (clean init or format-patch + git am based on operator's choice), updates `pnpm-workspace.yaml` (adds `apps/<appName>`), `turbo.json` (adds workspace to pipeline), runs the install command derived from `ref(forge.yaml project.packageManager)`. The skill captures bin-link ENOENT warnings from the install output — these are cosmetic and indicate that `dist/` does not exist yet (the project has not been built). If the install itself fails (exit code != 0), report the dependency resolution error in human language (in `aiLanguage`), skip build verification, and continue to the welcoming report. The operator can fix and re-run onboarding.
161
+
162
+ 6.7. **Build verification and error repair** — after post-setup, verify the transplanted project builds successfully:
163
+
164
+ 1. Resolve the build command via `ref(forge.yaml bindings.commands.scopedBuild)`. If the binding is null (the migration adapter could not derive a build command from the source project), skip build verification with a note in the welcoming report and continue to the next step.
165
+ 2. Run the resolved build command and capture stdout/stderr. Set a timeout of 300 seconds (configurable); if the build does not complete in time, report the timeout in human language and continue.
166
+ 3. Parse build output for:
167
+ - Missing modules (TS2307: Cannot find module 'X')
168
+ - Type errors (TS2xxx)
169
+ - Build command failures (ELIFECYCLE, exit code != 0)
170
+ - Bin-link ENOENT warnings (cosmetic — reported as noise, not blocking)
171
+ 4. If errors are detected (excluding bin-link warnings, which are cosmetic):
172
+ - Present errors to the operator in human language (in `aiLanguage`) as a structured list with error code, file path, and message.
173
+ - Ask: "Your project has some build errors. Would you like me to fix them?"
174
+ - If yes: fix errors in-session — install missing dependencies, fix broken import paths, resolve type errors. Do NOT make business logic changes. Re-run the build command to verify. If new errors appear, continue fixing iteratively up to 3 rounds, then report remaining errors.
175
+ - If no: report errors and continue.
176
+ 5. If no errors: confirm the project builds successfully.
177
+
178
+ 6.8. **Fill forge.yaml** — write derived bindings into `forge.yaml` (`typecheck`, `test`, `scopedBuild` from the adapter's analysis). Write `project.stack` from the detected stack.
179
+
180
+ ### 6.9. Commit synced skills (RFC-XXXX, both greenfield and transplant)
181
+
182
+ After git init (greenfield step 6.4) or after post-setup (transplant step 6.6), commit the synced Forge and pack skills to git:
183
+
184
+ ```
185
+ git add .agents/skills/
186
+ git commit -m "chore: sync Forge skills"
187
+ ```
188
+
189
+ This ensures skills are tracked in version control from the start. The commit includes only `.agents/skills/` — no other files.
190
+
191
+ ### 7. Auto-run doctor (new)
192
+
193
+ The skill runs `forge.doctor` internally — not as a CLI command the operator types. The operator never sees a command or a terminal.
194
+
195
+ If doctor reports issues, the skill presents them in human language (in `aiLanguage`) with proposed solutions. The operator can choose to fix or defer.
196
+
197
+ If doctor passes, the skill confirms everything is healthy.
198
+
199
+ If `forge.doctor` is unavailable (forge not installed as devDependency yet), the skill skips auto-doctor and notes it in the report. The operator can ask the agent to run it later.
200
+
201
+ ### 8. Auto-create ADR (new, both greenfield and transplant, silent)
202
+
203
+ The skill invokes `/fo-idea-create-adr` inline with a pre-filled title:
204
+
205
+ - Greenfield: "Start new project with Forge"
206
+ - Transplant: "Migrate <source-project> into Forge"
207
+
208
+ Context: stack, bindings, mode. Justification: the operator's reason for adopting Forge (asked during the interview).
209
+
210
+ The ADR is created, validated, and committed silently — the operator is not told about ADRs, RFCs, or governance concepts. These become visible naturally during work when the operator encounters them in context.
211
+
212
+ If auto-ADR creation fails (validation fails), the skill reports the error silently (in agent logs, not to the operator), leaves the ADR file in place for the agent to fix, and continues to the welcoming report. The operator is never told about the ADR.
213
+
214
+ ### 9. Project analysis and recommendations (new, transplant only)
215
+
216
+ The skill analyzes the transplanted project: codebase structure, git history (if transferred), content, and configuration. It generates 2-3 recommendations from a creator's perspective — improvements that demonstrate the system's value and make the operator want to start working.
217
+
218
+ Recommendations are not technical refactors; they are creator-facing improvements (e.g. content opportunities, user experience enhancements, creative direction suggestions). The skill presents each recommendation with:
219
+
220
+ - **What** — a short, creator-facing description of the improvement.
221
+ - **Why** — why it matters from a creator's perspective (not a programmer's).
222
+ - **Result** — what the result would look and feel like.
223
+
224
+ The operator can choose to start one immediately or defer.
225
+
226
+ If project analysis finds nothing recommendable (transplant of an empty or minimal project), the skill skips recommendations and proceeds to the first creation moment with a direct invitation to start creating.
227
+
228
+ ### 10. First creation moment (new)
229
+
230
+ After the welcoming report, the skill helps the operator create something real immediately — not a placeholder, not a test, but a first piece of their actual project.
231
+
232
+ For a game: "Let's create your first scene right now. What's the first thing the player sees?" For a website: "Let's create your first page right now. What's the first thing visitors should see?" For a blog: "Let's write your first post right now. What do you want to tell the world?"
233
+
234
+ During this creative dialogue, the skill organically collects personal context — project story, deep purpose, creative influences, target audience, writing voice — through the conversation itself, not as a separate interview. The operator's voice is learned from how they describe their idea. The audience is learned from "who is this for?". Creative influences are learned from "what inspires you in similar projects?". This data is stored in `operator-profile.md` under `## Personal`.
235
+
236
+ If the operator cannot describe what they want to create, the skill offers to start from a template or recommendation (transplant) instead. The first creation moment is an invitation, not a requirement.
237
+
238
+ ### 11. Welcoming report (redesigned)
239
+
240
+ Presented in the operator's chosen `aiLanguage`. All labels, headings, and descriptions are translated. No CLI commands, no skill names with `fo-` prefix, no internal jargon, no internal mechanism names (ADR, RFC, Compass). The report has six sections:
241
+
242
+ #### Section 1: Welcome
243
+
244
+ A brief welcome message acknowledging the operator's project and the completion of onboarding.
245
+
246
+ #### Section 2: What Forge gives you
247
+
248
+ A 2-3 sentence value proposition in human language, read from `forge-about.md`. Core message: Forge gives the operator the leverage that previously required a studio of programmers — documentation, decision history, and autonomous implementation — without needing to hire or manage engineers. The system also learns: with every conversation, it understands the operator's style, preferences, and creative vision better.
249
+
250
+ #### Section 3: What was done
251
+
252
+ A human-language summary of what happened during onboarding. For greenfield: project structure created, language preferences saved, stack configured. For transplant: code migrated, structure created, language preferences saved, stack configured, health check results. The ADR is not mentioned — it is an internal mechanism the operator discovers naturally during work.
253
+
254
+ #### Section 4: What you can do now
255
+
256
+ Human-language descriptions of capabilities, not commands. The skill reads the `register` field from `PREFERENCES.md` and presents the register-appropriate list.
257
+
258
+ **Creative register** — capabilities emphasize creative flow, idea capture, and project growth:
259
+
260
+ - "Describe an idea and watch it come to life — the system implements it end-to-end."
261
+ - "Ask the system to remember your creative influences and aesthetic preferences for future sessions."
262
+ - "Explore ideas together without implementing — companion mode for creative exploration."
263
+ - "Get a visual preview before any visual change is made — see it before you commit."
264
+ - "Ask the system to check your project's health and suggest improvements."
265
+
266
+ **Business register** — capabilities emphasize efficiency, quality, and project management:
267
+
268
+ - "Describe a change or feature and the system implements it end-to-end."
269
+ - "Request a project health check — the system verifies consistency and reports issues."
270
+ - "Ask for a review of recent changes — the system checks quality and alignment."
271
+ - "Get recommendations for project improvements based on analysis."
272
+ - "Track project decisions and history automatically — nothing is lost."
273
+
274
+ The operator does not need to know skill names or CLI commands. The LLM agent interprets their natural-language requests and invokes the appropriate skills.
275
+
276
+ #### Section 5: Let's start (transplant: recommendations)
277
+
278
+ For greenfield: an immediate invitation to start creating — "Tell me what you want to build, and I'll make it happen."
279
+
280
+ For transplant: the 2-3 recommendations from step 9 are presented here. The operator can choose to start one immediately or describe their own idea. The skill does not push — it offers and waits.
281
+
282
+ If the first creation moment (step 10) already produced something, the report acknowledges it.
283
+
284
+ #### Section 5.1: Skipped skills report
285
+
286
+ If `runInit()` returned `skippedSkills` (pack skills that conflict with Forge skills), report each skipped skill to the operator in human language (in `aiLanguage`):
287
+
288
+ > The following skills were not transferred because they conflict with Forge skills: [list]. You can rename them after onboarding if you want to keep them.
289
+
290
+ If no skills were skipped, this section is omitted.
291
+
292
+ #### Section 6: What Forge is and is not
293
+
294
+ A short description after every onboarding, read from `forge-about.md`. The skill reads the knowledge file and presents its "What Forge is" and "What Forge is not" sections in the operator's `aiLanguage`.
295
+
296
+ ### 12. Failure modes
297
+
298
+ - Not in a forge project → skill refuses: "no forge.yaml found; run forge create first".
299
+ - Malformed `forge.yaml` → skill reports the parse error and asks the operator to fix it before re-running.
300
+ - Stack binding already non-null → skill skips it (respects operator overrides).
301
+ - Transplant source unreadable → skill reports and asks for a different path.
302
+ - Transplant source is inside the forge project → skill refuses: "source must be outside the forge project".
303
+ - No adapter matches the source directory → skill reports "no migration adapter detected for this project type" and falls back to the greenfield interview for bindings (no code migration).
304
+ - Multiple adapters match → skill asks the operator to choose.
305
+ - File conflict (source and forge both have the same non-protected file) → skill shows the conflict and asks the operator to choose (source-wins or forge-wins).
306
+ - `forge.doctor` finds issues → skill presents them in human language with proposed solutions; operator can choose to fix or defer.
307
+ - `forge.doctor` is unavailable → skill skips auto-doctor and notes it in the report; operator can ask the agent to run it later.
308
+ - Auto-ADR creation fails → skill reports the error silently (in agent logs, not to operator), leaves the ADR file in place for the agent to fix, and continues to the welcoming report. The operator is never told about the ADR.
309
+ - Project analysis finds nothing recommendable (transplant) → skill skips recommendations and proceeds to the welcoming report with a direct invitation to start creating.
310
+ - Git history transfer fails → skill warns and continues with clean `git init`.
311
+ - Source project has no `.git` → skill skips the git history question and runs `git init` directly.
312
+ - Post-setup `pnpm install` fails → skill reports the error; the operator can fix and re-run `pnpm install` manually.
313
+ - Migration interrupted mid-copy (process crash, agent termination) → `migrate()` is idempotent: re-running skips files that already exist at the target with matching content. The operator can also delete `apps/<appName>/` and re-run for a clean migration.
314
+ - Concurrent execution (two agents running `forge-bootstrap` transplant on the same forge project simultaneously) → the skill does not lock `apps/<appName>/`; concurrent writes may conflict. The operator should not run two transplant operations on the same project in parallel.
315
+ - Operator cancels mid-interview → partial changes to `forge.yaml` and `apps/<appName>/` are left; the skill does not roll back.
316
+ - Operator declines everything (git history, ADR, first creation moment) → valid; the skill proceeds to the welcoming report with what was done. No step is mandatory beyond language selection, register selection, and project verification.
317
+ - First creation moment fails (operator cannot describe what they want) → skill offers to start from a template or recommendation (transplant) instead. The first creation moment is an invitation, not a requirement.
318
+
319
+ ### 13. Knowledge files
320
+
321
+ The skill declares the following knowledge files in its `knowledge` frontmatter array:
322
+
323
+ - `forge-about.md` — Forge self-description, capabilities, value proposition. Read when the operator asks about the system at any point — not proactively during onboarding. The knowledge file is the single source of truth for self-description.
324
+ - `operator-profile-template.md` — template for initial `operator-profile.md` with empty sections. Created by forge-bootstrap, grown by fo-session-retro and live operator feedback per RFC-XXXX.
325
+ - `project-narrative-template.md` — template for initial `project-narrative.md`. Used by RFC-XXXX audience empathy.
326
+ - `milestone-gallery/` — directory for project milestone snapshots. Used by RFC-XXXX visual thinking.
327
+
328
+ ### 14. Privacy
329
+
330
+ `operator-profile.md` contains personal data: operator name, gender, project story, deep purpose, creative influences, target audience, writing voice. Gender is special category data under GDPR Article 9. To prevent accidental exposure:
331
+
332
+ - `operator-profile.md` is in `.gitignore` (added by scaffold profiles).
333
+ - The skill informs the operator that `operator-profile.md` is local and private — it is not committed to the repository.
334
+ - Gender is optional: the operator may decline to provide it. If declined, the skill uses gender-neutral addressing.
335
+ - The operator can delete `operator-profile.md` at any time; the system continues to function without it.
@@ -0,0 +1,35 @@
1
+ # What Forge Is
2
+
3
+ Forge is a system that documents decisions, implements ideas, and maintains history. It gives a solo operator the leverage of a development studio — without hiring engineers, project managers, or technical writers.
4
+
5
+ You describe what you want. The system documents the decision, plans the change, implements it, and keeps a record of everything that was done and why.
6
+
7
+ ## What Forge Is
8
+
9
+ - A powerful office that turns your ideas into working results.
10
+ - A factory for embodying ideas — you describe, the system builds.
11
+ - A team that remembers every decision, every change, every reason.
12
+ - A partner that learns your style, preferences, and creative vision over time.
13
+
14
+ ## What Forge Is Not
15
+
16
+ - Not a programming tool that requires you to write code.
17
+ - Not a tool that replaces your creative judgment.
18
+ - Not a system that works without your direction.
19
+ - Not a black box — you always know what was done and why.
20
+
21
+ ## What Forge Can Do
22
+
23
+ - Document decisions — when you make a choice, the system records it so you never forget why.
24
+ - Propose and plan changes — describe what you want, and the system breaks it into concrete steps.
25
+ - Implement ideas — the system turns your descriptions into working results.
26
+ - Review work — the system checks recent changes for quality and consistency.
27
+ - Check project health — the system looks for issues and proposes solutions.
28
+ - Maintain history — every decision, every change, every conversation is preserved.
29
+ - Learn your style — with every interaction, the system understands your preferences, creative vision, and communication style better.
30
+
31
+ ## Value Proposition
32
+
33
+ Forge gives you the leverage that previously required a studio of 100 people: documentation, decision history, and autonomous implementation. You describe what you want; the system documents, plans, implements, and maintains the history. The system learns with every conversation — understanding your creative vision, communication style, and preferences better over time.
34
+
35
+ You are the creator. Forge is the team that helps you build.
@@ -0,0 +1,53 @@
1
+ # Operator Profile
2
+
3
+ This file is private and local to your project. It is not committed to the repository (it is in `.gitignore`). The system uses it to understand you better — your preferences, your style, your creative vision. You can delete it at any time; the system continues to function without it.
4
+
5
+ ## Personal
6
+
7
+ - **Name:** (your name — how the system should address you)
8
+ - **Gender:** (optional — used for correct grammar in gendered languages; leave empty if you prefer not to say)
9
+ - **Project story:** (what is this project? what is it about?)
10
+ - **Deep purpose:** (why does this project exist? what is the deeper motivation behind it?)
11
+ - **Creative influences:** (what inspires you? what projects, works, or creators do you admire?)
12
+ - **Audience:** (who is this for? who are you creating for?)
13
+ - **Writing voice:** (how do you want to sound? what tone feels right for your project?)
14
+
15
+ ## Register
16
+
17
+ - **Communication register:** (business | creative — how you prefer the system to work with you)
18
+
19
+ ## Communication style
20
+
21
+ - (learned over time — how the system communicates with you based on your feedback)
22
+
23
+ ## Significance calibration
24
+
25
+ - (learned over time — what the system considers significant based on your reactions)
26
+
27
+ ## Common requests
28
+
29
+ - (learned over time — patterns in what you ask for)
30
+
31
+ ## Aesthetic preferences
32
+
33
+ - (learned over time — visual and design preferences)
34
+
35
+ ## Unimplemented ideas
36
+
37
+ - (ideas you mentioned but haven't asked to implement yet)
38
+
39
+ ## Emotional rhythm
40
+
41
+ - (learned over time — your energy and mood patterns during work)
42
+
43
+ ## Feedback history
44
+
45
+ - (record of significant feedback you've given the system)
46
+
47
+ ## Operator directives
48
+
49
+ - (standing instructions you've given the system)
50
+
51
+ ## External feedback
52
+
53
+ - (feedback from others about your project that you've shared with the system)
@@ -0,0 +1,31 @@
1
+ # Project Narrative
2
+
3
+ This file captures the story and direction of your project. It grows over time as the project evolves.
4
+
5
+ ## One-sentence summary
6
+
7
+ (What is this project in one sentence?)
8
+
9
+ ## Origin story
10
+
11
+ (How did this project start? What was the moment you decided to create it?)
12
+
13
+ ## Audience
14
+
15
+ (Who is this for? Who will experience, read, play, or use this project?)
16
+
17
+ ## Emotional goal
18
+
19
+ (What should people feel when they encounter your project?)
20
+
21
+ ## Creative direction
22
+
23
+ (What is the aesthetic, tone, and style? What makes this project distinct?)
24
+
25
+ ## Milestones
26
+
27
+ (Key moments in the project's development — added as the project grows.)
28
+
29
+ ## Open questions
30
+
31
+ (Things you're still figuring out about your own project.)
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: port-to-forge
3
+ description: Port reusable patterns from project work into forge — identify pattern, grill operator about portability boundaries, create RFC/ADR if needed, scaffold, implement, validate, and update registry.
4
+ invocation: user
5
+ category: meta
6
+ concerns: code-mutation
7
+ dependsOn: ['grilling']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ bindings:
10
+ requires: []
11
+ optional: [paths.invariantsFile]
12
+ ---
13
+
14
+ # port-to-forge
15
+
16
+ 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 `my-preferences` skill semantics.
17
+
18
+ Interactive skill for porting reusable patterns from project work into forge. Process: identify pattern → grill operator about portability boundaries → create RFC/ADR if needed → scaffold via `forge.port.scaffold` → implement → validate via `forge.port.validate` → update registry.
19
+
20
+ ## Process
21
+
22
+ ### 1. Identify the pattern
23
+
24
+ Ask the operator what pattern (skill, command, or workflow) they want to port into forge.
25
+
26
+ ### 2. Grill portability boundaries
27
+
28
+ Use the `grilling` skill to stress-test:
29
+
30
+ - Is the pattern truly project-agnostic? Does it reference Forge-specific concepts (cosmic names, sections, biomes)?
31
+ - Does it depend on project-specific packages (`@warpgogol/site-kernel`, `@warpgogol/ui`)?
32
+ - What are the minimal dependencies needed (ontology, fingerprint, share)?
33
+ - Should it be a skill, a command, or both?
34
+
35
+ ### 3. Create RFC/ADR if needed
36
+
37
+ If the port involves architectural decisions (new package boundaries, command ownership changes), create an RFC or ADR first using `fo-idea-create-rfc` or `fo-idea-create-adr`.
38
+
39
+ ### 4. Scaffold
40
+
41
+ Run `forge.port.scaffold --name <name> --type <skill|command> --category <category>` to generate the skeleton.
42
+
43
+ ### 5. Implement
44
+
45
+ Port the implementation, ensuring:
46
+
47
+ - No imports from `@warpgogol/site-kernel` or other project-specific packages.
48
+ - Use `@warpgogol/ontology` for schemas, `@warpgogol/fingerprint` for hashing, `@warpgogol/share` for fs helpers.
49
+ - Add Compass scaffolding (MODULE_CONTRACT, CHANGE_SUMMARY) to new TypeScript files.
50
+
51
+ ### 6. Validate
52
+
53
+ Run `forge.port.validate --name <name>` to verify the ported artifact has no project-specific dependencies.
54
+
55
+ ### 7. Update registry
56
+
57
+ If porting a skill, add it to `packages/forge/src/registry.ts`.
58
+
59
+ ### 8. Commit
60
+
61
+ ```txt
62
+ forge: port <name> from project to forge
63
+
64
+ Port <name> from <source> to @warpgogol/forge — <one-line description>.
65
+ ```
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: skill-create
3
+ description: Guides an agent through creating a new forge-compliant skill — determines category, invocation, concerns, dependencies, generates frontmatter, calls forge.port.scaffold, and validates.
4
+ invocation: user
5
+ category: meta
6
+ concerns: document-only
7
+ dependsOn: ['grilling', 'writing-great-skills']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ ---
10
+
11
+ # skill-create
12
+
13
+ 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.
14
+
15
+ Interactive skill that guides an agent through creating a new forge-compliant skill. This is the agent-facing workflow; `forge.port.scaffold --type skill` is the machine-facing OS command that does the actual file generation.
16
+
17
+ ## Process
18
+
19
+ ### 1. Determine skill metadata
20
+
21
+ Ask the operator (one question at a time):
22
+
23
+ 1. **Name** — kebab-case, matches the directory name.
24
+ 2. **Description** — one line, ≤ 200 characters.
25
+ 3. **Category** — `wg`, `shared`, or `meta`.
26
+ 4. **Invocation** — `user` (operator triggers) or `model` (agent triggers).
27
+ 5. **Concerns** — `read-only` (no file modifications), `document-only` (modifies `.md` files only), `content-mutation` (modifies content `.md`/`.yaml` but not executable code), or `code-mutation` (modifies `.ts`/`.astro` code).
28
+ 6. **Dependencies** — list of existing skill names this skill depends on.
29
+
30
+ ### 1.5. Cumulative knowledge analysis (conditional)
31
+
32
+ If the skill has `concerns: content-mutation | code-mutation` AND `invocation: user`, determine whether to adopt the cumulative knowledge pattern. Skills that run repeatedly and accumulate knowledge across sessions benefit most.
33
+
34
+ Before creating knowledge files, the agent analyzes the skill's knowledge domain:
35
+
36
+ 1. **What does the skill accumulate?** Classify into one of:
37
+ - **Content violations** — schema mismatches, block type errors, content lint failures (e.g. a site-scanning skill).
38
+ - **Runtime errors** — kernel command failures, git conflicts, build pipeline crashes (e.g. a mission-completion skill).
39
+ - **Workflow decisions** — operator choices on ambiguous steps, routing preferences (e.g. `grilling`).
40
+ - **Operator preferences** — language, style, tooling choices that persist across sessions.
41
+
42
+ 2. **Which L1 structure fits?** The `fix-patterns.md` layer adapts to the knowledge domain:
43
+ - **Proactive fix patterns** — applied _before_ an error occurs (e.g. "remove extraneous prop before validating"). Fits content violations.
44
+ - **Reactive error catalog** — applied _after_ an error occurs (e.g. "when `git am` fails with whitespace error, use `--whitespace=fix`"). Fits runtime errors. Entries carry `confirmations: N` — at N≥3 the skill auto-resolves without asking the operator.
45
+ - **Decision log** — records operator choices for future reuse. Fits workflow decisions.
46
+
47
+ 3. **Which layers are needed?** Not every skill needs all three. `grilling` uses L0+L2 only. A site-scanning skill with all three layers is a good example. A skill with purely reactive error resolution may use L1+L2 only (no Q&A log).
48
+
49
+ Present the analysis to the operator. If they confirm, create the knowledge files with header comments matching the chosen structure and add `knowledge:` to the frontmatter. See `writing-great-skills` § Cumulative knowledge pattern for the three-layer reference pattern and mutation contract.
50
+
51
+ ### 2. Scaffold
52
+
53
+ Run `forge.port.scaffold --name <name> --type skill --category <category>` to generate the SKILL.md skeleton with standardized frontmatter.
54
+
55
+ ### 3. Write the body
56
+
57
+ Fill the SKILL.md body with the skill's behavioral instructions. Follow the conventions in `writing-great-skills`.
58
+
59
+ ### 4. Validate
60
+
61
+ Run `forge.skill.validate` to verify the new skill passes all invariants (SKILL-01 through SKILL-13).
62
+
63
+ ### 5. Register
64
+
65
+ Add the new skill to `packages/forge/src/registry.ts` (ForgeSkillEntry[]).
66
+
67
+ ### 6. Commit
68
+
69
+ ```txt
70
+ skill: add <name> to forge
71
+
72
+ Create new <category> skill <name> — <one-line description>.
73
+ ```
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: grilling
3
+ description: Grill the user relentlessly about a plan or design. Use when the user wants to stress-test a plan before building, or uses any 'grill' trigger phrases.
4
+ invocation: user
5
+ category: shared
6
+ concerns: read-only
7
+ dependsOn: ['my-preferences']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ knowledge:
10
+ - qa-log.md
11
+ - learned-principles.md
12
+ ---
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
+ Read `learned-principles.md` (L2) at the start of each session to improve recommended answers. Principles with `confirmations >= 3` may be applied autonomously — but re-evaluate if context changes.
17
+
18
+ Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
19
+
20
+ Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering.
21
+
22
+ If a _fact_ can be found by exploring the codebase, look it up rather than asking me. The _decisions_, though, are mine — put each one to me and wait for my answer.
23
+
24
+ Do not ask a question whose answer is already obvious from the codebase, prior answers, or surrounding context. If you can infer the answer with reasonable confidence, state your inference as the recommended answer and let the operator correct you if wrong. Reserve questions for genuine uncertainty.
25
+
26
+ Do not enact the plan until I confirm we have reached a shared understanding.
27
+
28
+ At the end of the session, perform meta-analysis: identify recurring decision patterns from `qa-log.md` (L0), formulate concrete principles, present to operator for approval, and append approved principles to `learned-principles.md` (L2). Append Q&A pairs to `qa-log.md` (L0) during the session.
@@ -0,0 +1,12 @@
1
+ # Learned Principles (L2)
2
+
3
+ Concrete principles distilled from past grilling sessions. Each principle has a condition and a recommended answer. The skill checks these before asking the operator.
4
+
5
+ <!-- Entries are appended by the skill after meta-analysis and operator approval. -->
6
+ <!-- Format:
7
+ ## <principle title>
8
+ - **Condition:** <when this applies>
9
+ - **Recommended answer:** <what to recommend>
10
+ - **confirmations:** <N>
11
+ - **Added:** <date>
12
+ -->