@ia-qa/pal 0.5.0 → 0.8.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.
- package/README.md +56 -4
- package/TUTORIAL.md +194 -2
- package/dist/cli/index.js +30 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/htmlReport.js +20 -5
- package/dist/htmlReport.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/plan.d.ts +17 -0
- package/dist/plan.js +21 -1
- package/dist/plan.js.map +1 -1
- package/dist/rebaseline.d.ts +66 -0
- package/dist/rebaseline.js +167 -0
- package/dist/rebaseline.js.map +1 -0
- package/dist/report.d.ts +25 -0
- package/dist/report.js +106 -6
- package/dist/report.js.map +1 -1
- package/dist/run.d.ts +4 -0
- package/dist/run.js +22 -3
- package/dist/run.js.map +1 -1
- package/dist/setup.js +17 -1
- package/dist/setup.js.map +1 -1
- package/dist/suite.d.ts +46 -0
- package/dist/suite.js +95 -2
- package/dist/suite.js.map +1 -1
- package/dist/tour.d.ts +20 -1
- package/dist/tour.js +36 -9
- package/dist/tour.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_BATCH = exports.exitCodeFor = exports.splitFindings = exports.estimate = exports.needingDepth = exports.selectBatch = exports.LOGIN_COMMAND = exports.runSetup = exports.moodOf = exports.readHistory = exports.appendHistory = exports.reportFile = exports.writeHtmlReport = exports.renderHtmlReport = exports.renderReport = exports.TourAlreadyRunning = exports.activeRun = exports.readRun = exports.startBackground = exports.trackedTour = exports.runTour = void 0;
|
|
3
|
+
exports.CAPTURE_IMPORT = exports.captureHints = exports.detectFrameworks = exports.suiteCommand = exports.reasonText = exports.renderRebaseline = exports.applyRebaseline = exports.rebaselinePlan = exports.DEFAULT_BATCH = exports.exitCodeFor = exports.splitFindings = exports.estimate = exports.needingDepth = exports.selectBatch = exports.LOGIN_COMMAND = exports.runSetup = exports.moodOf = exports.readHistory = exports.appendHistory = exports.reportFile = exports.writeHtmlReport = exports.renderHtmlReport = exports.renderReport = exports.TourAlreadyRunning = exports.activeRun = exports.readRun = exports.startBackground = exports.trackedTour = exports.runTour = void 0;
|
|
4
4
|
var tour_1 = require("./tour");
|
|
5
5
|
Object.defineProperty(exports, "runTour", { enumerable: true, get: function () { return tour_1.runTour; } });
|
|
6
6
|
var run_1 = require("./run");
|
|
@@ -29,4 +29,15 @@ Object.defineProperty(exports, "estimate", { enumerable: true, get: function ()
|
|
|
29
29
|
Object.defineProperty(exports, "splitFindings", { enumerable: true, get: function () { return plan_1.splitFindings; } });
|
|
30
30
|
Object.defineProperty(exports, "exitCodeFor", { enumerable: true, get: function () { return plan_1.exitCodeFor; } });
|
|
31
31
|
Object.defineProperty(exports, "DEFAULT_BATCH", { enumerable: true, get: function () { return plan_1.DEFAULT_BATCH; } });
|
|
32
|
+
var rebaseline_1 = require("./rebaseline");
|
|
33
|
+
Object.defineProperty(exports, "rebaselinePlan", { enumerable: true, get: function () { return rebaseline_1.rebaselinePlan; } });
|
|
34
|
+
Object.defineProperty(exports, "applyRebaseline", { enumerable: true, get: function () { return rebaseline_1.applyRebaseline; } });
|
|
35
|
+
Object.defineProperty(exports, "renderRebaseline", { enumerable: true, get: function () { return rebaseline_1.renderRebaseline; } });
|
|
36
|
+
Object.defineProperty(exports, "reasonText", { enumerable: true, get: function () { return rebaseline_1.reasonText; } });
|
|
37
|
+
var suite_1 = require("./suite");
|
|
38
|
+
Object.defineProperty(exports, "suiteCommand", { enumerable: true, get: function () { return suite_1.suiteCommand; } });
|
|
39
|
+
var suite_2 = require("./suite");
|
|
40
|
+
Object.defineProperty(exports, "detectFrameworks", { enumerable: true, get: function () { return suite_2.detectFrameworks; } });
|
|
41
|
+
Object.defineProperty(exports, "captureHints", { enumerable: true, get: function () { return suite_2.captureHints; } });
|
|
42
|
+
Object.defineProperty(exports, "CAPTURE_IMPORT", { enumerable: true, get: function () { return suite_2.CAPTURE_IMPORT; } });
|
|
32
43
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAEhB,6BAA6F;AAApF,kGAAA,WAAW,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,gGAAA,SAAS,OAAA;AAAE,yGAAA,kBAAkB,OAAA;AAG7E,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AACrB,2CAA6E;AAApE,8GAAA,gBAAgB,OAAA;AAAE,6GAAA,eAAe,OAAA;AAAE,wGAAA,UAAU,OAAA;AACtD,qCAA+D;AAAtD,wGAAA,aAAa,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,iGAAA,MAAM,OAAA;AAE3C,iCAAkD;AAAzC,iGAAA,QAAQ,OAAA;AAAE,sGAAA,aAAa,OAAA;AAEhC,+BAAwG;AAA/F,mGAAA,WAAW,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,mGAAA,WAAW,OAAA;AAAE,qGAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAEhB,6BAA6F;AAApF,kGAAA,WAAW,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,gGAAA,SAAS,OAAA;AAAE,yGAAA,kBAAkB,OAAA;AAG7E,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AACrB,2CAA6E;AAApE,8GAAA,gBAAgB,OAAA;AAAE,6GAAA,eAAe,OAAA;AAAE,wGAAA,UAAU,OAAA;AACtD,qCAA+D;AAAtD,wGAAA,aAAa,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,iGAAA,MAAM,OAAA;AAE3C,iCAAkD;AAAzC,iGAAA,QAAQ,OAAA;AAAE,sGAAA,aAAa,OAAA;AAEhC,+BAAwG;AAA/F,mGAAA,WAAW,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,mGAAA,WAAW,OAAA;AAAE,qGAAA,aAAa,OAAA;AAEvF,2CAA6F;AAApF,4GAAA,cAAc,OAAA;AAAE,6GAAA,eAAe,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,wGAAA,UAAU,OAAA;AAEtE,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAyE;AAAhE,yGAAA,gBAAgB,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare const TOOLS: ({
|
|
|
16
16
|
more?: undefined;
|
|
17
17
|
suite?: undefined;
|
|
18
18
|
strict?: undefined;
|
|
19
|
+
all_contracts?: undefined;
|
|
19
20
|
batch?: undefined;
|
|
20
21
|
};
|
|
21
22
|
required?: undefined;
|
|
@@ -53,6 +54,7 @@ export declare const TOOLS: ({
|
|
|
53
54
|
more?: undefined;
|
|
54
55
|
suite?: undefined;
|
|
55
56
|
strict?: undefined;
|
|
57
|
+
all_contracts?: undefined;
|
|
56
58
|
batch?: undefined;
|
|
57
59
|
};
|
|
58
60
|
required: string[];
|
|
@@ -75,6 +77,10 @@ export declare const TOOLS: ({
|
|
|
75
77
|
type: string;
|
|
76
78
|
description: string;
|
|
77
79
|
};
|
|
80
|
+
all_contracts: {
|
|
81
|
+
type: string;
|
|
82
|
+
description: string;
|
|
83
|
+
};
|
|
78
84
|
batch: {
|
|
79
85
|
type: string;
|
|
80
86
|
description: string;
|
package/dist/mcp/server.js
CHANGED
|
@@ -97,6 +97,7 @@ exports.TOOLS = [
|
|
|
97
97
|
more: { type: 'boolean', description: 'Explore the next batch in depth instead of a regression tour. Refused after a BLOCK.' },
|
|
98
98
|
suite: { type: 'boolean', description: 'Also run the test command from config.json once, with the capture hook, to learn which pages the suite never visits. It runs the human’s own suite on this machine — ask before setting it.' },
|
|
99
99
|
strict: { type: 'boolean', description: 'Also fail on drift behind interaction — elements reached only by clicking, which may depend on the data the click lands on.' },
|
|
100
|
+
all_contracts: { type: 'boolean', description: 'Judge every contract in .ia-qa/mapping/, not only the pages the config declares. Default false: contracts left by other applications are reported as not measured, never folded into the verdict.' },
|
|
100
101
|
batch: { type: 'integer', description: 'Pages per depth batch (default 10).' },
|
|
101
102
|
project_dir: PROJECT_DIR,
|
|
102
103
|
},
|
|
@@ -158,7 +159,7 @@ async function callTool(name, args, root = process.cwd()) {
|
|
|
158
159
|
}
|
|
159
160
|
if (name === 'pal_tour') {
|
|
160
161
|
const batch = Number.isInteger(args.batch) && args.batch > 0 ? args.batch : undefined;
|
|
161
|
-
const started = (0, run_1.startBackground)(dir, { more: !!args.more, suite: !!args.suite, strict: !!args.strict, batch }, CLI_ENTRY);
|
|
162
|
+
const started = (0, run_1.startBackground)(dir, { more: !!args.more, suite: !!args.suite, strict: !!args.strict, allContracts: !!args.all_contracts, batch }, CLI_ENTRY);
|
|
162
163
|
return started.started
|
|
163
164
|
? { ...started, next: 'Call pal_status to follow it. A tour takes minutes.' }
|
|
164
165
|
: { ...started, ...(!config ? { next: 'Not set up: ask the human where the app lives and how it logs in, then call pal_setup.' } : {}) };
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -101,6 +101,23 @@ export declare function classifyDrift(reports: Array<{
|
|
|
101
101
|
rows: DriftRowLike[];
|
|
102
102
|
};
|
|
103
103
|
}>, viaOf: (page: string, row: DriftRowLike) => string[] | undefined, strict?: boolean, notRecaptured?: ReadonlySet<string>): DriftClass;
|
|
104
|
+
export type IncomparableReason = 'capture-state-unknown' | 'depth-mismatch';
|
|
105
|
+
export declare const INCOMPARABLE_TEXT: Record<IncomparableReason, string>;
|
|
106
|
+
/**
|
|
107
|
+
* Whether a baseline and a capture were taken in ways that cannot be compared — decided once, so
|
|
108
|
+
* the tour that points at `rebaseline` and `rebaseline` itself give the same reason for a page.
|
|
109
|
+
*
|
|
110
|
+
* Order matters: a contract written before capture fingerprints existed predates exploration
|
|
111
|
+
* depth too, so both are true of it and naming the fingerprint explains both. Depth alone is
|
|
112
|
+
* the narrower case — two contracts of the same era, explored differently.
|
|
113
|
+
*/
|
|
114
|
+
export declare function incomparableReason(baseline: {
|
|
115
|
+
captureState?: unknown;
|
|
116
|
+
exploredDepth?: number;
|
|
117
|
+
}, current: {
|
|
118
|
+
captureState?: unknown;
|
|
119
|
+
exploredDepth?: number;
|
|
120
|
+
}, depthMismatch: boolean): IncomparableReason | null;
|
|
104
121
|
/**
|
|
105
122
|
* 0 nothing to decide · 1 something broke or needs a decision · 2 could not answer.
|
|
106
123
|
* The same contract as `ia-qa-heal`: a warning never fails a build, and "could not answer" is
|
package/dist/plan.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_BATCH = void 0;
|
|
3
|
+
exports.INCOMPARABLE_TEXT = exports.DEFAULT_BATCH = void 0;
|
|
4
4
|
exports.selectBatch = selectBatch;
|
|
5
5
|
exports.needingDepth = needingDepth;
|
|
6
6
|
exports.estimate = estimate;
|
|
7
7
|
exports.splitFindings = splitFindings;
|
|
8
8
|
exports.carryKnown = carryKnown;
|
|
9
9
|
exports.classifyDrift = classifyDrift;
|
|
10
|
+
exports.incomparableReason = incomparableReason;
|
|
10
11
|
exports.exitCodeFor = exitCodeFor;
|
|
11
12
|
/**
|
|
12
13
|
* The decisions a tour makes, kept free of I/O so each one is tested without a browser.
|
|
@@ -121,6 +122,25 @@ function classifyDrift(reports, viaOf, strict = false, notRecaptured = new Set()
|
|
|
121
122
|
suitePages,
|
|
122
123
|
};
|
|
123
124
|
}
|
|
125
|
+
exports.INCOMPARABLE_TEXT = {
|
|
126
|
+
'capture-state-unknown': 'the baseline predates capture fingerprints — the two sides cannot be told apart',
|
|
127
|
+
'depth-mismatch': 'the baseline was explored to a different depth — revealed elements read as lost',
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Whether a baseline and a capture were taken in ways that cannot be compared — decided once, so
|
|
131
|
+
* the tour that points at `rebaseline` and `rebaseline` itself give the same reason for a page.
|
|
132
|
+
*
|
|
133
|
+
* Order matters: a contract written before capture fingerprints existed predates exploration
|
|
134
|
+
* depth too, so both are true of it and naming the fingerprint explains both. Depth alone is
|
|
135
|
+
* the narrower case — two contracts of the same era, explored differently.
|
|
136
|
+
*/
|
|
137
|
+
function incomparableReason(baseline, current, depthMismatch) {
|
|
138
|
+
if (baseline.captureState === undefined && current.captureState !== undefined)
|
|
139
|
+
return 'capture-state-unknown';
|
|
140
|
+
if (depthMismatch && (baseline.exploredDepth ?? 0) !== (current.exploredDepth ?? 0))
|
|
141
|
+
return 'depth-mismatch';
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
124
144
|
/**
|
|
125
145
|
* 0 nothing to decide · 1 something broke or needs a decision · 2 could not answer.
|
|
126
146
|
* The same contract as `ia-qa-heal`: a warning never fails a build, and "could not answer" is
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":";;;AAeA,kCAOC;AAED,oCAMC;AAqBD,4BAeC;AAmBD,sCAmBC;AAOD,gCAGC;AAgDD,sCA8BC;AAOD,kCAcC;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":";;;AAeA,kCAOC;AAED,oCAMC;AAqBD,4BAeC;AAmBD,sCAmBC;AAOD,gCAGC;AAgDD,sCA8BC;AAiBD,gDAQC;AAOD,kCAcC;AA5OD;;;;GAIG;AAEU,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC;;;;GAIG;AACH,SAAgB,WAAW,CACzB,KAAe,EACf,QAA6B,EAC7B,SAA2C,EAC3C,IAAY;IAEZ,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,YAAY,CAC1B,KAAe,EACf,QAA6B,EAC7B,SAA2C;IAE3C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAgBD;;;;GAIG;AACH,SAAgB,QAAQ,CACtB,SAAmB,EACnB,SAA2C,EAC3C,IAAsB;IAEtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,MAAM;QACN,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC;QAC7C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;QACxD,cAAc,EAAE,IAAI,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAcD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAAmB,EAAE,KAA0B;IAC3E,MAAM,KAAK,GAAG,CAAI,KAAU,EAAE,GAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,CAAI,EAAmC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjH,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC;IACxD,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QAC3D,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;QAC1B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;QAC9B,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;QAC1B,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QAC9D,UAAU,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,QAAkB,EAAE,SAA0B,EAAE,YAA6B;IACtG,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACtH,CAAC;AA8BD,MAAM,cAAc,GAAG,CAAC,GAAiB,EAAiC,EAAE,CAC1E,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAEpG;;;;;;;;;;;;;;GAcG;AACH,SAAgB,aAAa,CAC3B,OAAsG,EACtG,KAAgE,EAChE,MAAM,GAAG,KAAK,EACd,gBAAqC,IAAI,GAAG,EAAE;IAE9C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,iBAAiB,GAAmB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAmB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,YAAY,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,OAAO,GAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAChI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9F,MAAM;QACN,iBAAiB;QACjB,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC;AAIY,QAAA,iBAAiB,GAAuC;IACnE,uBAAuB,EAAE,iFAAiF;IAC1G,gBAAgB,EAAE,iFAAiF;CACpG,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,QAA4D,EAC5D,OAA2D,EAC3D,aAAsB;IAEtB,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,uBAAuB,CAAC;IAC9G,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC7G,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAO3B;IACC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replacing a baseline wholesale — the migration `accept` cannot be.
|
|
3
|
+
*
|
|
4
|
+
* `accept` answers "this change is intended"; it assumes the two sides are comparable. They are
|
|
5
|
+
* not on an old project: a baseline captured before exploration depth or capture state existed
|
|
6
|
+
* is compared against a capture that has both, and every revealed element reads as lost. The
|
|
7
|
+
* report says so, and the only remedy was to delete files by hand.
|
|
8
|
+
*
|
|
9
|
+
* So: a plan first, written by nobody. It says, page by page, what would be replaced — both
|
|
10
|
+
* moments, both depths, how many elements, and how many rows the comparison produced — and
|
|
11
|
+
* **nothing is written without `--yes`**. A preview that could write would be a preview nobody
|
|
12
|
+
* can trust. Promotion itself goes through `accept`, so the refusals that protect a baseline
|
|
13
|
+
* (a page the last tour could not re-capture, a page that is not configured) hold here too:
|
|
14
|
+
* this verb chooses *which* pages, never *how* a page is promoted.
|
|
15
|
+
*/
|
|
16
|
+
export type RebaselineReason = 'capture-state-unknown' | 'depth-mismatch' | 'drift' | 'not-in-baseline' | 'same-capture';
|
|
17
|
+
export interface RebaselinePage {
|
|
18
|
+
page: string;
|
|
19
|
+
reason: RebaselineReason;
|
|
20
|
+
baseline: {
|
|
21
|
+
capturedAt?: string;
|
|
22
|
+
elements: number;
|
|
23
|
+
depth: number;
|
|
24
|
+
} | null;
|
|
25
|
+
current: {
|
|
26
|
+
capturedAt?: string;
|
|
27
|
+
elements: number;
|
|
28
|
+
depth: number;
|
|
29
|
+
};
|
|
30
|
+
/** Rows the comparison produced, when the two sides could be compared at all. */
|
|
31
|
+
rows?: {
|
|
32
|
+
ok: number;
|
|
33
|
+
renamed: number;
|
|
34
|
+
lost: number;
|
|
35
|
+
ambiguous: number;
|
|
36
|
+
rebound: number;
|
|
37
|
+
added: number;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface RebaselinePlan {
|
|
41
|
+
pages: RebaselinePage[];
|
|
42
|
+
skipped: Array<{
|
|
43
|
+
page: string;
|
|
44
|
+
reason: string;
|
|
45
|
+
}>;
|
|
46
|
+
/** Written only after `applyRebaseline`. */
|
|
47
|
+
replaced?: string[];
|
|
48
|
+
refused?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare const reasonText: (reason: RebaselineReason) => string;
|
|
51
|
+
/**
|
|
52
|
+
* What a rebaseline would replace. Reads only; the row counts come from the same directory diff
|
|
53
|
+
* a tour uses, never from a comparison this file performs.
|
|
54
|
+
*/
|
|
55
|
+
export declare function rebaselinePlan(dirGiven: string, pagesGiven?: string[], opts?: {
|
|
56
|
+
all?: boolean;
|
|
57
|
+
}): RebaselinePlan;
|
|
58
|
+
/**
|
|
59
|
+
* Replace those baselines. Promotion goes through `accept`, so a page this verb should not be
|
|
60
|
+
* able to promote is still refused by the one place that decides that.
|
|
61
|
+
*/
|
|
62
|
+
export declare function applyRebaseline(dir: string, plan: RebaselinePlan): Promise<RebaselinePlan>;
|
|
63
|
+
/** The plan as a person reads it. Preview and result share it, so they cannot describe it differently. */
|
|
64
|
+
export declare function renderRebaseline(plan: RebaselinePlan, opts: {
|
|
65
|
+
applied: boolean;
|
|
66
|
+
}): string;
|
|
@@ -0,0 +1,167 @@
|
|
|
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.reasonText = void 0;
|
|
37
|
+
exports.rebaselinePlan = rebaselinePlan;
|
|
38
|
+
exports.applyRebaseline = applyRebaseline;
|
|
39
|
+
exports.renderRebaseline = renderRebaseline;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const self_healing_1 = require("@ia-qa/self-healing");
|
|
43
|
+
const run_1 = require("./run");
|
|
44
|
+
const accept_1 = require("./accept");
|
|
45
|
+
const plan_1 = require("./plan");
|
|
46
|
+
const REASONS = {
|
|
47
|
+
...plan_1.INCOMPARABLE_TEXT,
|
|
48
|
+
drift: 'the capture differs from the baseline',
|
|
49
|
+
'not-in-baseline': 'no baseline yet — this adds one',
|
|
50
|
+
'same-capture': 'already the latest capture',
|
|
51
|
+
};
|
|
52
|
+
const reasonText = (reason) => REASONS[reason];
|
|
53
|
+
exports.reasonText = reasonText;
|
|
54
|
+
function describe(m) {
|
|
55
|
+
return { capturedAt: m.capturedAt, elements: m.elements?.length ?? 0, depth: m.exploredDepth ?? 0 };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* What a rebaseline would replace. Reads only; the row counts come from the same directory diff
|
|
59
|
+
* a tour uses, never from a comparison this file performs.
|
|
60
|
+
*/
|
|
61
|
+
function rebaselinePlan(dirGiven, pagesGiven = [], opts = {}) {
|
|
62
|
+
const dir = path.resolve(dirGiven);
|
|
63
|
+
if (!fs.existsSync(path.join(dir, '.ia-qa', 'config.json'))) {
|
|
64
|
+
return { pages: [], skipped: [], refused: 'This project is not set up yet — there is no .ia-qa/config.json.' };
|
|
65
|
+
}
|
|
66
|
+
if ((0, run_1.activeRun)(dir))
|
|
67
|
+
return { pages: [], skipped: [], refused: 'A tour is running on this project — rebaseline after it finishes (ia-qa-pal status).' };
|
|
68
|
+
(0, self_healing_1.setBaseDir)(dir);
|
|
69
|
+
const configured = (0, self_healing_1.loadConfig)().pages.map((p) => p.name);
|
|
70
|
+
const wanted = pagesGiven.length > 0 ? pagesGiven : opts.all ? configured : [];
|
|
71
|
+
if (wanted.length === 0) {
|
|
72
|
+
return { pages: [], skipped: [], refused: 'Name the pages to rebaseline, or --all for every page your config declares.' };
|
|
73
|
+
}
|
|
74
|
+
const notRecaptured = new Set(((0, run_1.readRun)(dir)?.report?.pages.notMapped ?? []).map((m) => m.page));
|
|
75
|
+
const rowsByPage = new Map();
|
|
76
|
+
let depthMismatch = false;
|
|
77
|
+
try {
|
|
78
|
+
const { reports, aggregate } = (0, self_healing_1.dirDiffAggregate)((0, self_healing_1.baselineDir)(), (0, self_healing_1.mappingDir)(), { pages: configured });
|
|
79
|
+
depthMismatch = !!aggregate.depthMismatch;
|
|
80
|
+
for (const r of reports)
|
|
81
|
+
if (!r.isLayout)
|
|
82
|
+
rowsByPage.set(r.name, r.report.counts);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* nothing comparable on disk yet: the plan still describes both sides */
|
|
86
|
+
}
|
|
87
|
+
const pages = [];
|
|
88
|
+
const skipped = [];
|
|
89
|
+
for (const page of wanted) {
|
|
90
|
+
if (!configured.includes(page)) {
|
|
91
|
+
skipped.push({ page, reason: 'not a configured page' });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (notRecaptured.has(page)) {
|
|
95
|
+
skipped.push({ page, reason: 'the last tour could not re-capture it — rebaselining would promote an older capture; run a tour first' });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
let current;
|
|
99
|
+
try {
|
|
100
|
+
current = (0, self_healing_1.loadMapping)(page, (0, self_healing_1.mappingDir)());
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
skipped.push({ page, reason: 'no capture yet — run a tour first' });
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
let baseline = null;
|
|
107
|
+
try {
|
|
108
|
+
baseline = (0, self_healing_1.loadMapping)(page, (0, self_healing_1.baselineDir)());
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
/* not in the baseline yet */
|
|
112
|
+
}
|
|
113
|
+
if (baseline && baseline.capturedAt === current.capturedAt) {
|
|
114
|
+
skipped.push({ page, reason: REASONS['same-capture'] });
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const rows = rowsByPage.get(page);
|
|
118
|
+
const reason = !baseline ? 'not-in-baseline' : (0, plan_1.incomparableReason)(baseline, current, depthMismatch) ?? 'drift';
|
|
119
|
+
pages.push({ page, reason, baseline: baseline ? describe(baseline) : null, current: describe(current), ...(rows ? { rows } : {}) });
|
|
120
|
+
}
|
|
121
|
+
return { pages, skipped };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Replace those baselines. Promotion goes through `accept`, so a page this verb should not be
|
|
125
|
+
* able to promote is still refused by the one place that decides that.
|
|
126
|
+
*/
|
|
127
|
+
async function applyRebaseline(dir, plan) {
|
|
128
|
+
if (plan.refused || plan.pages.length === 0)
|
|
129
|
+
return plan;
|
|
130
|
+
const outcome = await (0, accept_1.acceptPages)(dir, plan.pages.map((p) => p.page));
|
|
131
|
+
return {
|
|
132
|
+
...plan,
|
|
133
|
+
replaced: outcome.accepted,
|
|
134
|
+
skipped: [...plan.skipped, ...outcome.skipped],
|
|
135
|
+
...(outcome.refused ? { refused: outcome.refused } : {}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const day = (iso) => (iso ? iso.slice(0, 10) : 'unknown');
|
|
139
|
+
/** The plan as a person reads it. Preview and result share it, so they cannot describe it differently. */
|
|
140
|
+
function renderRebaseline(plan, opts) {
|
|
141
|
+
if (plan.refused)
|
|
142
|
+
return `❌ ${plan.refused}\n`;
|
|
143
|
+
const out = [];
|
|
144
|
+
if (plan.pages.length === 0) {
|
|
145
|
+
out.push('Nothing to rebaseline — every page named is already its latest capture.');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
out.push(opts.applied ? `✅ Replaced ${plan.replaced?.length ?? 0} baselines:` : `📋 This would replace ${plan.pages.length} baselines — nothing is written yet:`);
|
|
149
|
+
for (const p of plan.pages) {
|
|
150
|
+
const b = p.baseline;
|
|
151
|
+
const moments = b
|
|
152
|
+
? `${day(b.capturedAt)} → ${day(p.current.capturedAt)} · ${b.elements} → ${p.current.elements} elements${b.depth !== p.current.depth ? ` · depth ${b.depth} → ${p.current.depth}` : ''}`
|
|
153
|
+
: `new · ${p.current.elements} elements`;
|
|
154
|
+
const rows = p.rows ? ` · ${p.rows.lost} lost, ${p.rows.renamed} renamed, ${p.rows.ambiguous} ambiguous, ${p.rows.rebound} rebound, ${p.rows.added} added` : '';
|
|
155
|
+
out.push(` ${p.page}`, ` ${moments}${rows}`, ` ${(0, exports.reasonText)(p.reason)}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
for (const s of plan.skipped)
|
|
159
|
+
out.push(` skipped ${s.page} — ${s.reason}`);
|
|
160
|
+
if (!opts.applied && plan.pages.length > 0) {
|
|
161
|
+
out.push('', 'Read the drift first — a rebaseline accepts every row above, including any real regression.', ' ia-qa-pal tour --report see what changed, page by page', ' ia-qa-pal rebaseline --all --yes replace them', 'The old baselines are only in git: commit .ia-qa/baseline before and you can go back.');
|
|
162
|
+
}
|
|
163
|
+
if (opts.applied)
|
|
164
|
+
out.push('', 'Commit .ia-qa/baseline — a reference that is not in git cannot be reviewed.');
|
|
165
|
+
return `${out.join('\n')}\n`;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=rebaseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebaseline.js","sourceRoot":"","sources":["../src/rebaseline.ts"],"names":[],"mappings":"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"}
|
package/dist/report.d.ts
CHANGED
|
@@ -1,2 +1,27 @@
|
|
|
1
1
|
import type { TourResult } from './tour';
|
|
2
|
+
export type ExploreOutcome = 'explored' | 'nothing-mapped' | 'nothing-openable' | 'all-explored';
|
|
3
|
+
/**
|
|
4
|
+
* Why a `--more` tour explored nothing — classified once, worded by each renderer.
|
|
5
|
+
*
|
|
6
|
+
* "Nothing left to explore" was printed for all three, so a tour that mapped nothing
|
|
7
|
+
* ("0 explored in depth of 0") congratulated itself on a surface it never saw. Same rule as
|
|
8
|
+
* everywhere here: silence and completion must not read alike.
|
|
9
|
+
*/
|
|
10
|
+
export declare function exploreOutcome(r: TourResult): ExploreOutcome;
|
|
11
|
+
export interface Guidance {
|
|
12
|
+
/** Plain text — it can carry page names from the app, so an HTML renderer escapes it. */
|
|
13
|
+
text: string;
|
|
14
|
+
command?: string;
|
|
15
|
+
/** A line to paste into `.ia-qa/config.json`. */
|
|
16
|
+
paste?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* What changes how the rest of the report should be read, stated before it.
|
|
20
|
+
*
|
|
21
|
+
* Each entry fires on a fact this tour measured — never on a project shape guessed from names —
|
|
22
|
+
* and each has an ordinary case where it stays silent, which the tests pin: a comparable
|
|
23
|
+
* baseline, a suite that visits only configured pages, a healable row that did become a rewrite.
|
|
24
|
+
* Nothing here changes the verdict: it says what the verdict is made of.
|
|
25
|
+
*/
|
|
26
|
+
export declare function guidance(r: TourResult): Guidance[];
|
|
2
27
|
export declare function renderReport(r: TourResult): string;
|