@ia-qa/self-healing 1.7.26 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/run.js CHANGED
@@ -43,6 +43,8 @@ const path = __importStar(require("path"));
43
43
  const child_process_1 = require("child_process");
44
44
  const prompts_1 = __importDefault(require("prompts"));
45
45
  const config_1 = require("../config");
46
+ const testDepth_1 = require("../testDepth");
47
+ const depth_1 = require("./depth");
46
48
  const captureMerge_1 = require("../captureMerge");
47
49
  const map_1 = require("./map");
48
50
  const ingest_1 = require("./ingest");
@@ -51,6 +53,7 @@ const diff_1 = require("./diff");
51
53
  const aom_1 = require("../aom");
52
54
  const emit_1 = require("./emit");
53
55
  const ingest_2 = require("../ingest");
56
+ const exercised_1 = require("../exercised");
54
57
  const summary_1 = require("./summary");
55
58
  /**
56
59
  * `ia-qa-heal run [--yes] [--no-verify] [--locators]` — the whole loop as one verb:
@@ -96,7 +99,12 @@ async function runRun(args) {
96
99
  if (code !== 0) {
97
100
  console.warn(`⚠ Test command exited ${code}. Continuing — a red suite is often exactly the drift this loop exists to diagnose.`);
98
101
  }
99
- (0, captureMerge_1.mergeCapturesAnnounced)();
102
+ const merged = (0, captureMerge_1.mergeCapturesAnnounced)();
103
+ // The one moment this observation exists. `merged.pages` is the suite's own account of
104
+ // where it went — not the pages someone configured, not the pages a contract is held
105
+ // for. Recorded here and nowhere else: the `map` fallback below visits pages because
106
+ // they were declared, which is a different fact and must never be written to this file.
107
+ recordExercised(merged?.pages ?? [], code, config.testCommand);
100
108
  }
101
109
  else {
102
110
  console.log('\nNo "testCommand" in .ia-qa/config.json — mapping with `map` instead.');
@@ -162,6 +170,8 @@ async function runRun(args) {
162
170
  (0, diff_1.printAggregate)(aggregate, reports, base, current, usage);
163
171
  (0, diff_1.printDepthUnmeasured)(aggregate.depthUnmeasured);
164
172
  (0, diff_1.printBindingCoverage)(aggregate.bindingCoverage);
173
+ aggregate.testDepth = (0, testDepth_1.readTestDepth)(current, path.join(current, config_1.RESOLVED_DIRNAME));
174
+ (0, depth_1.printTestDepth)(aggregate.testDepth);
165
175
  // Printed here for the same reason `diff` prints it: when a group is held out, pages
166
176
  // change verdict. A verdict that moved without a line saying why is the silent
167
177
  // behaviour this package treats as a defect.
@@ -323,6 +333,21 @@ async function runRun(args) {
323
333
  (0, summary_1.summaryLine)('run', 'info', `healed · verify skipped (${v.reason})`, repParts);
324
334
  }
325
335
  }
336
+ /**
337
+ * Persist what the suite actually visited, when there is something to persist.
338
+ *
339
+ * **An empty capture is not an empty visit.** No shard means the capture hook never fired —
340
+ * an uninstrumented suite, a crash before the first page, a `testCommand` that runs
341
+ * something else entirely. Writing `visited: []` there would put "this suite tests nothing"
342
+ * on disk as an observation, and every reader downstream would repeat it. No record at all
343
+ * is the honest state: a consumer then says *no measurement* and names the remedy, which is
344
+ * a different sentence with a different fix.
345
+ */
346
+ function recordExercised(pages, suiteExitCode, testCommand) {
347
+ if (pages.length === 0)
348
+ return;
349
+ (0, exercised_1.saveExercised)({ visited: pages, suiteExitCode, testCommand });
350
+ }
326
351
  /**
327
352
  * Re-run the user's suite to confirm the rewrite is green. Skipped — with a
328
353
  * reason the report surfaces — when there is nothing to verify (`--no-verify`, no
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Which pages the suite actually walked — the one observation nothing kept.
3
+ *
4
+ * `run` with capture on re-captures only the pages the suite exercised; the rest keep the
5
+ * baseline's `capturedAt` and are excluded from the verdict as `stale`. That distinction
6
+ * is computed on every run, printed as the live-coverage line, and then thrown away.
7
+ *
8
+ * It is the only evidence on disk that answers *"what does this suite test?"*. Everything
9
+ * else in `.ia-qa/` answers a weaker question: a contract in `mapping/` exists because
10
+ * somebody wrote a page into `config.pages` and ran `map`, which proves an intention, and
11
+ * `usage.json` proves a suite *mentions* a string. Neither is a test having visited a page,
12
+ * and reading either as coverage is how a confident, false number ships.
13
+ *
14
+ * So this record is written **only** by the capture-during-run path. The `map` fallback in
15
+ * `run` visits pages because they were configured, not because a test drove there; stamping
16
+ * its result here would be exactly the declaration-read-as-observation this file exists to
17
+ * prevent.
18
+ *
19
+ * It is underscore-prefixed on purpose: every consumer that enumerates contracts (including
20
+ * `healingLink.ts` in `@ia-qa/qa-discovery`) already filters `_`-prefixed files out, so the
21
+ * record is invisible to page listings without a line of change anywhere.
22
+ */
23
+ export declare const EXERCISED_FILENAME = "_exercised.json";
24
+ export declare const EXERCISED_SCHEMA = "ia-qa-exercised@1";
25
+ export interface ExercisedRecord {
26
+ schema: typeof EXERCISED_SCHEMA;
27
+ recordedAt: string;
28
+ /** Pages the suite loaded during this run. Observed, never declared. */
29
+ visited: string[];
30
+ /**
31
+ * Pages a contract is held for that this run never reached. Not a verdict — the suite may
32
+ * cover them through a project or tag that did not run here.
33
+ */
34
+ notVisited: string[];
35
+ /**
36
+ * The suite's exit code. A red suite still tells you which pages it reached, but the
37
+ * number travels with the record: a run that died on its third spec visited three pages
38
+ * and covers nothing.
39
+ */
40
+ suiteExitCode: number | null;
41
+ testCommand?: string;
42
+ commit?: string;
43
+ branch?: string;
44
+ }
45
+ export declare function exercisedPath(dir?: string): string;
46
+ /** Contract files in a mapping directory. `_`-prefixed entries are indexes, not pages. */
47
+ export declare function contractPageNames(dir?: string): string[];
48
+ export interface RecordExercisedInput {
49
+ /** Page names the capture merge produced — the suite's own account of where it went. */
50
+ visited: string[];
51
+ suiteExitCode: number | null;
52
+ testCommand?: string;
53
+ }
54
+ /**
55
+ * Write the record. Returns the path, or `null` when it could not be written.
56
+ *
57
+ * Never throws: this is metadata stamped beside a verdict that has already been decided,
58
+ * and a full disk must not turn a PASS into a crash — the same rule `history.ts` follows
59
+ * for the same reason.
60
+ */
61
+ export declare function saveExercised(input: RecordExercisedInput, dir?: string): string | null;
62
+ /**
63
+ * Read the record, or `null` when there is none.
64
+ *
65
+ * A missing record means **no measurement**, never zero coverage, and every reader owes
66
+ * that distinction to its user: "your suite visits no page" and "nobody has watched your
67
+ * suite run" are different sentences with different remedies.
68
+ */
69
+ export declare function loadExercised(dir?: string): ExercisedRecord | null;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.EXERCISED_SCHEMA = exports.EXERCISED_FILENAME = void 0;
37
+ exports.exercisedPath = exercisedPath;
38
+ exports.contractPageNames = contractPageNames;
39
+ exports.saveExercised = saveExercised;
40
+ exports.loadExercised = loadExercised;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const config_1 = require("./config");
44
+ const history_1 = require("./history");
45
+ /**
46
+ * Which pages the suite actually walked — the one observation nothing kept.
47
+ *
48
+ * `run` with capture on re-captures only the pages the suite exercised; the rest keep the
49
+ * baseline's `capturedAt` and are excluded from the verdict as `stale`. That distinction
50
+ * is computed on every run, printed as the live-coverage line, and then thrown away.
51
+ *
52
+ * It is the only evidence on disk that answers *"what does this suite test?"*. Everything
53
+ * else in `.ia-qa/` answers a weaker question: a contract in `mapping/` exists because
54
+ * somebody wrote a page into `config.pages` and ran `map`, which proves an intention, and
55
+ * `usage.json` proves a suite *mentions* a string. Neither is a test having visited a page,
56
+ * and reading either as coverage is how a confident, false number ships.
57
+ *
58
+ * So this record is written **only** by the capture-during-run path. The `map` fallback in
59
+ * `run` visits pages because they were configured, not because a test drove there; stamping
60
+ * its result here would be exactly the declaration-read-as-observation this file exists to
61
+ * prevent.
62
+ *
63
+ * It is underscore-prefixed on purpose: every consumer that enumerates contracts (including
64
+ * `healingLink.ts` in `@ia-qa/qa-discovery`) already filters `_`-prefixed files out, so the
65
+ * record is invisible to page listings without a line of change anywhere.
66
+ */
67
+ exports.EXERCISED_FILENAME = '_exercised.json';
68
+ exports.EXERCISED_SCHEMA = 'ia-qa-exercised@1';
69
+ function exercisedPath(dir = (0, config_1.mappingDir)()) {
70
+ return path.join(dir, exports.EXERCISED_FILENAME);
71
+ }
72
+ /** Contract files in a mapping directory. `_`-prefixed entries are indexes, not pages. */
73
+ function contractPageNames(dir = (0, config_1.mappingDir)()) {
74
+ if (!fs.existsSync(dir))
75
+ return [];
76
+ try {
77
+ return fs
78
+ .readdirSync(dir)
79
+ .filter((e) => e.endsWith('.json') && !e.startsWith('_'))
80
+ .map((e) => e.slice(0, -'.json'.length))
81
+ .sort();
82
+ }
83
+ catch {
84
+ return [];
85
+ }
86
+ }
87
+ /**
88
+ * Write the record. Returns the path, or `null` when it could not be written.
89
+ *
90
+ * Never throws: this is metadata stamped beside a verdict that has already been decided,
91
+ * and a full disk must not turn a PASS into a crash — the same rule `history.ts` follows
92
+ * for the same reason.
93
+ */
94
+ function saveExercised(input, dir = (0, config_1.mappingDir)()) {
95
+ try {
96
+ const visited = Array.from(new Set(input.visited)).sort();
97
+ const seen = new Set(visited);
98
+ const record = {
99
+ schema: exports.EXERCISED_SCHEMA,
100
+ recordedAt: new Date().toISOString(),
101
+ visited,
102
+ notVisited: contractPageNames(dir).filter((p) => !seen.has(p)),
103
+ suiteExitCode: input.suiteExitCode,
104
+ ...(input.testCommand ? { testCommand: input.testCommand } : {}),
105
+ ...(0, history_1.gitStamp)(),
106
+ };
107
+ const file = exercisedPath(dir);
108
+ fs.mkdirSync(path.dirname(file), { recursive: true });
109
+ fs.writeFileSync(file, JSON.stringify(record, null, 2) + '\n', 'utf8');
110
+ return file;
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ /**
117
+ * Read the record, or `null` when there is none.
118
+ *
119
+ * A missing record means **no measurement**, never zero coverage, and every reader owes
120
+ * that distinction to its user: "your suite visits no page" and "nobody has watched your
121
+ * suite run" are different sentences with different remedies.
122
+ */
123
+ function loadExercised(dir = (0, config_1.mappingDir)()) {
124
+ const file = exercisedPath(dir);
125
+ if (!fs.existsSync(file))
126
+ return null;
127
+ try {
128
+ const raw = JSON.parse(fs.readFileSync(file, 'utf8'));
129
+ if (!raw || !Array.isArray(raw.visited))
130
+ return null;
131
+ if (!Array.isArray(raw.notVisited))
132
+ raw.notVisited = [];
133
+ return raw;
134
+ }
135
+ catch {
136
+ return null;
137
+ }
138
+ }
139
+ //# sourceMappingURL=exercised.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exercised.js","sourceRoot":"","sources":["../src/exercised.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,11 @@ export type { CrawlOptions } from './crawl';
18
18
  export type { PageNameResolution } from './pageName';
19
19
  export { scanText, ingestPaths, saveUsage, loadUsage, usageFiles, usagePath } from './ingest';
20
20
  export type { Usage, SelectorSite, SelectorShape } from './ingest';
21
+ export { loadExercised, exercisedPath, contractPageNames, EXERCISED_FILENAME } from './exercised';
22
+ export type { ExercisedRecord } from './exercised';
23
+ export { computeTestDepth, computePageDepth, collectUnattributable, readTestDepth } from './testDepth';
24
+ export { globToRegex } from './volatile';
25
+ export type { TestDepthReport, PageDepth, UnattributableSite } from './testDepth';
21
26
  export { mergeCaptures, unionElements, captureDir, CAPTURE_DIRNAME } from './captureMerge';
22
27
  export type { CaptureShard, CaptureShardPage, MergeResult } from './captureMerge';
23
28
  export { launchBrowser } from './launcher';
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.layoutPath = exports.layoutDir = exports.resolveSecret = exports.loadConfig = exports.replaceQuoted = exports.collectFiles = exports.applyRewrites = exports.computeRewrites = exports.launchBrowser = exports.CAPTURE_DIRNAME = exports.captureDir = exports.unionElements = exports.mergeCaptures = exports.usagePath = exports.usageFiles = exports.loadUsage = exports.saveUsage = exports.ingestPaths = exports.scanText = exports.crawlApp = exports.sitemapsFromRobots = exports.isSitemapIndex = exports.extractLocs = exports.discoverFromSitemap = exports.UNSAFE_URL_RE = exports.mergePages = exports.toCandidate = exports.normalizedPath = exports.isSafeCandidateUrl = exports.resolvePageName = exports.pageNameFromUrl = exports.mapUrl = exports.markdownPath = exports.saveMarkdown = exports.renderPageContract = exports.saveMapping = exports.loadMapping = exports.extractInteractiveElements = exports.renderModelList = exports.defaultKeyEnv = exports.findProvider = exports.AI_PROVIDERS = exports.parseModelJson = exports.buildPrompt = exports.prefilter = exports.aiResolve = exports.createAiResolver = exports.llmResolverStub = exports.aiFill = exports.aiClick = void 0;
4
- exports.NAVIGATION_SVG_FILENAME = exports.NAVIGATION_FILENAME = exports.OVERVIEW_FILENAME = exports.navigationSvgPath = exports.navigationPath = exports.overviewPath = exports.writeOverview = exports.navigationGraph = exports.layoutGraph = exports.renderNavigationSvg = exports.renderNavigation = exports.renderOverview = exports.buildOverview = exports.minPagesForLayout = exports.stripLayoutFromPages = exports.extractLayout = exports.LAYOUT_DIRNAME = void 0;
3
+ exports.CAPTURE_DIRNAME = exports.captureDir = exports.unionElements = exports.mergeCaptures = exports.globToRegex = exports.readTestDepth = exports.collectUnattributable = exports.computePageDepth = exports.computeTestDepth = exports.EXERCISED_FILENAME = exports.contractPageNames = exports.exercisedPath = exports.loadExercised = exports.usagePath = exports.usageFiles = exports.loadUsage = exports.saveUsage = exports.ingestPaths = exports.scanText = exports.crawlApp = exports.sitemapsFromRobots = exports.isSitemapIndex = exports.extractLocs = exports.discoverFromSitemap = exports.UNSAFE_URL_RE = exports.mergePages = exports.toCandidate = exports.normalizedPath = exports.isSafeCandidateUrl = exports.resolvePageName = exports.pageNameFromUrl = exports.mapUrl = exports.markdownPath = exports.saveMarkdown = exports.renderPageContract = exports.saveMapping = exports.loadMapping = exports.extractInteractiveElements = exports.renderModelList = exports.defaultKeyEnv = exports.findProvider = exports.AI_PROVIDERS = exports.parseModelJson = exports.buildPrompt = exports.prefilter = exports.aiResolve = exports.createAiResolver = exports.llmResolverStub = exports.aiFill = exports.aiClick = void 0;
4
+ exports.NAVIGATION_SVG_FILENAME = exports.NAVIGATION_FILENAME = exports.OVERVIEW_FILENAME = exports.navigationSvgPath = exports.navigationPath = exports.overviewPath = exports.writeOverview = exports.navigationGraph = exports.layoutGraph = exports.renderNavigationSvg = exports.renderNavigation = exports.renderOverview = exports.buildOverview = exports.minPagesForLayout = exports.stripLayoutFromPages = exports.extractLayout = exports.LAYOUT_DIRNAME = exports.layoutPath = exports.layoutDir = exports.resolveSecret = exports.loadConfig = exports.replaceQuoted = exports.collectFiles = exports.applyRewrites = exports.computeRewrites = exports.launchBrowser = void 0;
5
5
  var healer_1 = require("./playwright/healer");
6
6
  Object.defineProperty(exports, "aiClick", { enumerable: true, get: function () { return healer_1.aiClick; } });
7
7
  Object.defineProperty(exports, "aiFill", { enumerable: true, get: function () { return healer_1.aiFill; } });
@@ -50,6 +50,23 @@ Object.defineProperty(exports, "saveUsage", { enumerable: true, get: function ()
50
50
  Object.defineProperty(exports, "loadUsage", { enumerable: true, get: function () { return ingest_1.loadUsage; } });
51
51
  Object.defineProperty(exports, "usageFiles", { enumerable: true, get: function () { return ingest_1.usageFiles; } });
52
52
  Object.defineProperty(exports, "usagePath", { enumerable: true, get: function () { return ingest_1.usagePath; } });
53
+ // The two halves `@ia-qa/qa-discovery` needs to build a coverage map, exported so it
54
+ // computes them with THIS implementation rather than a second one: the map and the healing
55
+ // summary must never be able to disagree about the same files on the same disk.
56
+ var exercised_1 = require("./exercised");
57
+ Object.defineProperty(exports, "loadExercised", { enumerable: true, get: function () { return exercised_1.loadExercised; } });
58
+ Object.defineProperty(exports, "exercisedPath", { enumerable: true, get: function () { return exercised_1.exercisedPath; } });
59
+ Object.defineProperty(exports, "contractPageNames", { enumerable: true, get: function () { return exercised_1.contractPageNames; } });
60
+ Object.defineProperty(exports, "EXERCISED_FILENAME", { enumerable: true, get: function () { return exercised_1.EXERCISED_FILENAME; } });
61
+ var testDepth_1 = require("./testDepth");
62
+ Object.defineProperty(exports, "computeTestDepth", { enumerable: true, get: function () { return testDepth_1.computeTestDepth; } });
63
+ Object.defineProperty(exports, "computePageDepth", { enumerable: true, get: function () { return testDepth_1.computePageDepth; } });
64
+ Object.defineProperty(exports, "collectUnattributable", { enumerable: true, get: function () { return testDepth_1.collectUnattributable; } });
65
+ Object.defineProperty(exports, "readTestDepth", { enumerable: true, get: function () { return testDepth_1.readTestDepth; } });
66
+ // One glob dialect across the ecosystem. `volatile`, `nameMask` and discovery's scope
67
+ // declaration must accept the same patterns, or a user learns three.
68
+ var volatile_1 = require("./volatile");
69
+ Object.defineProperty(exports, "globToRegex", { enumerable: true, get: function () { return volatile_1.globToRegex; } });
53
70
  var captureMerge_1 = require("./captureMerge");
54
71
  Object.defineProperty(exports, "mergeCaptures", { enumerable: true, get: function () { return captureMerge_1.mergeCaptures; } });
55
72
  Object.defineProperty(exports, "unionElements", { enumerable: true, get: function () { return captureMerge_1.unionElements; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,8CAAyF;AAAhF,iGAAA,OAAO,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAE3D,0CAAkF;AAAzE,qGAAA,SAAS,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,0GAAA,cAAc,OAAA;AAE1D,sCAAyF;AAAhF,sGAAA,YAAY,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,yGAAA,eAAe,OAAA;AAEnE,6BAA6E;AAApE,iHAAA,0BAA0B,OAAA;AAAE,kGAAA,WAAW,OAAA;AAAE,kGAAA,WAAW,OAAA;AAE7D,uCAA4E;AAAnE,8GAAA,kBAAkB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AACvD,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAChC,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,6CAM4B;AAL1B,4GAAA,kBAAkB,OAAA;AAClB,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,oGAAA,UAAU,OAAA;AACV,uGAAA,aAAa,OAAA;AAGf,+CAK6B;AAJ3B,8GAAA,mBAAmB,OAAA;AACnB,sGAAA,WAAW,OAAA;AACX,yGAAA,cAAc,OAAA;AACd,6GAAA,kBAAkB,OAAA;AAGpB,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAGjB,mCAA8F;AAArF,kGAAA,QAAQ,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAE3E,+CAA2F;AAAlF,6GAAA,aAAa,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,+GAAA,eAAe,OAAA;AAElE,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAGtB,yCAA0F;AAAjF,4GAAA,eAAe,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AACpE,mCAA4F;AAAnF,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAEzE,mCAAkF;AAAzE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAE/D,uCAcoB;AAblB,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AACd,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,mHAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,8CAAyF;AAAhF,iGAAA,OAAO,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAE3D,0CAAkF;AAAzE,qGAAA,SAAS,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,0GAAA,cAAc,OAAA;AAE1D,sCAAyF;AAAhF,sGAAA,YAAY,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,yGAAA,eAAe,OAAA;AAEnE,6BAA6E;AAApE,iHAAA,0BAA0B,OAAA;AAAE,kGAAA,WAAW,OAAA;AAAE,kGAAA,WAAW,OAAA;AAE7D,uCAA4E;AAAnE,8GAAA,kBAAkB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AACvD,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAChC,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,6CAM4B;AAL1B,4GAAA,kBAAkB,OAAA;AAClB,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,oGAAA,UAAU,OAAA;AACV,uGAAA,aAAa,OAAA;AAGf,+CAK6B;AAJ3B,8GAAA,mBAAmB,OAAA;AACnB,sGAAA,WAAW,OAAA;AACX,yGAAA,cAAc,OAAA;AACd,6GAAA,kBAAkB,OAAA;AAGpB,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAGjB,mCAA8F;AAArF,kGAAA,QAAQ,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAE3E,qFAAqF;AACrF,2FAA2F;AAC3F,gFAAgF;AAChF,yCAAkG;AAAzF,0GAAA,aAAa,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAE5E,yCAAuG;AAA9F,6GAAA,gBAAgB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,0GAAA,aAAa,OAAA;AACjF,sFAAsF;AACtF,qEAAqE;AACrE,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AAEpB,+CAA2F;AAAlF,6GAAA,aAAa,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,+GAAA,eAAe,OAAA;AAElE,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAGtB,yCAA0F;AAAjF,4GAAA,eAAe,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AACpE,mCAA4F;AAAnF,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAEzE,mCAAkF;AAAzE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAE/D,uCAcoB;AAblB,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AACd,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,mHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,88 @@
1
+ import type { PageMapping } from './aom';
2
+ import type { Usage } from './ingest';
3
+ import type { PageResolution } from './resolution';
4
+ /**
5
+ * How much of a page's contract the suite actually names.
6
+ *
7
+ * Reach — *did a test ever load this page* — is `exercised.ts`. This is the other axis:
8
+ * inside a page, of the elements the contract holds, how many does the suite designate at
9
+ * all? A page can be visited by twenty specs that only click one button.
10
+ *
11
+ * Computed from files this package already writes, so it costs nothing and needs no run:
12
+ * `mapping/*.json` for the denominator, `usage.json` for what the sources name, and
13
+ * `mapping/_resolved/` to bridge the two when a suite is written in CSS — a Page Object
14
+ * holding `.btn-primary` and a contract holding `#pay-now` describe the same button, and
15
+ * only a browser could ever have said so. That is what a `bound` binding records.
16
+ *
17
+ * **Two limits ship with every number here, and neither is a footnote.**
18
+ *
19
+ * *Naming is not asserting.* A test that clicks a button names it without checking
20
+ * anything. Nothing on disk distinguishes the two, so this file never says "tested" — it
21
+ * says "named", and every renderer must keep that word.
22
+ *
23
+ * *The denominator moves with exploration.* A contract captured without `--deep` holds the
24
+ * loaded state only, so the same suite scores higher against it than against the real page.
25
+ * `exploredDepth` travels with the page for exactly this reason.
26
+ */
27
+ export interface PageDepth {
28
+ page: string;
29
+ /** Interactive elements the contract holds. */
30
+ elements: number;
31
+ /** Of those, how many at least one test names. */
32
+ named: number;
33
+ /** Test files that name something on this page, sorted. */
34
+ files: string[];
35
+ /** Clicks deep the contract was explored. Absent means the loaded state only. */
36
+ exploredDepth?: number;
37
+ }
38
+ /**
39
+ * A name-anchored locator that cannot be credited to any page.
40
+ *
41
+ * `getByText`, `cy.contains`, `getByTitle`, `getByAltText` name a **string, not an
42
+ * element** — the contract holds interactive elements only, so a match proves nothing about
43
+ * which element the test meant. It is the same reasoning that forbids `fix` from rewriting
44
+ * them and `audit` from judging them, and the three must stay consistent.
45
+ *
46
+ * It is a reported number rather than a silent exclusion because a suite written entirely
47
+ * this way would otherwise score near-zero depth and read as untested. The count says *why*
48
+ * the depth is unmeasurable, which is a different problem with a different fix.
49
+ */
50
+ export interface UnattributableSite {
51
+ text: string;
52
+ file: string;
53
+ line: number;
54
+ shape: string;
55
+ }
56
+ export interface TestDepthReport {
57
+ /**
58
+ * False when there is no inventory to measure against. Every reader must render this as
59
+ * *not measured* and never as zero — `ingest` may simply never have run.
60
+ */
61
+ measurable: boolean;
62
+ pages: PageDepth[];
63
+ totals: {
64
+ elements: number;
65
+ named: number;
66
+ pages: number;
67
+ };
68
+ unattributable: UnattributableSite[];
69
+ /** Pages whose contract records no exploration — their denominator is the loaded state. */
70
+ shallowPages: number;
71
+ }
72
+ export declare function computePageDepth(mapping: PageMapping, usage: Usage | null, resolution: PageResolution | null): PageDepth;
73
+ /**
74
+ * Which literals in the inventory cannot be attributed to any element, deduplicated by
75
+ * source position — one line of a test file is one finding, however many pages it fails to
76
+ * match.
77
+ */
78
+ export declare function collectUnattributable(usage: Usage | null): UnattributableSite[];
79
+ export declare function computeTestDepth(mappings: PageMapping[], usage: Usage | null, resolutions: Map<string, PageResolution>): TestDepthReport;
80
+ /**
81
+ * The same computation, reading `.ia-qa/` from disk.
82
+ *
83
+ * Kept apart from `computeTestDepth` so the rules above stay testable without a filesystem,
84
+ * and exported so `@ia-qa/qa-discovery` computes depth with **this** implementation rather
85
+ * than a second one — the coverage map and the healing summary must never be able to
86
+ * disagree about the same two files.
87
+ */
88
+ export declare function readTestDepth(dir?: string, resolved?: string): TestDepthReport;