// A3E9 · INTERACTION_TIME_ASSURANCE
Audit firms, contest platforms, bug bounties and CI scanners are all real, all good, and all answer the same question: is the code I am about to deploy safe? They work on your repository, around launch, for the team that ships. a3e9 answers a question none of them does — should my desk touch this contract, right now, at the moment I connect and sign — and has something I already trusted changed underneath me? Different question, different customer, different moment.
Build time · protects the builder
Audits, contests, CI scanners, bounties. The whole audit market lives left of the line, and the work is necessary.
Interaction time · protects whoever connects and signs
TINL, Pathfinder, Governance Sentry, Oracle Governor and the ledger. a3e9 lives on the line, and after it — and keeps watching.
Transaction Intent Normalization Layer
Decodes what a transaction or signature actually does before it is signed, and applies policy to the decoded intent.
Execution-path assurance
Evaluates contract execution paths and issues verdicts, with decision memory and revalidation.
Governance Sentry
Watches pre-proposal state through destination-chain execution to catch capture inside the timelock window.
Oracle Governor
Owns the inputs — what each source may establish, how fresh, how independent, and what happens when it goes dark.
The evidence chain
The append-only record every verdict, correction and expiry is written to.
Read this before the numbers
These figures are quoted from the brief and its cited producer artifacts (out/coverage_manifest.json, out/gold_pocs.json, out/incident_catalogue.csv). That producer does not run in this repository, so unlike the ACVP vector counts and the CBOM on the evidence pages, these numbers are not synced byte-identical from their source on every build. They are re-derivable by re-running the producer, and they are stated here as documented rather than as re-verified.
// FIVE_CASES
Each one is a real failure mode where the code was fine and the person was not protected. That gap is the whole product.
The audit was fine. The governance proxy was upgraded to attacker control after sign-off. No audit re-checks every proxy each time it changes — Pathfinder does. The exploit is reproduced against the real on-chain code at its pre-exploit block.
block 15201799 · reproduced on pinned bytecode
USDC is audited many times over. A user signs one malicious permit and the wallet is drained. Producer-side tooling does not look at the transaction a person is about to sign. TINL does.
permit / approval phishing · a leading loss driver in 2025
A hijacked site serves malicious calldata over a perfectly safe contract. There is no bug in the code for a producer-side tool to find. TINL reads the decoded intent before the signature lands.
DNS / front-end hijack · no line of contract code touched
On Solana, most token scams live for minutes — far shorter than a blocklist's update cycle. The attack is not the contract; it is the connection. A hijacked social account posts a lookalike site and the wallet connects before anything evaluates the site at all. The Connection Trust Layer evaluates the site before the connection exists.
connection-time gating · verified / unknown / suspicious / blocked
AI-assisted recruiter lures, deepfake executives, compromised chat, poisoned Safe interfaces and plausible “retry” instructions target the people and systems that produce valid signatures. Three separate facts are verified before approval: identity, intent, and authority.
signer integrity · Safe configuration · message hash · reachable authority
Monitoring / alerting
They alert.
A dashboard tells a human something looks wrong — usually after it already happened. Someone still has to see it, believe it and act in time.
a3e9
It decides, and blocks.
A fail-closed verdict sits in the transaction path. It is a gate, not a dashboard — and one observed compromise flips the whole desk before the next person touches it.
The auditors are not the competition. The closest players are the on-chain monitoring and alerting tools; they exist, they are useful, and the line between them and a gate is drawn above rather than blurred.
// CONNECTION_TRUST_LAYER
On Solana most token scams live for minutes — far shorter than any blocklist's update cycle. The attack is not the contract; it is the connection. A hijacked social account posts a lookalike site, and the wallet connects before anything has evaluated the site at all. Verdicts are verified, unknown, suspicious and blocked.
| What it checks | What it catches |
|---|---|
| Proof of Assurance attestation | Does the site hold a valid, current mark bound to the contracts it fronts for? A clone site cannot hold the real project's attestation. |
| Domain age and registration | A domain registered hours ago claiming to be an established protocol is the classic emergency-migration scam pattern. |
| Lookalike spelling | Homoglyph and typosquat variants of known project domains — the clone that looks right at a glance. |
| Drainer-kit fingerprints | Recycled scam infrastructure: known drainer scripts, reused hosting patterns, redirect chains through disposable domains. |
| Behavioral signals | Connection pressure, signing urgency, and immediate signature requests before any content is shown. |
| Channel compromise | Reported hijacks of a project's X or Discord — the hijacked megaphone that starts the attack chain. |
What a connection verdict is not
An address blocklist is structurally behind the attacker — a drainer deployed this morning has no reputation to look up — which is why these checks are about the site and the channel rather than a reputation lookup. They do not screen destinations, do not stop address poisoning or a fake airdrop the user chooses to interact with, and the wallet confirmation screen remains the backstop.
// REKT_BASELINE
The baseline corpus is built from four complementary oracles, and every incident becomes a regression test the system has to keep passing.
| Oracle | What it contributes | Scale |
|---|---|---|
| Rekt.news corpus | Contract-level ground truth: victim/exploit addresses, roles, pre-state block numbers, code hashes at incident time | 266 incidents · 1,284 addressesverified 2026-09-08 against the delivered CSV |
| DeFiLlama Hacks | Classification and technique taxonomy — maps onto Pathfinder finding categories | $20B+ tracked · 134 chains |
| SlowMist Hacked | Incident volume and non-EVM coverage — Solana, Cosmos, Stellar, where Rekt is thin | 2,235 events · $38B trackeddelivered CSV: 2,252 rows through 2026-09-07 |
| DeFiHackLabs | Executable proof: working Foundry exploit reproductions forked at the incident block | hundreds of PoCs |
Incidents with both a Rekt corpus row and a DeFiHackLabs reproduction become gold-standard tests — pre-state code hash plus a working exploit. The claim stops being “we think we would have caught this” and becomes “here is the test that catches it.”
“Tested against history” is a claim, so here are the counts behind it — including the row that is a gap rather than a win.
| What | Count | Meaning |
|---|---|---|
| SlowMist incident rows | 2,252 | Through 2026-09-07. Date, target, attack method, loss, description, reference. |
| Rekt contract-version rows | 1,284 | Across 266 incidents and 12 chains — chain, address, role, exploit tx, pre-state block. |
| DeFiHackLabs PoCs scanned | 860 | Working Foundry reproductions read and matched against the corpus. |
| Incident addresses in the coverage manifest | 303 | Each one an address a detection could be aimed at. |
| …with a pre-state code hash | 303 / 303 | 100%. The exact bytecode as it stood at the block before the exploit. |
| Victim contracts still live and unchanged | 57 | Same bytecode, still deployed. These are not historical artifacts. |
| Gold-standard incidents | 30 | Pre-state code hash and an archived mainnet-fork reproduction. Both halves present. |
| Generated incident test files | 285 | One Solidity test per incident address, forked at its own pre-state block. |
| Per-incident finding records | 577 | Routed vulnerability class, template, runtime code hash, exploit tx. |
| Armed regression tests | 13 | Covering 10 incidents. Run in CI against pinned pre-incident state. |
| Recorded coverage gaps | 290 | Addresses with evidence and no test yet — published in the same manifest. |
The corpus is about 10 MB, and that is the point. Each incident is stored as a pinned pointer — chain, address, pre-state block number, and the keccak-256 hash of the runtime bytecode at that block — and the state itself is re-fetched on demand from archive RPC endpoints, the Etherscan V2 API and Sourcify. The evidence is the hash and the block number, not a copy, which is what makes a result reproducible by a third party rather than dependent on a snapshot only a3e9 holds. Multi-gigabyte build directories exist on disk; they are compiler output and are excluded from every count above.
a3e9 “Safe to Touch” positioning brief v2, reviewed 2026-09-09. Counts as of 2026-09-08.
// NOT_HINDSIGHT
That is the failure mode any backtest has to defend against, and the defences are structural rather than promised.
The fixture pins the pre-state block number and the keccak-256 hash of the runtime bytecode as it stood at that block. A detection cannot be quietly tuned against the patched contract, because the patched contract is not what the test loads — and if the pinned hash ever stops matching, the test fails rather than passing on the wrong code.
The coverage manifest records 13 armed tests and 290 uncovered addresses, in one artifact, generated by one script. There is no separate document where the coverage number is larger.
Of 270 catalogued incidents, only 30 carry an archived mainnet-fork reproduction; 24 are marked candidate and 216 none. Loss figures carry their basis — sole_amount, loss_context, ambiguous, or none — so a number sourced from a sentence is never presented as a measurement. 150 rows are flagged no_code_evidence and excluded from ancestry analysis rather than counted anyway.
The patch_scope column reads not_derivable for all 270 incidents. Whether a given remediation was narrow or complete is not knowable from on-chain evidence alone, so the corpus declines to say rather than guessing and calling it a finding.
A run pointed the production pre-interaction engine at 109 historical incident transactions to ask whether it recognised them at all. It assessed none of them: 94 decoded but were not swap paths, 15 had no transaction to read. That engine evaluates what a user is about to sign, and a confirmed historical exploit is not that shape — so the honest outcome is not_assessable, and it is written into the artifact instead of omitted from it.
The fifth is the one worth dwelling on. It would have been easy to leave that run out. Keeping it is what makes the other four worth reading — a corpus that only ever reports success has stopped being a measurement.
// THE_COUNTERFACTUAL
For ten incidents the answer is not an opinion — a detection exists, it is armed in CI, and it runs against the contract as it stood at the block before the exploit. Here is the whole list, with nothing left off.
| Incident | Recorded loss | Failure family | Armed control |
|---|---|---|---|
| Nomad | $190,000,000 | bridge | AccessControlTxOrigin |
| Curve (Vyper) | $69,000,000 | reentrancy | Reentrancy |
| DAO Maker | $7,000,000 | rug / privileged drain | PrivilegedDrain |
| Audius | $6,000,000 | proxy upgrade | InitProxyTakeover |
| Gravity Bridge | $5,400,000 | price / AMM | OracleSpotPrice |
| Socket | $3,300,000 | bridge | AccessControlTxOrigin |
| Sushi (Yoink) | $3,300,000 | price / AMM | OracleSpotPrice |
| Aztec Connect | $2,280,000 | proxy upgrade | InitProxyTakeover |
| Sir Trading | $355,000 | proxy upgrade | InitProxyTakeover |
| Beanstalk | no figure in corpus | flash-loan governance | OracleSpotPrice |
$286,635,000 of recorded loss sits behind detections that are armed today and run against pre-incident state. Beanstalk is in the list and contributes nothing to that total, because the corpus holds no loss figure for it — the widely-reported number is not in the evidence, so it is not in the arithmetic. Nine incidents carry the whole sum. That is the difference between a total and a headline.
What is proven
The detection fires on the real code.
For each row, a test loads the victim contract at its pinned pre-exploit block, verified by bytecode hash, and the named control produces a finding. It re-runs in CI, so it is a standing claim rather than a demonstration.
What is not claimed
A verdict is not an intervention.
a3e9 produces a fail-closed verdict at the moment of interaction or on the control plane. Acting on it — pausing, cancelling, refusing to sign — remains the subscriber's decision and the subscriber's authority. An armed detection in the harness is not the same thing as a deployed, monitored subscription at the victim on the day. 290 addresses in the same corpus have no armed detection at all.
The denominator: $8.9 billion catalogued, 290 addresses uncovered
Set against the catalogue as a whole — $8.9 billion of recorded loss across the 229 incidents that carry a figure — $286,635,000 is roughly three percent. Published deliberately. The honest headline is not “we would have stopped it all”; it is that the covered slice is named, listed and testable, the uncovered remainder is counted in the same file, and the number moves as detections are armed. A coverage figure you cannot audit is a marketing figure.
Incident list, losses, families and controls from a3e9-tinl-assurance-test out/coverage_manifest.json and out/incident_catalogue.csv. Loss figures carry a loss_basis in the source; the total sums only rows that carry one.
// HISTORY_BECOMES_COVERAGE
Beanstalk was not a Beanstalk bug — it was a governance-capture pattern: flash-loan voting power, pass a malicious proposal, drain the treasury, repay the loan. A zero-day is unknown to everyone. A 1-day is disclosed and patched, and still works everywhere the patch did not reach. An n-day is the state this industry actually lives in. So the defensive question is deliberately not “has this contract been patched?” It is:
Which safety invariant failed, where else does the same invariant exist, and can the exploit be reconstructed through another function, asset, market, deployment, chain, signer, or administrative path?
Every incident in the corpus is reduced to that invariant, then re-aimed along eight variant axes. This is the mechanism that turns a one-off into coverage: one historical exploit is never one test, it is a family, and the family is what gets run against the contracts a desk is about to touch.
Strip each incident to its mechanics: abused power, precondition, attack sequence, blast radius, missing control.
Generate concrete variants — same power, different entry point; same entry point, different asset; same attack, different timing.
A coverage matrix: variant × contract, with attack paths and existing mitigations.
Every applicable variant becomes a Foundry test and a Pathfinder monitoring rule — before an attacker finds it.
Search every fork, chain, market, deployment script, integration and administrative path that inherited the failed invariant.
| Variant axis | How one incident becomes a family | Why the original patch misses it |
|---|---|---|
| Exact code clone | The same vulnerable implementation deployed by another project or on another chain. | The downstream team never received or applied the upstream fix. |
| Semantic clone | Source differs, but the same accounting or authorization invariant is present. | Hash and signature matching miss logically equivalent code. |
| Sibling entry point | The patched function is safe; another function reaches the same state transition. | The team patched deposit but not mint, a router but not direct calls. |
| Cross-function / cross-contract | The attacker moves between functions or contracts that share state. | The reentrancy guard exists only on the function that was originally exploited. |
| Parameter or asset | A different reserve, collateral, decimals setting, liquidity level, or fee behavior. | The fix assumes the first incident's token and market conditions. |
| Temporal or ordering | Initialization, migration, governance execution, liquidation, or a deployment window. | The production code is safe only after setup has completed. |
| Economic composition | Known primitives combined through flash liquidity, recursive leverage, MEV, or several markets. | Each component looks safe when tested independently. |
| Operational hybrid | A code weakness combined with phishing, a stolen deploy key, a malicious dependency, or a misleading signing interface. | A contract patch does not secure the human, build, governance, or signing plane. |
“A patched protocol got hit again” is four different claims wearing one sentence. Each incident carries an explicit evidence grade, so a fork inheriting a known class is never reported as a novel defence bypass.
| Grade | What it means | What it actually proves |
|---|---|---|
| A — Confirmed defense bypass | The victim had a specific mitigation for the exploit class, and the attacker used a related path that remained possible. | The remediation was narrower than the failed invariant. |
| B — Known class inherited | The class and its mitigations were public, but a fork, new market, or related deployment stayed exposed. | Patch knowledge did not propagate across the deployment family. |
| C — Governance delay neutralized | A voting period or timelock existed, but mutable code, temporary voting power, low participation, or captured execution defeated its purpose. | A timer is not a security boundary unless payload identity, voting legitimacy, detection and cancellation all hold. |
| D — Repeated incident, different root cause | The same protocol was attacked again through an unrelated flaw. | A weak security lifecycle — but not evidence that a narrow patch was bypassed. |
a3e9 distinguishes a true defense bypass from a known class left unpropagated, and from governance whose timer worked while its security purpose failed.
| Historical test | What the narrow assumption missed | a3e9 regression |
|---|---|---|
| Wise Lending | Donation limits did not stop repeated sub-limit rounding from creating “stealth donations.” | Bound exchange-rate movement across arbitrary accounting sequences. |
| Hundred and related forks | Known empty-market precision risk survived across Compound- and Aave-derived deployments. | Atomic initialization, permanent minimum liquidity, conservative rounding, and fork-wide discovery. |
| Tornado Cash | The proposal address stayed constant while metamorphic code changed before execution. | Bind and re-check payload, dependencies, chain domain and runtime code at queue and execution. |
| Beanstalk | A proposal-age delay existed, but temporary voting power voted and executed atomically. | Separate voting-power maturation, snapshot, quorum, queue, execution and cancellation. |
| Build Finance | The timelock faithfully executed a governance decision captured through low participation. | Compare capture cost with reachable value; treat authority transfers as critical. |
The historical transaction is the first test, not the last. a3e9 names the failed invariant, mutates equivalent paths, and monitors the conditions that make the exploit family viable again.
a3e9 forked-exploit and narrow-patch risk analysis, 2026-09-04. SCONE-bench figures as published by Anthropic; that study was confined to simulators and did not touch live assets.
// WHERE_THE_AI_IS
Seven roles are pinned across five providers, each with a written constraint, and the constraints are the product: a model can read, search, propose, translate and argue. It cannot admit evidence, approve a control, change a policy, or move value.
Frontier models are demonstrably capable of generating working exploits for this class of target: in Anthropic's controlled SCONE-bench study over 405 contracts with real-world exploits, several frontier models produced profitable simulated exploits against post-cutoff cases — and in a separate simulation over 2,849 recently deployed contracts with no known vulnerabilities, two novel exploitable cases were found. Two out of 2,849 is a small number and an honest one. It is also the number that decides the question: the capability is real, it is cheap, and it is available to whoever wants it. SCONE-bench figures are as published by Anthropic; that study was confined to simulators and did not touch live assets.
The model does
Propose the family.
Abstract the failed invariant, enumerate variants across the eight axes, and aim them at the specific contracts, roles and markets in scope — including the deployment family a fork belongs to.
The model never does
Decide anything.
A generated variant is a hypothesis. It becomes a Foundry test forked at a real block and a Pathfinder monitoring rule. The verdict comes from the deterministic run. A model answer is never a finding, and never a source in its own right. Coding agents are named explicitly as not independent evidence verifiers, so a review generated by one can never stand in for the human one.
The verifier is never the generator. Whoever proposed a conclusion cannot be the one that checks it. A run is rejected outright if the verifier shares an independence group with the generator — the same origin-counting rule applied to models. Final verification runs with search disabled, on frozen evidence: a checker that can go find fresh support for the thing it is checking is not a checker.
| Role | Provider | Search | Written constraint |
|---|---|---|---|
| Raw current web discovery | Perplexity — Search API | on | may not promote evidence; returns ranked sources for quarantine, not prose to accept |
| Web-grounded discovery synthesis | Perplexity — Agent API | on | no automatic model fallback during high-assurance work |
| Emerging signal scout | xAI — Grok | on | may not verify its own hypotheses |
| Architecture & adversarial critic | Anthropic — Claude | off | may not approve its own control |
| Multimodal & large-artifact examiner | Google — Gemini | off | preview models require a release gate |
| Deterministic test & code engineer | OpenAI — GPT-5 | off | no production credentials, ever |
| High-volume triage | OpenAI — GPT-5-mini | off | may not promote evidence |
Globally forbidden to every model, agent and connector
signsend_transactionbroadcastunlock_walletexport_keywithdrawbridge_executeswap_executepromote_evidencedelete_evidencelower_incident_stateNo model can merge code, release a policy, promote evidence or sign a transaction.
Do not invoke a reasoning model when an unchanged deterministic poll returns no new object. It is a cost rule and a security rule at once: 15-minute advisory checks and per-block chain reads run as plain deterministic jobs, and model work begins only when there is a new or changed object, a meaningful correlation, a scheduled threat-hunting cycle, or a specific analyst request. A regression test asserts it directly.
Release requirements are explicit: different generator and verifier providers, frozen evidence handed to the verifier, verifier search disabled, no automatic training on raw updates, and no model override of policy. The gateway rejects a run for an unpinned or unexpected returned model, a silent provider fallback during high-assurance work, a tool inventory that differs from the manifest, a verifier sharing an independence group with the generator, or final verification with search left on.
a3e9 model routing manifest v1.3, as of 2026-09-07. Model identifiers are configuration and are re-validated against the provider catalog at runtime.
// SIGNER_ASSURANCE
| Plane | Question answered | Controls enforced |
|---|---|---|
| Identity | Is the requester, signer, device, domain and service the expected party? | FIDO2/WebAuthn, signed change records, callback rosters, session monitoring, and no authorization by voice, video, chat or urgency. |
| Intent | Do the signed bytes produce the state change every approver reviewed? | Canonical manifest, independent calldata decoding, simulation, hardware-wallet message-hash comparison, and stop-on-anomaly. |
| Authority | What can the action create beyond its immediate transfer? | Owner, role, proxy, module, approval, mint, oracle, bridge, timelock and cross-chain capability analysis. |
Safe multisig hardening
Separate power by consequence.
Routine operations, upgrades, treasury, emergency pause and timelock cancellation use separate authority sets. Modules default to denied. Owners, threshold, singleton, proxy code, nonce, modules, guards, fallback handler and pending transactions are continuously attested.
Administrative-key hardening
Non-exportable is not enough.
HSM or MPC custody protects key material. a3e9 adds chain and destination allowlists, ABI-aware function policy, value and velocity limits, exact EIP-712 domains, short-lived workload identity, separated approvals and immutable evidence.
// GOVERNANCE_SENTRY
A timelock is useful only when the exact payload remains stable, detection is fast, cancellation remains independent, and responders can act inside the window. Governance Sentry watches pre-proposal state through destination-chain execution.
| Heuristic | Signal | Decision |
|---|---|---|
| Capture-cost deficit | Decisive voting power costs materially less than the authority or value the proposal can reach. | Deny execution; assemble canceller. |
| Abrupt voting power | Delegation or balances spike near snapshot from lending, exchanges, bridges or new clusters. | Review within one finalized block. |
| Text–payload mismatch | “Parameter update” changes ownership, implementation, role administration, modules or spend authority. | Hard stop. |
| Mutable or unknown code | Code-hash drift, storage-layout change, self-destruction, or unrestricted delegatecall. | Hard stop and re-simulate. |
| Timelock weakening | Delay reduction, or proposer, executor, canceller, administrator or predecessor change. | SEV-0 even when no funds move. |
| Multisig regression | Owner change, lower threshold, new module or guard, handler change, or anomalous nonce replacement. | Page on proposal and confirmation. |
| Capability staging | Unlimited approval, mint authority, arbitrary call, bridge fan-out or cross-chain message. | Model and block the enabled next transaction. |
Objectives are explicit. Concentration and queue events within one finalized block; decoded authority impact within two; human acknowledgement under five minutes; independent simulation under fifteen; defensive finality before half of the usable timelock expires.
OpenZeppelin Monitor
Contract events, function calls, ownership, roles, upgrades, pause, mint and timelock triggers.
Safe Transaction Service
Pending transactions, confirmations, Safe configuration, nonce alternatives, rejections and executions — checked against direct chain state.
Tenderly
Proposal and transaction simulation, state overrides, asset movement and storage-change preview.
Forta
Flash-loan voting, suspicious proposals, thin-voter quorum and governance behavior detections.
Hypernative or equivalent
Cross-protocol anomalies and pre-authorized bounded response; a3e9 remains the decision and evidence layer.
The runbook assumes the primary chat, identity account, workstation, Safe interface, RPC or transaction service may be hostile. Identity containment and on-chain containment run in parallel.
Declare and freeze.
Stop signing, transaction construction, deployments, key rotation from suspect devices and routine retries. Move responders to a clean channel.
Map the blast radius.
Enumerate signers, endpoints, sessions, Safes, modules, pending nonces, roles, timelocks, bridges, registrar, CI/CD, cloud, package registry and vendor access.
Contain identity.
Revoke sessions and OAuth grants, isolate endpoints, lock help-desk recovery, preserve logs, and restore privileged access with clean FIDO2-backed identities.
Contain on-chain authority.
Reject or replace malicious Safe nonces, cancel queued operations, invoke bounded pauses, reduce limits and isolate bridge routes from clean infrastructure.
Verify live state.
Re-read owners, threshold, modules, guards, handlers, roles, implementations, timelock, approvals, oracles and cross-chain executors through independent RPCs.
Preserve evidence.
Record payloads, hashes, confirmations, telemetry, identity logs, messages, DNS changes, builds and exact block state without contaminating originals.
Rotate from clean state.
Replace owners and keys only after clean devices and intent are established; invalidate pending signatures and revoke old roles, sessions, backups and approvals.
Reopen by proof.
Reconcile assets and authority, test cancellation and recovery, replay the attack safely, and add it to the permanent regression baseline.
Automation is bounded by consequence
Automation is bounded by consequence. a3e9 can freeze its signing workflow, reject, cancel, reduce a limit, narrowly pause, or isolate a bridge route. The monitor never receives unrestricted treasury movement, ownership replacement, arbitrary upgrade, or broad cross-chain authority.
// ORACLE_GOVERNOR
The Oracle Governor owns them: what a source is allowed to establish, how fresh it has to be, how many genuinely independent origins a claim needs, and what happens when a source goes dark. The advisory layer is not scraped news but a fixed set of registered public feeds, polled on a signed schedule with conditional requests, durable cursors, overlap windows and an explicit health event for every miss.
| Registered source | Endpoint | Cadence |
|---|---|---|
| FBI IC3 — public service announcements | ic3.gov/PSA/RSS | 900 s · ETag / If-Modified-Since |
| FBI IC3 — cybersecurity advisories | ic3.gov/CSA/RSS | 900 s |
| FBI cyber alerts index | fbi.gov/investigate/cyber/alerts | hourly · reconciliation and discovery only |
| CISA advisories | cisa.gov/cybersecurity-advisories/all.xml | 900 s · co-sealers and revisions preserved |
| CISA Known Exploited Vulnerabilities | …/known_exploited_vulnerabilities.json | 900 s + nightly full-catalog digest diff |
| NIST NVD — CVE API | services.nvd.nist.gov/rest/json/cves/2.0 | 1800 s modified-time overlap + nightly |
| GitHub Global Advisories | api.github.com/advisories | 900 s by modified cursor + daily |
| Vendor PSIRT feeds | registered per vendor | 900 s critical · hourly otherwise |
| Authenticated evidence upload | Governor intake endpoint | immediate · quarantined on arrival |
Consuming a public feed is not a relationship
Consuming a public feed is not a relationship. These are published sources that anyone may retrieve. a3e9 reads them; it does not represent, and is not endorsed by, the FBI, CISA, NIST or any other agency, and it claims no privileged or non-public access. Where privileged access has been suggested — for example automated delivery of non-public FBI reporting through InfraGard or Cyber Shield — that claim is recorded in the evidence ledger with status unresolved, and nothing depends on it.
Feed endpoints are author-verified, not machine-verified. The registered advisory endpoints were verified by the specification author on 2026-09-08. They were not retrieved by an automated agent, because the environment that produced the specification had no network access — so the specification says so, in the specification. Runtime onboarding rechecks transport, media type, schema, ownership and terms before any source is activated.
Supplied documents carry confident errors, and the ones that read most authoritatively are the ones that get copied forward unchecked. So every document that enters is untrusted on arrival — including a3e9's own fixtures, which the bundle deliberately ranks at the bottom of its precedence order rather than the top.
A fixture asserted that the FBI's IC3 /PSA and /CSA pages are RSS feeds. They are not — they are HTML index pages, and the real feeds end in /RSS. The claim was recorded as contradicted, the correction bound to it, and both retained. No collector was ever pointed at a wrong endpoint, and no verdict was ever built on the claim.
That is the whole design in one artifact: precedence, not plausibility, decides what a document can establish. A confident, well-formatted, wrong statement about a government source is precisely the input this pipeline exists to stop — and it does not get a pass for looking official.
A successful feed retrieval without successful retrieval of the linked object is recorded as incomplete. The linked PSA, advisory or indicator file is fetched separately and its exact bytes are hashed.
The KEV catalog is diffed by catalog version and CVE ID; additions, changed fields and removals all become new immutable versions. A retraction reevaluates every dependent claim rather than quietly disappearing.
A high CVSS score cannot by itself drive an action — the Governor rejects severity-only action without proof that the affected component is actually present and reachable in the deployment under evaluation.
The original object stays immutable; a correction is a new version linked with supersedes. A validated_source status means provenance and parsing were verified. It does not mean the statement is true.
Articles, advisories, PDFs, screenshots and uploads go through immutable raw object → quarantine → active-content checks → sandboxed parsing → origin verification → atomic candidate claims → lineage and contradiction checks → frozen evidence manifest. The corpus updates continuously; the models are not fine-tuned on it.
a3e9 oracle feed manifest v1.1 (as of 2026-09-08) and the evidence intake contract. Endpoints were verified by the specification author on 2026-09-08 and are re-checked for transport, media type, schema, ownership and terms at runtime onboarding.
A source is not trusted in general; it is trusted for a specific job. Every input is declared into one of eighteen classes, and the class fixes four things in advance: what the source may establish, how many independent origins a material claim needs, how stale it may be, and what happens when it stops answering.
Seven classes fail closed. None of the eighteen fails open, because the governing rule is written into the manifest as policy rather than left to a runbook: loss of a critical oracle never becomes permission. An outage is a reason to stop, never a reason to proceed.
| Oracle class | Required | Tier | Origins | Freshness | On failure |
|---|---|---|---|---|---|
| asset_authority_registry | always | deterministic control | 1 | 1 h | degrade to restricted |
| direct_chain_state | always | deterministic observation | 2 | 30 s | degrade to restricted |
| chain_finality_time | always | deterministic observation | 1 | 30 s | fail closed |
| custody_signing_intent | always | deterministic control | 1 | 2 s | fail closed |
| endpoint_security | always | deterministic control | 1 | 2 s | fail closed |
| identity_access | always | deterministic control | 1 | 60 s | degrade to restricted |
| cloud_secret_access | conditional | deterministic observation | 1 | 60 s | degrade to restricted |
| code_supply_chain | always | attested primary | 2 | 5 min | degrade to restricted |
| governance_privilege | conditional | deterministic observation | 2 | 60 s | degrade to restricted |
| cross_chain | conditional | deterministic or inferred | 1 | 60 s | degrade to restricted |
| market_reference | conditional | aggregated observation | 2 | 60 s | fail closed * |
| exchange_custodian | conditional | attested primary | 1 | 30 s | degrade to restricted |
| domain_communications_impersonation | conditional | corroborating observation | 2 | 5 min | alert only |
| external_threat_discovery | always | discovery only | 2 | 15 min | research only |
| human_attestation | always | authorized judgment | 2 | n/a | fail closed |
| evidence_provenance | always | deterministic control | 1 | 60 s | fail closed |
| model_runtime | always | deterministic control | 1 | 30 d | fail closed |
| oracle_health | always | deterministic control | 1 | 15 s | fail closed |
One failure rule is an open decision, and is published as one
* Stated openly: the failure semantics for market_reference are an open architecture decision — the manifest and the implementation prompt disagree, the conflict is recorded, and it is deliberately not resolved by guessing. A market oracle outage must never become permission, which is the one thing both readings agree on.
external_threat_discovery is always required, and discovery-only. The Governor is obliged to watch the outside world and forbidden to let what it finds approve anything. Every source in the feed table sits in that class. It can raise a state, open an investigation and page a human. It cannot clear a transaction.
Health is evaluated in a fixed order, worst first: quarantined → untrusted → unavailable → stale → degraded → healthy. Integrity is checked before freshness on purpose — evaluating freshness first would let a well-timed forgery read as healthy. Sources have a lifecycle too: proposed → vetting → shadow → active → degraded → suspended → retired. Nothing leaves quarantine by waiting, and nothing returns from suspended on its own.
“Two independent sources agreed” is the most-abused sentence in security tooling. Two API keys at the same provider agree. A provider and its reseller agree. Three news sites repeating one press release agree. Counting interfaces manufactures confidence that was never there.
Two endpoints operated by the same provider are one administrative origin — however many URLs are configured. Every source declares its independence group, and the policy engine counts administratively independent origins, never endpoints. The FBI's IC3 PSA and CSA feeds are registered to a single operator precisely so they collapse to one. Two search tools that both surface the same underlying article are one evidence lineage, not two.
Written from a finding against ourselves
The rule is written from a real finding, not a whiteboard. Adversarial review of a3e9's own detectors is standing practice, and it is what produced this control: a probe reporting “two independent providers agreed” was found to be counting endpoints rather than operators. Two keys at one vendor, or a vendor and a reseller of it, would have produced the identical agreed result. The finding was written up against ourselves. Where a second genuinely independent provider is still owed, the backlog says so rather than the dashboard implying otherwise — and two providers that disagree produce a finding, not an average.
This is enforced in code rather than asserted in a policy document. The counting function cannot return a bare number: it returns what it counted and what it refused to count, with the reason — not registered, same operator as an already-counted group, or empty. Three negative controls in CI fail the build if an unregistered group ever counts, if two same-operator sources ever fail to collapse, or if an empty group is ever scored. The property the tests pin is blunt: adding duplicate endpoints from one independence group must not increase confidence.
Every source carries a rolling 30-day reliability grade across eight weighted dimensions. It is a record of how a feed has behaved, published so that a source's history is visible rather than assumed.
| Dimension | Weight | What it measures |
|---|---|---|
| Integrity & authenticated origin | 25 | Share of received objects that were authenticated and intact. A confirmed forgery is a hard quarantine, not a deduction. |
| Freshness compliance | 20 | Objects arriving inside the class SLO, adjusted for heartbeats. |
| Availability | 15 | Successful collection or heartbeat intervals against expected. |
| Completeness & coherence | 10 | Required fields present and internally consistent. |
| Administrative independence | 10 | Effective independent groups against required. Endpoint count is irrelevant. |
| Agreement with comparable sources | 10 | Non-stale comparable sources within tolerance. |
| Parser & schema stability | 5 | Objects parsed by an approved parser without schema drift. |
| Correction & false-admission history | 5 | Confirmed false admissions against claims admitted. |
The rules around the number matter more than the number. Never round upward across a grade boundary. A grade change never expands allowed uses. A good grade never overrides a current hard failure. No model-generated confidence value contributes to a grade. And a discovery-only source can earn a perfect score and still be unable to approve a single piece of evidence — reliability and authority are different axes, deliberately.
Bands are A 90–100, B 80–89.99, C 70–79.99, D 50–69.99, F below 50, plus Q for hard-gate quarantine and N for insufficient history. Scores are computed in integer basis points — 10,000 bp = 100.00 points — with integer division throughout and no floating point anywhere, so a grade is reproducible byte-for-byte by anyone re-running it. A zero denominator contributes zero, not full marks: a source with no observations does not get credit for a clean record it never earned.
a3e9 Oracle Governor grading model (ADR-0003) and the governor-core implementation.
Research-quality sources are slow by design — they publish after verification. The alert pipeline watches the fastest primary sources instead, and feeds the ledger as provisional records that verified sources later supersede.
| Layer | Source | Latency |
|---|---|---|
| Primary alerts | X API — security-firm alert accounts (PeckShield, Blockaid, SlowMist and peers), polled with dedup | minutes |
| Corroboration | SlowMist Hacked page — cites the primary alerts | hours |
| Verified corpus | Rekt, DeFiLlama, DeFiHackLabs — supersede provisional records when published | days–weeks |
News-derived records can trigger watch states — never verdicts. The model categorizes; Pathfinder decides. When the verified record lands it supersedes the provisional one, and the ledger keeps both: the detection-latency delta is itself evidence.
The default watchlist is fixed, versioned, and pinned by numeric account ID rather than handle — a handle can be renamed or sold, and a renamed handle must never silently repoint a feed at someone else's account. Polling is budgeted: a since_id cursor, dedup across accounts reporting the same incident, and a hold until the rate-limit reset on a 429 rather than a retry storm.
// SCOPE_AND_CHAINS
Two questions get asked together and answered as one, which is how vendors end up overstating both. They are separate. “Release 1” is a capability boundary, not a chain list — and “supported” means something different on each of the three planes a3e9 operates.
Ethereum, Base and BNB Smart Chain are hunted for verdicts today, with Solana running as a separate process. Ethereum, Base, Arbitrum One, BNB and OP Mainnet have built execution-path assessment. Signing adapters cover EVM, Solana, Stellar, Bitcoin and Litecoin. And every armed detection listed above runs on Ethereum — coverage follows the chain the evidence is deepest on, not the chain list that markets best.
Release 1
Contract execution paths, trap and foul-play review, policy verdicts, decision memory, evidence recording and the ledger schema. Assurance levels 0 (Registered) and 1 (Path-Verified). The Release 1 scope statement explicitly freezes the chain set: no new venue family, no new chain adapter.
Release 2
Admin-key compromise, governance capture, bridge trust, oracle abuse and the operational telemetry around them. This is where assurance level 2 lives.
Release 3
Licensable deployment, outage alerting and the commercial surface.
| Column | Enforced where | Chains | Signature scheme | What “supported” means |
|---|---|---|---|---|
| Hunt & issue verdicts | A hard allowlist in code, with tests | Ethereum, Base, BNB — plus Solana as a separate binary | read-only | Dry-run observation and verdicts. It does not send. |
| Assess execution paths | A typed chain registry with per-chain capability flags | Built: Ethereum, Base, Arbitrum One, BNB, OP Mainnet. Present but not built: Polygon, Avalanche C-Chain, Mantle, Blast. Solana is intercept-only. | read-only | Read-only assessment. It does not sign or broadcast — a deliberate boundary, not a gap being closed. |
| Construct & sign | Four signing adapters | EVM (Ethereum, Polygon, Arbitrum, Base, Avalanche C-Chain), Solana, Stellar, Bitcoin, Litecoin | secp256k1 for EVM and Bitcoin/Litecoin; Ed25519 for Solana and Stellar | Builds broadcast-ready bytes. The HSM holds the key; the service never does, and does not broadcast. |
Naming a chain is not implementing a desk. That sentence is a comment in a3e9's own source, above the function that maps chain IDs to names, and it is the rule this table follows. Several chains are named in code — Arbitrum, Optimism, Polygon, Avalanche, Mantle, Blast — while the hunting allowlist refuses them at startup. Two of them have no execution-simulation endpoint available at all, so they get identity and price-impact analysis and nothing deeper.
What is explicitly not built
The Pathfinder chain allowlist, the TINL chain registry and README, the chain-router status table and release checklist, and the nine-chain scale analysis.
// PROOF_OF_ASSURANCE
Not a static badge: a signed, evidence-anchored attestation that expires, downgrades and revokes automatically when the underlying state changes.
Known to the ledger. No evaluation claimed.
Execution-path assurance performed on the contracts in scope.
Admin keys, governance, upgrades, oracle and bridge trust evaluated.
Live monitoring. Revalidates on code change or expiry. Alerting wired.
Detections proven against the Rekt baseline corpus.
The mark is issued as a soul-bound token on Solana. That single property is what makes the system enforceable.
A mark earned by a protocol that passed evaluation can never be bought by one that did not. There is no secondary market for trust.
Because the token never leaves the subject's wallet, the issuer's update authority can downgrade or burn it the moment Pathfinder's verdict changes — a governance capture, an admin-key compromise, an expired revalidation. The badge on the dApp's site reads the live on-chain state, so a revoked mark stops verifying everywhere it is displayed, without the holder's cooperation.
The token's metadata references the ledger record — verdicts, findings, policy version, expiry — so anyone can walk from the badge to the evidence chain behind it.
Marks carry a validity window. Silence is not safety: a mark that is not revalidated lapses, and the display reflects it.
A static badge says “we were once looked at.” A soul-bound, revocable mark says “we are being watched right now, and here is the proof.” That is the difference between marketing and assurance.
The engine behind the mark is built and running: TINL evaluates transaction intent and connection trust; Pathfinder evaluates execution paths and exploit variants; Governance Sentry watches voting, timelocks, Safe authority and administrative state; and the a3e9-ledger stores the append-only evidence chain. The Rekt baseline corpus — 266 incidents with pre-state code hashes — is wired in as the regression test set. Badge issuance, expiry, downgrade and revocation run on the same evidence-backed stack.
The lineage is honest: this concept began as a self-attested badge submitted to a Solana hackathon in 2025 — a badge with no engine behind it, and the judges saw that. The badge was right; the engine did not exist yet. Now it does. The mark is the output; the service is what stands behind it.
// WHAT_KEEPS_THIS_HONEST
Audits are necessary. a3e9 exists because audited code still drains people: an audit protects the builder, cannot protect every party who later interacts, and cannot see a contract that changed after sign-off. Keep your audit. a3e9 is the seatbelt for everyone who drives the car afterwards.
The engine runs today: path evaluation, connection trust, verdicts, decision memory, the evidence ledger and the Rekt baseline tests are working software. What remains is scale-out and the commercial packaging. The demonstration is the system itself — the Audius reproduction, the live detector baseline, the corpus tests.
Signer theft, phishing emails and CI/CD compromise are not derivable from contract state. a3e9 consumes verified identity, endpoint, domain, session and vendor signals where available, then detects and blocks the on-chain consequences. It does not claim to see every private off-chain event.
“Is this counterparty sanctioned?” and “will this signature drain me?” are answered by different machinery, and a3e9 answers only the second. There is no sanctions or AML oracle class in the Governor's feed manifest — no OFAC or SDN screening, no chain-analytics attribution, no wallet risk-labelling feed. A desk with a sanctions-compliance obligation does not get it here, and that is recorded as a missing oracle class rather than implied by adjacency to the advisory feeds that are wired in.
It normalizes what a signature actually does — an unlimited approve, a malicious EIP-2612 permit, setApprovalForAll over a whole collection, the SPL equivalent on Solana — and applies policy to the decoded intent, with every ALLOW, WARN, BLOCK or NORMALIZE written to an HMAC-chained log before the call returns. It does not screen destinations, does not stop address poisoning or a fake airdrop the user chooses to interact with, and the wallet confirmation screen remains the backstop.
This is the failure mode the whole product is built around, and a3e9 holds itself to it: a consumer was serving a monitoring-rule corpus whose signature verified perfectly — digest e37585e1…, 14 rules — while the producer's live output had moved to 881537e8…, 15 rules. Integrity passed; currency failed; only the producer's drift gate could tell the two apart. That finding is why every mark expires, why silence is not treated as safety, and why the ledger separates “this is authentic” from “this is current.”
a3e9 “Safe to Touch” positioning brief v2, reviewed 2026-09-09. Counts as of 2026-09-08.
// SAY_IT_IN_ONE_LINE
Audits make code safe to ship. a3e9 makes it safe to touch.
They protect the builder. We protect everyone who presses “connect” and “sign.”
Your audit is a snapshot. a3e9 is the live feed.
Every Rekt incident is a test we have to pass — forever.
A timelock creates time. a3e9 makes that time actionable.
A multisig proves signatures. a3e9 verifies identity, intent and authority.
A badge that cannot be bought — and can be revoked.
An oracle outage never creates permission.
Independence is declared, never inferred. Two keys at one vendor is one source.
Obliged to watch the outside world. Forbidden to let it approve anything.
The model proposes the attack. The deterministic test decides.
A digest that verifies is not a thing that is current.
a3e9 · TINL · Pathfinder · Governance Sentry · Oracle Governor · ledger · Proof of Assurance — interaction-time assurance, fail-closed by design.