~/djzs/ruleset $ cat DJZS-PM-v1.0
The taxonomy the gate scores against, the formula it hashes with, and the binding contract that lets anyone recompute a verdict from its intent — without trusting DJZS. Weights are hash-locked; a change is a versioned re-derive, never a hot patch. That immutability is what makes every hash reproducible.
unknown. The caller halts; the response returns unknown_fields. Under-specified reasoning drains here — never to a silently guessed PASS.Abstain over guess.
Weights sum to 100. FAIL threshold 25. A CRITICAL code forces FAIL on its own. All four codes are implemented and calibrated. Extraction contract DJZS-X-v1.1 (2026-09-01): a rule in the extraction layer had been demoting a correctly-detected unsourced claim to unknown unless the intent contained probability vocabulary (%, odds, chance, likely, probably) — so "gut feel" and "everyone knows" produced WAIT, not M03. Found by measurement (Q2), reproduced from raw samples, removed as a versioned contract change with before/after evidence in tests/out/. Every response now states its extraction contract as taxonomy.extraction.
| Code | Name | Severity | Weight |
|---|---|---|---|
| DJZS-M01 | NARRATIVE_RESOLUTION_GAP | CRITICAL | 30 |
| DJZS-M02 | FALSIFICATION_ABSENT | CRITICAL | 30 |
| DJZS-M03 | PROBABILITY_UNSOURCED | HIGH | 25 |
| DJZS-M04 | CONSENSUS_NO_EDGE | MEDIUM | 15 |
M04 is advisory-grade: alone it rides a PASS with the flag on the certificate (weight 15 is below threshold). It blocks only by stacking — e.g. M03 + M04 = 40 → FAIL.
An 11-code taxonomy (weights sum 200) is frozen — three codes wired live (E01, I01, X01), the other eight reserved with their weights but not yet firing, and no served surface today. Disclosed as roadmap, not sold as done. The full table lives in the repository.
The verdict is computed by a frozen deterministic engine — pure code, no model, no network, no clock. Swap the model and extraction quality changes; the rules, weights, and hash do not.
// verdict_hash — computed by the frozen engine verdict_hash = sha256(canonicalize({ verdict, risk_score, flags: flags.map(f => f.code).sort(), unknown_fields }))
The verdict hash proves the engine's output is well-formed. It does not, by itself, let a third party prove which intent the verdict describes — verdict_hash is not injective. The binding key is intent_hash, and for a receipt to be independently verifiable, that digest must be a pure, reproducible function of the intent alone.
v2 anchors the binding where the client already verifies: EIP-712 typed data — the hashing layer ERC-8004 and EAS use, displayable by every wallet, recomputable inside a Safe Guard's checkTransaction. The receipt is an EAS attestation on Base under a registered DJZS schema. No server-side field enters the binding key; anything time-varying lives in the attestation envelope.
// intent_hash — the binding key. PURE function of the intent. EIP-712. domain = { name: "DJZS", version: "2", chainId: 8453 } DJZSIntent { string action // pm_trade · swap · defi · transfer · contract_call · deploy string venue string market string side string thesis string probability_basis uint256 size_usd_cents uint256 max_loss_usd_cents string exit_condition bytes32 params_hash // class-specific extension; 0x00…00 if none } intent_hash = hashTypedData(domain, DJZSIntent, intent) // receipt — EAS attestation on Base. EIP-712-signed by the DJZS attester. Never revoked. schema = "bytes32 intentHash, string verdict, uint8 riskScore, string[] flags, string rulesetVersion" uid = 0x5ef67e2b8c617635431401d2872b2a6f79eeba54a8e19fd5ecd45aceda2a2030 // deterministic; precomputed recipient = the audited agent's address
// intent_sha256 — the v1 binding key. Also pure. Also reproducible. Published here for the first time. // engine-adapter.ts · renderIntentText(intent): // keys sorted · one `key: value` line each · strings verbatim · numbers/booleans as written // nested objects as compact JSON (no spaces, insertion order) · lines joined by "\n" intent_sha256 = sha256( renderIntentText(intent) )
Reference implementation: djzs-intent.ts (intentHash(), self-tested structural + sensitive) and eas-attest.ts (registerSchema(), attestVerdict(), readVerdict()). v1 (intent_sha256) remains alongside and is equally reproducible — its rule is published below. Recompute any receipt at djzs.ai/verify.
Recompute or it didn't happen.
821da611 (2026-09-01) every paid verdict returns intent_hash and writes an EAS attestation from 0xfB0e…7824 under schema 0x5ef67e2b…2030 onto the paying agent. First attestation: 0xc5995989…5a89, binding key independently recomputed byte-identical. intent_sha256 (v1) remains alongside for pipeline continuity.tests/.Disclosed as roadmap, not sold as done.