Equividence is a public demonstration tool. It accepts bounded SQL text, but it does not connect to production databases and does not accept database credentials.
Please use GitHub private vulnerability reporting. Do not open a public issue for an unpatched vulnerability or include API keys, SQL containing private data, or deployment credentials in a report.
Include:
- the affected commit;
- a short reproduction;
- the expected and observed behavior;
- whether the issue affects the browser, API, Worker, generated artifacts, or deployment image.
flowchart TB
U["Developer browser"] -->|"bounded analysis input"| A["Express API"]
A -->|"structured evidence only"| M["GPT-5.6"]
M -->|"typed proposal"| A
A -->|"validated proposal"| U
U -->|"human-authorized contract"| W["Ephemeral SQLite Worker"]
W -->|"witness + replay record"| U
P["Production database"] -. "never connected" .- U
K["API key"] -. "server-side only" .- A
- OpenAI credentials remain server-side and are never exposed through Vite variables.
- Production startup requires an
EQUIVIDENCE_SAFETY_SALTof at least 32 characters. - The API rejects cross-site analysis requests and disables
x-powered-by. - Analysis bodies are limited to 96 KB.
- Public analysis is limited to five requests per minute per hashed client identifier.
- Concurrent model calls are bounded per process.
- Model output is validated against a strict schema and then checked against server-extracted spans, IDs, roles, and relationships.
- SQL execution occurs only in a fresh browser Worker using in-memory SQLite WASM.
- The Worker uses defensive mode, an authorizer, progress deadlines, and hard termination.
- Unsupported constructs fail closed before analysis or execution.
- The product does not persist SQL, witness rows, or model responses on the server.
- Security headers restrict scripts, frames, forms, permissions, and cross-origin resources.
- The Docker runtime uses an unprivileged user and excludes local
.envfiles from its build context.
Set secrets in the deployment platform, not in source control:
OPENAI_API_KEY=...
EQUIVIDENCE_SAFETY_SALT=at-least-32-random-charactersGenerate a salt with:
openssl rand -hex 32The live Express deployment should preserve these defense-in-depth response headers:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Set EQUIVIDENCE_TRUST_PROXY=1 only when exactly one trusted reverse proxy supplies the forwarded client address.
The GitHub Pages walkthrough cannot set these headers. It ships no key, accepts recorded analysis only for unchanged fixtures, disables OPFS, and keeps SQLite in memory. Use the live server deployment when the full response-header posture or live GPT-5.6 analysis is required.
- In-memory rate and concurrency limits are per process. A multi-replica deployment needs shared or edge enforcement.
- Evidence fingerprints detect accidental mismatch; they are not signatures or proof of origin.
- Generated replay SQL and tests are artifacts for review. Run them in an isolated development environment.
- The supported SQL contract is intentionally narrow and is not a general SQL sandbox.
- A reproduced counterexample proves one broken invariant. It does not prove the absence of other failures.