Artifact Hasher
artifact.rs● ADR-0003 · HUMAN SIGN-OFF ENFORCED
Extension bundles drift. Preflight gates every build before it reaches the Chrome Web Store: deterministic evidence, versioned policy packs, and a human decision when it matters.
artifact.rsextract.rsdiff.rsrules.rsreview.rsPin to cws-2026.1. Extend with your own claims.json. Rules are pure Rust, auditable, and deterministic.
CWS-01 MV3 required BLOCKER
CWS-03 No broad host patterns HIGH
CWS-05 No eval / WASM without… BLOCKER
CWS-07 Declared hosts must match… BLOCKER
PRIV-01 Host list pinned per tenant BLOCKER
PRIV-02 Permissions require justification HIGH
NODE-03 No websocket to non-allowlisted host BLOCKER
CLAIM-01 claims.json version and shape BLOCKER
pf_live scoped to project, not user$ preflight review ./build.zip \ --claims ./claims.json \ --pack cws-2026.1 \ --key $PREFLIGHT_KEY ✓ artifact sha256:9f3c… ✓ 5 agents ok → verdict: BLOCK (CWS-07)
$ preflight push ./build.zip \ --project harbor-node \ --key $PREFLIGHT_KEY → review: r/9f3c… → https://preflight.aetherhost.com.ng → awaiting sign-off
{
"version": "1.4.2",
"hosts": ["api.harbor.run", "cdn.harbor.run"],
"permissions": ["storage", "activeTab"],
"privacy": "strict",
"justifications": {
"storage": "session state for isolated tenant"
}
}› loading drifted-host.zip …
› parsing manifest.json — ok
› checking claims.json — hosts match
New host *.analytics.io not in claims.json · CWS-07
Preflight runs in CI, blocks drift, and forces a reviewer when policy fails. Rust, deterministic. No JS execution. Same binary locally and in your pipeline.
How to use Preflight across the Web Console, the Rust CLI in your terminal, and CI/CD pipelines.
Every Organization member and Individual user gets a pf_live_<prefix>_<secret> key. You can use that exact same key in the browser console OR in your terminal:
# 1. Run deterministic local scan with your API key:
cargo run -- review fixtures/harbor-node/clean-relay \
--claims fixtures/harbor-node/claims.json \
--key pf_live_yourprefix_yoursecret \
--out reviews/clean
# 2. Push local build + claims from terminal straight to your Web Console project:
cargo run -- push fixtures/harbor-node/clean-relay.zip \
--project <YOUR_PROJECT_ID> \
--claims fixtures/harbor-node/claims.json \
--key pf_live_yourprefix_yoursecret \
--api http://localhost:3080
The scanner evaluates two built-in rule packs against your extension artifact and claims.json:
| Control | Pack | Severity | What It Verifies |
|---|---|---|---|
| CWS-01 | cws-2026.1 | blocker | manifest_version must be 3. |
| CWS-02 | cws-2026.1 | high | Every file referenced in manifest.json exists in the archive. |
| CWS-03 / CWS-07 | cws-2026.1 | high | Blocks broad host patterns (*://*/*, <all_urls>) and cleartext http:// or ws:// endpoints. |
| CWS-05 / CWS-06 | cws-2026.1 | high | Requires an https:// privacy URL and a declared purpose for every manifest permission. |
| CWS-08 | cws-2026.1 | blocker | Blocks eval(), new Function(), remote script imports, and unsafe-eval CSP. |
| NODE-01 / NODE-02 | node-client-2026.1 | blocker | Every manifest host permission and JS network destination must match claims.allowed_hosts. |
| NODE-03 / NODE-04 | node-client-2026.1 | blocker/high | Networked extensions must enforce an explicit consent check and a runtime kill switch. |
| NODE-06 / NODE-07 | node-client-2026.1 | high | Blocks private/loopback network targets (127.0.0.1, 192.168.x.x) and third-party update_url hosts. |
Preflight isolates every workspace at the database, API key, and filesystem levels:
accountType: "organization"): Designed for teams. Admins create a one-time, seven-day invitation link at POST /v1/members/invite. A member accepts it with the invited WorkOS email; CI always receives a separately minted restricted key.accountType: "individual"): Designed for solo developers. Creates a personal workspace with zero team-management overhead while still supporting additional personal CLI/CI keys.ci role can upload builds and poll verdicts, but are cryptographically blocked from signing off human release decisions.| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /v1/signup | Public | Create an organization or individual workspace and mint initial admin key. |
| POST | /v1/sandbox/evaluate | Public | Run ephemeral sandbox scan on Harbor Node fixtures with live agent console logs. |
| GET | /v1/me | Bearer pf_live_… | Retrieve active workspace, account type, current key role, and projects. |
| POST | /v1/members/invite | Admin Key | Create a seven-day, one-time WorkOS invitation link for an admin or reviewer. |
| POST | /v1/projects/:id/reviews | Any Key | Upload artifact (.zip/.crx) and optional claims JSON for review. |
| POST | /v1/reviews/:id/sign-off | Admin / Reviewer | Record mandatory human release decision (ship, hold, reject). |
Paste your personal, invited team member, or organization pf_live_… API key to load your isolated workspace.
cargo run -- push ./build.zip --project <project-id> --claims ./claims.json --key <pf_live_key>
Select or run a review to inspect findings and sign off.