@warpgogol/forge 5.3.3 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/bin/cli.ts +7 -2
  3. package/dist/bin/cli.js +7 -2
  4. package/dist/bin/cli.js.map +1 -1
  5. package/dist/os/adr/adr.module.d.ts.map +1 -1
  6. package/dist/os/adr/adr.module.js +2 -0
  7. package/dist/os/adr/adr.module.js.map +1 -1
  8. package/dist/os/audit/audit.module.d.ts.map +1 -1
  9. package/dist/os/audit/audit.module.js +2 -0
  10. package/dist/os/audit/audit.module.js.map +1 -1
  11. package/dist/os/compass/compass.module.d.ts.map +1 -1
  12. package/dist/os/compass/compass.module.js +48 -16
  13. package/dist/os/compass/compass.module.js.map +1 -1
  14. package/dist/os/compass/handlers/compass-audit-handler.d.ts +2 -0
  15. package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -1
  16. package/dist/os/compass/handlers/compass-audit-handler.js +39 -9
  17. package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
  18. package/dist/os/compass/handlers/compass-docs-validate.d.ts +13 -0
  19. package/dist/os/compass/handlers/compass-docs-validate.d.ts.map +1 -0
  20. package/dist/os/compass/handlers/compass-docs-validate.js +326 -0
  21. package/dist/os/compass/handlers/compass-docs-validate.js.map +1 -0
  22. package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -1
  23. package/dist/os/compass/handlers/compass-inventory.js +5 -2
  24. package/dist/os/compass/handlers/compass-inventory.js.map +1 -1
  25. package/dist/os/compass/handlers/summary-record.d.ts +17 -3
  26. package/dist/os/compass/handlers/summary-record.d.ts.map +1 -1
  27. package/dist/os/compass/handlers/summary-record.js +107 -10
  28. package/dist/os/compass/handlers/summary-record.js.map +1 -1
  29. package/dist/os/compass/handlers/tests/forge-yaml-fixture.d.ts +18 -0
  30. package/dist/os/compass/handlers/tests/forge-yaml-fixture.d.ts.map +1 -0
  31. package/dist/os/compass/handlers/tests/forge-yaml-fixture.js +64 -0
  32. package/dist/os/compass/handlers/tests/forge-yaml-fixture.js.map +1 -0
  33. package/dist/os/compass/policy.d.ts +6 -1
  34. package/dist/os/compass/policy.d.ts.map +1 -1
  35. package/dist/os/compass/policy.js +8 -2
  36. package/dist/os/compass/policy.js.map +1 -1
  37. package/dist/os/core/core.module.d.ts.map +1 -1
  38. package/dist/os/core/core.module.js +124 -73
  39. package/dist/os/core/core.module.js.map +1 -1
  40. package/dist/os/exploration/exploration.module.d.ts.map +1 -1
  41. package/dist/os/exploration/exploration.module.js +3 -0
  42. package/dist/os/exploration/exploration.module.js.map +1 -1
  43. package/dist/os/mission/handlers/archive.d.ts.map +1 -1
  44. package/dist/os/mission/handlers/archive.js +1 -2
  45. package/dist/os/mission/handlers/archive.js.map +1 -1
  46. package/dist/os/naming/naming.module.d.ts.map +1 -1
  47. package/dist/os/naming/naming.module.js +9 -2
  48. package/dist/os/naming/naming.module.js.map +1 -1
  49. package/dist/os/notes/notes.module.d.ts.map +1 -1
  50. package/dist/os/notes/notes.module.js +17 -6
  51. package/dist/os/notes/notes.module.js.map +1 -1
  52. package/dist/os/plan/plan.module.d.ts.map +1 -1
  53. package/dist/os/plan/plan.module.js +2 -0
  54. package/dist/os/plan/plan.module.js.map +1 -1
  55. package/dist/os/plugin/plugin.module.d.ts.map +1 -1
  56. package/dist/os/plugin/plugin.module.js +9 -2
  57. package/dist/os/plugin/plugin.module.js.map +1 -1
  58. package/dist/os/program/program.module.d.ts.map +1 -1
  59. package/dist/os/program/program.module.js +19 -4
  60. package/dist/os/program/program.module.js.map +1 -1
  61. package/dist/os/queue/handlers/queue-validate.d.ts.map +1 -1
  62. package/dist/os/queue/handlers/queue-validate.js +154 -7
  63. package/dist/os/queue/handlers/queue-validate.js.map +1 -1
  64. package/dist/os/queue/manifest.d.ts +17 -1
  65. package/dist/os/queue/manifest.d.ts.map +1 -1
  66. package/dist/os/queue/manifest.js +127 -6
  67. package/dist/os/queue/manifest.js.map +1 -1
  68. package/dist/os/queue/queue.module.d.ts.map +1 -1
  69. package/dist/os/queue/queue.module.js +32 -4
  70. package/dist/os/queue/queue.module.js.map +1 -1
  71. package/dist/os/queue/types.d.ts +100 -1
  72. package/dist/os/queue/types.d.ts.map +1 -1
  73. package/dist/os/queue/types.js +44 -0
  74. package/dist/os/queue/types.js.map +1 -1
  75. package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
  76. package/dist/os/rfc/handlers/implement-stamp.js +28 -5
  77. package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
  78. package/dist/os/rfc/handlers/validate.js +1 -1
  79. package/dist/os/rfc/rfc.module.d.ts.map +1 -1
  80. package/dist/os/rfc/rfc.module.js +27 -3
  81. package/dist/os/rfc/rfc.module.js.map +1 -1
  82. package/dist/os/rfc/types.d.ts +11 -0
  83. package/dist/os/rfc/types.d.ts.map +1 -1
  84. package/dist/os/rfc/types.js +1 -0
  85. package/dist/os/rfc/types.js.map +1 -1
  86. package/dist/os/rfc/verification-evidence.d.ts +21 -0
  87. package/dist/os/rfc/verification-evidence.d.ts.map +1 -1
  88. package/dist/os/rfc/verification-evidence.js +140 -23
  89. package/dist/os/rfc/verification-evidence.js.map +1 -1
  90. package/dist/os/rfc/verification-refresh.d.ts.map +1 -1
  91. package/dist/os/rfc/verification-refresh.js +72 -37
  92. package/dist/os/rfc/verification-refresh.js.map +1 -1
  93. package/dist/os/session/handlers/save.d.ts.map +1 -1
  94. package/dist/os/session/handlers/save.js +46 -5
  95. package/dist/os/session/handlers/save.js.map +1 -1
  96. package/dist/os/session/session.module.d.ts.map +1 -1
  97. package/dist/os/session/session.module.js +5 -0
  98. package/dist/os/session/session.module.js.map +1 -1
  99. package/dist/os/spec/live-spec-merge.d.ts.map +1 -1
  100. package/dist/os/spec/live-spec-merge.js +55 -134
  101. package/dist/os/spec/live-spec-merge.js.map +1 -1
  102. package/dist/os/spec/live-spec-rebuild.d.ts +32 -0
  103. package/dist/os/spec/live-spec-rebuild.d.ts.map +1 -0
  104. package/dist/os/spec/live-spec-rebuild.js +272 -0
  105. package/dist/os/spec/live-spec-rebuild.js.map +1 -0
  106. package/dist/os/spec/live-spec-shared.d.ts +62 -0
  107. package/dist/os/spec/live-spec-shared.d.ts.map +1 -0
  108. package/dist/os/spec/live-spec-shared.js +315 -0
  109. package/dist/os/spec/live-spec-shared.js.map +1 -0
  110. package/dist/os/spec/live-spec-types.d.ts +17 -1
  111. package/dist/os/spec/live-spec-types.d.ts.map +1 -1
  112. package/dist/os/spec/live-spec-types.js +3 -0
  113. package/dist/os/spec/live-spec-types.js.map +1 -1
  114. package/dist/os/spec/live-spec-validate.d.ts.map +1 -1
  115. package/dist/os/spec/live-spec-validate.js +105 -2
  116. package/dist/os/spec/live-spec-validate.js.map +1 -1
  117. package/dist/os/spec/spec-materialize.d.ts +2 -0
  118. package/dist/os/spec/spec-materialize.d.ts.map +1 -1
  119. package/dist/os/spec/spec-materialize.js +45 -5
  120. package/dist/os/spec/spec-materialize.js.map +1 -1
  121. package/dist/os/spec/spec-schema.d.ts +19 -0
  122. package/dist/os/spec/spec-schema.d.ts.map +1 -1
  123. package/dist/os/spec/spec-schema.js +30 -0
  124. package/dist/os/spec/spec-schema.js.map +1 -1
  125. package/dist/os/spec/spec-status.d.ts +4 -0
  126. package/dist/os/spec/spec-status.d.ts.map +1 -1
  127. package/dist/os/spec/spec-status.js +19 -1
  128. package/dist/os/spec/spec-status.js.map +1 -1
  129. package/dist/os/spec/spec-validate.d.ts.map +1 -1
  130. package/dist/os/spec/spec-validate.js +55 -8
  131. package/dist/os/spec/spec-validate.js.map +1 -1
  132. package/dist/os/spec/spec.module.d.ts.map +1 -1
  133. package/dist/os/spec/spec.module.js +84 -8
  134. package/dist/os/spec/spec.module.js.map +1 -1
  135. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -1
  136. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +10 -4
  137. package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -1
  138. package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -1
  139. package/dist/os/werkstatt/werkstatt.module.js +13 -4
  140. package/dist/os/werkstatt/werkstatt.module.js.map +1 -1
  141. package/dist/os/workflow/workflow.module.d.ts.map +1 -1
  142. package/dist/os/workflow/workflow.module.js +13 -5
  143. package/dist/os/workflow/workflow.module.js.map +1 -1
  144. package/dist/src/cli-flags.d.ts.map +1 -1
  145. package/dist/src/cli-flags.js +25 -5
  146. package/dist/src/cli-flags.js.map +1 -1
  147. package/dist/src/config/forge-config.d.ts +24 -3
  148. package/dist/src/config/forge-config.d.ts.map +1 -1
  149. package/dist/src/config/forge-config.js +38 -7
  150. package/dist/src/config/forge-config.js.map +1 -1
  151. package/dist/src/onboarding/create.d.ts.map +1 -1
  152. package/dist/src/onboarding/create.js +26 -10
  153. package/dist/src/onboarding/create.js.map +1 -1
  154. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  155. package/dist/src/onboarding/doctor.js +49 -2
  156. package/dist/src/onboarding/doctor.js.map +1 -1
  157. package/dist/src/onboarding/init.d.ts.map +1 -1
  158. package/dist/src/onboarding/init.js +8 -3
  159. package/dist/src/onboarding/init.js.map +1 -1
  160. package/dist/src/onboarding/upgrade.d.ts.map +1 -1
  161. package/dist/src/onboarding/upgrade.js +24 -8
  162. package/dist/src/onboarding/upgrade.js.map +1 -1
  163. package/dist/src/pipeline-status.d.ts +14 -1
  164. package/dist/src/pipeline-status.d.ts.map +1 -1
  165. package/dist/src/pipeline-status.js +28 -8
  166. package/dist/src/pipeline-status.js.map +1 -1
  167. package/dist/src/types.d.ts +7 -1
  168. package/dist/src/types.d.ts.map +1 -1
  169. package/dist/src/types.js +6 -0
  170. package/dist/src/types.js.map +1 -1
  171. package/dist/src/utils/generated-marker.d.ts +8 -0
  172. package/dist/src/utils/generated-marker.d.ts.map +1 -1
  173. package/dist/src/utils/generated-marker.js +25 -0
  174. package/dist/src/utils/generated-marker.js.map +1 -1
  175. package/dist/src/validators/skill-validate.d.ts.map +1 -1
  176. package/dist/src/validators/skill-validate.js +42 -15
  177. package/dist/src/validators/skill-validate.js.map +1 -1
  178. package/os/adr/adr.module.ts +2 -0
  179. package/os/audit/audit.module.ts +2 -0
  180. package/os/compass/compass.module.ts +50 -16
  181. package/os/compass/handlers/compass-audit-handler.ts +50 -9
  182. package/os/compass/handlers/compass-docs-validate.ts +359 -0
  183. package/os/compass/handlers/compass-inventory.ts +6 -3
  184. package/os/compass/handlers/summary-record.ts +118 -10
  185. package/os/compass/handlers/tests/compass-audit-record.test.ts +2 -1
  186. package/os/compass/handlers/tests/compass-audit-validate.test.ts +92 -3
  187. package/os/compass/handlers/tests/compass-docs-validate.test.ts +203 -0
  188. package/os/compass/handlers/tests/compass-ledger-scope.test.ts +2 -1
  189. package/os/compass/handlers/tests/compass-policy.test.ts +15 -18
  190. package/os/compass/handlers/tests/compass-v2-contract.test.ts +38 -0
  191. package/os/compass/handlers/tests/forge-yaml-fixture.ts +69 -0
  192. package/os/compass/handlers/tests/summary-record.test.ts +152 -0
  193. package/os/compass/policy.ts +8 -2
  194. package/os/core/core.module.ts +147 -75
  195. package/os/core/docs-archive.test.ts +136 -0
  196. package/os/exploration/exploration.module.ts +3 -0
  197. package/os/mission/handlers/archive.ts +1 -2
  198. package/os/naming/naming.module.ts +9 -2
  199. package/os/notes/notes.module.ts +17 -6
  200. package/os/plan/plan-0000-template.md +150 -0
  201. package/os/plan/plan.module.ts +2 -0
  202. package/os/plugin/plugin.module.ts +9 -2
  203. package/os/program/program.module.ts +19 -4
  204. package/os/queue/decision-ledger.test.ts +163 -0
  205. package/os/queue/handlers/queue-validate.ts +190 -8
  206. package/os/queue/manifest.ts +201 -7
  207. package/os/queue/queue-validate.test.ts +303 -0
  208. package/os/queue/queue.module.ts +32 -4
  209. package/os/queue/types.ts +56 -1
  210. package/os/rfc/handlers/implement-stamp.ts +35 -5
  211. package/os/rfc/handlers/validate.ts +1 -1
  212. package/os/rfc/rfc.module.ts +29 -3
  213. package/os/rfc/types.ts +17 -1
  214. package/os/rfc/verification-emit.test.ts +305 -0
  215. package/os/rfc/verification-evidence.ts +155 -24
  216. package/os/rfc/verification-refresh.test.ts +222 -1
  217. package/os/rfc/verification-refresh.ts +80 -38
  218. package/os/session/handlers/save.ts +41 -5
  219. package/os/session/session.module.ts +5 -0
  220. package/os/spec/live-spec-idempotency.pbt.test.ts +222 -0
  221. package/os/spec/live-spec-list-show-validate.test.ts +10 -6
  222. package/os/spec/live-spec-merge.test.ts +187 -7
  223. package/os/spec/live-spec-merge.ts +71 -155
  224. package/os/spec/live-spec-rebuild.test.ts +317 -0
  225. package/os/spec/live-spec-rebuild.ts +356 -0
  226. package/os/spec/live-spec-shared.ts +378 -0
  227. package/os/spec/live-spec-types.ts +21 -1
  228. package/os/spec/live-spec-validate.test.ts +317 -0
  229. package/os/spec/live-spec-validate.ts +106 -2
  230. package/os/spec/spec-materialize.test.ts +192 -0
  231. package/os/spec/spec-materialize.ts +48 -4
  232. package/os/spec/spec-schema.ts +49 -0
  233. package/os/spec/spec-status.ts +24 -0
  234. package/os/spec/spec-validate.test.ts +66 -0
  235. package/os/spec/spec-validate.ts +62 -8
  236. package/os/spec/spec.module.ts +85 -8
  237. package/os/werkstatt/handlers/werkstatt-operation-validate.ts +10 -4
  238. package/os/werkstatt/werkstatt.module.ts +13 -4
  239. package/os/workflow/workflow.module.ts +13 -5
  240. package/package.json +1 -1
  241. package/skills/_shared/fo-pipeline-conventions.md +126 -1
  242. package/skills/fo/fo-compass-annotate/SKILL.md +1 -1
  243. package/skills/fo/fo-doc-audit/SKILL.md +4 -4
  244. package/skills/fo/fo-explore/SKILL.md +2 -1
  245. package/skills/fo/fo-fix/SKILL.md +11 -3
  246. package/skills/fo/fo-handoff/SKILL.md +6 -8
  247. package/skills/fo/fo-idea-audit/SKILL.md +1 -1
  248. package/skills/fo/fo-idea-create-rfc/SKILL.md +3 -2
  249. package/skills/fo/fo-idea-enhance/SKILL.md +23 -4
  250. package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +86 -22
  251. package/skills/fo/fo-idea-implement/SKILL.md +57 -13
  252. package/skills/fo/fo-idea-plan/SKILL.md +28 -6
  253. package/skills/fo/fo-review/SKILL.md +69 -8
  254. package/skills/fo/fo-session-retro/SKILL.md +4 -3
  255. package/skills/fo/fo-session-save/SKILL.md +1 -1
  256. package/skills/fo/fo-step-commit/SKILL.md +2 -0
  257. package/skills/shared/grilling/SKILL.md +12 -0
  258. package/skills/shared/writing-great-skills/GLOSSARY.md +2 -0
  259. package/skills/shared/writing-great-skills/SKILL.md +2 -1
  260. package/src/cli-flags.ts +23 -5
  261. package/src/config/forge-config.ts +106 -57
  262. package/src/onboarding/create.ts +25 -9
  263. package/src/onboarding/doctor.ts +51 -2
  264. package/src/onboarding/init.ts +8 -3
  265. package/src/onboarding/upgrade.ts +36 -6
  266. package/src/pipeline-status.ts +32 -8
  267. package/src/tests/bindings-schema.test.ts +53 -1
  268. package/src/tests/cli-flags.test.ts +20 -0
  269. package/src/tests/cli-output.test.ts +13 -7
  270. package/src/tests/doctor-bindings.test.ts +7 -2
  271. package/src/tests/doctor-skills-unmanaged.test.ts +145 -0
  272. package/src/tests/fixtures/agents-generate-business-before.txt +7 -7
  273. package/src/tests/forge-config.test.ts +106 -2
  274. package/src/tests/implement-stamp.test.ts +38 -0
  275. package/src/tests/session-handlers.test.ts +33 -0
  276. package/src/tests/skill-validate.test.ts +180 -0
  277. package/src/tests/upgrade.test.ts +60 -0
  278. package/src/types.ts +13 -1
  279. package/src/utils/generated-marker.ts +28 -0
  280. package/src/validators/skill-validate.ts +43 -16
  281. package/skills/fo/fo-idea-implement/ADR-FLOW.md +0 -179
  282. package/skills/fo/fo-review/AXES.md +0 -70
@@ -7,6 +7,27 @@ export declare function captureGitContext(workspaceRoot: string): Promise<{
7
7
  }>;
8
8
  export declare function getKernelVersion(workspaceRoot: string): Promise<string>;
9
9
  export declare function byteHashHex(content: string): string;
10
+ /**
11
+ * Bounded-parallel map preserving input order — one in-flight worker per slot,
12
+ * results land in the same positions as their inputs. Used by the emit/refresh
13
+ * sweeps so `--concurrency N` overlaps probe subprocesses across RFCs.
14
+ */
15
+ export declare function mapWithConcurrency<T, R>(items: readonly T[], concurrency: number, worker: (item: T, index: number) => Promise<R>): Promise<R[]>;
16
+ /**
17
+ * Resolve the `--concurrency` flag (string flag; the kernel schema has no
18
+ * number kind). Garbage/NaN/non-positive degrades to 1 with a warning;
19
+ * clamped to 16 — probe workers spawn vitest/site-kernel children and wider
20
+ * fan-out starves CPU rather than speeding the sweep.
21
+ */
22
+ export declare function resolveConcurrency(flag: unknown, warn?: (message: string) => void): number;
23
+ /**
24
+ * RFC-1237: the emit-canonical envelope serialization — structured marker keys
25
+ * (generatedMarker/doNotEdit/ownerCommand/editInstead/regenerateCommand) as
26
+ * leading YAML fields, then the envelope body. emit and refresh MUST share
27
+ * this serializer: refresh owns content freshness, never envelope identity
28
+ * (OWN-DUP-01), so refresh output is identical-by-construction.
29
+ */
30
+ export declare function serializeEvidenceEnvelope(envelope: VerificationEvidence): string;
10
31
  export declare function buildEvidenceEnvelope(rfcId: string, title: string, rfcStatus: RfcStatus, rfcMarkdown: string, probes: AcceptanceProbe[], probeRecords: VerificationEvidenceProbeRecord[], gitContext: {
11
32
  commit: string;
12
33
  workingTreeDirty: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"verification-evidence.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,gBAAgB,QAAgC,CAAC;AAe9D,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CAAC,CASxD;AAED,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAMD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,EAAE,EACzB,YAAY,EAAE,+BAA+B,EAAE,EAC/C,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,EACzD,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAetB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,CA4HxD"}
1
+ {"version":3,"file":"verification-evidence.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,gBAAgB,QAAgC,CAAC;AAe9D,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CAAC,CASxD;AAED,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAe1F;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAQhF;AAMD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,EAAE,EACzB,YAAY,EAAE,+BAA+B,EAAE,EAC/C,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,EACzD,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAetB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,CAmLxD"}
@@ -14,6 +14,18 @@ a JSON evidence envelope to docs/rfcs/verification/<slug>.generated.yaml.
14
14
  <CHANGE_SUMMARY>
15
15
  <item>RFC-0330: initial implementation.</item>
16
16
  <item>RFC-0999: exported captureGitContext, getKernelVersion, byteHashHex, VERIFICATION_DIR for reuse by verification-refresh.ts.</item>
17
+ <item>RFC-1237: dual-read dry-run (context.dryRun || flags["dry-run"]),
18
+ io.writeFile port routing, dry-run summary marker; serializeEvidenceEnvelope —
19
+ shared emit-canonical serializer restoring the structured YAML marker-key
20
+ header (generatedMarker/doNotEdit/ownerCommand/editInstead/regenerateCommand
21
+ with "pnpm exec werkstatt run" prefix), also consumed by refresh.</item>
22
+ <item>Session-retro 2026-10-08: sweep delta report — reads the committed
23
+ envelope baseline (previousOverall) and reports recovered/regressed
24
+ transitions so a fail-heavy sweep needs no manual pass/fail triage.</item>
25
+ <item>Session-retro 2026-10-08: --concurrency flag (default 1, garbage values
26
+ warn + fall back to 1, >16 clamps) fans emit out across RFC units via
27
+ mapWithConcurrency while probes inside one RFC stay sequential — envelope
28
+ ordering stays deterministic.</item>
17
29
  </CHANGE_SUMMARY>
18
30
  */
19
31
  import { execFile } from "../../src/utils/sync-fs.js";
@@ -23,9 +35,8 @@ import { performance } from "node:perf_hooks";
23
35
  import { byteHash } from "../../src/utils/hash.js";
24
36
  import { runProbe } from "./acceptance.js";
25
37
  import { listRfcFiles, readAndParseRfc } from "./frontmatter-io.js";
26
- import { writeFileAtomic } from "../../src/utils/fs-atomic.js";
27
- import { buildGeneratedHeader } from "../../src/utils/generated-marker.js";
28
- import { stringify as yamlStringify } from "yaml";
38
+ import { generatedHeaderFields } from "../../src/utils/generated-marker.js";
39
+ import { parse as yamlParse, stringify as yamlStringify } from "yaml";
29
40
  import { RFC_DIR } from "./types.js";
30
41
  // Ambient default for helper fns without a context param — handlers override
31
42
  // with `const io = resolveIo(context.io)` inside their own scope.
@@ -66,6 +77,61 @@ export async function getKernelVersion(workspaceRoot) {
66
77
  export function byteHashHex(content) {
67
78
  return byteHash(content).slice(HASH_PREFIX.length);
68
79
  }
80
+ /**
81
+ * Bounded-parallel map preserving input order — one in-flight worker per slot,
82
+ * results land in the same positions as their inputs. Used by the emit/refresh
83
+ * sweeps so `--concurrency N` overlaps probe subprocesses across RFCs.
84
+ */
85
+ export async function mapWithConcurrency(items, concurrency, worker) {
86
+ const results = new Array(items.length);
87
+ let cursor = 0;
88
+ const lanes = Array.from({ length: Math.min(Math.max(concurrency, 1), items.length) }, () => (async () => {
89
+ while (cursor < items.length) {
90
+ const index = cursor;
91
+ cursor += 1;
92
+ results[index] = await worker(items[index], index);
93
+ }
94
+ })());
95
+ await Promise.all(lanes);
96
+ return results;
97
+ }
98
+ /**
99
+ * Resolve the `--concurrency` flag (string flag; the kernel schema has no
100
+ * number kind). Garbage/NaN/non-positive degrades to 1 with a warning;
101
+ * clamped to 16 — probe workers spawn vitest/site-kernel children and wider
102
+ * fan-out starves CPU rather than speeding the sweep.
103
+ */
104
+ export function resolveConcurrency(flag, warn) {
105
+ if (flag === undefined)
106
+ return 1;
107
+ const raw = Array.isArray(flag) ? flag[0] : flag;
108
+ const parsed = Number.parseInt(String(raw), 10);
109
+ if (!Number.isFinite(parsed) || parsed < 1) {
110
+ warn?.(`--concurrency "${String(raw)}" is not a positive integer — falling back to 1.`);
111
+ return 1;
112
+ }
113
+ if (parsed > 16) {
114
+ warn?.(`--concurrency ${parsed} exceeds the 16 cap — clamped (probe workers spawn subprocesses).`);
115
+ return 16;
116
+ }
117
+ return parsed;
118
+ }
119
+ /**
120
+ * RFC-1237: the emit-canonical envelope serialization — structured marker keys
121
+ * (generatedMarker/doNotEdit/ownerCommand/editInstead/regenerateCommand) as
122
+ * leading YAML fields, then the envelope body. emit and refresh MUST share
123
+ * this serializer: refresh owns content freshness, never envelope identity
124
+ * (OWN-DUP-01), so refresh output is identical-by-construction.
125
+ */
126
+ export function serializeEvidenceEnvelope(envelope) {
127
+ return `${yamlStringify({
128
+ ...generatedHeaderFields({
129
+ ownerCommand: "rfc.verification.emit",
130
+ commandPrefix: "pnpm exec werkstatt run",
131
+ }),
132
+ ...envelope,
133
+ })}\n`;
134
+ }
69
135
  function normalizeProbes(probes) {
70
136
  return JSON.stringify(probes, Object.keys(probes[0] ?? {}).sort());
71
137
  }
@@ -91,6 +157,10 @@ export async function runRfcVerificationEmit(input, context) {
91
157
  const rfcDirPath = join(workspaceRoot, RFC_DIR);
92
158
  const targetId = input.flags["id"];
93
159
  const targetStatus = input.flags["status"];
160
+ // RFC-1237: consumeCommonFlags strips --dry-run into context.dryRun before
161
+ // dispatch — the input.flags read stays for direct/programmatic callers.
162
+ const dryRun = context.dryRun === true || input.flags["dry-run"] === true;
163
+ const concurrency = resolveConcurrency(input.flags["concurrency"], (m) => logger.warn(m));
94
164
  if (!targetId && !targetStatus) {
95
165
  return {
96
166
  data: {
@@ -118,23 +188,23 @@ export async function runRfcVerificationEmit(input, context) {
118
188
  }
119
189
  const kernelVersion = await getKernelVersion(workspaceRoot);
120
190
  const verificationDirAbs = join(workspaceRoot, VERIFICATION_DIR);
121
- await io.mkdir(verificationDirAbs);
122
- for (const fileName of allFiles) {
191
+ if (!dryRun)
192
+ await io.mkdir(verificationDirAbs);
193
+ const processFile = async (fileName) => {
123
194
  const parsedFile = await readAndParseRfc(rfcDirPath, fileName);
124
195
  if (!parsedFile)
125
- continue;
196
+ return {};
126
197
  if ("error" in parsedFile)
127
- continue;
198
+ return {};
128
199
  const fm = parsedFile.parsed.frontmatter;
129
200
  const rfcId = String(fm["id"] ?? "");
130
201
  if (targetId && rfcId.toLowerCase() !== targetId.toLowerCase())
131
- continue;
202
+ return {};
132
203
  if (targetStatus && String(fm["status"] ?? "") !== targetStatus)
133
- continue;
204
+ return {};
134
205
  const acceptance = fm["acceptance"];
135
206
  if (!Array.isArray(acceptance) || acceptance.length === 0) {
136
- skipped.push({ rfcId, reason: "no-probes" });
137
- continue;
207
+ return { skippedEntry: { rfcId, reason: "no-probes" } };
138
208
  }
139
209
  const probes = acceptance;
140
210
  const probeRecords = [];
@@ -157,23 +227,69 @@ export async function runRfcVerificationEmit(input, context) {
157
227
  const evidenceFileName = `${slug}.generated.yaml`;
158
228
  const evidenceRelPath = join(VERIFICATION_DIR, evidenceFileName);
159
229
  const evidenceAbsPath = join(workspaceRoot, evidenceRelPath);
160
- const jsonContent = `${buildGeneratedHeader({ filePath: evidenceRelPath, ownerCommand: "rfc.verification.emit" })}${yamlStringify(envelope)}\n`;
161
- await writeFileAtomic(evidenceAbsPath, jsonContent);
162
- emitted.push({ rfcId, file: evidenceRelPath, overall: envelope.overall });
163
- if (envelope.overall === "fail") {
164
- diagnostics.push({
165
- ruleId: "RFC-EVID-02",
166
- severity: "error",
167
- file: evidenceRelPath,
168
- message: `${rfcId}: evidence overall is "fail" — ${probeRecords.filter((r) => !r.ok).length} probe(s) failed.`,
169
- });
230
+ // Committed-envelope baseline for the sweep delta — lets a fail-heavy run
231
+ // separate still-failing drift from fresh regressions without git diff.
232
+ let previousOverall;
233
+ try {
234
+ const existing = yamlParse(await io.readFile(evidenceAbsPath));
235
+ if (existing && (existing.overall === "pass" || existing.overall === "fail")) {
236
+ previousOverall = existing.overall;
237
+ }
238
+ }
239
+ catch {
240
+ // No committed envelope — first emission for this RFC.
170
241
  }
242
+ // RFC-1237: port write — the recording IO adapter intercepts under kernel
243
+ // --dry-run even if the explicit guard regresses.
244
+ if (!dryRun)
245
+ await io.writeFile(evidenceAbsPath, serializeEvidenceEnvelope(envelope));
171
246
  if (outputFormat === "pretty") {
172
- logger.info(`[evidence] ${rfcId} → ${evidenceRelPath} (${envelope.overall}, ${probeRecords.length} probes)`);
247
+ const drift = previousOverall !== undefined && previousOverall !== envelope.overall
248
+ ? `, was ${previousOverall}`
249
+ : "";
250
+ logger.info(`[evidence] ${rfcId} → ${evidenceRelPath} (${envelope.overall}, ${probeRecords.length} probes${drift}${dryRun ? ", dry-run" : ""})`);
173
251
  }
252
+ return {
253
+ emittedEntry: {
254
+ rfcId,
255
+ file: evidenceRelPath,
256
+ overall: envelope.overall,
257
+ ...(previousOverall !== undefined ? { previousOverall } : {}),
258
+ },
259
+ ...(envelope.overall === "fail"
260
+ ? {
261
+ diagnostic: {
262
+ ruleId: "RFC-EVID-02",
263
+ severity: "error",
264
+ file: evidenceRelPath,
265
+ message: `${rfcId}: evidence overall is "fail" — ${probeRecords.filter((r) => !r.ok).length} probe(s) failed${previousOverall === "pass" ? " (regressed: was pass)" : ""}.`,
266
+ },
267
+ }
268
+ : {}),
269
+ };
270
+ };
271
+ const results = await mapWithConcurrency(allFiles, concurrency, processFile);
272
+ for (const r of results) {
273
+ if (r.emittedEntry)
274
+ emitted.push(r.emittedEntry);
275
+ if (r.skippedEntry)
276
+ skipped.push(r.skippedEntry);
277
+ if (r.diagnostic)
278
+ diagnostics.push(r.diagnostic);
174
279
  }
175
280
  const hasFailures = emitted.some((e) => e.overall === "fail");
176
281
  const status = hasFailures ? "fail" : "pass";
282
+ const delta = {
283
+ recovered: emitted
284
+ .filter((e) => e.previousOverall === "fail" && e.overall === "pass")
285
+ .map((e) => e.rfcId),
286
+ regressed: emitted
287
+ .filter((e) => e.previousOverall === "pass" && e.overall === "fail")
288
+ .map((e) => e.rfcId),
289
+ };
290
+ const deltaSummary = delta.recovered.length + delta.regressed.length > 0
291
+ ? `, ${delta.regressed.length} regressed, ${delta.recovered.length} recovered`
292
+ : "";
177
293
  return {
178
294
  data: {
179
295
  command: "rfc.verification.emit",
@@ -181,9 +297,10 @@ export async function runRfcVerificationEmit(input, context) {
181
297
  emitted,
182
298
  skipped,
183
299
  diagnostics,
300
+ delta,
184
301
  },
185
302
  exitCode: hasFailures ? 1 : 0,
186
- summary: `rfc.verification.emit: ${emitted.length} emitted, ${skipped.length} skipped`,
303
+ summary: `rfc.verification.emit: ${emitted.length} emitted, ${skipped.length} skipped${deltaSummary}${dryRun ? ", dry-run" : ""}`,
187
304
  };
188
305
  }
189
306
  //# sourceMappingURL=verification-evidence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verification-evidence.js","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verification-evidence.js","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verification-refresh.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CA6J3D"}
1
+ {"version":3,"file":"verification-refresh.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CA4L3D"}
@@ -14,6 +14,17 @@ lastRefreshedAt, replaces probes[] with fresh results. Supports --id,
14
14
  </MODULE_CONTRACT>
15
15
  <CHANGE_SUMMARY>
16
16
  <item>RFC-0999: initial implementation.</item>
17
+ <item>RFC-1237: dual-read dry-run (context.dryRun || flags["dry-run"]),
18
+ io.writeFile port routing, emit-canonical generated header — refresh owns
19
+ content freshness, never envelope identity (ownerCommand stays
20
+ rfc.verification.emit).</item>
21
+ <item>Session-retro 2026-10-08: sweep delta report — previousOverall per
22
+ envelope + recovered/regressed lists separate still-failing drift from fresh
23
+ regressions without manual triage.</item>
24
+ <item>Session-retro 2026-10-08: --concurrency flag (default 1, garbage values
25
+ warn + fall back to 1, >16 clamps) fans refresh out across RFC units via
26
+ mapWithConcurrency while probes inside one RFC stay sequential — envelope
27
+ ordering stays deterministic.</item>
17
28
  </CHANGE_SUMMARY>
18
29
  */
19
30
  import { join } from "node:path";
@@ -22,10 +33,7 @@ import { performance } from "node:perf_hooks";
22
33
  import { parse as yamlParse } from "yaml";
23
34
  import { runProbe } from "./acceptance.js";
24
35
  import { listRfcFiles, readAndParseRfc } from "./frontmatter-io.js";
25
- import { writeFileAtomic } from "../../src/utils/fs-atomic.js";
26
- import { buildGeneratedHeader } from "../../src/utils/generated-marker.js";
27
- import { stringify as yamlStringify } from "yaml";
28
- import { captureGitContext, getKernelVersion, VERIFICATION_DIR, buildEvidenceEnvelope, } from "./verification-evidence.js";
36
+ import { captureGitContext, getKernelVersion, mapWithConcurrency, resolveConcurrency, VERIFICATION_DIR, buildEvidenceEnvelope, serializeEvidenceEnvelope, } from "./verification-evidence.js";
29
37
  import { RFC_DIR } from "./types.js";
30
38
  export async function runRfcVerificationRefresh(input, context) {
31
39
  const io = resolveIo(context.io);
@@ -33,7 +41,10 @@ export async function runRfcVerificationRefresh(input, context) {
33
41
  const rfcDirPath = join(workspaceRoot, RFC_DIR);
34
42
  const targetId = input.flags["id"];
35
43
  const allMode = input.flags["all"] === true;
36
- const dryRun = input.flags["dry-run"] === true;
44
+ // RFC-1237: consumeCommonFlags strips --dry-run into context.dryRun before
45
+ // dispatch — the input.flags read stays for direct/programmatic callers.
46
+ const dryRun = context.dryRun === true || input.flags["dry-run"] === true;
47
+ const concurrency = resolveConcurrency(input.flags["concurrency"], (m) => logger.warn(m));
37
48
  if (!targetId && !allMode) {
38
49
  return {
39
50
  data: {
@@ -54,20 +65,19 @@ export async function runRfcVerificationRefresh(input, context) {
54
65
  const diagnostics = [];
55
66
  const gitContext = await captureGitContext(workspaceRoot);
56
67
  const kernelVersion = await getKernelVersion(workspaceRoot);
57
- for (const fileName of allFiles) {
68
+ const processFile = async (fileName) => {
58
69
  const parsedFile = await readAndParseRfc(rfcDirPath, fileName);
59
70
  if (!parsedFile)
60
- continue;
71
+ return {};
61
72
  if ("error" in parsedFile)
62
- continue;
73
+ return {};
63
74
  const fm = parsedFile.parsed.frontmatter;
64
75
  const rfcId = String(fm["id"] ?? "");
65
76
  const status = String(fm["status"] ?? "");
66
77
  if (targetId && rfcId.toLowerCase() !== targetId.toLowerCase())
67
- continue;
78
+ return {};
68
79
  if (status !== "implemented") {
69
- skipped.push({ rfcId, reason: "not implemented" });
70
- continue;
80
+ return { skippedEntry: { rfcId, reason: "not implemented" } };
71
81
  }
72
82
  const slug = rfcId.toLowerCase();
73
83
  const evidenceFileName = `${slug}.generated.yaml`;
@@ -84,14 +94,9 @@ export async function runRfcVerificationRefresh(input, context) {
84
94
  catch {
85
95
  // file doesn't exist or can't be parsed
86
96
  }
87
- if (!existingEnvelope) {
88
- skipped.push({ rfcId, reason: "no evidence envelope" });
89
- continue;
90
- }
91
97
  const acceptance = fm["acceptance"];
92
- if (!Array.isArray(acceptance) || acceptance.length === 0) {
93
- skipped.push({ rfcId, reason: "no evidence envelope" });
94
- continue;
98
+ if (!existingEnvelope || !Array.isArray(acceptance) || acceptance.length === 0) {
99
+ return { skippedEntry: { rfcId, reason: "no evidence envelope" } };
95
100
  }
96
101
  const probes = acceptance;
97
102
  const probeRecords = [];
@@ -112,34 +117,63 @@ export async function runRfcVerificationRefresh(input, context) {
112
117
  const envelope = buildEvidenceEnvelope(rfcId, String(fm["title"] ?? ""), String(fm["status"] ?? ""), rfcMarkdown, probes, probeRecords, gitContext, kernelVersion, existingEnvelope.emittedAt);
113
118
  envelope.lastRefreshedAt = now;
114
119
  if (!dryRun) {
115
- const yamlContent = `${buildGeneratedHeader({ filePath: evidenceRelPath, ownerCommand: "rfc.verification.refresh" })}${yamlStringify(envelope)}\n`;
116
- await writeFileAtomic(evidenceAbsPath, yamlContent);
120
+ // RFC-1237: emit-canonical serialization — emit owns these envelopes;
121
+ // refresh owns content freshness, never file identity (OWN-DUP-01).
122
+ // Port write routes through recording IO under kernel --dry-run.
123
+ await io.writeFile(evidenceAbsPath, serializeEvidenceEnvelope(envelope));
117
124
  }
118
125
  const probesFailed = probeRecords.filter((r) => !r.ok).length;
119
- refreshed.push({
120
- rfcId,
121
- file: evidenceRelPath,
122
- overall: envelope.overall,
123
- probesTotal: probeRecords.length,
124
- probesFailed,
125
- });
126
- if (envelope.overall === "fail") {
127
- diagnostics.push({
128
- ruleId: "RFC-REFRESH-01",
129
- severity: "error",
130
- file: evidenceRelPath,
131
- message: `${rfcId}: refresh overall is "fail" — ${probesFailed}/${probeRecords.length} probe(s) failed.`,
132
- });
133
- }
126
+ const previousOverall = existingEnvelope.overall;
134
127
  if (outputFormat === "pretty") {
135
- logger.info(`[refresh] ${rfcId} → ${evidenceRelPath} (${envelope.overall}, ${probeRecords.length} probes${dryRun ? ", dry-run" : ""})`);
128
+ const drift = previousOverall !== envelope.overall ? `, was ${previousOverall}` : "";
129
+ logger.info(`[refresh] ${rfcId} → ${evidenceRelPath} (${envelope.overall}, ${probeRecords.length} probes${drift}${dryRun ? ", dry-run" : ""})`);
136
130
  }
131
+ return {
132
+ refreshedEntry: {
133
+ rfcId,
134
+ file: evidenceRelPath,
135
+ overall: envelope.overall,
136
+ previousOverall,
137
+ probesTotal: probeRecords.length,
138
+ probesFailed,
139
+ },
140
+ ...(envelope.overall === "fail"
141
+ ? {
142
+ diagnostic: {
143
+ ruleId: "RFC-REFRESH-01",
144
+ severity: "error",
145
+ file: evidenceRelPath,
146
+ message: `${rfcId}: refresh overall is "fail" — ${probesFailed}/${probeRecords.length} probe(s) failed${previousOverall === "pass" ? " (regressed: was pass)" : ""}.`,
147
+ },
148
+ }
149
+ : {}),
150
+ };
151
+ };
152
+ const results = await mapWithConcurrency(allFiles, concurrency, processFile);
153
+ for (const r of results) {
154
+ if (r.refreshedEntry)
155
+ refreshed.push(r.refreshedEntry);
156
+ if (r.skippedEntry)
157
+ skipped.push(r.skippedEntry);
158
+ if (r.diagnostic)
159
+ diagnostics.push(r.diagnostic);
137
160
  }
138
161
  const passed = refreshed.filter((r) => r.overall === "pass").length;
139
162
  const failed = refreshed.filter((r) => r.overall === "fail").length;
140
163
  const hasFailures = failed > 0;
141
164
  const hasSkippedNoEnvelope = skipped.some((s) => s.reason === "no evidence envelope");
142
165
  const status = hasFailures ? "fail" : "pass";
166
+ const delta = {
167
+ recovered: refreshed
168
+ .filter((r) => r.previousOverall === "fail" && r.overall === "pass")
169
+ .map((r) => r.rfcId),
170
+ regressed: refreshed
171
+ .filter((r) => r.previousOverall === "pass" && r.overall === "fail")
172
+ .map((r) => r.rfcId),
173
+ };
174
+ const deltaSummary = delta.recovered.length + delta.regressed.length > 0
175
+ ? `, ${delta.regressed.length} regressed, ${delta.recovered.length} recovered`
176
+ : "";
143
177
  return {
144
178
  data: {
145
179
  command: "rfc.verification.refresh",
@@ -147,6 +181,7 @@ export async function runRfcVerificationRefresh(input, context) {
147
181
  refreshed,
148
182
  skipped,
149
183
  diagnostics,
184
+ delta,
150
185
  summary: {
151
186
  total: refreshed.length,
152
187
  passed,
@@ -155,7 +190,7 @@ export async function runRfcVerificationRefresh(input, context) {
155
190
  },
156
191
  },
157
192
  exitCode: hasFailures || hasSkippedNoEnvelope ? 1 : 0,
158
- summary: `rfc.verification.refresh: ${refreshed.length} refreshed, ${skipped.length} skipped`,
193
+ summary: `rfc.verification.refresh: ${refreshed.length} refreshed, ${skipped.length} skipped${deltaSummary}`,
159
194
  };
160
195
  }
161
196
  //# sourceMappingURL=verification-refresh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verification-refresh.js","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AAEF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAerC,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAwB,EACxB,OAA4B;IAE5B,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAE/C,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,0BAA0B;gBACnC,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;aACxD;YACD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,+EAA+E;SACzF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,SAAS,GAA8C,EAAE,CAAC;IAChE,MAAM,OAAO,GAA4C,EAAE,CAAC;IAC5D,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAE5D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,IAAI,OAAO,IAAI,UAAU;YAAE,SAAS;QACpC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE;YAAE,SAAS;QAEzE,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACnD,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,gBAAgB,GAAG,GAAG,IAAI,iBAAiB,CAAC;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAE7D,IAAI,gBAAgB,GAAgC,IAAI,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAyB,CAAC;YACtD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzD,gBAAgB,GAAG,MAAM,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,UAA+B,CAAC;QAC/C,MAAM,YAAY,GAAsC,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YACzD,YAAY,CAAC,IAAI,CAAC;gBAChB,KAAK;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,qBAAqB,CACpC,KAAK,EACL,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EACzB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAc,EACvC,WAAW,EACX,MAAM,EACN,YAAY,EACZ,UAAU,EACV,aAAa,EACb,gBAAgB,CAAC,SAAS,CAC3B,CAAC;QACF,QAAQ,CAAC,eAAe,GAAG,GAAG,CAAC;QAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,0BAA0B,EAAE,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnJ,MAAM,eAAe,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9D,SAAS,CAAC,IAAI,CAAC;YACb,KAAK;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,WAAW,EAAE,YAAY,CAAC,MAAM;YAChC,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,gBAAgB;gBACxB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,GAAG,KAAK,iCAAiC,YAAY,IAAI,YAAY,CAAC,MAAM,mBAAmB;aACzG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CACT,aAAa,KAAK,MAAM,eAAe,KAAK,QAAQ,CAAC,OAAO,KAAK,YAAY,CAAC,MAAM,UAAU,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAC3H,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC;IAC/B,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC;IACtF,MAAM,MAAM,GAA2C,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAErF,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,0BAA0B;YACnC,MAAM;YACN,SAAS;YACT,OAAO;YACP,WAAW;YACX,OAAO,EAAE;gBACP,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,MAAM;gBACN,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM;aACxB;SACF;QACD,QAAQ,EAAE,WAAW,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,6BAA6B,SAAS,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,UAAU;KAC9F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"verification-refresh.js","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AA2HrB,wBAAsB,cAAc,CAClC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,GAAG;IAAE,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAAC,CAyNjF"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AA2HrB,wBAAsB,cAAc,CAClC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,GAAG;IAAE,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAAC,CAwPjF"}
@@ -19,6 +19,11 @@ Mechanical v1 to v2 header migration across the workspace: 942 files rewritten
19
19
  <item>RFC-1097: sweep — werkstatt-engine clean
20
20
 
21
21
  Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
22
+ <item>Session-retro 2026-10-08: raw-file claiming — each .atif is claimed via
23
+ an atomic sibling `<name>.claim-<pid>-<token>` (io rename onto a nonexistent
24
+ target) before read/process/delete; another session's claim skips the file,
25
+ claims clean up in finally, dry-run creates none, keepRaw still preserves the
26
+ raw input. Closes the parallel-session read/delete race.</item>
22
27
  </CHANGE_SUMMARY>
23
28
  */
24
29
  import { ambientIo as fs } from "../../../src/utils/io.js";
@@ -161,7 +166,9 @@ export async function runSessionSave(input, context) {
161
166
  else {
162
167
  try {
163
168
  const entries = await fs.readdir(rawDirPath);
164
- rawFiles = entries.filter((e) => e.isFile).map((e) => e.name);
169
+ // Only *.atif files are processed — claimed intermediates
170
+ // (*.atif.claim-<pid>) and in-progress writer temp files are skipped.
171
+ rawFiles = entries.filter((e) => e.isFile && e.name.endsWith(".atif")).map((e) => e.name);
165
172
  }
166
173
  catch {
167
174
  rawFiles = [];
@@ -197,9 +204,26 @@ export async function runSessionSave(input, context) {
197
204
  const skipped = [];
198
205
  for (const rawFileName of rawFiles) {
199
206
  const rawFilePath = path.join(rawDirPath, rawFileName);
207
+ // Atomic claim: rename before reading so two concurrent session.save runs
208
+ // (parallel agent sessions) can't process the same file — the losing
209
+ // rename sees ENOENT and skips. Dry-run stays read-only by design.
210
+ let claimedPath = rawFilePath;
211
+ if (!dryRun) {
212
+ claimedPath = `${rawFilePath}.claim-${process.pid}`;
213
+ try {
214
+ await fs.rename(rawFilePath, claimedPath);
215
+ }
216
+ catch (err) {
217
+ if (err.code === "ENOENT") {
218
+ skipped.push({ rawFile: rawFileName, reason: "claimed by another process" });
219
+ continue;
220
+ }
221
+ throw err;
222
+ }
223
+ }
200
224
  let rawContent;
201
225
  try {
202
- rawContent = await fs.readFile(rawFilePath);
226
+ rawContent = await fs.readFile(claimedPath);
203
227
  }
204
228
  catch (err) {
205
229
  if (err.code === "ENOENT") {
@@ -239,7 +263,7 @@ export async function runSessionSave(input, context) {
239
263
  // Delete raw file even when skipping — otherwise .atif files accumulate
240
264
  if (!dryRun && !keepRaw) {
241
265
  try {
242
- await trashPath(rawFilePath);
266
+ await trashPath(claimedPath);
243
267
  }
244
268
  catch (err) {
245
269
  if (err.code !== "ENOENT") {
@@ -247,6 +271,14 @@ export async function runSessionSave(input, context) {
247
271
  }
248
272
  }
249
273
  }
274
+ else if (!dryRun && claimedPath !== rawFilePath) {
275
+ try {
276
+ await fs.rename(claimedPath, rawFilePath);
277
+ }
278
+ catch {
279
+ // best-effort restore
280
+ }
281
+ }
250
282
  continue;
251
283
  }
252
284
  catch {
@@ -265,10 +297,11 @@ export async function runSessionSave(input, context) {
265
297
  catch (metricsErr) {
266
298
  logger.warn(`[metrics] Failed to generate session metrics for ${id}: ${metricsErr.message}`);
267
299
  }
268
- // Delete raw file unless --keep-raw
300
+ // Delete raw file unless --keep-raw (then restore the original name —
301
+ // the claim suffix is an internal detail, not part of the file's name)
269
302
  if (!keepRaw) {
270
303
  try {
271
- await trashPath(rawFilePath);
304
+ await trashPath(claimedPath);
272
305
  }
273
306
  catch (err) {
274
307
  if (err.code !== "ENOENT") {
@@ -276,6 +309,14 @@ export async function runSessionSave(input, context) {
276
309
  }
277
310
  }
278
311
  }
312
+ else if (claimedPath !== rawFilePath) {
313
+ try {
314
+ await fs.rename(claimedPath, rawFilePath);
315
+ }
316
+ catch {
317
+ // best-effort restore — the claimed name remains, still recoverable
318
+ }
319
+ }
279
320
  }
280
321
  const result = {
281
322
  command: "session.save",