instar 1.3.972 → 1.3.974
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.
- package/dist/core/StandardsEnforcementAuditor.d.ts +43 -2
- package/dist/core/StandardsEnforcementAuditor.d.ts.map +1 -1
- package/dist/core/StandardsEnforcementAuditor.js +39 -9
- package/dist/core/StandardsEnforcementAuditor.js.map +1 -1
- package/dist/core/StandardsRegistryParser.d.ts +60 -5
- package/dist/core/StandardsRegistryParser.d.ts.map +1 -1
- package/dist/core/StandardsRegistryParser.js +111 -33
- package/dist/core/StandardsRegistryParser.js.map +1 -1
- package/dist/core/resolveGhBinary.d.ts +8 -0
- package/dist/core/resolveGhBinary.d.ts.map +1 -0
- package/dist/core/resolveGhBinary.js +58 -0
- package/dist/core/resolveGhBinary.js.map +1 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +21 -3
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +46 -46
- package/upgrades/1.3.973.md +47 -0
- package/upgrades/1.3.974.md +74 -0
- package/upgrades/side-effects/gh-binary-resolution.md +95 -0
- package/upgrades/side-effects/honest-denominators-standards.md +147 -0
|
@@ -41,15 +41,56 @@ export interface StandardCoverage {
|
|
|
41
41
|
danglingRefs: string[];
|
|
42
42
|
classifiedAt: string;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* What the audit's own inputs looked like, so a reader can tell an assessment
|
|
46
|
+
* over the WHOLE constitution apart from one over a fragment of it.
|
|
47
|
+
*
|
|
48
|
+
* Born from honest-denominators instance 4 (2026-07-25): this auditor reported
|
|
49
|
+
* `enforcedRatio: 0.0455` over 22 standards while the registry on disk carried
|
|
50
|
+
* 81. Reading the same registry in full gives 0.5375. The ratio was not wrong
|
|
51
|
+
* arithmetic — it was arithmetic over a denominator nobody could see, and the
|
|
52
|
+
* result was a figure 12× more alarming than reality, quoted onward as fact.
|
|
53
|
+
*/
|
|
54
|
+
export interface RegistryProvenance {
|
|
55
|
+
/** Absolute path of the registry file this pass actually read. */
|
|
56
|
+
path: string;
|
|
57
|
+
/** Bytes read — a 46KB copy where the source carries 248KB is a staleness tell. */
|
|
58
|
+
bytes: number;
|
|
59
|
+
/** Article headings found inside detected standards families — the parse denominator. */
|
|
60
|
+
articleHeadings: number;
|
|
61
|
+
/** Headings that parsed into an article. */
|
|
62
|
+
parsed: number;
|
|
63
|
+
/** Headings inside a family that carried no `**Rule.**` and were dropped. */
|
|
64
|
+
droppedHeadings: string[];
|
|
65
|
+
/** Families detected structurally. */
|
|
66
|
+
families: string[];
|
|
67
|
+
/** Registry-parse canary verdict — false means the numbers below are NOT trustworthy. */
|
|
68
|
+
canaryOk: boolean;
|
|
69
|
+
canaryFailures: string[];
|
|
70
|
+
}
|
|
44
71
|
export interface CoverageSummary {
|
|
45
72
|
total: number;
|
|
46
73
|
byKind: Record<EnforcementKind, number>;
|
|
47
|
-
/**
|
|
48
|
-
|
|
74
|
+
/**
|
|
75
|
+
* (ratchet + gate + lint) / total — the fraction of standards with a verified
|
|
76
|
+
* structural guard. **`null` when `total` is 0**: with nothing to divide by
|
|
77
|
+
* there is no ratio, and reporting one (either the flattering 1 or the
|
|
78
|
+
* damning 0) states a measurement that was never taken. Callers must render
|
|
79
|
+
* null as "not assessed", never coerce it to a number.
|
|
80
|
+
*/
|
|
81
|
+
enforcedRatio: number | null;
|
|
49
82
|
/** Names of `documented-only` standards (the gaps). */
|
|
50
83
|
gaps: string[];
|
|
51
84
|
/** Total dangling refs across all standards. */
|
|
52
85
|
danglingCount: number;
|
|
86
|
+
/**
|
|
87
|
+
* True only when the pass read a registry its own canary vouches for. False
|
|
88
|
+
* means every figure in this summary describes a fragment or a drifted parse
|
|
89
|
+
* — surface it beside the numbers rather than presenting them bare.
|
|
90
|
+
*/
|
|
91
|
+
assessmentTrustworthy: boolean;
|
|
92
|
+
/** Provenance of the registry this pass read. */
|
|
93
|
+
registry: RegistryProvenance;
|
|
53
94
|
}
|
|
54
95
|
export interface CoverageReport {
|
|
55
96
|
generatedAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardsEnforcementAuditor.d.ts","sourceRoot":"","sources":["../../src/core/StandardsEnforcementAuditor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAE5F,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClC,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,mFAAmF;IACnF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACxC
|
|
1
|
+
{"version":3,"file":"StandardsEnforcementAuditor.d.ts","sourceRoot":"","sources":["../../src/core/StandardsEnforcementAuditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
import fs from 'node:fs';
|
|
25
25
|
import path from 'node:path';
|
|
26
26
|
import crypto from 'node:crypto';
|
|
27
|
-
import {
|
|
27
|
+
import { parseStandardsRegistryDetailed, runRegistryCanary } from './StandardsRegistryParser.js';
|
|
28
28
|
import { extractEnforcementRefs, flattenRefs } from './StandardEnforcementExtractor.js';
|
|
29
29
|
const KIND_RANK = {
|
|
30
30
|
ratchet: 4, gate: 3, lint: 2, 'spec-only': 1,
|
|
@@ -270,14 +270,19 @@ function repoStructureSignal(projectDir) {
|
|
|
270
270
|
}
|
|
271
271
|
/** Compute the input hash that drives the recompute short-circuit. */
|
|
272
272
|
export function computeInputHash(opts) {
|
|
273
|
-
|
|
273
|
+
// An UNREADABLE registry must not hash identically to an empty-but-present one:
|
|
274
|
+
// that conflation is the honest-denominators shape at the cache layer, where a
|
|
275
|
+
// missing constitution would share a cache slot with a genuinely blank one.
|
|
276
|
+
// `computeCoverage` throws on an unreadable registry (the correct loud failure);
|
|
277
|
+
// this marker only keeps the short-circuit from confusing the two states.
|
|
278
|
+
let registryDigestInput;
|
|
274
279
|
try {
|
|
275
|
-
|
|
280
|
+
registryDigestInput = fs.readFileSync(opts.registryPath, 'utf-8');
|
|
276
281
|
}
|
|
277
|
-
catch {
|
|
278
|
-
|
|
282
|
+
catch (err) {
|
|
283
|
+
registryDigestInput = `unreadable:${opts.registryPath}:${err instanceof Error ? err.message : String(err)}`;
|
|
279
284
|
}
|
|
280
|
-
const regHash = crypto.createHash('sha256').update(
|
|
285
|
+
const regHash = crypto.createHash('sha256').update(registryDigestInput).digest('hex').slice(0, 16);
|
|
281
286
|
return `${regHash}.${repoStructureSignal(opts.projectDir)}`;
|
|
282
287
|
}
|
|
283
288
|
/**
|
|
@@ -293,7 +298,21 @@ export function computeCoverage(opts, prior) {
|
|
|
293
298
|
// return it (only its timestamp would differ on recompute). The short-circuit.
|
|
294
299
|
return prior;
|
|
295
300
|
}
|
|
296
|
-
|
|
301
|
+
// Read ONCE and keep what the parse saw: the audit must be able to state the
|
|
302
|
+
// denominator it computed over (honest-denominators instance 4).
|
|
303
|
+
const registryMarkdown = fs.readFileSync(opts.registryPath, 'utf-8');
|
|
304
|
+
const { articles, diagnostics } = parseStandardsRegistryDetailed(registryMarkdown);
|
|
305
|
+
const canary = runRegistryCanary(articles, diagnostics);
|
|
306
|
+
const registry = {
|
|
307
|
+
path: opts.registryPath,
|
|
308
|
+
bytes: Buffer.byteLength(registryMarkdown, 'utf-8'),
|
|
309
|
+
articleHeadings: diagnostics.articleHeadings,
|
|
310
|
+
parsed: diagnostics.parsed,
|
|
311
|
+
droppedHeadings: diagnostics.droppedHeadings,
|
|
312
|
+
families: diagnostics.families,
|
|
313
|
+
canaryOk: canary.ok,
|
|
314
|
+
canaryFailures: canary.failures,
|
|
315
|
+
};
|
|
297
316
|
const routeTable = loadRouteTable(opts.projectDir);
|
|
298
317
|
// Collect every wanted marker across all articles → ONE bounded src walk.
|
|
299
318
|
const extracted = articles.map((a) => ({ a, refs: extractEnforcementRefs(a) }));
|
|
@@ -317,14 +336,25 @@ export function computeCoverage(opts, prior) {
|
|
|
317
336
|
byKind[s.enforcementKind] += 1;
|
|
318
337
|
const total = standards.length;
|
|
319
338
|
const enforced = byKind.ratchet + byKind.gate + byKind.lint;
|
|
320
|
-
|
|
339
|
+
// No denominator → no ratio. Returning 0 here (the previous behaviour) reads on
|
|
340
|
+
// a dashboard as "0% of our standards are enforced" — a measurement, and an
|
|
341
|
+
// alarming one — when the truth is that nothing was measured at all.
|
|
342
|
+
const enforcedRatio = total === 0 ? null : Number((enforced / total).toFixed(4));
|
|
321
343
|
const gaps = standards.filter((s) => s.enforcementKind === 'documented-only').map((s) => s.standard);
|
|
322
344
|
const danglingCount = standards.reduce((n, s) => n + s.danglingRefs.length, 0);
|
|
323
345
|
return {
|
|
324
346
|
generatedAt: classifiedAt,
|
|
325
347
|
inputHash,
|
|
326
348
|
standards,
|
|
327
|
-
summary: {
|
|
349
|
+
summary: {
|
|
350
|
+
total,
|
|
351
|
+
byKind,
|
|
352
|
+
enforcedRatio,
|
|
353
|
+
gaps,
|
|
354
|
+
danglingCount,
|
|
355
|
+
assessmentTrustworthy: total > 0 && registry.canaryOk,
|
|
356
|
+
registry,
|
|
357
|
+
},
|
|
328
358
|
};
|
|
329
359
|
}
|
|
330
360
|
/** A stable, timestamp-free view used to assert determinism (two runs → identical). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardsEnforcementAuditor.js","sourceRoot":"","sources":["../../src/core/StandardsEnforcementAuditor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StandardsEnforcementAuditor.js","sourceRoot":"","sources":["../../src/core/StandardsEnforcementAuditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,13 +33,53 @@ export interface StandardArticle {
|
|
|
33
33
|
appliedThrough?: string;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* What the parse SAW, so a caller can tell "nothing was dropped" apart from
|
|
37
|
+
* "nothing could be seen" — the honest-denominator rule applied to the parse
|
|
38
|
+
* itself. `articleHeadings` is the denominator (`###` headings inside detected
|
|
39
|
+
* families); `parsed` is the numerator; `droppedHeadings` names the difference.
|
|
38
40
|
*/
|
|
41
|
+
export interface RegistryParseDiagnostics {
|
|
42
|
+
/** Families detected structurally (a `##` section with ≥1 Rule-bearing `###`). */
|
|
43
|
+
families: string[];
|
|
44
|
+
/** `###` headings inside detected families — the denominator. */
|
|
45
|
+
articleHeadings: number;
|
|
46
|
+
/** Headings that parsed into an article (i.e. carried a `**Rule.**`). */
|
|
47
|
+
parsed: number;
|
|
48
|
+
/** Headings inside a detected family that carried NO Rule line — silently lost before. */
|
|
49
|
+
droppedHeadings: string[];
|
|
50
|
+
/** `##` sections skipped because no `###` under them carried a Rule (Genesis, Two layers, …). */
|
|
51
|
+
nonFamilySections: string[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parse the registry markdown into standards articles PLUS what the parse saw.
|
|
55
|
+
* Pure function — no I/O — so tests can feed fixture content and production
|
|
56
|
+
* feeds the real file.
|
|
57
|
+
*/
|
|
58
|
+
export declare function parseStandardsRegistryDetailed(markdown: string): {
|
|
59
|
+
articles: StandardArticle[];
|
|
60
|
+
diagnostics: RegistryParseDiagnostics;
|
|
61
|
+
};
|
|
62
|
+
/** Parse the registry markdown into standards articles. */
|
|
39
63
|
export declare function parseStandardsRegistry(markdown: string): StandardArticle[];
|
|
40
64
|
/** Resolve + read + parse the on-disk registry. Throws if the file is missing. */
|
|
41
65
|
export declare function loadStandardsRegistry(registryPath: string): StandardArticle[];
|
|
42
|
-
/**
|
|
66
|
+
/** Read + parse the on-disk registry WITH parse diagnostics. Throws if missing. */
|
|
67
|
+
export declare function loadStandardsRegistryDetailed(registryPath: string): {
|
|
68
|
+
articles: StandardArticle[];
|
|
69
|
+
diagnostics: RegistryParseDiagnostics;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Coarse backstop only — catches a TOTAL parse collapse, nothing subtler.
|
|
73
|
+
*
|
|
74
|
+
* This constant used to be the canary's whole strength, with a comment reading
|
|
75
|
+
* "far below the real ~21". The registry grew to 81 articles and the constant
|
|
76
|
+
* never moved, so by 2026-07-25 it would have passed happily while 65 of 81
|
|
77
|
+
* articles vanished: a guard whose threshold never grew with the thing it
|
|
78
|
+
* guards. The real check is now `droppedHeadings` — a COMPLETENESS comparison
|
|
79
|
+
* against the count of article headings actually present, which needs no
|
|
80
|
+
* maintenance as the registry grows. Keep this floor as a backstop for callers
|
|
81
|
+
* that have no diagnostics to compare against; never treat it as sufficient.
|
|
82
|
+
*/
|
|
43
83
|
export declare const MIN_EXPECTED_ARTICLES = 15;
|
|
44
84
|
/**
|
|
45
85
|
* Anchor articles that MUST parse (with a non-empty rule) for the gate to be
|
|
@@ -51,7 +91,22 @@ export interface RegistryCanaryResult {
|
|
|
51
91
|
ok: boolean;
|
|
52
92
|
articleCount: number;
|
|
53
93
|
failures: string[];
|
|
94
|
+
/**
|
|
95
|
+
* The denominator the completeness check ran against — `###` headings found
|
|
96
|
+
* inside detected families. `null` when the caller supplied no diagnostics,
|
|
97
|
+
* which means completeness was NOT assessed (only the coarse floor ran).
|
|
98
|
+
*/
|
|
99
|
+
articleHeadings: number | null;
|
|
100
|
+
/** False when no diagnostics were supplied — the canary could not check completeness. */
|
|
101
|
+
completenessAssessed: boolean;
|
|
54
102
|
}
|
|
55
|
-
/**
|
|
56
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Run the registry parse canary over a parsed article set.
|
|
105
|
+
*
|
|
106
|
+
* Pass `diagnostics` (from `parseStandardsRegistryDetailed`) to get the real
|
|
107
|
+
* check: every article heading present in a standards family must have parsed.
|
|
108
|
+
* Without it only the coarse floor + anchor checks run, and the result says so
|
|
109
|
+
* via `completenessAssessed: false` rather than implying a clean bill of health.
|
|
110
|
+
*/
|
|
111
|
+
export declare function runRegistryCanary(articles: StandardArticle[], diagnostics?: RegistryParseDiagnostics): RegistryCanaryResult;
|
|
57
112
|
//# sourceMappingURL=StandardsRegistryParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardsRegistryParser.d.ts","sourceRoot":"","sources":["../../src/core/StandardsRegistryParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,MAAM,WAAW,eAAe;IAC9B,2GAA2G;IAC3G,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"StandardsRegistryParser.d.ts","sourceRoot":"","sources":["../../src/core/StandardsRegistryParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,MAAM,WAAW,eAAe;IAC9B,2GAA2G;IAC3G,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAoCD;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,kFAAkF;IAClF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iGAAiG;IACjG,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAiDD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,GACf;IAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,WAAW,EAAE,wBAAwB,CAAA;CAAE,CAsBxE;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAE1E;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,EAAE,CAG7E;AAED,mFAAmF;AACnF,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,WAAW,EAAE,wBAAwB,CAAA;CAAE,CAExE;AAID;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yFAAyF;IACzF,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,CAAC,EAAE,wBAAwB,GACrC,oBAAoB,CAsBtB"}
|
|
@@ -17,53 +17,64 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import fs from 'node:fs';
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* Standards families are detected STRUCTURALLY, not by name: a `##` section is a
|
|
21
|
+
* standards family iff it contains at least one `###` heading carrying a
|
|
22
|
+
* `**Rule.**` line. Other `##` sections (Why this exists, Genesis, Two layers,
|
|
23
|
+
* How a standard joins, The Stakes) carry `###` subheadings with no Rule line
|
|
24
|
+
* and are therefore excluded automatically.
|
|
25
|
+
*
|
|
26
|
+
* This replaced a hardcoded five-name allowlist (`The Root|The Substrate|
|
|
27
|
+
* Building|Shipping|Interaction`). That allowlist was a silent-drop generator:
|
|
28
|
+
* the registry grew a SIXTH family ("The Fractal — the framework that develops
|
|
29
|
+
* itself") and every article under it was discarded with no signal anywhere —
|
|
30
|
+
* found 2026-07-25 auditing this instrument (honest-denominators, instance 4).
|
|
31
|
+
* A name allowlist can only ever be as current as the last person who edited it;
|
|
32
|
+
* the structural rule needs no maintenance.
|
|
23
33
|
*/
|
|
24
|
-
|
|
25
|
-
/** Any `##` heading ends the current family's article-collection scope. */
|
|
34
|
+
/** Any `##` heading opens a new section scope. */
|
|
26
35
|
const ANY_H2_RE = /^##\s+/;
|
|
36
|
+
const H2_NAME_RE = /^##\s+(.+?)\s*$/;
|
|
27
37
|
const ARTICLE_RE = /^###\s+(.+?)\s*$/;
|
|
38
|
+
/**
|
|
39
|
+
* Family display name: the heading text up to the first dash separator, so
|
|
40
|
+
* "The Substrate — the model-level truths …" stays "The Substrate" (the value
|
|
41
|
+
* the `?family=` filter and the coverage report have always carried).
|
|
42
|
+
*/
|
|
43
|
+
function familyName(heading) {
|
|
44
|
+
return heading.split(/\s+[—–-]\s+/)[0].trim();
|
|
45
|
+
}
|
|
28
46
|
/** Extract the text after a `**Label.**` marker on a line (or '' if absent). */
|
|
29
47
|
function fieldAfter(line, label) {
|
|
30
48
|
const m = line.match(new RegExp(`^\\*\\*${label}\\.\\*\\*\\s*(.*)$`));
|
|
31
49
|
return m ? m[1].trim() : null;
|
|
32
50
|
}
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
export function parseStandardsRegistry(markdown) {
|
|
38
|
-
const lines = markdown.split('\n');
|
|
39
|
-
const articles = [];
|
|
40
|
-
let currentFamily = null;
|
|
51
|
+
/** Split the registry into `##` sections, each holding its `###` blocks. */
|
|
52
|
+
function readSections(markdown) {
|
|
53
|
+
const sections = [];
|
|
54
|
+
let section = null;
|
|
41
55
|
let cur = null;
|
|
56
|
+
let curName = '';
|
|
42
57
|
const flush = () => {
|
|
43
|
-
if (
|
|
44
|
-
|
|
58
|
+
if (section && cur)
|
|
59
|
+
section.blocks.push({ name: curName, article: cur });
|
|
45
60
|
cur = null;
|
|
61
|
+
curName = '';
|
|
46
62
|
};
|
|
47
|
-
for (const line of
|
|
48
|
-
|
|
49
|
-
if (famMatch) {
|
|
63
|
+
for (const line of markdown.split('\n')) {
|
|
64
|
+
if (ANY_H2_RE.test(line)) {
|
|
50
65
|
flush();
|
|
51
|
-
|
|
66
|
+
const h2 = line.match(H2_NAME_RE);
|
|
67
|
+
section = { heading: h2 ? h2[1].trim() : '', blocks: [] };
|
|
68
|
+
sections.push(section);
|
|
52
69
|
continue;
|
|
53
70
|
}
|
|
54
|
-
|
|
55
|
-
// stops us from collecting its ### subheadings as articles).
|
|
56
|
-
if (ANY_H2_RE.test(line) && !famMatch) {
|
|
57
|
-
flush();
|
|
58
|
-
currentFamily = null;
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
if (!currentFamily)
|
|
71
|
+
if (!section)
|
|
62
72
|
continue;
|
|
63
73
|
const artMatch = line.match(ARTICLE_RE);
|
|
64
74
|
if (artMatch) {
|
|
65
75
|
flush();
|
|
66
|
-
|
|
76
|
+
curName = artMatch[1].trim();
|
|
77
|
+
cur = { family: familyName(section.heading), name: curName, rule: '', inPractice: '' };
|
|
67
78
|
continue;
|
|
68
79
|
}
|
|
69
80
|
if (!cur)
|
|
@@ -87,15 +98,66 @@ export function parseStandardsRegistry(markdown) {
|
|
|
87
98
|
}
|
|
88
99
|
}
|
|
89
100
|
flush();
|
|
90
|
-
return
|
|
101
|
+
return sections;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Parse the registry markdown into standards articles PLUS what the parse saw.
|
|
105
|
+
* Pure function — no I/O — so tests can feed fixture content and production
|
|
106
|
+
* feeds the real file.
|
|
107
|
+
*/
|
|
108
|
+
export function parseStandardsRegistryDetailed(markdown) {
|
|
109
|
+
const sections = readSections(markdown);
|
|
110
|
+
const articles = [];
|
|
111
|
+
const diagnostics = {
|
|
112
|
+
families: [], articleHeadings: 0, parsed: 0, droppedHeadings: [], nonFamilySections: [],
|
|
113
|
+
};
|
|
114
|
+
for (const section of sections) {
|
|
115
|
+
// Structural family test: at least one `###` block under this `##` carries a Rule.
|
|
116
|
+
const isFamily = section.blocks.some((b) => b.article.rule);
|
|
117
|
+
if (!isFamily) {
|
|
118
|
+
if (section.heading)
|
|
119
|
+
diagnostics.nonFamilySections.push(section.heading);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
diagnostics.families.push(familyName(section.heading));
|
|
123
|
+
for (const b of section.blocks) {
|
|
124
|
+
diagnostics.articleHeadings += 1;
|
|
125
|
+
if (b.article.rule) {
|
|
126
|
+
articles.push(b.article);
|
|
127
|
+
diagnostics.parsed += 1;
|
|
128
|
+
}
|
|
129
|
+
else
|
|
130
|
+
diagnostics.droppedHeadings.push(`${familyName(section.heading)} › ${b.name}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return { articles, diagnostics };
|
|
134
|
+
}
|
|
135
|
+
/** Parse the registry markdown into standards articles. */
|
|
136
|
+
export function parseStandardsRegistry(markdown) {
|
|
137
|
+
return parseStandardsRegistryDetailed(markdown).articles;
|
|
91
138
|
}
|
|
92
139
|
/** Resolve + read + parse the on-disk registry. Throws if the file is missing. */
|
|
93
140
|
export function loadStandardsRegistry(registryPath) {
|
|
94
141
|
const content = fs.readFileSync(registryPath, 'utf-8');
|
|
95
142
|
return parseStandardsRegistry(content);
|
|
96
143
|
}
|
|
144
|
+
/** Read + parse the on-disk registry WITH parse diagnostics. Throws if missing. */
|
|
145
|
+
export function loadStandardsRegistryDetailed(registryPath) {
|
|
146
|
+
return parseStandardsRegistryDetailed(fs.readFileSync(registryPath, 'utf-8'));
|
|
147
|
+
}
|
|
97
148
|
// ── Canary (state-detector drift guard) ───────────────────────────────────
|
|
98
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* Coarse backstop only — catches a TOTAL parse collapse, nothing subtler.
|
|
151
|
+
*
|
|
152
|
+
* This constant used to be the canary's whole strength, with a comment reading
|
|
153
|
+
* "far below the real ~21". The registry grew to 81 articles and the constant
|
|
154
|
+
* never moved, so by 2026-07-25 it would have passed happily while 65 of 81
|
|
155
|
+
* articles vanished: a guard whose threshold never grew with the thing it
|
|
156
|
+
* guards. The real check is now `droppedHeadings` — a COMPLETENESS comparison
|
|
157
|
+
* against the count of article headings actually present, which needs no
|
|
158
|
+
* maintenance as the registry grows. Keep this floor as a backstop for callers
|
|
159
|
+
* that have no diagnostics to compare against; never treat it as sufficient.
|
|
160
|
+
*/
|
|
99
161
|
export const MIN_EXPECTED_ARTICLES = 15;
|
|
100
162
|
/**
|
|
101
163
|
* Anchor articles that MUST parse (with a non-empty rule) for the gate to be
|
|
@@ -109,12 +171,22 @@ export const ANCHOR_ARTICLES = [
|
|
|
109
171
|
'Observability',
|
|
110
172
|
'Never-Waste Feedback',
|
|
111
173
|
];
|
|
112
|
-
/**
|
|
113
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Run the registry parse canary over a parsed article set.
|
|
176
|
+
*
|
|
177
|
+
* Pass `diagnostics` (from `parseStandardsRegistryDetailed`) to get the real
|
|
178
|
+
* check: every article heading present in a standards family must have parsed.
|
|
179
|
+
* Without it only the coarse floor + anchor checks run, and the result says so
|
|
180
|
+
* via `completenessAssessed: false` rather than implying a clean bill of health.
|
|
181
|
+
*/
|
|
182
|
+
export function runRegistryCanary(articles, diagnostics) {
|
|
114
183
|
const failures = [];
|
|
115
184
|
if (articles.length < MIN_EXPECTED_ARTICLES) {
|
|
116
185
|
failures.push(`only ${articles.length} articles parsed (expected ≥ ${MIN_EXPECTED_ARTICLES}) — registry format may have drifted`);
|
|
117
186
|
}
|
|
187
|
+
if (diagnostics && diagnostics.droppedHeadings.length > 0) {
|
|
188
|
+
failures.push(`${diagnostics.droppedHeadings.length} of ${diagnostics.articleHeadings} article headings parsed with no **Rule.** line and were dropped: ${diagnostics.droppedHeadings.join('; ')}`);
|
|
189
|
+
}
|
|
118
190
|
for (const anchor of ANCHOR_ARTICLES) {
|
|
119
191
|
const hit = articles.find(a => a.name.toLowerCase().includes(anchor.toLowerCase()));
|
|
120
192
|
if (!hit)
|
|
@@ -122,6 +194,12 @@ export function runRegistryCanary(articles) {
|
|
|
122
194
|
else if (!hit.rule)
|
|
123
195
|
failures.push(`anchor article "${anchor}" parsed with an empty rule`);
|
|
124
196
|
}
|
|
125
|
-
return {
|
|
197
|
+
return {
|
|
198
|
+
ok: failures.length === 0,
|
|
199
|
+
articleCount: articles.length,
|
|
200
|
+
failures,
|
|
201
|
+
articleHeadings: diagnostics ? diagnostics.articleHeadings : null,
|
|
202
|
+
completenessAssessed: Boolean(diagnostics),
|
|
203
|
+
};
|
|
126
204
|
}
|
|
127
205
|
//# sourceMappingURL=StandardsRegistryParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardsRegistryParser.js","sourceRoot":"","sources":["../../src/core/StandardsRegistryParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAoBzB
|
|
1
|
+
{"version":3,"file":"StandardsRegistryParser.js","sourceRoot":"","sources":["../../src/core/StandardsRegistryParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @returns the absolute path to `gh`, or null when it genuinely cannot be found.
|
|
3
|
+
* Never throws — callers decide what a missing binary means for them.
|
|
4
|
+
*/
|
|
5
|
+
export declare function resolveGhBinary(): string | null;
|
|
6
|
+
/** Test seam: forget the cached probe so a test can vary the filesystem. */
|
|
7
|
+
export declare function __resetGhBinaryCacheForTests(): void;
|
|
8
|
+
//# sourceMappingURL=resolveGhBinary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGhBinary.d.ts","sourceRoot":"","sources":["../../src/core/resolveGhBinary.ts"],"names":[],"mappings":"AAmCA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAgB/C;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,IAAI,IAAI,CAGnD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the `gh` binary by absolute path instead of trusting the inherited PATH.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS (found 2026-07-25 closing Tier 1 of convergence-towards-coherence):
|
|
5
|
+
* the server is started by launchd, which supplies a minimal PATH that does NOT
|
|
6
|
+
* include `/opt/homebrew/bin`. Every in-process `execFileSync('gh', …)` therefore
|
|
7
|
+
* died with a raw `spawnSync gh ENOENT`. The visible consequence was that
|
|
8
|
+
* `building → merged` on a project item could never succeed on this install — the
|
|
9
|
+
* stage gate correctly refuses to take the caller's word and verifies the PR with
|
|
10
|
+
* `gh`, so a missing binary read as "cannot verify" and the item stayed open.
|
|
11
|
+
*
|
|
12
|
+
* That is the second time this exact transition has been unreachable: see the
|
|
13
|
+
* #866 note at the `ghPrView` callsite in routes.ts (2026-06-06), where the
|
|
14
|
+
* helper was simply not injected. Same symptom, different cause, so the fix here
|
|
15
|
+
* is deliberately about RESOLUTION rather than about that one callsite.
|
|
16
|
+
*
|
|
17
|
+
* Mirrors the established in-repo pattern (`BitwardenProvider.findBw`), minus its
|
|
18
|
+
* `which` fallback: explicit override → cached → common absolute install locations.
|
|
19
|
+
* No subprocess is spawned at all — resolution is pure filesystem existence checks,
|
|
20
|
+
* so this cannot block the event loop and needs no sync-op funnel. A gh installed
|
|
21
|
+
* somewhere unusual is served by INSTAR_GH_PATH, which the failure message names.
|
|
22
|
+
*
|
|
23
|
+
* Signal, not authority: this resolves a path or returns null. It makes no
|
|
24
|
+
* decision about whether an operation may proceed — callers keep that judgement,
|
|
25
|
+
* and a null result must surface as a NAMED diagnostic rather than as a silent
|
|
26
|
+
* skip or a fabricated pass.
|
|
27
|
+
*/
|
|
28
|
+
import fs from 'node:fs';
|
|
29
|
+
/** Common absolute locations, in preference order. */
|
|
30
|
+
const CANDIDATES = ['/opt/homebrew/bin/gh', '/usr/local/bin/gh', '/usr/bin/gh'];
|
|
31
|
+
let cached = null;
|
|
32
|
+
let probed = false;
|
|
33
|
+
/**
|
|
34
|
+
* @returns the absolute path to `gh`, or null when it genuinely cannot be found.
|
|
35
|
+
* Never throws — callers decide what a missing binary means for them.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveGhBinary() {
|
|
38
|
+
const override = process.env.INSTAR_GH_PATH;
|
|
39
|
+
if (override && fs.existsSync(override))
|
|
40
|
+
return override;
|
|
41
|
+
if (probed)
|
|
42
|
+
return cached;
|
|
43
|
+
probed = true;
|
|
44
|
+
for (const candidate of CANDIDATES) {
|
|
45
|
+
if (fs.existsSync(candidate)) {
|
|
46
|
+
cached = candidate;
|
|
47
|
+
return cached;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
cached = null;
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/** Test seam: forget the cached probe so a test can vary the filesystem. */
|
|
54
|
+
export function __resetGhBinaryCacheForTests() {
|
|
55
|
+
cached = null;
|
|
56
|
+
probed = false;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=resolveGhBinary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGhBinary.js","sourceRoot":"","sources":["../../src/core/resolveGhBinary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,aAAa,CAAU,CAAC;AAEzF,IAAI,MAAM,GAAkB,IAAI,CAAC;AACjC,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,IAAI,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEzD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,IAAI,CAAC;IAEd,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,SAAS,CAAC;YACnB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,GAAG,IAAI,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,4BAA4B;IAC1C,MAAM,GAAG,IAAI,CAAC;IACd,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC"}
|