@sun-asterisk/sungen 3.3.0-alpha.8 → 3.3.0-alpha.9
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/commands/contract-derive-command.d.ts +2 -1
- package/dist/cli/commands/contract-derive-command.d.ts.map +1 -1
- package/dist/cli/commands/contract-derive-command.js +13 -2
- package/dist/cli/commands/contract-derive-command.js.map +1 -1
- package/dist/contract/build-trace-conformance.d.ts.map +1 -1
- package/dist/contract/build-trace-conformance.js +4 -11
- package/dist/contract/build-trace-conformance.js.map +1 -1
- package/dist/contract/derive-free-feature.d.ts +9 -0
- package/dist/contract/derive-free-feature.d.ts.map +1 -1
- package/dist/contract/derive-free-feature.js +10 -3
- package/dist/contract/derive-free-feature.js.map +1 -1
- package/dist/contract/resolve-unit-trace-identities.d.ts +12 -0
- package/dist/contract/resolve-unit-trace-identities.d.ts.map +1 -1
- package/dist/contract/resolve-unit-trace-identities.js +33 -49
- package/dist/contract/resolve-unit-trace-identities.js.map +1 -1
- package/dist/contract/trace/collect-trace-evidence.d.ts +9 -3
- package/dist/contract/trace/collect-trace-evidence.d.ts.map +1 -1
- package/dist/contract/trace/collect-trace-evidence.js +45 -18
- package/dist/contract/trace/collect-trace-evidence.js.map +1 -1
- package/dist/contract/trace/scenario-id-claims.d.ts +11 -0
- package/dist/contract/trace/scenario-id-claims.d.ts.map +1 -0
- package/dist/contract/trace/scenario-id-claims.js +89 -0
- package/dist/contract/trace/scenario-id-claims.js.map +1 -0
- package/dist/contract/trace/select-final-attempt.d.ts +2 -0
- package/dist/contract/trace/select-final-attempt.d.ts.map +1 -1
- package/dist/contract/trace/select-final-attempt.js +4 -1
- package/dist/contract/trace/select-final-attempt.js.map +1 -1
- package/dist/contract/trace/trace-binding.d.ts +3 -2
- package/dist/contract/trace/trace-binding.d.ts.map +1 -1
- package/dist/contract/trace/trace-binding.js +6 -3
- package/dist/contract/trace/trace-binding.js.map +1 -1
- package/dist/contract/trace/trace-freshness.d.ts +27 -0
- package/dist/contract/trace/trace-freshness.d.ts.map +1 -0
- package/dist/contract/trace/trace-freshness.js +146 -0
- package/dist/contract/trace/trace-freshness.js.map +1 -0
- package/dist/contract/trace/trace-identity-resolution.d.ts +2 -0
- package/dist/contract/trace/trace-identity-resolution.d.ts.map +1 -1
- package/dist/contract/trace/trace-identity-resolution.js +6 -3
- package/dist/contract/trace/trace-identity-resolution.js.map +1 -1
- package/dist/contract/trace/trace-run-record.d.ts +2 -0
- package/dist/contract/trace/trace-run-record.d.ts.map +1 -1
- package/dist/contract/trace/trace-run-record.js +19 -5
- package/dist/contract/trace/trace-run-record.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/commands/create-test.md +4 -1
- package/package.json +3 -3
- package/src/cli/commands/contract-derive-command.ts +12 -3
- package/src/contract/build-trace-conformance.ts +4 -6
- package/src/contract/derive-free-feature.ts +15 -3
- package/src/contract/resolve-unit-trace-identities.ts +35 -12
- package/src/contract/trace/collect-trace-evidence.ts +50 -18
- package/src/contract/trace/scenario-id-claims.ts +60 -0
- package/src/contract/trace/select-final-attempt.ts +9 -2
- package/src/contract/trace/trace-binding.ts +7 -4
- package/src/contract/trace/trace-freshness.ts +110 -0
- package/src/contract/trace/trace-identity-resolution.ts +7 -4
- package/src/contract/trace/trace-run-record.ts +20 -4
- package/src/orchestrator/templates/ai-src/commands/create-test.md +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect-trace-evidence.js","sourceRoot":"","sources":["../../../src/contract/trace/collect-trace-evidence.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"collect-trace-evidence.js","sourceRoot":"","sources":["../../../src/contract/trace/collect-trace-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TraceRun } from './collect-trace-evidence';
|
|
2
|
+
export interface IdClaim {
|
|
3
|
+
/** `file:line "title" (run record <path>)` per claiming test, sorted. */
|
|
4
|
+
tests: string[];
|
|
5
|
+
/** Project-relative records under test-results/ that are a claim's only source, next to a test-results-free/ claim. */
|
|
6
|
+
staleRecords: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function idsClaimedByTwoTests(projectRoot: string, runs: readonly TraceRun[]): Map<string, IdClaim>;
|
|
9
|
+
/** What to tell the user when several tests claim one id — check and derive say it the same way. */
|
|
10
|
+
export declare function twoTestsClaim(id: string, claim: IdClaim): string;
|
|
11
|
+
//# sourceMappingURL=scenario-id-claims.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario-id-claims.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/scenario-id-claims.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,WAAW,OAAO;IACtB,yEAAyE;IACzE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uHAAuH;IACvH,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAQD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzG;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAKhE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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.idsClaimedByTwoTests = idsClaimedByTwoTests;
|
|
37
|
+
exports.twoTestsClaim = twoTestsClaim;
|
|
38
|
+
/**
|
|
39
|
+
* One scenario id, one test (#962): which ids more than one recorded TEST claims, said the same way
|
|
40
|
+
* by `contract derive` (it refuses) and `contract check` (the id is unproven). One test recorded
|
|
41
|
+
* again — another run or shard, a retry, a second Playwright project — is still one test: the same
|
|
42
|
+
* file and the same Playwright test id.
|
|
43
|
+
*
|
|
44
|
+
* Each claiming test names the run record(s) it came from. A test that only an older run's record
|
|
45
|
+
* under `test-results/` still mentions — while another claim comes from the free config's own
|
|
46
|
+
* `test-results-free/` — is most likely gone: that record is offered for deletion.
|
|
47
|
+
*/
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const render_free_gherkin_1 = require("../render-free-gherkin");
|
|
50
|
+
const trace_run_record_1 = require("./trace-run-record");
|
|
51
|
+
const posix = (p) => p.split(path.sep).join('/');
|
|
52
|
+
/** A run's project-relative test file: the run record's (what the binding checks), else the report's. */
|
|
53
|
+
const testFileOf = (r) => r.record?.attempts.find((a) => a.testId === r.test?.testId)?.file ?? r.test?.file ?? '?';
|
|
54
|
+
const label = (r, records) => `${(0, render_free_gherkin_1.clip)(testFileOf(r), 200)}:${r.test?.line ?? 0} "${(0, render_free_gherkin_1.clip)(r.test?.title ?? '')}" (run record ${records.map((f) => (0, render_free_gherkin_1.clip)(f, 200)).join(', ')})`;
|
|
55
|
+
function idsClaimedByTwoTests(projectRoot, runs) {
|
|
56
|
+
const byId = new Map();
|
|
57
|
+
for (const r of runs) {
|
|
58
|
+
if (!r.test)
|
|
59
|
+
continue;
|
|
60
|
+
const tests = byId.get(r.scenarioId) ?? new Map();
|
|
61
|
+
const key = `${testFileOf(r)}\0${r.test.testId}`;
|
|
62
|
+
const entry = tests.get(key) ?? { run: r, records: new Set() };
|
|
63
|
+
if (r.record?.file)
|
|
64
|
+
entry.records.add(posix(path.relative(projectRoot, r.record.file)));
|
|
65
|
+
tests.set(key, entry);
|
|
66
|
+
byId.set(r.scenarioId, tests);
|
|
67
|
+
}
|
|
68
|
+
const claims = new Map();
|
|
69
|
+
for (const [id, tests] of byId) {
|
|
70
|
+
if (tests.size < 2)
|
|
71
|
+
continue;
|
|
72
|
+
const entries = [...tests.values()].map((t) => ({ ...t, records: [...t.records].sort() }));
|
|
73
|
+
const inFreeDir = entries.some((t) => t.records.some((f) => f.startsWith(`${trace_run_record_1.FREE_RUN_DIR}/`)));
|
|
74
|
+
const legacyOnly = entries.filter((t) => t.records.length > 0 && t.records.every((f) => f.startsWith('test-results/')));
|
|
75
|
+
claims.set(id, {
|
|
76
|
+
tests: entries.map((t) => label(t.run, t.records)).sort(),
|
|
77
|
+
staleRecords: inFreeDir ? [...new Set(legacyOnly.flatMap((t) => t.records))].sort() : [],
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return claims;
|
|
81
|
+
}
|
|
82
|
+
/** What to tell the user when several tests claim one id — check and derive say it the same way. */
|
|
83
|
+
function twoTestsClaim(id, claim) {
|
|
84
|
+
const stale = claim.staleRecords.length
|
|
85
|
+
? `; if that test is gone, delete ${claim.staleRecords.join(', ')} — an older run's record (free tests now record under ${trace_run_record_1.FREE_RUN_DIR}/)`
|
|
86
|
+
: '';
|
|
87
|
+
return `${claim.tests.length} recorded tests claim ${id}: ${claim.tests.join(', ')} — give each test its own ID (its title's leading ID, or its @tag), then run them again with trace on${stale}`;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=scenario-id-claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario-id-claims.js","sourceRoot":"","sources":["../../../src/contract/trace/scenario-id-claims.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ export interface ReportTest {
|
|
|
14
14
|
project: string;
|
|
15
15
|
results: ReportResult[];
|
|
16
16
|
report: string;
|
|
17
|
+
/** The directory of the config that ran (`config.configFile`, absolute as Playwright writes it) — where absolute attachment paths start. */
|
|
18
|
+
configRoot?: string;
|
|
17
19
|
}
|
|
18
20
|
export type Admissibility = 'admissible' | 'inconclusive' | 'unproven';
|
|
19
21
|
/** Every test of a report (`text`: its bytes, already read once by the caller); throws when it is not a Playwright JSON report at all. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-final-attempt.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/select-final-attempt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select-final-attempt.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/select-final-attempt.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAC9H,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IACpI,4IAA4I;IAC5I,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,UAAU,CAAC;AAiBvE,0IAA0I;AAC1I,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAqB9E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,aAAa,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAMpH"}
|
|
@@ -49,6 +49,7 @@ exports.finalAttempt = finalAttempt;
|
|
|
49
49
|
* leading id, else the whole title — the same rule the contract uses for a scenario name.
|
|
50
50
|
*/
|
|
51
51
|
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
52
53
|
const parse_1 = require("../../harness/parse");
|
|
53
54
|
const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
54
55
|
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
@@ -79,6 +80,8 @@ function readPlaywrightReport(file, text) {
|
|
|
79
80
|
if (!isObj(doc) || !Array.isArray(doc.suites))
|
|
80
81
|
throw new Error(`${file} is not a Playwright JSON report (no suites)`);
|
|
81
82
|
const out = [];
|
|
83
|
+
const configFile = isObj(doc.config) && typeof doc.config.configFile === 'string' && path.isAbsolute(doc.config.configFile) ? doc.config.configFile : null;
|
|
84
|
+
const configRoot = configFile ? { configRoot: path.dirname(configFile) } : {};
|
|
82
85
|
for (const top of doc.suites) {
|
|
83
86
|
for (const spec of specsOf(top)) {
|
|
84
87
|
if (typeof spec.id !== 'string' || typeof spec.title !== 'string' || typeof spec.file !== 'string')
|
|
@@ -89,7 +92,7 @@ function readPlaywrightReport(file, text) {
|
|
|
89
92
|
const results = arr(t.results).map(resultOf).filter((r) => !!r).sort((a, b) => a.retry - b.retry);
|
|
90
93
|
out.push({
|
|
91
94
|
testId: spec.id, title: spec.title, file: spec.file, line: Number(spec.line) || 0,
|
|
92
|
-
tags: arr(spec.tags).map(String), project: String(t.projectName ?? ''), results, report: file,
|
|
95
|
+
tags: arr(spec.tags).map(String), project: String(t.projectName ?? ''), results, report: file, ...configRoot,
|
|
93
96
|
});
|
|
94
97
|
}
|
|
95
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-final-attempt.js","sourceRoot":"","sources":["../../../src/contract/trace/select-final-attempt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"select-final-attempt.js","sourceRoot":"","sources":["../../../src/contract/trace/select-final-attempt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ParsedTrace } from './trace-file-reader';
|
|
2
|
+
import { UnitContract } from './trace-freshness';
|
|
2
3
|
import type { RunRecord } from './trace-run-record';
|
|
3
4
|
import type { ReportResult, ReportTest } from './select-final-attempt';
|
|
4
5
|
export interface BindingInput {
|
|
@@ -7,8 +8,8 @@ export interface BindingInput {
|
|
|
7
8
|
result: ReportResult;
|
|
8
9
|
record: RunRecord;
|
|
9
10
|
trace: ParsedTrace;
|
|
10
|
-
/**
|
|
11
|
-
|
|
11
|
+
/** The unit's contract as it is now; null when no contract is proven (derive reads traces to write one). */
|
|
12
|
+
contract: UnitContract | null;
|
|
12
13
|
}
|
|
13
14
|
export type Binding = {
|
|
14
15
|
ok: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-binding.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trace-binding.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-binding.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,4GAA4G;IAC5G,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/B;AACD,MAAM,MAAM,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAIrF,wBAAgB,SAAS,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAwBlD"}
|
|
@@ -44,11 +44,13 @@ exports.bindTrace = bindTrace;
|
|
|
44
44
|
* code sha256 of the test file NOW equals the hash the record took at run start
|
|
45
45
|
* title every library part says `<file>:<line> › … › <title>` of exactly this test
|
|
46
46
|
* clock the trace started inside the attempt's window (±2 s)
|
|
47
|
-
* fresh the trace is
|
|
47
|
+
* fresh the trace is not older than the .feature files and the lock it is asked to prove —
|
|
48
|
+
* judged by their content, not their file time (#967, trace-freshness.ts)
|
|
48
49
|
*/
|
|
49
50
|
const crypto_1 = require("crypto");
|
|
50
51
|
const fs = __importStar(require("fs"));
|
|
51
52
|
const path = __importStar(require("path"));
|
|
53
|
+
const trace_freshness_1 = require("./trace-freshness");
|
|
52
54
|
const CLOCK_SLACK_MS = 2000;
|
|
53
55
|
function bindTrace(i) {
|
|
54
56
|
const fail = (reason) => ({ ok: false, reason });
|
|
@@ -81,8 +83,9 @@ function bindTrace(i) {
|
|
|
81
83
|
if (typeof wall !== 'number' || Number.isNaN(start) || wall < start - CLOCK_SLACK_MS || wall > start + i.result.duration + CLOCK_SLACK_MS) {
|
|
82
84
|
return fail('the trace was not recorded during this attempt (clock window)');
|
|
83
85
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
const stale = i.contract ? (0, trace_freshness_1.staleReason)(i.contract, i.record) : null;
|
|
87
|
+
if (stale)
|
|
88
|
+
return fail(stale);
|
|
86
89
|
return { ok: true, specFile: attempt.file };
|
|
87
90
|
}
|
|
88
91
|
//# sourceMappingURL=trace-binding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-binding.js","sourceRoot":"","sources":["../../../src/contract/trace/trace-binding.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"trace-binding.js","sourceRoot":"","sources":["../../../src/contract/trace/trace-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RunRecord } from './trace-run-record';
|
|
2
|
+
interface ContractFile {
|
|
3
|
+
rel: string;
|
|
4
|
+
sha: string;
|
|
5
|
+
mtimeMs: number;
|
|
6
|
+
}
|
|
7
|
+
interface LastCommit {
|
|
8
|
+
sha: string;
|
|
9
|
+
ms: number;
|
|
10
|
+
}
|
|
11
|
+
/** A unit's contract as it is NOW — its `.feature` files and lock, read once per verdict. */
|
|
12
|
+
export interface UnitContract {
|
|
13
|
+
projectRoot: string;
|
|
14
|
+
files: ContractFile[];
|
|
15
|
+
/** Schema 1 only, asked of git at most once: project path → the last commit that changed each file git holds unchanged. */
|
|
16
|
+
committed?: Map<string, LastCommit> | null;
|
|
17
|
+
/** Schema 1 only: commit → is it an ancestor of HEAD (asked once per commit). */
|
|
18
|
+
ancestors?: Map<string, boolean>;
|
|
19
|
+
}
|
|
20
|
+
export declare function unitContract(projectRoot: string, unit: {
|
|
21
|
+
name: string;
|
|
22
|
+
dir: string;
|
|
23
|
+
}): UnitContract;
|
|
24
|
+
/** Why a trace bound to `record` is older than the unit's contract — null when it is not. */
|
|
25
|
+
export declare function staleReason(c: UnitContract, record: RunRecord): string | null;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=trace-freshness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-freshness.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-freshness.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,UAAU,YAAY;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACpE,UAAU,UAAU;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAChD,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,2HAA2H;IAC3H,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;IAC3C,iFAAiF;IACjF,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAMD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAUnG;AAqCD,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAiB7E"}
|
|
@@ -0,0 +1,146 @@
|
|
|
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.unitContract = unitContract;
|
|
37
|
+
exports.staleReason = staleReason;
|
|
38
|
+
/**
|
|
39
|
+
* Is a trace newer than the contract it is asked to prove? (DOS-14.6: a trace older than the
|
|
40
|
+
* `.feature` or the lock is refused.) Judged by CONTENT, never by file time alone (#967): a `touch`,
|
|
41
|
+
* a checkout or a fresh clone changes no byte, so it stales nothing; an edit after the run always does.
|
|
42
|
+
*
|
|
43
|
+
* schema 2 record the reporter hashed every `.feature` and `contracts.lock.yaml` under `qa/` when
|
|
44
|
+
* the run started. Each of the unit's contract files must hash NOW to what the run
|
|
45
|
+
* saw: one that changed since, or did not exist yet, is newer than the trace → stale
|
|
46
|
+
* schema 1 record an older reporter recorded no content, so the files are dated against the run's
|
|
47
|
+
* start (the record's `startedAt`): one last written before it is older than the run;
|
|
48
|
+
* one written after it still is when git holds it unchanged and the commit that last
|
|
49
|
+
* changed it is an ancestor of HEAD committed before the run started (its bytes ARE
|
|
50
|
+
* that commit's). Anything else — edited, uncommitted, untracked, committed after the
|
|
51
|
+
* run started, no git, git failed or slow — is stale: fail closed.
|
|
52
|
+
*
|
|
53
|
+
* Limit of the schema-1 path: a commit time is what the committer's clock (or GIT_COMMITTER_DATE) said,
|
|
54
|
+
* so a backdated commit passes the time check — time-based checks cannot see through that. Schema 2
|
|
55
|
+
* compares content and retires this path: re-running the free tests once with the current reporter is
|
|
56
|
+
* the remedy.
|
|
57
|
+
*/
|
|
58
|
+
const child_process_1 = require("child_process");
|
|
59
|
+
const crypto_1 = require("crypto");
|
|
60
|
+
const fs = __importStar(require("fs"));
|
|
61
|
+
const path = __importStar(require("path"));
|
|
62
|
+
const contracts_lock_file_1 = require("../contracts-lock-file");
|
|
63
|
+
const normalize_feature_steps_1 = require("../normalize-feature-steps");
|
|
64
|
+
/** Inside the Claude Code guard too: a slow git leaves a schema-1 trace stale rather than the hook waiting. */
|
|
65
|
+
const GIT_TIMEOUT_MS = 2000;
|
|
66
|
+
const posix = (p) => p.split(path.sep).join('/');
|
|
67
|
+
function unitContract(projectRoot, unit) {
|
|
68
|
+
const root = path.resolve(projectRoot);
|
|
69
|
+
const lock = path.resolve((0, contracts_lock_file_1.lockPathFor)(unit.dir));
|
|
70
|
+
const files = [...(fs.existsSync(lock) ? [lock] : []), ...(0, normalize_feature_steps_1.contractFeatureFiles)(unit.dir, unit.name)].map((abs) => {
|
|
71
|
+
let sha = 'unreadable'; // never equal to a recorded sha256: an unreadable contract file is stale
|
|
72
|
+
let mtimeMs = Number.POSITIVE_INFINITY;
|
|
73
|
+
try {
|
|
74
|
+
sha = (0, crypto_1.createHash)('sha256').update(fs.readFileSync(abs)).digest('hex');
|
|
75
|
+
mtimeMs = fs.statSync(abs).mtimeMs;
|
|
76
|
+
}
|
|
77
|
+
catch { /* stale */ }
|
|
78
|
+
return { rel: posix(path.relative(root, abs)), sha, mtimeMs };
|
|
79
|
+
});
|
|
80
|
+
return { projectRoot: root, files };
|
|
81
|
+
}
|
|
82
|
+
function git(cwd, args) {
|
|
83
|
+
try {
|
|
84
|
+
return (0, child_process_1.execFileSync)('git', args, { cwd, stdio: ['ignore', 'pipe', 'ignore'], timeout: GIT_TIMEOUT_MS, maxBuffer: 16 * 1024 * 1024 }).toString('utf8');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Each contract file git holds unchanged → the last commit (first-parent history, merges included)
|
|
92
|
+
* that changed it, with its committer time. Two git calls for the whole unit; null when git cannot say.
|
|
93
|
+
* Paths are passed as literal pathspecs: no glob or `:(magic)` reading of a unit's file names.
|
|
94
|
+
*/
|
|
95
|
+
function committedTimes(c) {
|
|
96
|
+
if (c.committed !== undefined)
|
|
97
|
+
return c.committed;
|
|
98
|
+
const rels = c.files.map((f) => f.rel);
|
|
99
|
+
const changed = git(c.projectRoot, ['--literal-pathspecs', 'diff', '--name-only', '--relative', '-z', 'HEAD', '--', ...rels]);
|
|
100
|
+
const log = git(c.projectRoot, ['-c', 'core.quotePath=false', '--literal-pathspecs', 'log', '--first-parent', '-m', '-n', '500', '--format=%x01%H %ct', '--name-only', '--relative', '--', ...rels]);
|
|
101
|
+
if (changed === null || log === null)
|
|
102
|
+
return (c.committed = null);
|
|
103
|
+
const dirty = new Set(changed.split('\0').filter(Boolean));
|
|
104
|
+
const times = new Map();
|
|
105
|
+
let at = null;
|
|
106
|
+
for (const raw of log.split('\n')) {
|
|
107
|
+
const line = raw.trim();
|
|
108
|
+
if (raw.startsWith('\x01')) {
|
|
109
|
+
const [sha, ct] = raw.slice(1).trim().split(' ');
|
|
110
|
+
at = /^[0-9a-f]{40,64}$/.test(sha ?? '') && Number(ct) > 0 ? { sha, ms: Number(ct) * 1000 } : null;
|
|
111
|
+
}
|
|
112
|
+
else if (line && at && !times.has(line) && !dirty.has(line))
|
|
113
|
+
times.set(line, at);
|
|
114
|
+
}
|
|
115
|
+
return (c.committed = times);
|
|
116
|
+
}
|
|
117
|
+
/** Is `sha` an ancestor of HEAD? First-parent history says so already; asserted, never assumed. */
|
|
118
|
+
function isAncestorOfHead(c, sha) {
|
|
119
|
+
if (!c.ancestors)
|
|
120
|
+
c.ancestors = new Map();
|
|
121
|
+
if (!c.ancestors.has(sha))
|
|
122
|
+
c.ancestors.set(sha, git(c.projectRoot, ['merge-base', '--is-ancestor', sha, 'HEAD']) !== null);
|
|
123
|
+
return c.ancestors.get(sha);
|
|
124
|
+
}
|
|
125
|
+
/** Why a trace bound to `record` is older than the unit's contract — null when it is not. */
|
|
126
|
+
function staleReason(c, record) {
|
|
127
|
+
if (record.contract) {
|
|
128
|
+
const f = c.files.find((x) => record.contract[x.rel] !== x.sha);
|
|
129
|
+
if (!f)
|
|
130
|
+
return null;
|
|
131
|
+
const why = record.contract[f.rel] === undefined ? 'it did not exist when the run started' : 'its content changed after the run';
|
|
132
|
+
return `the trace is older than ${f.rel}: ${why} (stale) — re-run the test`;
|
|
133
|
+
}
|
|
134
|
+
const runStart = Date.parse(record.startedAt); // unreadable → nothing is "before the run": stale
|
|
135
|
+
const late = c.files.filter((f) => !(f.mtimeMs <= runStart));
|
|
136
|
+
if (!late.length)
|
|
137
|
+
return null;
|
|
138
|
+
const committed = committedTimes(c);
|
|
139
|
+
const vouched = (rel) => {
|
|
140
|
+
const last = committed?.get(rel);
|
|
141
|
+
return !!last && last.ms <= runStart && isAncestorOfHead(c, last.sha);
|
|
142
|
+
};
|
|
143
|
+
const f = late.find((x) => !vouched(x.rel));
|
|
144
|
+
return f ? `the trace is older than ${f.rel}: it was written after the run, and no commit from before the run holds its bytes (stale) — re-run the test` : null;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=trace-freshness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-freshness.js","sourceRoot":"","sources":["../../../src/contract/trace/trace-freshness.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,11 @@ export declare function identitiesFor(trace: ParsedTrace, steps: IntentStep[], c
|
|
|
18
18
|
/** One replay request per element target of a trace, keyed by the sha256 of its rendered HTML. */
|
|
19
19
|
export declare function identityRequestsFor(trace: ParsedTrace): TraceIdentityRequest[];
|
|
20
20
|
/** Ask the driver about every not-yet-cached target of these traces; rewrite the cache. */
|
|
21
|
+
/** `keys`: every target of the given traces (cached or asked) — what the caller reports on. */
|
|
21
22
|
export declare function resolveWithDriver(projectRoot: string, traces: ParsedTrace[], resolver: TraceIdentityResolver): Promise<{
|
|
22
23
|
asked: number;
|
|
23
24
|
resolver: string;
|
|
24
25
|
blockedRequests: number;
|
|
26
|
+
keys: string[];
|
|
25
27
|
}>;
|
|
26
28
|
//# sourceMappingURL=trace-identity-resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-identity-resolution.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-identity-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAkB,aAAa,EAAyC,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAqB,oBAAoB,EAAE,qBAAqB,EAAyC,MAAM,mBAAmB,CAAC;AAC1I,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAoB,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,gEAAgE;AAChE,eAAO,MAAM,WAAW,GAAI,GAAG,UAAU,KAAG,OAC2G,CAAC;AAOxJ,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAcxH;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,EAAE,CAK9E;AAED,2FAA2F;AAC3F,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"trace-identity-resolution.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-identity-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAkB,aAAa,EAAyC,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAqB,oBAAoB,EAAE,qBAAqB,EAAyC,MAAM,mBAAmB,CAAC;AAC1I,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAoB,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,gEAAgE;AAChE,eAAO,MAAM,WAAW,GAAI,GAAG,UAAU,KAAG,OAC2G,CAAC;AAOxJ,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAcxH;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,EAAE,CAK9E;AAED,2FAA2F;AAC3F,+FAA+F;AAC/F,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsB1M"}
|
|
@@ -55,16 +55,19 @@ function identityRequestsFor(trace) {
|
|
|
55
55
|
}));
|
|
56
56
|
}
|
|
57
57
|
/** Ask the driver about every not-yet-cached target of these traces; rewrite the cache. */
|
|
58
|
+
/** `keys`: every target of the given traces (cached or asked) — what the caller reports on. */
|
|
58
59
|
async function resolveWithDriver(projectRoot, traces, resolver) {
|
|
59
60
|
const { cache } = (0, identity_cache_1.readIdentityCache)(projectRoot);
|
|
60
61
|
// The cache is project-wide (every unit's traces): answers are only ever ADDED, never pruned here.
|
|
61
62
|
const keep = new Map(cache.entries);
|
|
63
|
+
const all = traces.flatMap(identityRequestsFor);
|
|
64
|
+
const keys = [...new Set(all.map((req) => req.key))];
|
|
62
65
|
const requests = new Map();
|
|
63
|
-
for (const req of
|
|
66
|
+
for (const req of all)
|
|
64
67
|
if (!keep.has(req.key))
|
|
65
68
|
requests.set(req.key, req);
|
|
66
69
|
if (!requests.size)
|
|
67
|
-
return { asked: 0, resolver: cache.resolver, blockedRequests: 0 };
|
|
70
|
+
return { asked: 0, resolver: cache.resolver, blockedRequests: 0, keys };
|
|
68
71
|
const answer = await resolver({ requests: [...requests.values()] });
|
|
69
72
|
if (!answer || !Array.isArray(answer.results))
|
|
70
73
|
throw new Error('the trace identity resolver returned no results');
|
|
@@ -79,6 +82,6 @@ async function resolveWithDriver(projectRoot, traces, resolver) {
|
|
|
79
82
|
keep.set(key, { ...rest, browser: answer.browser.slice(0, 100) });
|
|
80
83
|
}
|
|
81
84
|
(0, identity_cache_1.writeIdentityCache)(projectRoot, answer.resolver, keep);
|
|
82
|
-
return { asked: requests.size, resolver: String(answer.resolver), blockedRequests: Number(answer.blockedRequests) || 0 };
|
|
85
|
+
return { asked: requests.size, resolver: String(answer.resolver), blockedRequests: Number(answer.blockedRequests) || 0, keys };
|
|
83
86
|
}
|
|
84
87
|
//# sourceMappingURL=trace-identity-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-identity-resolution.js","sourceRoot":"","sources":["../../../src/contract/trace/trace-identity-resolution.ts"],"names":[],"mappings":";;;AA4BA,sCAcC;AAGD,kDAKC;
|
|
1
|
+
{"version":3,"file":"trace-identity-resolution.js","sourceRoot":"","sources":["../../../src/contract/trace/trace-identity-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ export interface RunRecord {
|
|
|
18
18
|
shard: string | null;
|
|
19
19
|
report: string | null;
|
|
20
20
|
specs: Record<string, string>;
|
|
21
|
+
/** Schema 2: project path → sha256 of each contract file at run start. null: schema 1 (no content recorded). */
|
|
22
|
+
contract: Record<string, string> | null;
|
|
21
23
|
attempts: RunRecordAttempt[];
|
|
22
24
|
}
|
|
23
25
|
/** The free / impl:code run's own outputDir (the documented free-test config); compiled runs clear `test-results/`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-run-record.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-run-record.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trace-run-record.d.ts","sourceRoot":"","sources":["../../../src/contract/trace/trace-run-record.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAC3E,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvE;AACD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,gHAAgH;IAChH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAQD,uHAAuH;AACvH,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAChD,gHAAgH;AAChH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAmC,CAAC;AAEjF,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5D;AAgBD,4HAA4H;AAC5H,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAyBpE"}
|