@jevitate/cli 0.22.0 → 0.23.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
@@ -35260,9 +35260,9 @@ async function confineFixture(raw, root2) {
35260
35260
  }
35261
35261
  if (!isFile)
35262
35262
  throw fixtureNotFound(candidate, root2);
35263
- const sensitive = fixtureSensitiveReason(real, realRoot) ?? (isInsideRoot(candidate, resolve3(root2)) ? fixtureSensitiveReason(candidate, resolve3(root2)) : null);
35264
- if (sensitive !== null)
35265
- throw fixtureSensitive(candidate, root2, sensitive);
35263
+ const sensitive2 = fixtureSensitiveReason(real, realRoot) ?? (isInsideRoot(candidate, resolve3(root2)) ? fixtureSensitiveReason(candidate, resolve3(root2)) : null);
35264
+ if (sensitive2 !== null)
35265
+ throw fixtureSensitive(candidate, root2, sensitive2);
35266
35266
  return real;
35267
35267
  }
35268
35268
  function fixtureEscapesRoot(raw, root2) {
@@ -39592,6 +39592,59 @@ async function clockBounded(work, ms, onTimeout) {
39592
39592
  }
39593
39593
  }
39594
39594
 
39595
+ // ../explore/dist/request-body-values.js
39596
+ var MIN_VALUE_CHARS = 3;
39597
+ var MAX_VALUES = 50;
39598
+ var MAX_BODY_CHARS = 64e3;
39599
+ var SENSITIVE_WORDS = /* @__PURE__ */ new Set(["pass", "password", "passwd", "pwd", "secret", "token", "auth", "authorization", "apikey", "key", "otp", "pin", "cvv", "cvc", "card", "ssn", "session", "cookie", "signature", "credential", "credentials"]);
39600
+ function sensitive(key2) {
39601
+ return key2.split(/[^A-Za-z0-9]+|(?<=[a-z0-9])(?=[A-Z])/).some((w) => SENSITIVE_WORDS.has(w.toLowerCase()));
39602
+ }
39603
+ function keep(out, key2, value) {
39604
+ if (out.length >= MAX_VALUES)
39605
+ return;
39606
+ if (key2 !== null && sensitive(key2))
39607
+ return;
39608
+ const v = value.replace(/\s+/g, " ").trim();
39609
+ if (v.length >= MIN_VALUE_CHARS)
39610
+ out.push(v);
39611
+ }
39612
+ function walk(out, key2, node2) {
39613
+ if (out.length >= MAX_VALUES)
39614
+ return;
39615
+ if (typeof node2 === "string")
39616
+ keep(out, key2, node2);
39617
+ else if (Array.isArray(node2))
39618
+ for (const item of node2)
39619
+ walk(out, key2, item);
39620
+ else if (node2 !== null && typeof node2 === "object") {
39621
+ for (const [k, v] of Object.entries(node2)) {
39622
+ if (sensitive(k))
39623
+ continue;
39624
+ walk(out, k, v);
39625
+ }
39626
+ }
39627
+ }
39628
+ function bodyValues(body, contentType) {
39629
+ if (body === null || body === "" || body.length > MAX_BODY_CHARS)
39630
+ return [];
39631
+ const type = (contentType ?? "").toLowerCase();
39632
+ const out = [];
39633
+ if (type.includes("application/x-www-form-urlencoded")) {
39634
+ for (const [k, v] of new URLSearchParams(body))
39635
+ keep(out, k, v);
39636
+ return out;
39637
+ }
39638
+ if (type === "" || type.includes("json")) {
39639
+ try {
39640
+ walk(out, null, JSON.parse(body));
39641
+ } catch {
39642
+ return [];
39643
+ }
39644
+ }
39645
+ return out;
39646
+ }
39647
+
39595
39648
  // ../explore/dist/page-monitor.js
39596
39649
  var RPC_TRAILER_READ_MS = 2e3;
39597
39650
  var INTERACTIVE_SELECTOR2 = "a[href],button,input:not([type=hidden]),select,textarea,[role=button],[role=link],[role=textbox],[role=checkbox],[role=combobox],[contenteditable=true]";
@@ -39797,6 +39850,8 @@ function pathOf3(url2) {
39797
39850
  return url2.split(/[?#]/)[0] ?? url2;
39798
39851
  }
39799
39852
  }
39853
+ var BODY_METHODS = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH"]);
39854
+ var MAX_WRITE_BODIES = 200;
39800
39855
  function requestContentTypeOf(r) {
39801
39856
  try {
39802
39857
  const v = r.headers()["content-type"];
@@ -39809,6 +39864,8 @@ var RECENT_REQUESTS_MS = 6e4;
39809
39864
  var PageMonitor = class {
39810
39865
  #page;
39811
39866
  #inflight = /* @__PURE__ */ new Map();
39867
+ /** #649: the string values recent writes sent in their bodies (memory only; never persisted). */
39868
+ #writeBodies = [];
39812
39869
  #completed = [];
39813
39870
  #wakers = /* @__PURE__ */ new Set();
39814
39871
  #statuses = /* @__PURE__ */ new WeakMap();
@@ -39846,6 +39903,18 @@ var PageMonitor = class {
39846
39903
  startedAt,
39847
39904
  ...requestContentType2 === void 0 ? {} : { requestContentType: requestContentType2 }
39848
39905
  });
39906
+ if (BODY_METHODS.has(r.method().toUpperCase())) {
39907
+ let values2 = [];
39908
+ try {
39909
+ values2 = bodyValues(r.postData(), requestContentType2);
39910
+ } catch {
39911
+ }
39912
+ if (values2.length > 0) {
39913
+ this.#writeBodies.push({ startedAt, url: r.url(), values: values2 });
39914
+ if (this.#writeBodies.length > MAX_WRITE_BODIES)
39915
+ this.#writeBodies.shift();
39916
+ }
39917
+ }
39849
39918
  for (const c of this.#captures) {
39850
39919
  c.began(r, {
39851
39920
  method: r.method().toUpperCase(),
@@ -40097,6 +40166,10 @@ var PageMonitor = class {
40097
40166
  clock.clearTimeout(timer);
40098
40167
  }
40099
40168
  }
40169
+ /** #649: the string values the writes started since `sinceMs` sent, from URLs `keep` accepts. */
40170
+ writeBodyValuesSince(sinceMs, keep2) {
40171
+ return this.#writeBodies.filter((w) => w.startedAt >= sinceMs && keep2(w.url)).flatMap((w) => w.values);
40172
+ }
40100
40173
  /** Requests that ended since `sinceMs` (wall clock). */
40101
40174
  completedSince(sinceMs) {
40102
40175
  return this.#completed.filter((r) => r.endedAt >= sinceMs);
@@ -41129,8 +41202,8 @@ function boundCandidates(candidates, opts) {
41129
41202
  return s3;
41130
41203
  };
41131
41204
  const ranked = candidates.map((c, i) => ({ c, i, s: score2(c, i) })).sort((a, b2) => b2.s - a.s || a.i - b2.i).slice(0, Math.max(0, opts.limit));
41132
- const keep = new Set(ranked.map((r) => r.i));
41133
- return { kept: candidates.filter((_, i) => keep.has(i)), omitted: candidates.length - keep.size };
41205
+ const keep2 = new Set(ranked.map((r) => r.i));
41206
+ return { kept: candidates.filter((_, i) => keep2.has(i)), omitted: candidates.length - keep2.size };
41134
41207
  }
41135
41208
 
41136
41209
  // ../explore/dist/stuck-actions.js
@@ -41415,7 +41488,8 @@ var SideEffectGuard = class {
41415
41488
  const own2 = requests.filter((r) => this.#ours(r));
41416
41489
  const settled = !inflightAny && own2.every((r) => r.status !== null && r.status >= 200 && r.status < 300);
41417
41490
  const completedOk = own2.length > 0 && settled;
41418
- this.#lastClick = { requestSent: requests.length > 0 || inflightAny, writes: [...done, ...pending], completedOk, settled };
41491
+ const sentValues = this.#monitor.writeBodyValuesSince(o.at, (url2) => this.#ours({ url: url2 }));
41492
+ this.#lastClick = { requestSent: requests.length > 0 || inflightAny, writes: [...done, ...pending], completedOk, settled, sentValues };
41419
41493
  if (done.length + pending.length === 0)
41420
41494
  return;
41421
41495
  this.#fired.set(o.key, {
@@ -41921,6 +41995,7 @@ var UnsubmittedTypeTracker = class {
41921
41995
  var GOAL_MET_THRESHOLD = 0.75;
41922
41996
  var GOAL_CHECK_TRIGGER = 0.5;
41923
41997
  var WRITES_DONE_NOTE = "the job's writes succeeded; the page shows no change (repeat data?)";
41998
+ var READ_BACK_DONE_NOTE = "the job's writes succeeded and a page loaded from the server shows what they sent";
41924
41999
  function groundDone(e) {
41925
42000
  if (e.unsubmitted.length > 0) {
41926
42001
  return { accept: false, reason: `typed text in ${e.unsubmitted.map((l2) => `"${l2}"`).join(", ")} was never submitted` };
@@ -41946,6 +42021,9 @@ function groundDone(e) {
41946
42021
  if (w !== void 0 && writesAllSucceeded(w) && w.goalIsWrites !== null && w.goalIsWrites >= GOAL_MET_THRESHOLD) {
41947
42022
  return { accept: true, outcome: { status: "completed", verifiedBy: "succeeded-writes", note: WRITES_DONE_NOTE } };
41948
42023
  }
42024
+ if (w !== void 0 && writesAllSucceeded(w) && e.readBack === true && p >= GOAL_CHECK_TRIGGER) {
42025
+ return { accept: true, outcome: { status: "completed", verifiedBy: "succeeded-writes", note: READ_BACK_DONE_NOTE } };
42026
+ }
41949
42027
  const notMet = `the goal is not observably achieved on this page (p=${p.toFixed(2)})`;
41950
42028
  if (w !== void 0 && writesAllSucceeded(w) && w.goalIsWrites !== null) {
41951
42029
  return { accept: false, reason: `${notMet}; the job's writes succeeded, but they are not judged to be the whole goal (p=${w.goalIsWrites.toFixed(2)})` };
@@ -45583,6 +45661,41 @@ var ObservedPages = class {
45583
45661
  if (document2 !== void 0)
45584
45662
  this.#writeDocument = document2;
45585
45663
  }
45664
+ /**
45665
+ * #649: a sent value the run did not type (a write's request body: a prefilled import's rows) that
45666
+ * a page on the write's own route already showed before the write — its source, not a copy the app
45667
+ * kept. Only a page on another route reads it back: reloading the source shows it either way.
45668
+ */
45669
+ #sourceRoute = /* @__PURE__ */ new Map();
45670
+ /** #649: a write's body values the run did not type, decided on the next page seen (see `add`). */
45671
+ #pendingSent = null;
45672
+ /**
45673
+ * #649: a successful write the run fired sent `values` in its body, from a page on `url`. One the run
45674
+ * did not type awaits read-back like a typed one only when the next page shows it as NEW text — text
45675
+ * no earlier page on that route showed (an import's rows listed from its CSV; never a form's
45676
+ * untouched prefilled fields, still only in their fields). Decided when that page is added.
45677
+ */
45678
+ noteSentValues(values2, url2) {
45679
+ const own2 = /* @__PURE__ */ new Set([...this.#ownInputs, ...this.#unread]);
45680
+ const fresh = values2.map((value) => fold(redactContext(value, this.secrets).slice(0, OBSERVED_FIELD_CHARS))).filter((v) => v !== "" && !own2.has(v));
45681
+ this.#pendingSent = fresh.length === 0 ? null : { route: routeOf(url2), values: fresh };
45682
+ }
45683
+ /** #649: the pending body values `text` (the page after the write) newly shows await read-back. */
45684
+ #settleSent(text2) {
45685
+ const pending = this.#pendingSent;
45686
+ if (pending === null)
45687
+ return;
45688
+ this.#pendingSent = null;
45689
+ const now2 = fold(text2);
45690
+ const before = this.#pages.filter((p) => routeOf(p.url) === pending.route);
45691
+ for (const v of pending.values) {
45692
+ if (!now2.includes(v) || before.some((p) => fold(p.text).includes(v)))
45693
+ continue;
45694
+ this.#unread.add(v);
45695
+ if (before.some((p) => (p.fields ?? []).some((f2) => fold(f2.value).includes(v))))
45696
+ this.#sourceRoute.set(v, pending.route);
45697
+ }
45698
+ }
45586
45699
  /** #647: the run's sent values (folded) that no page loaded from the server since has shown. */
45587
45700
  unreadWrites() {
45588
45701
  return this.#unread;
@@ -45596,15 +45709,28 @@ var ObservedPages = class {
45596
45709
  * #647: a page from a later document load than the write shows `shown` (its visible text, or field
45597
45710
  * values): the sent values it contains are read back from the app. Returns those values.
45598
45711
  */
45599
- readBack(document2, shown2) {
45712
+ readBack(document2, shown2, url2) {
45600
45713
  if (this.#unread.size === 0 || document2 === void 0 || document2 === this.#writeDocument)
45601
45714
  return [];
45602
45715
  const text2 = fold(shown2);
45603
- const back = [...this.#unread].filter((v) => text2.includes(v));
45604
- for (const v of back)
45716
+ const route = url2 === void 0 ? void 0 : routeOf(url2);
45717
+ const back = [...this.#unread].filter((v) => text2.includes(v) && (route === void 0 || this.#sourceRoute.get(v) !== route));
45718
+ for (const v of back) {
45605
45719
  this.#unread.delete(v);
45720
+ this.#sourceRoute.delete(v);
45721
+ }
45722
+ this.#readBackCount += back.length;
45606
45723
  return back;
45607
45724
  }
45725
+ /** #645: how many sent values a page loaded from the server has shown again. */
45726
+ #readBackCount = 0;
45727
+ /**
45728
+ * #645: the app was seen to keep what the run's writes sent — at least one value was read back and
45729
+ * none is still unread. Code evidence the page judgment lacks (see `groundDone`).
45730
+ */
45731
+ readBackConfirmed() {
45732
+ return this.#readBackCount > 0 && this.#unread.size === 0;
45733
+ }
45608
45734
  /** #239: the run's own typed, not-yet-saved values (folded). */
45609
45735
  ownInputs() {
45610
45736
  return this.#ownInputs;
@@ -45617,9 +45743,9 @@ var ObservedPages = class {
45617
45743
  const clip5 = (h) => redactContext((h ?? "").replace(/\s+/g, " ").trim(), this.secrets).slice(0, HEADING_CHARS);
45618
45744
  const heading = clip5(headings2.heading);
45619
45745
  const title = clip5(headings2.title);
45620
- const keep = (xs) => (xs ?? []).slice(0, MAX_OBSERVED_CONTROLS).map((n3) => redactContext(n3.replace(/\s+/g, " ").trim(), this.secrets).slice(0, OBSERVED_FIELD_CHARS)).filter((n3) => n3 !== "");
45621
- const names = keep(headings2.controlNames);
45622
- const links = keep(headings2.contentLinks);
45746
+ const keep2 = (xs) => (xs ?? []).slice(0, MAX_OBSERVED_CONTROLS).map((n3) => redactContext(n3.replace(/\s+/g, " ").trim(), this.secrets).slice(0, OBSERVED_FIELD_CHARS)).filter((n3) => n3 !== "");
45747
+ const names = keep2(headings2.controlNames);
45748
+ const links = keep2(headings2.contentLinks);
45623
45749
  const capped = (headings2.controlNames ?? []).length > MAX_OBSERVED_CONTROLS || (headings2.contentLinks ?? []).length > MAX_OBSERVED_CONTROLS;
45624
45750
  const incomplete = [headings2.inventoryIncomplete ?? "", capped ? `more than ${MAX_OBSERVED_CONTROLS} controls were kept` : ""].filter((x) => x !== "").join("; ");
45625
45751
  const status = headings2.status;
@@ -45639,7 +45765,8 @@ var ObservedPages = class {
45639
45765
  if (nav.length > 0)
45640
45766
  this.#topNav = nav;
45641
45767
  }
45642
- this.readBack(headings2.document, [page.text, ...kept.map((f2) => f2.value)].join("\n"));
45768
+ this.#settleSent(page.text);
45769
+ this.readBack(headings2.document, [page.text, ...kept.map((f2) => f2.value)].join("\n"), url2);
45643
45770
  if (page.text.trim() === "" && kept.length === 0)
45644
45771
  return;
45645
45772
  const same = (p) => JSON.stringify(p.fields ?? []) === JSON.stringify(page.fields ?? []) && p.heading === page.heading && p.title === page.title && p.status === page.status && JSON.stringify(p.controls ?? []) === JSON.stringify(page.controls ?? []) && JSON.stringify(p.contentLinks ?? []) === JSON.stringify(page.contentLinks ?? []) && p.inventoryIncomplete === page.inventoryIncomplete;
@@ -45655,6 +45782,13 @@ var ObservedPages = class {
45655
45782
  return [...this.#pages].reverse();
45656
45783
  }
45657
45784
  };
45785
+ function routeOf(url2) {
45786
+ try {
45787
+ return new URL(url2).pathname;
45788
+ } catch {
45789
+ return url2.split(/[?#]/)[0] ?? url2;
45790
+ }
45791
+ }
45658
45792
  function pathOf6(url2) {
45659
45793
  try {
45660
45794
  const u = new URL(url2);
@@ -48165,7 +48299,8 @@ function newStep(ctx, input2) {
48165
48299
  ...goalMet === void 0 ? {} : { goalMetProbability: goalMet },
48166
48300
  ...signIn === null || goalMet === void 0 ? {} : { signIn: { completed: signIn.completed, goalIsSignIn } },
48167
48301
  ...saved === null || goalMet === void 0 ? {} : { save: { completed: saved.completed, goalIsSave } },
48168
- ...writes === void 0 || goalMet === void 0 ? {} : { writes: { ...writes, goalIsWrites } }
48302
+ ...writes === void 0 || goalMet === void 0 ? {} : { writes: { ...writes, goalIsWrites } },
48303
+ ...writes === void 0 ? {} : { readBack: ctx.observed.readBackConfirmed() }
48169
48304
  });
48170
48305
  const judgments = {};
48171
48306
  if (goalMet !== void 0 && goalMet !== null)
@@ -48218,7 +48353,7 @@ async function readBackProbe(ctx, step) {
48218
48353
  return [];
48219
48354
  const text2 = await readPageText(ctx.page, ctx.secrets).catch(() => "");
48220
48355
  const values2 = await ctx.page.evaluate(() => Array.from(document.querySelectorAll("input, textarea, select")).filter((e) => e.type !== "password").map((e) => e.value ?? "")).catch(() => []);
48221
- const back = ctx.observed.readBack(await documentOf(ctx.page), redactPageText([text2, ...values2].join("\n"), ctx.secrets));
48356
+ const back = ctx.observed.readBack(await documentOf(ctx.page), redactPageText([text2, ...values2].join("\n"), ctx.secrets), ctx.page.url());
48222
48357
  const listed2 = (vs) => vs.map((v) => `"${v}"`).join(", ");
48223
48358
  const missing = unread.filter((v) => !back.includes(v));
48224
48359
  ctx.history.push(missing.length === 0 ? `read back after a reload: the page loaded from the server shows what the run sent (${listed2(back)})` : `after a reload, the page loaded from the server no longer shows what the run sent (${listed2(missing)})`);
@@ -49396,6 +49531,7 @@ async function perceiveStep(ctx) {
49396
49531
  if (lc !== null && lc !== ctx.settledClick) {
49397
49532
  ctx.settledClick = lc;
49398
49533
  if (lc.writes.length > 0 && lc.writes.every((w) => w.status !== null && w.status >= 200 && w.status < 300)) {
49534
+ ctx.observed.noteSentValues(lc.sentValues, ctx.page.url());
49399
49535
  ctx.observed.confirmOwnInputs(await documentOf(ctx.page));
49400
49536
  ctx.wroteOk = true;
49401
49537
  }
@@ -49947,6 +50083,7 @@ async function viewPage(ctx, step) {
49947
50083
  } catch {
49948
50084
  }
49949
50085
  const document2 = await documentOf(ctx.page);
50086
+ const unreadBefore = [...ctx.observed.unreadWrites()];
49950
50087
  ctx.observed.add(snap.url, visibleText, [...controlFields(snap.controls), ...richFields], {
49951
50088
  ...await readPageHeadings(ctx.page, ctx.secrets),
49952
50089
  // #647: which document load this is — a later one that shows a sent value reads it back.
@@ -49963,6 +50100,13 @@ async function viewPage(ctx, step) {
49963
50100
  navLinks: snap.controls.filter((c) => c.role === "link" && (c.landmark === "navigation" || c.landmark === "banner")).flatMap((c) => typeof c.href === "string" && c.href !== "" ? [c.href] : []),
49964
50101
  ...ctx.documentStatus.has(ctx.docKey(ctx.page.url())) ? { status: ctx.documentStatus.get(ctx.docKey(ctx.page.url())) } : {}
49965
50102
  });
50103
+ {
50104
+ const now2 = ctx.observed.unreadWrites();
50105
+ const back = unreadBefore.filter((v) => !now2.has(v));
50106
+ if (back.length > 0) {
50107
+ ctx.history.push(`read back: this page, loaded from the server, shows what the run sent (${back.map((v) => `"${v}"`).join(", ")}) \u2014 the app kept it`);
50108
+ }
50109
+ }
49966
50110
  ctx.noteReplyText(snap.url, visibleText);
49967
50111
  ctx.depth.noteState(snap.signature, snap.url);
49968
50112
  {
@@ -53257,13 +53401,13 @@ function lintUploadFixtures(journey, baseDir) {
53257
53401
  });
53258
53402
  continue;
53259
53403
  }
53260
- const sensitive = fixtureSensitiveReason(real, realRootOf(baseDir)) ?? fixtureSensitiveReason(candidate, resolve5(baseDir));
53261
- if (sensitive !== null) {
53404
+ const sensitive2 = fixtureSensitiveReason(real, realRootOf(baseDir)) ?? fixtureSensitiveReason(candidate, resolve5(baseDir));
53405
+ if (sensitive2 !== null) {
53262
53406
  findings.push({
53263
53407
  rule: "upload-sensitive-file",
53264
53408
  level: "error",
53265
53409
  step: i + 1,
53266
- message: `step ${i + 1}: upload fixture ${candidate} looks sensitive (${sensitive})`,
53410
+ message: `step ${i + 1}: upload fixture ${candidate} looks sensitive (${sensitive2})`,
53267
53411
  fix: "use a dedicated test fixture file"
53268
53412
  });
53269
53413
  continue;
@@ -53388,7 +53532,7 @@ function lintJourney(journey, opts = {}) {
53388
53532
  const refsBound = (a) => assertionRefsBound(journey, a);
53389
53533
  const effects = sites.filter((site) => isEffectSite(site, site.where === "step" ? stepOf(site.step) : void 0, refsBound));
53390
53534
  const endEffects = effects.filter((site) => site.where === "end-state");
53391
- const effectAt = (n3) => effects.some((site) => (site.where === "step" || site.where === "step-request") && site.step === n3);
53535
+ const effectAt = (n3) => recorded[n3 - 1]?.step.kind === "waitFor" || effects.some((site) => (site.where === "step" || site.where === "step-request") && site.step === n3);
53392
53536
  const writeRequests = recorded.map((r) => writeRequestsOf(r, classify2));
53393
53537
  const isWrite2 = recorded.map((r, i) => isWriteStep(r, classify2, writeRequests[i]));
53394
53538
  const lastWrite = isWrite2.lastIndexOf(true) + 1;
@@ -53591,9 +53735,9 @@ function splitBudget(total, stops) {
53591
53735
  var CLAIM_KEYS = /* @__PURE__ */ new Set(["expect", "check", "resume", "waitFor"]);
53592
53736
  function actionRefs(step) {
53593
53737
  const out = /* @__PURE__ */ new Set();
53594
- const walk = (v) => {
53738
+ const walk2 = (v) => {
53595
53739
  if (Array.isArray(v)) {
53596
- v.forEach(walk);
53740
+ v.forEach(walk2);
53597
53741
  return;
53598
53742
  }
53599
53743
  if (v === null || typeof v !== "object")
@@ -53608,9 +53752,9 @@ function actionRefs(step) {
53608
53752
  out.add(n3);
53609
53753
  for (const [k, x] of Object.entries(o))
53610
53754
  if (!CLAIM_KEYS.has(k))
53611
- walk(x);
53755
+ walk2(x);
53612
53756
  };
53613
- walk(step);
53757
+ walk2(step);
53614
53758
  return [...out];
53615
53759
  }
53616
53760
  function sitePageAssertion(site) {
@@ -57407,7 +57551,7 @@ function seedPath(seedUrl) {
57407
57551
  }
57408
57552
 
57409
57553
  // ../explore/dist/adversarial/scope.js
57410
- function routeOf(url2) {
57554
+ function routeOf2(url2) {
57411
57555
  const path2 = new URL(url2).pathname;
57412
57556
  return path2.length > 1 && path2.endsWith("/") ? path2.slice(0, -1) : path2;
57413
57557
  }
@@ -57427,7 +57571,7 @@ function startRouteGlobs(startUrl) {
57427
57571
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
57428
57572
  throw new ScopeUnderivableError(`a ${parsed.protocol} URL has no route`);
57429
57573
  }
57430
- const route = routeOf(startUrl);
57574
+ const route = routeOf2(startUrl);
57431
57575
  return route === "/" ? ["/", "/**"] : [route, `${route}/`, `${route}/**`];
57432
57576
  }
57433
57577
  function scopeGlobs(startUrl, extra = []) {
@@ -59559,7 +59703,7 @@ var CoverageTracker = class {
59559
59703
  if (this.#counts(c))
59560
59704
  this.#controls.add(key2);
59561
59705
  }
59562
- const route = routeOf(snapshot2.url);
59706
+ const route = routeOf2(snapshot2.url);
59563
59707
  const formControls = this.#region === void 0 ? snapshot2.controls : snapshot2.controls.filter((c) => c.inRegion === true);
59564
59708
  for (const f2 of detectForms(formControls, this.#inScope))
59565
59709
  this.#forms.add(`${route}|${f2.key}`);
@@ -59592,7 +59736,7 @@ var CoverageTracker = class {
59592
59736
  submitted(url2, formKey) {
59593
59737
  if (!this.#inScope(url2))
59594
59738
  return;
59595
- this.#submitted.add(`${routeOf(url2)}|${formKey}`);
59739
+ this.#submitted.add(`${routeOf2(url2)}|${formKey}`);
59596
59740
  }
59597
59741
  /**
59598
59742
  * A submit of `formKey` (on page `url`) never reached the server, so it never counts toward
@@ -59603,7 +59747,7 @@ var CoverageTracker = class {
59603
59747
  blocked(url2, formKey, message2, why = "validation") {
59604
59748
  if (!this.#inScope(url2))
59605
59749
  return;
59606
- const form = `${routeOf(url2)}|${formKey}`;
59750
+ const form = `${routeOf2(url2)}|${formKey}`;
59607
59751
  const key2 = `${form}|${why}`;
59608
59752
  const cur = this.#blocked.get(key2);
59609
59753
  this.#blocked.set(key2, { form, why, count: (cur?.count ?? 0) + 1, message: cur?.message ?? message2 });
@@ -60407,6 +60551,16 @@ function submitRequestSent(monitor, sinceMs) {
60407
60551
  return true;
60408
60552
  return false;
60409
60553
  }
60554
+ var SUBMIT_REQUEST_POLL_MS = 50;
60555
+ async function submitRequestSentWithin(monitor, sinceMs, boundMs) {
60556
+ const deadline = clock.now() + boundMs;
60557
+ while (!submitRequestSent(monitor, sinceMs)) {
60558
+ if (clock.now() >= deadline)
60559
+ return false;
60560
+ await clock.sleep(SUBMIT_REQUEST_POLL_MS);
60561
+ }
60562
+ return true;
60563
+ }
60410
60564
  async function nativeValidationMessage(page) {
60411
60565
  return page.evaluate(() => {
60412
60566
  const fields = Array.from(document.querySelectorAll("input,select,textarea"));
@@ -61626,6 +61780,7 @@ async function refuseMisuseStep(ctx, ep, turn, s3) {
61626
61780
  }
61627
61781
 
61628
61782
  // ../explore/dist/missions/adversarial-hunt/episode.js
61783
+ var SUBMIT_REQUEST_GRACE_MS = 1e3;
61629
61784
  async function runEpisode(ctx, overlay, turn) {
61630
61785
  const ep = {};
61631
61786
  const { ran, planning, episode } = turn;
@@ -61708,10 +61863,12 @@ async function runEpisode(ctx, overlay, turn) {
61708
61863
  if (result.ok)
61709
61864
  ctx.cov.acted(ep.stepSnap.url, s3.control);
61710
61865
  if (result.ok && s3.submitsForm !== void 0) {
61711
- if (submitRequestSent(monitorFor(ctx.sessions.page), at3)) {
61866
+ const monitor = monitorFor(ctx.sessions.page);
61867
+ const invalid = submitRequestSent(monitor, at3) ? void 0 : await nativeValidationMessage(ctx.sessions.page);
61868
+ if (invalid === void 0 && await submitRequestSentWithin(monitor, at3, SUBMIT_REQUEST_GRACE_MS)) {
61712
61869
  ctx.cov.submitted(ep.stepSnap.url, s3.submitsForm);
61713
61870
  } else {
61714
- ctx.cov.blocked(ep.stepSnap.url, s3.submitsForm, await nativeValidationMessage(ctx.sessions.page));
61871
+ ctx.cov.blocked(ep.stepSnap.url, s3.submitsForm, invalid);
61715
61872
  }
61716
61873
  }
61717
61874
  if (ran === "visit-route" && s3.control !== null)
@@ -62902,9 +63059,9 @@ function hostStarvedFailure(failure3, health) {
62902
63059
  }
62903
63060
 
62904
63061
  // src/build-info.generated.ts
62905
- var GENERATED_COMMIT = "58694b9";
62906
- var GENERATED_TREE = "3e51f17";
62907
- var GENERATED_BUILT_AT = "2026-10-23T15:47:25.272Z";
63062
+ var GENERATED_COMMIT = "ad72163";
63063
+ var GENERATED_TREE = "379caf5";
63064
+ var GENERATED_BUILT_AT = "2026-10-23T21:02:56.700Z";
62908
63065
 
62909
63066
  // src/version.ts
62910
63067
  import { readFileSync as readFileSync5 } from "node:fs";
@@ -62926,13 +63083,13 @@ function readCliVersion() {
62926
63083
 
62927
63084
  // src/engine.ts
62928
63085
  function bundledCommit() {
62929
- return true ? "58694b9" : void 0;
63086
+ return true ? "ad72163" : void 0;
62930
63087
  }
62931
63088
  function bundledBuiltAt() {
62932
- return true ? "2026-10-23T15:47:25.272Z" : void 0;
63089
+ return true ? "2026-10-23T21:02:56.700Z" : void 0;
62933
63090
  }
62934
63091
  function bundledTree() {
62935
- return true ? "3e51f17" : void 0;
63092
+ return true ? "379caf5" : void 0;
62936
63093
  }
62937
63094
  function currentBuildTree() {
62938
63095
  return bundledTree() ?? GENERATED_TREE;
@@ -86065,7 +86222,7 @@ var FINGERPRINT_MS = 1e4;
86065
86222
  function oneLine2(s3) {
86066
86223
  return s3.replace(/\s+/g, " ").trim();
86067
86224
  }
86068
- function routeOf2(url2) {
86225
+ function routeOf3(url2) {
86069
86226
  try {
86070
86227
  const u = new URL(url2);
86071
86228
  return u.pathname + (u.search === "" ? "" : u.search);
@@ -86142,7 +86299,7 @@ var RunScreenshots = class {
86142
86299
  this.#entries.push({
86143
86300
  n: n3,
86144
86301
  step: at3.step,
86145
- route: this.#redact(redactUrl(routeOf2(url2))),
86302
+ route: this.#redact(redactUrl(routeOf3(url2))),
86146
86303
  what: this.#redact(oneLine2(at3.what)).slice(0, 300),
86147
86304
  path: path2
86148
86305
  });
@@ -86466,7 +86623,7 @@ function invariantSetupTexts(spec) {
86466
86623
  return Object.fromEntries(specStrings(spec, "", []).filter(([, s3]) => s3.includes("${setup.")).map(([p, s3]) => [`--invariants ${p}`, s3]));
86467
86624
  }
86468
86625
  function substituteSpecSetupRefs(spec, b2, baseUrl) {
86469
- const walk = (v, path2) => {
86626
+ const walk2 = (v, path2) => {
86470
86627
  if (typeof v === "string") {
86471
86628
  if (!v.includes("${setup.")) return v;
86472
86629
  const where = `--invariants ${path2}`;
@@ -86481,11 +86638,11 @@ function substituteSpecSetupRefs(spec, b2, baseUrl) {
86481
86638
  if (before !== after) throw new UnboundSetupRefError(`${where}: a \${setup.*} value may fill the path or query, never the origin`);
86482
86639
  return out;
86483
86640
  }
86484
- if (Array.isArray(v)) return v.map((x, i) => walk(x, `${path2}[${i}]`));
86485
- if (v !== null && typeof v === "object") return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, walk(x, path2 === "" ? k : `${path2}.${k}`)]));
86641
+ if (Array.isArray(v)) return v.map((x, i) => walk2(x, `${path2}[${i}]`));
86642
+ if (v !== null && typeof v === "object") return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, walk2(x, path2 === "" ? k : `${path2}.${k}`)]));
86486
86643
  return v;
86487
86644
  };
86488
- return walk(spec, "");
86645
+ return walk2(spec, "");
86489
86646
  }
86490
86647
  function fixtureSetupFailedResult(err, fx) {
86491
86648
  const reason = err instanceof FixtureSetupError ? err.message : `fixture setup failed: ${err.message}`;
@@ -87785,6 +87942,7 @@ var ServerLogRuntime = class {
87785
87942
  };
87786
87943
  }
87787
87944
  };
87945
+ var NON_ACTING_OPS = /* @__PURE__ */ new Set(["done", "blocked", null]);
87788
87946
  function stepWindows(transcript, stepEpoch, missionStartEpochMs, drainMs) {
87789
87947
  const windows = [];
87790
87948
  let prevEnd = missionStartEpochMs;
@@ -87793,7 +87951,9 @@ function stepWindows(transcript, stepEpoch, missionStartEpochMs, drainMs) {
87793
87951
  const settle2 = stepEpoch.get(entry.step) ?? prevEnd;
87794
87952
  const isLast = i === transcript.length - 1;
87795
87953
  const endMs = isLast ? settle2 + drainMs : settle2;
87796
- windows.push({ step: entry.step, startMs: prevEnd, endMs });
87954
+ const acting = windows[windows.length - 1];
87955
+ if (NON_ACTING_OPS.has(entry.op) && acting !== void 0) acting.endMs = endMs;
87956
+ else windows.push({ step: entry.step, startMs: prevEnd, endMs });
87797
87957
  prevEnd = settle2;
87798
87958
  }
87799
87959
  return windows;
@@ -88690,7 +88850,7 @@ function findingIdentity(f2) {
88690
88850
  function str2(v, fallback = "") {
88691
88851
  return typeof v === "string" ? v : fallback;
88692
88852
  }
88693
- function routeOf3(item) {
88853
+ function routeOf4(item) {
88694
88854
  if (typeof item.route === "string") return item.route;
88695
88855
  if (typeof item.url === "string") return normalizeRoute(item.url);
88696
88856
  return "/";
@@ -88702,7 +88862,7 @@ function extractRunFindings(data) {
88702
88862
  if (!Array.isArray(list2)) return;
88703
88863
  for (const item of list2) {
88704
88864
  if (!isRecord(item) || typeof item.fingerprint !== "string") continue;
88705
- out.push({ kind: kindOf(item), fingerprint: item.fingerprint, route: routeOf3(item), title: str2(item.title, item.fingerprint) });
88865
+ out.push({ kind: kindOf(item), fingerprint: item.fingerprint, route: routeOf4(item), title: str2(item.title, item.fingerprint) });
88706
88866
  }
88707
88867
  };
88708
88868
  fingerprinted(data.defects, (d) => d.kind === "invariant" ? "invariant" : `defect/${str2(d.kind, "unknown")}`);
@@ -88711,14 +88871,14 @@ function extractRunFindings(data) {
88711
88871
  if (isRecord(data.coverage) && Array.isArray(data.coverage.defects)) {
88712
88872
  for (const d of data.coverage.defects) {
88713
88873
  if (!isRecord(d) || typeof d.stateFingerprint !== "string") continue;
88714
- out.push({ kind: "coverage-defect", fingerprint: d.stateFingerprint, route: routeOf3(d), title: str2(d.reason, "looks broken") });
88874
+ out.push({ kind: "coverage-defect", fingerprint: d.stateFingerprint, route: routeOf4(d), title: str2(d.reason, "looks broken") });
88715
88875
  }
88716
88876
  }
88717
88877
  if (isRecord(data.report) && Array.isArray(data.report.findings)) {
88718
88878
  for (const f2 of data.report.findings) {
88719
88879
  if (!isRecord(f2) || typeof f2.rubricItemId !== "string") continue;
88720
88880
  const controls = Array.isArray(f2.controls) ? f2.controls.filter((c) => typeof c === "string") : [];
88721
- out.push({ kind: "ux", route: routeOf3(f2), title: str2(f2.observation, f2.rubricItemId), rubricItemId: f2.rubricItemId, controls });
88881
+ out.push({ kind: "ux", route: routeOf4(f2), title: str2(f2.observation, f2.rubricItemId), rubricItemId: f2.rubricItemId, controls });
88722
88882
  }
88723
88883
  }
88724
88884
  return out;
@@ -91803,18 +91963,18 @@ function rebaseRecording(recording, env) {
91803
91963
  if (mustBeAllowed && !env.allowedOrigins.includes(u.origin)) refusals.push(`${where} is on ${u.origin}`);
91804
91964
  return raw;
91805
91965
  };
91806
- const walk = (v, where) => {
91807
- if (Array.isArray(v)) return v.map((x, i) => walk(x, `${where}[${i}]`));
91966
+ const walk2 = (v, where) => {
91967
+ if (Array.isArray(v)) return v.map((x, i) => walk2(x, `${where}[${i}]`));
91808
91968
  if (v === null || typeof v !== "object") return v;
91809
91969
  const o = v;
91810
91970
  const out = {};
91811
- for (const [k, x] of Object.entries(o)) out[k] = walk(x, `${where}.${k}`);
91971
+ for (const [k, x] of Object.entries(o)) out[k] = walk2(x, `${where}.${k}`);
91812
91972
  if (o.kind === "navigate" && typeof o.url === "string") out.url = move(o.url, `${where} (navigate ${o.url})`, true);
91813
91973
  if (o.kind === "urlIncludes" && typeof o.text === "string") out.text = move(o.text, `${where}.text`, false);
91814
91974
  return out;
91815
91975
  };
91816
91976
  const pages = recording.pages.map((p, i) => ({
91817
- ...walk(p, `pages[${i}]`),
91977
+ ...walk2(p, `pages[${i}]`),
91818
91978
  url: move(p.url, `pages[${i}] (${p.url})`, true)
91819
91979
  }));
91820
91980
  if (refusals.length > 0) {
@@ -94586,7 +94746,7 @@ function classifyTarget(d, testIdAttributes, via) {
94586
94746
  function kebabCase(s3) {
94587
94747
  return s3.normalize("NFKD").replace(/[̀-ͯ]/g, "").replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 40).replace(/-+$/g, "");
94588
94748
  }
94589
- function routeOf4(url2) {
94749
+ function routeOf5(url2) {
94590
94750
  if (url2 === void 0 || url2 === "") return void 0;
94591
94751
  try {
94592
94752
  return new URL(url2).pathname;
@@ -94684,7 +94844,7 @@ function dedupeSuggestions(lists) {
94684
94844
  return [...byKey.values()].sort((a, b2) => b2.occurrences.length - a.occurrences.length || a.key.localeCompare(b2.key));
94685
94845
  }
94686
94846
  function flatWithRoute(rec) {
94687
- return rec.pages.flatMap((p) => p.steps.map((recorded) => ({ recorded, route: routeOf4(p.url) })));
94847
+ return rec.pages.flatMap((p) => p.steps.map((recorded) => ({ recorded, route: routeOf5(p.url) })));
94688
94848
  }
94689
94849
  function healthLine(h) {
94690
94850
  const total = h.stable + h.brittle;
@@ -97454,7 +97614,7 @@ function controlKey2(c) {
97454
97614
  }
97455
97615
 
97456
97616
  // ../ux/dist/route.js
97457
- function routeOf5(url2) {
97617
+ function routeOf6(url2) {
97458
97618
  try {
97459
97619
  return urlTemplate(new URL(url2).pathname || "/");
97460
97620
  } catch {
@@ -97603,7 +97763,7 @@ function a11yChecks(evidence, rubric) {
97603
97763
  const q = rubric.get(id)?.questions[0];
97604
97764
  return q?.severity ?? "minor";
97605
97765
  };
97606
- const route = routeOf5(evidence.url);
97766
+ const route = routeOf6(evidence.url);
97607
97767
  const controlByRef = new Map(evidence.controls.map((c) => [`control:${c.index}`, c]));
97608
97768
  const labelOf2 = (refId) => {
97609
97769
  const c = controlByRef.get(refId);
@@ -97946,7 +98106,7 @@ function makeSignalFinding(input2) {
97946
98106
  recommendation: input2.recommendation.trim(),
97947
98107
  tier: "signal",
97948
98108
  screenId: input2.screenId,
97949
- route: routeOf5(input2.url),
98109
+ route: routeOf6(input2.url),
97950
98110
  controls: [...input2.controls ?? []],
97951
98111
  quotes: [...input2.quotes ?? []],
97952
98112
  occurrences: input2.occurrences ?? 1,
@@ -98183,7 +98343,7 @@ function detectInternalIds(capture2) {
98183
98343
  if (typed.includes(id))
98184
98344
  continue;
98185
98345
  const line2 = quoteLine(screen.visibleText, id);
98186
- const key2 = `${routeOf5(screen.url)}|${pattern.name}`;
98346
+ const key2 = `${routeOf6(screen.url)}|${pattern.name}`;
98187
98347
  const g = groups.get(key2) ?? { pattern, ids: /* @__PURE__ */ new Set(), lines: /* @__PURE__ */ new Set(), screens: [], intentional: true };
98188
98348
  g.ids.add(id);
98189
98349
  g.lines.add(line2);
@@ -98292,7 +98452,7 @@ var PASSIVE_OPS = /* @__PURE__ */ new Set(["wait", "scroll_down", "scroll_up"]);
98292
98452
  function advanced(capture2, s3) {
98293
98453
  const before = capture2.screens.filter((x) => x.step === s3.step).pop();
98294
98454
  const after = capture2.screens.find((x) => x.step > s3.step);
98295
- if (before === void 0 || after === void 0 || routeOf5(after.url) !== routeOf5(before.url))
98455
+ if (before === void 0 || after === void 0 || routeOf6(after.url) !== routeOf6(before.url))
98296
98456
  return void 0;
98297
98457
  return after.visibleText !== before.visibleText ? after : void 0;
98298
98458
  }
@@ -98315,7 +98475,7 @@ function detectRepeatedAdvances(capture2) {
98315
98475
  close();
98316
98476
  continue;
98317
98477
  }
98318
- const k = `${routeOf5(s3.url)}|${label2.toLowerCase()}`;
98478
+ const k = `${routeOf6(s3.url)}|${label2.toLowerCase()}`;
98319
98479
  if (key2 !== null && k !== key2)
98320
98480
  close();
98321
98481
  key2 = k;
@@ -98343,7 +98503,7 @@ function detectRepeatedAdvances(capture2) {
98343
98503
  steps,
98344
98504
  requests: [],
98345
98505
  ...last.after.screenshot === void 0 ? {} : { screenshot: last.after.screenshot },
98346
- detail: `${n3} consecutive successful "${label2}" clicks on ${routeOf5(last.after.url)} with no input between them, each changing the page text`
98506
+ detail: `${n3} consecutive successful "${label2}" clicks on ${routeOf6(last.after.url)} with no input between them, each changing the page text`
98347
98507
  }
98348
98508
  });
98349
98509
  });
@@ -98395,7 +98555,7 @@ function detectStuckJobs(capture2, opts = {}) {
98395
98555
  const label2 = labelOf(start);
98396
98556
  if (label2 === null)
98397
98557
  continue;
98398
- const route = routeOf5(start.url);
98558
+ const route = routeOf6(start.url);
98399
98559
  const key2 = `${route}|${normLine(label2)}`;
98400
98560
  if (reported.has(key2))
98401
98561
  continue;
@@ -98404,7 +98564,7 @@ function detectStuckJobs(capture2, opts = {}) {
98404
98564
  continue;
98405
98565
  const window2 = [];
98406
98566
  for (const s3 of capture2.steps.filter((x) => x.step > start.step)) {
98407
- if (routeOf5(s3.url) !== route)
98567
+ if (routeOf6(s3.url) !== route)
98408
98568
  break;
98409
98569
  const other = s3.op !== null && START_OPS.has(s3.op) && controlKey3(s3) !== controlKey3(start);
98410
98570
  if (other && capture2.requests.some((r) => r.step === s3.step && isWrite(r) && okStatus(r)))
@@ -98412,7 +98572,7 @@ function detectStuckJobs(capture2, opts = {}) {
98412
98572
  window2.push(s3);
98413
98573
  }
98414
98574
  const lastStep = window2.length > 0 ? window2[window2.length - 1].step : start.step;
98415
- const screens = capture2.screens.filter((s3) => s3.step > start.step && s3.step <= lastStep + 1 && routeOf5(s3.url) === route);
98575
+ const screens = capture2.screens.filter((s3) => s3.step > start.step && s3.step <= lastStep + 1 && routeOf6(s3.url) === route);
98416
98576
  if (screens.length === 0)
98417
98577
  continue;
98418
98578
  const reclicks = window2.filter((s3) => s3.op === start.op && s3.actOk && controlKey3(s3) === controlKey3(start));
@@ -98613,7 +98773,7 @@ function detectFailedSubmits(capture2) {
98613
98773
  const after = screenAfter(capture2, s3.step);
98614
98774
  if (after === void 0)
98615
98775
  continue;
98616
- if (before !== void 0 && routeOf5(after.url) !== routeOf5(before.url))
98776
+ if (before !== void 0 && routeOf6(after.url) !== routeOf6(before.url))
98617
98777
  continue;
98618
98778
  const lines = linesOf(`${after.visibleText}
98619
98779
  ${s3.reply ?? ""}`);
@@ -98682,15 +98842,15 @@ function headingOf(s3) {
98682
98842
  function detectUrlMismatches(capture2) {
98683
98843
  const hits = /* @__PURE__ */ new Map();
98684
98844
  capture2.screens.forEach((b2, i) => {
98685
- const route = routeOf5(b2.url);
98845
+ const route = routeOf6(b2.url);
98686
98846
  const heading = headingOf(b2);
98687
98847
  if (heading.length < 3)
98688
98848
  return;
98689
98849
  const { words: words3, known } = routeWords2(route);
98690
98850
  if (words3.length === 0 || relates(heading, words3))
98691
98851
  return;
98692
- const other = capture2.screens.find((s3) => routeOf5(s3.url) !== route && normLine(headingOf(s3)) === normLine(heading) && relates(heading, routeWords2(routeOf5(s3.url)).words));
98693
- const prior = capture2.screens.slice(0, i).reverse().find((s3) => routeOf5(s3.url) === route && normLine(headingOf(s3)) !== normLine(heading));
98852
+ const other = capture2.screens.find((s3) => routeOf6(s3.url) !== route && normLine(headingOf(s3)) === normLine(heading) && relates(heading, routeWords2(routeOf6(s3.url)).words));
98853
+ const prior = capture2.screens.slice(0, i).reverse().find((s3) => routeOf6(s3.url) === route && normLine(headingOf(s3)) !== normLine(heading));
98694
98854
  const transitioned = known && prior !== void 0 && relates(headingOf(prior), words3);
98695
98855
  if (other === void 0 && !transitioned)
98696
98856
  return;
@@ -98701,7 +98861,7 @@ function detectUrlMismatches(capture2) {
98701
98861
  route,
98702
98862
  known,
98703
98863
  ...transitioned ? { was: headingOf(prior) } : {},
98704
- ...other === void 0 ? {} : { elsewhere: routeOf5(other.url) }
98864
+ ...other === void 0 ? {} : { elsewhere: routeOf6(other.url) }
98705
98865
  };
98706
98866
  g.screens.push(b2);
98707
98867
  hits.set(k, g);
@@ -98806,7 +98966,7 @@ function detectFriction(capture2, outcome) {
98806
98966
  };
98807
98967
  const routesAt = (nums) => {
98808
98968
  const set2 = new Set(nums);
98809
- return [.../* @__PURE__ */ new Set([...steps.filter((s3) => set2.has(s3.step)).map((s3) => routeOf5(s3.url)), ...capture2.screens.filter((s3) => set2.has(s3.step)).map((s3) => routeOf5(s3.url))])];
98969
+ return [.../* @__PURE__ */ new Set([...steps.filter((s3) => set2.has(s3.step)).map((s3) => routeOf6(s3.url)), ...capture2.screens.filter((s3) => set2.has(s3.step)).map((s3) => routeOf6(s3.url))])];
98810
98970
  };
98811
98971
  const add = (kind, impact, nums, detail) => {
98812
98972
  const sorted2 = [...new Set(nums)].filter((n3) => n3 > 0).sort((a, b2) => a - b2);
@@ -98897,7 +99057,7 @@ function detectFriction(capture2, outcome) {
98897
99057
  const blocking = reqs.some((r) => WRITE_METHODS3.has(r.method.toUpperCase()) && (r.failed === true || (r.status ?? 0) >= 500));
98898
99058
  add("error", blocking ? "blocked" : "slowed", [step], `${reqs.map((r) => `${r.endpoint} \u2192 ${r.failed === true ? "failed" : r.status}`).join(", ")} after step ${step}`);
98899
99059
  }
98900
- const seq = capture2.screens.map((s3) => ({ route: routeOf5(s3.url), step: s3.step }));
99060
+ const seq = capture2.screens.map((s3) => ({ route: routeOf6(s3.url), step: s3.step }));
98901
99061
  for (let x = 2; x < seq.length; x++) {
98902
99062
  const here = seq[x];
98903
99063
  if (seq[x - 1].route === here.route)
@@ -98924,7 +99084,7 @@ function detectFriction(capture2, outcome) {
98924
99084
  continue;
98925
99085
  if (between.some((r) => r.actOk && (r.op === "click" || r.op === "send" || r.op === "select")))
98926
99086
  continue;
98927
- add("abandoned", "confused", [s3.step, rest[leftAt].step], `a value typed at step ${s3.step} was left unsubmitted when the run moved to ${routeOf5(rest[leftAt].url)}`);
99087
+ add("abandoned", "confused", [s3.step, rest[leftAt].step], `a value typed at step ${s3.step} was left unsubmitted when the run moved to ${routeOf6(rest[leftAt].url)}`);
98928
99088
  }
98929
99089
  if (outcome?.status === "incomplete" && steps.length > 0) {
98930
99090
  const tail = steps.slice(-3).map((s3) => s3.step);
@@ -99502,8 +99662,8 @@ function boundTargetOptions(controls, point, steps, limit = MAX_CHOICE_OPTIONS -
99502
99662
  const acted = steps.filter((s3) => point.steps.includes(s3.step));
99503
99663
  const words3 = new Set(normalizeText(point.detail).split(" ").filter((w) => w.length >= 3));
99504
99664
  const score2 = (c) => (acted.some((s3) => stepNames(s3, c)) ? 400 : 0) + (normalizeText(c.name).split(" ").some((w) => words3.has(w)) ? 60 : 0) + (c.enabled ? 10 : 0);
99505
- const keep = new Set(controls.map((c, i) => ({ c, i, s: score2(c) })).sort((a, b2) => b2.s - a.s || a.i - b2.i).slice(0, limit).map((x) => x.c.index));
99506
- return controls.filter((c) => keep.has(c.index));
99665
+ const keep2 = new Set(controls.map((c, i) => ({ c, i, s: score2(c) })).sort((a, b2) => b2.s - a.s || a.i - b2.i).slice(0, limit).map((x) => x.c.index));
99666
+ return controls.filter((c) => keep2.has(c.index));
99507
99667
  }
99508
99668
  function frictionText(p) {
99509
99669
  return `${p.kind} (steps ${p.steps.join(", ")}): ${p.detail}`.slice(0, 600);
@@ -99532,7 +99692,7 @@ async function analyzeClaims(request, deps) {
99532
99692
  for (const raw of request.screens) {
99533
99693
  try {
99534
99694
  const red = redactEvidence(raw, secrets, deps.redactor);
99535
- screens.push({ raw, red, route: routeOf5(red.url) });
99695
+ screens.push({ raw, red, route: routeOf6(red.url) });
99536
99696
  } catch (cause) {
99537
99697
  return { kind: "failed", reason: `redaction failed: ${message(cause)}`, screenId: raw.screenId };
99538
99698
  }
@@ -100022,7 +100182,7 @@ ${f2.route}
100022
100182
  ${element}`, "utf8").digest("hex").slice(0, 16);
100023
100183
  }
100024
100184
  function contractRouteTemplate(urlOrRoute) {
100025
- return routeOf5(urlOrRoute).split("/").map((seg) => /^:[A-Za-z][A-Za-z0-9_]{0,63}$/.test(seg) ? `{${seg.slice(1)}}` : seg).join("/");
100185
+ return routeOf6(urlOrRoute).split("/").map((seg) => /^:[A-Za-z][A-Za-z0-9_]{0,63}$/.test(seg) ? `{${seg.slice(1)}}` : seg).join("/");
100026
100186
  }
100027
100187
 
100028
100188
  // ../ux/dist/rubric/schema.js
@@ -101364,7 +101524,7 @@ function planGuardProbes(screens, secrets, safety) {
101364
101524
  const refused = [];
101365
101525
  for (const screen of screens) {
101366
101526
  const red = redactEvidence(screen, secrets);
101367
- const route = routeOf5(red.url);
101527
+ const route = routeOf6(red.url);
101368
101528
  screen.controls.forEach((c, i) => {
101369
101529
  if (controlRisk(c.name, c.role)?.risk !== "destructive") return;
101370
101530
  const rc = red.controls[i];
@@ -102123,11 +102283,11 @@ var MAX_SCAN_DEPTH = 8;
102123
102283
  function scanRuns(dirs) {
102124
102284
  const seen = /* @__PURE__ */ new Set();
102125
102285
  const runs = [];
102126
- const walk = (dir, depth) => {
102286
+ const walk2 = (dir, depth) => {
102127
102287
  for (const entry of readdirSync8(dir, { withFileTypes: true }).sort((a, b2) => a.name.localeCompare(b2.name))) {
102128
102288
  const path2 = resolve13(dir, entry.name);
102129
102289
  if (entry.isDirectory()) {
102130
- if (depth < MAX_SCAN_DEPTH && !entry.name.startsWith(".") && entry.name !== "node_modules") walk(path2, depth + 1);
102290
+ if (depth < MAX_SCAN_DEPTH && !entry.name.startsWith(".") && entry.name !== "node_modules") walk2(path2, depth + 1);
102131
102291
  continue;
102132
102292
  }
102133
102293
  if (!entry.isFile() || !isResultName(entry.name) || seen.has(path2)) continue;
@@ -102139,7 +102299,7 @@ function scanRuns(dirs) {
102139
102299
  };
102140
102300
  for (const dir of dirs) {
102141
102301
  if (!existsSync23(dir) || !statSync9(dir).isDirectory()) continue;
102142
- walk(dir, 0);
102302
+ walk2(dir, 0);
102143
102303
  }
102144
102304
  return runs.sort((a, b2) => (a.startedAt ?? "").localeCompare(b2.startedAt ?? "") || a.runId.localeCompare(b2.runId));
102145
102305
  }
@@ -104618,8 +104778,8 @@ function bundleDemos(input2, journeys, warn) {
104618
104778
  if (demos.length > LIMITS.demos) {
104619
104779
  warn.push(`${demos.length} demos: only the first ${LIMITS.demos} are exported`);
104620
104780
  const kept = new Set(demos.slice(0, LIMITS.demos).map((d) => `media/${d.journey}/`));
104621
- const keep = (p) => [...kept].some((k) => p.startsWith(k));
104622
- return { demos: demos.slice(0, LIMITS.demos), files: files.filter((f2) => keep(f2.path)), media: media.filter((m) => keep(m.path)) };
104781
+ const keep2 = (p) => [...kept].some((k) => p.startsWith(k));
104782
+ return { demos: demos.slice(0, LIMITS.demos), files: files.filter((f2) => keep2(f2.path)), media: media.filter((m) => keep2(m.path)) };
104623
104783
  }
104624
104784
  return { demos, files, media };
104625
104785
  }
@@ -105315,7 +105475,7 @@ function findingDropWarning(fingerprint2, kind, issues) {
105315
105475
  function bundleFindings(src) {
105316
105476
  const warnings = [];
105317
105477
  const latest = /* @__PURE__ */ new Map();
105318
- const keep = (m) => {
105478
+ const keep2 = (m) => {
105319
105479
  if (m === null) return;
105320
105480
  if ("drop" in m) {
105321
105481
  warnings.push(`${m.drop} \u2014 left out of the bundle`);
@@ -105330,10 +105490,10 @@ function bundleFindings(src) {
105330
105490
  if (prev === void 0 || prev.at <= m.finding.at) latest.set(m.finding.fingerprint, m.finding);
105331
105491
  };
105332
105492
  const byPath = new Map(src.runs.map((r) => [r.path, r]));
105333
- for (const d of consolidate(src.runs)) keep(defectFinding(d, byPath));
105493
+ for (const d of consolidate(src.runs)) keep2(defectFinding(d, byPath));
105334
105494
  for (const { report: report2, run } of src.uxReports) {
105335
105495
  if (!isRecord(report2) || !Array.isArray(report2.findings)) continue;
105336
- for (const f2 of report2.findings) if (isRecord(f2)) keep(uxFinding(f2, run));
105496
+ for (const f2 of report2.findings) if (isRecord(f2)) keep2(uxFinding(f2, run));
105337
105497
  }
105338
105498
  let findings = [...latest.values()].sort((a, b2) => a.at.localeCompare(b2.at) || a.fingerprint.localeCompare(b2.fingerprint));
105339
105499
  if (findings.length > MAX_FINDINGS) {
@@ -116748,8 +116908,8 @@ function confineSweepFixture(raw, root2) {
116748
116908
  realRoot = realpathSync5(root2);
116749
116909
  } catch {
116750
116910
  }
116751
- const sensitive = fixtureSensitiveReason(real, realRoot) ?? fixtureSensitiveReason(absolute, resolve23(root2));
116752
- if (sensitive !== null) throw fixtureSensitive(absolute, root2, sensitive);
116911
+ const sensitive2 = fixtureSensitiveReason(real, realRoot) ?? fixtureSensitiveReason(absolute, resolve23(root2));
116912
+ if (sensitive2 !== null) throw fixtureSensitive(absolute, root2, sensitive2);
116753
116913
  return absolute;
116754
116914
  }
116755
116915
  function tsvTags(cell2, where, problems) {
@@ -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 = "58694b9";
9
- export const GENERATED_TREE = "3e51f17";
10
- export const GENERATED_BUILT_AT = "2026-10-23T15:47:14.035Z";
8
+ export const GENERATED_COMMIT = "ad72163";
9
+ export const GENERATED_TREE = "379caf5";
10
+ export const GENERATED_BUILT_AT = "2026-10-23T21:02:48.517Z";
11
11
  //# sourceMappingURL=build-info.generated.js.map
@@ -384,8 +384,12 @@ export class ServerLogRuntime {
384
384
  };
385
385
  }
386
386
  }
387
+ /** #653: a step that performs no browser action (`done`, `blocked`, none found) causes no backend work. */
388
+ const NON_ACTING_OPS = new Set(["done", "blocked", null]);
387
389
  /** Contiguous per-step correlation windows: `[previous settle, this settle]`, the LAST one extended
388
- * by `drainMs` so async backend work that lands after the mission's own bounds still attaches. */
390
+ * by `drainMs` so async backend work that lands after the mission's own bounds still attaches.
391
+ * #653: a step that performs no browser action owns no window: its span extends the acting step
392
+ * before it, so that step's backend line, logged a few ms after it settled, still attaches to it. */
389
393
  function stepWindows(transcript, stepEpoch, missionStartEpochMs, drainMs) {
390
394
  const windows = [];
391
395
  let prevEnd = missionStartEpochMs;
@@ -394,7 +398,11 @@ function stepWindows(transcript, stepEpoch, missionStartEpochMs, drainMs) {
394
398
  const settle = stepEpoch.get(entry.step) ?? prevEnd;
395
399
  const isLast = i === transcript.length - 1;
396
400
  const endMs = isLast ? settle + drainMs : settle;
397
- windows.push({ step: entry.step, startMs: prevEnd, endMs });
401
+ const acting = windows[windows.length - 1];
402
+ if (NON_ACTING_OPS.has(entry.op) && acting !== undefined)
403
+ acting.endMs = endMs;
404
+ else
405
+ windows.push({ step: entry.step, startMs: prevEnd, endMs });
398
406
  prevEnd = settle;
399
407
  }
400
408
  return windows;
@@ -1 +1 @@
1
- {"version":3,"file":"log-correlation.js","sourceRoot":"","sources":["../src/log-correlation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log-correlation.js","sourceRoot":"","sources":["../src/log-correlation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jevitate/cli",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Autonomous browser testing that turns discovered bugs into deterministic regression tests: explore a web app in a real browser, confirm findings with evidence, and replay them as regressions in CI.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -64,25 +64,25 @@
64
64
  "@jevitate/ai-core": "0.1.0",
65
65
  "@jevitate/daemon": "0.1.0",
66
66
  "@jevitate/domain": "0.1.0",
67
- "@jevitate/example-site": "0.1.0",
68
67
  "@jevitate/explore": "0.1.0",
68
+ "@jevitate/example-site": "0.1.0",
69
69
  "@jevitate/findings": "0.1.0",
70
70
  "@jevitate/inbox": "0.1.0",
71
- "@jevitate/interpreter": "0.1.0",
72
71
  "@jevitate/journey": "0.1.0",
73
- "@jevitate/load": "0.1.0",
74
- "@jevitate/mcp-facade": "0.1.0",
75
72
  "@jevitate/missions": "0.1.0",
73
+ "@jevitate/load": "0.1.0",
76
74
  "@jevitate/playwright": "0.1.0",
77
- "@jevitate/recording": "0.1.0",
78
75
  "@jevitate/recorder": "0.1.0",
79
- "@jevitate/runtime": "0.1.0",
80
- "@jevitate/skills": "0.1.0",
76
+ "@jevitate/interpreter": "0.1.0",
81
77
  "@jevitate/regression": "0.1.0",
78
+ "@jevitate/recording": "0.1.0",
79
+ "@jevitate/mcp-facade": "0.1.0",
80
+ "@jevitate/runtime": "0.1.0",
82
81
  "@jevitate/screenplay": "0.1.0",
83
- "@jevitate/storage-sqlite": "0.1.0",
84
82
  "@jevitate/sources": "0.1.0",
85
- "@jevitate/ux": "0.1.0"
83
+ "@jevitate/skills": "0.1.0",
84
+ "@jevitate/ux": "0.1.0",
85
+ "@jevitate/storage-sqlite": "0.1.0"
86
86
  },
87
87
  "scripts": {
88
88
  "build": "node scripts/generate-build-info.mjs && tsc --build",