@sdd-method/sdd-cli 1.36.2 → 1.38.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 (104) hide show
  1. package/dist/lib/catalogue/aggregate.d.ts +2 -2
  2. package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
  3. package/dist/lib/catalogue/aggregate.js +15 -3
  4. package/dist/lib/catalogue/aggregate.js.map +1 -1
  5. package/dist/lib/catalogue/baseline-check.d.ts.map +1 -1
  6. package/dist/lib/catalogue/baseline-check.js +17 -2
  7. package/dist/lib/catalogue/baseline-check.js.map +1 -1
  8. package/dist/lib/catalogue/build.d.ts.map +1 -1
  9. package/dist/lib/catalogue/build.js +99 -4
  10. package/dist/lib/catalogue/build.js.map +1 -1
  11. package/dist/lib/catalogue/builders/data-items.d.ts +37 -0
  12. package/dist/lib/catalogue/builders/data-items.d.ts.map +1 -0
  13. package/dist/lib/catalogue/builders/data-items.js +326 -0
  14. package/dist/lib/catalogue/builders/data-items.js.map +1 -0
  15. package/dist/lib/catalogue/builders/events.d.ts.map +1 -1
  16. package/dist/lib/catalogue/builders/events.js +27 -2
  17. package/dist/lib/catalogue/builders/events.js.map +1 -1
  18. package/dist/lib/catalogue/builders/feature-tree-walker.d.ts +7 -0
  19. package/dist/lib/catalogue/builders/feature-tree-walker.d.ts.map +1 -1
  20. package/dist/lib/catalogue/builders/feature-tree-walker.js +54 -5
  21. package/dist/lib/catalogue/builders/feature-tree-walker.js.map +1 -1
  22. package/dist/lib/catalogue/builders/repositories.js +48 -13
  23. package/dist/lib/catalogue/builders/repositories.js.map +1 -1
  24. package/dist/lib/catalogue/canonical-schema.yaml +229 -2
  25. package/dist/lib/catalogue/coverage-render.d.ts.map +1 -1
  26. package/dist/lib/catalogue/coverage-render.js +30 -0
  27. package/dist/lib/catalogue/coverage-render.js.map +1 -1
  28. package/dist/lib/catalogue/data-item-coverage.d.ts +13 -0
  29. package/dist/lib/catalogue/data-item-coverage.d.ts.map +1 -0
  30. package/dist/lib/catalogue/data-item-coverage.js +142 -0
  31. package/dist/lib/catalogue/data-item-coverage.js.map +1 -0
  32. package/dist/lib/catalogue/engine-validator.d.ts +6 -0
  33. package/dist/lib/catalogue/engine-validator.d.ts.map +1 -1
  34. package/dist/lib/catalogue/engine-validator.js +17 -0
  35. package/dist/lib/catalogue/engine-validator.js.map +1 -1
  36. package/dist/lib/catalogue/graph-projection.d.ts +8 -0
  37. package/dist/lib/catalogue/graph-projection.d.ts.map +1 -1
  38. package/dist/lib/catalogue/graph-projection.js +13 -0
  39. package/dist/lib/catalogue/graph-projection.js.map +1 -1
  40. package/dist/lib/catalogue/graph-run.d.ts +2 -9
  41. package/dist/lib/catalogue/graph-run.d.ts.map +1 -1
  42. package/dist/lib/catalogue/graph-run.js +6 -11
  43. package/dist/lib/catalogue/graph-run.js.map +1 -1
  44. package/dist/lib/catalogue/impact-run.d.ts.map +1 -1
  45. package/dist/lib/catalogue/impact-run.js +1 -2
  46. package/dist/lib/catalogue/impact-run.js.map +1 -1
  47. package/dist/lib/catalogue/manifest-loader.d.ts +2 -0
  48. package/dist/lib/catalogue/manifest-loader.d.ts.map +1 -1
  49. package/dist/lib/catalogue/manifest-loader.js +9 -0
  50. package/dist/lib/catalogue/manifest-loader.js.map +1 -1
  51. package/dist/lib/catalogue/platform-scope.d.ts +2 -0
  52. package/dist/lib/catalogue/platform-scope.d.ts.map +1 -0
  53. package/dist/lib/catalogue/platform-scope.js +7 -0
  54. package/dist/lib/catalogue/platform-scope.js.map +1 -0
  55. package/dist/lib/catalogue/rubric-coverage-map.yaml +42 -0
  56. package/dist/lib/catalogue/scores-coverage.d.ts +26 -1
  57. package/dist/lib/catalogue/scores-coverage.d.ts.map +1 -1
  58. package/dist/lib/catalogue/scores-coverage.js +38 -0
  59. package/dist/lib/catalogue/scores-coverage.js.map +1 -1
  60. package/dist/lib/catalogue/validate.d.ts.map +1 -1
  61. package/dist/lib/catalogue/validate.js +33 -9
  62. package/dist/lib/catalogue/validate.js.map +1 -1
  63. package/dist/lib/conformance/index.d.ts +6 -0
  64. package/dist/lib/conformance/index.d.ts.map +1 -1
  65. package/dist/lib/conformance/index.js +56 -5
  66. package/dist/lib/conformance/index.js.map +1 -1
  67. package/dist/lib/metamodel/rule-ids.d.ts.map +1 -1
  68. package/dist/lib/metamodel/rule-ids.js +3 -0
  69. package/dist/lib/metamodel/rule-ids.js.map +1 -1
  70. package/dist/lib/snapshot/catalogue-diff.d.ts.map +1 -1
  71. package/dist/lib/snapshot/catalogue-diff.js +15 -1
  72. package/dist/lib/snapshot/catalogue-diff.js.map +1 -1
  73. package/dist/lib/snapshot/verify.d.ts.map +1 -1
  74. package/dist/lib/snapshot/verify.js +6 -0
  75. package/dist/lib/snapshot/verify.js.map +1 -1
  76. package/dist/lib/sync/adr-transitions.d.ts +25 -1
  77. package/dist/lib/sync/adr-transitions.d.ts.map +1 -1
  78. package/dist/lib/sync/adr-transitions.js +59 -5
  79. package/dist/lib/sync/adr-transitions.js.map +1 -1
  80. package/dist/lib/sync/index.d.ts.map +1 -1
  81. package/dist/lib/sync/index.js +31 -1
  82. package/dist/lib/sync/index.js.map +1 -1
  83. package/dist/lib/validate/aggregate.d.ts +4 -0
  84. package/dist/lib/validate/aggregate.d.ts.map +1 -1
  85. package/dist/lib/validate/aggregate.js +31 -15
  86. package/dist/lib/validate/aggregate.js.map +1 -1
  87. package/dist/lib/validate/bundle-coherence.d.ts.map +1 -1
  88. package/dist/lib/validate/bundle-coherence.js +7 -2
  89. package/dist/lib/validate/bundle-coherence.js.map +1 -1
  90. package/dist/lib/validate/dispatch.d.ts.map +1 -1
  91. package/dist/lib/validate/dispatch.js +25 -0
  92. package/dist/lib/validate/dispatch.js.map +1 -1
  93. package/dist/lib/validate/index.d.ts.map +1 -1
  94. package/dist/lib/validate/index.js +32 -10
  95. package/dist/lib/validate/index.js.map +1 -1
  96. package/dist/lib/validate/yaml-parse.d.ts +17 -0
  97. package/dist/lib/validate/yaml-parse.d.ts.map +1 -0
  98. package/dist/lib/validate/yaml-parse.js +112 -0
  99. package/dist/lib/validate/yaml-parse.js.map +1 -0
  100. package/package.json +4 -3
  101. package/scripts/build-verify-package.mjs +5 -1
  102. package/scripts/copy-yaml-assets.mjs +1 -1
  103. package/scripts/validate-app-dependencies.sh +24 -4
  104. package/scripts/validate-app-docs.sh +18 -4
@@ -1,28 +1,43 @@
1
1
  const WARN_MARKER = "[WARN]";
2
+ // A validator that ran over an EMPTY population says so with an `[N/A]` line
3
+ // and prints no `[PASS]`. Counting it as passed is the vacuous pass the
4
+ // empty-set sweep measured (an empty platform SDD validated `passed=8`); it is
5
+ // counted apart instead (R1, ruled 2026-09-29). Exit codes are unchanged: a
6
+ // run that measured nothing neither passes nor fails the gate — it is named.
7
+ // A script that measured PART of its population prints real `[PASS]` lines,
8
+ // so a stray `[N/A]` on one sub-check never demotes a real pass.
9
+ const NA_LINE = /^\[N\/A\]/m;
10
+ const PASS_LINE = /^\[PASS\]/m;
11
+ export function classifyResult(r, opts) {
12
+ if (r.status === "skip")
13
+ return "skipped";
14
+ if (r.exitCode !== 0)
15
+ return "failed";
16
+ const hasWarn = r.stdout.includes(WARN_MARKER);
17
+ if (opts.strict && hasWarn)
18
+ return "failed";
19
+ if (NA_LINE.test(r.stdout) && !PASS_LINE.test(r.stdout))
20
+ return "not-measured";
21
+ return hasWarn ? "warned" : "passed";
22
+ }
2
23
  export function aggregateResults(results, opts) {
3
24
  let passed = 0;
4
25
  let failed = 0;
5
26
  let skipped = 0;
6
27
  let warned = 0;
28
+ let notMeasured = 0;
7
29
  for (const r of results) {
8
- if (r.status === "skip") {
30
+ const outcome = classifyResult(r, opts);
31
+ if (r.status === "run" && r.exitCode === 0 && r.stdout.includes(WARN_MARKER))
32
+ warned++;
33
+ if (outcome === "skipped")
9
34
  skipped++;
10
- continue;
11
- }
12
- const hasWarn = r.stdout.includes(WARN_MARKER);
13
- if (r.exitCode !== 0) {
35
+ else if (outcome === "failed")
14
36
  failed++;
15
- }
16
- else if (hasWarn) {
17
- warned++;
18
- if (opts.strict)
19
- failed++;
20
- else
21
- passed++;
22
- }
23
- else {
37
+ else if (outcome === "not-measured")
38
+ notMeasured++;
39
+ else
24
40
  passed++;
25
- }
26
41
  }
27
42
  return {
28
43
  exitCode: failed > 0 ? 1 : 0,
@@ -30,6 +45,7 @@ export function aggregateResults(results, opts) {
30
45
  failed,
31
46
  skipped,
32
47
  warned,
48
+ notMeasured,
33
49
  };
34
50
  }
35
51
  //# sourceMappingURL=aggregate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/lib/validate/aggregate.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B,MAAM,UAAU,gBAAgB,CAC9B,OAAmC,EACnC,IAAsB;IAEtB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC;;gBACrB,MAAM,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/lib/validate/aggregate.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,6EAA6E;AAC7E,wEAAwE;AACxE,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,iEAAiE;AACjE,MAAM,OAAO,GAAG,YAAY,CAAC;AAC7B,MAAM,SAAS,GAAG,YAAY,CAAC;AAI/B,MAAM,UAAU,cAAc,CAAC,CAAkB,EAAE,IAAsB;IACvE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,cAAc,CAAC;IAC/E,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAmC,EACnC,IAAsB;IAEtB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,MAAM,EAAE,CAAC;QACvF,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;aAChC,IAAI,OAAO,KAAK,QAAQ;YAAE,MAAM,EAAE,CAAC;aACnC,IAAI,OAAO,KAAK,cAAc;YAAE,WAAW,EAAE,CAAC;;YAC9C,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bundle-coherence.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/bundle-coherence.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf;;0CAEsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAoDhC"}
1
+ {"version":3,"file":"bundle-coherence.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/bundle-coherence.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf;;0CAEsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAuDhC"}
@@ -52,8 +52,13 @@ export async function checkBundleCoherence(targetRepo) {
52
52
  }
53
53
  const expected = EXPECTED_FORWARD_BASE[profile];
54
54
  if (expected === undefined) {
55
- lines.push(`[PASS] bundle-coherence: profile '${profile}' declares no forward-base expectation\n`);
56
- return { exitCode: 0, stdout: lines.join("") };
55
+ // Nothing to compare is not a pass: counting it as one inflated the
56
+ // suite's "passed" figure for profiles that carry no expectation.
57
+ return {
58
+ exitCode: 0,
59
+ stdout: "",
60
+ skipped: `profile '${profile}' declares no forward-base expectation — nothing to compare`,
61
+ };
57
62
  }
58
63
  if (forwardBase.name === expected) {
59
64
  lines.push(`[PASS] bundle-coherence: profile '${profile}' ↔ forward base '${forwardBase.name}'\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"bundle-coherence.js","sourceRoot":"","sources":["../../../src/lib/validate/bundle-coherence.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,4EAA4E;AAC5E,uEAAuE;AACvE,yEAAyE;AACzE,6EAA6E;AAC7E,qEAAqE;AACrE,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,qBAAqB,GAA6C;IACtE,kBAAkB,EAAE,mBAAmB;IACvC,qBAAqB,EAAE,cAAc;IACrC,qBAAqB,EAAE,sBAAsB;CAC9C,CAAC;AAWF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,4DAA4D;SACtE,CAAC;IACJ,CAAC;IAED,IAAI,OAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE;YACjD,UAAU,EAAE,iBAAiB,EAAE;SAChC,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wEAAwE;QACxE,sEAAsE;QACtE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,yBAA0B,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;SAC3E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CACR,qCAAqC,OAAO,0CAA0C,CACvF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CACR,qCAAqC,OAAO,qBAAqB,WAAW,CAAC,IAAI,KAAK,CACvF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,uCAAuC,OAAO,2BAA2B,QAAQ,IAAI;QACnF,yBAAyB,WAAW,CAAC,IAAI,mCAAmC;QAC5E,0CAA0C,QAAQ,8BAA8B,WAAW,CAAC,IAAI,cAAc;QAC9G,sDAAsD;QACtD,+CAA+C,CAClD,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"bundle-coherence.js","sourceRoot":"","sources":["../../../src/lib/validate/bundle-coherence.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,4EAA4E;AAC5E,uEAAuE;AACvE,yEAAyE;AACzE,6EAA6E;AAC7E,qEAAqE;AACrE,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,qBAAqB,GAA6C;IACtE,kBAAkB,EAAE,mBAAmB;IACvC,qBAAqB,EAAE,cAAc;IACrC,qBAAqB,EAAE,sBAAsB;CAC9C,CAAC;AAWF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,4DAA4D;SACtE,CAAC;IACJ,CAAC;IAED,IAAI,OAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE;YACjD,UAAU,EAAE,iBAAiB,EAAE;SAChC,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wEAAwE;QACxE,sEAAsE;QACtE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,yBAA0B,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;SAC3E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,oEAAoE;QACpE,kEAAkE;QAClE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,YAAY,OAAO,6DAA6D;SAC1F,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CACR,qCAAqC,OAAO,qBAAqB,WAAW,CAAC,IAAI,KAAK,CACvF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,uCAAuC,OAAO,2BAA2B,QAAQ,IAAI;QACnF,yBAAyB,WAAW,CAAC,IAAI,mCAAmC;QAC5E,0CAA0C,QAAQ,8BAA8B,WAAW,CAAC,IAAI,cAAc;QAC9G,sDAAsD;QACtD,+CAA+C,CAClD,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IACE;;+CAE2C;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG,CAAC;AAEN,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,cAAc,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6MD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,eAAe,EAAE,CAGjF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,eAAe,EAAE,CAY5B"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IACE;;+CAE2C;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG,CAAC;AAEN,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,cAAc,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqOD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,eAAe,EAAE,CAGjF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,eAAe,EAAE,CAY5B"}
@@ -1,4 +1,5 @@
1
1
  import { checkBundleCoherence } from "./bundle-coherence.js";
2
+ import { checkYamlParse } from "./yaml-parse.js";
2
3
  // Validators that accept --app-root / --repo-root flags work fine from the
3
4
  // bundled location because they override their internal ROOT_DIR via the
4
5
  // flag. Validators without that flag (adr-structure, runway-classification,
@@ -65,6 +66,14 @@ const APP_VALIDATORS = [
65
66
  },
66
67
  build: () => ({ status: "run", args: [] }),
67
68
  },
69
+ {
70
+ name: "yaml-parse",
71
+ source: {
72
+ kind: "native",
73
+ run: async (ctx) => checkYamlParse(ctx.targetRepo),
74
+ },
75
+ build: () => ({ status: "run", args: [] }),
76
+ },
68
77
  // Note: validate-runway-classification is intentionally NOT in the app set.
69
78
  // It requires platform-level files (docs/platform/feature-tree.md,
70
79
  // architecture-runway-index.md) that app repos don't own. Per ADR 0089,
@@ -109,6 +118,14 @@ const INTEGRATION_VALIDATORS = [
109
118
  },
110
119
  build: () => ({ status: "run", args: [] }),
111
120
  },
121
+ {
122
+ name: "yaml-parse",
123
+ source: {
124
+ kind: "native",
125
+ run: async (ctx) => checkYamlParse(ctx.targetRepo),
126
+ },
127
+ build: () => ({ status: "run", args: [] }),
128
+ },
112
129
  ];
113
130
  const PLATFORM_VALIDATORS = [
114
131
  {
@@ -183,6 +200,14 @@ const PLATFORM_VALIDATORS = [
183
200
  },
184
201
  build: () => ({ status: "run", args: [] }),
185
202
  },
203
+ {
204
+ name: "yaml-parse",
205
+ source: {
206
+ kind: "native",
207
+ run: async (ctx) => checkYamlParse(ctx.targetRepo),
208
+ },
209
+ build: () => ({ status: "run", args: [] }),
210
+ },
186
211
  // Optional: the upstream validate-docs.sh dispatcher covers the 6
187
212
  // conditional validators (backward-compatibility, deprecation-runway,
188
213
  // migration-completeness, ddd-artifacts, glossary-alignment,
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/lib/validate/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/lib/validate/dispatch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIzE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAID,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C,GACpE,OAAO,CAAC,cAAc,CAAC,CAiDzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIzF,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAID,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C,GACpE,OAAO,CAAC,cAAc,CAAC,CAoDzB"}
@@ -1,5 +1,5 @@
1
1
  import { profileFromRepoKind, readRepoKind } from "../repo-kind.js";
2
- import { aggregateResults } from "./aggregate.js";
2
+ import { aggregateResults, classifyResult } from "./aggregate.js";
3
3
  import { selectValidators } from "./dispatch.js";
4
4
  import { runValidator } from "./runner.js";
5
5
  const SECTION_RULE = "═".repeat(59);
@@ -35,13 +35,17 @@ export async function runValidate(opts, stdout = (line) => process.stdout.write(
35
35
  stdout(result.stdout);
36
36
  if (result.stderr)
37
37
  stdout(result.stderr);
38
- if (result.exitCode === 0)
39
- stdout(pass(`${cfg.name}: ok`));
40
- else
38
+ if (result.exitCode !== 0)
41
39
  stdout(fail(`${cfg.name}: exit ${result.exitCode}`));
40
+ else if (classifyResult(result, { strict: opts.strict }) === "not-measured") {
41
+ stdout(na(`${cfg.name}: nothing measured — its population is empty`));
42
+ }
43
+ else
44
+ stdout(pass(`${cfg.name}: ok`));
42
45
  }
43
46
  const summary = aggregateResults(results, { strict: opts.strict });
44
- stdout(info(`Summary: passed=${summary.passed} failed=${summary.failed} skipped=${summary.skipped} warned=${summary.warned}${opts.strict ? " (strict)" : ""}`));
47
+ stdout(info(`Summary: passed=${summary.passed} failed=${summary.failed} skipped=${summary.skipped} ` +
48
+ `not-measured=${summary.notMeasured} warned=${summary.warned}${opts.strict ? " (strict)" : ""}`));
45
49
  stdout(verdict(summary, validators.length));
46
50
  return { exitCode: summary.exitCode, summary };
47
51
  }
@@ -55,14 +59,29 @@ function verdict(summary, selected) {
55
59
  if (summary.exitCode !== 0)
56
60
  return fail("One or more validators failed");
57
61
  const ran = summary.passed + summary.failed;
58
- if (summary.skipped === 0)
62
+ const nm = summary.notMeasured;
63
+ if (summary.skipped === 0 && nm === 0)
59
64
  return pass("All validators passed");
60
- if (ran === 0) {
65
+ if (ran === 0 && nm === 0) {
61
66
  return warn(`0 of ${selected} validators ran — all ${summary.skipped} skipped. ` +
62
67
  `This is an absence of evidence, not a pass.`);
63
68
  }
64
- return warn(`${ran} of ${selected} validators passed — ${summary.skipped} skipped, ` +
65
- `and a skipped validator is not covered by this verdict.`);
69
+ if (nm === 0) {
70
+ return warn(`${ran} of ${selected} validators passed — ${summary.skipped} skipped, ` +
71
+ `and a skipped validator is not covered by this verdict.`);
72
+ }
73
+ const uncovered = [
74
+ summary.skipped > 0 ? `${summary.skipped} skipped` : "",
75
+ nm > 0 ? `${nm} measured nothing (an empty population)` : "",
76
+ ]
77
+ .filter(Boolean)
78
+ .join(", ");
79
+ if (ran === 0) {
80
+ return warn(`0 of ${selected} validators measured anything — ${uncovered}. ` +
81
+ `This is an absence of evidence, not a pass.`);
82
+ }
83
+ return warn(`${ran} of ${selected} validators passed — ${uncovered}; ` +
84
+ `neither is covered by this verdict.`);
66
85
  }
67
86
  function section(title) {
68
87
  return `\n${SECTION_RULE}\n ${title}\n${SECTION_RULE}\n\n`;
@@ -79,10 +98,13 @@ function fail(msg) {
79
98
  function skip(msg) {
80
99
  return `[SKIP] ${msg}\n`;
81
100
  }
101
+ function na(msg) {
102
+ return `[N/A] ${msg}\n`;
103
+ }
82
104
  function warn(msg) {
83
105
  return `[WARN] ${msg}\n`;
84
106
  }
85
107
  function emptySummary() {
86
- return { exitCode: 1, passed: 0, failed: 0, skipped: 0, warned: 0 };
108
+ return { exitCode: 1, passed: 0, failed: 0, skipped: 0, warned: 0, notMeasured: 0 };
87
109
  }
88
110
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/validate/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/validate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAyB,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAwB,MAAM,aAAa,CAAC;AAcjE,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAqB,EACrB,SAAiC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAErE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,CACJ,IAAI,CACF,gDAAgD,IAAI,CAAC,UAAU,EAAE,CAClE,CACF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAE9C,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC;IAEzC,IAAI,UAAkE,CAAC;IACvE,IAAI,CAAC;QACH,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,UAAU,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aAC3E,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,cAAc,EAAE,CAAC;YAC5E,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,8CAA8C,CAAC,CAAC,CAAC;QACxE,CAAC;;YAAM,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,CACJ,IAAI,CACF,mBAAmB,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,OAAO,GAAG;QACtF,gBAAgB,OAAO,CAAC,WAAW,WAAW,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAClG,CACF,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5C,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,uDAAuD;AACvD,SAAS,OAAO,CAAC,OAAyB,EAAE,QAAgB;IAC1D,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAEzE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAC/B,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5E,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CACT,QAAQ,QAAQ,yBAAyB,OAAO,CAAC,OAAO,YAAY;YAClE,6CAA6C,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACb,OAAO,IAAI,CACT,GAAG,GAAG,OAAO,QAAQ,wBAAwB,OAAO,CAAC,OAAO,YAAY;YACtE,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG;QAChB,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE;QACvD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC,CAAC,EAAE;KAC7D;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,IAAI,CACT,QAAQ,QAAQ,mCAAmC,SAAS,IAAI;YAC9D,6CAA6C,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CACT,GAAG,GAAG,OAAO,QAAQ,wBAAwB,SAAS,IAAI;QACxD,qCAAqC,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,YAAY,OAAO,KAAK,KAAK,YAAY,MAAM,CAAC;AAC9D,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,EAAE,CAAC,GAAW;IACrB,OAAO,SAAS,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACtF,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface YamlParseResult {
2
+ exitCode: number;
3
+ stdout: string;
4
+ skipped?: string;
5
+ }
6
+ export interface YamlParseError {
7
+ readonly file: string;
8
+ readonly code: string;
9
+ readonly message: string;
10
+ }
11
+ /** Strict-parse one YAML text; returns the errors (empty = parses). */
12
+ export declare function strictYamlErrors(text: string): Array<{
13
+ code: string;
14
+ message: string;
15
+ }>;
16
+ export declare function checkYamlParse(targetRepo: string): Promise<YamlParseResult>;
17
+ //# sourceMappingURL=yaml-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-parse.d.ts","sourceRoot":"","sources":["../../../src/lib/validate/yaml-parse.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAOvF;AAeD,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsEjF"}
@@ -0,0 +1,112 @@
1
+ // YAML parse gate — every tracked YAML source must parse STRICTLY.
2
+ //
3
+ // The catalogue builders read YAML file by file and, for most sources, log
4
+ // `invalid YAML` and move on: the file becomes wholly invisible to the
5
+ // catalogue and nothing ever fails. Measured: 19 unparseable files across 4
6
+ // SDDs, 16 in one repo, accumulated that way.
7
+ //
8
+ // THE LOADER IS THE GATE. PyYAML (and any last-key-wins loader) accepts a
9
+ // duplicate key and silently keeps the second value, so a parse-only check
10
+ // with it certifies exactly the corruption a line-surgery transformer
11
+ // produces. `yaml` v2 refuses duplicate keys (DUPLICATE_KEY) and the other
12
+ // malformations a lenient parse glosses — e.g. a `: ` inside an unquoted
13
+ // scalar (`path: (none — tel: URL)`), which no pattern rule catches.
14
+ //
15
+ // Scope: the YAML files git TRACKS (`*.yaml`, `*.yml`) — the repo's sources,
16
+ // not build output or dependencies. Outside a git work tree there is no
17
+ // honest scope, so the check reports a SKIP rather than a pass.
18
+ //
19
+ // A TEMPLATE is not YAML until rendered (Helm/Go `{{- … -}}`, Handlebars).
20
+ // A file that fails to parse AND carries a template directive is listed as
21
+ // templated and not failed — UNLESS one of its errors is a duplicate key: a
22
+ // duplicate key is a duplicate however the file is produced, and exempting it
23
+ // would let any `{{ }}` in a value hide exactly the defect this gate exists for.
24
+ import { execFile } from "node:child_process";
25
+ import { readFile } from "node:fs/promises";
26
+ import { join } from "node:path";
27
+ import { promisify } from "node:util";
28
+ import { parseAllDocuments } from "yaml";
29
+ const execFileAsync = promisify(execFile);
30
+ const TEMPLATE_DIRECTIVE_RE = /\{\{[\s\S]*?\}\}/;
31
+ /** Strict-parse one YAML text; returns the errors (empty = parses). */
32
+ export function strictYamlErrors(text) {
33
+ return parseAllDocuments(text).flatMap((doc) => doc.errors.map((e) => ({
34
+ code: e.code,
35
+ message: e.message.split("\n")[0] ?? e.message,
36
+ })));
37
+ }
38
+ async function trackedYamlFiles(repo) {
39
+ try {
40
+ const { stdout } = await execFileAsync("git", ["-C", repo, "ls-files", "-z", "--", "*.yaml", "*.yml"], { maxBuffer: 64 * 1024 * 1024 });
41
+ return stdout.split("\0").filter((p) => p !== "");
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ export async function checkYamlParse(targetRepo) {
48
+ const files = await trackedYamlFiles(targetRepo);
49
+ if (files === null) {
50
+ return {
51
+ exitCode: 0,
52
+ stdout: "",
53
+ skipped: "not a git work tree — no tracked-file scope to check",
54
+ };
55
+ }
56
+ const failures = [];
57
+ const templated = [];
58
+ let read = 0;
59
+ for (const file of files) {
60
+ let text;
61
+ try {
62
+ text = await readFile(join(targetRepo, file), "utf-8");
63
+ }
64
+ catch {
65
+ continue; // tracked but deleted in the work tree: not a parse question
66
+ }
67
+ read += 1;
68
+ const errors = strictYamlErrors(text);
69
+ if (errors.length > 0 &&
70
+ !errors.some((e) => e.code === "DUPLICATE_KEY") &&
71
+ TEMPLATE_DIRECTIVE_RE.test(text)) {
72
+ templated.push(file);
73
+ continue;
74
+ }
75
+ for (const e of errors) {
76
+ failures.push({ file, code: e.code, message: e.message });
77
+ }
78
+ }
79
+ const checked = read - templated.length;
80
+ const templatedNote = templated.length === 0
81
+ ? ""
82
+ : `[INFO] yaml-parse: ${templated.length} templated file(s) not checked — they do not parse ` +
83
+ `until rendered and carry a {{ … }} directive: ${templated.join(", ")}\n`;
84
+ if (failures.length === 0 && checked === 0) {
85
+ // Zero files checked is absence of evidence, never a pass.
86
+ return {
87
+ exitCode: 0,
88
+ stdout: templatedNote,
89
+ skipped: "no tracked YAML files to parse — nothing to check",
90
+ };
91
+ }
92
+ if (failures.length === 0) {
93
+ return {
94
+ exitCode: 0,
95
+ stdout: templatedNote +
96
+ `[PASS] yaml-parse: ${checked} tracked YAML file(s) parse strictly (duplicate keys refused)\n`,
97
+ };
98
+ }
99
+ const failedFiles = new Set(failures.map((f) => f.file)).size;
100
+ const byCode = new Map();
101
+ for (const f of failures)
102
+ byCode.set(f.code, (byCode.get(f.code) ?? 0) + 1);
103
+ const lines = failures.map((f) => `[FAIL] yaml-parse: ${f.file}: ${f.code}: ${f.message}\n`);
104
+ if (templatedNote !== "")
105
+ lines.unshift(templatedNote);
106
+ lines.push(`[FAIL] yaml-parse: ${failedFiles} of ${checked} tracked YAML file(s) do not parse strictly ` +
107
+ `(${[...byCode].map(([c, n]) => `${c} ×${n}`).join(", ")}). ` +
108
+ `A file that does not parse is invisible to the catalogue; a duplicate key keeps only one ` +
109
+ `of its values under a lenient loader. Fix the file — do not relax the loader.\n`);
110
+ return { exitCode: 1, stdout: lines.join("") };
111
+ }
112
+ //# sourceMappingURL=yaml-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-parse.js","sourceRoot":"","sources":["../../../src/lib/validate/yaml-parse.ts"],"names":[],"mappings":"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"}