This runbook operates the completed reference vertical slice on one trusted workstation. It is a private, simulation-backed demonstration. It is not a production VPN, an Android kill switch, or evidence that surveillance is occurring.
- Run the stack only on a workstation you control.
- The Core API remains on an internal Docker network. Only the authenticated
dashboard is published to the host, on
127.0.0.1:4173. - The simulator observes and mutates only its deterministic scenario state. It does not change the host firewall, routes, DNS, VPN, or mesh configuration.
- Do not expose the dashboard port to another interface, proxy it publicly, or reuse the generated development credentials in another environment.
- Docker Desktop or Docker Engine with Compose v2.
- Node.js 24 or newer.
- At least 2 GB of free disk space for images, build cache, and local state.
Go, Buf, Staticcheck, govulncheck, JDK, and Gradle do not need to be installed on the host for the normal repository verification path; the harness uses pinned containers and the checked-in Gradle wrapper where appropriate.
From the repository root:
npm run devThe launcher creates or repairs .antiflock/dev.env, starts Core, waits for
its health check, then starts the continuous simulator and dashboard. Existing
credentials are preserved when the file is valid.
Open http://127.0.0.1:4173. The browser prompts for HTTP Basic credentials:
- Username:
operator - Password: the value of
ANTIFLOCK_DASHBOARD_TOKENin.antiflock/dev.env
Treat the environment file as a secret. Do not paste it into a command, issue, chat, log, screenshot, or browser URL. The dashboard credential is independent from the scoped Core credentials, and the Core operator credential is never sent to browser JavaScript.
Confirm the stack is healthy without printing credentials:
docker compose --env-file .antiflock/dev.env psExpected services are core, simulator, and web; Core should report
healthy. A newly started dashboard may briefly show CHECKING CORE, then
LIVE CORE when its projections and event stream are available.
npm run labIf the continuous simulator is running, the launcher pauses it, executes one isolated coffee-shop scenario, and resumes it. A successful result is JSON with:
schemaVersionequal toantiflock.live-simulation/v1;simulationequal totrue;- the action moving from
HOLDtoALLOWonly after recovery evidence; - two context events, four control-specific verification events, and five lifecycle audit events; and
verifiedequal totrue.
The dashboard should show an identifier-withheld untrusted Wi-Fi environment,
an observed route, and simulation-labeled mesh, DNS, policy-route, and external
egress verification. DETECTED context is never promoted to VERIFIED
evidence by the scenario.
npm run verifyThis is the locked verification gate. It checks protocol generation, Go formatting/tests/race analysis/vet/build/static analysis/vulnerability reachability, JavaScript lockfiles/audits/tests/builds/type checks/lint, the Android wrapper, and the ten strict acceptance gates. A nonzero exit means the reference slice is not releasable.
For a quick machine-readable acceptance report only:
npm run acceptance:strictThe secure-action-sdk acceptance gate includes the live Compose-backed SDK
harness. It can also be run directly while diagnosing that boundary:
npm run test:sdk:liveThat harness temporarily creates a randomly selected loopback-only bridge to Core, opts into executing simulation evidence for its controlled callback, then removes the bridge and restores the prior stack state. Normal SDK callers deny simulation evidence by default.
The Linux agent can inspect a plan locally without reserving replay state, running host checks, or invoking a driver:
antiflock-agent plan verify `
--plan .\plan.json `
--deployment-id <expected-deployment-id> `
--node-id <expected-node-id> `
--plan-key-id <expected-policy-key-id> `
--plan-public-key .\policy-public-key.pem `
--capabilities .\node-capabilities.json `
--format humanThe public-key file must contain exactly one PKIX Ed25519 PUBLIC KEY PEM
block. Plan and capability inputs must be bounded regular files; symbolic links
and unknown protobuf JSON fields are rejected.
Verification reports these facts separately:
valid: signature, target, expiry, schema, layout, and signed parameter checks passed;capabilityCompatible: the supplied node-bound manifest declares every capability required by the plan; andexecutable: alwaysfalsein this release.
A valid signature proves provenance and integrity only. It does not prove that
content is safe or true, grant authorization, establish driver health, or make
the plan executable. The JSON form (--format json, the default) is stable as
antiflock.plan-verification/v1. Firewall, mesh, route, DNS, and recovery
readiness are included explicitly and currently report unavailable. Do not
bypass these results by invoking the library adapter directly.
Stop services while preserving the SQLite database and simulator identity:
npm run downmake clean is intentionally destructive: it stops the stack and removes the
named Docker volumes before deleting generated local build output. Use it only
when a complete local-state reset is intended. The private development
credential file is not removed.
If the dashboard cannot connect:
- Run
docker compose --env-file .antiflock/dev.env psand confirm Core is healthy. - Run
npm run down, thennpm run dev. - Confirm another process is not using
127.0.0.1:4173. - If
.antiflock/dev.envis invalid, runnpm run dev:env; the helper repairs missing values without printing secrets. - Use
docker compose --env-file .antiflock/dev.env logs --tail 100 core webonly on the trusted workstation. Review output before sharing it.
Do not work around an authentication, health, evidence, or policy failure by disabling the check. Preserve the failure and investigate it.
Production use requires, at minimum, a real Android VpnService and packet
transport, real-device leak and recovery testing, platform keystore enrollment,
production TLS and node authentication, reviewed privileged enforcement,
imported surveillance datasets with license/provenance controls, production
Scrambler execution, and independent security/privacy review. The exact gates
are tracked in release status and
open decisions.