@jevitate/cli 0.19.0 → 0.20.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/dist/bin.js +258 -34
- package/dist/build-info.generated.js +3 -3
- package/dist/journey-network-checks.js +7 -1
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-readiness.js +19 -5
- package/dist/journey-readiness.js.map +1 -1
- package/dist/journey-review/render.js +14 -2
- package/dist/journey-review/render.js.map +1 -1
- package/dist/journey-review.d.ts +3 -1
- package/dist/journey-review.js +14 -0
- package/dist/journey-review.js.map +1 -1
- package/dist/journey-verify.d.ts +5 -1
- package/dist/journey-verify.js +27 -3
- package/dist/journey-verify.js.map +1 -1
- package/package.json +9 -9
package/dist/bin.js
CHANGED
|
@@ -39690,15 +39690,23 @@ var INSTRUMENT = `(() => {
|
|
|
39690
39690
|
})();`;
|
|
39691
39691
|
var MAX_CAPTURED = 2e4;
|
|
39692
39692
|
var RequestCapture = class {
|
|
39693
|
+
/**
|
|
39694
|
+
* #617: every request that finished during the capture (its whole completion history), each
|
|
39695
|
+
* tagged with whether THIS capture saw it begin. A request already in flight when the capture
|
|
39696
|
+
* started still finishes into it, but was not sent by the run the capture covers.
|
|
39697
|
+
*/
|
|
39693
39698
|
#requests = [];
|
|
39694
39699
|
/** #283: requests sent since the capture started that have not finished (keyed by the request). */
|
|
39695
39700
|
#inflight = /* @__PURE__ */ new Map();
|
|
39696
39701
|
/** #283: requests sent that never reported an end (their document went away first). */
|
|
39697
39702
|
#unfinished = [];
|
|
39698
39703
|
#truncated = false;
|
|
39699
|
-
/**
|
|
39700
|
-
|
|
39701
|
-
|
|
39704
|
+
/**
|
|
39705
|
+
* @internal — fed by the page's monitor. `sent` is false for a completion the capture never saw
|
|
39706
|
+
* begin (#617); it stays in the completion history but is not counted as sent by the capture.
|
|
39707
|
+
*/
|
|
39708
|
+
add(r, sent = true) {
|
|
39709
|
+
this.#requests.push({ r, sent });
|
|
39702
39710
|
if (this.#requests.length > MAX_CAPTURED) {
|
|
39703
39711
|
this.#requests.shift();
|
|
39704
39712
|
this.#truncated = true;
|
|
@@ -39716,22 +39724,27 @@ var RequestCapture = class {
|
|
|
39716
39724
|
const sent = this.#inflight.get(key2);
|
|
39717
39725
|
this.#inflight.delete(key2);
|
|
39718
39726
|
if (finished !== null)
|
|
39719
|
-
this.add(finished);
|
|
39727
|
+
this.add(finished, sent !== void 0);
|
|
39720
39728
|
else if (sent !== void 0 && this.#unfinished.length < MAX_CAPTURED)
|
|
39721
39729
|
this.#unfinished.push(sent);
|
|
39722
39730
|
}
|
|
39723
|
-
/** The requests captured so far, in the order they finished. */
|
|
39731
|
+
/** The requests captured so far, in the order they finished, including ones the capture never saw begin. */
|
|
39724
39732
|
requests() {
|
|
39725
|
-
return
|
|
39733
|
+
return this.#requests.map((e) => e.r);
|
|
39726
39734
|
}
|
|
39727
39735
|
/**
|
|
39728
|
-
* Every request SENT since the capture started (#283): the finished ones
|
|
39729
|
-
* ones still in flight or abandoned without an end event (`pending: true`, `status: null`).
|
|
39730
|
-
* `requestMade` check is judged over these — a request counts once it was sent, whether or not
|
|
39731
|
-
* its response has arrived.
|
|
39736
|
+
* Every request SENT since the capture started (#283): the finished ones this capture saw begin,
|
|
39737
|
+
* then the ones still in flight or abandoned without an end event (`pending: true`, `status: null`).
|
|
39738
|
+
* A `requestMade` check is judged over these — a request counts once it was sent, whether or not
|
|
39739
|
+
* its response has arrived. A request that began before the capture started is never among them
|
|
39740
|
+
* (#617): only its completion shows up, in `requests()`.
|
|
39732
39741
|
*/
|
|
39733
39742
|
sent() {
|
|
39734
|
-
return [
|
|
39743
|
+
return [
|
|
39744
|
+
...this.#requests.filter((e) => e.sent).map((e) => e.r),
|
|
39745
|
+
...this.#unfinished,
|
|
39746
|
+
...this.#inflight.values()
|
|
39747
|
+
];
|
|
39735
39748
|
}
|
|
39736
39749
|
/** True when more requests finished than the capture keeps (the oldest were dropped). */
|
|
39737
39750
|
get truncated() {
|
|
@@ -53640,6 +53653,72 @@ function mutationPairIssues(journey) {
|
|
|
53640
53653
|
});
|
|
53641
53654
|
return out;
|
|
53642
53655
|
}
|
|
53656
|
+
function targetedProofPlanIssues(journey) {
|
|
53657
|
+
const plans = journey.metadata.targetedProofs ?? [];
|
|
53658
|
+
if (plans.length === 0)
|
|
53659
|
+
return [];
|
|
53660
|
+
const sites = new Set(journeyAssertions(journey).map(assertionSiteKey));
|
|
53661
|
+
const steps = flat(journey);
|
|
53662
|
+
const out = [];
|
|
53663
|
+
const seen = /* @__PURE__ */ new Set();
|
|
53664
|
+
plans.forEach((plan2, index) => {
|
|
53665
|
+
const key2 = `${plan2.check}\0${plan2.mustFailWhen}`;
|
|
53666
|
+
if (seen.has(key2))
|
|
53667
|
+
out.push({ index, field: "check", message: `targetedProofs: duplicate plan for ${plan2.check} and ${plan2.mustFailWhen}` });
|
|
53668
|
+
seen.add(key2);
|
|
53669
|
+
if (!SITE_RE.test(plan2.check)) {
|
|
53670
|
+
out.push({ index, field: "check", message: `targetedProofs: ${JSON.stringify(plan2.check)} is not an assertion site \u2014 expected step:<n>, step-request:<n>:<i> or end-state:<i>` });
|
|
53671
|
+
} else if (!sites.has(plan2.check)) {
|
|
53672
|
+
out.push({ index, field: "check", message: `targetedProofs: the Journey has no assertion at ${plan2.check}` });
|
|
53673
|
+
}
|
|
53674
|
+
let mutated;
|
|
53675
|
+
try {
|
|
53676
|
+
mutated = resolveMutationRef(journey, plan2.mustFailWhen);
|
|
53677
|
+
} catch (err) {
|
|
53678
|
+
out.push({ index, field: "mustFailWhen", message: `targetedProofs: ${err instanceof Error ? err.message : String(err)}` });
|
|
53679
|
+
}
|
|
53680
|
+
const check3 = /^step:([1-9][0-9]*)$/.exec(plan2.check);
|
|
53681
|
+
const targetStep = check3 === null ? null : Number(check3[1]);
|
|
53682
|
+
const relaxed2 = /* @__PURE__ */ new Set();
|
|
53683
|
+
for (const entry of plan2.relax) {
|
|
53684
|
+
if (!/^step:[1-9][0-9]*$/.test(entry)) {
|
|
53685
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${JSON.stringify(entry)} is not a step assertion site \u2014 expected step:<n>` });
|
|
53686
|
+
continue;
|
|
53687
|
+
}
|
|
53688
|
+
if (relaxed2.has(entry)) {
|
|
53689
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${entry} is relaxed twice` });
|
|
53690
|
+
continue;
|
|
53691
|
+
}
|
|
53692
|
+
relaxed2.add(entry);
|
|
53693
|
+
const n3 = Number(entry.slice("step:".length));
|
|
53694
|
+
const recorded = steps[n3 - 1];
|
|
53695
|
+
if (recorded === void 0) {
|
|
53696
|
+
out.push({ index, field: "relax", message: `targetedProofs: the Journey has no step ${n3}` });
|
|
53697
|
+
continue;
|
|
53698
|
+
}
|
|
53699
|
+
if (targetStep === n3) {
|
|
53700
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${entry} is the target assertion \u2014 a declared proof never relaxes it` });
|
|
53701
|
+
continue;
|
|
53702
|
+
}
|
|
53703
|
+
if (targetStep !== null && n3 > targetStep) {
|
|
53704
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${entry} is not before the target step:${targetStep}` });
|
|
53705
|
+
continue;
|
|
53706
|
+
}
|
|
53707
|
+
if (recorded.step.kind === "handback") {
|
|
53708
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${entry} is a resume assertion \u2014 a declared proof never relaxes it` });
|
|
53709
|
+
continue;
|
|
53710
|
+
}
|
|
53711
|
+
if (recorded.step.kind !== "assert" && !("expect" in recorded.step)) {
|
|
53712
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${entry} has no page postcondition to relax` });
|
|
53713
|
+
continue;
|
|
53714
|
+
}
|
|
53715
|
+
if (mutated !== void 0 && n3 < mutated.step) {
|
|
53716
|
+
out.push({ index, field: "relax", message: `targetedProofs: ${entry} is before the mutated step ${mutated.step} (${plan2.mustFailWhen})` });
|
|
53717
|
+
}
|
|
53718
|
+
}
|
|
53719
|
+
});
|
|
53720
|
+
return out;
|
|
53721
|
+
}
|
|
53643
53722
|
function expectedText(a) {
|
|
53644
53723
|
if (a.kind === "valueEquals")
|
|
53645
53724
|
return typeof a.value === "string" ? { kind: a.kind, text: a.value } : null;
|
|
@@ -53868,6 +53947,7 @@ function relaxedMutationReplay(journey, m, opts = {}) {
|
|
|
53868
53947
|
return { journey: copy };
|
|
53869
53948
|
}
|
|
53870
53949
|
var MAX_TARGETED_RELAXATIONS = 4;
|
|
53950
|
+
var MAX_DECLARED_RELAXATIONS = 8;
|
|
53871
53951
|
function failedSiteKey(f2) {
|
|
53872
53952
|
if (f2.where === "step")
|
|
53873
53953
|
return `step:${f2.step}`;
|
|
@@ -53980,6 +54060,60 @@ async function runTargetedProof(journey, plan2, m, target, initial, replay, opts
|
|
|
53980
54060
|
}
|
|
53981
54061
|
return { site, relaxedSites, outcome: run.outcome, failedSites: run.failedSites };
|
|
53982
54062
|
}
|
|
54063
|
+
async function runDeclaredTargetedProof(journey, plan2, m, target, declared, replay, opts = {}) {
|
|
54064
|
+
const site = assertionSiteKey(target);
|
|
54065
|
+
const relax = declared.relax;
|
|
54066
|
+
const unpaired = relax.find((key2) => !plan2.pairs.some((p) => p.site === key2 && p.mutation === m.id));
|
|
54067
|
+
if (unpaired !== void 0) {
|
|
54068
|
+
return { site, relaxedSites: relax, outcome: "error", failedSites: [], declared: true, refused: `${unpaired} is not paired with ${m.id}` };
|
|
54069
|
+
}
|
|
54070
|
+
const relaxedNow = [...relax];
|
|
54071
|
+
const run = await replay((j) => targetedMutationReplay(j, m, site, relaxedNow, opts), "targeted");
|
|
54072
|
+
const first = run.failedSites[0];
|
|
54073
|
+
if (first !== void 0 && first.where === "step" && first.postcondition && !relax.includes(`step:${first.step}`) && (target.where !== "step" || first.step < target.step)) {
|
|
54074
|
+
const key2 = `step:${first.step}`;
|
|
54075
|
+
return { site, relaxedSites: relax, outcome: run.outcome, failedSites: run.failedSites, declared: true, refused: `${key2} blocked the declared proof (not in relax)` };
|
|
54076
|
+
}
|
|
54077
|
+
if (classifyMutationPlain(target, m, run) === "sensitive") {
|
|
54078
|
+
const control = await replay((j) => targetedControlReplay(j, m, relaxedNow), "control");
|
|
54079
|
+
if (control.outcome !== "passed") {
|
|
54080
|
+
return {
|
|
54081
|
+
site,
|
|
54082
|
+
relaxedSites: relax,
|
|
54083
|
+
outcome: run.outcome,
|
|
54084
|
+
failedSites: run.failedSites,
|
|
54085
|
+
declared: true,
|
|
54086
|
+
control: control.outcome,
|
|
54087
|
+
refused: `the unmutated control replay with ${relax.join(", ")} relaxed did not pass (${control.outcome})`
|
|
54088
|
+
};
|
|
54089
|
+
}
|
|
54090
|
+
return { site, relaxedSites: relax, outcome: run.outcome, failedSites: run.failedSites, declared: true, control: control.outcome };
|
|
54091
|
+
}
|
|
54092
|
+
return { site, relaxedSites: relax, outcome: run.outcome, failedSites: run.failedSites, declared: true };
|
|
54093
|
+
}
|
|
54094
|
+
function suggestTargetedProofPlan(proof, m) {
|
|
54095
|
+
if (proof.refused !== `relaxation bound ${MAX_TARGETED_RELAXATIONS} reached`)
|
|
54096
|
+
return null;
|
|
54097
|
+
const first = proof.failedSites[0];
|
|
54098
|
+
if (first === void 0 || first.where !== "step")
|
|
54099
|
+
return null;
|
|
54100
|
+
const relax = [...proof.relaxedSites, `step:${first.step}`];
|
|
54101
|
+
if (relax.length > MAX_DECLARED_RELAXATIONS)
|
|
54102
|
+
return null;
|
|
54103
|
+
return { check: proof.site, mustFailWhen: m.id, relax };
|
|
54104
|
+
}
|
|
54105
|
+
function declaredTargetedProofFor(journey, m, siteKey) {
|
|
54106
|
+
for (const plan2 of journey.metadata.targetedProofs ?? []) {
|
|
54107
|
+
if (plan2.check !== siteKey)
|
|
54108
|
+
continue;
|
|
54109
|
+
try {
|
|
54110
|
+
if (resolveMutationRef(journey, plan2.mustFailWhen).id === m.id)
|
|
54111
|
+
return plan2;
|
|
54112
|
+
} catch {
|
|
54113
|
+
}
|
|
54114
|
+
}
|
|
54115
|
+
return void 0;
|
|
54116
|
+
}
|
|
53983
54117
|
function needsRelaxedReplay(plan2, m, result) {
|
|
53984
54118
|
if (result.outcome !== "failed")
|
|
53985
54119
|
return false;
|
|
@@ -54025,6 +54159,19 @@ function classifyMutationPlain(site, m, result) {
|
|
|
54025
54159
|
return fs.some((f2) => f2.where === "end-state" && f2.index === site.index) ? "sensitive" : "cascade";
|
|
54026
54160
|
}
|
|
54027
54161
|
var PRECEDENCE = ["sensitive", "insensitive", "cascade", "not-applied", "error"];
|
|
54162
|
+
function provenSensitive(journey, m, results, key2, visiting) {
|
|
54163
|
+
if (visiting.has(key2))
|
|
54164
|
+
return false;
|
|
54165
|
+
const site = journeyAssertions(journey).find((s3) => assertionSiteKey(s3) === key2);
|
|
54166
|
+
const result = results.get(m.id) ?? { outcome: "error", failedSites: [] };
|
|
54167
|
+
if (site === void 0 || classifyMutation(site, m, result) !== "sensitive")
|
|
54168
|
+
return false;
|
|
54169
|
+
const proof = result.targeted?.find((t) => t.site === key2);
|
|
54170
|
+
if (proof === void 0 || proof.refused !== void 0)
|
|
54171
|
+
return true;
|
|
54172
|
+
const next = /* @__PURE__ */ new Set([...visiting, key2]);
|
|
54173
|
+
return proof.relaxedSites.every((relaxed2) => provenSensitive(journey, m, results, relaxed2, next));
|
|
54174
|
+
}
|
|
54028
54175
|
function judgeAssertions(journey, plan2, results) {
|
|
54029
54176
|
const proofFor = (m, key2) => results.get(m.id)?.targeted?.find((t) => t.site === key2);
|
|
54030
54177
|
return journeyAssertions(journey).map((site) => {
|
|
@@ -54033,14 +54180,25 @@ function judgeAssertions(journey, plan2, results) {
|
|
|
54033
54180
|
if (paired.length === 0)
|
|
54034
54181
|
return { site: key2, verdict: "unpaired" };
|
|
54035
54182
|
const verdicts = paired.map((m) => ({ m, v: classifyMutation(site, m, results.get(m.id) ?? { outcome: "error", failedSites: [] }) }));
|
|
54183
|
+
let unsound;
|
|
54036
54184
|
for (const v of PRECEDENCE) {
|
|
54037
54185
|
const first = verdicts.find((x) => x.v === v);
|
|
54038
|
-
if (first === void 0)
|
|
54186
|
+
if (first === void 0 && !(v === "cascade" && unsound !== void 0))
|
|
54039
54187
|
continue;
|
|
54040
54188
|
if (v === "sensitive") {
|
|
54041
|
-
const
|
|
54042
|
-
|
|
54189
|
+
for (const { m } of verdicts.filter((x) => x.v === "sensitive")) {
|
|
54190
|
+
const proof = proofFor(m, key2);
|
|
54191
|
+
if (proof === void 0 || proof.refused !== void 0)
|
|
54192
|
+
return { site: key2, verdict: v, provedBy: m.id };
|
|
54193
|
+
const bad = proof.relaxedSites.find((relaxed2) => !provenSensitive(journey, m, results, relaxed2, /* @__PURE__ */ new Set([key2])));
|
|
54194
|
+
if (bad === void 0)
|
|
54195
|
+
return { site: key2, verdict: v, provedBy: m.id, relaxedSites: proof.relaxedSites };
|
|
54196
|
+
unsound ??= `relaxed site ${bad} is not itself proven sensitive to ${m.id}`;
|
|
54197
|
+
}
|
|
54198
|
+
continue;
|
|
54043
54199
|
}
|
|
54200
|
+
if (v === "cascade" && unsound !== void 0)
|
|
54201
|
+
return { site: key2, verdict: v, targetedRefusal: unsound };
|
|
54044
54202
|
if (v === "cascade") {
|
|
54045
54203
|
const refusal = paired.map((m) => proofFor(m, key2)).find((t) => t !== void 0 && t.refused !== void 0);
|
|
54046
54204
|
if (refusal !== void 0)
|
|
@@ -54634,6 +54792,12 @@ var JourneySchema = external_exports.object({
|
|
|
54634
54792
|
endState: external_exports.array(OutcomeCheckSchema).max(50).optional(),
|
|
54635
54793
|
acceptedWeak: external_exports.object({ reason: external_exports.string().min(1), rules: external_exports.array(external_exports.string()) }).strict().optional(),
|
|
54636
54794
|
mutationPairs: external_exports.array(external_exports.object({ check: external_exports.string().min(1).max(100), mustFailWhen: external_exports.string().min(1).max(200) }).strict()).max(100).optional(),
|
|
54795
|
+
// #616: a declared targeted-proof plan; the relax list is bounded tighter than the automatic proof.
|
|
54796
|
+
targetedProofs: external_exports.array(external_exports.object({
|
|
54797
|
+
check: external_exports.string().min(1).max(100),
|
|
54798
|
+
mustFailWhen: external_exports.string().min(1).max(200),
|
|
54799
|
+
relax: external_exports.array(external_exports.string().min(1).max(60)).min(1).max(MAX_DECLARED_RELAXATIONS)
|
|
54800
|
+
}).strict()).max(20).optional(),
|
|
54637
54801
|
approval: external_exports.object({
|
|
54638
54802
|
contentHash: external_exports.string().regex(/^[0-9a-f]{64}$/, "approval.contentHash: a sha256 hex digest"),
|
|
54639
54803
|
at: external_exports.string().min(1),
|
|
@@ -54659,6 +54823,9 @@ var JourneySchema = external_exports.object({
|
|
|
54659
54823
|
for (const issue3 of mutationPairIssues(j)) {
|
|
54660
54824
|
ctx.addIssue({ code: "custom", path: ["metadata", "mutationPairs", issue3.index, issue3.field], message: issue3.message });
|
|
54661
54825
|
}
|
|
54826
|
+
for (const issue3 of targetedProofPlanIssues(j)) {
|
|
54827
|
+
ctx.addIssue({ code: "custom", path: ["metadata", "targetedProofs", issue3.index, issue3.field], message: issue3.message });
|
|
54828
|
+
}
|
|
54662
54829
|
const declared = /* @__PURE__ */ new Set([...j.metadata.params, ...(j.metadata.parameters ?? []).map((p) => p.name)]);
|
|
54663
54830
|
j.recording.pages.forEach((page, pi) => page.steps.forEach((rs, si) => {
|
|
54664
54831
|
if (rs.step.kind !== "navigate")
|
|
@@ -55498,7 +55665,9 @@ var ReviewVerifySchema = external_exports.discriminatedUnion("status", [
|
|
|
55498
55665
|
/** True when the Journey changed after this proof ran (the verdict is for other content). */
|
|
55499
55666
|
stale: external_exports.boolean(),
|
|
55500
55667
|
reason: external_exports.string().optional(),
|
|
55501
|
-
summary: external_exports.record(external_exports.string(), external_exports.number())
|
|
55668
|
+
summary: external_exports.record(external_exports.string(), external_exports.number()),
|
|
55669
|
+
/** #616: a reviewable declared targeted-proof plan the automatic bound refused (names only). */
|
|
55670
|
+
suggestedTargetedProofs: external_exports.array(external_exports.object({ check: external_exports.string(), mustFailWhen: external_exports.string(), relax: external_exports.array(external_exports.string()) }).strict()).optional()
|
|
55502
55671
|
}).strict()
|
|
55503
55672
|
]);
|
|
55504
55673
|
var DiffSchema = external_exports.object({ added: external_exports.array(external_exports.string()), removed: external_exports.array(external_exports.string()) }).strict();
|
|
@@ -55518,7 +55687,9 @@ var ReviewChangeSchema = external_exports.discriminatedUnion("kind", [
|
|
|
55518
55687
|
stepIdOnly: external_exports.boolean().optional(),
|
|
55519
55688
|
steps: DiffSchema,
|
|
55520
55689
|
assertions: DiffSchema,
|
|
55521
|
-
sideEffects: DiffSchema
|
|
55690
|
+
sideEffects: DiffSchema,
|
|
55691
|
+
/** #616: proof-plan changes (`metadata.mutationPairs` / `metadata.targetedProofs`); omitted when neither side declares any. */
|
|
55692
|
+
proofPlans: DiffSchema.optional()
|
|
55522
55693
|
}).strict()
|
|
55523
55694
|
]);
|
|
55524
55695
|
var ReviewAttentionSchema = external_exports.object({
|
|
@@ -55563,6 +55734,8 @@ var JourneyReviewSchema = external_exports.object({
|
|
|
55563
55734
|
endStateText: external_exports.array(external_exports.string()).optional(),
|
|
55564
55735
|
lint: external_exports.object({ errors: external_exports.number().int(), warnings: external_exports.number().int(), findings: external_exports.array(ReviewLintFindingSchema) }).strict(),
|
|
55565
55736
|
acceptedWeak: external_exports.object({ reason: external_exports.string(), rules: external_exports.array(external_exports.string()) }).strict().optional(),
|
|
55737
|
+
/** #616: the declared targeted-proof plans (`metadata.targetedProofs`) a reviewer approves with the Journey. Additive. */
|
|
55738
|
+
targetedProofs: external_exports.array(external_exports.object({ check: external_exports.string(), mustFailWhen: external_exports.string(), relax: external_exports.array(external_exports.string()) }).strict()).optional(),
|
|
55566
55739
|
verify: ReviewVerifySchema
|
|
55567
55740
|
}).strict(),
|
|
55568
55741
|
changeSinceApproval: ReviewChangeSchema,
|
|
@@ -62534,9 +62707,9 @@ function hostStarvedFailure(failure3, health) {
|
|
|
62534
62707
|
}
|
|
62535
62708
|
|
|
62536
62709
|
// src/build-info.generated.ts
|
|
62537
|
-
var GENERATED_COMMIT = "
|
|
62538
|
-
var GENERATED_TREE = "
|
|
62539
|
-
var GENERATED_BUILT_AT = "2026-10-
|
|
62710
|
+
var GENERATED_COMMIT = "c9b33ab";
|
|
62711
|
+
var GENERATED_TREE = "35c694a";
|
|
62712
|
+
var GENERATED_BUILT_AT = "2026-10-19T23:00:10.969Z";
|
|
62540
62713
|
|
|
62541
62714
|
// src/version.ts
|
|
62542
62715
|
import { readFileSync as readFileSync5 } from "node:fs";
|
|
@@ -62558,13 +62731,13 @@ function readCliVersion() {
|
|
|
62558
62731
|
|
|
62559
62732
|
// src/engine.ts
|
|
62560
62733
|
function bundledCommit() {
|
|
62561
|
-
return true ? "
|
|
62734
|
+
return true ? "c9b33ab" : void 0;
|
|
62562
62735
|
}
|
|
62563
62736
|
function bundledBuiltAt() {
|
|
62564
|
-
return true ? "2026-10-
|
|
62737
|
+
return true ? "2026-10-19T23:00:10.969Z" : void 0;
|
|
62565
62738
|
}
|
|
62566
62739
|
function bundledTree() {
|
|
62567
|
-
return true ? "
|
|
62740
|
+
return true ? "35c694a" : void 0;
|
|
62568
62741
|
}
|
|
62569
62742
|
function currentBuildTree() {
|
|
62570
62743
|
return bundledTree() ?? GENERATED_TREE;
|
|
@@ -79986,9 +80159,11 @@ function renderSteps(r, w, opts) {
|
|
|
79986
80159
|
function renderProvesAtTheEnd(r, w, opts) {
|
|
79987
80160
|
void opts;
|
|
79988
80161
|
const endState = r.proof.endStateText ?? r.proof.endState;
|
|
79989
|
-
|
|
80162
|
+
const plans = r.proof.targetedProofs ?? [];
|
|
80163
|
+
if (endState.length > 0 || plans.length > 0) {
|
|
79990
80164
|
w.head("PROVES AT THE END", "Proves at the end");
|
|
79991
80165
|
for (const e of endState) w.put(`${w.bullet}\u2713 `, e, w.bullet.length + 2);
|
|
80166
|
+
for (const p of plans) w.put(`${w.bullet}\u21BA `, `declared targeted proof: ${p.check} against ${p.mustFailWhen} may relax ${p.relax.join(", ")}`, w.bullet.length + 2);
|
|
79992
80167
|
w.gap();
|
|
79993
80168
|
}
|
|
79994
80169
|
}
|
|
@@ -80079,7 +80254,13 @@ function renderFullDetail(r, w, opts) {
|
|
|
80079
80254
|
w.put(w.bullet, `Approved${c.approvedAt === void 0 ? "" : ` ${humanTime(c.approvedAt)}`} as ${nb(w.code(c.approvedHash))}${c.kind === "snapshot-missing" ? "; its snapshot is missing" : ""} \u2014 ${c.changed ? "CHANGED since" : "unchanged since"}`);
|
|
80080
80255
|
if (c.stepIdOnly === true) w.put(w.bullet, STEP_ID_ONLY_LABEL);
|
|
80081
80256
|
if (c.kind === "diff") {
|
|
80082
|
-
|
|
80257
|
+
const blocks = [
|
|
80258
|
+
["Steps", c.steps],
|
|
80259
|
+
["Assertions", c.assertions],
|
|
80260
|
+
["Side effects", c.sideEffects]
|
|
80261
|
+
];
|
|
80262
|
+
if (c.proofPlans !== void 0) blocks.push(["Proof plans", c.proofPlans]);
|
|
80263
|
+
for (const [label2, d] of blocks) {
|
|
80083
80264
|
if (d.added.length === 0 && d.removed.length === 0) continue;
|
|
80084
80265
|
w.put(w.bullet, `${label2}:`);
|
|
80085
80266
|
for (const l2 of d.removed) w.put(`${w.bullet} `, `\u2212 ${l2}`, w.bullet.length + 4);
|
|
@@ -80360,6 +80541,8 @@ function buildChange(journey, hash3, snapshot2, stepIdOnly) {
|
|
|
80360
80541
|
}
|
|
80361
80542
|
const approvedHash = journeyReviewHash(snapshot2);
|
|
80362
80543
|
const approvedAt = approval?.at ?? snapshot2.metadata.approval?.at;
|
|
80544
|
+
const beforePlans = proofPlanLines(snapshot2);
|
|
80545
|
+
const afterPlans = proofPlanLines(journey);
|
|
80363
80546
|
return {
|
|
80364
80547
|
kind: "diff",
|
|
80365
80548
|
approvedHash,
|
|
@@ -80368,7 +80551,9 @@ function buildChange(journey, hash3, snapshot2, stepIdOnly) {
|
|
|
80368
80551
|
...idOnly,
|
|
80369
80552
|
steps: multisetDiff(stepLines(snapshot2), stepLines(journey)),
|
|
80370
80553
|
assertions: multisetDiff(assertionLines(snapshot2), assertionLines(journey)),
|
|
80371
|
-
sideEffects: multisetDiff(sideEffectLines(snapshot2), sideEffectLines(journey))
|
|
80554
|
+
sideEffects: multisetDiff(sideEffectLines(snapshot2), sideEffectLines(journey)),
|
|
80555
|
+
// #616: only present when a side declares a proof plan, so an unrelated diff stays as before.
|
|
80556
|
+
...beforePlans.length === 0 && afterPlans.length === 0 ? {} : { proofPlans: multisetDiff(beforePlans, afterPlans) }
|
|
80372
80557
|
};
|
|
80373
80558
|
}
|
|
80374
80559
|
function stepLines(j) {
|
|
@@ -80380,6 +80565,12 @@ function assertionLines(j) {
|
|
|
80380
80565
|
...journeyAssertions(j).filter((s3) => s3.where === "step-request").map((s3) => `step request: ${describeCheck(s3.check)}`)
|
|
80381
80566
|
];
|
|
80382
80567
|
}
|
|
80568
|
+
function proofPlanLines(j) {
|
|
80569
|
+
return [
|
|
80570
|
+
...(j.metadata.mutationPairs ?? []).map((p) => `mutation pair: ${p.check} must fail when ${p.mustFailWhen}`),
|
|
80571
|
+
...(j.metadata.targetedProofs ?? []).map((p) => `targeted proof: ${p.check} against ${p.mustFailWhen} may relax ${p.relax.join(", ")}`)
|
|
80572
|
+
];
|
|
80573
|
+
}
|
|
80383
80574
|
function sideEffectLines(j) {
|
|
80384
80575
|
return [
|
|
80385
80576
|
...[...new Set(buildWriteRequests(j).map((w) => `write ${w.method} ${w.endpoint}`))],
|
|
@@ -80417,7 +80608,8 @@ function buildVerify(journey, hash3, rec) {
|
|
|
80417
80608
|
// #523: an executable-content change stales the proof; an old record without it compares the full hash.
|
|
80418
80609
|
stale: rec.proofHash === void 0 ? rec.contentHash !== hash3 : rec.proofHash !== journeyProofHash(journey),
|
|
80419
80610
|
...rec.reason === void 0 ? {} : { reason: rec.reason },
|
|
80420
|
-
summary: { ...rec.summary }
|
|
80611
|
+
summary: { ...rec.summary },
|
|
80612
|
+
...rec.suggestedTargetedProofs === void 0 ? {} : { suggestedTargetedProofs: rec.suggestedTargetedProofs.map((p) => ({ ...p, relax: [...p.relax] })) }
|
|
80421
80613
|
};
|
|
80422
80614
|
}
|
|
80423
80615
|
function buildJourneyReview(journey, ctx = {}) {
|
|
@@ -80495,6 +80687,8 @@ function buildJourneyReview(journey, ctx = {}) {
|
|
|
80495
80687
|
findings: findings.map((f2) => ({ rule: f2.rule, level: f2.level, ...f2.step === void 0 ? {} : { step: f2.step }, message: f2.message }))
|
|
80496
80688
|
},
|
|
80497
80689
|
...m.acceptedWeak === void 0 ? {} : { acceptedWeak: { reason: m.acceptedWeak.reason, rules: [...m.acceptedWeak.rules] } },
|
|
80690
|
+
// #616: the declared targeted-proof plans, copied out of the metadata for review.
|
|
80691
|
+
...m.targetedProofs === void 0 || m.targetedProofs.length === 0 ? {} : { targetedProofs: m.targetedProofs.map((p) => ({ check: p.check, mustFailWhen: p.mustFailWhen, relax: [...p.relax] })) },
|
|
80498
80692
|
verify: buildVerify(journey, hash3, ctx.lastVerify)
|
|
80499
80693
|
},
|
|
80500
80694
|
changeSinceApproval: buildChange(journey, hash3, ctx.approvedSnapshot, ctx.stepIdOnly === true),
|
|
@@ -94738,6 +94932,7 @@ var JourneyOutcomeChecks = class {
|
|
|
94738
94932
|
async #judge(s3, fallback) {
|
|
94739
94933
|
const window2 = s3.capture ?? fallback;
|
|
94740
94934
|
if (window2 === void 0) return [];
|
|
94935
|
+
const ownCapture = s3.capture !== void 0;
|
|
94741
94936
|
const since = s3.startedAt;
|
|
94742
94937
|
const until = s3.until;
|
|
94743
94938
|
const out = [];
|
|
@@ -94746,7 +94941,7 @@ var JourneyOutcomeChecks = class {
|
|
|
94746
94941
|
await evaluateNetworkCheckAwaiting(
|
|
94747
94942
|
c,
|
|
94748
94943
|
() => ({
|
|
94749
|
-
requests: window2.sent().filter((q) => (since === void 0 || q.startedAt !== void 0 && q.startedAt >= since) && (until === void 0 || q.startedAt !== void 0 && q.startedAt <= until)),
|
|
94944
|
+
requests: window2.sent().filter((q) => (ownCapture || since === void 0 || q.startedAt !== void 0 && q.startedAt >= since) && (until === void 0 || q.startedAt !== void 0 && q.startedAt <= until)),
|
|
94750
94945
|
truncated: window2.truncated
|
|
94751
94946
|
}),
|
|
94752
94947
|
s3.responseTimeoutMs ?? this.#responseTimeoutMs
|
|
@@ -109237,6 +109432,8 @@ async function verifyJourneyMutations(opts, run = runJourneyProgrammatically) {
|
|
|
109237
109432
|
const checkOf = new Map(sites.map((s3) => [assertionSiteKey(s3), describeCheck(s3.check)]));
|
|
109238
109433
|
const plan2 = planJourneyMutations(journey, { ...lintOpts, params: opts.params });
|
|
109239
109434
|
const mutations = [];
|
|
109435
|
+
const suggested = [];
|
|
109436
|
+
const seenSuggestions = /* @__PURE__ */ new Set();
|
|
109240
109437
|
if (base.outcome === "ok") {
|
|
109241
109438
|
const replayOpts2 = { ...lintOpts, params: opts.params };
|
|
109242
109439
|
const runReplay = async (m, describe6) => {
|
|
@@ -109283,7 +109480,18 @@ async function verifyJourneyMutations(opts, run = runJourneyProgrammatically) {
|
|
|
109283
109480
|
if (pair.mutation !== m.id) continue;
|
|
109284
109481
|
const site = siteByKey.get(pair.site);
|
|
109285
109482
|
if (site === void 0 || classifyMutation(site, m, initial) !== "cascade") continue;
|
|
109286
|
-
|
|
109483
|
+
const declared = declaredTargetedProofFor(journey, m, pair.site);
|
|
109484
|
+
targeted.push(
|
|
109485
|
+
declared === void 0 ? await runTargetedProof(journey, plan2, m, site, initial, (describe6) => runReplay(m, describe6), replayOpts2) : await runDeclaredTargetedProof(journey, plan2, m, site, declared, (describe6) => runReplay(m, describe6), replayOpts2)
|
|
109486
|
+
);
|
|
109487
|
+
const suggestion = suggestTargetedProofPlan(targeted[targeted.length - 1], m);
|
|
109488
|
+
if (suggestion !== null) {
|
|
109489
|
+
const key2 = `${suggestion.check}\0${suggestion.mustFailWhen}\0${suggestion.relax.join(",")}`;
|
|
109490
|
+
if (!seenSuggestions.has(key2)) {
|
|
109491
|
+
seenSuggestions.add(key2);
|
|
109492
|
+
suggested.push(suggestion);
|
|
109493
|
+
}
|
|
109494
|
+
}
|
|
109287
109495
|
}
|
|
109288
109496
|
mutations.push({
|
|
109289
109497
|
kind: m.kind,
|
|
@@ -109310,8 +109518,12 @@ async function verifyJourneyMutations(opts, run = runJourneyProgrammatically) {
|
|
|
109310
109518
|
verdict: a.verdict,
|
|
109311
109519
|
...a.provedBy === void 0 ? {} : { provedBy: a.provedBy },
|
|
109312
109520
|
...a.relaxedSites === void 0 ? {} : { relaxedSites: a.relaxedSites },
|
|
109313
|
-
...a.targetedRefusal === void 0 ? {} : { targetedRefusal: a.targetedRefusal }
|
|
109521
|
+
...a.targetedRefusal === void 0 ? {} : { targetedRefusal: a.targetedRefusal },
|
|
109522
|
+
// #616: the proving proof was a declared plan, not the automatic relaxation search.
|
|
109523
|
+
...a.provedBy !== void 0 && results.get(a.provedBy)?.targeted?.some((t) => t.site === a.site && t.declared === true) === true ? { declaredProof: true } : {}
|
|
109314
109524
|
}));
|
|
109525
|
+
const order = new Map(journeyAssertions(journey).map((s3, i) => [assertionSiteKey(s3), i]));
|
|
109526
|
+
const siteOrder = (key2) => order.get(key2) ?? Number.MAX_SAFE_INTEGER;
|
|
109315
109527
|
const { verdict, reason } = mutationProofVerdict({ basePassed: base.outcome === "ok", mutations, assertions: judged });
|
|
109316
109528
|
const count = (v) => assertions.filter((a) => a.verdict === v).length;
|
|
109317
109529
|
const report2 = {
|
|
@@ -109331,7 +109543,9 @@ async function verifyJourneyMutations(opts, run = runJourneyProgrammatically) {
|
|
|
109331
109543
|
unpaired: count("unpaired"),
|
|
109332
109544
|
// #609: assertions proven sensitive through a targeted proof that relaxed earlier sites.
|
|
109333
109545
|
targeted: assertions.filter((a) => (a.relaxedSites?.length ?? 0) > 0).length
|
|
109334
|
-
}
|
|
109546
|
+
},
|
|
109547
|
+
// #616: in assertion order, so the first suggestion is the one for the refusal the verdict quotes.
|
|
109548
|
+
...suggested.length === 0 ? {} : { suggestedTargetedProofs: [...suggested].sort((a, b2) => siteOrder(a.check) - siteOrder(b2.check)) }
|
|
109335
109549
|
};
|
|
109336
109550
|
const redacted = redactSecretParams(report2, journey, opts.params);
|
|
109337
109551
|
await writeVerifyRecord(opts.dir, {
|
|
@@ -109341,12 +109555,13 @@ async function verifyJourneyMutations(opts, run = runJourneyProgrammatically) {
|
|
|
109341
109555
|
verdict: redacted.verdict,
|
|
109342
109556
|
...redacted.reason === void 0 ? {} : { reason: redacted.reason },
|
|
109343
109557
|
summary: { ...redacted.summary },
|
|
109558
|
+
...redacted.suggestedTargetedProofs === void 0 ? {} : { suggestedTargetedProofs: redacted.suggestedTargetedProofs },
|
|
109344
109559
|
at: clock.nowIso()
|
|
109345
109560
|
});
|
|
109346
109561
|
return redacted;
|
|
109347
109562
|
}
|
|
109348
109563
|
function verifyAssertionLine(a) {
|
|
109349
|
-
const relaxed2 = a.relaxedSites === void 0 || a.relaxedSites.length === 0 ? "" : `, relaxed ${a.relaxedSites.join(", ")}`;
|
|
109564
|
+
const relaxed2 = a.relaxedSites === void 0 || a.relaxedSites.length === 0 ? "" : a.declaredProof === true ? `, declared plan relaxed ${a.relaxedSites.join(", ")}` : `, relaxed ${a.relaxedSites.join(", ")}`;
|
|
109350
109565
|
const proved = a.provedBy === void 0 ? "" : ` (proved by ${a.provedBy}${relaxed2})`;
|
|
109351
109566
|
const refused = a.targetedRefusal === void 0 ? "" : ` (targeted proof refused: ${a.targetedRefusal})`;
|
|
109352
109567
|
return `${a.verdict.padEnd(11)} ${a.site.padEnd(18)} ${a.check}${proved}${refused}`;
|
|
@@ -109507,13 +109722,14 @@ function proofCheck(ctx, journeysDir, cwd) {
|
|
|
109507
109722
|
if (nothingToMutate(ctx.journey, verify2.summary)) {
|
|
109508
109723
|
return { check: { check: "proof", journey: ctx.id, state: "pass", detail: "read-only with no inputs: nothing a mutation could break", evidence } };
|
|
109509
109724
|
}
|
|
109725
|
+
const suggested = verify2.status === "recorded" ? verify2.suggestedTargetedProofs : void 0;
|
|
109510
109726
|
return {
|
|
109511
109727
|
check: { check: "proof", journey: ctx.id, state: "inconclusive", detail: verify2.reason ?? `proof verdict ${verify2.verdict}`, evidence },
|
|
109512
|
-
blocker: { check: "proof", journey: ctx.id, why: inconclusiveProofGuidance(verify2.reason ?? ""), next: `jevitate journey verify ${ctx.id} --mutate` }
|
|
109728
|
+
blocker: { check: "proof", journey: ctx.id, why: inconclusiveProofGuidance(verify2.reason ?? "", suggested), next: `jevitate journey verify ${ctx.id} --mutate` }
|
|
109513
109729
|
};
|
|
109514
109730
|
}
|
|
109515
109731
|
var TARGETED_REFUSAL_MARKER = "a targeted proof was refused: ";
|
|
109516
|
-
function inconclusiveProofGuidance(reason) {
|
|
109732
|
+
function inconclusiveProofGuidance(reason, suggested) {
|
|
109517
109733
|
const at3 = reason.indexOf(TARGETED_REFUSAL_MARKER);
|
|
109518
109734
|
if (at3 < 0) return "inspect the cascade assertions in the verify report";
|
|
109519
109735
|
const refusal = reason.slice(at3 + TARGETED_REFUSAL_MARKER.length).trim();
|
|
@@ -109522,7 +109738,15 @@ function inconclusiveProofGuidance(reason) {
|
|
|
109522
109738
|
return `declare the earlier check ${unpaired[1]} as a defense of ${unpaired[2]} with a metadata.mutationPairs entry {check:'${unpaired[1]}', mustFailWhen:'${unpaired[2]}'}, then re-run verify`;
|
|
109523
109739
|
}
|
|
109524
109740
|
const bound2 = /relaxation bound (\d+)/.exec(refusal);
|
|
109525
|
-
if (bound2 !== null)
|
|
109741
|
+
if (bound2 !== null) {
|
|
109742
|
+
const first = suggested?.[0];
|
|
109743
|
+
const plan2 = first === void 0 ? `declare a metadata.targetedProofs plan (at most ${MAX_DECLARED_RELAXATIONS} earlier postconditions)` : `declare exactly this metadata.targetedProofs entry: ${JSON.stringify(first)} \u2014 a human reviews it like any other proof change (the review hash changes, so the Journey needs re-approval)`;
|
|
109744
|
+
return `${plan2}, then re-run verify (relaxation bound ${bound2[1]})`;
|
|
109745
|
+
}
|
|
109746
|
+
const blocked = /^(\S+) blocked the declared proof \(not in relax\)$/.exec(refusal);
|
|
109747
|
+
if (blocked !== null) return `add ${blocked[1]} to that plan's relax list (metadata.targetedProofs), then re-run verify`;
|
|
109748
|
+
const unsound = /^relaxed site (\S+) is not itself proven sensitive to (\S+)$/.exec(refusal);
|
|
109749
|
+
if (unsound !== null) return `pair ${unsound[1]} with ${unsound[2]} (metadata.mutationPairs) or make it a real defense, then re-run verify`;
|
|
109526
109750
|
if (refusal.includes("action failed")) return "the mutated value makes an earlier action impossible, so that target cannot be proven independently \u2014 keep the check; it stays inconclusive by design";
|
|
109527
109751
|
return "inspect the cascade assertions in the verify report";
|
|
109528
109752
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// this plain `tsc --build` dist (no bundler substitution), so it needs real committed values
|
|
6
6
|
// here instead. See ./engine.ts, which prefers the esbuild-injected value when present and
|
|
7
7
|
// falls back to these.
|
|
8
|
-
export const GENERATED_COMMIT = "
|
|
9
|
-
export const GENERATED_TREE = "
|
|
10
|
-
export const GENERATED_BUILT_AT = "2026-10-
|
|
8
|
+
export const GENERATED_COMMIT = "c9b33ab";
|
|
9
|
+
export const GENERATED_TREE = "35c694a";
|
|
10
|
+
export const GENERATED_BUILT_AT = "2026-10-19T23:00:05.032Z";
|
|
11
11
|
//# sourceMappingURL=build-info.generated.js.map
|
|
@@ -93,6 +93,11 @@ export class JourneyOutcomeChecks {
|
|
|
93
93
|
const window = s.capture ?? fallback;
|
|
94
94
|
if (window === undefined)
|
|
95
95
|
return [];
|
|
96
|
+
// #617: a step with its OWN capture (every started window) is judged by IDENTITY — `sent()`
|
|
97
|
+
// already lists only the requests that capture saw begin, so a request from an earlier attempt
|
|
98
|
+
// (or a previous step) cannot be admitted by a timestamp. `since` is kept only for the
|
|
99
|
+
// fallback path (no step boundary was reported: the whole-replay capture needs the cut).
|
|
100
|
+
const ownCapture = s.capture !== undefined;
|
|
96
101
|
const since = s.startedAt;
|
|
97
102
|
const until = s.until;
|
|
98
103
|
const out = [];
|
|
@@ -101,7 +106,8 @@ export class JourneyOutcomeChecks {
|
|
|
101
106
|
out.push(await evaluateNetworkCheckAwaiting(c, () => ({
|
|
102
107
|
requests: window
|
|
103
108
|
.sent()
|
|
104
|
-
.filter((q) => (since === undefined || (q.startedAt !== undefined && q.startedAt >= since)) &&
|
|
109
|
+
.filter((q) => ((ownCapture || since === undefined || (q.startedAt !== undefined && q.startedAt >= since)) &&
|
|
110
|
+
(until === undefined || (q.startedAt !== undefined && q.startedAt <= until)))),
|
|
105
111
|
truncated: window.truncated,
|
|
106
112
|
}), s.responseTimeoutMs ?? this.#responseTimeoutMs));
|
|
107
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"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"}
|