@nielspeter/eess-ts 0.10.1 → 0.11.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.
@@ -1 +1 @@
1
- {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/core/diagnose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAO3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD;;;;;;GAMG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,KAAK,CAAC,EAAE,MAAM,SAAS,QAAQ,EAAE,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAA;IAChC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;IAC9B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IAC1C;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAA;IAC5B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAE7B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAA;IAEjC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,MAAM,CAAA;IAErC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAElC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAE1B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;CACrC;AAED,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EACT,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,eAAe;IACjB;;;;;;;;;;;;;OAaG;OACD,eAAe;IACjB;;;;;;;;OAQG;OACD,OAAO;IACT;;;;;;OAMG;OACD,kBAAkB;IACpB;;;;;;;;OAQG;OACD,kBAAkB,CAAA;IACtB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,OAAO,CAAC,EAAE,WAAW,GACpB,iBAAiB,EAAE,CA0NrB"}
1
+ {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/core/diagnose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAc3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD;;;;;;GAMG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,KAAK,CAAC,EAAE,MAAM,SAAS,QAAQ,EAAE,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAA;IAChC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;IAC9B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IAC1C;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAA;IAC5B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAE7B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAA;IAEjC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,MAAM,CAAA;IAErC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAElC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAE1B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;CACrC;AAED,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EACT,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,eAAe;IACjB;;;;;;;;;;;;;OAaG;OACD,eAAe;IACjB;;;;;;;;OAQG;OACD,OAAO;IACT;;;;;;OAMG;OACD,kBAAkB;IACpB;;;;;;;;OAQG;OACD,kBAAkB,CAAA;IACtB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,OAAO,CAAC,EAAE,WAAW,GACpB,iBAAiB,EAAE,CAsNrB"}
@@ -1,8 +1,8 @@
1
1
  import { TerminalBuilder } from './terminal-builder.js';
2
- import { diagnoseGlob, syntacticFault, FAULT_ADVICE, ON_DISK_ADVICE } from './glob-diagnosis.js';
2
+ import { deadSiteRoute, diagnoseGlob, syntacticFault, CARDINALITY_REMEDY, FAULT_ADVICE, ON_DISK_ADVICE, } from './glob-diagnosis.js';
3
3
  import { globSitesOf, isDeadSite } from './glob-evaluator.js';
4
4
  import { pathUniverse } from './path-universe.js';
5
- import { cardinalityDeadSiteIsAtFault, diskSet } from './disk-set.js';
5
+ import { diskSet } from './disk-set.js';
6
6
  import { isDeadGlobTree } from './glob-evaluator.js';
7
7
  import { emptyProjectAdvice, loadedNothing } from './empty-project-advice.js';
8
8
  import { isFaultPosition } from '@nielspeter/eess/internal';
@@ -198,9 +198,9 @@ export function diagnose(rules, project) {
198
198
  // bug 0357. The exemption lived only in `zeroSubjectsFinding` below, which this path
199
199
  // never reaches.
200
200
  if (rule.assertsCardinality?.() === true &&
201
- !cardinalityDeadSiteIsAtFault(target, site.glob, syntacticFault(site.glob, site.kind, site.base) !== undefined))
201
+ deadSiteRoute(diagnoseGlob(site, universe, diskSet(target))) === undefined)
202
202
  continue;
203
- findings.push(describe(site, name, universe, target));
203
+ findings.push(describe(site, name, universe, target, rule.assertsCardinality?.() === true));
204
204
  }
205
205
  }
206
206
  // LAST, and only if nothing else spoke for this rule. A dead glob, a missing
@@ -365,11 +365,27 @@ function syntacticFindings(rule, trees) {
365
365
  }
366
366
  return findings;
367
367
  }
368
- function describe(site, rule, universe, project) {
368
+ function describe(site, rule, universe, project, isCardinality) {
369
369
  // The disk set is reached only from here, so a project with no dead globs
370
370
  // never walks the filesystem.
371
371
  const diagnosis = diagnoseGlob(site, universe, diskSet(project));
372
372
  const onDiskAdvice = diagnosis.onDisk ? ON_DISK_ADVICE[diagnosis.onDisk] : '';
373
+ const cause = onDiskAdvice === '' ? FAULT_ADVICE[diagnosis.fault] : onDiskAdvice;
374
+ // The REMEDY too, from the same table `check` uses — bug 0364. `doctor` is what an adopter
375
+ // reaches first, and it carried the cause and nothing to do about it, so three rounds of
376
+ // work on what this sentence must say (never offer deletion, name the achievable lever)
377
+ // reached only the second tool. Shared rather than copied: this pair grew two
378
+ // hand-maintained copies of one predicate once, they disagreed about `discovery`, and the
379
+ // build stayed green.
380
+ //
381
+ // Only for a CARDINALITY rule, because `CARDINALITY_REMEDY` is that shape's remedy — a
382
+ // positive-assertion rule's dead glob is answered by `check`'s "correct the glob, or
383
+ // remove the rule", and offering "do not delete this rule" for it would be false.
384
+ const route = deadSiteRoute(diagnosis);
385
+ // Joined with ". " exactly as `check` does. A bare space produced "…inside a directory
386
+ // Correct the selector…" — two sentences run together — which architecture review measured
387
+ // in the shipped `doctor` output.
388
+ const remedy = isCardinality && route !== undefined ? `. ${CARDINALITY_REMEDY[route]}` : '';
373
389
  return {
374
390
  kind: 'dead-glob',
375
391
  rule,
@@ -378,7 +394,7 @@ function describe(site, rule, universe, project) {
378
394
  position: site.position,
379
395
  fault: diagnosis.fault,
380
396
  onDisk: diagnosis.onDisk,
381
- advice: onDiskAdvice === '' ? FAULT_ADVICE[diagnosis.fault] : onDiskAdvice,
397
+ advice: `${cause}${remedy}`,
382
398
  };
383
399
  }
384
400
  function ruleName(rule) {
@@ -1 +1 @@
1
- {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/core/diagnose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/core/diagnose.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,81 @@ export type OnDisk = 'holds-typescript' | 'no-typescript' | 'absent' | 'not-dete
25
25
  export interface DiskSet {
26
26
  /** Classify a glob by what exists on disk under the paths it matches. */
27
27
  classify(glob: string): OnDisk;
28
+ /**
29
+ * Does this glob match FILES on disk and no directory at all?
30
+ *
31
+ * The kind-aware question `classify` cannot answer. A `parent-dir` glob — what
32
+ * `resideInFolder` reads — can never match a file, so a glob naming one is broken in a way
33
+ * no tsconfig `include` can fix. `glob-diagnosis` already detects that from the project's
34
+ * own file list; a file OUTSIDE the project is not in that list, and before this the fault
35
+ * was invisible there and the author was offered the tsconfig instead
36
+ * ([bug 0363](../../../../work/bugs/fixed/0363-a-remedy-that-cannot-remediate-survives-one-input-over.md)).
37
+ *
38
+ * `false` when the walk cannot say — an absent path, or a walk that gave up. A claim this
39
+ * specific must be earned, and "I did not look" is not evidence for it.
40
+ */
41
+ matchesOnlyFiles?(glob: string): boolean;
42
+ /**
43
+ * Present ONLY when the walk gave up, and then verdict-bearing.
44
+ *
45
+ * `classify` answers `not-determined` for every glob in that state, which
46
+ * since 0355 means a cardinality rule stays green — so the caller that
47
+ * consumes a classification has to be able to tell "the disk says no" from
48
+ * "the walk never looked". Reading `classify` alone cannot.
49
+ */
50
+ readonly exhaustion?: WalkExhaustion;
28
51
  }
52
+ /**
53
+ * What the walk read before it stopped, and what dominated it.
54
+ *
55
+ * `consumers` exists because of ADR-009 rule 2: the remedy has to be real, and
56
+ * "your repository is too large" is not one — the adopter cannot act on it.
57
+ * [Spike 0368](../../../../work/spikes/0368-what-the-exhaustion-finding-can-tell-an-adopter-to-do.md)
58
+ * measured why naming directories IS actionable: pruning removes **88.9%** of
59
+ * entries in a repository with no generated output at all, so a repository that
60
+ * exhausts is overwhelmingly carrying directories that should never have been
61
+ * walked. One adopter's `.wrangler` was **58%** of their entries by itself.
62
+ */
63
+ export interface WalkExhaustion {
64
+ /** The directory the walk started from. */
65
+ readonly root: string;
66
+ /** The budget it exceeded. */
67
+ readonly budget: number;
68
+ /** Largest first — the directories to name in the finding. */
69
+ readonly consumers: readonly WalkConsumer[];
70
+ }
71
+ /** One subtree's share of the walk. Not exported: `WalkExhaustion` carries it. */
72
+ interface WalkConsumer {
73
+ /** Path relative to `root`. */
74
+ readonly dir: string;
75
+ readonly entries: number;
76
+ }
77
+ /**
78
+ * Budget override for the MEMOIZED path. Tests only.
79
+ *
80
+ * `buildDiskSet` above already takes an injectable budget and is documented
81
+ * "exported for tests only" — but it bypasses the memo, and the production
82
+ * consumer of a classification is `deadSiteRoute` in `glob-diagnosis.ts`, which goes
83
+ * through `diskSet(project)`. So a test could construct an exhausted set and
84
+ * could not make a RULE see one, which left bug 0359's defect reachable only
85
+ * below the public entry point. A test that drives a stand-in instead of
86
+ * `violations()` is how a suite stays green while the defect survives.
87
+ *
88
+ * Reaching exhaustion honestly is not an option: the budget is 500,000 entries.
89
+ *
90
+ * This overrides the constant and clears the memo, so the walk really runs, the
91
+ * real `classify` answers, and the finding travels the real path — only the
92
+ * number differs from production.
93
+ */
94
+ export declare function setDiskWalkBudgetForTests(limit: number | undefined): void;
95
+ /**
96
+ * The project's disk set, walked at most once and only when asked.
97
+ *
98
+ * Lazy on purpose. This is only ever reached from `diagnoseGlob`, which is
99
+ * only ever reached from an already-firing fault, so a project with no faults
100
+ * never touches the filesystem. An eager version would charge every `check()`
101
+ * a recursive walk to answer a question no fault asked.
102
+ */
29
103
  /**
30
104
  * The policy alone, as a TOTAL function on the four classifications.
31
105
  *
@@ -40,28 +114,6 @@ export interface DiskSet {
40
114
  * cannot silently stop covering a case when a fifth is added — it stops compiling.
41
115
  */
42
116
  export declare function contradictsAbsence(onDisk: OnDisk): boolean;
43
- /**
44
- * Is a dead site on a CARDINALITY rule a real fault, given the glob and the disk?
45
- *
46
- * Two independent ways to be one, and the second was missing for a release:
47
- *
48
- * 1. **The glob is broken in every possible project** — a syntactic fault, decided from the
49
- * text with no filesystem and no universe. `'./src/**'` is one character wrong and matches
50
- * nothing anywhere.
51
- * 2. **The filesystem contradicts the absence claim** — `contradictsAbsence` above.
52
- *
53
- * Bug 0357 added the disk test and, by placing it after `isDeadSite`, dropped the first.
54
- * Measured on a healthy project with `src/a.ts` loaded: a `.notExist()` over `'./src/**'`
55
- * went green in `doctor` AND `check`, while the same glob on a positive-assertion rule
56
- * reported — so a ratchet broken by one character said nothing in either tool, and the
57
- * directory it names exists, is in the project, and holds TypeScript. Shipped in 0.10.0 and
58
- * caught by a review of the review's own fixes.
59
- *
60
- * `diagnose.ts` states the principle twice about itself — syntactic faults "are properties of
61
- * the glob text, not of what loaded", and survive even an empty project. They must survive
62
- * this narrowing too.
63
- */
64
- export declare function cardinalityDeadSiteIsAtFault(project: ArchProject, glob: string, hasSyntacticFault: boolean): boolean;
65
117
  export declare function diskSet(project: ArchProject): DiskSet;
66
118
  /**
67
119
  * The walk, with the budget injectable.
@@ -73,4 +125,15 @@ export declare function diskSet(project: ArchProject): DiskSet;
73
125
  * reached by accident on a repository nobody has.
74
126
  */
75
127
  export declare function buildDiskSet(project: ArchProject, budgetLimit?: number): DiskSet;
128
+ /**
129
+ * How many consuming directories the exhaustion finding names.
130
+ *
131
+ * Four, not all of them: the finding is a sentence an agent acts on, and a list
132
+ * of forty directories is the ADR-009 rule 4 noise problem moved inside one
133
+ * message. Four was enough to cover 91% of this repository's entries when
134
+ * measured (spike 0368), and the total is reported alongside so the reader can
135
+ * tell a dominated walk from an evenly-spread one.
136
+ */
137
+ export declare const NAMED_CONSUMERS = 4;
138
+ export {};
76
139
  //# sourceMappingURL=disk-set.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disk-set.d.ts","sourceRoot":"","sources":["../../src/core/disk-set.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAyE/C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,MAAM,GAAG,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,gBAAgB,CAAA;AAEvF;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC/B;AA2CD;;;;;;;;;;;;GAYG;AAEH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAET;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAMrD;AAED;;;;;;;;GAQG;AAEH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,SAAe,GAAG,OAAO,CAEtF"}
1
+ {"version":3,"file":"disk-set.d.ts","sourceRoot":"","sources":["../../src/core/disk-set.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAuH/C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,MAAM,GAAG,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,gBAAgB,CAAA;AAEvF;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CACrC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAA;CAC5C;AAED,kFAAkF;AAClF,UAAU,YAAY;IACpB,+BAA+B;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAID;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAGzE;AAID;;;;;;;GAOG;AACH;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAMrD;AAED;;;;;;;;GAQG;AAEH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,SAAe,GAAG,OAAO,CAEtF;AA6RD;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import picomatch from 'picomatch';
4
- import { discoverIdentityRoot } from '@nielspeter/eess/internal';
4
+ import { byCodepoint, discoverIdentityRoot } from '@nielspeter/eess/internal';
5
5
  import { readsRootRelativePath, rootFromTsConfigPath } from './project-relative.js';
6
6
  /**
7
7
  * Directories never worth walking.
@@ -27,6 +27,34 @@ const PRUNE = new Set([
27
27
  '.gradle',
28
28
  '.yarn',
29
29
  '.cache',
30
+ // Added for bug 0359. Pruning — not repository size — is what decides whether
31
+ // the walk finishes: measured on this repository, the list above removes
32
+ // **88.9%** of entries, and unpruned this small repo would sit at 41% of the
33
+ // old 50,000 budget by itself (spike 0368). The list named fourteen and missed
34
+ // the one that mattered — an adopter's `.wrangler` was **58% of their entries**
35
+ // in the monorepo that measured closest to the budget.
36
+ //
37
+ // Only the FIRST of these has a measured share; the rest are the same class of
38
+ // thing — build, cache and framework output no rule can usefully scope to — and
39
+ // are cheap to prune. Named individually rather than matched by a leading dot,
40
+ // because `.claude/`, `.changeset/` and `.github/` are content this repo's own
41
+ // corpus gate reads.
42
+ '.wrangler',
43
+ '.svelte-kit',
44
+ '.nuxt',
45
+ '.output',
46
+ '.parcel-cache',
47
+ '.vite',
48
+ '.astro',
49
+ '.docusaurus',
50
+ '.serverless',
51
+ '.terraform',
52
+ 'storybook-static',
53
+ '.pnpm-store',
54
+ '.angular',
55
+ '.expo',
56
+ '.dart_tool',
57
+ '.sst',
30
58
  ]);
31
59
  /**
32
60
  * How many directory entries the walk will read before giving up.
@@ -46,7 +74,7 @@ const PRUNE = new Set([
46
74
  * was a licence to lower the budget on the belief that nothing but wording
47
75
  * depended on it.
48
76
  *
49
- * `absenceClaimIsContradicted` below consumes this classification to decide
77
+ * `contradictsAbsence` below is the policy that consumes this classification to decide
50
78
  * whether a cardinality rule (`.notExist()` and friends) reports at all. And the
51
79
  * degradation is **whole-set, not per-glob** — `build()` returns the single
52
80
  * `UNDETERMINED` object, whose `classify` answers `not-determined` for every
@@ -57,19 +85,60 @@ const PRUNE = new Set([
57
85
  * That is not a regression — before 0355 those rules were silent everywhere —
58
86
  * but it is an undisclosed limit on a fix, and nothing currently reports that
59
87
  * the walk gave up. Surfacing exhaustion is
60
- * [bug 0359](../../../../work/bugs/0359-a-disk-walk-that-gave-up-reports-nothing-and-now-decides-a-verdict.md).
88
+ * [bug 0359](../../../../work/bugs/fixed/0359-a-disk-walk-that-gave-up-reports-nothing-and-now-decides-a-verdict.md),
89
+ * and it is now surfaced: `exhaustion` on the returned `DiskSet` carries the
90
+ * fact and what consumed the walk, and the cardinality path reports it rather
91
+ * than going quiet.
92
+ *
93
+ * ## Why 500,000, and why the old 50,000 was far too low
94
+ *
95
+ * The justification above is a claim about TIME — a 5s vitest timeout. Measured
96
+ * at **2.09 µs/entry** (spike 0367; spike 0360 got 1.55 µs/entry by a different
97
+ * method, which is what makes either trustworthy), 50,000 entries is about
98
+ * **105 ms of work**. The cutoff fired roughly **48× below its own stated
99
+ * reason**, and silenced a gate to do it.
100
+ *
101
+ * 500,000 is 0.8–1.5s warm (spike 0360) and puts every repository measured so
102
+ * far far inside it: this one at ~2,300 entries after pruning, an adopter's
103
+ * 15-package monorepo at 16,770. **Not unbounded** — the cold-cache cost is
104
+ * still unmeasured, which is exactly why 0360 declined to recommend removing the
105
+ * bound, and raising it is supported by measurement where removing it is not.
61
106
  *
62
- * Anyone changing this number: it is the threshold at which a shipped gate
63
- * turns itself off silently. Measure before you lower it.
107
+ * Anyone changing this number: it is the threshold at which a shipped gate stops
108
+ * being able to answer. It no longer does so silently, which is the fix — but a
109
+ * reported degradation is still a degradation. Measure before you lower it.
64
110
  */
65
- const ENTRY_BUDGET = 50_000;
111
+ const ENTRY_BUDGET = 500_000;
66
112
  // `.d.ts` and its `.d.mts`/`.d.cts` siblings count. They ARE TypeScript for
67
113
  // the question this set answers — "does this path contain TypeScript your
68
114
  // tsconfig is keeping out" — and excluding them made a `types/` directory of
69
115
  // pure declarations report "this path exists but contains no TypeScript",
70
116
  // which is false.
71
117
  const TS_FILE = /\.(m|c)?tsx?$/;
72
- const cache = new WeakMap();
118
+ let cache = new WeakMap();
119
+ /**
120
+ * Budget override for the MEMOIZED path. Tests only.
121
+ *
122
+ * `buildDiskSet` above already takes an injectable budget and is documented
123
+ * "exported for tests only" — but it bypasses the memo, and the production
124
+ * consumer of a classification is `deadSiteRoute` in `glob-diagnosis.ts`, which goes
125
+ * through `diskSet(project)`. So a test could construct an exhausted set and
126
+ * could not make a RULE see one, which left bug 0359's defect reachable only
127
+ * below the public entry point. A test that drives a stand-in instead of
128
+ * `violations()` is how a suite stays green while the defect survives.
129
+ *
130
+ * Reaching exhaustion honestly is not an option: the budget is 500,000 entries.
131
+ *
132
+ * This overrides the constant and clears the memo, so the walk really runs, the
133
+ * real `classify` answers, and the finding travels the real path — only the
134
+ * number differs from production.
135
+ */
136
+ // eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
137
+ export function setDiskWalkBudgetForTests(limit) {
138
+ budgetForTests = limit;
139
+ cache = new WeakMap();
140
+ }
141
+ let budgetForTests;
73
142
  /**
74
143
  * The project's disk set, walked at most once and only when asked.
75
144
  *
@@ -78,36 +147,6 @@ const cache = new WeakMap();
78
147
  * never touches the filesystem. An eager version would charge every `check()`
79
148
  * a recursive walk to answer a question no fault asked.
80
149
  */
81
- /**
82
- * Does the filesystem CONTRADICT a rule's claim that nothing matching this glob exists?
83
- *
84
- * The one owner of a policy two tools have to share — the gate's evidence floor
85
- * (`vacuity-diagnosis.ts`) and the preview (`diagnose.ts`). It is written here, beside the
86
- * classification it reads, because the pair has already grown two hand-maintained copies of one
87
- * rule and had them disagree: `isFaultPosition` was inverse lists in both files, differing over
88
- * exactly `discovery`, so `doctor` reported a dead layer glob and the build stayed green.
89
- *
90
- * ## Why only `holds-typescript`
91
- *
92
- * A rule asserting cardinality — `.notExist()` and friends — is SATISFIED by having no
93
- * subjects, so examining zero is normally the rule working. The trouble is that a holding
94
- * ratchet and a selector that silently stopped matching are identical from the glob and the
95
- * path universe: both match nothing. Only disk tells them apart.
96
- *
97
- * | classification | verdict | why |
98
- * | ------------------ | ------- | ---------------------------------------------------------------- |
99
- * | `holds-typescript` | **contradicted** | the code being asserted away is right there, unexamined |
100
- * | `absent` | consistent | the ratchet holding — the common case, and it must stay silent |
101
- * | `no-typescript` | consistent | no TypeScript means no modules, which is what the rule asserts |
102
- * | `not-determined` | consistent | the walk could not answer; blaming the author for that is the confidently-wrong remedy this module exists not to give |
103
- *
104
- * [Bug 0355](../../../../work/bugs/fixed/0355-a-cardinality-rule-cannot-tell-none-exist-from-my-selector-broke.md)
105
- * for the gate half, [0357](../../../../work/bugs/fixed/0357-doctor-reports-a-healthy-ratchet-as-a-dead-glob.md)
106
- * for the preview.
107
- */
108
- function absenceClaimIsContradicted(project, glob) {
109
- return contradictsAbsence(diskSet(project).classify(glob));
110
- }
111
150
  /**
112
151
  * The policy alone, as a TOTAL function on the four classifications.
113
152
  *
@@ -121,39 +160,14 @@ function absenceClaimIsContradicted(project, glob) {
121
160
  * Exhaustive by construction: `OnDisk` is a four-value union, so a test that enumerates it
122
161
  * cannot silently stop covering a case when a fifth is added — it stops compiling.
123
162
  */
124
- // eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
125
163
  export function contradictsAbsence(onDisk) {
126
164
  return onDisk === 'holds-typescript';
127
165
  }
128
- /**
129
- * Is a dead site on a CARDINALITY rule a real fault, given the glob and the disk?
130
- *
131
- * Two independent ways to be one, and the second was missing for a release:
132
- *
133
- * 1. **The glob is broken in every possible project** — a syntactic fault, decided from the
134
- * text with no filesystem and no universe. `'./src/**'` is one character wrong and matches
135
- * nothing anywhere.
136
- * 2. **The filesystem contradicts the absence claim** — `contradictsAbsence` above.
137
- *
138
- * Bug 0357 added the disk test and, by placing it after `isDeadSite`, dropped the first.
139
- * Measured on a healthy project with `src/a.ts` loaded: a `.notExist()` over `'./src/**'`
140
- * went green in `doctor` AND `check`, while the same glob on a positive-assertion rule
141
- * reported — so a ratchet broken by one character said nothing in either tool, and the
142
- * directory it names exists, is in the project, and holds TypeScript. Shipped in 0.10.0 and
143
- * caught by a review of the review's own fixes.
144
- *
145
- * `diagnose.ts` states the principle twice about itself — syntactic faults "are properties of
146
- * the glob text, not of what loaded", and survive even an empty project. They must survive
147
- * this narrowing too.
148
- */
149
- export function cardinalityDeadSiteIsAtFault(project, glob, hasSyntacticFault) {
150
- return hasSyntacticFault || absenceClaimIsContradicted(project, glob);
151
- }
152
166
  export function diskSet(project) {
153
167
  const cached = cache.get(project);
154
168
  if (cached)
155
169
  return cached;
156
- const built = build(project, ENTRY_BUDGET);
170
+ const built = build(project, budgetForTests ?? ENTRY_BUDGET);
157
171
  cache.set(project, built);
158
172
  return built;
159
173
  }
@@ -185,6 +199,23 @@ function build(project, budgetLimit) {
185
199
  const root = discoverIdentityRoot(path.dirname(project.tsConfigPath));
186
200
  if (!fs.existsSync(root))
187
201
  return UNDETERMINED;
202
+ // The FILESYSTEM root is never a project root, and walking it is never
203
+ // meaningful. `discoverIdentityRoot` falls back to its own argument when it
204
+ // finds no marker, so a tsconfig path with nothing above it resolves to `/`
205
+ // and this walked the entire disk.
206
+ //
207
+ // Found by bug 0359's own fix: that walk always happened, exhausted, and
208
+ // returned the silent `UNDETERMINED`, so nobody could see it. The moment
209
+ // exhaustion started reporting, every in-memory double in this suite surfaced a
210
+ // finding — 0359's thesis landing in a second place. `not-determined` was the
211
+ // right answer all along; it now arrives without reading the whole disk first.
212
+ //
213
+ // Narrow on purpose. A first draft refused any root without a `.git` or
214
+ // `package.json` and reddened two legitimate fixtures: a bare directory holding
215
+ // only a tsconfig IS a project, and eess must not require a manifest it never
216
+ // asked for. The pathology is reaching `/`, not lacking a marker.
217
+ if (path.dirname(root) === root)
218
+ return UNDETERMINED;
188
219
  const files = [];
189
220
  /** Every file, TypeScript or not — so `absent` means absent, not "not TypeScript". */
190
221
  const everyFile = [];
@@ -199,8 +230,28 @@ function build(project, budgetLimit) {
199
230
  * beginning "a path segment is misspelled".
200
231
  */
201
232
  const pruned = [];
233
+ /**
234
+ * Entries whose KIND the walk declined to resolve — symlinks.
235
+ *
236
+ * `Dirent.isDirectory()` is false for a symlink under `withFileTypes`, so a symlinked
237
+ * DIRECTORY is recorded as a file. That trade is deliberate and documented below: following
238
+ * the link risks a walk that never terminates, and for `classify` being wrong this way only
239
+ * weakens a message.
240
+ *
241
+ * `matchesOnlyFiles` cannot live with it, because it asserts "and NO directory" — and a
242
+ * symlink's kind is precisely what was not resolved. Kept as its own list rather than
243
+ * changing what `everyFile` holds, so `classify`'s documented behaviour is untouched.
244
+ */
245
+ const kindUnknown = [];
202
246
  let budget = budgetLimit;
203
247
  let exhausted = false;
248
+ /**
249
+ * Entries read per top-level subtree of `root`, so exhaustion can name what
250
+ * consumed the walk instead of blaming the repository's size (spike 0368).
251
+ * Attributed to the FIRST segment below `root` and no deeper: the remedy is
252
+ * "stop walking this tree", which is a decision about a top-level directory.
253
+ */
254
+ const perSubtree = new Map();
204
255
  const walk = (dir) => {
205
256
  if (exhausted)
206
257
  return;
@@ -212,6 +263,13 @@ function build(project, budgetLimit) {
212
263
  void err; // unreadable or gone: not a finding, just not walkable
213
264
  return;
214
265
  }
266
+ // Count BEFORE the budget check, so the subtree that pushed the walk over
267
+ // is the one the finding names. Counting after would attribute the
268
+ // decisive read to nobody — the directory that exhausted the budget would
269
+ // be missing from the list of what exhausted it.
270
+ const rel = path.relative(root, dir).replaceAll('\\', '/');
271
+ const top = rel === '' ? '.' : (rel.split('/')[0] ?? '.');
272
+ perSubtree.set(top, (perSubtree.get(top) ?? 0) + entries.length);
215
273
  budget -= entries.length;
216
274
  if (budget < 0) {
217
275
  exhausted = true;
@@ -250,6 +308,8 @@ function build(project, budgetLimit) {
250
308
  walk(full);
251
309
  }
252
310
  else {
311
+ if (entry.isSymbolicLink())
312
+ kindUnknown.push(full);
253
313
  everyFile.push(full);
254
314
  if (TS_FILE.test(entry.name))
255
315
  files.push(full);
@@ -257,8 +317,14 @@ function build(project, budgetLimit) {
257
317
  }
258
318
  };
259
319
  walk(root.replaceAll('\\', '/'));
320
+ // NOT the shared `UNDETERMINED` constant. It is deliberately identity-free so
321
+ // it can be returned from the guards above, where there is nothing to say; a
322
+ // walk that gave up has something to say, and bug 0359 is that it said
323
+ // nothing. `classify` still answers `not-determined` for every glob — the
324
+ // classification is unchanged and still honest. What changes is that the
325
+ // caller can now discover WHY.
260
326
  if (exhausted)
261
- return UNDETERMINED;
327
+ return exhaustedDiskSet(root, budgetLimit, perSubtree);
262
328
  // Containment is TRANSITIVE, and that is load-bearing. Using each file's
263
329
  // immediate parent instead labels `docs/` "contains no TypeScript" while
264
330
  // `docs/.vitepress/config.ts` sits one level below it — a false statement in
@@ -299,10 +365,69 @@ function build(project, budgetLimit) {
299
365
  const prefixes = [root, rootFromTsConfigPath(project.tsConfigPath)]
300
366
  .filter((r) => r !== undefined)
301
367
  .map((r) => (r === '/' ? '/' : `${r.replaceAll('\\', '/')}/`));
368
+ /**
369
+ * Does this glob reach ground the walk refused to enter?
370
+ *
371
+ * Shared by `classify` and `matchesOnlyFiles`, deliberately: both have to refuse to answer
372
+ * over a pruned path, and this module already records what happened the last time one fact
373
+ * grew two hand-maintained copies.
374
+ */
375
+ const matchesPruned = (glob) => {
376
+ // Deliberately NOT guarded by `readsRootRelativePath`, unlike the two consumers below.
377
+ // Being liberal here makes this answer `true` more often, and `true` means "refuse to
378
+ // answer" — so the error direction is fail-closed. The guard exists to stop a liberal view
379
+ // manufacturing a false POSITIVE claim; this one manufactures a false abstention.
380
+ const isMatch = picomatch(glob);
381
+ return pruned.some((dir) => isMatch(dir) ||
382
+ namedFromARoot(dir).some((view) => isMatch(view)) ||
383
+ glob.includes(dir.slice(root.length + 1)));
384
+ };
302
385
  const namedFromARoot = (candidate) => prefixes
303
386
  .filter((prefix) => candidate.startsWith(prefix))
304
387
  .map((prefix) => candidate.slice(prefix.length));
305
388
  return {
389
+ /**
390
+ * Files yes, directories no — the kind-aware answer `classify` cannot give.
391
+ *
392
+ * Both root views, exactly as `classify` does: a single view left this answering about a
393
+ * monorepo package's `'src/**'` from the wrong prefix, which is bug 0339's shape in the
394
+ * one producer whose whole defence is that it states only facts.
395
+ */
396
+ matchesOnlyFiles(glob) {
397
+ const isMatch = picomatch(glob);
398
+ // The SAME guard `classify` applies below, and for the same reason (bug 0339): the
399
+ // root-relative view is only consulted for a glob that actually reads root-relative
400
+ // paths. Applying it unconditionally made this predicate more liberal than `classify`
401
+ // about the same paths — two derivations of one question, which is the defect this whole
402
+ // change exists to remove. Product review flagged the asymmetry without constructing an
403
+ // input; mirroring the guard costs one line and removes the question.
404
+ const readsRootRelative = readsRootRelativePath(glob);
405
+ const hits = (candidates) => candidates.some((candidate) => {
406
+ if (isMatch(candidate))
407
+ return true;
408
+ if (!readsRootRelative)
409
+ return false;
410
+ return namedFromARoot(candidate).some((view) => isMatch(view));
411
+ });
412
+ // A directory match means the glob is usable as a `parent-dir` glob, whatever else it
413
+ // also matches — so this is "files and NO directory", not "more files than directories".
414
+ //
415
+ // And NOT SEEN IS NOT NOT THERE. A pruned entry is recorded before `isDirectory()` is
416
+ // asked, so it is in neither `dirs` nor `everyFile` — reading its absence from `dirs` as
417
+ // evidence of "no directory" is exactly the inference `classify` refuses ten lines below.
418
+ // Measured by enforcement review: a glob naming `.../dist/**`, a real directory holding
419
+ // real TypeScript, was told it "matches a FILE but is used where a directory is read"
420
+ // because `dist` is pruned. This claim is a universal negative; a bounded walk cannot
421
+ // earn one over ground it declined to look at.
422
+ // Two ways the walk cannot witness "no directory", and both must refuse rather than
423
+ // answer. Pruned: the entry was recorded before `isDirectory()` was asked, so it is in
424
+ // neither list. Symlinked: the kind was never resolved and the entry sits in `everyFile`
425
+ // looking like a file — measured, a symlinked directory holding TypeScript was told
426
+ // "this matches a FILE but is used where a directory is read".
427
+ if (matchesPruned(glob) || hits(kindUnknown))
428
+ return false;
429
+ return hits(everyFile) && !hits(dirs);
430
+ },
306
431
  classify(glob) {
307
432
  const isMatch = picomatch(glob);
308
433
  // Both views of each path, as every rule-facing matcher does since bug
@@ -326,9 +451,7 @@ function build(project, budgetLimit) {
326
451
  const matched = everything.filter((candidate) => hits(candidate));
327
452
  if (matched.length === 0) {
328
453
  // Not seen is not the same as not there.
329
- return pruned.some((dir) => hits(dir) || glob.includes(dir.slice(root.length + 1)))
330
- ? 'not-determined'
331
- : 'absent';
454
+ return matchesPruned(glob) ? 'not-determined' : 'absent';
332
455
  }
333
456
  // Per GLOB, not per path: one glob routinely matches paths in both
334
457
  // categories — `**/tests/**` matched 44 directories of mixed kind on the
@@ -342,5 +465,38 @@ function build(project, budgetLimit) {
342
465
  }
343
466
  const UNDETERMINED = {
344
467
  classify: () => 'not-determined',
468
+ // Not "no files" — "no evidence". The caller must not read a confident shape out of a
469
+ // walk that did not happen.
470
+ matchesOnlyFiles: () => false,
345
471
  };
472
+ /**
473
+ * How many consuming directories the exhaustion finding names.
474
+ *
475
+ * Four, not all of them: the finding is a sentence an agent acts on, and a list
476
+ * of forty directories is the ADR-009 rule 4 noise problem moved inside one
477
+ * message. Four was enough to cover 91% of this repository's entries when
478
+ * measured (spike 0368), and the total is reported alongside so the reader can
479
+ * tell a dominated walk from an evenly-spread one.
480
+ */
481
+ export const NAMED_CONSUMERS = 4;
482
+ /**
483
+ * The walk gave up, and says what it read.
484
+ *
485
+ * Its own object rather than the shared `UNDETERMINED`, because the consumers
486
+ * differ per project and a shared constant cannot carry them.
487
+ */
488
+ function exhaustedDiskSet(root, budget, perSubtree) {
489
+ const consumers = [...perSubtree]
490
+ .map(([dir, entries]) => ({ dir, entries }))
491
+ // NOT `localeCompare`: this order decides which directories the message names,
492
+ // the message reaches a baseline identity, and the host locale would make the
493
+ // same finding hash differently on a laptop and in CI. The repo's own
494
+ // `scan-locale-ordering` gate caught this.
495
+ .sort((a, b) => b.entries - a.entries || byCodepoint(a.dir, b.dir));
496
+ return {
497
+ classify: () => 'not-determined',
498
+ matchesOnlyFiles: () => false,
499
+ exhaustion: { root, budget, consumers },
500
+ };
501
+ }
346
502
  //# sourceMappingURL=disk-set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"disk-set.js","sourceRoot":"","sources":["../../src/core/disk-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"disk-set.js","sourceRoot":"","sources":["../../src/core/disk-set.ts"],"names":[],"mappings":"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"}
@@ -60,22 +60,56 @@ export declare function syntacticFault(glob: string, kind: GlobSite['kind'], bas
60
60
  */
61
61
  export declare function diagnoseGlob(site: GlobSite, universe: PathUniverse, diskSet?: DiskSet): GlobDiagnosis;
62
62
  /**
63
- * The remedy for each fault, or an honest list of causes where no remedy is
64
- * verifiable.
63
+ * WHY a dead site on a cardinality rule is a real fault — the route, not a boolean.
64
+ *
65
+ * One owner, consulted by the admission gate AND by both tools' messages, so the reason a
66
+ * finding was admitted and the reason its message gives cannot be two different derivations.
67
+ * Before this, the gate asked `classify(glob)` directly while the message read
68
+ * `diagnosis.onDisk`, and the two disagree for `file-not-folder`: the gate admitted the
69
+ * finding *because the disk contradicted the claim* and the message then offered to widen a
70
+ * tsconfig `include`, which can never make a glob naming a FILE match a directory read
71
+ * ([bug 0363](../../../../work/bugs/fixed/0363-a-remedy-that-cannot-remediate-survives-one-input-over.md)).
72
+ *
73
+ * `undefined` means "not a fault" — a holding ratchet, which is the common case and must stay
74
+ * green. Exhaustive over `GlobFault` **by the `never` witness in the default branch**, not by
75
+ * the shape of the switch — a distinction that was got wrong here and measured by architecture
76
+ * review. Because `undefined` is a legal return value, a switch missing a case falls off the end
77
+ * and **compiles**, so a fifth fault became silently "not a fault"; the module reddened at
78
+ * `FAULT_ADVICE` instead, a different line with a different fix. `isFaultPosition`
79
+ * (`packages/core/src/glob-site.ts:86`) carries the same witness for the same reason.
80
+ *
81
+ * _`contradictsAbsence` was cited here as a model and should not have been: it also compiles
82
+ * clean against a fifth `OnDisk`. What is exhaustive there is the TEST enumerating the union,
83
+ * not the function._
65
84
  */
85
+ export type DeadSiteRoute = 'syntactic' | 'names-a-file' | 'contradicted-by-disk';
86
+ export declare function deadSiteRoute(diagnosis: GlobDiagnosis): DeadSiteRoute | undefined;
66
87
  /**
67
- * Is this fault a property of the glob TEXT, decidable with no filesystem and no project?
88
+ * The remedy a CARDINALITY rule gets on each route, owned once.
89
+ *
90
+ * `check` puts this in `suggestion` (the `Fix:` line) and `doctor` appends it to its own
91
+ * advice, so the two cannot drift — which is
92
+ * [bug 0364](../../../../work/bugs/fixed/0364-doctor-states-the-cause-and-never-the-remedy.md):
93
+ * three rounds of work on what this sentence must say reached only the tool an adopter
94
+ * reaches second.
68
95
  *
69
- * The same question `syntacticFault` answers about a raw glob, asked of a diagnosis that
70
- * has already answered it — so callers holding a `GlobDiagnosis` stop re-deriving it from
71
- * `(glob, kind, base)` and cannot drift by being handed a different `kind` or `base`. That
72
- * drift is not hypothetical: the same question was being asked at four separate sites
73
- * before this existed.
96
+ * **None of them offers deletion.** On a finding no filter can suppress, deletion is the only
97
+ * achievable exit, and the rule is the thing that noticed — so an instruction to delete it is
98
+ * the ADR-009 rule 2 defect this family has already shipped once.
99
+ */
100
+ export declare const CARDINALITY_REMEDY: Readonly<Record<DeadSiteRoute, string>>;
101
+ /**
102
+ * Does the route's fault hold in EVERY project, or only in this one?
74
103
  *
75
- * Exhaustive by construction, like `contradictsAbsence` and `isFaultPosition`: a fifth
76
- * `GlobFault` stops this compiling rather than falling into a default that guesses.
104
+ * A property of the glob text for the syntactic and file-naming routes, and of this project's
105
+ * `include` for the disk route. "in this project" understates the first two by exactly the
106
+ * scope that invites a tsconfig reading.
107
+ */
108
+ export declare const ROUTE_HOLDS_IN_ANY_PROJECT: Readonly<Record<DeadSiteRoute, boolean>>;
109
+ /**
110
+ * The remedy for each fault, or an honest list of causes where no remedy is
111
+ * verifiable.
77
112
  */
78
- export declare function isSyntacticFault(fault: GlobFault): boolean;
79
113
  export declare const FAULT_ADVICE: Readonly<Record<GlobFault, string>>;
80
114
  /**
81
115
  * What the filesystem adds, when it adds anything.
@@ -1 +1 @@
1
- {"version":3,"file":"glob-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/glob-diagnosis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,CAAA;AAErF,UAAU,aAAa;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,2EAA2E;AAC3E,eAAO,MAAM,SAAS,gEAAgE,CAAA;AAEtF;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGlD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,IAAI,GAAE,QAAQ,CAAC,MAAM,CAAc,GAClC,aAAa,GAAG,YAAY,GAAG,SAAS,CAiB1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,OAAO,GAChB,aAAa,CAiBf;AAED;;;GAGG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAS1D;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAS5D,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoC3D,CAAA"}
1
+ {"version":3,"file":"glob-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/glob-diagnosis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAGpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,CAAA;AAErF,UAAU,aAAa;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,2EAA2E;AAC3E,eAAO,MAAM,SAAS,gEAAgE,CAAA;AAEtF;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGlD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,IAAI,GAAE,QAAQ,CAAC,MAAM,CAAc,GAClC,aAAa,GAAG,YAAY,GAAG,SAAS,CAiB1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,OAAO,GAChB,aAAa,CA0Bf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,sBAAsB,CAAA;AAEjF,wBAAgB,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAsBjF;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAgBtE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAY/E,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAS5D,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoC3D,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import picomatch from 'picomatch';
2
+ import { contradictsAbsence } from './disk-set.js';
2
3
  /** Where the glob conventions these messages talk about are documented. */
3
4
  export const GLOB_DOCS = 'https://github.com/nielspeter/eess/blob/main/docs/slices.md';
4
5
  /**
@@ -62,7 +63,14 @@ export function diagnoseGlob(site, universe, diskSet) {
62
63
  // glob written at a file can never match. Verifiable, and therefore safe to
63
64
  // assert — measured instance: '**/src/predicates/module**' matches 1 file
64
65
  // and 0 parent directories.
65
- if (site.kind === 'parent-dir' && matchesAny(site.glob, universe.filePaths)) {
66
+ // The project's own files answer this for a path inside it; the DISK answers it for a path
67
+ // outside, which the universe cannot see. Without the second half the fault was invisible
68
+ // for an out-of-project file and the author was offered a tsconfig `include` that can never
69
+ // make a directory read match a file — [bug 0363](../../../../work/bugs/fixed/0363-a-remedy-that-cannot-remediate-survives-one-input-over.md).
70
+ // `matchesOnlyFiles` answers `false` when the walk cannot say, so this never claims the
71
+ // fault without evidence.
72
+ if (site.kind === 'parent-dir' &&
73
+ (matchesAny(site.glob, universe.filePaths) || diskSet?.matchesOnlyFiles?.(site.glob) === true)) {
66
74
  return { fault: 'file-not-folder' };
67
75
  }
68
76
  if (site.kind === 'file-path' && matchesAny(site.glob, universe.parentDirs)) {
@@ -70,32 +78,81 @@ export function diagnoseGlob(site, universe, diskSet) {
70
78
  }
71
79
  return { fault: 'no-match', onDisk: diskSet?.classify(site.glob) ?? 'not-determined' };
72
80
  }
73
- /**
74
- * The remedy for each fault, or an honest list of causes where no remedy is
75
- * verifiable.
76
- */
77
- /**
78
- * Is this fault a property of the glob TEXT, decidable with no filesystem and no project?
79
- *
80
- * The same question `syntacticFault` answers about a raw glob, asked of a diagnosis that
81
- * has already answered it — so callers holding a `GlobDiagnosis` stop re-deriving it from
82
- * `(glob, kind, base)` and cannot drift by being handed a different `kind` or `base`. That
83
- * drift is not hypothetical: the same question was being asked at four separate sites
84
- * before this existed.
85
- *
86
- * Exhaustive by construction, like `contradictsAbsence` and `isFaultPosition`: a fifth
87
- * `GlobFault` stops this compiling rather than falling into a default that guesses.
88
- */
89
- export function isSyntacticFault(fault) {
90
- switch (fault) {
81
+ export function deadSiteRoute(diagnosis) {
82
+ switch (diagnosis.fault) {
91
83
  case 'dot-segment':
92
84
  case 'unanchored':
93
- return true;
85
+ return 'syntactic';
94
86
  case 'file-not-folder':
87
+ return 'names-a-file';
95
88
  case 'no-match':
96
- return false;
89
+ // The disk is the only thing that can tell a holding ratchet from a broken selector here,
90
+ // and `contradictsAbsence` owns WHICH classification counts — `disk-set.ts` carries the
91
+ // four-row table saying why `holds-typescript` is the only admitting answer.
92
+ return diagnosis.onDisk !== undefined && contradictsAbsence(diagnosis.onDisk)
93
+ ? 'contradicted-by-disk'
94
+ : undefined;
95
+ default: {
96
+ // The witness, not a comment claiming one. Measured with the repo's own `tsc`: without
97
+ // this, a fifth `GlobFault` left the function at exit 0 returning `undefined` — "not a
98
+ // fault" — and the predecessor `isSyntacticFault(fault): boolean` could not have.
99
+ const exhaustive = diagnosis.fault;
100
+ return exhaustive;
101
+ }
97
102
  }
98
103
  }
104
+ /**
105
+ * The remedy a CARDINALITY rule gets on each route, owned once.
106
+ *
107
+ * `check` puts this in `suggestion` (the `Fix:` line) and `doctor` appends it to its own
108
+ * advice, so the two cannot drift — which is
109
+ * [bug 0364](../../../../work/bugs/fixed/0364-doctor-states-the-cause-and-never-the-remedy.md):
110
+ * three rounds of work on what this sentence must say reached only the tool an adopter
111
+ * reaches second.
112
+ *
113
+ * **None of them offers deletion.** On a finding no filter can suppress, deletion is the only
114
+ * achievable exit, and the rule is the thing that noticed — so an instruction to delete it is
115
+ * the ADR-009 rule 2 defect this family has already shipped once.
116
+ */
117
+ export const CARDINALITY_REMEDY = {
118
+ // The tsconfig cannot help: the glob matches nothing in any project.
119
+ syntactic: 'Correct the selector — this rule has not been enforcing anything. Do not delete it.',
120
+ // The tsconfig cannot help either, for a different reason: the predicate reads the
121
+ // directory portion and the glob names a file, so no `include` makes it match.
122
+ // Names `resideInFile()` verbatim, not "the file-level predicate". Review caught the vaguer
123
+ // phrasing: the CAUSE riding immediately before this already says `resideInFile()`, so the
124
+ // remedy was offering the same option under a second name that appears nowhere in the
125
+ // dialect's vocabulary — and offering it LAST, which is where an agent reading `Fix:` lands.
126
+ 'names-a-file': 'Correct the selector to name the DIRECTORY you mean, or use `resideInFile()` if you meant ' +
127
+ 'the file — this rule has not been enforcing anything. Do not delete it.',
128
+ // Here, and only here, the tsconfig IS the lever.
129
+ 'contradicted-by-disk': 'Widen the tsconfig include to cover this path, or correct the selector — ' +
130
+ 'do not delete this rule, it is what detected the gap.',
131
+ };
132
+ /**
133
+ * Does the route's fault hold in EVERY project, or only in this one?
134
+ *
135
+ * A property of the glob text for the syntactic and file-naming routes, and of this project's
136
+ * `include` for the disk route. "in this project" understates the first two by exactly the
137
+ * scope that invites a tsconfig reading.
138
+ */
139
+ export const ROUTE_HOLDS_IN_ANY_PROJECT = {
140
+ // Decidable from the glob TEXT, with no filesystem and no project: `'./src/**'` matches
141
+ // nothing anywhere.
142
+ syntactic: true,
143
+ // **False, and a first draft had it true.** The fault is contingent on what is on disk: the
144
+ // same glob matches fine in a project where that name is a directory rather than a file. The
145
+ // pinning row in `doctor-and-check-agree-about-a-ratchet.test.ts` caught the error — it
146
+ // exists precisely because that route is the one input separating this claim from a
147
+ // constant, and asserting "any project" there would be confidently wrong.
148
+ 'names-a-file': false,
149
+ // Contingent on this project's `include`.
150
+ 'contradicted-by-disk': false,
151
+ };
152
+ /**
153
+ * The remedy for each fault, or an honest list of causes where no remedy is
154
+ * verifiable.
155
+ */
99
156
  export const FAULT_ADVICE = {
100
157
  'dot-segment': 'a "./" segment never occurs in an absolute file path — remove it and anchor instead ("./src/x/**" -> "**/src/x/**")',
101
158
  unanchored: 'these are matched against ABSOLUTE file paths, so a project-relative glob matches nothing — prefix these with "**/"',
@@ -1 +1 @@
1
- {"version":3,"file":"glob-diagnosis.js","sourceRoot":"","sources":["../../src/core/glob-diagnosis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glob-diagnosis.js","sourceRoot":"","sources":["../../src/core/glob-diagnosis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vacuity-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAY,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAiC3E;;;;;;;GAOG;AAKH,eAAO,MAAM,cAAc,0GAC8E,CAAA;AAEzG,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,IAAI,eAAe,CAAA;IAC/B,eAAe,IAAI,MAAM,CAAA;IACzB,sBAAsB,IAAI,MAAM,CAAA;IAChC,gBAAgB,IAAI,MAAM,CAAA;IAC1B,aAAa,IAAI,MAAM,GAAG,SAAS,CAAA;IACnC,UAAU,IAAI,WAAW,GAAG,SAAS,CAAA;IACrC,KAAK,IAAI,SAAS,QAAQ,EAAE,CAAA;IAC5B,kBAAkB,IAAI,OAAO,CAAA;IAC7B,aAAa,IAAI,OAAO,CAAA;IACxB,kBAAkB,IAAI,MAAM,CAAA;IAC5B,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAA;CACvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,EAAE,CAmCtE;AA2KD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,GAAG,SAAS,CAsC7B;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CA2C7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG;IACtD,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC3B,CAsCA;AA2DD,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAgC7D;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,aAAa,CA4Bf"}
1
+ {"version":3,"file":"vacuity-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAY,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAqC3E;;;;;;;GAOG;AAKH,eAAO,MAAM,cAAc,0GAC8E,CAAA;AAEzG,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,IAAI,eAAe,CAAA;IAC/B,eAAe,IAAI,MAAM,CAAA;IACzB,sBAAsB,IAAI,MAAM,CAAA;IAChC,gBAAgB,IAAI,MAAM,CAAA;IAC1B,aAAa,IAAI,MAAM,GAAG,SAAS,CAAA;IACnC,UAAU,IAAI,WAAW,GAAG,SAAS,CAAA;IACrC,KAAK,IAAI,SAAS,QAAQ,EAAE,CAAA;IAC5B,kBAAkB,IAAI,OAAO,CAAA;IAC7B,aAAa,IAAI,OAAO,CAAA;IACxB,kBAAkB,IAAI,MAAM,CAAA;IAC5B,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAA;CACvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,EAAE,CAmCtE;AAkKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,GAAG,SAAS,CA0D7B;AA0HD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CA2C7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG;IACtD,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC3B,CAsCA;AA0ED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAgC7D;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,aAAa,CA4Bf"}
@@ -1,8 +1,9 @@
1
1
  import { DECLARE_INSTEAD, isFaultPosition, UNSUPPRESSABLE } from '@nielspeter/eess/internal';
2
- import { diagnoseGlob, isSyntacticFault, syntacticFault, FAULT_ADVICE, ON_DISK_ADVICE, } from './glob-diagnosis.js';
2
+ import { deadSiteRoute, diagnoseGlob, CARDINALITY_REMEDY, FAULT_ADVICE, ON_DISK_ADVICE, ROUTE_HOLDS_IN_ANY_PROJECT, } from './glob-diagnosis.js';
3
3
  import { globSitesOf, isDeadGlobTree, isDeadSite } from './glob-evaluator.js';
4
4
  import { pathUniverse } from './path-universe.js';
5
- import { cardinalityDeadSiteIsAtFault, contradictsAbsence, diskSet } from './disk-set.js';
5
+ import { diskSet } from './disk-set.js';
6
+ import { NAMED_CONSUMERS } from './disk-set.js';
6
7
  import { emptyProjectAdvice, loadedNothing } from './empty-project-advice.js';
7
8
  /**
8
9
  * The unit noun, singular when there is one of it — plan 0099.
@@ -171,39 +172,29 @@ function deadSelectorViolation(facts, site, universe, project) {
171
172
  // reintroduced one cause over, and again with no test asserting the message. The new row
172
173
  // asserted booleans.
173
174
  //
174
- // The threshold — WHICH classification contradicts an absence claim — is
175
- // `contradictsAbsence`'s, never re-spelled here. It was hand-copied as
176
- // `=== 'holds-typescript'` in the first draft of this fix, which is the precedent
177
- // `disk-set.ts` records one function above: `isFaultPosition` grew two hand-maintained
178
- // copies, they disagreed about `discovery`, and `doctor` reported a dead layer glob while
179
- // the build stayed green.
180
- //
181
- // The INPUT is `diagnosis.onDisk` and deliberately not `diskSet(project).classify(glob)`,
182
- // and the two are not interchangeable. `classify` answers about any path, always;
183
- // `diagnosis.onDisk` is `undefined` unless the disk was the deciding question —
184
- // `diagnoseGlob` returns before consulting it for a syntactic fault and for
185
- // `file-not-folder`. The remedy needs "was the tsconfig the lever", which is the second
186
- // question. Reading `classify` here would tell a `file-not-folder` author to widen an
187
- // `include` that cannot help them, because the glob names a file and the predicate reads
188
- // directories.
189
- const onDiskContradicts = diagnosis.onDisk !== undefined && contradictsAbsence(diagnosis.onDisk);
175
+ // Both the remedy and the scope come from the ROUTE, and the route is the same value the
176
+ // ADMISSION gate uses — so the reason a finding exists and the reason its message gives
177
+ // cannot be two derivations. They were: the gate asked `classify(glob)` while the message
178
+ // read `diagnosis.onDisk`, and those disagree for a glob naming a file, so such a glob was
179
+ // admitted because the disk contradicted the claim and then told to widen an `include` that
180
+ // can never make a directory read match a file (bug 0363). Three fixes to this one sentence
181
+ // had each keyed it on something nearer to hand than the actual reason.
182
+ const route = deadSiteRoute(diagnosis);
190
183
  const remedy = !isCardinality
191
184
  ? 'Correct the glob, or remove the rule.'
192
- : onDiskContradicts
193
- ? 'Widen the tsconfig include to cover this path, or correct the selector — ' +
194
- 'do not delete this rule, it is what detected the gap.'
195
- : 'Correct the selector — this rule has not been enforcing anything. Do not delete it.';
196
- // "in this project" understates a syntactic fault by exactly the scope that invites the
197
- // tsconfig reading: such a glob can never match in ANY project, which is why no
198
- // filesystem answer is relevant to it.
199
- //
200
- // A property of the glob TEXT, so it is keyed on the text and on nothing else. The first
201
- // draft also required `isCardinality && !onDiskContradicts`: the second conjunct is dead
202
- // (a syntactic fault leaves `onDisk` undefined, so it is never false when the third is
203
- // true — measured: deleting it reddened nothing), and the first made the same broken glob
204
- // print two different scope claims depending on whether the author wrote `.notExist()` or
205
- // `.notImportFrom()`. Three review lenses flagged the same conjunct independently.
206
- const scope = isSyntacticFault(diagnosis.fault)
185
+ : // NEVER "remove the rule" for a cardinality rule, on any route or none. The finding is
186
+ // unsuppressable, so deletion is the only achievable exit, and the rule is the thing
187
+ // that noticed — which is the ADR-009 rule 2 defect this family has already shipped
188
+ // once. A first draft of this collapsed `route === undefined` into the non-cardinality
189
+ // arm and reached that sentence; enforcement review measured it, with the `Fix:` line
190
+ // reading "this path exists but contains no TypeScript. Correct the glob, or remove the
191
+ // rule." on a `.notExist()` rule. `CARDINALITY_REMEDY`'s own docstring forbids it.
192
+ route === undefined
193
+ ? 'Correct the selector — this rule has not been enforcing anything. Do not delete it.'
194
+ : CARDINALITY_REMEDY[route];
195
+ // "in this project" understates a fault that holds everywhere by exactly the scope that
196
+ // invites the tsconfig reading, and the route is what knows which it is.
197
+ const scope = route !== undefined && ROUTE_HOLDS_IN_ANY_PROJECT[route]
207
198
  ? 'can never match anything in any project'
208
199
  : 'can never match anything in this project';
209
200
  const advice = `This rule's ${what} ${site.origin} ${scope}, ` +
@@ -300,7 +291,28 @@ export function evidenceFloor(facts, violations, examined) {
300
291
  // is unremarkable and nobody looks.
301
292
  if (facts.assertsCardinality()) {
302
293
  const onDisk = cardinalitySelectorMissedDisk(facts, project);
303
- return onDisk.length > 0 ? onDisk : violations;
294
+ if (onDisk.length > 0)
295
+ return onDisk;
296
+ // The exemption above is only sound while the disk can ANSWER. When the walk
297
+ // gave up, `classify` says `not-determined` for every glob — so this rule is
298
+ // not passing, it is unexamined, and returning `violations` (empty) is the
299
+ // fail-open bug 0359 records: one walk over budget silenced every cardinality
300
+ // rule in the run at once, for a reason unrelated to any of their paths.
301
+ // …and only for a rule the disk was ever going to DECIDE. A cardinality rule
302
+ // selecting by name, decorator or predicate has no path glob, so the walk's failure
303
+ // changed nothing for it: blaming it would be a confidently wrong message, and
304
+ // consulting `diskSet` at all would walk the whole repository for an answer that
305
+ // cannot be used — falsifying this module's own "lazy, only from an already-firing
306
+ // fault" claim. Found by independent validation of
307
+ // [ADR-016](../../../../adr/016-a-bounded-instrument-limits-knowledge-never-the-verdict.md),
308
+ // measured red before this guard existed. That shape stays uncovered, which the 0.10
309
+ // changeset already says plainly; uncovered is honest, blamed is not.
310
+ const exhausted = project === undefined || !hasDiskDecidableGlob(facts)
311
+ ? undefined
312
+ : diskSet(project).exhaustion;
313
+ if (exhausted !== undefined)
314
+ return [walkExhaustedViolation(facts, exhausted)];
315
+ return violations;
304
316
  }
305
317
  // The author said empty is the point. `declaresEmpty()` — not
306
318
  // `_expectEmpty` — because `CrossProjectBuilder` declares per side and
@@ -342,6 +354,88 @@ function emptyProjectViolation(facts, project) {
342
354
  bypassFilters: true,
343
355
  };
344
356
  }
357
+ /**
358
+ * Does this rule carry a glob whose emptiness the FILESYSTEM could decide?
359
+ *
360
+ * The same population `cardinalitySelectorMissedDisk` narrows to — a fault-position site —
361
+ * asked before the walk rather than after it, so a rule the disk cannot decide never
362
+ * triggers one. Without this, a name-selecting `.notExist()` walked the whole repository and
363
+ * was then told the walk's failure had left its absence unchecked, which it had not.
364
+ */
365
+ function hasDiskDecidableGlob(facts) {
366
+ return facts
367
+ .globs()
368
+ .some((tree) => globSitesOf(tree).some((site) => isFaultPosition(site.position)));
369
+ }
370
+ /**
371
+ * The walk gave up, so this rule was never checked — [bug 0359](../../../../work/bugs/fixed/0359-a-disk-walk-that-gave-up-reports-nothing-and-now-decides-a-verdict.md).
372
+ *
373
+ * **Identity is the WALK, not the rule.** `ruleId`, `rule` and `element` are all
374
+ * constant per project, so `dedupeConfigFindings` — which keys on
375
+ * `(file, ruleId ?? rule, element)` — collapses every affected rule into one report
376
+ * and appends its own count of how many. One walk, one failure, one thing to say.
377
+ *
378
+ * **`ruleId` is the load-bearing half, and setting `rule` alone is not enough.** The
379
+ * builder stamps `ruleId` with each rule's own id on the way out, and the key prefers
380
+ * `ruleId`. The first draft of this set only `rule`, claimed one report in this very
381
+ * docstring, and produced one per rule — the ADR-009 rule 4 noise it says it avoids.
382
+ * Measured by `it('three rules that all lost the check collapse to one report')`,
383
+ * which was written because the claim had been asserted rather than run.
384
+ *
385
+ * That collapse happens in `check-all.ts`, the CLI path. A consumer calling
386
+ * `violations()` directly still receives one per rule, which is correct: each of
387
+ * those rules really did lose its floor. An earlier draft of this claimed
388
+ * `emptyProjectViolation` was the precedent for one-per-project; measured, that
389
+ * one is per-rule, and the count came from `dedupeConfigFindings` all along
390
+ * ([spike 0368](../../../../work/spikes/0368-what-the-exhaustion-finding-can-tell-an-adopter-to-do.md)).
391
+ *
392
+ * **The remedy names directories.** ADR-009 rule 2 — a stated fix that cannot be
393
+ * carried out is worse than none, and "your repository is too large" is not a fix
394
+ * an adopter can act on. Pruning removes 88.9% of entries in a repository with no
395
+ * generated output at all, so a repository that exhausts is overwhelmingly
396
+ * carrying trees that should never have been walked. Naming the largest is
397
+ * something to DO.
398
+ */
399
+ function walkExhaustedViolation(facts, exhaustion) {
400
+ const described = facts.describeRule();
401
+ const named = exhaustion.consumers.slice(0, NAMED_CONSUMERS);
402
+ const total = exhaustion.consumers.reduce((sum, c) => sum + c.entries, 0);
403
+ const share = (n) => (total === 0 ? '0%' : `${Math.round((n / total) * 100)}%`);
404
+ const list = named.map((c) => `${c.dir} (${c.entries} entries, ${share(c.entries)})`).join(', ');
405
+ const advice = `The filesystem walk that decides this rule gave up after ${exhaustion.budget} ` +
406
+ `directory entries, so the absence it asserts was never actually checked — and ` +
407
+ `every other cardinality rule whose selector the filesystem decides lost the same ` +
408
+ `check, for a reason that has nothing to do with any of their paths. ` +
409
+ `Largest first, what the walk read under ${exhaustion.root}: ${list}. ` +
410
+ `${UNSUPPRESSABLE}`;
411
+ const remedy = `Stop the walk reaching generated output: delete or relocate the directories above ` +
412
+ `that hold build, cache or framework output — that is what exhausts the budget, not ` +
413
+ `the size of your repository. If one of them is code your rules genuinely scope to, ` +
414
+ `this rule cannot be checked here and the gap is real, not a configuration mistake.`;
415
+ return {
416
+ // CONSTANT per project, deliberately: this is the dedupe key, and keying it on
417
+ // the rule would defeat the collapse and report the same walk N times.
418
+ rule: 'eess-ts: disk walk',
419
+ // ALSO `ruleId`, and that is the load-bearing half. `dedupeConfigFindings` keys
420
+ // on `ruleId ?? rule`, and the builder stamps `ruleId` with each rule's own id
421
+ // on the way out — so setting `rule` alone left three rules with three distinct
422
+ // keys and no collapse. Measured: the first draft of this claimed one report and
423
+ // produced one per rule.
424
+ ruleId: 'eess-ts: disk walk',
425
+ element: exhaustion.root,
426
+ file: '',
427
+ line: 0,
428
+ message: advice,
429
+ // Its own remedy, never the author's (bug 0021).
430
+ suggestion: remedy,
431
+ because: `A cardinality rule is exempt from the evidence floor because examining zero is ` +
432
+ `what it asserts. That exemption is only sound while the filesystem can say ` +
433
+ `whether the path is really gone. Above the walk's budget it cannot, so the rule ` +
434
+ `is not passing — it is unexamined, and ${described.id || described.rule || facts.ruleClass.name} ` +
435
+ `would otherwise have reported nothing at all.`,
436
+ bypassFilters: true,
437
+ };
438
+ }
345
439
  /**
346
440
  * A declaration that has expired — plan 0099.
347
441
  *
@@ -485,12 +579,39 @@ function cardinalitySelectorMissedDisk(facts, project) {
485
579
  // properties of the glob text rather than of what loaded, and 0357 dropped them here for
486
580
  // one rule shape. Collected as a set because the filter below sees an `ArchViolation`,
487
581
  // whose `element` is the glob, not the site that carries `kind` and `base`.
488
- const syntacticallyBroken = new Set(trees.flatMap((tree) => globSitesOf(tree)
489
- .filter((site) => isFaultPosition(site.position) &&
490
- syntacticFault(site.glob, site.kind, site.base) !== undefined)
491
- .map((site) => site.glob)));
492
- return deadSitesIn(facts, trees, project).selector.filter((v) => v.element !== undefined &&
493
- cardinalityDeadSiteIsAtFault(project, v.element, syntacticallyBroken.has(v.element)));
582
+ // The ROUTE per glob, from the sites this function already walks — one owner, shared with
583
+ // the message. The previous shape derived admission from `(glob, hasSyntacticFault)` and the
584
+ // message from `diagnosis.onDisk`, and those disagree for a glob naming a file: bug 0363.
585
+ const universe = pathUniverse(project);
586
+ const disk = diskSet(project);
587
+ // A DISJUNCTION over sites, not a last-one-wins assignment. One glob text can sit at two
588
+ // fault-position sites with different `kind`/`base` — `GlobBase`'s docstring says the base
589
+ // affects the verdict — and `Map.set` overwrote, so the second site's `undefined` erased the
590
+ // first site's route and the finding was filtered out. Measured by enforcement review:
591
+ // `.resideInFolder(G).resideInFile(G)` went green in `check` while `doctor` reported, which
592
+ // is exactly the disagreement `doctor-and-check-agree-about-a-ratchet.test.ts` exists to
593
+ // forbid — and `doctor` keys per site, so it was right and this was wrong.
594
+ //
595
+ // Keeping the first defined route restores what the predicate this replaced actually did:
596
+ // `hasSyntacticFault || contradictsAbsence(...)` is a disjunction, and the syntactic half
597
+ // was a SET over all sites.
598
+ const routeByGlob = new Map();
599
+ for (const tree of trees)
600
+ for (const site of globSitesOf(tree)) {
601
+ if (!isFaultPosition(site.position))
602
+ continue;
603
+ // `diagnoseGlob`'s contract: "Call only on a site already known to be dead." Without
604
+ // this the loop diagnosed LIVE sites, and a live site's answer decided a dead site's
605
+ // admission.
606
+ if (!isDeadSite(site, universe))
607
+ continue;
608
+ if (routeByGlob.has(site.glob))
609
+ continue;
610
+ const route = deadSiteRoute(diagnoseGlob(site, universe, disk));
611
+ if (route !== undefined)
612
+ routeByGlob.set(site.glob, route);
613
+ }
614
+ return deadSitesIn(facts, trees, project).selector.filter((v) => v.element !== undefined && routeByGlob.has(v.element));
494
615
  }
495
616
  /** The value behind `TerminalBuilder.zeroSubjectsAdvice()`. */
496
617
  export function zeroSubjectsAdviceOf(facts) {
@@ -1 +1 @@
1
- {"version":3,"file":"vacuity-diagnosis.js","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vacuity-diagnosis.js","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nielspeter/eess-ts",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "Architecture testing for TypeScript — the TS dialect of the eess family (formerly ts-archunit)",
5
5
  "type": "module",
6
6
  "exports": {