@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,80 @@
1
+ ---
2
+ name: fo-harvest
3
+ description: Systematic self-growth loop — scan the whole project for forge-worthy patterns, grill the operator on portability, and port accepted candidates via port-to-forge / forge.port.scaffold.
4
+ category: fo
5
+ invocation: user
6
+ concerns: code-mutation
7
+ dependsOn:
8
+ - my-preferences
9
+ - grilling
10
+ languagePolicy: ref(PREFERENCES.md)
11
+ triggers: ["harvest portable patterns from code", "extract reusable code pattern to forge", "port this pattern to forge"]
12
+ ---
13
+
14
+ # fo-harvest
15
+
16
+ The systematic self-growth loop for forge. Discover patterns proven in real project work that deserve to be canonicalized into `packages/forge`, grill the operator on portability per candidate, and port accepted candidates through the existing `port-to-forge` skill and `forge.port.scaffold` command.
17
+
18
+ ## When to invoke
19
+
20
+ - After completing a significant feature, refactor, or bug fix session — the operator wants to check if any patterns emerged that belong in forge.
21
+ - When the operator suspects project-local conventions have matured enough to become portable.
22
+ - As a periodic sweep (operator-invoked, never automatic).
23
+
24
+ ## Process
25
+
26
+ ### 1. Read preferences
27
+
28
+ Read `PREFERENCES.md` at the repository root. Use `aiLanguage` for all communication.
29
+
30
+ ### 2. Full project scan
31
+
32
+ Scan the project for harvest candidates:
33
+
34
+ - `.agents/skills/` — skills that were created or significantly modified during project work
35
+ - Command modules — commands that could be generalized beyond the current project
36
+ - `AGENTS.md` deltas — new rules or conventions that other projects could benefit from
37
+ - Recurring code patterns — abstractions, utilities, or patterns that appear in 2+ places and could be extracted
38
+
39
+ Build a candidate table:
40
+
41
+ | Candidate | Location | Portability | Reason |
42
+ | --------- | -------- | ------------------- | ----------------------- |
43
+ | ... | ... | High / Medium / Low | Why it belongs in forge |
44
+
45
+ ### 3. Grill per candidate
46
+
47
+ For each candidate, grill the operator:
48
+
49
+ - Is this pattern project-specific or genuinely portable?
50
+ - Does forge already have an equivalent? If so, should the existing one be enhanced instead?
51
+ - What is the minimal extraction that preserves the pattern without project-specific coupling?
52
+ - Does porting this require a new RFC, or can it go through `forge.port.scaffold` directly?
53
+
54
+ Only proceed with candidates the operator explicitly accepts. Do not port anything without explicit acceptance.
55
+
56
+ ### 4. Port accepted candidates
57
+
58
+ For each accepted candidate:
59
+
60
+ 1. Run `forge.port.scaffold` to create the skeleton in `packages/forge/`.
61
+ 2. Implement the ported logic — inline trivial code, invert dependencies for non-trivial cases.
62
+ 3. Run `forge.port.validate` to verify compliance with forge contracts.
63
+ 4. Update `FORGE_SKILLS` registry if a new skill was created.
64
+ 5. Run `forge.skill.validate` to verify skill frontmatter.
65
+
66
+ ### 5. Registry + docs update
67
+
68
+ After all accepted candidates are ported:
69
+
70
+ - Update `packages/forge/AGENTS.md` if new commands or skills were added.
71
+ - Update root `AGENTS.md` if the skill surface changed.
72
+ - Commit with reference to this harvest run.
73
+
74
+ ## Constraints
75
+
76
+ - **Operator-invoked only.** Never auto-run harvest on a schedule.
77
+ - **One port per candidate.** Do not batch multiple patterns into one port — each candidate gets its own `forge.port.scaffold` call and its own commit.
78
+ - **No hand-copying.** All porting goes through `port-to-forge` / `forge.port.scaffold`. Do not manually copy files into `packages/forge/`.
79
+ - **Grilling is mandatory.** Every candidate must pass the grilling step before porting. No silent ports.
80
+ - **Forward-only.** If a pattern replaces an existing forge skill or command, the old one is removed in the same change — no parallel implementations.
@@ -0,0 +1,242 @@
1
+ ---
2
+ name: fo-idea
3
+ description: Analyze a user's idea, decompose if too large, and route to fo-idea-create-rfc or fo-idea-create-adr. Use when the user describes a change and is unsure if it needs an RFC or ADR.
4
+ invocation: user
5
+ category: fo
6
+ concerns: document-only
7
+ dependsOn: ['my-preferences']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ bindings:
10
+ requires: []
11
+ optional: [paths.invariantsFile]
12
+ triggers: ["I have an idea for a change", "analyze this idea and route it", "decompose this feature idea"]
13
+ ---
14
+
15
+ # Idea → RFC or ADR
16
+
17
+ 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.
18
+
19
+ > **This is a document-only skill.** It produces RFC and/or ADR files in `docs/rfcs/` or `docs/adrs/` — nothing else. It must never modify, create, or delete source code files in `apps/`, `packages/`, `services/`, or any other directory. It must not run build commands, tests, or validation suites. If the operator's description sounds like a concrete implementation task (e.g. "replace fonts", "add a button", "fix the sitemap"), that is expected — this skill's job is to **create the document that precedes implementation**, not to implement the change itself. Implementation is handled by `fo-idea-implement` after the document is accepted.
20
+
21
+ Analyze the operator's text to determine whether the task requires a single RFC, a single ADR, or a **series** of documents. When a series is needed, decompose the task into atomic decisions, classify each, and create all documents in dependency order.
22
+
23
+ ## Process
24
+
25
+ ### 1. Analyze the request
26
+
27
+ Read the operator's description and identify:
28
+
29
+ - **What is being decided** — the core decision or change.
30
+ - **What is affected** — packages, apps, commands, DNA invariants, AGENTS.md rules, existing RFCs.
31
+ - **The blast radius** — is this local to one package/app, or does it cross workspace boundaries?
32
+ - **The atomic decisions** — can the task be cleanly split into independent decisions that each stand alone as RFCs or ADRs?
33
+
34
+ **Implementation-language guard.** The operator may describe the task in concrete implementation terms ("replace the fonts", "add italic support", "switch to self-hosted fonts", "add a new check command"). This is normal — the operator is describing the _what_, not asking for the _how right now_. This skill converts that description into a governance document. Do not interpret concrete language as a request to start coding. If the description is ambiguous between "create a document" and "implement now", ask one clarifying question using `ask_user_question`:
35
+
36
+ > "This sounds like a concrete change. Should I create an RFC/ADR draft for it, or do you want me to implement it directly?"
37
+ >
38
+ > Recommended option: "Create RFC/ADR draft" — because this skill is `fo-idea`, not `fo-idea-implement`.
39
+
40
+ Default to document creation. Only route to implementation if the operator explicitly says "implement" or "don't create a document, just do it".
41
+
42
+ ### 1a. Accepted-decision fast path
43
+
44
+ When the operator signals that a decision is **already made** and provides justification, the skill must take a fast path. Recognition signals include:
45
+
46
+ - Explicit markers: "принятое решение", "accepted decision", "we decided", "decision:", "решение:", "we use", "используем", "standard:", "правило:"
47
+ - The text includes a full rationale or justification (not just a question or vague idea)
48
+ - The text reads as a pronouncement, not a proposal
49
+
50
+ When the accepted-decision fast path is triggered:
51
+
52
+ 1. **Classify using the decision table in step 3a** — but do not ask clarifying questions unless the table is genuinely ambiguous after reading the full justification.
53
+ 2. **If ADR**: invoke `/fo-idea-create-adr` inline, but **skip grilling** — the operator has already decided and justified. Tell `fo-idea-create-adr` to skip its step 4 (grilling) by passing the operator's justification as the ADR's `Justification` section directly. Proceed to file creation, fill all sections from the operator's text, validate, and report.
54
+ 3. **If RFC**: still invoke `/fo-idea-create-rfc` with full grilling — RFCs govern cross-workspace contracts and need stress-testing even when the operator has decided.
55
+ 4. **Do not search for RFC numbers, run `rfc.list`, or scan the `docs/rfcs/` directory** when the classification is ADR. This is a waste of time and a misclassification signal.
56
+
57
+ The fast path does **not** skip validation (`adr.validate` / `rfc.validate`) — only the grilling step is skipped for ADRs.
58
+
59
+ ### 2. Assess scope: single document or series?
60
+
61
+ A task needs a **series** when **any** of the following is true:
62
+
63
+ - The task introduces multiple new Site OS commands across different domains (e.g. a new check command + a new codegen command + a new build pipeline command).
64
+ - The task spans multiple independent package boundaries with separate concerns (e.g. changes to multiple shared packages that are each independently useful).
65
+ - The task naturally decomposes into phases with clear dependency edges (e.g. a contract definition RFC must be accepted before a command implementation RFC that depends on it).
66
+ - A single RFC's Design section would be unmanageably long — covering unrelated files, unrelated type signatures, and unrelated failure modes.
67
+ - The task amends multiple existing RFCs in unrelated areas.
68
+ - Some parts are local (ADR) and some are cross-workspace (RFC), and the local parts do not depend on the RFC parts.
69
+
70
+ A task is a **single document** when:
71
+
72
+ - All decisions are tightly coupled and cannot stand alone.
73
+ - The task is local to one package/app with one coherent decision.
74
+ - Splitting would produce documents that reference each other so heavily that they cannot be read independently.
75
+
76
+ If the task is a single document, proceed to step 3 (classify and create).
77
+
78
+ If the task needs a series, proceed to step 4 (decompose).
79
+
80
+ ### 3. Single document: classify and create
81
+
82
+ #### 3a. Classify: RFC or ADR
83
+
84
+ Use the following decision table:
85
+
86
+ | Criterion | RFC | ADR | Examples |
87
+ | --- | --- | --- | --- |
88
+ | Adds, removes, or changes a Site OS command | yes | no | New `fonts.selfhost.validate` command; changing `content.surface.validate` behavior |
89
+ | Modifies a DNA invariant or AGENTS.md rule | yes | no | Changing the cosmic naming contract; adding a new storage policy to AGENTS.md |
90
+ | Establishes a cross-workspace package boundary or contract | yes | no | New shared package exported schema; new package interface; inter-package type contract |
91
+ | Changes a currently accepted or implemented RFC | yes | no | Amending RFC-XXXX content surface; superseding RFC-XXXX |
92
+ | Introduces a new policy or governance process | yes | no | RFC lifecycle process; feature visibility policy; verification evidence pipeline |
93
+ | A convention, standard, or tooling choice applied across apps | no | yes | "Use Fontsource for all fonts"; "Self-host Playfair Display"; CSS methodology; lint rule choices |
94
+ | Local to one package, one app, or one narrow convention | no | yes | Changing a biome's typography tokens; adding a font family to the self-host registry |
95
+ | Does not touch commands, DNA, AGENTS.md, or cross-workspace contracts | no | yes | Choosing a library; picking a CSS token naming scheme; selecting an image format strategy |
96
+
97
+ **If any RFC criterion is met → RFC.** Only if all ADR criteria are met and no RFC criterion applies → ADR.
98
+
99
+ #### Common misclassification traps
100
+
101
+ These patterns **look like RFCs but are ADRs**:
102
+
103
+ - **"Applied to all apps" ≠ "cross-workspace contract"** — a convention like "use Fontsource for fonts" or "self-host all web fonts" applies everywhere but does not create a package boundary, inter-package type contract, or new command. It is an ADR with `scope: workspace`.
104
+ - **"Changes a shared package" ≠ "establishes a package boundary"** — extending `packages/os/site-kernel-checks/src/fonts.ts` with a new font family modifies shared code, but the decision is about which fonts to use, not about the package's interface or contract. ADR.
105
+ - **"Might be mentioned in AGENTS.md" ≠ "modifies a DNA invariant"** — a decision might be documented in AGENTS.md for visibility, but unless it changes a DNA-NN invariant or a governance rule, it is an ADR.
106
+ - **"Has cross-app impact" ≠ "cross-workspace contract"** — adding a font to the shared registry affects all apps' builds, but the decision itself is a tooling/standard choice, not a contract between packages.
107
+
108
+ These patterns **look like ADRs but are RFCs**:
109
+
110
+ - **"Just adding one field to a schema"** — if the schema is a cross-workspace contract (e.g. a shared package exported types), changing it is an RFC even if the diff is small.
111
+ - **"It's only a convention"** — if the convention is enforced by a new Site OS command or validator, it needs an RFC to define the command.
112
+ - **"It's local to one package"** — if that package's change breaks an accepted RFC or changes a DNA invariant, it needs an RFC.
113
+
114
+ If the classification is ambiguous (e.g. the operator's description is too vague), ask a clarifying question using `ask_user_question` with the recommended classification first.
115
+
116
+ #### 3b. Invoke the creation skill inline
117
+
118
+ Once classified, invoke the matching skill **inline** — execute it fully without stopping or returning control to the user:
119
+
120
+ - **RFC** → invoke `/fo-idea-create-rfc`. It will collect metadata, grill the concept, create the file, fill it, validate, and report.
121
+ - **ADR** → invoke `/fo-idea-create-adr`. It will collect metadata, grill the concept, create the file, fill it, validate, and report. **On the accepted-decision fast path (step 1a)**, tell `fo-idea-create-adr` to skip grilling and use the operator's justification text directly.
122
+
123
+ Do not duplicate the creation skill's work — just route to it and let it run.
124
+
125
+ #### 3c. Report
126
+
127
+ After the creation skill completes, present its final report to the user in `aiLanguage`. Add a one-line prefix indicating which path was taken — translate the label to `aiLanguage`:
128
+
129
+ ```
130
+ <Classified as in aiLanguage>: RFC (cross-workspace command addition) / ADR (local package convention)
131
+ ```
132
+
133
+ Followed by the creation skill's own report.
134
+
135
+ ### 4. Series: decompose, classify, and create each document
136
+
137
+ #### 4a. Decompose into atomic decisions
138
+
139
+ Break the task into the smallest set of independent decisions such that:
140
+
141
+ - Each decision can be read, reviewed, accepted, and implemented on its own.
142
+ - Each decision has a clear, single-sentence Decision statement.
143
+ - Dependencies between decisions are explicit (document A must be accepted before document B can be implemented).
144
+ - No decision is so small that it would be better as a section of another document.
145
+
146
+ For each atomic decision, record:
147
+
148
+ - **Title** — short imperative sentence.
149
+ - **Type** — RFC or ADR (use the decision table from step 3a).
150
+ - **Scope** — `workspace`, `package`, or `app`.
151
+ - **Depends on** — other documents in this series that must be accepted first.
152
+ - **Summary** — one or two lines describing what this document decides.
153
+
154
+ #### 4a-spec. Spec escalation check
155
+
156
+ After decomposition, check whether this is a **specification**, not a document series:
157
+
158
+ - If decomposition yields **more than 7 atomic decisions** with at least one dependency edge, OR
159
+ - The operator's description mentions waves/stages/data migration across many documents
160
+
161
+ Then propose escalation using `ask_user_question`:
162
+
163
+ > "This is a specification, not a document series. Create a spec package via fo-spec-ingest authoring mode?"
164
+
165
+ - **Recommended option**: "Create spec package" — because a pre-designed roadmap with 65 nodes is a spec, not a series of independent RFCs.
166
+ - **Alternative**: "Continue as series" — the operator may decline and stay with the series path.
167
+
168
+ If the operator accepts escalation, invoke `/fo-spec-ingest` in authoring mode, passing the decomposition results. Do not continue with the series creation steps below.
169
+
170
+ #### 4b. Present the decomposition plan
171
+
172
+ Present the full plan to the operator before creating any files, in `aiLanguage`. **Translate all labels and headings to `aiLanguage`** — the template below is structural only.
173
+
174
+ ```
175
+ ## <Decomposition Plan in aiLanguage>
176
+
177
+ This task requires <N> documents:
178
+
179
+ 1. **<Title 1>** — <RFC|ADR> (scope: <scope>)
180
+ Depends on: none
181
+ <one-line summary>
182
+
183
+ 2. **<Title 2>** — <RFC|ADR> (scope: <scope>)
184
+ Depends on: <Title 1>
185
+ <one-line summary>
186
+
187
+ ...
188
+
189
+ ### Creation order: 1 → 2 → ... → N
190
+ ```
191
+
192
+ Ask the operator to confirm or adjust the decomposition using `ask_user_question`. Do not proceed to creation until the plan is confirmed.
193
+
194
+ #### 4c. Create each document in dependency order
195
+
196
+ Process documents **sequentially in dependency order** — foundational documents first. For each document:
197
+
198
+ 1. Invoke the appropriate creation skill **inline** (`/fo-idea-create-rfc` or `/fo-idea-create-adr`).
199
+ 2. When the creation skill collects metadata, include the cross-references:
200
+ - **`related`** — list all other documents in the series by their assigned id (once created) or by title (if not yet created).
201
+ - **`amends`** — if a document in the series amends an existing accepted RFC, set the `amends` field.
202
+ 3. The creation skill will grill, create, fill, validate, and report — let it run fully.
203
+ 4. After each document is created, record its assigned id for use in subsequent documents' `related` fields.
204
+ 5. Do not pause between documents in the series — continue to the next immediately.
205
+
206
+ If a creation skill's grilling reveals that a document in the series is unnecessary (the decision is already covered by an existing RFC/ADR), skip it and note this in the final report. If grilling reveals that a missing document is needed, add it to the plan and create it in the correct dependency position.
207
+
208
+ #### 4d. Series report
209
+
210
+ After all documents are created, present a single batch report in `aiLanguage`. **Translate all labels, headings, and column names to `aiLanguage`** — the template below is structural only.
211
+
212
+ ```
213
+ ## <Series Creation Summary in aiLanguage>
214
+
215
+ ### Task: <original operator request — one line>
216
+ ### Documents created: <N>
217
+
218
+ | # | ID | Type | Title | Depends on | Status |
219
+ | --- | --- | --- | --- | --- | --- |
220
+ | 1 | RFC-XXXX | RFC | <title> | — | draft |
221
+ | 2 | ADR-XXXX | ADR | <title> | RFC-XXXX | proposed |
222
+ | 3 | RFC-XXXX | RFC | <title> | RFC-XXXX | draft |
223
+ ...
224
+
225
+ ### Next steps
226
+ - Human architecture review for all RFC drafts (status may not change before acceptance).
227
+ - ADRs are ready for the named decider to accept.
228
+ - Implement in dependency order: 1 → 2 → 3 → ...
229
+ ```
230
+
231
+ ## Constraints
232
+
233
+ - **Document-only. This skill must never modify, create, or delete source code files.** It must not touch files in `apps/`, `packages/`, `services/`, `tools/`, `scripts/`, or any other source directory. It must not run `pnpm`-based builds, `pnpm test`, `astro check`, or any build/validation command other than `rfc.validate` / `adr.validate` (which run inside the delegated creation skills). The only files this skill may produce are RFC files in `docs/rfcs/` and ADR files in `docs/adrs/` — and even those are created by the delegated `fo-idea-create-rfc` / `fo-idea-create-adr` skills, not by this skill directly. If you feel the urge to "quickly fix something in the code while I'm here" — stop. That is not this skill's job.
234
+ - **Classify before invoking.** Do not invoke both skills for one document — pick one based on the decision table.
235
+ - **When genuinely ambiguous, ask — do not default to RFC.** Conventions, tooling choices, library selections, and standards applied across apps are ADRs even when they touch shared packages. Defaulting to RFC for every cross-app decision clogs the RFC pipeline and wastes architecture review time on local technical choices. If the table and examples do not resolve the classification, ask the operator with `ask_user_question` presenting both options. Reserve RFC for decisions that genuinely change commands, DNA, AGENTS.md rules, cross-workspace contracts, or governance process.
236
+ - **Do not skip the creation skill's grilling step — except on the accepted-decision fast path (step 1a).** When the operator has signaled an already-made decision with justification and the classification is ADR, grilling is skipped because the operator has already decided. In all other cases, grilling happens inside the invoked skill — this skill only routes.
237
+ - **Do not create files directly.** This skill never writes RFC or ADR files — it delegates to `fo-idea-create-rfc` or `fo-idea-create-adr`.
238
+ - **Decomposition must produce independent documents.** Each document in a series must be readable, reviewable, and implementable on its own. If two decisions cannot be separated, keep them in one document.
239
+ - **Cross-reference all documents in a series.** Every document in a series must list all other documents in the series in its `related` field. Update `related` fields as ids are assigned.
240
+ - **Respect dependency order.** A document that depends on another must not be created before its prerequisite — the prerequisite's id is needed for the `related` field.
241
+ - **Commit only your own files.** Stage only the files this skill produces or modifies — RFC/ADR files and nothing else. Do not stage unrelated changes. Another agent may be working in a different session; `git add -A` or `git add .` is forbidden.
242
+ - **Present the decomposition plan before creating files.** The operator must confirm the decomposition before any document is created. Adjust if requested.
@@ -0,0 +1,248 @@
1
+ ---
2
+ name: fo-idea-audit
3
+ description: Audit RFCs for ecosystem fit, DNA alignment, forward-only compliance, agent policy, and pragmatism. Accepts a single id, list, or range. Use after creating or revising an RFC.
4
+ invocation: user
5
+ category: fo
6
+ concerns: read-only
7
+ dependsOn: ['my-preferences']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ bindings:
10
+ requires: [commands.validateRfc]
11
+ optional: [paths.invariantsFile, paths.compassDocs]
12
+ triggers: ["audit this RFC", "check RFC for ecosystem fit", "review RFC against DNA and forward-only rules"]
13
+ ---
14
+
15
+ # RFC Audit
16
+
17
+ 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.
18
+
19
+ A read-only semantic review of an RFC against the ecosystem's actual structure, DNA invariants, and governance rules. The audit finds what `rfc.validate` cannot: drift between the RFC's claims and the ecosystem's reality, over-engineering, missing operational details, and agent-facing policy gaps.
20
+
21
+ The audit does **not** modify the RFC or any other file. It produces a structured report, persists it to `docs/audits/`, and stops.
22
+
23
+ ## Process
24
+
25
+ ### 1. Identify the RFC(s)
26
+
27
+ The user may provide:
28
+
29
+ - **A single RFC**: `RFC-XXXX`, a filename, or a path.
30
+ - **A comma-separated list**: `RFC-XXXX, RFC-XXXX, RFC-XXXX` — process each in order.
31
+ - **A range**: `RFC-XXXX..RFC-XXXX` or `от RFC-XXXX до RFC-XXXX` — discover all RFC files in `docs/rfcs/` whose numeric id falls within the inclusive range, sort ascending, and process each in order.
32
+ - **Nothing**: if an RFC file is open in the IDE, use it. Otherwise, ask.
33
+
34
+ ### 1.5. Prerequisite checks (per RFC)
35
+
36
+ Before running the audit on each RFC, perform these checks **in order**. If any check fails, record the RFC as **skipped** in the batch summary with the reason, and immediately proceed to the next RFC in the batch. Do not stop the entire batch — skip and report.
37
+
38
+ 1. **Prefix check** — if the id starts with `ADR-`, this is not an RFC. Skip with message: `ADR-XXXX is an ADR, not an RFC. ADRs do not have an audit step. The ADR pipeline is: create → implement. Run /fo-idea-implement ADR-XXXX to implement.`
39
+
40
+ 2. **RFC file exists** — look for `docs/rfcs/rfc-XXXX-*.md`. If no file is found, skip with message: `RFC-XXXX not found in docs/rfcs/. Run /fo-idea-create-rfc first.`
41
+
42
+ 3. **Terminal status check** — read the RFC's `status` frontmatter. If the status is `implemented`, `rejected`, or `superseded`, skip with message: `RFC-XXXX is <status> (terminal). Terminal RFCs cannot be audited. To change this decision, create a new RFC with supersedes: [RFC-XXXX] via /fo-idea-create-rfc.`
43
+
44
+ If all checks pass, proceed to step 2 for this RFC.
45
+
46
+ ### 1.6. Batch processing
47
+
48
+ When multiple RFCs are identified, **loop through each one** and run the full audit (steps 2–8) for each RFC sequentially **without pauses between RFCs**. Do not stop, present a summary, or ask the user between RFCs — once the audit report for one RFC is persisted and committed (or it is skipped), immediately proceed to the next RFC. **Do not emit transition messages such as "Moving to RFC-XXXX next" or per-RFC status reports during the loop.** Internal status is fine, but nothing is shown to the user until the very end. Only after all RFCs are processed, print a single final batch summary.
49
+
50
+ Read the full RFC file at `docs/rfcs/rfc-XXXX-*.md` for the first RFC to process.
51
+
52
+ ### 2. Run mechanical validation
53
+
54
+ Run the mechanical floor first — it catches format, referential, and structural violations that don't need semantic judgment:
55
+
56
+ ```sh
57
+ ref(forge.yaml bindings.commands.validateRfc) --json
58
+ ```
59
+
60
+ Record any violations targeting this RFC. The semantic audit starts from a clean mechanical baseline; if `rfc.validate` already fails on this RFC, report it and still continue with the semantic axes — the human needs the full picture.
61
+
62
+ ### 3. Load ecosystem context
63
+
64
+ Read the context the RFC claims to fit into:
65
+
66
+ - `ref(forge.yaml bindings.paths.invariantsFile)` — all DNA invariants referenced in `satisfies[]` or `related[]`.
67
+ - `AGENTS.md` (root) — RFC governance protocol, storage policy, cosmic naming contract, Compass duties, CKL, agent surface.
68
+ - The closest nested `AGENTS.md` for the RFC's scope (`docs/authoring/site-composition.md`, `packages/AGENTS.md`, `services/AGENTS.md`).
69
+ - Each RFC listed in `amends[]`, `supersedes[]`, `related[]` — read enough to understand what this RFC builds on or changes.
70
+ - `docs/requirements.xml`, `docs/technology.xml`, `docs/development-plan.xml` — if the RFC is workspace-scoped or architectural.
71
+ - The package manifests (`package.json`) of any `packagesImpacted` entries — verify the package exists and check its current exports.
72
+
73
+ Do not read every RFC in the repo — only those the RFC explicitly references, plus the DNA and AGENTS files.
74
+
75
+ ### 4. Run the seven audit axes
76
+
77
+ For each axis below, check every item. An item either **passes**, **fails** (specific finding with evidence), or is **not applicable** (state why). Skip N/A items silently — do not pad the report.
78
+
79
+ #### Axis A — Structural completeness
80
+
81
+ Beyond V-13 (required sections exist) and V-14 (≥3 acceptance items), check that each section contains real content, not template placeholders or empty HTML comments:
82
+
83
+ - **Decision** is a single decision in present tense ("The kernel gains…"), not a wishlist or "we should".
84
+ - **CLI surface** shows exact command invocations with flags and scope (resolved from `ref(forge.yaml bindings.commands.*)`).
85
+ - **TypeScript contracts** are minimal type signatures, not full implementations.
86
+ - **File system responsibilities** table names concrete paths the RFC touches.
87
+ - **Output format** documents the `--json` shape.
88
+ - **Failure modes** specifies exit codes and warn-vs-fail behavior.
89
+ - **Rollout** describes default behavior, adoption path for existing apps, and new-app compliance.
90
+ - **Alternatives considered** is honest — at least one real alternative with a rejection reason.
91
+ - **Risks** includes agent misinterpretation risk and false-positive rate for validators.
92
+ - **Acceptance criteria** items are checkable (can an agent or human verify each one?) and sufficient (do they cover the decision's full scope?).
93
+ - **Implementation notes for agents** are explicit behavioral rules, not vague guidance.
94
+
95
+ #### Axis B — DNA alignment
96
+
97
+ - Each entry in `satisfies[]` is a real DNA invariant in `ref(forge.yaml bindings.paths.invariantsFile)`, and the RFC body explains **how** it enforces, protects, or extends that invariant — not just that it's "related".
98
+ - If the RFC establishes a new DNA invariant (body says "DNA-N established by this RFC"), the audit confirms `ref(forge.yaml bindings.paths.invariantsFile)` will need a new `## DNA-N` entry and the RFC's `satisfies[]` includes it.
99
+ - The RFC does not silently conflict with any existing DNA invariant. If it changes a DNA invariant, it must `supersede` the establishing RFC — not amend it.
100
+ - `related[]` DNA references are relevant and not decorative.
101
+
102
+ #### Axis C — Ecosystem fit
103
+
104
+ - **Package boundaries**: imports flow `apps/* → packages/*` and `services/* → packages/*`, never `apps/* → apps/*` or `apps/* → services/*`. If the RFC proposes a new package, it belongs in `packages/*`. Check the project's invariants file for the canonical boundary rule.
105
+ - **Pipeline placement**: the RFC names the correct pipeline for each new check — `build.prepare`, `build.check`, `sites-check`, `sites-check-postbuild` — and the choice is justified (blocking vs. advisory).
106
+ - **Compass sync**: if the RFC changes repository-wide requirements, shared package contracts, or app-package relationships, it identifies which `docs/*.xml` files need synchronization (root AGENTS.md Compass document duties).
107
+ - **AGENTS.md updates**: the RFC identifies which `AGENTS.md` files need rule updates (root, `apps/`, `packages/`, `services/`, or site-specific).
108
+ - **Cosmic naming**: if the RFC touches manifests or component/section/page contracts, it addresses the three-way alignment (manifest `cosmicName` ↔ `PLANET_IMPORT_PATHS`/`MOON_IMPORT_PATHS` ↔ `system.md` pins).
109
+ - **Command lifecycle**: `commands.proposed/added/changed/removed` buckets are internally consistent — proposed commands that the RFC introduces will land in `added` upon implementation; changed commands are existing registered commands; removed commands are explicitly deprecated.
110
+
111
+ #### Axis D — Forward-only compliance
112
+
113
+ This ecosystem is forward-only — no backward compatibility layers, no expand-then-contract migrations. Check:
114
+
115
+ - The RFC does not propose a compatibility shim, bridge, or dual-path that keeps legacy behavior alive alongside the new one.
116
+ - Deprecation means removal in the same RFC wave, not an indefinite grace period.
117
+ - If the RFC amends another RFC, it changes the amended RFC's contract directly — it does not add a parallel interpretation.
118
+ - Legacy code paths are deleted, not maintained behind a flag.
119
+
120
+ #### Axis E — Agent-facing policy
121
+
122
+ - **Status gate**: the RFC does not contain self-authorizing language ("may proceed while draft", "implementation can start before acceptance"). Draft RFCs cannot grant implementation permission.
123
+ - **Implementation notes** reference the correct governance rules: RFC-XXXX (accepted→implemented transition), RFC-XXXX (if touching agent surface), RFC-XXXX (supersede escalation on invariant conflict), RFC-XXXX (verification evidence for probe-bearing RFCs).
124
+ - **Anti-fabrication**: if the RFC's acceptance criteria include content authoring (prose, business records, claims), the criteria distinguish between code changes an agent can make and content that requires human authoring. The RFC must not claim content will be "auto-generated" when it requires human authoring.
125
+ - **Storage policy**: if the RFC touches persistence, it does not introduce cookies (`document.cookie`, `Set-Cookie`). Client-side persistence is `localStorage` only; server-side is `unstorage`.
126
+
127
+ #### Axis F — Pragmatism
128
+
129
+ - **Minimal command surface**: each proposed command earns its existence — no command that could be a flag on an existing command, no command that duplicates an existing command's scope.
130
+ - **Lean contracts**: TypeScript types are the minimum needed to understand the shape — no speculative generality, no unused optional fields, no abstraction for needs the RFC doesn't have.
131
+ - **Existing patterns**: the RFC checks whether an existing command, schema, or pattern can be extended before proposing a new one. If a new one is proposed, the alternatives section explains why extension was insufficient.
132
+ - **Scope discipline**: `appsImpacted` and `packagesImpacted` list only what's actually impacted. `nonGoals` are explicit and meaningful, not boilerplate.
133
+
134
+ #### Axis G — Blind spots
135
+
136
+ - **Performance**: build-time commands specify their cost (file scan count, regex complexity, I/O patterns). A command that scans all `apps/**` on every `build.check` is a bottleneck.
137
+ - **False positives**: validators estimate their false-positive rate and describe how to suppress noise during migration.
138
+ - **Edge cases**: the RFC considers empty states (new app with no content, package with no manifests), concurrent execution (two builds, two agents), and interrupted operations (crash mid-write).
139
+ - **Migration path**: existing apps' path to compliance is documented — do they pass without changes, or is there a documented migration window?
140
+ - **Security/privacy**: if the RFC touches user data, PII, or external services, it addresses GDPR/privacy implications and secret management (no hardcoded keys, env vars documented in `.env.example`).
141
+
142
+ ### 5. Produce the report
143
+
144
+ Present the findings in this structure in `aiLanguage`. **Translate all labels, headings, and axis names to `aiLanguage`** — the template below is structural only. Only identifiers (RFC-XXXX, file paths, DNA invariant ids) stay untranslated. Keep it concise — each finding is one to three sentences with evidence (quote the RFC line or cite the file path).
145
+
146
+ ```
147
+ ## <RFC-XXXX Audit in aiLanguage>
148
+
149
+ ### Verdict: <Approved | Needs revision | Rejected>
150
+
151
+ <2-3 sentence justification grounded in the most serious findings.>
152
+
153
+ ### Mechanical validation (rfc.validate)
154
+
155
+ <Pass / Fail — if fail, list violations targeting this RFC.>
156
+
157
+ ### Axis A — Structural completeness
158
+ <Findings or "No issues.">
159
+
160
+ ### Axis B — DNA alignment
161
+ <Findings or "No issues.">
162
+
163
+ ### Axis C — Ecosystem fit
164
+ <Findings or "No issues.">
165
+
166
+ ### Axis D — Forward-only compliance
167
+ <Findings or "No issues.">
168
+
169
+ ### Axis E — Agent-facing policy
170
+ <Findings or "No issues.">
171
+
172
+ ### Axis F — Pragmatism
173
+ <Findings or "No issues.">
174
+
175
+ ### Axis G — Blind spots
176
+ <Findings or "No issues.">
177
+
178
+ ### Questions for the author
179
+
180
+ 1. <Hard question that the RFC must answer before implementation.>
181
+ 2. <Hard question.>
182
+ 3. <Hard question.>
183
+ ```
184
+
185
+ **Verdict criteria:**
186
+
187
+ - **Approved** — zero findings across all axes. Any finding, no matter how minor or cosmetic, disqualifies Approved and forces Needs revision. The rationale: downstream agents treat Approved as a stop signal and stop reading the findings — so even a trivial finding left under Approved gets silently ignored. If there is anything to fix, the verdict must say so.
188
+ - **Needs revision** — one or more findings on any axis, regardless of severity. A one-line cosmetic note is enough. The agent must not downgrade to Approved based on severity — a finding is a finding.
189
+ - **Rejected** — fundamental flaw: the RFC contradicts a DNA invariant without superseding it, proposes a backward compatibility layer, or contains self-authorizing language that bypasses the status gate.
190
+
191
+ ### 6. Persist the audit
192
+
193
+ Write the report to `docs/audits/` using the `audit-rfc-NNNN-…` prefix pattern (mirroring the `plan-rfc-NNNN-…` convention in `docs/plans/`):
194
+
195
+ ```txt
196
+ docs/rfcs/rfc-0362-werkstatt-consistency-primitives-….md
197
+ → docs/audits/audit-rfc-0362-werkstatt-consistency-primitives-….md
198
+ ```
199
+
200
+ Use `docs/audits/audit-0000-template.md` as the structural starting point. The file must begin with a YAML frontmatter block:
201
+
202
+ ```yaml
203
+ ---
204
+ rfcId: RFC-XXXX
205
+ auditId: AUDIT-RFC-XXXX-01
206
+ date: YYYY-MM-DD
207
+ auditor:
208
+ skill: fo-idea-audit
209
+ model: <AI model identifier>
210
+ verdict: <approved | needs-revision | rejected>
211
+ ---
212
+
213
+ # Audit: RFC-XXXX
214
+
215
+ (…report body…)
216
+ ```
217
+
218
+ The `auditor.model` field must record the AI model identifier the skill is running on (e.g. `claude-sonnet-4-20250514`, `gpt-4o`, etc.). If the model cannot be determined, use `unknown`.
219
+
220
+ If the file already exists, overwrite it — the audit is always the latest run.
221
+
222
+ ### 7. Commit
223
+
224
+ Commit the audit report. This is **mandatory** — the audit file must be committed, not left in the working tree.
225
+
226
+ Commit message format:
227
+
228
+ ```txt
229
+ audit: RFC-XXXX <short description>
230
+
231
+ Semantic audit of RFC-XXXX (<title>). Verdict: <approved | needs-revision | rejected>.
232
+ ```
233
+
234
+ Stage only the audit file — do not stage unrelated changes. Another agent may be working in a different session; `git add -A` or `git add .` is forbidden.
235
+
236
+ ### 8. Stop
237
+
238
+ Do not modify the RFC or any other file. Do not run `/fo-idea-plan` or `/fo-idea-implement` — those are separate skills with different purposes. Present the report and stop. If the user asks to fix the findings, suggest running `/fo-idea-enhance` — it reads the persisted audit and applies the fixes. The full pipeline is: create → audit → enhance → plan → implement.
239
+
240
+ ## Constraints
241
+
242
+ - The audit is **read-only** with respect to the RFC and codebase — the only file it writes is the audit report in `docs/audits/`.
243
+ - **Commit the audit report.** The audit file must be committed after persistence — never left in the working tree.
244
+ - The audit does **not** duplicate `rfc.validate` — it starts from the mechanical floor and goes beyond it.
245
+ - The audit does **not** assess writing style, prose quality, or formatting — only semantic and architectural correctness.
246
+ - The audit does **not** approve or reject RFCs for architecture acceptance — that is a human-only decision. The verdict is advisory.
247
+ - The audit must ground every finding in evidence: quote the RFC line, cite the DNA invariant, or reference the file path. No ungrounded assertions.
248
+ - **No pauses for recoverable tool errors.** If a tool call fails with a recoverable error — e.g. `write_to_file` content too long, JSON truncation, line count/character limit exceeded, or similar — do not stop and ask the user. Recover autonomously: split the 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".