@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
@@ -1,40 +1,186 @@
1
1
  /*
2
2
  <MODULE_CONTRACT>
3
- <purpose>queue.validate command handler (RFC-1140) — validates a queue
4
- manifest and reports derived per-item pipeline status plus the next
5
- actionable item. Read-only; the orchestrator runs this before a queued batch.</purpose>
3
+ <purpose>queue.validate command handler (RFC-1140 + RFC-1250) — validates a
4
+ queue manifest and its decision-ledger sibling, reports derived per-item
5
+ pipeline status plus the next actionable item. QUEUE-07 blocks implementable
6
+ items carrying open decisions. Read-only; the orchestrator runs this before a
7
+ queued batch.</purpose>
6
8
  <non-goals>
7
9
  <item>Do not execute the queue — this command validates and previews only.</item>
8
10
  <item>Do not mutate any files.</item>
9
11
  </non-goals>
10
12
  </MODULE_CONTRACT>
11
13
  <CHANGE_SUMMARY>
14
+ <item>RFC-1250: decision-ledger wiring — QUEUE-07 open-decision gate on
15
+ executable items (un-parked opens only; parked items are already gated),
16
+ per-item decisions counts plus top-level totals, `next` excludes parked and
17
+ QUEUE-07-blocked items with dependsOn cascade.</item>
12
18
  <item>RFC-1140: initial queue.validate handler.</item>
13
19
  <item>RFC-1140: steps 1-4 — shared resolver, queue module, registration
14
20
 
15
21
  Extract pipeline-status derivation into packages/forge/src/pipeline-status.ts, refactor rfc.pipeline.status onto it, add os/queue module with queue.validate command, register in WORKSHOP_MODULE_MAP.forge + bin/cli.ts + package.json exports.</item>
22
+ <item>RFC-1250: review wave — QUEUE-07 gates un-parked opens only, ledger binding checks, fail-closed loader
23
+
24
+ REVIEW-RFC-1250-01 findings: QUEUE-07 no longer fires on parked entries
25
+ (the park is the containment — a parked queue stays resumable and the
26
+ decision window arbitrates it); loader fails open only on ENOENT —
27
+ other read errors are QUEUE-01; ledger gains queue/id-stem binding
28
+ (QUEUE-02), Q-N uniqueness (QUEUE-05), and QUEUE-08 hygiene warnings
29
+ (missing answers, foreign doc ids); next excludes QUEUE-07-blocked
30
+ items; top-level decision totals added. Orchestrator pre-flight treats
31
+ QUEUE-07 as the window agenda — structural errors still stop the batch;
32
+ maturation skips parked/deferred items; uncovered imperative ask sites
33
+ gain collect riders (ADR code-trace, NC markers, audit-verdict guard).</item>
34
+ <item>RFC-1250: re-review wave — blocked dependsOn cascade, manifest-failure gating, generated artifacts</item>
16
35
  </CHANGE_SUMMARY>
17
36
  */
18
37
  import { deriveQueueReport } from "../../../src/pipeline-status.js";
19
- import { loadQueueManifest } from "../manifest.js";
38
+ import { loadDecisionLedger, loadQueueManifest } from "../manifest.js";
39
+ function summarizeDecisions(ledger) {
40
+ const summaries = new Map();
41
+ if (!ledger)
42
+ return summaries;
43
+ for (const entry of ledger.items) {
44
+ const doc = entry.doc.toUpperCase();
45
+ const s = summaries.get(doc) ?? {
46
+ open: 0,
47
+ openUnparked: 0,
48
+ answered: 0,
49
+ deferred: 0,
50
+ autoResolved: 0,
51
+ parked: false,
52
+ };
53
+ if (entry.status === "open") {
54
+ s.open += 1;
55
+ if (entry.parked === true) {
56
+ s.parked = true;
57
+ }
58
+ else {
59
+ s.openUnparked += 1;
60
+ }
61
+ }
62
+ else if (entry.status === "answered") {
63
+ s.answered += 1;
64
+ }
65
+ else if (entry.status === "deferred") {
66
+ s.deferred += 1;
67
+ }
68
+ else if (entry.status === "auto-resolved") {
69
+ s.autoResolved += 1;
70
+ }
71
+ summaries.set(doc, s);
72
+ }
73
+ return summaries;
74
+ }
75
+ /** Fixed-point `dependsOn` cascade: a dependent of an excluded root is excluded. */
76
+ function cascadeDependents(roots, dependsOn) {
77
+ const excluded = new Set(roots);
78
+ let changed = true;
79
+ while (changed) {
80
+ changed = false;
81
+ for (const [itemId, deps] of dependsOn) {
82
+ if (excluded.has(itemId))
83
+ continue;
84
+ if (deps.some((dep) => excluded.has(dep))) {
85
+ excluded.add(itemId);
86
+ changed = true;
87
+ }
88
+ }
89
+ }
90
+ return excluded;
91
+ }
92
+ /**
93
+ * RFC-1250 parking: an item is parked when its ledger carries `deferred`
94
+ * entries (operator parked it at a window) or `open` entries with
95
+ * `parked: true` (system hard-stop during execution). An item whose in-queue
96
+ * `dependsOn` target is parked is itself parked — fixed-point cascade.
97
+ */
98
+ function computeParkedDocIds(itemIds, dependsOn, summaries) {
99
+ const roots = new Set();
100
+ for (const id of itemIds) {
101
+ const s = summaries.get(id.toUpperCase());
102
+ if (s && (s.deferred > 0 || s.parked))
103
+ roots.add(id.toUpperCase());
104
+ }
105
+ return cascadeDependents(roots, dependsOn);
106
+ }
107
+ /** QUEUE-07: an item derivable to the implement stage must not carry open decisions. */
108
+ function isImplementable(item) {
109
+ return item.pipelineStep === "implement" || (item.kind === "adr" && item.status === "pending");
110
+ }
20
111
  export async function runQueueValidate(input, context) {
21
112
  const { workspaceRoot, logger, outputFormat } = context;
22
113
  const file = input.flags["file"];
23
114
  if (!file) {
24
115
  throw new Error("queue.validate requires --file <path-to-manifest.yaml>");
25
116
  }
26
- const { manifest, errors, warnings } = await loadQueueManifest(workspaceRoot, file);
27
- const report = errors.length === 0
117
+ const { manifest, errors, warnings, dependsOn } = await loadQueueManifest(workspaceRoot, file);
118
+ // The ledger is part of the queue's durable state — its load errors block.
119
+ const { ledger, errors: ledgerErrors, warnings: ledgerWarnings, } = await loadDecisionLedger(workspaceRoot, file, manifest);
120
+ errors.push(...ledgerErrors);
121
+ warnings.push(...ledgerWarnings);
122
+ const summaries = summarizeDecisions(ledger);
123
+ const parkedIds = computeParkedDocIds(manifest.items.map((i) => i.id), dependsOn, summaries);
124
+ // QUEUE-07: an executable item — implementable and not already parked —
125
+ // must not carry un-parked open decisions. Parked items are already
126
+ // excluded from execution by the park itself; their opens surface through
127
+ // the decision window's arbitration, not a second gate.
128
+ const derivable = errors.length === 0
28
129
  ? await deriveQueueReport(workspaceRoot, manifest.items.map((i) => i.id))
29
130
  : { items: [], next: null };
131
+ const blockedIds = new Set();
132
+ for (const item of derivable.items) {
133
+ const s = summaries.get(item.id);
134
+ if (isImplementable(item) && !parkedIds.has(item.id) && s && s.openUnparked > 0) {
135
+ blockedIds.add(item.id);
136
+ errors.push({
137
+ ruleId: "QUEUE-07",
138
+ severity: "error",
139
+ message: `Item "${item.id}" is implementable but carries ${s.openUnparked} open decision(s) — resolve the decision window first`,
140
+ file,
141
+ });
142
+ }
143
+ }
144
+ // Excluded from `next`: parked items, QUEUE-07-blocked items, and the
145
+ // dependsOn dependents of either — a dependent must not execute while its
146
+ // dependency sits unresolved behind the window.
147
+ const excludedFromNext = new Set([...parkedIds, ...cascadeDependents(blockedIds, dependsOn)]);
148
+ const report = {
149
+ items: derivable.items,
150
+ next: derivable.items.find((i) => (i.status === "pending" || i.status === "in-progress") && !excludedFromNext.has(i.id))?.id ?? null,
151
+ };
152
+ for (const item of report.items) {
153
+ const s = summaries.get(item.id);
154
+ if (s) {
155
+ item.decisions = {
156
+ open: s.open,
157
+ deferred: s.deferred,
158
+ autoResolved: s.autoResolved,
159
+ };
160
+ }
161
+ }
30
162
  const status = errors.length === 0 ? "pass" : "fail";
163
+ const decisionTotals = ledger
164
+ ? {
165
+ open: ledger.items.filter((e) => e.status === "open").length,
166
+ answered: ledger.items.filter((e) => e.status === "answered").length,
167
+ deferred: ledger.items.filter((e) => e.status === "deferred").length,
168
+ autoResolved: ledger.items.filter((e) => e.status === "auto-resolved").length,
169
+ }
170
+ : undefined;
31
171
  if (outputFormat === "pretty") {
32
172
  logger.section(`Queue: ${manifest.id || file}`);
33
173
  for (const item of report.items) {
34
174
  const step = item.pipelineStep ? ` (${item.pipelineStep})` : "";
35
- logger.info(` ${item.id}: ${item.status}${step}`);
175
+ const decisions = item.decisions
176
+ ? ` [decisions: ${item.decisions.open} open, ${item.decisions.deferred} deferred, ${item.decisions.autoResolved} auto-resolved]`
177
+ : "";
178
+ logger.info(` ${item.id}: ${item.status}${step}${decisions}`);
36
179
  }
37
180
  logger.info(`next: ${report.next ?? "—"}`);
181
+ if (decisionTotals) {
182
+ logger.info(`decisions: ${decisionTotals.open} open, ${decisionTotals.answered} answered, ${decisionTotals.autoResolved} auto-resolved, ${decisionTotals.deferred} deferred`);
183
+ }
38
184
  for (const w of warnings) {
39
185
  logger.warn(` ${w.ruleId}: ${w.message}`);
40
186
  }
@@ -50,6 +196,7 @@ export async function runQueueValidate(input, context) {
50
196
  file,
51
197
  items: report.items,
52
198
  next: report.next,
199
+ decisions: decisionTotals,
53
200
  errors,
54
201
  warnings,
55
202
  },
@@ -1 +1 @@
1
- {"version":3,"file":"queue-validate.js","sourceRoot":"","sources":["../../../../os/queue/handlers/queue-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AAOF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAwB,EACxB,OAA4B;IAE5B,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAExD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAuB,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAEpF,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,CAAC;QACjB,CAAC,CAAC,MAAM,iBAAiB,CACrB,aAAa,EACb,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChC;QACH,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAErD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,UAAU,QAAQ,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,gBAAgB;YACzB,MAAM;YACN,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM;YACN,QAAQ;SACT;QACD,OAAO,EACL,MAAM,KAAK,MAAM;YACf,CAAC,CAAC,UAAU,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,mBAAmB,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE;YAC1F,CAAC,CAAC,2BAA2B,MAAM,CAAC,MAAM,WAAW;QACzD,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"queue-validate.js","sourceRoot":"","sources":["../../../../os/queue/handlers/queue-validate.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import type { Diagnostic } from "../../src/types.ts";
2
- import type { QueueManifest } from "./types.ts";
2
+ import type { DecisionLedger, QueueManifest } from "./types.ts";
3
3
  export interface LoadedQueueManifest {
4
4
  manifest: QueueManifest;
5
5
  errors: Diagnostic[];
6
6
  warnings: Diagnostic[];
7
+ /** In-queue dependsOn edges resolved from document frontmatter (RFC-1250 parking cascade). */
8
+ dependsOn: Map<string, string[]>;
7
9
  }
8
10
  /**
9
11
  * Load and validate a queue manifest. Blocking errors: unreadable/invalid
@@ -11,4 +13,18 @@ export interface LoadedQueueManifest {
11
13
  * item ids, duplicates. Non-blocking: dependsOn order violations.
12
14
  */
13
15
  export declare function loadQueueManifest(workspaceRoot: string, filePath: string): Promise<LoadedQueueManifest>;
16
+ export interface LoadedDecisionLedger {
17
+ ledger: DecisionLedger | null;
18
+ errors: Diagnostic[];
19
+ warnings: Diagnostic[];
20
+ }
21
+ /** Manifest `docs/queues/<id>.yaml` → sibling ledger `docs/queues/<id>.decisions.yaml`. */
22
+ export declare function decisionLedgerPath(manifestPath: string): string;
23
+ /**
24
+ * Load the decision ledger sibling of a queue manifest. An absent ledger is
25
+ * legal — it means zero recorded decisions. An unreadable or schema-invalid
26
+ * ledger joins the manifest load path as a QUEUE-01 blocking error: the ledger
27
+ * is part of the queue's durable state.
28
+ */
29
+ export declare function loadDecisionLedger(workspaceRoot: string, filePath: string, manifest?: QueueManifest): Promise<LoadedDecisionLedger>;
14
30
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../os/queue/manifest.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAWD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAqI9B"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../os/queue/manifest.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,8FAA8F;IAC9F,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAClC;AAWD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAoJ9B;AAMD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAkI/B"}
@@ -2,24 +2,44 @@
2
2
  <MODULE_CONTRACT>
3
3
  <purpose>Queue manifest loading and validation (RFC-1140) — YAML parse, zod
4
4
  schema, id↔filename stem check, item id pattern, document resolution across
5
- active and archive dirs, duplicate detection, and dependsOn order warnings.</purpose>
5
+ active and archive dirs, duplicate detection, and dependsOn order warnings.
6
+ Also loads the decision-ledger sibling (RFC-1250).</purpose>
6
7
  <non-goals>
7
8
  <item>Do not derive item status — that is src/pipeline-status.ts.</item>
8
9
  <item>Do not mutate the manifest file.</item>
9
10
  </non-goals>
10
11
  </MODULE_CONTRACT>
11
12
  <CHANGE_SUMMARY>
13
+ <item>RFC-1250: loadDecisionLedger — sibling stem.decisions.yaml resolution,
14
+ ENOENT-only absence (other read errors are QUEUE-01 blocking), schema check,
15
+ ledger↔manifest binding (queue/id stem QUEUE-02, duplicate Q-N QUEUE-05),
16
+ hygiene warnings QUEUE-08 (missing answers, foreign doc ids);
17
+ LoadedQueueManifest exposes resolved dependsOn edges for the parking
18
+ cascade.</item>
12
19
  <item>RFC-1140: initial manifest loader and validator.</item>
13
20
  <item>RFC-1140: steps 1-4 — shared resolver, queue module, registration
14
21
 
15
22
  Extract pipeline-status derivation into packages/forge/src/pipeline-status.ts, refactor rfc.pipeline.status onto it, add os/queue module with queue.validate command, register in WORKSHOP_MODULE_MAP.forge + bin/cli.ts + package.json exports.</item>
23
+ <item>RFC-1250: review wave — QUEUE-07 gates un-parked opens only, ledger binding checks, fail-closed loader
24
+
25
+ REVIEW-RFC-1250-01 findings: QUEUE-07 no longer fires on parked entries
26
+ (the park is the containment — a parked queue stays resumable and the
27
+ decision window arbitrates it); loader fails open only on ENOENT —
28
+ other read errors are QUEUE-01; ledger gains queue/id-stem binding
29
+ (QUEUE-02), Q-N uniqueness (QUEUE-05), and QUEUE-08 hygiene warnings
30
+ (missing answers, foreign doc ids); next excludes QUEUE-07-blocked
31
+ items; top-level decision totals added. Orchestrator pre-flight treats
32
+ QUEUE-07 as the window agenda — structural errors still stop the batch;
33
+ maturation skips parked/deferred items; uncovered imperative ask sites
34
+ gain collect riders (ADR code-trace, NC markers, audit-verdict guard).</item>
35
+ <item>RFC-1250: re-review wave — blocked dependsOn cascade, manifest-failure gating, generated artifacts</item>
16
36
  </CHANGE_SUMMARY>
17
37
  */
18
38
  import { ambientIo as fs } from "../../src/utils/io.js";
19
39
  import path from "node:path";
20
40
  import YAML from "yaml";
21
41
  import { resolveDocument } from "../../src/pipeline-status.js";
22
- import { QUEUE_ITEM_ID_PATTERN, queueManifestSchema } from "./types.js";
42
+ import { QUEUE_ITEM_ID_PATTERN, decisionLedgerSchema, queueManifestSchema } from "./types.js";
23
43
  function diag(ruleId, severity, message, file) {
24
44
  return { ruleId, severity, message, file };
25
45
  }
@@ -39,7 +59,12 @@ export async function loadQueueManifest(workspaceRoot, filePath) {
39
59
  }
40
60
  catch (e) {
41
61
  errors.push(diag("QUEUE-01", "error", `Cannot read queue manifest: ${e instanceof Error ? e.message : String(e)}`, displayPath));
42
- return { manifest: { id: "", createdAt: "", items: [] }, errors, warnings };
62
+ return {
63
+ manifest: { id: "", createdAt: "", items: [] },
64
+ errors,
65
+ warnings,
66
+ dependsOn: new Map(),
67
+ };
43
68
  }
44
69
  let raw;
45
70
  try {
@@ -47,14 +72,24 @@ export async function loadQueueManifest(workspaceRoot, filePath) {
47
72
  }
48
73
  catch (e) {
49
74
  errors.push(diag("QUEUE-01", "error", `YAML parse error: ${e instanceof Error ? e.message : String(e)}`, displayPath));
50
- return { manifest: { id: "", createdAt: "", items: [] }, errors, warnings };
75
+ return {
76
+ manifest: { id: "", createdAt: "", items: [] },
77
+ errors,
78
+ warnings,
79
+ dependsOn: new Map(),
80
+ };
51
81
  }
52
82
  const parsed = queueManifestSchema.safeParse(raw);
53
83
  if (!parsed.success) {
54
84
  for (const issue of parsed.error.issues) {
55
85
  errors.push(diag("QUEUE-01", "error", `Manifest schema violation at ${issue.path.join(".") || "<root>"}: ${issue.message}`, displayPath));
56
86
  }
57
- return { manifest: { id: "", createdAt: "", items: [] }, errors, warnings };
87
+ return {
88
+ manifest: { id: "", createdAt: "", items: [] },
89
+ errors,
90
+ warnings,
91
+ dependsOn: new Map(),
92
+ };
58
93
  }
59
94
  const manifest = parsed.data;
60
95
  // QUEUE-02: manifest id must equal the filename stem.
@@ -101,6 +136,92 @@ export async function loadQueueManifest(workspaceRoot, filePath) {
101
136
  }
102
137
  }
103
138
  }
104
- return { manifest, errors, warnings };
139
+ return { manifest, errors, warnings, dependsOn: resolvedDependsOn };
140
+ }
141
+ /** Manifest `docs/queues/<id>.yaml` → sibling ledger `docs/queues/<id>.decisions.yaml`. */
142
+ export function decisionLedgerPath(manifestPath) {
143
+ return manifestPath.replace(/\.(ya?ml)$/i, ".decisions.yaml");
144
+ }
145
+ /**
146
+ * Load the decision ledger sibling of a queue manifest. An absent ledger is
147
+ * legal — it means zero recorded decisions. An unreadable or schema-invalid
148
+ * ledger joins the manifest load path as a QUEUE-01 blocking error: the ledger
149
+ * is part of the queue's durable state.
150
+ */
151
+ export async function loadDecisionLedger(workspaceRoot, filePath, manifest) {
152
+ const errors = [];
153
+ const warnings = [];
154
+ const ledgerPath = decisionLedgerPath(filePath);
155
+ const absolutePath = path.isAbsolute(ledgerPath)
156
+ ? ledgerPath
157
+ : path.join(workspaceRoot, ledgerPath);
158
+ const displayPath = path.isAbsolute(ledgerPath)
159
+ ? path.relative(workspaceRoot, ledgerPath)
160
+ : ledgerPath;
161
+ let source;
162
+ try {
163
+ source = await fs.readFile(absolutePath);
164
+ }
165
+ catch (e) {
166
+ // ENOENT = legal absence (zero recorded decisions). Any other read
167
+ // failure (EACCES, EISDIR, …) is an unreadable durable artifact — the
168
+ // ledger must never fail open into "no decisions" or QUEUE-07 disarms.
169
+ if (e.code === "ENOENT") {
170
+ return { ledger: null, errors, warnings };
171
+ }
172
+ errors.push(diag("QUEUE-01", "error", `Cannot read decision ledger: ${e instanceof Error ? e.message : String(e)}`, displayPath));
173
+ return { ledger: null, errors, warnings };
174
+ }
175
+ let raw;
176
+ try {
177
+ raw = YAML.parse(source);
178
+ }
179
+ catch (e) {
180
+ errors.push(diag("QUEUE-01", "error", `Decision ledger YAML parse error: ${e instanceof Error ? e.message : String(e)}`, displayPath));
181
+ return { ledger: null, errors, warnings };
182
+ }
183
+ const parsed = decisionLedgerSchema.safeParse(raw);
184
+ if (!parsed.success) {
185
+ for (const issue of parsed.error.issues) {
186
+ errors.push(diag("QUEUE-01", "error", `Decision ledger schema violation at ${issue.path.join(".") || "<root>"}: ${issue.message}`, displayPath));
187
+ }
188
+ return { ledger: null, errors, warnings };
189
+ }
190
+ const ledger = parsed.data;
191
+ // Binding and hygiene checks require a successfully loaded manifest — when
192
+ // the manifest itself failed, the stub (empty id, no items) would blame a
193
+ // healthy ledger for a broken queue (QUEUE-02 against "") and flag every
194
+ // entry as foreign (QUEUE-08). The manifest failure already blocks.
195
+ const manifestId = manifest?.id ?? "";
196
+ const manifestReady = manifestId !== "";
197
+ // QUEUE-02-family binding: the ledger belongs to exactly one manifest —
198
+ // `queue` names the manifest id and `id` names the ledger filename stem
199
+ // (`<manifest-stem>.decisions`). A misplaced or copy-pasted ledger must not
200
+ // silently apply foreign decisions to this queue.
201
+ const ledgerStem = path.basename(absolutePath).replace(/\.(ya?ml)$/i, "");
202
+ if (manifestReady && ledger.queue !== manifestId) {
203
+ errors.push(diag("QUEUE-02", "error", `Decision ledger queue "${ledger.queue}" does not match manifest id "${manifestId}"`, displayPath));
204
+ }
205
+ if (ledger.id !== ledgerStem) {
206
+ errors.push(diag("QUEUE-02", "error", `Decision ledger id "${ledger.id}" does not match filename stem "${ledgerStem}"`, displayPath));
207
+ }
208
+ // QUEUE-05-family: decision ids are queue-global — window codes and
209
+ // PENDING DECISION markers address them, so duplicates corrupt arbitration.
210
+ const seenDecisions = new Set();
211
+ const manifestDocs = new Set((manifest?.items ?? []).map((i) => i.id.trim().toUpperCase()));
212
+ for (const entry of ledger.items) {
213
+ if (seenDecisions.has(entry.id)) {
214
+ errors.push(diag("QUEUE-05", "error", `Duplicate decision id "${entry.id}"`, displayPath));
215
+ continue;
216
+ }
217
+ seenDecisions.add(entry.id);
218
+ if ((entry.status === "answered" || entry.status === "auto-resolved") && !entry.answer) {
219
+ warnings.push(diag("QUEUE-08", "warning", `Decision "${entry.id}" is ${entry.status} but carries no answer — implement has nothing to bind`, displayPath));
220
+ }
221
+ if (manifestReady && !manifestDocs.has(entry.doc.toUpperCase())) {
222
+ warnings.push(diag("QUEUE-08", "warning", `Decision "${entry.id}" targets "${entry.doc}" which is not a manifest item — invisible to this queue`, displayPath));
223
+ }
224
+ }
225
+ return { ledger, errors, warnings };
105
226
  }
106
227
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../os/queue/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../os/queue/manifest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue.module.d.ts","sourceRoot":"","sources":["../../../os/queue/queue.module.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CAsCnE"}
1
+ {"version":3,"file":"queue.module.d.ts","sourceRoot":"","sources":["../../../os/queue/queue.module.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoDnE"}
@@ -13,6 +13,20 @@ Extract pipeline-status derivation into packages/forge/src/pipeline-status.ts, r
13
13
  <item>RFC-1140: queue.validate missing contract/rules metadata (DNA-91)
14
14
 
15
15
  fo-review REVIEW-CODE-2026-09-23-01 finding: declare contract queue and emitted ruleIds QUEUE-01..06 so validator.inventory.generate does not fail closed. Manifest regenerated.</item>
16
+ <item>RFC-1250: review wave — QUEUE-07 gates un-parked opens only, ledger binding checks, fail-closed loader
17
+
18
+ REVIEW-RFC-1250-01 findings: QUEUE-07 no longer fires on parked entries
19
+ (the park is the containment — a parked queue stays resumable and the
20
+ decision window arbitrates it); loader fails open only on ENOENT —
21
+ other read errors are QUEUE-01; ledger gains queue/id-stem binding
22
+ (QUEUE-02), Q-N uniqueness (QUEUE-05), and QUEUE-08 hygiene warnings
23
+ (missing answers, foreign doc ids); next excludes QUEUE-07-blocked
24
+ items; top-level decision totals added. Orchestrator pre-flight treats
25
+ QUEUE-07 as the window agenda — structural errors still stop the batch;
26
+ maturation skips parked/deferred items; uncovered imperative ask sites
27
+ gain collect riders (ADR code-trace, NC markers, audit-verdict guard).</item>
28
+ <item>RFC-1250: re-review wave — blocked dependsOn cascade, manifest-failure gating, generated artifacts</item>
29
+ <history>RFC-1250</history>
16
30
  </CHANGE_SUMMARY>
17
31
  */
18
32
  export async function createForgeQueueModule() {
@@ -25,12 +39,26 @@ export async function createForgeQueueModule() {
25
39
  commands: [
26
40
  {
27
41
  name: "queue.validate",
28
- description: "Validate a queue manifest (docs/queues/*.yaml) and report derived " +
29
- "per-item pipeline status plus the next actionable item. Read-only — " +
30
- "the pipeline orchestrator runs this before starting a queued batch (RFC-1140). Required flags: `--file`.",
42
+ description: "Validate a queue manifest (docs/queues/*.yaml) and its decision " +
43
+ "ledger sibling, report derived per-item pipeline status plus the " +
44
+ "next actionable item. QUEUE-07 blocks implementable items carrying " +
45
+ "un-parked open decisions (RFC-1250); QUEUE-08 warns on ledger " +
46
+ "hygiene issues (missing answers, foreign doc ids). Read-only — " +
47
+ "the pipeline orchestrator runs this before a queued batch and the " +
48
+ "decision window consumes its diagnostics (RFC-1140). " +
49
+ "Required flags: `--file`.",
31
50
  scope: "workspace",
32
51
  contract: "queue",
33
- rules: ["QUEUE-01", "QUEUE-02", "QUEUE-03", "QUEUE-04", "QUEUE-05", "QUEUE-06"],
52
+ rules: [
53
+ "QUEUE-01",
54
+ "QUEUE-02",
55
+ "QUEUE-03",
56
+ "QUEUE-04",
57
+ "QUEUE-05",
58
+ "QUEUE-06",
59
+ "QUEUE-07",
60
+ "QUEUE-08",
61
+ ],
34
62
  mutatesState: false,
35
63
  reads: [
36
64
  "docs/queues/*.yaml",
@@ -1 +1 @@
1
- {"version":3,"file":"queue.module.js","sourceRoot":"","sources":["../../../os/queue/queue.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AAIF,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC1E,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,YAAY;QACrB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,oEAAoE;oBACpE,sEAAsE;oBACtE,0GAA0G;gBAC5G,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;gBAC/E,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE;oBACL,oBAAoB;oBACpB,mBAAmB;oBACnB,mBAAmB;oBACnB,kBAAkB;oBAClB,iBAAiB;iBAClB;gBACD,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE;oBACL,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;wBACd,WAAW,EAAE,uCAAuC;qBACrD;iBACF;gBACD,OAAO,EAAE,gBAAgB;aAC1B;SACF;QACD,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"queue.module.js","sourceRoot":"","sources":["../../../os/queue/queue.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BE;AAIF,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC1E,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,YAAY;QACrB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,kEAAkE;oBAClE,mEAAmE;oBACnE,qEAAqE;oBACrE,gEAAgE;oBAChE,iEAAiE;oBACjE,oEAAoE;oBACpE,uDAAuD;oBACvD,2BAA2B;gBAC7B,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE;oBACL,UAAU;oBACV,UAAU;oBACV,UAAU;oBACV,UAAU;oBACV,UAAU;oBACV,UAAU;oBACV,UAAU;oBACV,UAAU;iBACX;gBACD,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE;oBACL,oBAAoB;oBACpB,mBAAmB;oBACnB,mBAAmB;oBACnB,kBAAkB;oBAClB,iBAAiB;iBAClB;gBACD,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE;oBACL,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;wBACd,WAAW,EAAE,uCAAuC;qBACrD;iBACF;gBACD,OAAO,EAAE,gBAAgB;aAC1B;SACF;QACD,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC"}