@jevitate/cli 0.1.0 → 0.3.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/README.md +23 -0
- package/dist/ai-cli.d.ts +31 -11
- package/dist/ai-cli.js +131 -88
- package/dist/ai-cli.js.map +1 -1
- package/dist/author-journey-cli.d.ts +4 -0
- package/dist/author-journey-cli.js +111 -0
- package/dist/author-journey-cli.js.map +1 -0
- package/dist/bin.js +60349 -16477
- package/dist/bin.js.map +1 -1
- package/dist/browser-run-options.d.ts +89 -0
- package/dist/browser-run-options.js +175 -0
- package/dist/browser-run-options.js.map +1 -0
- package/dist/build-info.generated.d.ts +2 -0
- package/dist/build-info.generated.js +10 -0
- package/dist/build-info.generated.js.map +1 -0
- package/dist/campaign-api.d.ts +151 -0
- package/dist/campaign-api.js +446 -0
- package/dist/campaign-api.js.map +1 -0
- package/dist/campaign-cli.d.ts +6 -0
- package/dist/campaign-cli.js +66 -0
- package/dist/campaign-cli.js.map +1 -0
- package/dist/check-api.d.ts +5 -0
- package/dist/check-api.js +234 -0
- package/dist/check-api.js.map +1 -0
- package/dist/check-budget.d.ts +26 -0
- package/dist/check-budget.js +90 -0
- package/dist/check-budget.js.map +1 -0
- package/dist/check-cli.d.ts +31 -0
- package/dist/check-cli.js +109 -0
- package/dist/check-cli.js.map +1 -0
- package/dist/check-execute.d.ts +29 -0
- package/dist/check-execute.js +420 -0
- package/dist/check-execute.js.map +1 -0
- package/dist/check-plan.d.ts +118 -0
- package/dist/check-plan.js +516 -0
- package/dist/check-plan.js.map +1 -0
- package/dist/check-suite.d.ts +184 -0
- package/dist/check-suite.js +540 -0
- package/dist/check-suite.js.map +1 -0
- package/dist/check-types.d.ts +181 -0
- package/dist/check-types.js +35 -0
- package/dist/check-types.js.map +1 -0
- package/dist/cli-args.d.ts +26 -0
- package/dist/cli-args.js +50 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-output.d.ts +106 -0
- package/dist/cli-output.js +563 -0
- package/dist/cli-output.js.map +1 -0
- package/dist/cli-reference.d.ts +3 -0
- package/dist/cli-reference.js +81 -0
- package/dist/cli-reference.js.map +1 -0
- package/dist/cli-refusal.d.ts +12 -0
- package/dist/cli-refusal.js +52 -0
- package/dist/cli-refusal.js.map +1 -0
- package/dist/cli-shared.d.ts +340 -0
- package/dist/cli-shared.js +537 -0
- package/dist/cli-shared.js.map +1 -0
- package/dist/cli-surface.d.ts +33 -0
- package/dist/cli-surface.js +48 -0
- package/dist/cli-surface.js.map +1 -0
- package/dist/conversation-options.d.ts +15 -0
- package/dist/conversation-options.js +10 -0
- package/dist/conversation-options.js.map +1 -0
- package/dist/credentials-file.d.ts +15 -0
- package/dist/credentials-file.js +56 -0
- package/dist/credentials-file.js.map +1 -0
- package/dist/data-dir.d.ts +1 -1
- package/dist/data-dir.js +1 -1
- package/dist/defect-evidence.d.ts +141 -0
- package/dist/defect-evidence.js +505 -0
- package/dist/defect-evidence.js.map +1 -0
- package/dist/demo-aspect-api.d.ts +209 -0
- package/dist/demo-aspect-api.js +398 -0
- package/dist/demo-aspect-api.js.map +1 -0
- package/dist/demo-aspect-cli.d.ts +3 -0
- package/dist/demo-aspect-cli.js +243 -0
- package/dist/demo-aspect-cli.js.map +1 -0
- package/dist/demo-capture.d.ts +142 -0
- package/dist/demo-capture.js +537 -0
- package/dist/demo-capture.js.map +1 -0
- package/dist/engine.d.ts +35 -0
- package/dist/engine.js +25 -0
- package/dist/engine.js.map +1 -0
- package/dist/environments.d.ts +155 -0
- package/dist/environments.js +364 -0
- package/dist/environments.js.map +1 -0
- package/dist/exit-codes.d.ts +46 -0
- package/dist/exit-codes.js +91 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/explore-adversarial.d.ts +144 -0
- package/dist/explore-adversarial.js +227 -0
- package/dist/explore-adversarial.js.map +1 -0
- package/dist/explore-api.d.ts +7 -187
- package/dist/explore-api.js +7 -301
- package/dist/explore-api.js.map +1 -1
- package/dist/explore-author.d.ts +79 -0
- package/dist/explore-author.js +86 -0
- package/dist/explore-author.js.map +1 -0
- package/dist/explore-cli.d.ts +7 -0
- package/dist/explore-cli.js +1199 -0
- package/dist/explore-cli.js.map +1 -0
- package/dist/explore-coverage.d.ts +173 -0
- package/dist/explore-coverage.js +246 -0
- package/dist/explore-coverage.js.map +1 -0
- package/dist/explore-feature.d.ts +125 -0
- package/dist/explore-feature.js +218 -0
- package/dist/explore-feature.js.map +1 -0
- package/dist/explore-goal.d.ts +271 -0
- package/dist/explore-goal.js +417 -0
- package/dist/explore-goal.js.map +1 -0
- package/dist/explore-shared.d.ts +177 -0
- package/dist/explore-shared.js +149 -0
- package/dist/explore-shared.js.map +1 -0
- package/dist/explore-specs.d.ts +53 -0
- package/dist/explore-specs.js +333 -0
- package/dist/explore-specs.js.map +1 -0
- package/dist/findings-filing.d.ts +64 -0
- package/dist/findings-filing.js +108 -0
- package/dist/findings-filing.js.map +1 -0
- package/dist/fixture-auth.d.ts +63 -0
- package/dist/fixture-auth.js +95 -0
- package/dist/fixture-auth.js.map +1 -0
- package/dist/fixture-cli.d.ts +99 -0
- package/dist/fixture-cli.js +292 -0
- package/dist/fixture-cli.js.map +1 -0
- package/dist/github-issue-filer.d.ts +62 -0
- package/dist/github-issue-filer.js +189 -0
- package/dist/github-issue-filer.js.map +1 -0
- package/dist/host-health-run.d.ts +25 -0
- package/dist/host-health-run.js +33 -0
- package/dist/host-health-run.js.map +1 -0
- package/dist/http-5xx-outcome.d.ts +6 -0
- package/dist/http-5xx-outcome.js +39 -0
- package/dist/http-5xx-outcome.js.map +1 -0
- package/dist/inbox-cli.d.ts +7 -0
- package/dist/inbox-cli.js +197 -0
- package/dist/inbox-cli.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init-cli.d.ts +4 -0
- package/dist/init-cli.js +156 -0
- package/dist/init-cli.js.map +1 -0
- package/dist/init-keys.d.ts +30 -2
- package/dist/init-keys.js +19 -5
- package/dist/init-keys.js.map +1 -1
- package/dist/init-next-steps.d.ts +35 -0
- package/dist/init-next-steps.js +79 -0
- package/dist/init-next-steps.js.map +1 -0
- package/dist/invariants-file.d.ts +34 -0
- package/dist/invariants-file.js +68 -0
- package/dist/invariants-file.js.map +1 -0
- package/dist/invariants-validate.d.ts +30 -0
- package/dist/invariants-validate.js +105 -0
- package/dist/invariants-validate.js.map +1 -0
- package/dist/journey-annotate-api.d.ts +76 -0
- package/dist/journey-annotate-api.js +269 -0
- package/dist/journey-annotate-api.js.map +1 -0
- package/dist/journey-annotate-cli.d.ts +9 -0
- package/dist/journey-annotate-cli.js +181 -0
- package/dist/journey-annotate-cli.js.map +1 -0
- package/dist/journey-api.d.ts +104 -2
- package/dist/journey-api.js +163 -20
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +4 -0
- package/dist/journey-cli.js +411 -0
- package/dist/journey-cli.js.map +1 -0
- package/dist/journey-demo-api.d.ts +114 -0
- package/dist/journey-demo-api.js +405 -0
- package/dist/journey-demo-api.js.map +1 -0
- package/dist/journey-demo-cli.d.ts +10 -0
- package/dist/journey-demo-cli.js +158 -0
- package/dist/journey-demo-cli.js.map +1 -0
- package/dist/journey-prefix.d.ts +194 -0
- package/dist/journey-prefix.js +279 -0
- package/dist/journey-prefix.js.map +1 -0
- package/dist/key-report.d.ts +49 -0
- package/dist/key-report.js +101 -0
- package/dist/key-report.js.map +1 -0
- package/dist/kill-signal.d.ts +193 -0
- package/dist/kill-signal.js +283 -0
- package/dist/kill-signal.js.map +1 -0
- package/dist/launch-armed.d.ts +37 -0
- package/dist/launch-armed.js +31 -0
- package/dist/launch-armed.js.map +1 -0
- package/dist/ledger-api.d.ts +106 -0
- package/dist/ledger-api.js +239 -0
- package/dist/ledger-api.js.map +1 -0
- package/dist/ledger-cli.d.ts +18 -0
- package/dist/ledger-cli.js +107 -0
- package/dist/ledger-cli.js.map +1 -0
- package/dist/load-api.d.ts +29 -11
- package/dist/load-api.js +23 -15
- package/dist/load-api.js.map +1 -1
- package/dist/load-cli.d.ts +4 -0
- package/dist/load-cli.js +97 -0
- package/dist/load-cli.js.map +1 -0
- package/dist/log-correlation.d.ts +200 -0
- package/dist/log-correlation.js +394 -0
- package/dist/log-correlation.js.map +1 -0
- package/dist/log-lines.d.ts +131 -0
- package/dist/log-lines.js +389 -0
- package/dist/log-lines.js.map +1 -0
- package/dist/log-sources.d.ts +71 -0
- package/dist/log-sources.js +236 -0
- package/dist/log-sources.js.map +1 -0
- package/dist/log-trace.d.ts +80 -0
- package/dist/log-trace.js +210 -0
- package/dist/log-trace.js.map +1 -0
- package/dist/logs-cli.d.ts +3 -0
- package/dist/logs-cli.js +51 -0
- package/dist/logs-cli.js.map +1 -0
- package/dist/logs-retention.d.ts +28 -0
- package/dist/logs-retention.js +85 -0
- package/dist/logs-retention.js.map +1 -0
- package/dist/masked-input.d.ts +22 -0
- package/dist/masked-input.js +99 -0
- package/dist/masked-input.js.map +1 -0
- package/dist/mcp-api.d.ts +91 -1
- package/dist/mcp-api.js +514 -18
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-args.d.ts +50 -0
- package/dist/mcp-args.js +164 -0
- package/dist/mcp-args.js.map +1 -0
- package/dist/mcp-cli-bridge.d.ts +34 -0
- package/dist/mcp-cli-bridge.js +62 -0
- package/dist/mcp-cli-bridge.js.map +1 -0
- package/dist/mcp-cli-runner.d.ts +29 -0
- package/dist/mcp-cli-runner.js +44 -0
- package/dist/mcp-cli-runner.js.map +1 -0
- package/dist/mcp-cli-tools.d.ts +129 -0
- package/dist/mcp-cli-tools.js +737 -0
- package/dist/mcp-cli-tools.js.map +1 -0
- package/dist/mcp-paths.d.ts +28 -0
- package/dist/mcp-paths.js +76 -0
- package/dist/mcp-paths.js.map +1 -0
- package/dist/mission-actors.d.ts +40 -0
- package/dist/mission-actors.js +72 -0
- package/dist/mission-actors.js.map +1 -0
- package/dist/mission-api.d.ts +35 -0
- package/dist/mission-api.js +60 -3
- package/dist/mission-api.js.map +1 -1
- package/dist/mission-cli.d.ts +4 -0
- package/dist/mission-cli.js +248 -0
- package/dist/mission-cli.js.map +1 -0
- package/dist/mission-exit.d.ts +22 -0
- package/dist/mission-exit.js +26 -0
- package/dist/mission-exit.js.map +1 -0
- package/dist/mission-fixtures.d.ts +234 -0
- package/dist/mission-fixtures.js +862 -0
- package/dist/mission-fixtures.js.map +1 -0
- package/dist/mission-journal.d.ts +60 -0
- package/dist/mission-journal.js +115 -0
- package/dist/mission-journal.js.map +1 -0
- package/dist/mission-queue-cli.d.ts +10 -0
- package/dist/mission-queue-cli.js +198 -0
- package/dist/mission-queue-cli.js.map +1 -0
- package/dist/mission-queue-runner.d.ts +126 -0
- package/dist/mission-queue-runner.js +406 -0
- package/dist/mission-queue-runner.js.map +1 -0
- package/dist/multi-run-cli.d.ts +37 -0
- package/dist/multi-run-cli.js +116 -0
- package/dist/multi-run-cli.js.map +1 -0
- package/dist/multi-run.d.ts +339 -0
- package/dist/multi-run.js +619 -0
- package/dist/multi-run.js.map +1 -0
- package/dist/openrouter-call.d.ts +22 -0
- package/dist/openrouter-call.js +64 -0
- package/dist/openrouter-call.js.map +1 -0
- package/dist/profile-cli.d.ts +4 -0
- package/dist/profile-cli.js +57 -0
- package/dist/profile-cli.js.map +1 -0
- package/dist/program.d.ts +3 -75
- package/dist/program.js +123 -1921
- package/dist/program.js.map +1 -1
- package/dist/project-dir.d.ts +96 -0
- package/dist/project-dir.js +221 -0
- package/dist/project-dir.js.map +1 -0
- package/dist/record-api.d.ts +13 -7
- package/dist/record-api.js +44 -30
- package/dist/record-api.js.map +1 -1
- package/dist/record-cli.d.ts +4 -0
- package/dist/record-cli.js +76 -0
- package/dist/record-cli.js.map +1 -0
- package/dist/recording-cli.d.ts +4 -0
- package/dist/recording-cli.js +248 -0
- package/dist/recording-cli.js.map +1 -0
- package/dist/regression-api.d.ts +107 -0
- package/dist/regression-api.js +387 -6
- package/dist/regression-api.js.map +1 -1
- package/dist/regression-cli.d.ts +4 -0
- package/dist/regression-cli.js +284 -0
- package/dist/regression-cli.js.map +1 -0
- package/dist/report-api.d.ts +146 -0
- package/dist/report-api.js +431 -0
- package/dist/report-api.js.map +1 -0
- package/dist/report-cli.d.ts +12 -0
- package/dist/report-cli.js +147 -0
- package/dist/report-cli.js.map +1 -0
- package/dist/resource-preflight.d.ts +87 -0
- package/dist/resource-preflight.js +160 -0
- package/dist/resource-preflight.js.map +1 -0
- package/dist/result-schema.d.ts +22 -0
- package/dist/result-schema.js +28 -0
- package/dist/result-schema.js.map +1 -0
- package/dist/run-index.d.ts +29 -0
- package/dist/run-index.js +70 -0
- package/dist/run-index.js.map +1 -0
- package/dist/run-key-preflight.d.ts +42 -0
- package/dist/run-key-preflight.js +82 -0
- package/dist/run-key-preflight.js.map +1 -0
- package/dist/run-screenshots.d.ts +123 -0
- package/dist/run-screenshots.js +235 -0
- package/dist/run-screenshots.js.map +1 -0
- package/dist/runtime-env.d.ts +8 -0
- package/dist/runtime-env.js +23 -0
- package/dist/runtime-env.js.map +1 -0
- package/dist/secret-args.d.ts +23 -0
- package/dist/secret-args.js +45 -0
- package/dist/secret-args.js.map +1 -0
- package/dist/serve-cli.d.ts +4 -0
- package/dist/serve-cli.js +95 -0
- package/dist/serve-cli.js.map +1 -0
- package/dist/server-log-verify.d.ts +36 -0
- package/dist/server-log-verify.js +120 -0
- package/dist/server-log-verify.js.map +1 -0
- package/dist/session-check.d.ts +14 -0
- package/dist/session-check.js +44 -0
- package/dist/session-check.js.map +1 -0
- package/dist/site-cli.d.ts +4 -0
- package/dist/site-cli.js +127 -0
- package/dist/site-cli.js.map +1 -0
- package/dist/site-gate-cli.d.ts +28 -0
- package/dist/site-gate-cli.js +59 -0
- package/dist/site-gate-cli.js.map +1 -0
- package/dist/source-api.js +20 -4
- package/dist/source-api.js.map +1 -1
- package/dist/source-cli.d.ts +4 -0
- package/dist/source-cli.js +284 -0
- package/dist/source-cli.js.map +1 -0
- package/dist/source-run-api.d.ts +27 -1
- package/dist/source-run-api.js +22 -11
- package/dist/source-run-api.js.map +1 -1
- package/dist/storage-state-snapshot.d.ts +50 -0
- package/dist/storage-state-snapshot.js +87 -0
- package/dist/storage-state-snapshot.js.map +1 -0
- package/dist/suite-explore-options.d.ts +321 -0
- package/dist/suite-explore-options.js +162 -0
- package/dist/suite-explore-options.js.map +1 -0
- package/dist/target-config.d.ts +115 -0
- package/dist/target-config.js +225 -0
- package/dist/target-config.js.map +1 -0
- package/dist/transcript-file.d.ts +12 -0
- package/dist/transcript-file.js +23 -0
- package/dist/transcript-file.js.map +1 -0
- package/dist/type-fixture-file.d.ts +9 -0
- package/dist/type-fixture-file.js +48 -0
- package/dist/type-fixture-file.js.map +1 -0
- package/dist/ui-api.d.ts +3 -0
- package/dist/ui-api.js +11 -4
- package/dist/ui-api.js.map +1 -1
- package/dist/usability-capture.d.ts +43 -0
- package/dist/usability-capture.js +327 -0
- package/dist/usability-capture.js.map +1 -0
- package/dist/usage-config.d.ts +36 -0
- package/dist/usage-config.js +114 -0
- package/dist/usage-config.js.map +1 -0
- package/dist/ux-api.d.ts +3 -75
- package/dist/ux-api.js +3 -220
- package/dist/ux-api.js.map +1 -1
- package/dist/ux-claim-probe.d.ts +45 -0
- package/dist/ux-claim-probe.js +386 -0
- package/dist/ux-claim-probe.js.map +1 -0
- package/dist/ux-cli.d.ts +4 -0
- package/dist/ux-cli.js +109 -0
- package/dist/ux-cli.js.map +1 -0
- package/dist/ux-config.d.ts +29 -0
- package/dist/ux-config.js +103 -0
- package/dist/ux-config.js.map +1 -0
- package/dist/ux-evidence.d.ts +54 -0
- package/dist/ux-evidence.js +197 -0
- package/dist/ux-evidence.js.map +1 -0
- package/dist/ux-product.d.ts +14 -0
- package/dist/ux-product.js +39 -0
- package/dist/ux-product.js.map +1 -0
- package/dist/ux-review.d.ts +116 -0
- package/dist/ux-review.js +171 -0
- package/dist/ux-review.js.map +1 -0
- package/dist/ux-usability.d.ts +263 -0
- package/dist/ux-usability.js +580 -0
- package/dist/ux-usability.js.map +1 -0
- package/dist/verify-fix-api.d.ts +194 -0
- package/dist/verify-fix-api.js +506 -0
- package/dist/verify-fix-api.js.map +1 -0
- package/dist/verify-fix-cli.d.ts +4 -0
- package/dist/verify-fix-cli.js +115 -0
- package/dist/verify-fix-cli.js.map +1 -0
- package/package.json +23 -18
- package/skills/jevitate-ci-check/SKILL.md +77 -0
- package/skills/jevitate-demo/SKILL.md +61 -0
- package/skills/jevitate-explore/SKILL.md +96 -87
- package/skills/jevitate-getting-started/SKILL.md +89 -0
- package/skills/jevitate-load-test/SKILL.md +11 -2
- package/skills/jevitate-mission-scope/SKILL.md +19 -11
- package/skills/jevitate-record/SKILL.md +23 -5
- package/skills/jevitate-run-journey/SKILL.md +61 -17
- package/skills/jevitate-sources/SKILL.md +57 -14
- package/skills/jevitate-test-campaign/SKILL.md +203 -0
- package/skills/jevitate-ux-review/SKILL.md +106 -16
- package/skills/jevitate-verify-fix/SKILL.md +76 -0
package/dist/regression-api.js
CHANGED
|
@@ -1,16 +1,397 @@
|
|
|
1
|
+
import { anchoredRecording } from "./journey-prefix.js";
|
|
2
|
+
import { safeChildPath } from "@jevitate/domain";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
1
4
|
import { readFile } from "node:fs/promises";
|
|
5
|
+
import { BrowseTheWebToken } from "@jevitate/screenplay";
|
|
2
6
|
import { RecordingSchema } from "@jevitate/recording";
|
|
3
|
-
import {
|
|
4
|
-
import { minimizeRecording, makeSingleShotReproduces } from "@jevitate/regression";
|
|
5
|
-
import {
|
|
7
|
+
import { RecordingInterpreter } from "@jevitate/interpreter";
|
|
8
|
+
import { reproduceFailure, reproduceFailureAt, NeverFailedError, minimizeRecording, makeSingleShotReproduces, commitRegression, replayRegression, deriveOracleFromTranscript, oracleFromAssertion, appendOracleStep, fingerprintFailure, } from "@jevitate/regression";
|
|
9
|
+
import { parseSuccessSpec } from "./explore-api.js";
|
|
10
|
+
import { assertAuthorizedExploreTarget, monitorFor, evaluateNetworkCheck, describeCheck, verifyFix } from "@jevitate/explore";
|
|
11
|
+
import { rebaseRecording } from "./environments.js";
|
|
12
|
+
import { parsePersistedMission, findFinding } from "./verify-fix-api.js";
|
|
13
|
+
/** #213: `--id <id>` already names a committed regression — refused unless `--force`, checked
|
|
14
|
+
* BEFORE any reproduce/minimize attempt runs (never a browser-driven overwrite the caller didn't ask for). */
|
|
15
|
+
export class RegressionExistsError extends Error {
|
|
16
|
+
code = "E_REGRESSION_EXISTS";
|
|
17
|
+
constructor(id, dir) {
|
|
18
|
+
super(`regression '${id}' already exists in ${dir} — pass --force to overwrite it`);
|
|
19
|
+
this.name = "RegressionExistsError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The clear, actionable refusal #81 requires: a Recording with no failure to
|
|
24
|
+
* reproduce is refused rather than "minimized" into a vacuous artifact that
|
|
25
|
+
* can only ever pass.
|
|
26
|
+
*/
|
|
27
|
+
export class NoFailureToReproduceError extends Error {
|
|
28
|
+
code = "E_REGRESSION_NO_FAILURE";
|
|
29
|
+
constructor(message) {
|
|
30
|
+
super(message ??
|
|
31
|
+
"this Recording contains no failure to reproduce; pass --result <result.json> --fingerprint <fp> or a Recording whose final step's expect fails");
|
|
32
|
+
this.name = "NoFailureToReproduceError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** `--result` was given but carries no usable oracle at all: no failed `--success` check (of ANY
|
|
36
|
+
* kind — page/reloadThen/requestMade/responseStatus), no matching declared-invariant defect, and no
|
|
37
|
+
* APP-caused failed-action step (jevitate's own engine refusals — #92's repeated-side-effect guard,
|
|
38
|
+
* a budget/fail-closed cutoff, … — are never a valid oracle; #119/#129). */
|
|
39
|
+
export class NoOracleInResultError extends Error {
|
|
40
|
+
code = "E_REGRESSION_NO_ORACLE";
|
|
41
|
+
constructor(resultPath, detail) {
|
|
42
|
+
super(`--result ${resultPath} has no usable oracle: ${detail}`);
|
|
43
|
+
this.name = "NoOracleInResultError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* #213: `--fingerprint` names one of the mission's OWN findings, but a hard-signal one (http-5xx,
|
|
48
|
+
* hang, server-log, adversarial-misuse, … — everything but `invariant`, which `captureInvariantRegression`
|
|
49
|
+
* already handles). Its oracle is the signal itself, never a page/success-check assertion —
|
|
50
|
+
* `deriveOracle` (transcript/checks only) can never express it, so falling through to it just
|
|
51
|
+
* produces a generic "no usable oracle" that reads as the `--result` file being unusable, when the
|
|
52
|
+
* real answer is: this isn't the tool for it. Points at the route that IS: `ledger add` (repro
|
|
53
|
+
* material for `ledger verify` / `verify-fix`).
|
|
54
|
+
*/
|
|
55
|
+
export class RegressionHardSignalOracleError extends Error {
|
|
56
|
+
code = "E_REGRESSION_HARD_SIGNAL";
|
|
57
|
+
constructor(resultPath, finding) {
|
|
58
|
+
super(`--fingerprint ${finding.fingerprint} is a ${finding.kind} defect in ${resultPath} — a hard signal with its own oracle, ` +
|
|
59
|
+
`which 'regression capture' cannot turn into a page/success-check regression. Keep its repro material with ` +
|
|
60
|
+
`'jevitate ledger add ${resultPath} ${finding.fingerprint}', then re-check it with 'jevitate ledger verify' or ` +
|
|
61
|
+
`'jevitate verify-fix ${finding.fingerprint}'.`);
|
|
62
|
+
this.name = "RegressionHardSignalOracleError";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** An explicit `--fingerprint` disagrees with the oracle derived from `--result`. */
|
|
66
|
+
export class FingerprintMismatchError extends Error {
|
|
67
|
+
code = "E_REGRESSION_FINGERPRINT_MISMATCH";
|
|
68
|
+
constructor(given, derived) {
|
|
69
|
+
super(`--fingerprint '${given}' does not match the oracle derived from --result ('${derived}'), and is not a defect/invariant fingerprint in that result either`);
|
|
70
|
+
this.name = "FingerprintMismatchError";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** An invariant defect matched by `--fingerprint`, but `verify-fix`'s own replay says it does not
|
|
74
|
+
* currently reproduce (fixed, or inconclusive) — never fabricated into a regression. */
|
|
75
|
+
export class InvariantNotReproducingError extends Error {
|
|
76
|
+
code = "E_REGRESSION_INVARIANT_NOT_REPRODUCING";
|
|
77
|
+
constructor(invariantId, verdict, reason) {
|
|
78
|
+
super(`invariant '${invariantId}' does not currently reproduce (verify-fix verdict: ${verdict}): ${reason}`);
|
|
79
|
+
this.name = "InvariantNotReproducingError";
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Derives a failure oracle from a mission result (#81 item 2, extended by #119/#129): the mission's
|
|
84
|
+
* own last APP-CAUSED failed action (preferred — concrete, page-actionable, and replayable
|
|
85
|
+
* regardless of what the mission's success check even was; jevitate's own engine refusals are
|
|
86
|
+
* excluded by `deriveOracleFromTranscript` itself), or its first failed `--success` check, of ANY
|
|
87
|
+
* kind: `page`/`reloadThen` become a Recording `Assertion`; `requestMade`/`responseStatus` become a
|
|
88
|
+
* network-check oracle (no `Assertion` exists for network traffic, so it is never turned into a
|
|
89
|
+
* Recording step). `undefined` when neither is available.
|
|
90
|
+
*/
|
|
91
|
+
function deriveOracle(missionResult) {
|
|
92
|
+
const body = missionResult.result ?? missionResult;
|
|
93
|
+
const fromTranscript = deriveOracleFromTranscript(body.transcript ?? []);
|
|
94
|
+
if (fromTranscript)
|
|
95
|
+
return fromTranscript;
|
|
96
|
+
for (const check of body.checks ?? []) {
|
|
97
|
+
if (check.passed)
|
|
98
|
+
continue;
|
|
99
|
+
let parsed;
|
|
100
|
+
try {
|
|
101
|
+
parsed = parseSuccessSpec(check.check);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (parsed.kind === "page" || parsed.kind === "reloadThen")
|
|
107
|
+
return oracleFromAssertion(parsed.assertion);
|
|
108
|
+
if (parsed.kind === "requestMade") {
|
|
109
|
+
return { source: "network-check", check: { kind: "requestMade", method: parsed.method, pathGlob: parsed.pathGlob } };
|
|
110
|
+
}
|
|
111
|
+
if (parsed.kind === "responseStatus") {
|
|
112
|
+
return { source: "network-check", check: { kind: "responseStatus", method: parsed.method, pathGlob: parsed.pathGlob, status: parsed.status } };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
/** Explains, accurately, why `deriveOracle` found nothing — named so #119's misleading refusal
|
|
118
|
+
* ("has no failed success check" when one WAS present, just engine-refused/unusable) cannot recur. */
|
|
119
|
+
function describeNoOracle(missionResult) {
|
|
120
|
+
const body = missionResult.result ?? missionResult;
|
|
121
|
+
const transcript = body.transcript ?? [];
|
|
122
|
+
const checks = body.checks ?? [];
|
|
123
|
+
const failedChecks = checks.filter((c) => !c.passed);
|
|
124
|
+
const failedActions = transcript.filter((t) => !t.actOk && t.descriptor !== undefined);
|
|
125
|
+
const onlyEngineRefusals = failedActions.length > 0 && failedActions.every((t) => t.origin === "engine" || /refused|fail-closed|budget exhausted/.test(t.reason ?? ""));
|
|
126
|
+
const parts = [];
|
|
127
|
+
parts.push(failedChecks.length === 0 ? "no --success check failed" : `${failedChecks.length} failed check(s) could not be parsed into an oracle`);
|
|
128
|
+
parts.push(onlyEngineRefusals
|
|
129
|
+
? "the transcript's only failed step(s) were jevitate's own engine refusal(s) (never a valid oracle)"
|
|
130
|
+
: "no app-caused failed-action step in the transcript");
|
|
131
|
+
return parts.join("; ");
|
|
132
|
+
}
|
|
6
133
|
export async function runRegressionCapture(opts) {
|
|
134
|
+
// #221: the id names the committed files — one safe segment inside the regressions dir, never a path.
|
|
135
|
+
const recordingPath = safeChildPath(opts.regressionsDir, opts.id, { what: "regression id", suffix: ".recording.json" });
|
|
136
|
+
// #213: an existing id is refused (fail closed) BEFORE any reproduce/minimize attempt runs —
|
|
137
|
+
// never a browser-driven overwrite the caller did not ask for. --force opts in.
|
|
138
|
+
if (opts.force !== true && existsSync(recordingPath)) {
|
|
139
|
+
throw new RegressionExistsError(opts.id, opts.regressionsDir);
|
|
140
|
+
}
|
|
7
141
|
const raw = JSON.parse(await readFile(opts.failingRecordingPath, "utf8"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
142
|
+
const parsed = RecordingSchema.parse(raw);
|
|
143
|
+
const recording = opts.anchored === true ? anchoredRecording(parsed) : parsed;
|
|
144
|
+
const attempts = opts.attempts ?? 3;
|
|
145
|
+
let missionResult;
|
|
146
|
+
let persistedMission;
|
|
147
|
+
if (opts.resultPath) {
|
|
148
|
+
const rawResult = JSON.parse(await readFile(opts.resultPath, "utf8"));
|
|
149
|
+
missionResult = rawResult;
|
|
150
|
+
try {
|
|
151
|
+
persistedMission = parsePersistedMission(rawResult);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Not every --result file matches verify-fix's typed mission shape (e.g. a hand-authored test
|
|
155
|
+
// fixture with only `{ transcript, checks }`) — the transcript/checks view still works below.
|
|
156
|
+
persistedMission = undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// An explicit --fingerprint matching one of the mission's OWN declared-invariant defects
|
|
160
|
+
// (#119/#129): re-checked the same way `verify-fix` does (reusing its defect lookup,
|
|
161
|
+
// `findFinding`), never turned into a Recording step — an invariant is not a page `Assertion`.
|
|
162
|
+
if (opts.fingerprint !== undefined && persistedMission !== undefined) {
|
|
163
|
+
const finding = findFinding(persistedMission, opts.fingerprint);
|
|
164
|
+
if (finding !== undefined && finding.kind === "invariant" && finding.invariantId !== undefined && persistedMission.invariantSpec !== undefined) {
|
|
165
|
+
return captureInvariantRegression(opts, recording, persistedMission, finding, attempts);
|
|
166
|
+
}
|
|
167
|
+
// #213: a hard-signal defect (http-5xx, hang, server-log, adversarial-misuse, …) has its own
|
|
168
|
+
// oracle — never a page/success-check assertion `deriveOracle` could derive. Refuse up front
|
|
169
|
+
// with the route that DOES work (the ledger), before falling through to a generic "no usable
|
|
170
|
+
// oracle" that reads as the --result file being unusable.
|
|
171
|
+
if (finding !== undefined && finding.kind !== "invariant") {
|
|
172
|
+
throw new RegressionHardSignalOracleError(opts.resultPath, finding);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
let working = recording;
|
|
176
|
+
let requiredFingerprint;
|
|
177
|
+
let networkOracle;
|
|
178
|
+
if (missionResult !== undefined) {
|
|
179
|
+
const oracle = deriveOracle(missionResult);
|
|
180
|
+
if (!oracle)
|
|
181
|
+
throw new NoOracleInResultError(opts.resultPath, describeNoOracle(missionResult));
|
|
182
|
+
if (oracle.source === "network-check") {
|
|
183
|
+
networkOracle = oracle.check;
|
|
184
|
+
const derivedSig = `network:${describeCheck(asSuccessCheck(oracle.check))}`;
|
|
185
|
+
if (opts.fingerprint !== undefined && opts.fingerprint !== derivedSig) {
|
|
186
|
+
throw new FingerprintMismatchError(opts.fingerprint, derivedSig);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const { augmented, flatIndex } = appendOracleStep(working, oracle);
|
|
191
|
+
working = augmented;
|
|
192
|
+
requiredFingerprint = fingerprintFailure(working, flatIndex);
|
|
193
|
+
if (opts.fingerprint !== undefined && opts.fingerprint !== requiredFingerprint.stepSignature) {
|
|
194
|
+
throw new FingerprintMismatchError(opts.fingerprint, requiredFingerprint.stepSignature);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (opts.fingerprint !== undefined) {
|
|
199
|
+
requiredFingerprint = { stepSignature: opts.fingerprint };
|
|
200
|
+
}
|
|
201
|
+
if (networkOracle !== undefined) {
|
|
202
|
+
return captureNetworkCheckRegression(opts, working, networkOracle, attempts);
|
|
203
|
+
}
|
|
204
|
+
let report;
|
|
205
|
+
try {
|
|
206
|
+
report = requiredFingerprint
|
|
207
|
+
? await reproduceFailureAt(working, opts.makeActor, requiredFingerprint, attempts)
|
|
208
|
+
: await reproduceFailure(working, opts.makeActor, attempts);
|
|
209
|
+
}
|
|
210
|
+
catch (cause) {
|
|
211
|
+
if (cause instanceof NeverFailedError)
|
|
212
|
+
throw new NoFailureToReproduceError();
|
|
213
|
+
throw cause;
|
|
214
|
+
}
|
|
10
215
|
if (report.label === "flaky")
|
|
11
216
|
return { skipped: "flaky", rate: report.rate };
|
|
12
217
|
const reproduces = makeSingleShotReproduces(opts.makeActor, report.fingerprint);
|
|
13
|
-
const minimized = await minimizeRecording(
|
|
218
|
+
const minimized = await minimizeRecording(working, reproduces);
|
|
14
219
|
return commitRegression(opts.regressionsDir, opts.id, minimized, report, opts.bugSummary);
|
|
15
220
|
}
|
|
221
|
+
/** `NetworkCheckOracle` (`@jevitate/regression`, duck-typed, no `Assertion`) as the concrete
|
|
222
|
+
* `SuccessCheck` `@jevitate/explore`'s network-check evaluator expects. */
|
|
223
|
+
function asSuccessCheck(check) {
|
|
224
|
+
return check.status === undefined
|
|
225
|
+
? { kind: "requestMade", method: check.method, pathGlob: check.pathGlob }
|
|
226
|
+
: { kind: "responseStatus", method: check.method, pathGlob: check.pathGlob, status: check.status };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Replays `recording` once (a fresh session from `makeActor`), capturing every request the replay
|
|
230
|
+
* itself sends (`@jevitate/explore`'s page monitor — the SAME capture a live mission's own
|
|
231
|
+
* `requestMade`/`responseStatus` check reads), and re-evaluates `check` against exactly that
|
|
232
|
+
* traffic. Returns whether the check STILL FAILS (the defect reproduced) — never whether the
|
|
233
|
+
* Recording interpreter's own step outcomes succeeded, which is irrelevant to a network check.
|
|
234
|
+
*/
|
|
235
|
+
async function replayAndCheckNetwork(makeActor, recording, check) {
|
|
236
|
+
const actor = await makeActor();
|
|
237
|
+
const page = actor.ability(BrowseTheWebToken).session.page;
|
|
238
|
+
const monitor = monitorFor(page);
|
|
239
|
+
await monitor.instrument().catch(() => undefined);
|
|
240
|
+
const capture = monitor.startCapture();
|
|
241
|
+
try {
|
|
242
|
+
await new RecordingInterpreter().run(actor, recording);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// A replay that throws (browser/automation error) still leaves whatever the app sent captured;
|
|
246
|
+
// the network check is evaluated over that, same as a replay that merely fails a later step.
|
|
247
|
+
}
|
|
248
|
+
// The interpreter's own postcondition can resolve before a write it triggered finishes (a click's
|
|
249
|
+
// `expect` is often already true pre-click, e.g. "the button stayed visible") — wait for the
|
|
250
|
+
// network to go idle before reading what was captured, or a fast write can be missed entirely.
|
|
251
|
+
await monitor.waitSettled({ ceilingMs: 5_000 }).catch(() => undefined);
|
|
252
|
+
monitor.stopCapture(capture);
|
|
253
|
+
const result = evaluateNetworkCheck(asSuccessCheck(check), capture.sent(), capture.truncated);
|
|
254
|
+
return !result.passed;
|
|
255
|
+
}
|
|
256
|
+
async function captureNetworkCheckRegression(opts, recording, check, attempts) {
|
|
257
|
+
let reproducedCount = 0;
|
|
258
|
+
for (let i = 0; i < attempts; i++) {
|
|
259
|
+
if (await replayAndCheckNetwork(opts.makeActor, recording, check))
|
|
260
|
+
reproducedCount++;
|
|
261
|
+
}
|
|
262
|
+
if (reproducedCount === 0)
|
|
263
|
+
throw new NoFailureToReproduceError();
|
|
264
|
+
const rate = reproducedCount / attempts;
|
|
265
|
+
if (rate !== 1)
|
|
266
|
+
return { skipped: "flaky", rate };
|
|
267
|
+
const report = {
|
|
268
|
+
attempts,
|
|
269
|
+
reproducedCount,
|
|
270
|
+
rate,
|
|
271
|
+
label: "reproducible",
|
|
272
|
+
// Synthetic — a network check has no Recording step, so this is a description, never a
|
|
273
|
+
// structural signature `matchesFingerprint` re-derives (`regression run` uses `meta.oracle`).
|
|
274
|
+
fingerprint: { stepSignature: `network:${describeCheck(asSuccessCheck(check))}` },
|
|
275
|
+
firstFailureAt: -1,
|
|
276
|
+
};
|
|
277
|
+
// No structural step to minimize against (#119/#129): commit the captured Recording as-is.
|
|
278
|
+
return commitRegression(opts.regressionsDir, opts.id, recording, report, opts.bugSummary, { kind: "network", check });
|
|
279
|
+
}
|
|
280
|
+
async function captureInvariantRegression(opts, fallbackRecording, mission, finding, attempts) {
|
|
281
|
+
const invariantSpec = mission.invariantSpec;
|
|
282
|
+
const invariantId = finding.invariantId;
|
|
283
|
+
const recording = finding.recording ?? mission.recording ?? fallbackRecording;
|
|
284
|
+
// Guardrail: the replay may only ever touch the mission's own authorized origins.
|
|
285
|
+
assertAuthorizedExploreTarget(mission.target.seedUrl, mission.target.allowlist);
|
|
286
|
+
const verifyResult = await verifyFix({
|
|
287
|
+
recording,
|
|
288
|
+
recordingStepIndex: finding.repro.recordingStepIndex,
|
|
289
|
+
fingerprint: finding.fingerprint,
|
|
290
|
+
defectKind: "invariant",
|
|
291
|
+
invariant: { spec: invariantSpec, id: invariantId, allowlist: mission.target.allowlist, baseUrl: mission.target.seedUrl },
|
|
292
|
+
replays: attempts,
|
|
293
|
+
openSession: async () => {
|
|
294
|
+
const actor = await opts.makeActor();
|
|
295
|
+
const page = actor.ability(BrowseTheWebToken).session.page;
|
|
296
|
+
// Session teardown is owned by the caller's `makeActor` (the CLI collects and closes every
|
|
297
|
+
// opened session after the whole capture command finishes — same convention the step-based
|
|
298
|
+
// path above already relies on via `@jevitate/regression`'s `makeActor` contract).
|
|
299
|
+
return { page, actor, close: async () => undefined };
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
if (verifyResult.verdict === "still-reproduces") {
|
|
303
|
+
const ran = verifyResult.attempts?.filter((a) => a.ran).length ?? attempts;
|
|
304
|
+
const report = {
|
|
305
|
+
attempts: ran,
|
|
306
|
+
reproducedCount: ran,
|
|
307
|
+
rate: 1,
|
|
308
|
+
label: "reproducible",
|
|
309
|
+
fingerprint: { stepSignature: `invariant:${invariantId}` },
|
|
310
|
+
firstFailureAt: finding.repro.recordingStepIndex,
|
|
311
|
+
};
|
|
312
|
+
return commitRegression(opts.regressionsDir, opts.id, recording, report, opts.bugSummary, {
|
|
313
|
+
kind: "invariant",
|
|
314
|
+
invariantId,
|
|
315
|
+
invariantSpec,
|
|
316
|
+
recordingStepIndex: finding.repro.recordingStepIndex,
|
|
317
|
+
allowlist: mission.target.allowlist,
|
|
318
|
+
baseUrl: mission.target.seedUrl,
|
|
319
|
+
defectFingerprint: finding.fingerprint,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
if (verifyResult.verdict === "intermittent") {
|
|
323
|
+
const ran = verifyResult.attempts?.filter((a) => a.ran).length ?? attempts;
|
|
324
|
+
const fired = verifyResult.attempts?.filter((a) => a.ran && a.fired).length ?? 0;
|
|
325
|
+
return { skipped: "flaky", rate: ran === 0 ? 0 : fired / ran };
|
|
326
|
+
}
|
|
327
|
+
throw new InvariantNotReproducingError(invariantId, verifyResult.verdict, verifyResult.reason);
|
|
328
|
+
}
|
|
329
|
+
/** No committed `<id>.recording.json`/`<id>.meta.json` in the regressions directory. */
|
|
330
|
+
export class RegressionNotFoundError extends Error {
|
|
331
|
+
code = "E_REGRESSION_NOT_FOUND";
|
|
332
|
+
constructor(id, dir) {
|
|
333
|
+
super(`no regression '${id}' in ${dir}`);
|
|
334
|
+
this.name = "RegressionNotFoundError";
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* `regression run <id>` (#129 item 4): replays a committed regression and reports whether it still
|
|
339
|
+
* REPRODUCES or is now FIXED. Dispatches on `meta.oracle` — absent (the default/original) means the
|
|
340
|
+
* committed Recording's own trailing `assert` step IS the oracle, replayed by `@jevitate/regression`'s
|
|
341
|
+
* `replayRegression` (its `expect` failing/holding is the verdict, no different from any other
|
|
342
|
+
* `RecordingInterpreter` run); a `network`/`invariant` oracle is re-evaluated the SAME way capture
|
|
343
|
+
* established it (`replayAndCheckNetwork` / `verifyFix`'s invariant re-check) — never duplicated.
|
|
344
|
+
*/
|
|
345
|
+
export async function runRegressionRun(opts) {
|
|
346
|
+
// #221: one safe segment inside the regressions dir, never a path.
|
|
347
|
+
const recordingPath = safeChildPath(opts.regressionsDir, opts.id, { what: "regression id", suffix: ".recording.json" });
|
|
348
|
+
const metaPath = safeChildPath(opts.regressionsDir, opts.id, { what: "regression id", suffix: ".meta.json" });
|
|
349
|
+
let recording;
|
|
350
|
+
let meta;
|
|
351
|
+
try {
|
|
352
|
+
recording = RecordingSchema.parse(JSON.parse(await readFile(recordingPath, "utf8")));
|
|
353
|
+
meta = JSON.parse(await readFile(metaPath, "utf8"));
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
throw new RegressionNotFoundError(opts.id, opts.regressionsDir);
|
|
357
|
+
}
|
|
358
|
+
const env = opts.environment;
|
|
359
|
+
if (env !== undefined)
|
|
360
|
+
recording = rebaseRecording(recording, env);
|
|
361
|
+
const stored = meta.oracle;
|
|
362
|
+
const oracle = env === undefined || stored?.kind !== "invariant"
|
|
363
|
+
? stored
|
|
364
|
+
: { ...stored, baseUrl: `${env.baseUrl}${new URL(stored.baseUrl).pathname}`, allowlist: [...env.allowedOrigins] };
|
|
365
|
+
if (oracle === undefined) {
|
|
366
|
+
const actor = await opts.makeActor();
|
|
367
|
+
const outcome = await replayRegression(actor, recording);
|
|
368
|
+
return outcome === "failed"
|
|
369
|
+
? { id: opts.id, verdict: "reproduces", reason: "the committed Recording's own oracle step failed again on replay" }
|
|
370
|
+
: { id: opts.id, verdict: "fixed", reason: "the committed Recording replayed clean; its oracle step held" };
|
|
371
|
+
}
|
|
372
|
+
if (oracle.kind === "network") {
|
|
373
|
+
const spec = describeCheck(asSuccessCheck(oracle.check));
|
|
374
|
+
const stillFails = await replayAndCheckNetwork(opts.makeActor, recording, oracle.check);
|
|
375
|
+
return stillFails
|
|
376
|
+
? { id: opts.id, verdict: "reproduces", reason: `the network check (${spec}) still fails on replay` }
|
|
377
|
+
: { id: opts.id, verdict: "fixed", reason: `the network check (${spec}) now passes on replay` };
|
|
378
|
+
}
|
|
379
|
+
// oracle.kind === "invariant"
|
|
380
|
+
assertAuthorizedExploreTarget(oracle.baseUrl, oracle.allowlist);
|
|
381
|
+
const verifyResult = await verifyFix({
|
|
382
|
+
recording,
|
|
383
|
+
recordingStepIndex: oracle.recordingStepIndex,
|
|
384
|
+
fingerprint: oracle.defectFingerprint,
|
|
385
|
+
defectKind: "invariant",
|
|
386
|
+
invariant: { spec: oracle.invariantSpec, id: oracle.invariantId, allowlist: oracle.allowlist, baseUrl: oracle.baseUrl },
|
|
387
|
+
replays: opts.attempts ?? 3,
|
|
388
|
+
openSession: async () => {
|
|
389
|
+
const actor = await opts.makeActor();
|
|
390
|
+
const page = actor.ability(BrowseTheWebToken).session.page;
|
|
391
|
+
return { page, actor, close: async () => undefined };
|
|
392
|
+
},
|
|
393
|
+
});
|
|
394
|
+
const verdict = verifyResult.verdict === "still-reproduces" ? "reproduces" : verifyResult.verdict;
|
|
395
|
+
return { id: opts.id, verdict, reason: verifyResult.reason };
|
|
396
|
+
}
|
|
16
397
|
//# sourceMappingURL=regression-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regression-api.js","sourceRoot":"","sources":["../src/regression-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAexD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAiC;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAE7E,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEjE,OAAO,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5F,CAAC"}
|
|
1
|
+
{"version":3,"file":"regression-api.js","sourceRoot":"","sources":["../src/regression-api.ts"],"names":[],"mappings":"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"}
|