@goodbones/cli 0.1.0-beta.4 → 0.1.0-beta.6

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,4 +1,4 @@
1
- import { type CoverageFamily, type Violation } from "@goodbones/core";
1
+ import { type CoverageFamily, type Graph, type ObservedEdge, type Snapshot, type Violation } from "@goodbones/core";
2
2
  import * as Effect from "effect/Effect";
3
3
  import { type LoadedPolicy } from "./config-loader.js";
4
4
  export type CliFailure = {
@@ -14,8 +14,13 @@ export type Findings = {
14
14
  readonly violations: ReadonlyArray<Violation>;
15
15
  readonly unresolved: ReadonlyArray<UnresolvedEdge>;
16
16
  readonly files: number;
17
+ readonly edges: ReadonlyArray<ObservedEdge>;
18
+ readonly graph: Graph | null;
17
19
  };
18
- export declare const collectFindings: (policy: LoadedPolicy, roots: ReadonlyArray<string>) => Findings;
20
+ export type CollectOptions = {
21
+ readonly graph?: boolean;
22
+ };
23
+ export declare const collectFindings: (policy: LoadedPolicy, roots: ReadonlyArray<string>, options?: CollectOptions) => Findings;
19
24
  export type ReportedViolation = Violation & {
20
25
  readonly fingerprint: string;
21
26
  readonly baselined: boolean;
@@ -49,6 +54,9 @@ export type CheckOptions = {
49
54
  readonly manifestPath: string;
50
55
  };
51
56
  export declare const check: (policy: LoadedPolicy, roots: ReadonlyArray<string>, options: CheckOptions) => Effect.Effect<void, CliFailure>;
57
+ export declare const snapshotOf: (policy: LoadedPolicy, roots: ReadonlyArray<string>, manifestPath: string) => Snapshot;
58
+ export type ConformanceOptions = CheckOptions;
59
+ export declare const conformance: (policy: LoadedPolicy, roots: ReadonlyArray<string>, options: ConformanceOptions) => Effect.Effect<void, CliFailure>;
52
60
  export declare const coverage: (policy: LoadedPolicy, roots: ReadonlyArray<string>) => Effect.Effect<void, CliFailure>;
53
61
  export declare const writeBaseline: (policy: LoadedPolicy, roots: ReadonlyArray<string>) => Effect.Effect<void, CliFailure>;
54
62
  export declare const explain: (policy: LoadedPolicy, file: string) => Effect.Effect<void, CliFailure>;
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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"}
package/build/esm/run.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
3
  import * as path from "node:path";
4
- import { baselineOf, coverageOf, decodeBaseline, decodeManifest, EMPTY_BASELINE, evaluateGraph, evaluateMemberSite, evaluateSelectedBindings, evaluateSelectedEdge, evaluateStructure, evaluateSurface, exportRulesSelecting, findManifestFile, fingerprintOf, formatManifestYaml, formatMessage, fractionsOf, hasGraphRules, listSourceFiles, makeBaselineFilter, MANIFEST_FILENAMES, MANIFEST_SCHEMA_ID, memberRulesSelecting, readManifestFile, requiredSiblingsOf, rulesSelecting, serializeBaseline, staleEntriesOf, surfaceRulesSelecting, } from "@goodbones/core";
4
+ import { baselineOf, coverageOf, cyclesIn, decodeBaseline, decodeManifest, EMPTY_BASELINE, evaluateGraph, evaluateMemberSite, evaluateResolvedEdge, evaluateSelectedBindings, evaluateStructure, evaluateSurface, exportRulesSelecting, findManifestFile, fingerprintOf, formatManifestYaml, formatMessage, fractionsOf, hasGraphRules, heightOf, listSourceFiles, makeBaselineFilter, MANIFEST_FILENAMES, MANIFEST_SCHEMA_ID, memberRulesSelecting, readManifestFile, requiredSiblingsOf, residueOf, rulesSelecting, serializeBaseline, slackOf, SNAPSHOT_VERSION, staleEntriesOf, surfaceRulesSelecting, vacancyOf, } from "@goodbones/core";
5
5
  import * as Effect from "effect/Effect";
6
6
  import * as Result from "effect/Result";
7
7
  import { loadPolicyFromFile, manifestPathOf } from "./config-loader.js";
@@ -9,10 +9,11 @@ import { buildGraph } from "./graph.js";
9
9
  import { infer } from "./infer.js";
10
10
  import { sourceFactsOf } from "./source-facts.js";
11
11
  const fail = (message) => ({ _tag: "CliFailure", message });
12
- export const collectFindings = (policy, roots) => {
12
+ export const collectFindings = (policy, roots, options = {}) => {
13
13
  const files = listSourceFiles(policy.repoRoot, roots, policy.languages);
14
14
  const violations = [];
15
15
  const unresolved = [];
16
+ const edges = [];
16
17
  // Each file is parsed at most once, whether the per-file families or the
17
18
  // graph pass asks first.
18
19
  const parsed = new Map();
@@ -26,10 +27,12 @@ export const collectFindings = (policy, roots) => {
26
27
  };
27
28
  // The graph is the whole repository resolved at once — the one question no
28
29
  // per-file adapter can ask — and is built only when a rule needs it.
29
- if (hasGraphRules(policy.graph)) {
30
- for (const violation of evaluateGraph(policy.graph, buildGraph(files, policy.resolver, factsOf))) {
30
+ const graph = options.graph === true || hasGraphRules(policy.graph)
31
+ ? buildGraph(files, policy.resolver, factsOf)
32
+ : null;
33
+ if (graph !== null && hasGraphRules(policy.graph)) {
34
+ for (const violation of evaluateGraph(policy.graph, graph))
31
35
  violations.push(violation);
32
- }
33
36
  }
34
37
  for (const file of files) {
35
38
  for (const violation of evaluateStructure(policy.structure, policy.fileSystem, file)) {
@@ -56,17 +59,23 @@ export const collectFindings = (policy, roots) => {
56
59
  }
57
60
  for (const specifier of facts.specifiers) {
58
61
  const edge = { importer: file, specifier };
59
- const imported = evaluateSelectedEdge(selectedImports, policy.resolver, edge);
60
- if (Result.isFailure(imported)) {
61
- if (policy.config.resolve.unresolved === "off")
62
- continue;
63
- if (policy.ignoreUnresolved.some((pattern) => pattern.test(specifier)))
62
+ // A file no import rule selects never needs its imports resolved, which
63
+ // is what keeps resolution off the hot path for the bulk of the repo.
64
+ if (selectedImports.length > 0) {
65
+ const resolved = policy.resolver.resolve(file, specifier);
66
+ if (Result.isFailure(resolved)) {
67
+ if (policy.config.resolve.unresolved === "off")
68
+ continue;
69
+ if (policy.ignoreUnresolved.some((pattern) => pattern.test(specifier)))
70
+ continue;
71
+ unresolved.push({ file, specifier, detail: resolved.failure.detail });
64
72
  continue;
65
- unresolved.push({ file, specifier, detail: imported.failure.detail });
66
- continue;
73
+ }
74
+ edges.push({ importer: file, target: resolved.success });
75
+ for (const violation of evaluateResolvedEdge(selectedImports, file, resolved.success)) {
76
+ violations.push(violation);
77
+ }
67
78
  }
68
- for (const violation of imported.success)
69
- violations.push(violation);
70
79
  const bound = facts.bindings.get(specifier) ?? [];
71
80
  const exported = evaluateSelectedBindings(selectedExports, policy.resolver, {
72
81
  ...edge,
@@ -78,7 +87,7 @@ export const collectFindings = (policy, roots) => {
78
87
  }
79
88
  }
80
89
  }
81
- return { violations, unresolved, files: files.length };
90
+ return { violations, unresolved, files: files.length, edges, graph };
82
91
  };
83
92
  const baselinePathOf = (policy) => policy.config.baseline === undefined
84
93
  ? null
@@ -114,8 +123,8 @@ const sha256Of = (file) => {
114
123
  return "";
115
124
  }
116
125
  };
117
- export const checkReport = (policy, roots, manifestPath) => {
118
- const findings = collectFindings(policy, roots);
126
+ export const checkReport = (policy, roots, manifestPath) => reportOf(policy, roots, manifestPath, collectFindings(policy, roots));
127
+ const reportOf = (policy, roots, manifestPath, findings) => {
119
128
  const baseline = readBaseline(policy);
120
129
  const stale = staleEntriesOf(baseline, findings.violations);
121
130
  const { isBaselined } = makeBaselineFilter(baseline);
@@ -220,6 +229,114 @@ export const check = (policy, roots, options) => Effect.gen(function* () {
220
229
  return yield* Effect.fail(failure);
221
230
  });
222
231
  const percent = (fraction) => `${String(Math.floor(fraction * 100))}%`;
232
+ // The conformance snapshot: `check`'s report grown with what no family
233
+ // reaches, what the allowlists permit and nothing uses, the cycle count and
234
+ // the size of the debt — the whole distance between the tree and the
235
+ // manifest, as one document another run can be compared against. Its shape
236
+ // is the core's `Snapshot`, and the schema published beside the manifest's.
237
+ export const snapshotOf = (policy, roots, manifestPath) => {
238
+ const findings = collectFindings(policy, roots, { graph: true });
239
+ const report_ = reportOf(policy, roots, manifestPath, findings);
240
+ const files = listSourceFiles(policy.repoRoot, roots, policy.languages);
241
+ const graph = findings.graph ?? { files, edges: new Map() };
242
+ const heights = heightOf(graph);
243
+ // Leaf edges first. A violation names a target when it is about an edge;
244
+ // the cost of fixing it is roughly how much of the graph stands beneath
245
+ // that target, so the ones nearest the ground come first and a reader
246
+ // starting at the top of the list is starting where a fix stays local.
247
+ // Ties keep the fingerprint order, so the list is the same on every run.
248
+ const heightOfViolation = (one) => heights.get(one.subject ?? "") ?? heights.get(one.file) ?? 0;
249
+ const violations = [...report_.violations].sort((left, right) => {
250
+ const byHeight = heightOfViolation(left) - heightOfViolation(right);
251
+ return byHeight !== 0 ? byHeight : left.fingerprint.localeCompare(right.fingerprint);
252
+ });
253
+ // Slack is measured over the walked files as well as the edges: an
254
+ // allowlist that selects no file is vacant, and its entries are reported as
255
+ // that rather than as lines nobody needs.
256
+ const { concentration, slack } = slackOf(policy.importRules, findings.edges, files);
257
+ return {
258
+ version: SNAPSHOT_VERSION,
259
+ manifest: report_.manifest,
260
+ roots: report_.roots,
261
+ files: report_.files,
262
+ ok: report_.ok,
263
+ coverage: report_.coverage,
264
+ residue: residueOf(policy, files),
265
+ vacant: vacancyOf(policy.importRules, files),
266
+ violations,
267
+ unresolved: report_.unresolved,
268
+ stale: report_.stale,
269
+ baseline: { size: readBaseline(policy).entries.length },
270
+ cycles: cyclesIn(graph).length,
271
+ slack,
272
+ concentration,
273
+ adoption: report_.adoption,
274
+ };
275
+ };
276
+ const renderSnapshot = (snapshot) => {
277
+ const reportable = snapshot.violations.filter((one) => !one.baselined);
278
+ const carried = snapshot.violations.length - reportable.length;
279
+ const count = (n, noun, plural = `${noun}s`) => `${String(n)} ${n === 1 ? noun : plural}`;
280
+ const row = (family) => {
281
+ const { covered, floor, total } = snapshot.coverage[family];
282
+ const fraction = total === 0 ? 1 : covered / total;
283
+ const mark = floor === undefined
284
+ ? ""
285
+ : fraction >= floor
286
+ ? ` ≥ ${percent(floor)} ✓`
287
+ : ` < ${percent(floor)} ✗`;
288
+ return ` ${family.padEnd(10)} ${String(covered).padStart(5)}/${String(total)} ${percent(fraction).padStart(4)}${mark}`;
289
+ };
290
+ const section = (title, lines) => [
291
+ "",
292
+ title,
293
+ ...lines,
294
+ ];
295
+ const vacantWidth = Math.max(0, ...snapshot.vacant.map((one) => one.node.length));
296
+ // The document carries every partly-used fragment entry; the text shows
297
+ // the ones concentrated enough to read as a per-file rule written wide.
298
+ const concentrated = snapshot.concentration.filter((one) => one.usedAt * 2 < one.of);
299
+ return [
300
+ `${String(snapshot.files)} files under ${snapshot.roots.join(", ")}, against ${snapshot.manifest.path}`,
301
+ ...section("coverage", COVERAGE_FAMILIES.map(row)),
302
+ ...section(`residue: ${count(snapshot.residue.files.length, "file")} no family reaches` +
303
+ (snapshot.residue.folders.length === 0
304
+ ? ""
305
+ : `, ${count(snapshot.residue.folders.length, "folder")} wholly`), [
306
+ ...snapshot.residue.folders.map((folder) => ` ${folder}/`),
307
+ ...snapshot.residue.files
308
+ .filter((file) => !snapshot.residue.folders.some((folder) => file.startsWith(`${folder}/`)))
309
+ .map((file) => ` ${file}`),
310
+ ]),
311
+ ...section(`vacant: ${count(snapshot.vacant.length, "node")} ${snapshot.vacant.length === 1 ? "selects" : "select"} no file`, snapshot.vacant.map((one) => ` ${one.node.padEnd(vacantWidth)} ${count(one.allowances, "allowance")}`)),
312
+ ...section(`violations: ${count(reportable.length, "reportable")}` +
313
+ (carried > 0 ? `, ${String(carried)} carried by the baseline` : "") +
314
+ (snapshot.stale.length > 0
315
+ ? `, ${count(snapshot.stale.length, "stale entry", "stale entries")}`
316
+ : "") +
317
+ (reportable.length > 0 ? " — nearest the ground first" : ""), reportable.map(describe)),
318
+ ...(snapshot.unresolved.length === 0
319
+ ? []
320
+ : section(`unresolved: ${count(snapshot.unresolved.length, "import")} no rule can police`, snapshot.unresolved.map((one) => ` ${one.file} → ${one.specifier} (${one.detail})`))),
321
+ ...section(`slack: ${count(snapshot.slack.length, "allowance")} nothing imports through`, snapshot.slack.map((one) => ` ${one.node}: ${one.kind} ${JSON.stringify(one.entry)}` +
322
+ (one.of === undefined ? "" : ` (via use, at ${count(one.of, "node")})`))),
323
+ ...(concentrated.length === 0
324
+ ? []
325
+ : section(`concentrated: ${count(concentrated.length, "allowance")} used at fewer than half the nodes granted`, concentrated.map((one) => ` ${one.fragment}: ${one.kind} ${JSON.stringify(one.entry)} used at ${String(one.usedAt)} of ${count(one.of, "node")}`))),
326
+ "",
327
+ `cycles: ${String(snapshot.cycles)}`,
328
+ `baseline: ${count(snapshot.baseline.size, "entry", "entries")}`,
329
+ `adoption: ${count(snapshot.adoption.unrestricted.length, "unrestricted tier")}, ${count(snapshot.adoption.partial.length, "partial tier")}`,
330
+ ];
331
+ };
332
+ // The report of the tree against the manifest. Unlike `check`, it never
333
+ // fails: it is a measurement, and the manifest it measures against may be one
334
+ // the tree was never expected to satisfy yet — `--against` names a target.
335
+ // `ok` in the document says what `check` would have done.
336
+ export const conformance = (policy, roots, options) => Effect.gen(function* () {
337
+ const snapshot = snapshotOf(policy, roots, options.manifestPath);
338
+ yield* report(options.format === "json" ? [JSON.stringify(snapshot, null, 2)] : renderSnapshot(snapshot));
339
+ });
223
340
  // How much of the tree the policy reaches. A probe proves a rule can fire;
224
341
  // this is whether the files are there to fire on. Reported per family, with the
225
342
  // adoption backlog — the tiers that said "not tightened yet" — beneath it.
@@ -493,8 +610,21 @@ configFilename) => Effect.gen(function* () {
493
610
  yield* infer(repoRoot, rest, configFilename);
494
611
  return;
495
612
  }
613
+ // `--against <file>` measures the tree against a manifest other than the
614
+ // repository's own — the target the team is moving toward. Only
615
+ // `conformance` takes it: a `check` against a manifest nobody is held to
616
+ // yet would fail for no one's benefit.
617
+ const againstAt = rest.indexOf("--against");
618
+ const against = againstAt === -1 ? undefined : rest[againstAt + 1];
619
+ if (againstAt !== -1 && (against === undefined || against.startsWith("--"))) {
620
+ return yield* Effect.fail(fail("--against needs a manifest path"));
621
+ }
622
+ if (against !== undefined && command !== "conformance") {
623
+ return yield* Effect.fail(fail(`--against is a \`conformance\` flag; ${command} does not take it`));
624
+ }
625
+ const manifestFilename = against ?? configFilename;
496
626
  const policy = yield* Effect.tryPromise({
497
- try: () => loadPolicyFromFile(repoRoot, configFilename),
627
+ try: () => loadPolicyFromFile(repoRoot, manifestFilename),
498
628
  catch: (cause) => fail(String(cause)),
499
629
  });
500
630
  yield* Effect.sync(() => {
@@ -502,7 +632,9 @@ configFilename) => Effect.gen(function* () {
502
632
  process.stderr.write(`deprecated: ${notice}\n`);
503
633
  });
504
634
  const json = rest.includes("--json");
505
- const positional = rest.filter((argument) => argument !== "--json");
635
+ const positional = rest.filter((argument, index) => argument !== "--json" &&
636
+ argument !== "--against" &&
637
+ (againstAt === -1 || index !== againstAt + 1));
506
638
  const roots = positional.length > 0 ? positional : ["packages"];
507
639
  switch (command) {
508
640
  case "check":
@@ -510,6 +642,11 @@ configFilename) => Effect.gen(function* () {
510
642
  format: json ? "json" : "text",
511
643
  manifestPath: manifestPathOf(repoRoot, configFilename),
512
644
  });
645
+ case "conformance":
646
+ return yield* conformance(policy, roots, {
647
+ format: json ? "json" : "text",
648
+ manifestPath: manifestPathOf(repoRoot, manifestFilename),
649
+ });
513
650
  case "baseline":
514
651
  return yield* writeBaseline(policy, roots);
515
652
  case "explain": {
@@ -527,7 +664,7 @@ configFilename) => Effect.gen(function* () {
527
664
  return yield* facts(policy, file, json ? "json" : "text");
528
665
  }
529
666
  default:
530
- return yield* Effect.fail(fail(`unknown command "${command}". Try: check [--json] | baseline | coverage | explain <file> | facts <file> [--json] | init | infer | migrate`));
667
+ return yield* Effect.fail(fail(`unknown command "${command}". Try: check [--json] | conformance [--json] [--against <manifest>] | baseline | coverage | explain <file> | facts <file> [--json] | init | infer | migrate`));
531
668
  }
532
669
  });
533
670
  export const fingerprint = fingerprintOf;
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodbones/cli",
3
- "version": "0.1.0-beta.4",
3
+ "version": "0.1.0-beta.6",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "The architecture CLI for @goodbones/core: check, baseline, coverage, explain and facts over a whole repository with no linter in the loop, including the graph family (cycles, orphans, transitive reach) that only an adapter seeing every file at once can evaluate.",
@@ -38,8 +38,8 @@
38
38
  ],
39
39
  "dependencies": {
40
40
  "effect": "4.0.0-beta.94",
41
- "@goodbones/core": "0.1.0-beta.4",
42
- "@goodbones/typescript": "0.1.0-beta.4"
41
+ "@goodbones/core": "0.1.0-beta.6",
42
+ "@goodbones/typescript": "0.1.0-beta.6"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^25.9.4"
package/src/run.ts CHANGED
@@ -7,13 +7,14 @@ import {
7
7
  baselineOf,
8
8
  type CoverageFamily,
9
9
  coverageOf,
10
+ cyclesIn,
10
11
  decodeBaseline,
11
12
  decodeManifest,
12
13
  EMPTY_BASELINE,
13
14
  evaluateGraph,
14
15
  evaluateMemberSite,
16
+ evaluateResolvedEdge,
15
17
  evaluateSelectedBindings,
16
- evaluateSelectedEdge,
17
18
  evaluateStructure,
18
19
  evaluateSurface,
19
20
  exportRulesSelecting,
@@ -22,19 +23,27 @@ import {
22
23
  formatManifestYaml,
23
24
  formatMessage,
24
25
  fractionsOf,
26
+ type Graph,
25
27
  hasGraphRules,
28
+ heightOf,
26
29
  listSourceFiles,
27
30
  makeBaselineFilter,
28
31
  MANIFEST_FILENAMES,
29
32
  MANIFEST_SCHEMA_ID,
30
33
  memberRulesSelecting,
34
+ type ObservedEdge,
31
35
  readManifestFile,
32
36
  requiredSiblingsOf,
37
+ residueOf,
33
38
  rulesSelecting,
34
39
  serializeBaseline,
40
+ slackOf,
41
+ type Snapshot,
42
+ SNAPSHOT_VERSION,
35
43
  type SourceFacts,
36
44
  staleEntriesOf,
37
45
  surfaceRulesSelecting,
46
+ vacancyOf,
38
47
  type Violation,
39
48
  } from "@goodbones/core";
40
49
  import * as Effect from "effect/Effect";
@@ -73,12 +82,29 @@ export type Findings = {
73
82
  readonly violations: ReadonlyArray<Violation>;
74
83
  readonly unresolved: ReadonlyArray<UnresolvedEdge>;
75
84
  readonly files: number;
85
+ // Every edge resolved from a file under an import rule — what the slack
86
+ // report reads. An edge from a file no import rule selects is not here,
87
+ // since no allowlist could have admitted it.
88
+ readonly edges: ReadonlyArray<ObservedEdge>;
89
+ // The import graph, when a graph rule needed it or the caller asked.
90
+ readonly graph: Graph | null;
76
91
  };
77
92
 
78
- export const collectFindings = (policy: LoadedPolicy, roots: ReadonlyArray<string>): Findings => {
93
+ export type CollectOptions = {
94
+ // Build the graph even when no rule needs it — the snapshot counts cycles
95
+ // and orders violations by it.
96
+ readonly graph?: boolean;
97
+ };
98
+
99
+ export const collectFindings = (
100
+ policy: LoadedPolicy,
101
+ roots: ReadonlyArray<string>,
102
+ options: CollectOptions = {},
103
+ ): Findings => {
79
104
  const files = listSourceFiles(policy.repoRoot, roots, policy.languages);
80
105
  const violations: Array<Violation> = [];
81
106
  const unresolved: Array<UnresolvedEdge> = [];
107
+ const edges: Array<ObservedEdge> = [];
82
108
 
83
109
  // Each file is parsed at most once, whether the per-file families or the
84
110
  // graph pass asks first.
@@ -93,13 +119,12 @@ export const collectFindings = (policy: LoadedPolicy, roots: ReadonlyArray<strin
93
119
 
94
120
  // The graph is the whole repository resolved at once — the one question no
95
121
  // per-file adapter can ask — and is built only when a rule needs it.
96
- if (hasGraphRules(policy.graph)) {
97
- for (const violation of evaluateGraph(
98
- policy.graph,
99
- buildGraph(files, policy.resolver, factsOf),
100
- )) {
101
- violations.push(violation);
102
- }
122
+ const graph =
123
+ options.graph === true || hasGraphRules(policy.graph)
124
+ ? buildGraph(files, policy.resolver, factsOf)
125
+ : null;
126
+ if (graph !== null && hasGraphRules(policy.graph)) {
127
+ for (const violation of evaluateGraph(policy.graph, graph)) violations.push(violation);
103
128
  }
104
129
 
105
130
  for (const file of files) {
@@ -134,14 +159,21 @@ export const collectFindings = (policy: LoadedPolicy, roots: ReadonlyArray<strin
134
159
  for (const specifier of facts.specifiers) {
135
160
  const edge = { importer: file, specifier };
136
161
 
137
- const imported = evaluateSelectedEdge(selectedImports, policy.resolver, edge);
138
- if (Result.isFailure(imported)) {
139
- if (policy.config.resolve.unresolved === "off") continue;
140
- if (policy.ignoreUnresolved.some((pattern) => pattern.test(specifier))) continue;
141
- unresolved.push({ file, specifier, detail: imported.failure.detail });
142
- continue;
162
+ // A file no import rule selects never needs its imports resolved, which
163
+ // is what keeps resolution off the hot path for the bulk of the repo.
164
+ if (selectedImports.length > 0) {
165
+ const resolved = policy.resolver.resolve(file, specifier);
166
+ if (Result.isFailure(resolved)) {
167
+ if (policy.config.resolve.unresolved === "off") continue;
168
+ if (policy.ignoreUnresolved.some((pattern) => pattern.test(specifier))) continue;
169
+ unresolved.push({ file, specifier, detail: resolved.failure.detail });
170
+ continue;
171
+ }
172
+ edges.push({ importer: file, target: resolved.success });
173
+ for (const violation of evaluateResolvedEdge(selectedImports, file, resolved.success)) {
174
+ violations.push(violation);
175
+ }
143
176
  }
144
- for (const violation of imported.success) violations.push(violation);
145
177
 
146
178
  const bound = facts.bindings.get(specifier) ?? [];
147
179
  const exported = evaluateSelectedBindings(selectedExports, policy.resolver, {
@@ -154,7 +186,7 @@ export const collectFindings = (policy: LoadedPolicy, roots: ReadonlyArray<strin
154
186
  }
155
187
  }
156
188
 
157
- return { violations, unresolved, files: files.length };
189
+ return { violations, unresolved, files: files.length, edges, graph };
158
190
  };
159
191
 
160
192
  const baselinePathOf = (policy: LoadedPolicy): string | null =>
@@ -235,8 +267,14 @@ export const checkReport = (
235
267
  policy: LoadedPolicy,
236
268
  roots: ReadonlyArray<string>,
237
269
  manifestPath: string,
270
+ ): CheckReport => reportOf(policy, roots, manifestPath, collectFindings(policy, roots));
271
+
272
+ const reportOf = (
273
+ policy: LoadedPolicy,
274
+ roots: ReadonlyArray<string>,
275
+ manifestPath: string,
276
+ findings: Findings,
238
277
  ): CheckReport => {
239
- const findings = collectFindings(policy, roots);
240
278
  const baseline = readBaseline(policy);
241
279
  const stale = staleEntriesOf(baseline, findings.violations);
242
280
  const { isBaselined } = makeBaselineFilter(baseline);
@@ -378,6 +416,165 @@ export const check = (
378
416
 
379
417
  const percent = (fraction: number): string => `${String(Math.floor(fraction * 100))}%`;
380
418
 
419
+ // The conformance snapshot: `check`'s report grown with what no family
420
+ // reaches, what the allowlists permit and nothing uses, the cycle count and
421
+ // the size of the debt — the whole distance between the tree and the
422
+ // manifest, as one document another run can be compared against. Its shape
423
+ // is the core's `Snapshot`, and the schema published beside the manifest's.
424
+ export const snapshotOf = (
425
+ policy: LoadedPolicy,
426
+ roots: ReadonlyArray<string>,
427
+ manifestPath: string,
428
+ ): Snapshot => {
429
+ const findings = collectFindings(policy, roots, { graph: true });
430
+ const report_ = reportOf(policy, roots, manifestPath, findings);
431
+ const files = listSourceFiles(policy.repoRoot, roots, policy.languages);
432
+ const graph = findings.graph ?? { files, edges: new Map() };
433
+ const heights = heightOf(graph);
434
+
435
+ // Leaf edges first. A violation names a target when it is about an edge;
436
+ // the cost of fixing it is roughly how much of the graph stands beneath
437
+ // that target, so the ones nearest the ground come first and a reader
438
+ // starting at the top of the list is starting where a fix stays local.
439
+ // Ties keep the fingerprint order, so the list is the same on every run.
440
+ const heightOfViolation = (one: ReportedViolation): number =>
441
+ heights.get(one.subject ?? "") ?? heights.get(one.file) ?? 0;
442
+ const violations = [...report_.violations].sort((left, right) => {
443
+ const byHeight = heightOfViolation(left) - heightOfViolation(right);
444
+ return byHeight !== 0 ? byHeight : left.fingerprint.localeCompare(right.fingerprint);
445
+ });
446
+
447
+ // Slack is measured over the walked files as well as the edges: an
448
+ // allowlist that selects no file is vacant, and its entries are reported as
449
+ // that rather than as lines nobody needs.
450
+ const { concentration, slack } = slackOf(policy.importRules, findings.edges, files);
451
+
452
+ return {
453
+ version: SNAPSHOT_VERSION,
454
+ manifest: report_.manifest,
455
+ roots: report_.roots,
456
+ files: report_.files,
457
+ ok: report_.ok,
458
+ coverage: report_.coverage,
459
+ residue: residueOf(policy, files),
460
+ vacant: vacancyOf(policy.importRules, files),
461
+ violations,
462
+ unresolved: report_.unresolved,
463
+ stale: report_.stale,
464
+ baseline: { size: readBaseline(policy).entries.length },
465
+ cycles: cyclesIn(graph).length,
466
+ slack,
467
+ concentration,
468
+ adoption: report_.adoption,
469
+ };
470
+ };
471
+
472
+ const renderSnapshot = (snapshot: Snapshot): ReadonlyArray<string> => {
473
+ const reportable = snapshot.violations.filter((one) => !one.baselined);
474
+ const carried = snapshot.violations.length - reportable.length;
475
+ const count = (n: number, noun: string, plural = `${noun}s`): string =>
476
+ `${String(n)} ${n === 1 ? noun : plural}`;
477
+ const row = (family: CoverageFamily): string => {
478
+ const { covered, floor, total } = snapshot.coverage[family];
479
+ const fraction = total === 0 ? 1 : covered / total;
480
+ const mark =
481
+ floor === undefined
482
+ ? ""
483
+ : fraction >= floor
484
+ ? ` ≥ ${percent(floor)} ✓`
485
+ : ` < ${percent(floor)} ✗`;
486
+ return ` ${family.padEnd(10)} ${String(covered).padStart(5)}/${String(total)} ${percent(fraction).padStart(4)}${mark}`;
487
+ };
488
+ const section = (title: string, lines: ReadonlyArray<string>): ReadonlyArray<string> => [
489
+ "",
490
+ title,
491
+ ...lines,
492
+ ];
493
+ const vacantWidth = Math.max(0, ...snapshot.vacant.map((one) => one.node.length));
494
+ // The document carries every partly-used fragment entry; the text shows
495
+ // the ones concentrated enough to read as a per-file rule written wide.
496
+ const concentrated = snapshot.concentration.filter((one) => one.usedAt * 2 < one.of);
497
+
498
+ return [
499
+ `${String(snapshot.files)} files under ${snapshot.roots.join(", ")}, against ${snapshot.manifest.path}`,
500
+ ...section("coverage", COVERAGE_FAMILIES.map(row)),
501
+ ...section(
502
+ `residue: ${count(snapshot.residue.files.length, "file")} no family reaches` +
503
+ (snapshot.residue.folders.length === 0
504
+ ? ""
505
+ : `, ${count(snapshot.residue.folders.length, "folder")} wholly`),
506
+ [
507
+ ...snapshot.residue.folders.map((folder) => ` ${folder}/`),
508
+ ...snapshot.residue.files
509
+ .filter(
510
+ (file) => !snapshot.residue.folders.some((folder) => file.startsWith(`${folder}/`)),
511
+ )
512
+ .map((file) => ` ${file}`),
513
+ ],
514
+ ),
515
+ ...section(
516
+ `vacant: ${count(snapshot.vacant.length, "node")} ${snapshot.vacant.length === 1 ? "selects" : "select"} no file`,
517
+ snapshot.vacant.map(
518
+ (one) => ` ${one.node.padEnd(vacantWidth)} ${count(one.allowances, "allowance")}`,
519
+ ),
520
+ ),
521
+ ...section(
522
+ `violations: ${count(reportable.length, "reportable")}` +
523
+ (carried > 0 ? `, ${String(carried)} carried by the baseline` : "") +
524
+ (snapshot.stale.length > 0
525
+ ? `, ${count(snapshot.stale.length, "stale entry", "stale entries")}`
526
+ : "") +
527
+ (reportable.length > 0 ? " — nearest the ground first" : ""),
528
+ reportable.map(describe),
529
+ ),
530
+ ...(snapshot.unresolved.length === 0
531
+ ? []
532
+ : section(
533
+ `unresolved: ${count(snapshot.unresolved.length, "import")} no rule can police`,
534
+ snapshot.unresolved.map((one) => ` ${one.file} → ${one.specifier} (${one.detail})`),
535
+ )),
536
+ ...section(
537
+ `slack: ${count(snapshot.slack.length, "allowance")} nothing imports through`,
538
+ snapshot.slack.map(
539
+ (one) =>
540
+ ` ${one.node}: ${one.kind} ${JSON.stringify(one.entry)}` +
541
+ (one.of === undefined ? "" : ` (via use, at ${count(one.of, "node")})`),
542
+ ),
543
+ ),
544
+ ...(concentrated.length === 0
545
+ ? []
546
+ : section(
547
+ `concentrated: ${count(concentrated.length, "allowance")} used at fewer than half the nodes granted`,
548
+ concentrated.map(
549
+ (one) =>
550
+ ` ${one.fragment}: ${one.kind} ${JSON.stringify(one.entry)} used at ${String(one.usedAt)} of ${count(one.of, "node")}`,
551
+ ),
552
+ )),
553
+ "",
554
+ `cycles: ${String(snapshot.cycles)}`,
555
+ `baseline: ${count(snapshot.baseline.size, "entry", "entries")}`,
556
+ `adoption: ${count(snapshot.adoption.unrestricted.length, "unrestricted tier")}, ${count(snapshot.adoption.partial.length, "partial tier")}`,
557
+ ];
558
+ };
559
+
560
+ export type ConformanceOptions = CheckOptions;
561
+
562
+ // The report of the tree against the manifest. Unlike `check`, it never
563
+ // fails: it is a measurement, and the manifest it measures against may be one
564
+ // the tree was never expected to satisfy yet — `--against` names a target.
565
+ // `ok` in the document says what `check` would have done.
566
+ export const conformance = (
567
+ policy: LoadedPolicy,
568
+ roots: ReadonlyArray<string>,
569
+ options: ConformanceOptions,
570
+ ): Effect.Effect<void, CliFailure> =>
571
+ Effect.gen(function* () {
572
+ const snapshot = snapshotOf(policy, roots, options.manifestPath);
573
+ yield* report(
574
+ options.format === "json" ? [JSON.stringify(snapshot, null, 2)] : renderSnapshot(snapshot),
575
+ );
576
+ });
577
+
381
578
  // How much of the tree the policy reaches. A probe proves a rule can fire;
382
579
  // this is whether the files are there to fire on. Reported per family, with the
383
580
  // adoption backlog — the tiers that said "not tightened yet" — beneath it.
@@ -738,8 +935,24 @@ export const run = (
738
935
  return;
739
936
  }
740
937
 
938
+ // `--against <file>` measures the tree against a manifest other than the
939
+ // repository's own — the target the team is moving toward. Only
940
+ // `conformance` takes it: a `check` against a manifest nobody is held to
941
+ // yet would fail for no one's benefit.
942
+ const againstAt = rest.indexOf("--against");
943
+ const against = againstAt === -1 ? undefined : rest[againstAt + 1];
944
+ if (againstAt !== -1 && (against === undefined || against.startsWith("--"))) {
945
+ return yield* Effect.fail(fail("--against needs a manifest path"));
946
+ }
947
+ if (against !== undefined && command !== "conformance") {
948
+ return yield* Effect.fail(
949
+ fail(`--against is a \`conformance\` flag; ${command} does not take it`),
950
+ );
951
+ }
952
+ const manifestFilename = against ?? configFilename;
953
+
741
954
  const policy = yield* Effect.tryPromise({
742
- try: () => loadPolicyFromFile(repoRoot, configFilename),
955
+ try: () => loadPolicyFromFile(repoRoot, manifestFilename),
743
956
  catch: (cause) => fail(String(cause)),
744
957
  });
745
958
  yield* Effect.sync(() => {
@@ -747,7 +960,12 @@ export const run = (
747
960
  });
748
961
 
749
962
  const json = rest.includes("--json");
750
- const positional = rest.filter((argument) => argument !== "--json");
963
+ const positional = rest.filter(
964
+ (argument, index) =>
965
+ argument !== "--json" &&
966
+ argument !== "--against" &&
967
+ (againstAt === -1 || index !== againstAt + 1),
968
+ );
751
969
  const roots = positional.length > 0 ? positional : ["packages"];
752
970
 
753
971
  switch (command) {
@@ -756,6 +974,11 @@ export const run = (
756
974
  format: json ? "json" : "text",
757
975
  manifestPath: manifestPathOf(repoRoot, configFilename),
758
976
  });
977
+ case "conformance":
978
+ return yield* conformance(policy, roots, {
979
+ format: json ? "json" : "text",
980
+ manifestPath: manifestPathOf(repoRoot, manifestFilename),
981
+ });
759
982
  case "baseline":
760
983
  return yield* writeBaseline(policy, roots);
761
984
  case "explain": {
@@ -773,7 +996,7 @@ export const run = (
773
996
  default:
774
997
  return yield* Effect.fail(
775
998
  fail(
776
- `unknown command "${command}". Try: check [--json] | baseline | coverage | explain <file> | facts <file> [--json] | init | infer | migrate`,
999
+ `unknown command "${command}". Try: check [--json] | conformance [--json] [--against <manifest>] | baseline | coverage | explain <file> | facts <file> [--json] | init | infer | migrate`,
777
1000
  ),
778
1001
  );
779
1002
  }