@jevitate/cli 0.5.0 → 0.7.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.
Files changed (69) hide show
  1. package/dist/author-journey-cli.d.ts +2 -0
  2. package/dist/author-journey-cli.js +93 -15
  3. package/dist/author-journey-cli.js.map +1 -1
  4. package/dist/bin.js +4249 -1396
  5. package/dist/build-info.generated.js +2 -2
  6. package/dist/cli-output.js +4 -0
  7. package/dist/cli-output.js.map +1 -1
  8. package/dist/demo-aspect-api.d.ts +6 -5
  9. package/dist/demo-aspect-api.js +7 -1
  10. package/dist/demo-aspect-api.js.map +1 -1
  11. package/dist/environments.js +6 -1
  12. package/dist/environments.js.map +1 -1
  13. package/dist/explore-adversarial.js +1 -1
  14. package/dist/explore-adversarial.js.map +1 -1
  15. package/dist/explore-author.d.ts +21 -3
  16. package/dist/explore-author.js +64 -32
  17. package/dist/explore-author.js.map +1 -1
  18. package/dist/explore-cli.js +73 -92
  19. package/dist/explore-cli.js.map +1 -1
  20. package/dist/explore-coverage.js +1 -1
  21. package/dist/explore-coverage.js.map +1 -1
  22. package/dist/explore-goal.js +9 -4
  23. package/dist/explore-goal.js.map +1 -1
  24. package/dist/goal-run-flags.d.ts +120 -0
  25. package/dist/goal-run-flags.js +220 -0
  26. package/dist/goal-run-flags.js.map +1 -0
  27. package/dist/journey-api.d.ts +72 -5
  28. package/dist/journey-api.js +125 -14
  29. package/dist/journey-api.js.map +1 -1
  30. package/dist/journey-cli.d.ts +1 -1
  31. package/dist/journey-cli.js +168 -5
  32. package/dist/journey-cli.js.map +1 -1
  33. package/dist/journey-demo-api.d.ts +7 -1
  34. package/dist/journey-demo-api.js +8 -3
  35. package/dist/journey-demo-api.js.map +1 -1
  36. package/dist/journey-demo-cli.js +3 -0
  37. package/dist/journey-demo-cli.js.map +1 -1
  38. package/dist/journey-lint-sarif.d.ts +19 -0
  39. package/dist/journey-lint-sarif.js +48 -0
  40. package/dist/journey-lint-sarif.js.map +1 -0
  41. package/dist/journey-network-checks.d.ts +45 -9
  42. package/dist/journey-network-checks.js +117 -30
  43. package/dist/journey-network-checks.js.map +1 -1
  44. package/dist/journey-prefix.d.ts +24 -15
  45. package/dist/journey-prefix.js +53 -7
  46. package/dist/journey-prefix.js.map +1 -1
  47. package/dist/journey-verify.d.ts +61 -0
  48. package/dist/journey-verify.js +131 -0
  49. package/dist/journey-verify.js.map +1 -0
  50. package/dist/load-api.js +9 -3
  51. package/dist/load-api.js.map +1 -1
  52. package/dist/mcp-cli-tools.d.ts +1 -0
  53. package/dist/mcp-cli-tools.js +61 -3
  54. package/dist/mcp-cli-tools.js.map +1 -1
  55. package/dist/promotions.d.ts +15 -0
  56. package/dist/promotions.js +52 -0
  57. package/dist/promotions.js.map +1 -0
  58. package/dist/self-heal-adapter.js +3 -1
  59. package/dist/self-heal-adapter.js.map +1 -1
  60. package/dist/signal-triage.js +5 -1
  61. package/dist/signal-triage.js.map +1 -1
  62. package/dist/source-run-api.js +17 -7
  63. package/dist/source-run-api.js.map +1 -1
  64. package/dist/usability-capture.js +11 -1
  65. package/dist/usability-capture.js.map +1 -1
  66. package/dist/ux-usability.js +1 -1
  67. package/dist/ux-usability.js.map +1 -1
  68. package/package.json +10 -10
  69. package/skills/jevitate-explore/SKILL.md +11 -0
@@ -0,0 +1,19 @@
1
+ import type { JourneyLintFinding } from "@jevitate/journey";
2
+ /**
3
+ * #401: SARIF 2.1.0 for `journey lint`, so CI can gate on assertion strength the same way it does
4
+ * on `jevitate check` findings. One tool driver (`jevitate-journey-lint`) lists every rule; one
5
+ * result per finding carries its level and message, located at the journey id and (when present)
6
+ * `step N` as logical locations.
7
+ */
8
+ export declare const JOURNEY_LINT_SARIF_SCHEMA = "https://json.schemastore.org/sarif-2.1.0.json";
9
+ export interface JourneyLintSarifLog {
10
+ readonly $schema: string;
11
+ readonly version: "2.1.0";
12
+ readonly runs: readonly unknown[];
13
+ }
14
+ export interface JourneyLintSarifInput {
15
+ readonly id: string;
16
+ readonly findings: readonly JourneyLintFinding[];
17
+ readonly version: string;
18
+ }
19
+ export declare function renderJourneyLintSarif(input: JourneyLintSarifInput): JourneyLintSarifLog;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * #401: SARIF 2.1.0 for `journey lint`, so CI can gate on assertion strength the same way it does
3
+ * on `jevitate check` findings. One tool driver (`jevitate-journey-lint`) lists every rule; one
4
+ * result per finding carries its level and message, located at the journey id and (when present)
5
+ * `step N` as logical locations.
6
+ */
7
+ export const JOURNEY_LINT_SARIF_SCHEMA = "https://json.schemastore.org/sarif-2.1.0.json";
8
+ /** #401: every rule the lint can report, with the severity it reports it at. */
9
+ const RULES = [
10
+ { id: "own-target-visible", level: "error" },
11
+ { id: "write-without-effect", level: "error" },
12
+ { id: "visibility-only", level: "error" },
13
+ { id: "nothing-after-last-write", level: "error" },
14
+ { id: "no-persistence-check", level: "warning" },
15
+ { id: "intent-uncovered", level: "warning" },
16
+ ];
17
+ export function renderJourneyLintSarif(input) {
18
+ const rules = RULES.map((rule) => ({
19
+ id: rule.id,
20
+ name: rule.id,
21
+ shortDescription: { text: rule.id },
22
+ defaultConfiguration: { level: rule.level },
23
+ }));
24
+ const results = input.findings.map((finding) => ({
25
+ ruleId: finding.rule,
26
+ level: finding.level,
27
+ message: { text: finding.message },
28
+ locations: [
29
+ {
30
+ logicalLocations: [
31
+ { name: input.id, kind: "module" },
32
+ ...(finding.step === undefined ? [] : [{ name: `step ${finding.step}`, kind: "function" }]),
33
+ ],
34
+ },
35
+ ],
36
+ }));
37
+ return {
38
+ $schema: JOURNEY_LINT_SARIF_SCHEMA,
39
+ version: "2.1.0",
40
+ runs: [
41
+ {
42
+ tool: { driver: { name: "jevitate-journey-lint", version: input.version, rules } },
43
+ results,
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ //# sourceMappingURL=journey-lint-sarif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-lint-sarif.js","sourceRoot":"","sources":["../src/journey-lint-sarif.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,+CAA+C,CAAC;AAEzF,gFAAgF;AAChF,MAAM,KAAK,GAAuE;IAChF,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5C,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9C,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE;IACzC,EAAE,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE,OAAO,EAAE;IAClD,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,EAAE;IAChD,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;CAC7C,CAAC;AAcF,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACnC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;KAC5C,CAAC,CAAC,CAAC;IACJ,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,OAAO,CAAC,IAAI;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;QAClC,SAAS,EAAE;YACT;gBACE,gBAAgB,EAAE;oBAChB,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;iBAC5F;aACF;SACF;KACF,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAClF,OAAO;aACR;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1,15 +1,51 @@
1
1
  /**
2
- * #322 — a Journey's `networkChecks` (authored from `explore-author-journey --success
3
- * requestMade:…|responseStatus:…`), evaluated over the requests its replay itself sent: the SAME
4
- * page-monitor capture and evaluator a live goal mission's own network check uses (and a
5
- * network-check regression replays with). A replay whose steps all passed but whose expected
6
- * request never went out (or got the wrong status) is a failed run, never `ok`.
2
+ * A Journey's outcome checks, judged over its replay (#322, #400): the end state
3
+ * (`metadata.endState`, plus an older Journey's `metadata.networkChecks`) after the last step, and
4
+ * each step's `expectRequests` over the requests sent from the moment that step began. The SAME
5
+ * evaluator a live goal mission's verdict uses (`evaluateOutcomeChecks`: page checks on the final
6
+ * page, one reload for the `reloadThen` checks, network checks over the page-monitor capture). A
7
+ * replay whose steps all passed but whose outcome is absent is a failed run, never `ok`.
7
8
  */
8
9
  import type { Page } from "playwright";
9
- import type { JourneyNetworkCheck } from "@jevitate/journey";
10
+ import { type Journey } from "@jevitate/journey";
10
11
  import type { JourneyRunResult } from "@jevitate/runtime";
12
+ import type { Actor } from "@jevitate/screenplay";
13
+ import { type StepObserver } from "@jevitate/interpreter";
11
14
  /**
12
- * Runs `replay` with the page's requests captured, then evaluates `checks` over them. With no
13
- * checks it just runs `replay`. A replay that already failed keeps its own reason.
15
+ * #402: one failed assertion site from the last `run`, as structured data. The same sites the joined
16
+ * `reason` string names, so a mutation proof can see WHICH expectation a mutation broke.
17
+ *
18
+ * `step` is 1-based (`s.index + 1`); `checkIndex` is the check's position in that step's
19
+ * `expectRequests`. `index` is the position in the end-state list the class was constructed with —
20
+ * `journeyEndState(journey)` order: `metadata.endState` first, then a legacy `metadata.networkChecks`.
14
21
  */
15
- export declare function withNetworkChecks(page: Page, checks: readonly JourneyNetworkCheck[] | undefined, replay: () => Promise<JourneyRunResult>): Promise<JourneyRunResult>;
22
+ export type OutcomeCheckFailure = {
23
+ readonly where: "step-request";
24
+ readonly step: number;
25
+ readonly checkIndex: number;
26
+ readonly detail: string;
27
+ } | {
28
+ readonly where: "end-state";
29
+ readonly index: number;
30
+ readonly detail: string;
31
+ } | {
32
+ readonly where: "unevaluable";
33
+ readonly detail: string;
34
+ };
35
+ export declare class JourneyOutcomeChecks {
36
+ #private;
37
+ /** `journey` undefined (an anchored prefix run): nothing is judged. */
38
+ constructor(page: Page, journey: Journey | undefined, opts?: {
39
+ readonly secrets?: readonly string[];
40
+ });
41
+ get active(): boolean;
42
+ /** #402: the failed assertion sites of the last `run` (empty when every check held, or none ran). */
43
+ get lastFailures(): readonly OutcomeCheckFailure[];
44
+ /** Starts a step's request window as it begins (never changes the replay). */
45
+ observer(): StepObserver | undefined;
46
+ /**
47
+ * Runs `replay` with the page's requests captured, then judges the checks. A replay that already
48
+ * failed keeps its own reason. Without checks it just runs `replay`.
49
+ */
50
+ run(actor: Actor, replay: () => Promise<JourneyRunResult>): Promise<JourneyRunResult>;
51
+ }
@@ -1,36 +1,123 @@
1
- import { evaluateNetworkCheck, monitorFor } from "@jevitate/explore";
1
+ import { journeyEndState } from "@jevitate/journey";
2
+ import { installFlashRecorder } from "@jevitate/interpreter";
3
+ import { describeStep } from "@jevitate/journey";
4
+ import { clock } from "@jevitate/domain";
5
+ import { evaluateNetworkCheck, evaluateOutcomeChecks, monitorFor } from "@jevitate/explore";
2
6
  /** How long the network may take to go idle after the last step before the checks read it. */
3
7
  const SETTLE_CEILING_MS = 5_000;
4
- /**
5
- * Runs `replay` with the page's requests captured, then evaluates `checks` over them. With no
6
- * checks it just runs `replay`. A replay that already failed keeps its own reason.
7
- */
8
- export async function withNetworkChecks(page, checks, replay) {
9
- if (checks === undefined || checks.length === 0)
10
- return replay();
11
- const monitor = monitorFor(page);
12
- await monitor.instrument();
13
- const capture = monitor.startCapture();
14
- let result;
15
- try {
16
- result = await replay();
17
- if (result.outcome === "quarantined")
18
- return result;
19
- // A step's postcondition can hold before the write it triggered finished: wait for the network
20
- // to go idle (bounded) before reading what was sent.
21
- await monitor.waitSettled({ ceilingMs: SETTLE_CEILING_MS }).catch(() => undefined);
8
+ export class JourneyOutcomeChecks {
9
+ #page;
10
+ #end;
11
+ #steps;
12
+ #secrets;
13
+ #lastFailures = [];
14
+ /** `journey` undefined (an anchored prefix run): nothing is judged. */
15
+ constructor(page, journey, opts = {}) {
16
+ this.#page = page;
17
+ this.#secrets = opts.secrets ?? [];
18
+ this.#end = journey === undefined ? [] : journeyEndState(journey);
19
+ this.#steps = [];
20
+ let i = 0;
21
+ for (const p of journey?.recording.pages ?? []) {
22
+ for (const r of p.steps) {
23
+ if ((r.expectRequests ?? []).length > 0)
24
+ this.#steps.push({ index: i, label: describeStep(r.step), checks: r.expectRequests ?? [] });
25
+ i += 1;
26
+ }
27
+ }
28
+ }
29
+ get active() {
30
+ return this.#end.length > 0 || this.#steps.length > 0;
31
+ }
32
+ /** #402: the failed assertion sites of the last `run` (empty when every check held, or none ran). */
33
+ get lastFailures() {
34
+ return this.#lastFailures;
22
35
  }
23
- finally {
24
- monitor.stopCapture(capture);
36
+ /** Starts a step's request window as it begins (never changes the replay). */
37
+ observer() {
38
+ if (this.#steps.length === 0)
39
+ return undefined;
40
+ return {
41
+ beforeStep: async ({ index }) => {
42
+ const w = this.#steps.find((s) => s.index === index);
43
+ if (w === undefined || w.capture !== undefined)
44
+ return;
45
+ w.startedAt = clock.now();
46
+ w.capture = monitorFor(this.#page).startCapture();
47
+ },
48
+ };
49
+ }
50
+ /**
51
+ * Runs `replay` with the page's requests captured, then judges the checks. A replay that already
52
+ * failed keeps its own reason. Without checks it just runs `replay`.
53
+ */
54
+ async run(actor, replay) {
55
+ this.#lastFailures = [];
56
+ if (!this.active)
57
+ return replay();
58
+ const monitor = monitorFor(this.#page);
59
+ await monitor.instrument();
60
+ if (this.#end.some((c) => (c.kind === "page" || c.kind === "reloadThen") && c.assertion.kind === "flashed")) {
61
+ await installFlashRecorder(this.#page);
62
+ }
63
+ const capture = monitor.startCapture();
64
+ let result;
65
+ try {
66
+ result = await replay();
67
+ if (result.outcome === "quarantined")
68
+ return result;
69
+ // A step's postcondition can hold before the write it triggered finished: wait for the network
70
+ // to go idle (bounded) before reading what was sent.
71
+ await monitor.waitSettled({ ceilingMs: SETTLE_CEILING_MS }).catch(() => undefined);
72
+ }
73
+ finally {
74
+ monitor.stopCapture(capture);
75
+ for (const s of this.#steps)
76
+ if (s.capture !== undefined)
77
+ monitor.stopCapture(s.capture);
78
+ }
79
+ // Step windows first (the end state's reload must not count as a step's request).
80
+ const stepFailureSites = [];
81
+ const stepFailureReasons = [];
82
+ for (const s of this.#steps) {
83
+ // No window (an interpreter that reported no step boundaries): judged over the whole replay.
84
+ const window = s.capture ?? capture;
85
+ // A request still in flight when the step began (the previous step's write) finishes inside
86
+ // this window: only requests SENT from the step's start count.
87
+ const since = s.startedAt;
88
+ const sent = window.sent().filter((r) => since === undefined || (r.startedAt !== undefined && r.startedAt >= since));
89
+ s.checks.forEach((c, checkIndex) => {
90
+ const r = evaluateNetworkCheck(c, sent, window.truncated);
91
+ if (r.passed)
92
+ return;
93
+ stepFailureSites.push({ where: "step-request", step: s.index + 1, checkIndex, detail: `${r.check} — ${r.detail}` });
94
+ stepFailureReasons.push(`step ${s.index + 1} (${s.label}): ${r.check} — ${r.detail}`);
95
+ });
96
+ }
97
+ let end = [];
98
+ if (this.#end.length > 0) {
99
+ try {
100
+ end = await evaluateOutcomeChecks(this.#end, { actor, page: this.#page, capture, secrets: this.#secrets, settleMs: SETTLE_CEILING_MS });
101
+ }
102
+ catch (e) {
103
+ // A check that cannot be evaluated (an unusable target) is never a pass.
104
+ const detail = `success checks could not be evaluated after the last step: ${e instanceof Error ? e.message : String(e)}`;
105
+ this.#lastFailures = [{ where: "unevaluable", detail }];
106
+ return { outcome: "quarantined", reason: detail };
107
+ }
108
+ }
109
+ // `evaluateOutcomeChecks` keeps the checks' order, which is `journeyEndState`: `endState` then
110
+ // legacy `networkChecks` — so an index here is that list's own position.
111
+ const endFailureSites = end.flatMap((r, index) => r.passed ? [] : [{ where: "end-state", index, detail: `${r.check} — ${r.detail}` }]);
112
+ this.#lastFailures = [...stepFailureSites, ...endFailureSites];
113
+ const endFailures = endFailureSites.map((f) => f.detail);
114
+ const reasons = [
115
+ ...(stepFailureReasons.length === 0 ? [] : [`step request check${stepFailureReasons.length === 1 ? "" : "s"} not met: ${stepFailureReasons.join("; ")}`]),
116
+ ...(endFailures.length === 0 ? [] : [`success check${endFailures.length === 1 ? "" : "s"} not met after the last step: ${endFailures.join("; ")}`]),
117
+ ];
118
+ if (reasons.length === 0)
119
+ return result;
120
+ return { outcome: "quarantined", reason: reasons.join("; ") };
25
121
  }
26
- const failed = checks
27
- .map((c) => evaluateNetworkCheck(c.kind === "requestMade" ? c : { ...c, status: { ...c.status } }, capture.sent(), capture.truncated))
28
- .filter((r) => !r.passed);
29
- if (failed.length === 0)
30
- return result;
31
- return {
32
- outcome: "quarantined",
33
- reason: `success check${failed.length === 1 ? "" : "s"} not met after the last step: ${failed.map((r) => `${r.check} — ${r.detail}`).join("; ")}`,
34
- };
35
122
  }
36
123
  //# sourceMappingURL=journey-network-checks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErE,8FAA8F;AAC9F,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,MAAkD,EAClD,MAAuC;IAEvC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IACvC,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa;YAAE,OAAO,MAAM,CAAC;QACpD,+FAA+F;QAC/F,qDAAqD;QACrD,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;SACrI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,gBAAgB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iCAAiC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAClJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"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"}
@@ -4,20 +4,6 @@ import type { Recording } from "@jevitate/recording";
4
4
  import type { BrowserSession } from "@jevitate/playwright";
5
5
  import { type ResolvedJourneyEnvironment } from "./environments.js";
6
6
  import type { BrowserRunOptions } from "./browser-run-options.js";
7
- /**
8
- * #293 — journey-anchored exploration: `jevitate explore --from-journey <id> --at-step <n|name>`.
9
- *
10
- * The mission's browser session opens as usual (its storage state, emulation, demo mode); then the
11
- * promoted Journey's PREFIX — its first `step` top-level steps — is replayed INTO that session by the
12
- * one Journey replay there is (`runJourneyProgrammatically`: fail-closed, never self-healing, the
13
- * site policy and `--env` environment applied), and the mission starts on the live page it left:
14
- * same page, form contents and session, no fresh navigation. A prefix that no longer replays ends
15
- * the run with a typed `journey-stale` outcome (exit 2) — never a silent restart from a URL.
16
- *
17
- * Everything that can be refused is refused before any browser opens (`resolveJourneyPrefix`): an
18
- * unknown or unpromoted Journey, a step or anchor it does not have, params that do not fit, a
19
- * Journey that needs a session the run was not given.
20
- */
21
7
  /** The strategies a mission can branch off a Journey with (`--feature` and multi-runs are refused). */
22
8
  export { ANCHORED_STRATEGIES, type AnchoredStrategy } from "@jevitate/journey";
23
9
  /** `--from-journey`/`--at-step` cannot be used as given (exit 64, nothing ran). */
@@ -33,10 +19,22 @@ export declare class JourneyPrefixStaleError extends Error {
33
19
  readonly branch: JourneyBranchPoint;
34
20
  /** The 1-based Journey step that failed, when the replay names it. */
35
21
  readonly failedStep?: number | undefined;
22
+ /** #398: what the page showed when the prefix went stale (redacted); absent when it could not be read. */
23
+ readonly page?: {
24
+ readonly url: string;
25
+ readonly title: string;
26
+ readonly text: string;
27
+ } | undefined;
36
28
  readonly code: "E_JOURNEY_STALE";
37
29
  constructor(message: string, branch: JourneyBranchPoint,
38
30
  /** The 1-based Journey step that failed, when the replay names it. */
39
- failedStep?: number | undefined);
31
+ failedStep?: number | undefined,
32
+ /** #398: what the page showed when the prefix went stale (redacted); absent when it could not be read. */
33
+ page?: {
34
+ readonly url: string;
35
+ readonly title: string;
36
+ readonly text: string;
37
+ } | undefined);
40
38
  }
41
39
  export interface JourneyPrefix {
42
40
  readonly branch: JourneyBranchPoint;
@@ -110,7 +108,13 @@ export type RecordedBranch = JourneyBranchPoint & {
110
108
  export declare function resolveJourneyPrefix(opts: ResolveJourneyPrefixOptions): Promise<JourneyPrefix>;
111
109
  /** What an anchored run starts from: the live URL after the prefix, its branch point, and how it resets. */
112
110
  export interface AnchoredStart {
111
+ /** The live URL to start from — for navigation and the mission engine (which redacts it) only. */
113
112
  readonly url: string;
113
+ /**
114
+ * #399: `url` as it may be shown or persisted (`target.seedUrl`): credential-named query values and
115
+ * the prefix's secret params (e.g. a token its navigate URL carried) redacted. Never navigated to.
116
+ */
117
+ readonly persistUrl: string;
114
118
  readonly branch?: RecordedBranch;
115
119
  /**
116
120
  * #293: what a reset inside the mission uses instead of re-navigating to the anchor URL — the
@@ -145,6 +149,11 @@ export interface JourneyStaleResult {
145
149
  readonly failure: {
146
150
  readonly kind: "journey-stale";
147
151
  readonly message: string;
152
+ readonly page?: {
153
+ readonly url: string;
154
+ readonly title: string;
155
+ readonly text: string;
156
+ };
148
157
  };
149
158
  readonly branch: JourneyBranchPoint;
150
159
  /** The 1-based Journey step whose replay failed, when known. */
@@ -1,3 +1,5 @@
1
+ import { redactCredentialShapes, redactText, redactUrl } from "@jevitate/ai-core";
2
+ import { clock } from "@jevitate/domain";
1
3
  import { FsJourneyStore, JourneyRegistry, JourneyStepError, deriveParamSchema, journeyBranchPoint, journeyPrefix, prefixLandingPath, resolveJourneyStep, secretParamNames, secretParamValues, validateParams, } from "@jevitate/journey";
2
4
  import { resolve as resolvePath } from "node:path";
3
5
  import { UnauthorizedExploreTargetError, assertAuthorizedExploreTarget } from "@jevitate/explore";
@@ -20,6 +22,44 @@ import { withSiteGate } from "./site-gate-cli.js";
20
22
  * unknown or unpromoted Journey, a step or anchor it does not have, params that do not fit, a
21
23
  * Journey that needs a session the run was not given.
22
24
  */
25
+ /** #398: how long reading a page's stale evidence may take before it is skipped (the page may be hung). */
26
+ const PAGE_EVIDENCE_TIMEOUT_MS = 2_000;
27
+ /** #398: visible text kept in the stale evidence (redacted first, then cut, so a cut never splits a secret). */
28
+ const PAGE_EVIDENCE_TEXT_MAX = 600;
29
+ /** A promise's value, or `undefined` when `ms` (on the clock) passes first — never throws, never uses a global timer. */
30
+ async function bounded(p, ms) {
31
+ let timer;
32
+ try {
33
+ return await Promise.race([p, new Promise((r) => (timer = clock.setTimeout(() => r(undefined), Math.max(1, ms))))]);
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ finally {
39
+ if (timer !== undefined)
40
+ clock.clearTimeout(timer);
41
+ }
42
+ }
43
+ /**
44
+ * #398: what the page showed when the prefix went stale — URL, title and a short visible-text
45
+ * excerpt, all redacted. Best effort by contract: any failure (a closed page, a navigation, a hung
46
+ * evaluate) yields no evidence, so it can never mask the stale error with a different one.
47
+ */
48
+ async function stalePageEvidence(page, secrets) {
49
+ try {
50
+ const url = page.url();
51
+ const title = await bounded(page.title(), PAGE_EVIDENCE_TIMEOUT_MS);
52
+ const raw = await bounded(page.evaluate(() => document.body?.innerText ?? ""), PAGE_EVIDENCE_TIMEOUT_MS);
53
+ if (title === undefined || raw === undefined)
54
+ return undefined;
55
+ // Persisted in the result: the run's secrets AND any credential-shaped string the page shows (#298).
56
+ const text = redactCredentialShapes(redactText(raw.replace(/\s+/g, " ").trim(), secrets)).slice(0, PAGE_EVIDENCE_TEXT_MAX);
57
+ return { url: redactText(redactUrl(url), secrets), title: redactText(title, secrets), text };
58
+ }
59
+ catch {
60
+ return undefined;
61
+ }
62
+ }
23
63
  /** The strategies a mission can branch off a Journey with (`--feature` and multi-runs are refused). */
24
64
  export { ANCHORED_STRATEGIES } from "@jevitate/journey";
25
65
  /** `--from-journey`/`--at-step` cannot be used as given (exit 64, nothing ran). */
@@ -37,13 +77,17 @@ export class JourneyPrefixArgsError extends Error {
37
77
  export class JourneyPrefixStaleError extends Error {
38
78
  branch;
39
79
  failedStep;
80
+ page;
40
81
  code = "E_JOURNEY_STALE";
41
82
  constructor(message, branch,
42
83
  /** The 1-based Journey step that failed, when the replay names it. */
43
- failedStep) {
84
+ failedStep,
85
+ /** #398: what the page showed when the prefix went stale (redacted); absent when it could not be read. */
86
+ page) {
44
87
  super(message);
45
88
  this.branch = branch;
46
89
  this.failedStep = failedStep;
90
+ this.page = page;
47
91
  this.name = "JourneyPrefixStaleError";
48
92
  }
49
93
  }
@@ -88,11 +132,12 @@ export async function resolveJourneyPrefix(opts) {
88
132
  const allowedOrigins = opts.environment === undefined ? [new URL(site).origin] : [...opts.environment.allowedOrigins];
89
133
  const where = `step ${branch.step}${branch.anchor === undefined ? "" : ` (anchor ${branch.anchor})`}`;
90
134
  const secretNames = secretParamNames(full, used).filter((n) => n in used);
135
+ const secretValues = secretParamValues(full, used);
91
136
  return {
92
137
  branch,
93
138
  startUrl,
94
139
  allowedOrigins,
95
- secrets: secretParamValues(full, used),
140
+ secrets: secretValues,
96
141
  steps: resolved.step,
97
142
  replayInfo: {
98
143
  journeysDir: resolvePath(opts.dir),
@@ -122,12 +167,13 @@ export async function resolveJourneyPrefix(opts) {
122
167
  if (err instanceof SiteGateRefusedError)
123
168
  throw err;
124
169
  const message = err instanceof Error ? (err.message.split("\n")[0] ?? err.message) : String(err);
125
- throw new JourneyPrefixStaleError(`journey '${opts.id}' did not replay to ${where}: ${message}`, branch);
170
+ throw new JourneyPrefixStaleError(`journey '${opts.id}' did not replay to ${where}: ${message}`, branch, undefined, await stalePageEvidence(session.page, secretValues));
126
171
  }
127
172
  if (run.outcome !== "ok") {
128
173
  const failed = run.outcome === "quarantined" && run.at !== undefined ? run.at + 1 : undefined;
174
+ // #398: the runner's reason names the failed step 1-based, like `--at-step` and `failedStep`.
129
175
  const reason = run.outcome === "quarantined" ? run.reason : "the replay healed a step (a self-healed prefix is never a branch point)";
130
- throw new JourneyPrefixStaleError(`journey '${opts.id}' is stale: it no longer reaches ${where} — ${reason}`, branch, failed);
176
+ throw new JourneyPrefixStaleError(`journey '${opts.id}' is stale: it no longer reaches ${where} — ${reason}`, branch, failed, await stalePageEvidence(session.page, secretValues));
131
177
  }
132
178
  return session.page.url();
133
179
  },
@@ -158,11 +204,11 @@ export function prefixRestart(prefix, allowlist, browser) {
158
204
  */
159
205
  export async function startFromJourney(prefix, session, url, allowlist, browser) {
160
206
  if (prefix === undefined)
161
- return { url };
207
+ return { url, persistUrl: url };
162
208
  const live = await prefix.replay(session, browser);
163
209
  assertAuthorizedExploreTarget(live, allowlist);
164
210
  const restart = { restartAtStart: prefixRestart(prefix, allowlist, browser), restartCost: prefix.steps };
165
- return { url: live, branch: { ...prefix.branch, replay: prefix.replayInfo }, restart };
211
+ return { url: live, persistUrl: redactText(redactUrl(live), prefix.secrets), branch: { ...prefix.branch, replay: prefix.replayInfo }, restart };
166
212
  }
167
213
  /** The result fields an anchored run adds (#293, additive): its branch point (and how to replay it). */
168
214
  export function branchFields(start) {
@@ -174,7 +220,7 @@ export function journeyStaleResult(err, strategy) {
174
220
  outcome: "inconclusive",
175
221
  missionOutcome: "inconclusive",
176
222
  reason: err.message,
177
- failure: { kind: "journey-stale", message: err.message },
223
+ failure: { kind: "journey-stale", message: err.message, ...(err.page === undefined ? {} : { page: err.page }) },
178
224
  branch: err.branch,
179
225
  ...(err.failedStep === undefined ? {} : { failedStep: err.failedStep }),
180
226
  exitCode: 2,
@@ -1 +1 @@
1
- {"version":3,"file":"journey-prefix.js","sourceRoot":"","sources":["../src/journey-prefix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journey-prefix.js","sourceRoot":"","sources":["../src/journey-prefix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * #402 — `journey verify --mutate`: a built-in negative proof that each of a Journey's assertions
3
+ * FAILS when its outcome is absent. The Journey is replayed once as recorded (it must pass), then
4
+ * once per mutation (`planJourneyMutations`: skip a write step, abort its writes, or type an empty
5
+ * value into a checked fill); each assertion is sensitive only when its paired mutation broke it, at
6
+ * that assertion, with nothing failing before the mutated step.
7
+ *
8
+ * Every replay goes through `runJourneyProgrammatically` — the same path, gate, fixtures and
9
+ * environment as `journey run`. Mutations never send, fabricate or answer a request: they leave a
10
+ * step's action out, ABORT the app's own writes in one step's window, or type `""`.
11
+ */
12
+ import { type AssertionVerdict, type JourneyMutation, type MutationFailedSite, type MutationProofVerdict, type MutationRunResult } from "@jevitate/journey";
13
+ import { runJourneyProgrammatically, type RunJourneyProgrammaticallyOptions } from "./journey-api.js";
14
+ /** `journey run`'s options a proof passes through to every replay (params, environment, auth, fixtures, browser, gate). */
15
+ export type VerifyJourneyOptions = Omit<RunJourneyProgrammaticallyOptions, "stopAfterStep" | "interpreter" | "observer" | "session" | "screenshots" | "actionDeltas" | "selfHealer" | "policy"> & {
16
+ /** Read patterns for the write classifier (as `journey lint`). */
17
+ readonly readRequests?: readonly string[];
18
+ };
19
+ export interface JourneyVerifyMutation {
20
+ readonly kind: JourneyMutation["kind"];
21
+ readonly step: number;
22
+ readonly id: string;
23
+ readonly outcome: MutationRunResult["outcome"];
24
+ readonly failedSites: readonly MutationFailedSite[];
25
+ /** block-write: what was aborted (`METHOD path`). */
26
+ readonly blockedWrites?: readonly string[];
27
+ /** Why the replay failed, was not applied, or errored. */
28
+ readonly reason?: string;
29
+ }
30
+ export interface JourneyVerifyAssertion {
31
+ readonly site: string;
32
+ /** The assertion, in the `--success` spec syntax. */
33
+ readonly check: string;
34
+ readonly verdict: AssertionVerdict;
35
+ readonly provedBy?: string;
36
+ }
37
+ export interface JourneyVerifyReport {
38
+ readonly journeyId: string;
39
+ /** `journeyContentHash` of the stored Journey: the proof is bound to exactly this content. */
40
+ readonly journeyHash: string;
41
+ readonly base: {
42
+ readonly outcome: string;
43
+ readonly reason?: string;
44
+ };
45
+ readonly verdict: MutationProofVerdict;
46
+ readonly reason?: string;
47
+ readonly mutations: readonly JourneyVerifyMutation[];
48
+ readonly assertions: readonly JourneyVerifyAssertion[];
49
+ readonly summary: Readonly<Record<"sensitive" | "insensitive" | "cascade" | "notApplied" | "error" | "unpaired", number>>;
50
+ }
51
+ /** The exit code for a proof's verdict (docs/ci.md): 0 proven · 1 insensitive · 2 inconclusive. */
52
+ export declare function verifyExitCode(verdict: MutationProofVerdict): number;
53
+ type Run = typeof runJourneyProgrammatically;
54
+ /**
55
+ * Runs the proof for one Journey by id. Usage errors (unknown id, bad params, an environment that
56
+ * refuses a step, a site-gate refusal) throw exactly as `journey run`'s do, before any mutation.
57
+ */
58
+ export declare function verifyJourneyMutations(opts: VerifyJourneyOptions, run?: Run): Promise<JourneyVerifyReport>;
59
+ /** One human line per assertion — verdict, site, check, and the mutation that proved it. */
60
+ export declare function verifyAssertionLine(a: JourneyVerifyAssertion): string;
61
+ export {};