@warpgogol/forge 5.1.2 → 5.2.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 (103) hide show
  1. package/AGENTS.md +15 -2
  2. package/bin/cli.ts +4 -0
  3. package/dist/bin/cli.js +4 -0
  4. package/dist/bin/cli.js.map +1 -1
  5. package/dist/os/adr/handlers/implement-stamp.d.ts.map +1 -1
  6. package/dist/os/adr/handlers/implement-stamp.js +32 -2
  7. package/dist/os/adr/handlers/implement-stamp.js.map +1 -1
  8. package/dist/os/adr/types.d.ts +2 -1
  9. package/dist/os/adr/types.d.ts.map +1 -1
  10. package/dist/os/naming/naming-convention.d.ts.map +1 -1
  11. package/dist/os/naming/naming-convention.js +2 -0
  12. package/dist/os/naming/naming-convention.js.map +1 -1
  13. package/dist/os/queue/handlers/queue-validate.d.ts +4 -0
  14. package/dist/os/queue/handlers/queue-validate.d.ts.map +1 -0
  15. package/dist/os/queue/handlers/queue-validate.js +62 -0
  16. package/dist/os/queue/handlers/queue-validate.js.map +1 -0
  17. package/dist/os/queue/index.d.ts +5 -0
  18. package/dist/os/queue/index.d.ts.map +1 -0
  19. package/dist/os/queue/index.js +18 -0
  20. package/dist/os/queue/index.js.map +1 -0
  21. package/dist/os/queue/manifest.d.ts +14 -0
  22. package/dist/os/queue/manifest.d.ts.map +1 -0
  23. package/dist/os/queue/manifest.js +110 -0
  24. package/dist/os/queue/manifest.js.map +1 -0
  25. package/dist/os/queue/queue.module.d.ts +3 -0
  26. package/dist/os/queue/queue.module.d.ts.map +1 -0
  27. package/dist/os/queue/queue.module.js +56 -0
  28. package/dist/os/queue/queue.module.js.map +1 -0
  29. package/dist/os/queue/types.d.ts +25 -0
  30. package/dist/os/queue/types.d.ts.map +1 -0
  31. package/dist/os/queue/types.js +28 -0
  32. package/dist/os/queue/types.js.map +1 -0
  33. package/dist/os/rfc/frontmatter-io.d.ts.map +1 -1
  34. package/dist/os/rfc/frontmatter-io.js +1 -0
  35. package/dist/os/rfc/frontmatter-io.js.map +1 -1
  36. package/dist/os/rfc/handlers/pipeline-status.d.ts +2 -7
  37. package/dist/os/rfc/handlers/pipeline-status.d.ts.map +1 -1
  38. package/dist/os/rfc/handlers/pipeline-status.js +15 -57
  39. package/dist/os/rfc/handlers/pipeline-status.js.map +1 -1
  40. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  41. package/dist/os/rfc/handlers/validate-rules.js +6 -1
  42. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  43. package/dist/os/werkstatt/handlers/workspace-deps.d.ts.map +1 -1
  44. package/dist/os/werkstatt/handlers/workspace-deps.js +4 -3
  45. package/dist/os/werkstatt/handlers/workspace-deps.js.map +1 -1
  46. package/dist/src/onboarding/create.d.ts.map +1 -1
  47. package/dist/src/onboarding/create.js +5 -2
  48. package/dist/src/onboarding/create.js.map +1 -1
  49. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  50. package/dist/src/onboarding/doctor.js +15 -0
  51. package/dist/src/onboarding/doctor.js.map +1 -1
  52. package/dist/src/onboarding/init.d.ts +1 -0
  53. package/dist/src/onboarding/init.d.ts.map +1 -1
  54. package/dist/src/onboarding/init.js.map +1 -1
  55. package/dist/src/onboarding/npm-token-check.d.ts +40 -0
  56. package/dist/src/onboarding/npm-token-check.d.ts.map +1 -0
  57. package/dist/src/onboarding/npm-token-check.js +104 -0
  58. package/dist/src/onboarding/npm-token-check.js.map +1 -0
  59. package/dist/src/onboarding/scaffold-project.d.ts.map +1 -1
  60. package/dist/src/onboarding/scaffold-project.js +10 -0
  61. package/dist/src/onboarding/scaffold-project.js.map +1 -1
  62. package/dist/src/pipeline-status.d.ts +62 -0
  63. package/dist/src/pipeline-status.d.ts.map +1 -0
  64. package/dist/src/pipeline-status.js +220 -0
  65. package/dist/src/pipeline-status.js.map +1 -0
  66. package/dist/src/profiles/profile-schema.d.ts +2 -0
  67. package/dist/src/profiles/profile-schema.d.ts.map +1 -1
  68. package/dist/src/profiles/profile-schema.js +1 -0
  69. package/dist/src/profiles/profile-schema.js.map +1 -1
  70. package/dist/src/profiles/stack-profile.d.ts +1 -0
  71. package/dist/src/profiles/stack-profile.d.ts.map +1 -1
  72. package/dist/src/profiles/stack-profile.js +2 -0
  73. package/dist/src/profiles/stack-profile.js.map +1 -1
  74. package/os/adr/handlers/implement-stamp.ts +34 -2
  75. package/os/adr/types.ts +3 -1
  76. package/os/naming/naming-convention.ts +2 -0
  77. package/os/queue/handlers/queue-validate.ts +83 -0
  78. package/os/queue/index.ts +19 -0
  79. package/os/queue/manifest.ts +183 -0
  80. package/os/queue/queue-validate.test.ts +177 -0
  81. package/os/queue/queue.module.ts +59 -0
  82. package/os/queue/types.ts +49 -0
  83. package/os/rfc/frontmatter-io.ts +1 -0
  84. package/os/rfc/handlers/pipeline-status.ts +24 -67
  85. package/os/rfc/handlers/validate-rules.ts +8 -1
  86. package/os/werkstatt/handlers/workspace-deps.ts +4 -3
  87. package/package.json +17 -1
  88. package/profiles/site-workshop.yaml +654 -0
  89. package/skills/fo/fo-idea-create-rfc/acceptance-criteria-standard.md +1 -1
  90. package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +46 -1
  91. package/src/onboarding/create.ts +5 -2
  92. package/src/onboarding/doctor-token-check.test.ts +124 -0
  93. package/src/onboarding/doctor.ts +17 -0
  94. package/src/onboarding/init.ts +1 -0
  95. package/src/onboarding/npm-token-check.ts +140 -0
  96. package/src/onboarding/scaffold-project.ts +11 -0
  97. package/src/onboarding/site-workshop-profile.test.ts +84 -0
  98. package/src/pipeline-status.test.ts +192 -0
  99. package/src/pipeline-status.ts +319 -0
  100. package/src/profiles/profile-schema.ts +2 -0
  101. package/src/profiles/stack-profile.ts +2 -0
  102. package/src/tests/adr-implement-stamp.test.ts +150 -0
  103. package/src/tests/profile-schema.test.ts +1 -1
@@ -0,0 +1,110 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Queue manifest loading and validation (RFC-1140) — YAML parse, zod
4
+ schema, id↔filename stem check, item id pattern, document resolution across
5
+ active and archive dirs, duplicate detection, and dependsOn order warnings.</purpose>
6
+ <non-goals>
7
+ <item>Do not derive item status — that is src/pipeline-status.ts.</item>
8
+ <item>Do not mutate the manifest file.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+ <CHANGE_SUMMARY>
12
+ <item>RFC-1140: initial manifest loader and validator.</item>
13
+ <item>RFC-1140: steps 1-4 — shared resolver, queue module, registration
14
+
15
+ 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>
16
+ </CHANGE_SUMMARY>
17
+ */
18
+ import fs from "node:fs/promises";
19
+ import path from "node:path";
20
+ import YAML from "yaml";
21
+ import { resolveDocument } from "../../src/pipeline-status.js";
22
+ import { QUEUE_ITEM_ID_PATTERN, queueManifestSchema } from "./types.js";
23
+ function diag(ruleId, severity, message, file) {
24
+ return { ruleId, severity, message, file };
25
+ }
26
+ /**
27
+ * Load and validate a queue manifest. Blocking errors: unreadable/invalid
28
+ * YAML, schema violations, id↔filename mismatch, malformed or unresolvable
29
+ * item ids, duplicates. Non-blocking: dependsOn order violations.
30
+ */
31
+ export async function loadQueueManifest(workspaceRoot, filePath) {
32
+ const errors = [];
33
+ const warnings = [];
34
+ const absolutePath = path.isAbsolute(filePath)
35
+ ? filePath
36
+ : path.join(workspaceRoot, filePath);
37
+ const displayPath = path.isAbsolute(filePath)
38
+ ? path.relative(workspaceRoot, filePath)
39
+ : filePath;
40
+ let source;
41
+ try {
42
+ source = await fs.readFile(absolutePath, "utf-8");
43
+ }
44
+ catch (e) {
45
+ errors.push(diag("QUEUE-01", "error", `Cannot read queue manifest: ${e instanceof Error ? e.message : String(e)}`, displayPath));
46
+ return { manifest: { id: "", createdAt: "", items: [] }, errors, warnings };
47
+ }
48
+ let raw;
49
+ try {
50
+ raw = YAML.parse(source);
51
+ }
52
+ catch (e) {
53
+ errors.push(diag("QUEUE-01", "error", `YAML parse error: ${e instanceof Error ? e.message : String(e)}`, displayPath));
54
+ return { manifest: { id: "", createdAt: "", items: [] }, errors, warnings };
55
+ }
56
+ const parsed = queueManifestSchema.safeParse(raw);
57
+ if (!parsed.success) {
58
+ for (const issue of parsed.error.issues) {
59
+ errors.push(diag("QUEUE-01", "error", `Manifest schema violation at ${issue.path.join(".") || "<root>"}: ${issue.message}`, displayPath));
60
+ }
61
+ return { manifest: { id: "", createdAt: "", items: [] }, errors, warnings };
62
+ }
63
+ const manifest = parsed.data;
64
+ // QUEUE-02: manifest id must equal the filename stem.
65
+ const stem = path.basename(absolutePath).replace(/\.(ya?ml)$/i, "");
66
+ if (manifest.id !== stem) {
67
+ errors.push(diag("QUEUE-02", "error", `Manifest id "${manifest.id}" does not match filename stem "${stem}"`, displayPath));
68
+ }
69
+ // QUEUE-03/04/05: item id pattern, resolution, duplicates.
70
+ const seen = new Set();
71
+ const resolvedDependsOn = new Map();
72
+ for (const item of manifest.items) {
73
+ const id = item.id.trim();
74
+ if (!QUEUE_ITEM_ID_PATTERN.test(id)) {
75
+ errors.push(diag("QUEUE-03", "error", `Item id "${item.id}" does not match ^(RFC|ADR)-\\d{4}$`, displayPath));
76
+ continue;
77
+ }
78
+ const upper = id.toUpperCase();
79
+ if (seen.has(upper)) {
80
+ errors.push(diag("QUEUE-05", "error", `Duplicate item id "${upper}"`, displayPath));
81
+ continue;
82
+ }
83
+ seen.add(upper);
84
+ const doc = await resolveDocument(workspaceRoot, upper);
85
+ if (!doc) {
86
+ errors.push(diag("QUEUE-04", "error", `Item "${upper}" does not resolve to a document in docs/rfcs/ or docs/adrs/ (incl. archive)`, displayPath));
87
+ continue;
88
+ }
89
+ const dependsOn = doc.frontmatter["dependsOn"];
90
+ if (Array.isArray(dependsOn)) {
91
+ resolvedDependsOn.set(upper, dependsOn.map((d) => String(d).toUpperCase()));
92
+ }
93
+ }
94
+ // QUEUE-06: dependsOn order — an item must not precede its in-queue dependency.
95
+ const order = new Map();
96
+ manifest.items.forEach((item, index) => order.set(item.id.trim().toUpperCase(), index));
97
+ for (const [itemId, deps] of resolvedDependsOn) {
98
+ const itemIndex = order.get(itemId);
99
+ if (itemIndex === undefined)
100
+ continue;
101
+ for (const dep of deps) {
102
+ const depIndex = order.get(dep);
103
+ if (depIndex !== undefined && depIndex > itemIndex) {
104
+ warnings.push(diag("QUEUE-06", "warning", `Item "${itemId}" (position ${itemIndex + 1}) precedes its dependsOn dependency "${dep}" (position ${depIndex + 1})`, displayPath));
105
+ }
106
+ }
107
+ }
108
+ return { manifest, errors, warnings };
109
+ }
110
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../os/queue/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AAEF,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AASxE,SAAS,IAAI,CACX,MAAc,EACd,QAA6B,EAC7B,OAAe,EACf,IAAa;IAEb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,QAAgB;IAEhB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;QACxC,CAAC,CAAC,QAAQ,CAAC;IAEb,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,IAAI,CACF,UAAU,EACV,OAAO,EACP,+BAA+B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAC3E,WAAW,CACZ,CACF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,IAAI,CACF,UAAU,EACV,OAAO,EACP,qBAAqB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EACjE,WAAW,CACZ,CACF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CACT,IAAI,CACF,UAAU,EACV,OAAO,EACP,gCAAgC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,EACpF,WAAW,CACZ,CACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE7B,sDAAsD;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,IAAI,CACF,UAAU,EACV,OAAO,EACP,gBAAgB,QAAQ,CAAC,EAAE,mCAAmC,IAAI,GAAG,EACrE,WAAW,CACZ,CACF,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,qCAAqC,EAAE,WAAW,CAAC,CACjG,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,sBAAsB,KAAK,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;YACpF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEhB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CACT,IAAI,CACF,UAAU,EACV,OAAO,EACP,SAAS,KAAK,8EAA8E,EAC5F,WAAW,CACZ,CACF,CAAC;YACF,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,iBAAiB,CAAC,GAAG,CACnB,KAAK,EACL,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACxF,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;gBACnD,QAAQ,CAAC,IAAI,CACX,IAAI,CACF,UAAU,EACV,SAAS,EACT,SAAS,MAAM,eAAe,SAAS,GAAG,CAAC,wCAAwC,GAAG,eAAe,QAAQ,GAAG,CAAC,GAAG,EACpH,WAAW,CACZ,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ForgeModule } from "../../src/forge-module.ts";
2
+ export declare function createForgeQueueModule(): Promise<ForgeModule>;
3
+ //# sourceMappingURL=queue.module.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,56 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Register the queue.validate command with the forge kernel registry (RFC-1140).</purpose>
4
+ <non-goals>
5
+ <item>Do not implement handler logic here — delegate to handlers/queue-validate.ts.</item>
6
+ </non-goals>
7
+ </MODULE_CONTRACT>
8
+ <CHANGE_SUMMARY>
9
+ <item>RFC-1140: initial forgeQueueModule registering queue.validate.</item>
10
+ <item>RFC-1140: steps 1-4 — shared resolver, queue module, registration
11
+
12
+ 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>
13
+ <item>RFC-1140: queue.validate missing contract/rules metadata (DNA-91)
14
+
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
+ </CHANGE_SUMMARY>
17
+ */
18
+ export async function createForgeQueueModule() {
19
+ const { runQueueValidate } = await import("./handlers/queue-validate.js");
20
+ return {
21
+ name: "forge-queue",
22
+ version: "0.1.0",
23
+ runtime: "autonomous",
24
+ declarations: [],
25
+ commands: [
26
+ {
27
+ 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).",
31
+ scope: "workspace",
32
+ contract: "queue",
33
+ rules: ["QUEUE-01", "QUEUE-02", "QUEUE-03", "QUEUE-04", "QUEUE-05", "QUEUE-06"],
34
+ mutatesState: false,
35
+ reads: [
36
+ "docs/queues/*.yaml",
37
+ "docs/rfcs/**/*.md",
38
+ "docs/adrs/**/*.md",
39
+ "docs/audits/*.md",
40
+ "docs/plans/*.md",
41
+ ],
42
+ cacheable: false,
43
+ flags: {
44
+ file: {
45
+ kind: "string",
46
+ required: true,
47
+ description: "Path to the queue manifest YAML file.",
48
+ },
49
+ },
50
+ execute: runQueueValidate,
51
+ },
52
+ ],
53
+ pipelines: [],
54
+ };
55
+ }
56
+ //# sourceMappingURL=queue.module.js.map
@@ -0,0 +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,gFAAgF;gBAClF,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"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import type { Diagnostic } from "../../src/types.ts";
3
+ import type { QueueItemReport } from "../../src/pipeline-status.ts";
4
+ export declare const QUEUE_ITEM_ID_PATTERN: RegExp;
5
+ export declare const queueManifestSchema: z.ZodObject<{
6
+ id: z.ZodString;
7
+ createdAt: z.ZodString;
8
+ items: z.ZodDefault<z.ZodArray<z.ZodObject<{
9
+ id: z.ZodString;
10
+ note: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>>>;
12
+ }, z.core.$strip>;
13
+ export type QueueManifest = z.infer<typeof queueManifestSchema>;
14
+ export interface QueueValidateResult {
15
+ command: "queue.validate";
16
+ status: "pass" | "fail";
17
+ queue: string;
18
+ file: string;
19
+ items: QueueItemReport[];
20
+ /** First item whose derived status is pending or in-progress; null when fully terminal. */
21
+ next: string | null;
22
+ errors: Diagnostic[];
23
+ warnings: Diagnostic[];
24
+ }
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../os/queue/types.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,QAAsB,CAAC;AAEzD,eAAO,MAAM,mBAAmB;;;;;;;iBAW9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,2FAA2F;IAC3F,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB"}
@@ -0,0 +1,28 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Queue manifest contract (RFC-1140) — the durable ordered document
4
+ block consumed by queue.validate and the pipeline orchestrator's queue mode.</purpose>
5
+ <non-goals>
6
+ <item>Do not store per-item progress state — status is derived, never persisted.</item>
7
+ </non-goals>
8
+ </MODULE_CONTRACT>
9
+ <CHANGE_SUMMARY>
10
+ <item>RFC-1140: initial QueueManifest schema and queue.validate result types.</item>
11
+ <item>RFC-1140: steps 1-4 — shared resolver, queue module, registration
12
+
13
+ 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>
14
+ </CHANGE_SUMMARY>
15
+ */
16
+ import { z } from "zod";
17
+ export const QUEUE_ITEM_ID_PATTERN = /^(RFC|ADR)-\d{4}$/;
18
+ export const queueManifestSchema = z.object({
19
+ id: z.string().min(1),
20
+ createdAt: z.string().min(1),
21
+ items: z
22
+ .array(z.object({
23
+ id: z.string().min(1),
24
+ note: z.string().optional(),
25
+ }))
26
+ .default([]),
27
+ });
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../os/queue/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAEF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC,CACH;SACA,OAAO,CAAC,EAAE,CAAC;CACf,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter-io.d.ts","sourceRoot":"","sources":["../../../os/rfc/frontmatter-io.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAStD;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BxE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED,MAAM,MAAM,qBAAqB,GAC/B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAmB5C;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAY7B;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcvF"}
1
+ {"version":3,"file":"frontmatter-io.d.ts","sourceRoot":"","sources":["../../../os/rfc/frontmatter-io.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAStD;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BxE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED,MAAM,MAAM,qBAAqB,GAC/B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAmB5C;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAY7B;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcvF"}
@@ -47,6 +47,7 @@ export async function listRfcFiles(rfcDirPath) {
47
47
  else if (entry.isFile() &&
48
48
  entry.name.endsWith(".md") &&
49
49
  !entry.name.startsWith("rfc-0000") &&
50
+ !entry.name.endsWith(".generated.md") &&
50
51
  entry.name !== "README.md") {
51
52
  results.push(relativePath);
52
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter-io.js","sourceRoot":"","sources":["../../../os/rfc/frontmatter-io.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontmatter-io.js","sourceRoot":"","sources":["../../../os/rfc/frontmatter-io.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,7 @@
1
1
  import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
2
+ import type { PipelineStage, RfcPipelineStageInfo } from "../../../src/pipeline-status.ts";
2
3
  import type { RfcStatus } from "../types.ts";
3
- export type PipelineStage = "audit" | "enhance" | "plan" | "implement";
4
- export interface RfcPipelineStageInfo {
5
- stage: PipelineStage;
6
- done: boolean;
7
- /** File or marker that confirms completion, when applicable. */
8
- evidence?: string;
9
- }
4
+ export type { PipelineStage, RfcPipelineStageInfo };
10
5
  export interface RfcPipelineEntry {
11
6
  id: string;
12
7
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-status.d.ts","sourceRoot":"","sources":["../../../../os/rfc/handlers/pipeline-status.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AA4BD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CA2FtD"}
1
+ {"version":3,"file":"pipeline-status.d.ts","sourceRoot":"","sources":["../../../../os/rfc/handlers/pipeline-status.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAoEtD"}
@@ -8,43 +8,24 @@
8
8
  </non-goals>
9
9
  </MODULE_CONTRACT>
10
10
  <CHANGE_SUMMARY>
11
+ <item>RFC-1140: refactored onto the shared resolver in src/pipeline-status.ts —
12
+ artifact finders, TERMINAL_STATUSES, and stage computation now imported from
13
+ the portable layer so queue.validate and the orchestrator share one derivation.</item>
11
14
  <item>RFC-1097: step 6 — compass.migrate codemod run
12
15
 
13
16
  Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
14
17
  <item>RFC-1097: sweep — werkstatt-engine clean
15
18
 
16
19
  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>
20
+ <item>RFC-1140: steps 1-4 — shared resolver, queue module, registration
21
+
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>
17
23
  </CHANGE_SUMMARY>
18
24
  */
19
- import fs from "node:fs/promises";
20
25
  import path from "node:path";
21
26
  import { listRfcFiles, readAndParseRfc } from "../frontmatter-io.js";
27
+ import { TERMINAL_STATUSES, computeRfcPipelineStages, findAuditFile, findPlanFile, nextPipelineStep, } from "../../../src/pipeline-status.js";
22
28
  import { RFC_DIR } from "../types.js";
23
- const TERMINAL_STATUSES = new Set(["implemented", "rejected", "superseded"]);
24
- async function findAuditFile(workspaceRoot, rfcId) {
25
- const auditsDir = path.join(workspaceRoot, "docs/audits");
26
- try {
27
- const entries = await fs.readdir(auditsDir);
28
- const prefix = `audit-${rfcId.toLowerCase()}`;
29
- const match = entries.find((e) => e.toLowerCase().startsWith(prefix) && e.endsWith(".md"));
30
- return match ? path.join("docs/audits", match) : undefined;
31
- }
32
- catch {
33
- return undefined;
34
- }
35
- }
36
- async function findPlanFile(workspaceRoot, rfcId) {
37
- const plansDir = path.join(workspaceRoot, "docs/plans");
38
- try {
39
- const entries = await fs.readdir(plansDir);
40
- const prefix = `plan-${rfcId.toLowerCase()}`;
41
- const match = entries.find((e) => e.toLowerCase().startsWith(prefix) && e.endsWith(".md"));
42
- return match ? path.join("docs/plans", match) : undefined;
43
- }
44
- catch {
45
- return undefined;
46
- }
47
- }
48
29
  export async function runRfcPipelineStatus(input, context) {
49
30
  const { workspaceRoot, logger, outputFormat } = context;
50
31
  const rfcDirPath = path.join(workspaceRoot, RFC_DIR);
@@ -71,37 +52,14 @@ export async function runRfcPipelineStatus(input, context) {
71
52
  const isTerminal = TERMINAL_STATUSES.has(status);
72
53
  const auditFile = await findAuditFile(workspaceRoot, id);
73
54
  const planFile = await findPlanFile(workspaceRoot, id);
74
- const stages = [
75
- {
76
- stage: "audit",
77
- done: !!auditFile,
78
- evidence: auditFile,
79
- },
80
- {
81
- stage: "enhance",
82
- done: !!enhancedAt,
83
- evidence: enhancedAt ? `enhancedAt: ${enhancedAt}` : undefined,
84
- },
85
- {
86
- stage: "plan",
87
- done: !!planFile,
88
- evidence: planFile,
89
- },
90
- {
91
- stage: "implement",
92
- done: status === "implemented" || !!implementedAt,
93
- evidence: implementedAt ? `implementedAt: ${implementedAt}` : undefined,
94
- },
95
- ];
96
- let nextStep = null;
97
- if (!isTerminal) {
98
- for (const s of stages) {
99
- if (!s.done) {
100
- nextStep = s.stage;
101
- break;
102
- }
103
- }
104
- }
55
+ const stages = computeRfcPipelineStages({
56
+ status,
57
+ enhancedAt,
58
+ implementedAt,
59
+ auditFile,
60
+ planFile,
61
+ });
62
+ const nextStep = isTerminal ? null : nextPipelineStep(status, stages);
105
63
  entries.push({
106
64
  id,
107
65
  title,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-status.js","sourceRoot":"","sources":["../../../../os/rfc/handlers/pipeline-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-status.js","sourceRoot":"","sources":["../../../../os/rfc/handlers/pipeline-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;EAuBE;AAEF,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMrE,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,YAAY,EACZ,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAqBtC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAwB,EACxB,OAA4B;IAE5B,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;IAEzD,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,OAAO,OAAO,GAAG,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,MAAM;YAAE,SAAS;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAc,CAAC;QACvD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,MAAM,aAAa,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpF,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAEvD,MAAM,MAAM,GAA2B,wBAAwB,CAAC;YAC9D,MAAM;YACN,UAAU;YACV,aAAa;YACb,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAyB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE5F,OAAO,CAAC,IAAI,CAAC;YACX,EAAE;YACF,KAAK;YACL,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;YAClC,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,wBAAwB,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QACjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,QAAQ,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;QACtF,OAAO,EAAE,uBAAuB,OAAO,CAAC,MAAM,SAAS;KACxD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-rules.d.ts","sourceRoot":"","sources":["../../../../os/rfc/handlers/validate-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-rules.d.ts","sourceRoot":"","sources":["../../../../os/rfc/handlers/validate-rules.ts"],"names":[],"mappings":"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"}
@@ -311,7 +311,12 @@ function execGitLog(workspaceRoot, args) {
311
311
  });
312
312
  }
313
313
  async function checkImplementationCommitDrift(workspaceRoot, rfcId, createdAt, currentStatus) {
314
- if (currentStatus === "implemented") {
314
+ // Terminal statuses are exempt: implemented is the target state, and
315
+ // superseded/rejected RFCs may legitimately carry implement: commits from
316
+ // work that landed before the status transition (RFC-0769 lifecycle).
317
+ if (currentStatus === "implemented" ||
318
+ currentStatus === "superseded" ||
319
+ currentStatus === "rejected") {
315
320
  return { found: false, commitCount: 0 };
316
321
  }
317
322
  const datePattern = /^\d{4}-\d{2}-\d{2}$/;