Skip to content

Production console browser proof

This drill runs only on randomized 127.0.0.1 ports. It builds the real @sveltejs/adapter-node console, starts it against the committed mock Chorus stream, and drives Chromium through the external agent-browser CLI. It does not contact or change a deployed Chorus instance.

Install agent-browser and Chromium separately; the repository does not vendor either runtime. The runner discovers agent-browser, node, and Chrome/Chromium on PATH, or accepts explicit paths:

Terminal window
S22_AGENT_BROWSER_BIN=/path/to/agent-browser \
S22_AGENT_BROWSER_NODE_BIN=/path/to/node \
S22_AGENT_BROWSER_DAEMON_JS=/path/to/agent-browser/dist/daemon.js \
S22_CHROMIUM_EXECUTABLE=/path/to/google-chrome \
bun run scripts/run-s22-console-browser-proof.ts

S22_AGENT_BROWSER_DAEMON_JS is optional. When present, the runner owns that daemon directly; otherwise the CLI starts its own daemon. The default cold-start allowance is 45 seconds, which covers a roughly 30-second first launch. Set S22_AGENT_BROWSER_COLD_START_TIMEOUT_MS to 30000–300000 when the daemon lives on slow storage.

By default each run publishes a new owner-only artifact at:

.gsd/milestones/M001/slices/S22/S22-CONSOLE-BROWSER-EVIDENCE-<run_id>.json

Use S22_CONSOLE_EVIDENCE_FILE or the optional positional argument to select an archival path. Existing paths are never replaced. Publication is atomic, mode 0600, and occurs only after cleanup, JSON Schema validation, cross-field semantic validation, source revalidation, and a raw-credential scan all pass.

The record binds runtime and audit-source manifest hashes and records Node, agent-browser, and Chromium versions. It proves:

  • one shared live SSE connection and one visible event delivered once;
  • checkpoint seeding, reload resume with Last-Event-ID, and no duplicate card;
  • a visible expired-cursor reset followed by authoritative-snapshot recovery;
  • visible authorization and terminal 4xx states, each followed by recovery;
  • browser requests stay on the console origin, while bearer authorization stays on the server-to-fixture hop and no API key appears in URLs or JavaScript storage;
  • zero browser-console errors and zero uncaught page errors; and
  • browser close cancels the upstream stream, all recorded process-tree members exit, both randomized ports close, and the isolated daemon socket disappears.

Validate an archived record against unchanged source with:

Terminal window
bun run scripts/validate-s22-console-browser-evidence.ts \
schemas/audit/s22-console-browser-evidence.schema.json \
.gsd/milestones/M001/slices/S22/S22-CONSOLE-BROWSER-EVIDENCE-<run_id>.json

A passing artifact is audit evidence, not deployment approval. It records orchestrator_production_deployment_command_invoked: false, which narrowly attests that the reviewed proof orchestrator did not invoke a production deployment command.