@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 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
- /** @internal — fed by the page's monitor. */
39700
- add(r) {
39701
- this.#requests.push(r);
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 [...this.#requests];
39733
+ return this.#requests.map((e) => e.r);
39726
39734
  }
39727
39735
  /**
39728
- * Every request SENT since the capture started (#283): the finished ones (`requests()`), then the
39729
- * ones still in flight or abandoned without an end event (`pending: true`, `status: null`). A
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 [...this.#requests, ...this.#unfinished, ...this.#inflight.values()];
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 proof = proofFor(first.m, key2);
54042
- return proof !== void 0 && proof.refused === void 0 ? { site: key2, verdict: v, provedBy: first.m.id, relaxedSites: proof.relaxedSites } : { site: key2, verdict: v, provedBy: first.m.id };
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 = "0a3d2f5";
62538
- var GENERATED_TREE = "963f59f";
62539
- var GENERATED_BUILT_AT = "2026-10-19T17:41:04.191Z";
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 ? "0a3d2f5" : void 0;
62734
+ return true ? "c9b33ab" : void 0;
62562
62735
  }
62563
62736
  function bundledBuiltAt() {
62564
- return true ? "2026-10-19T17:41:04.191Z" : void 0;
62737
+ return true ? "2026-10-19T23:00:10.969Z" : void 0;
62565
62738
  }
62566
62739
  function bundledTree() {
62567
- return true ? "963f59f" : void 0;
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
- if (endState.length > 0) {
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
- for (const [label2, d] of [["Steps", c.steps], ["Assertions", c.assertions], ["Side effects", c.sideEffects]]) {
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
- targeted.push(await runTargetedProof(journey, plan2, m, site, initial, (describe6) => runReplay(m, describe6), replayOpts2));
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) return `reduce the layered checks between the mutation and the target (relaxation bound ${bound2[1]})`;
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 = "0a3d2f5";
9
- export const GENERATED_TREE = "963f59f";
10
- export const GENERATED_BUILT_AT = "2026-10-19T17:40:57.283Z";
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)) && (until === undefined || (q.startedAt !== undefined && q.startedAt <= until))),
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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"}