@sdd-method/sdd-cli 1.3.2 → 1.5.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 (32) hide show
  1. package/dist/lib/catalogue/builders/adrs.d.ts.map +1 -1
  2. package/dist/lib/catalogue/builders/adrs.js +19 -1
  3. package/dist/lib/catalogue/builders/adrs.js.map +1 -1
  4. package/dist/lib/catalogue/builders/quality-scores.d.ts.map +1 -1
  5. package/dist/lib/catalogue/builders/quality-scores.js +159 -8
  6. package/dist/lib/catalogue/builders/quality-scores.js.map +1 -1
  7. package/dist/lib/catalogue/canonical-schema.yaml +59 -9
  8. package/dist/lib/catalogue/graph-projection.d.ts +65 -0
  9. package/dist/lib/catalogue/graph-projection.d.ts.map +1 -0
  10. package/dist/lib/catalogue/graph-projection.js +293 -0
  11. package/dist/lib/catalogue/graph-projection.js.map +1 -0
  12. package/dist/lib/catalogue/graph-run.d.ts +39 -0
  13. package/dist/lib/catalogue/graph-run.d.ts.map +1 -0
  14. package/dist/lib/catalogue/graph-run.js +73 -0
  15. package/dist/lib/catalogue/graph-run.js.map +1 -0
  16. package/dist/lib/catalogue/impact-run.d.ts +73 -0
  17. package/dist/lib/catalogue/impact-run.d.ts.map +1 -0
  18. package/dist/lib/catalogue/impact-run.js +0 -0
  19. package/dist/lib/catalogue/impact-run.js.map +1 -0
  20. package/dist/lib/catalogue/rubric-coverage-map.yaml +176 -0
  21. package/dist/lib/catalogue/scores-coverage.d.ts +13 -0
  22. package/dist/lib/catalogue/scores-coverage.d.ts.map +1 -1
  23. package/dist/lib/catalogue/scores-coverage.js +113 -2
  24. package/dist/lib/catalogue/scores-coverage.js.map +1 -1
  25. package/dist/lib/lock-file.d.ts.map +1 -1
  26. package/dist/lib/lock-file.js +7 -1
  27. package/dist/lib/lock-file.js.map +1 -1
  28. package/dist/verbs/catalogue.d.ts.map +1 -1
  29. package/dist/verbs/catalogue.js +56 -0
  30. package/dist/verbs/catalogue.js.map +1 -1
  31. package/package.json +1 -1
  32. package/scripts/sync-canonical-schema.sh +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"adrs.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/adrs.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAqB,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAUD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAYD,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC;IAChE,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CAC9B,CAAC,CAqGD;AAiGD,2FAA2F;AAC3F,eAAO,MAAM,YAAY,aAAO,CAAC"}
1
+ {"version":3,"file":"adrs.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/adrs.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAqB,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAUD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAYD,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC;IAChE,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CAC9B,CAAC,CAqGD;AAkHD,2FAA2F;AAC3F,eAAO,MAAM,YAAY,aAAO,CAAC"}
@@ -4,6 +4,8 @@
4
4
  // Source paths discovered:
5
5
  // - docs/platform/adr/ADR XXXX: Title.md (platform-scoped)
6
6
  // - docs/method/adr/ADR XXXX: Title.md (method-scoped → domain_id=platform)
7
+ // - docs/method/platform-adr/ADR XXXX: Title.md (method-scoped; the frozen
8
+ // platform-foundational 0001-0099 band per M-ADR 0140)
7
9
  // - docs/domains/<domain>/architecture/adr/ADR XXXX: Title.md
8
10
  //
9
11
  // Per ADR 0136 the method-scope ADRs are owned by the platform-root in
@@ -164,6 +166,22 @@ function extractField(text, field) {
164
166
  function escapeRegex(s) {
165
167
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
166
168
  }
169
+ /**
170
+ * Directory names that hold ADR files. An EXPLICIT SET, not a pattern.
171
+ *
172
+ * `platform-adr` was invisible until 2026-08-06 because this walk tested for a
173
+ * directory named exactly "adr" — so `docs/method/platform-adr/` was recursed
174
+ * into and its files were never collected. Measured at discovery: 14 files
175
+ * present, 0 rows, in EVERY SDD of both reference estates (~1,414 files), while
176
+ * the directory is bundle payload and its ADRs are cited, superseded and scored
177
+ * like any other. One estate held 13 assessments of them, which read as orphaned
178
+ * scores and were nearly withdrawn as ADRs that no longer existed.
179
+ *
180
+ * Named rather than matched (`endsWith("adr")`, `/adr$/`) on purpose: a pattern
181
+ * here would also swallow any future directory an adopter happens to name
182
+ * `<something>-adr`, and this file has just paid for one loose match.
183
+ */
184
+ const ADR_DIR_NAMES = new Set(["adr", "platform-adr"]);
167
185
  async function collectAdrFiles(docsDir) {
168
186
  const out = [];
169
187
  let entries;
@@ -179,7 +197,7 @@ async function collectAdrFiles(docsDir) {
179
197
  for (const entry of entries) {
180
198
  const full = join(docsDir, entry.name);
181
199
  if (entry.isDirectory()) {
182
- if (entry.name === "adr") {
200
+ if (ADR_DIR_NAMES.has(entry.name)) {
183
201
  // Walk all files in the adr/ directory (no nesting expected).
184
202
  const inner = await readdir(full, { withFileTypes: true });
185
203
  for (const f of inner) {
@@ -1 +1 @@
1
- {"version":3,"file":"adrs.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/adrs.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,iBAAiB;AACjB,EAAE;AACF,2BAA2B;AAC3B,+DAA+D;AAC/D,kFAAkF;AAClF,gEAAgE;AAChE,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,kDAAkD;AAClD,EAAE;AACF,uEAAuE;AACvE,wBAAwB;AACxB,2BAA2B;AAC3B,qEAAqE;AACrE,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,uEAAuE;AACvE,oBAAoB;AAEpB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAIhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAoBxD,MAAM,8BAA8B,GAAyB,IAAI,GAAG,CAAC;IACnE,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,uCAAuC,GAAwB,IAAI,GAAG,CAAC;IAC3E,oBAAoB;CACrB,CAAC,CAAC;AAaH,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,iFAAiF;AACjF,8CAA8C;AAC9C,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,IAAI,iBAAiB,wCAAwC,EAC7D,GAAG,CACJ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAuB;IAIrD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,eAAe,GACnB,8BAA8B,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QAClD,CAAC,uCAAuC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACtE,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7B,8EAA8E;YAC9E,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,YAAY,EACZ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,KAAK,qCAAqC,CACxF,CAAC;YACF,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrE,oEAAoE;YACpE,4DAA4D;YAC5D,gEAAgE;YAChE,6DAA6D;YAC7D,aAAa;YACb,oBAAoB,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEhB,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;QACxD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC;QAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;QAElE,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,QAAQ,EACR,GAAG,OAAO,uBAAuB,QAAQ,yBAAyB,QAAQ,UAAU,CACrF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,oEAAoE;YACpE,qCAAqC;YACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,UAAU,EACV,GAAG,OAAO,uBAAuB,KAAK,gDAAgD,CACvF,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,KAAK;YACT,KAAK;YACL,MAAM;YACN,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,OAAO;YAChB,aAAa;YACb,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,UAAU,EACV,GAAG,oBAAoB,qFAAqF,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,aAAa,EAAE,CAAC,CAAC,YAAY;QAC7B,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,gBAAgB,EAAE,EAAE,EAAE,2DAA2D;QACjF,oBAAoB,EAAE,EAAE;QACxB,cAAc,EAAE,CAAC,CAAC,aAAa;QAC/B,aAAa,EAAE,EAAE;KAClB,CAAC,CAAC,CAAC;IAEJ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IAIpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE;YAAE,SAAS;QACvB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,oEAAoE;QACpE,wEAAwE;QACxE,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,IAAI,iBAAiB,kCAAkC,EACvD,GAAG,CACJ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,EAAE,GAAG,IAAI,MAAM,CACnB,yBAAyB,WAAW,CAAC,KAAK,CAAC,uBAAuB,EAClE,IAAI,CACL,CAAC;IACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACzB,8DAA8D;gBAC9D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,4EAA4E;IAC5E,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"adrs.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/adrs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"quality-scores.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/quality-scores.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC;CACjD;AAsMD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CAoNnC"}
1
+ {"version":3,"file":"quality-scores.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/quality-scores.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC;CACjD;AAyTD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CA6SnC"}
@@ -57,12 +57,28 @@ const HEADER_KEYS = new Set([
57
57
  "assessed_at",
58
58
  "assessed_by",
59
59
  ]);
60
+ const BANDED_FAMILIES = new Map([
61
+ [
62
+ "reverse-repo-quality",
63
+ { targetKind: "repository", rubrics: ["reverseability", "repo_doc_quality"], pathField: "doc_path" },
64
+ ],
65
+ [
66
+ "reverse-product-quality",
67
+ { targetKind: "product", rubrics: ["product_synthesis_quality"], pathField: "product_path" },
68
+ ],
69
+ [
70
+ "reverse-platform-evidence-quality",
71
+ { targetKind: "platform_evidence", rubrics: ["reverse_platform_evidence_quality"], pathField: "evidence_path" },
72
+ ],
73
+ ]);
60
74
  /**
61
- * rubric_id -> target_kind. A CLOSED map on purpose: an unknown rubric is a
62
- * loud finding, never a silently-dropped entry or a guessed kind. New rubrics
63
- * ship with a row here (the R9 four-surface rule already requires the registry;
64
- * this is the fifth touchpoint and the one that makes the rows appear).
75
+ * `domain-artifact` is a THIRD shape and does not fit either map: it wraps a
76
+ * banded score (`current.artifact_quality` = {total, band}) in the multi-review
77
+ * envelope, and names its rubric per-unit in a `rubric:` field pointing at a
78
+ * rubric FILE. Six distinct rubrics across one estate's 66 units, so the
79
+ * registry_type cannot supply rubric_id and the sub-block list cannot either.
65
80
  */
81
+ const DOMAIN_ARTIFACT_TYPE = "reverse-domain-artifact-quality";
66
82
  const TARGET_KIND_BY_RUBRIC = new Map([
67
83
  ["adr-quality", "adr"],
68
84
  ["contract-quality", "contract"],
@@ -212,6 +228,59 @@ function mergePreferringCurrent(current, review) {
212
228
  }
213
229
  return out;
214
230
  }
231
+ /** Rows for one banded sub-block, or null when the unit does not carry it. */
232
+ function bandedRows(block, ctx) {
233
+ if (!isRecord(block))
234
+ return null;
235
+ const id = `${ctx.rubricId}__${ctx.targetKind}__${slugToken(ctx.targetRef)}`;
236
+ const stalenessBasis = ctx.corpusRef !== null ? "corpus_ref" : ctx.targetPath !== null ? "scored_at" : "none";
237
+ const row = {
238
+ id,
239
+ rubric_id: ctx.rubricId,
240
+ scoring_form: "banded",
241
+ target_kind: ctx.targetKind,
242
+ target_ref: ctx.targetRef,
243
+ target_path: ctx.targetPath,
244
+ gate: null,
245
+ weighted_score: null,
246
+ score_denominator: null,
247
+ band: str(block["band"]),
248
+ band_total: num(block["total"]),
249
+ scored_at: ctx.scoredAt,
250
+ corpus_ref: ctx.corpusRef,
251
+ staleness_basis: stalenessBasis,
252
+ review_run_id: null,
253
+ selection_method: null,
254
+ scorer_provider: null,
255
+ scorer_tool: null,
256
+ scorer_model: ctx.assessedBy,
257
+ scorer_model_family: null,
258
+ scorer_prompt_version: null,
259
+ flag_count: 0,
260
+ hard_gate_triggered: false,
261
+ required_actions_count: 0,
262
+ sdd_id: ctx.sddId,
263
+ source_sdd_id: null,
264
+ };
265
+ const dims = [];
266
+ const d = block["dimensions"];
267
+ if (isRecord(d)) {
268
+ for (const [k, v] of Object.entries(d)) {
269
+ dims.push({
270
+ id: `${id}__${slugToken(k)}`,
271
+ quality_score_id: id,
272
+ rubric_id: ctx.rubricId,
273
+ target_kind: ctx.targetKind,
274
+ target_ref: ctx.targetRef,
275
+ dimension_key: k,
276
+ dimension_score: num(v),
277
+ dimension_weight: null,
278
+ source_sdd_id: null,
279
+ });
280
+ }
281
+ }
282
+ return { row, dims };
283
+ }
215
284
  export async function buildQualityScores(inputs) {
216
285
  const { sddPath, findings, sddId } = inputs;
217
286
  const dir = join(sddPath, REGISTRY_DIR_REL);
@@ -263,18 +332,96 @@ export async function buildQualityScores(inputs) {
263
332
  if (declared !== null && declared !== fromFilename) {
264
333
  findings.add("convention", `${rel} declares registry_type '${declared}' but its filename says '${fromFilename}' — rubric_id uses the declared value; rename the file or correct registry_type so the two agree`);
265
334
  }
335
+ const fileAssessedBy = str(doc["assessed_by"]);
336
+ // --- the banded reverse family (schema 3.3.0) ---
337
+ const banded = BANDED_FAMILIES.get(rubricId);
338
+ if (banded !== undefined || rubricId === DOMAIN_ARTIFACT_TYPE) {
339
+ const units = doc["units"];
340
+ if (!isRecord(units)) {
341
+ findings.add("convention", `${rel} declares registry_type '${rubricId}' but has no \`units:\` mapping — the banded family keys its entries there; no scores read from this file`);
342
+ continue;
343
+ }
344
+ const fileScoredAt = str(doc["assessed_at"]);
345
+ for (const [unitKey, unitVal] of Object.entries(units)) {
346
+ if (!isRecord(unitVal))
347
+ continue;
348
+ const targetRef = str(unitVal["unit_id"]) ?? unitKey;
349
+ // The reverse family records the exported snapshot it read — the one
350
+ // place a corpus anchor is already authored anywhere in either estate.
351
+ const snap = unitVal["snapshot"];
352
+ const corpusRef = isRecord(snap) ? str(snap["source_revision"]) : null;
353
+ if (banded !== undefined) {
354
+ const targetPath = banded.pathField ? str(unitVal[banded.pathField]) : null;
355
+ for (const sub of banded.rubrics) {
356
+ const built = bandedRows(unitVal[sub], {
357
+ rubricId: `${rubricId}.${sub}`,
358
+ targetKind: banded.targetKind,
359
+ targetRef,
360
+ targetPath,
361
+ scoredAt: fileScoredAt,
362
+ corpusRef,
363
+ assessedBy: fileAssessedBy,
364
+ sddId,
365
+ });
366
+ if (built) {
367
+ qualityScores.push(built.row);
368
+ qualityScoreDimensions.push(...built.dims);
369
+ }
370
+ }
371
+ }
372
+ else {
373
+ // domain-artifact: rubric named per unit, banded score inside `current`.
374
+ const current = isRecord(unitVal["current"]) ? unitVal["current"] : {};
375
+ const rubricPath = str(unitVal["rubric"]);
376
+ if (rubricPath === null) {
377
+ findings.add("coverage", `${rel}: ${unitKey} names no \`rubric:\` — this family identifies its rubric per unit, so the score cannot be attributed; add the rubric path`);
378
+ continue;
379
+ }
380
+ const stem = rubricPath.split("/").pop().replace(/\.md$/, "");
381
+ const built = bandedRows(current["artifact_quality"], {
382
+ rubricId: stem,
383
+ targetKind: str(unitVal["artifact_type"]) ?? "domain_artifact",
384
+ targetRef,
385
+ targetPath: str(unitVal["doc_path"]),
386
+ scoredAt: str(current["scored_at"]) ?? fileScoredAt,
387
+ corpusRef,
388
+ assessedBy: fileAssessedBy,
389
+ sddId,
390
+ });
391
+ if (built) {
392
+ qualityScores.push(built.row);
393
+ qualityScoreDimensions.push(...built.dims);
394
+ }
395
+ }
396
+ }
397
+ continue;
398
+ }
266
399
  const targetKind = TARGET_KIND_BY_RUBRIC.get(rubricId);
267
400
  if (targetKind === undefined) {
268
401
  findings.add("coverage", `${rel} uses rubric '${rubricId}', which has no target-kind mapping — its scores are NOT catalogued; add the rubric to the quality-scores builder's TARGET_KIND_BY_RUBRIC map (a new rubric ships its registry, rubric, skill trio and seed rows; this is the fifth surface)`);
269
402
  continue;
270
403
  }
271
- const fileAssessedBy = str(doc["assessed_by"]);
272
- // --- the entry container: the single non-header mapping key ---
273
- const containers = Object.entries(doc).filter(([k, v]) => !HEADER_KEYS.has(k) && isRecord(v));
404
+ // --- the entry container: the single non-header mapping OF ENTRIES ---
405
+ //
406
+ // Detected STRUCTURALLY, not positionally. The first version counted
407
+ // non-header mapping keys and refused any file with more than one — which
408
+ // cost a whole registry whenever an author put a `rollup:` summary block
409
+ // beside the entries. Measured: two registries in one estate, 11 authored
410
+ // units and 75 dimension rows silently uncatalogued, and the summary is
411
+ // trivially distinguishable — its values are scalars (scored_at, total,
412
+ // pass/conditional/fail, note) while an entry container's values are
413
+ // themselves mappings.
414
+ //
415
+ // The ambiguity guard survives for the case it was actually written for:
416
+ // if TWO mappings both hold entry-shaped values, that is genuinely
417
+ // ambiguous and is still refused rather than guessed.
418
+ const containers = Object.entries(doc).filter(([k, v]) => !HEADER_KEYS.has(k) &&
419
+ isRecord(v) &&
420
+ Object.values(v).some((x) => isRecord(x)));
274
421
  if (containers.length === 0)
275
422
  continue; // headers-only registry: deliberate, silent
276
423
  if (containers.length > 1) {
277
- findings.add("convention", `${rel} has ${containers.length} candidate entry containers (${containers.map(([k]) => k).join(", ")}) — a registry declares exactly one; no scores read from this file`);
424
+ findings.add("convention", `${rel} has ${containers.length} mappings holding entry-shaped values (${containers.map(([k]) => k).join(", ")}) — a registry declares exactly one entry container; no scores read from this file. A scalar-valued summary block beside the entries is fine and is ignored; two containers of entries are not.`);
278
425
  continue;
279
426
  }
280
427
  const container = containers[0]?.[1];
@@ -337,6 +484,10 @@ export async function buildQualityScores(inputs) {
337
484
  gate,
338
485
  weighted_score: num(current["weighted_score"]),
339
486
  score_denominator: num(entryVal["score_denominator"] ?? current["score_denominator"]),
487
+ // Empty on a weighted row by design — the two scales never share a
488
+ // column, so an average over weighted_score is correct by construction.
489
+ band: null,
490
+ band_total: null,
340
491
  scored_at: str(current["scored_at"]) ?? str(entryVal["scored_at"]),
341
492
  corpus_ref: corpusRef,
342
493
  staleness_basis: stalenessBasis,
@@ -1 +1 @@
1
- {"version":3,"file":"quality-scores.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/quality-scores.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-scores.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/quality-scores.ts"],"names":[],"mappings":"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"}
@@ -62,9 +62,52 @@
62
62
  # Builder contract: see docs/method/methods/guides/catalogue-builder-specification.md.
63
63
  # Category taxonomy: see docs/method/methods/standards/product-category-taxonomy.md.
64
64
 
65
- schema_version: "3.2.0"
65
+ schema_version: "3.3.0"
66
66
  schema_owner: "sdd-method"
67
67
  schema_status: "canonical"
68
+ # 3.3.0 also DEPRECATES the `products` maturity triplet (`synthesis_quality`,
69
+ # `synthesis_band`, `last_assessed`) for removal at 4.0.0, resolving the
70
+ # two-sources-for-one-fact that D-B0.7 committed to settling in this change-set.
71
+ # Both are fed from `reverse-product-quality-scores.yaml`; `quality_scores` is
72
+ # strictly more expressive and the triplet is strictly lossy:
73
+ # - the triplet takes ONE unit per file (the SELF-PRODUCT rule); quality_scores
74
+ # takes all of them — measured 9 rows against 0 triplet cells in one SDD,
75
+ # because none of its nine units is the self-product;
76
+ # - `synthesis_band`'s closed vocabulary accepts three of the seven band values
77
+ # the estate authors, silently emptying the rest;
78
+ # - the triplet carries no dimensions and no corpus_ref, while the banded rows
79
+ # carry both (246 of 330 rows in one SDD have a real corpus anchor from
80
+ # `snapshot.source_revision` — the only authored corpus_ref anywhere).
81
+ # Nothing consumes the triplet: verified across builders and aggregator, exactly
82
+ # as 2.48.0 verified before deprecating `products.status` in favour of it. It
83
+ # keeps emitting until 4.0.0, so no row changes value now.
84
+ #
85
+ # Bump rationale (3.3.0 — additive minor, 2026-08-06, per M-ADR 0205 §4.5): the
86
+ # BANDED reverse scoring family joins the class (Phase B4). Two columns and one
87
+ # enum value; no existing column, catalogue or enum changes meaning.
88
+ #
89
+ # 1. `scoring_form` gains `banded`. It was reserved-but-undeclared at 3.2.0 so
90
+ # a premature banded row would fail loudly; the reverse family is now
91
+ # modelled, so the value is real.
92
+ # 2. `quality_scores.band` and `.band_total` added.
93
+ #
94
+ # THE TWO SCORE SCALES NEVER SHARE A COLUMN, and that is the whole design.
95
+ # A weighted row carries weighted_score (1-5) with band/band_total empty; a
96
+ # banded row carries band + band_total (0-13) with weighted_score empty. Sharing
97
+ # one column and disambiguating via scoring_form would make every average over
98
+ # it silently wrong for a mixed population — the basis-error shape this arc paid
99
+ # for repeatedly. Separation makes the aggregate correct by construction.
100
+ #
101
+ # `band` IS DELIBERATELY UNBOUND, measured rather than assumed. The vocabulary is
102
+ # per-rubric: `reverseability` uses easy | moderate | hard | very-hard, a
103
+ # DIFFICULTY scale where a higher band is worse, while the four quality rubrics
104
+ # use strong | working. A single closed enum over both would assert that `hard`
105
+ # and `working` are comparable. Note this contradicts the reverse form's
106
+ # description in earlier planning ("strong/working/weak/not-usable"): that
107
+ # vocabulary is not what the estate authors. 671 banded scores measured across
108
+ # 102 registry files.
109
+ # ACTIVATION (M-ADR 0200 §4.6): additive only. No existing row changes value.
110
+ # Backward-compatible; SCHEMA_COMPAT "^3.0.0".
68
111
  # Bump rationale (3.2.0 — additive minor, 2026-08-06, per M-ADR 0205 §4.5):
69
112
  # the rubric score registries join the catalogue metamodel. Two new catalogues
70
113
  # and four new enums; no existing column, catalogue or enum is touched.
@@ -666,14 +709,19 @@ enums:
666
709
  Reserved by M-ADR 0205 §4.5 so the banded reverse family can arrive
667
710
  additively without reshaping rows.
668
711
 
669
- Only `weighted` is declared. The reverse estate's banded form (0-2 across
670
- 5-6 dimensions with strong/working/weak/not-usable bands) is real and
671
- measured 142 registry files, 501 scored units but is NOT modelled
672
- yet, so its value is deliberately absent rather than declared-and-unemitted:
673
- if a builder emits a banded row before that change-set lands, it should
674
- fail loudly, not pass against a vocabulary entry nothing produces.
712
+ Both forms are now declared. `banded` was added in 3.3.0 once the reverse
713
+ family was modelled; before that it was deliberately absent so a premature
714
+ banded row would fail loudly rather than pass against an unemitted value.
715
+
716
+ The two forms are NOT interchangeable and must not be averaged together
717
+ which is why they never share a score column. A weighted row carries
718
+ `weighted_score` (1-5) and leaves `band`/`band_total` empty; a banded row
719
+ carries `band` + `band_total` and leaves `weighted_score` empty. Any
720
+ aggregate over `weighted_score` is therefore correct by construction
721
+ rather than by the caller remembering to filter.
675
722
  values:
676
723
  - { value: weighted, description: "Weighted 1-5 dimensions rolled into a weighted_score against a pass threshold, with flags and hard gates. The forward house form; all fifteen method-side registries use it." }
724
+ - { value: banded, description: "Dimensions summed to an integer total and mapped to a named band. The reverse family's form. Added in 3.3.0. The band vocabulary is PER-RUBRIC and deliberately unbound — see the band column." }
677
725
 
678
726
  c4_system_kind:
679
727
  description: >
@@ -837,8 +885,8 @@ catalogues:
837
885
  - { name: surface, type: string, nullable: true, description: "ui | api (empty for non-application-product). Application-product surface trait from the manifest's surface: field (M-ADR 0167, sdd-manifest-schema 1.2.0). Empty on non-application products. Added in 2.35.0." }
838
886
  - { name: packaging, type: string, nullable: true, description: "vendor-saas | self-operated (empty for non-application-product). Application-product packaging trait from the manifest's packaging: field (M-ADR 0175, sdd-manifest-schema 1.7.0). `vendor-saas` marks a packaged-SaaS product — vendor-operated runtime (no own deployment evidence) and a vendor-versioned base capability set. Absent in the manifest resolves to `self-operated`, the unmarked norm. Per M-ADR 0175 §4 no builder may branch on this trait beyond evidence/deployment handling. Column position follows the M-ADR 0194 §3.1 canonical axis order (surface, packaging, application_archetype). Added in 2.41.0." }
839
887
  - { name: application_archetype, type: string, nullable: true, description: "Application-product shape classification from the manifest's application_archetype: field (M-ADR 0191, sdd-manifest-schema 1.2.0). Resolved-enum over a tiered vocabulary (method: unclassified; reference-architecture bundle; adopter). Defaults to 'unclassified' for application-product (with a coverage finding), empty for other profiles. Distinct from the M-ADR 0173 domain archetype and M-ADR 0169 openui archetype. Added in 2.35.0." }
840
- - { name: synthesis_quality, type: int, nullable: true, description: "Score 0-10 from the product-synthesis rubric (reverse method only). WIRED in 2.47.0 from `orchestration/gate-registry/reverse-product-quality-scores.yaml` — the registry family at product granularity — via the SELF-PRODUCT rule: the unit whose `product_path` is '.' AND whose key equals the SDD's sdd_id. Both conditions are required; product_path alone admits synthetic gate fixtures, key-matching alone admits covered sub-products. Backfill only: it fills an empty cell and never overwrites an emitted value. Empty on a forward estate by design — a forward-authored product has no reverse rubric score, and residue-based authoring signals deliberately do NOT write here (see status)." }
841
- - { name: synthesis_band, type: string, nullable: true, description: "developing | working | strong — a CLOSED vocabulary; a band outside it is reported as a convention finding and the cell left empty rather than emitting a value no consumer can interpret. Wired in 2.47.0 alongside synthesis_quality." }
888
+ - { name: synthesis_quality, type: int, nullable: true, description: "DEPRECATED at 3.3.0, for removal at 4.0.0 — superseded by `quality_scores` (rubric_id `reverse-product-quality.product_synthesis_quality`). Score 0-10 from the product-synthesis rubric (reverse method only). WIRED in 2.47.0 from `orchestration/gate-registry/reverse-product-quality-scores.yaml` — the registry family at product granularity — via the SELF-PRODUCT rule: the unit whose `product_path` is '.' AND whose key equals the SDD's sdd_id. Both conditions are required; product_path alone admits synthetic gate fixtures, key-matching alone admits covered sub-products. Backfill only: it fills an empty cell and never overwrites an emitted value. Empty on a forward estate by design — a forward-authored product has no reverse rubric score, and residue-based authoring signals deliberately do NOT write here (see status)." }
889
+ - { name: synthesis_band, type: string, nullable: true, description: "DEPRECATED at 3.3.0, for removal at 4.0.0 — superseded by `quality_scores.band`, which is UNBOUND because the vocabulary is per-rubric. This column's closed set accepts only three of the SEVEN band values the reverse estate actually authors (measured 3.3.0: strong, working, weak, moderate, easy, hard, very-hard), silently emptying the rest. developing | working | strong — a CLOSED vocabulary; a band outside it is reported as a convention finding and the cell left empty rather than emitting a value no consumer can interpret. Wired in 2.47.0 alongside synthesis_quality." }
842
890
  - { name: last_assessed, type: date, nullable: true }
843
891
  - { name: highest_snapshot_impact, type: string, nullable: true }
844
892
  - { name: repo_count, type: int, nullable: false, description: "Number of repos mapped to this product." }
@@ -2086,6 +2134,8 @@ catalogues:
2086
2134
  - { name: gate, type: string, nullable: true, description: "Verdict — see the quality_gate enum, which is deliberately UNBOUND. An out-of-vocabulary value leaves this cell EMPTY and raises a convention finding naming the file, entry and value (the products.synthesis_band precedent). Empty therefore means either unauthored or out-of-vocabulary, and the finding distinguishes them." }
2087
2135
  - { name: weighted_score, type: number, nullable: true, description: "The rubric's rolled-up weighted score. Empty for an unscored entry — which is a real state the registries author deliberately, not a gap." }
2088
2136
  - { name: score_denominator, type: number, nullable: true, description: "Denominator the weighted_score was computed against, where the rubric records one (contract-quality does). Present so a score is never reported without its basis." }
2137
+ - { name: band, type: string, nullable: true, description: "Named band for a `banded` row; empty for a weighted one. DELIBERATELY UNBOUND, and for the same reason `dimension_key` is not normalised: the vocabulary belongs to the rubric, not to the method. Measured across the reverse estate at 3.3.0 — `reverseability` uses easy | moderate | hard | very-hard (a DIFFICULTY scale, where a higher band is worse), while `repo_doc_quality`, `product_synthesis_quality`, `reverse_platform_evidence_quality` and `artifact_quality` use strong | working (a QUALITY scale). One closed enum over both would assert that `hard` and `working` are comparable, which they are not. A consumer comparing bands must therefore group by rubric_id first." }
2138
+ - { name: band_total, type: int, nullable: true, description: "Integer total a `banded` rubric summed its dimensions to, before mapping to `band`; empty for a weighted row. Kept SEPARATE from weighted_score rather than sharing it: the scales are incompatible (a banded total ranges 0-13 against a weighted 1-5), and a single column holding both would make any average over it silently wrong. Separation makes an aggregate over weighted_score correct by construction rather than by the caller remembering to filter on scoring_form." }
2089
2139
  - { name: scored_at, type: date, nullable: true, description: "Date of the effective assessment, from `scored_at` (the forward house form's field name — NOT `assessed_at`, which is the reverse family's file-level field). Date-typed: per the M-ADR 0205 §4.1 engine's TRY_CAST semantics, a prose value here is reported as a type nonconformance rather than aborting the load or being smoothed away — the `adrs.decision_date` case, which reverse practice already exercises." }
2090
2140
  - { name: corpus_ref, type: string, nullable: true, description: "The commit the assessment read — the precise staleness anchor. NEW AUTHORING introduced by this change-set: no score written before it carries one, so this column is empty across both estates at introduction and fills forward as registries are rewritten. The reverse family already has the idea under a different name (`snapshot.source_revision`)." }
2091
2141
  - { name: staleness_basis, type: string, nullable: false, description: "Which anchor this row's staleness can be computed from — see the staleness_basis enum. Emitted by the builder, never authored. Exists so no consumer can state a staleness verdict without its basis." }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Graph projection — `sdd-cli catalogue graph` (M-ADR 0205 §4.6, Phase C0b).
3
+ *
4
+ * Derives a typed node/edge list (JSON Lines) from built catalogues. The
5
+ * projection is DERIVED, never authored, never a second source of truth:
6
+ * regenerated on every run, digest-stamped, not committed. The derivation
7
+ * rule is the C0a rule table (catalogue-engine-evolution plan), keyed on
8
+ * the rubric-coverage-map's `kind` × the schema's FK arity:
9
+ *
10
+ * entity (less `applications`) → nodes, id = "<catalogue>/<pk>"
11
+ * entity FK columns → edges typed "<catalogue>.<column>"
12
+ * edge, 2 FKs → edges, declaration order = source→target;
13
+ * a row with an empty nullable endpoint
14
+ * degrades to a property record, never an edge
15
+ * edge, 3 FKs → edges with declared endpoint pairs
16
+ * (THREE_FK_ENDPOINTS below)
17
+ * edge, 1 FK → property records on the FK owner
18
+ * `applications` → excluded (C0a ruling 2026-08-06: filtered
19
+ * view of products — its rows ARE product
20
+ * rows; emitting it creates edge-less
21
+ * shadow nodes beside the products nodes)
22
+ * finding / enum kinds → excluded (diagnostics / vocabularies)
23
+ *
24
+ * Emission reads the PARSED CSV ROWS, deliberately not an engine readback:
25
+ * the engine's load TRY_CASTs typed columns and silently nulls unparseable
26
+ * cells (a real, measured case: prose in a date-typed column). A projection
27
+ * that inherits cast smoothing is no longer a faithful derivation of the
28
+ * CSV canon. C1's impact queries run on the engine; this emission does not.
29
+ *
30
+ * Every edge endpoint and property owner MUST resolve to a node record in
31
+ * the same export — a dangling reference here is a defect in the projection,
32
+ * not a finding about the estate (the FK layer already reports those). A
33
+ * candidate whose endpoint does not resolve is OMITTED and COUNTED, loudly,
34
+ * in the header and summary: `omitted_external` for external /
35
+ * external-for-profiles FKs (expected at member tier, resolving at
36
+ * aggregate), `omitted_unresolved` for the rest (mirrors an FK-layer
37
+ * finding). Stub nodes are never emitted — inventing nodes is the failure
38
+ * mode the C0a rule exists to prevent.
39
+ */
40
+ import type { CatalogueRow } from "./csv-writer.js";
41
+ import type { CanonicalSchema } from "./schema-loader.js";
42
+ export type GraphTier = "member" | "aggregate";
43
+ export interface GraphCounts {
44
+ readonly nodes: number;
45
+ readonly edges: number;
46
+ readonly properties: number;
47
+ readonly omittedExternal: number;
48
+ readonly omittedUnresolved: number;
49
+ }
50
+ export interface GraphProjection {
51
+ /** Complete JSONL document, header first, trailing newline. */
52
+ readonly text: string;
53
+ readonly counts: GraphCounts;
54
+ /** sha256 hex digest of the body (every line after the header). */
55
+ readonly digest: string;
56
+ }
57
+ /**
58
+ * Kinds must cover every schema catalogue — a catalogue without a kind
59
+ * cannot be classified and the projection must not guess (the map is
60
+ * guarded method-side by the entity-scoring-coverage correspondence
61
+ * instance; this is the consumer-side half of that guarantee).
62
+ */
63
+ export declare function assertKindCoverage(schema: CanonicalSchema, kinds: ReadonlyMap<string, string>): void;
64
+ export declare function projectGraph(schema: CanonicalSchema, kinds: ReadonlyMap<string, string>, rowsByCatalogue: ReadonlyMap<string, readonly CatalogueRow[]>, tier: GraphTier): GraphProjection;
65
+ //# sourceMappingURL=graph-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-projection.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/graph-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,oBAAoB,CAAC;AAuB5B,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAOD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,IAAI,CAUN;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,EAC7D,IAAI,EAAE,SAAS,GACd,eAAe,CAgOjB"}