Security Review · Internal · Published in Full

The engine, reviewed as an adversary.

A reproducible adversarial security review of the MIZAN zero-knowledge quant-verification engine — every finding carries a file:line, a test, and a build output anyone can re-run. This is not a third-party audit; its authority rests on reproducibility, not on the reviewer. The external paid ZK audit remains the standing precondition before any live capital.

Era Scope Audited era: guest v10. v11 ships the same remediations; a published v11 review is pending. Every credential names the era that judged it and verifies against that era forever — this review binds to guest v10 (id dafad185…); the current era is guest v11 (id 3ac3b10b…), which adds PSR and Hansen SPA in-circuit. v10 credentials verify forever.
ENGAGEMENT · mizan-proof (Rust + RISC Zero zkVM) SCOPE · ~18,000 LOC · 5 audits · six auditor roles across the engagement (sixteen agent instances at peak) DATES · 2026-07-02 → 07-03 → guest v5 07-18 → five-front 07-21 → v9+v10 ship 07-22
3
Critical findings
(all found & fixed)
24
Remediations
(across the audits)
50/50 · 133/133
Tests green — 50/50 core at the v10 audit; 133/133 at guest v5
16/16
Zero-trust checks
on a real STARK
§01Executive Summary

The cryptographic spine is sound. One in-circuit hole let a prover forge a passing credential — it is now closed.

The independent verifier is genuinely zero-trust in real mode: the STARK seal is checked against a compiled-in image ID, the journal is bound to the receipt, the dataset Merkle root is re-derived by the verifier, and the risk-gate policy is pinned. No-lookahead holds across every engine path, and the codebase's honesty discipline is unusually strong — the hard line against "audited / secure / production-ready" claims is held everywhere, and the real STARK path is implemented, not stubbed.

Verdict — structurally sound, pre-production, criticals closed. The engine is credential-grade after remediation, but not capital-grade: an external paid ZK audit remains the standing must-fix before any live capital. Data provenance (U5) is pinned by a fail-closed canonical-root allowlist (2026-07-03); the fully trustless version — roots signed by an independent data authority — stays on the roadmap. This document is an internal, AI-driven engineering review, not a third-party audit or certification.
Latest — 2026-07-22, same-day double ship. Guest v9 closed the D7/D8 PBO/CPCV soundness holes; guest v10 then rebuilt PBO as composed proofs: every trial its own STARK, verified in-circuit by an aggregator via recursion — at S=16, all 12,870 partitions — added the n_eff autocorrelation correction to the Deflated Sharpe, and made sealed-model sizing provable. Red-teaming v10 before its mint found D9: clone-padding — a ledger stuffed with copies of the winner games PBO to zero. Refused in-circuit, disclosed, minted only after. You can re-verify the fix from production in one command, and it still reads not significant, on purpose.
§02Methodology & Reviewer

Six auditor roles, each a distinct adversarial lens.

The engine was reviewed under six auditor roles across the engagement (sixteen agent instances at peak), each scoped to one failure class and instructed to read the current code and cite file:line, not to trust prior documentation. Findings were triaged by severity and reproduced against the running binaries before remediation.

Who performed this review — in full. This is an internal, AI-driven review: the auditors were Claude models orchestrated by the engineer, independent of each other and of the code's author, but not a third-party firm and not a human security auditor. It does not substitute for the external paid ZK audit (tracked as U1), which remains outstanding and is required before any live capital. Two other, distinct assurance layers exist and should never be conflated with this one: an in-person advisor sanity-check by Dr. Anish Mohammed (cryptographer) on 2026-06-21, and the pending external audit. The credibility of this document rests entirely on reproducibility — every finding carries a file:line, a test, and a build output you can re-run — not on the standing of the reviewer.
Auditor roleQuestion it tried to answerVerdict
Verifier soundnessCan a malicious prover get a forged PASS blessed as real?spine sound
In-circuit correctnessDoes the proven metric equal the true metric? Lookahead, overflow, gate logic.1 critical
Zero-knowledgeIs the strategy actually hidden, or recoverable from disclosed metrics?disclosure
Build integrityDoes it compile? Do the tests actually run and pass?0/48 → fixed
Claims integrityDo docs/UI claim more than the code delivers? Hard-line violations.honest
Host & provenanceData binding, dev-mode leakage, secrets, custody, versioning.allowlist pinned
§03Findings Register

What the review surfaced.

24 findings across five severity tiers. The criticals are genuine forge-a-credential vectors inside the circuit; the highs are correctness, confidentiality, and build defects. Every finding below carries its status after same-day remediation.

IDFindingSeverityStatus
C1Prover-chosen annualization basisperiods_per_year was unbound from the bar interval → declaring 2190 on daily bars multiplies Sharpe by √6 and lifts CAGR over the gate.CriticalFixed
C1rCarry annualization residual — found in the 2026-07-03 re-verificationFunding series carry no timestamps in-circuit, so the carry path's basis is trust-on-declaration (declaring hourly on 8-hour prints inflates carry Sharpe ×√8). CLOSED 2026-07-05 (format v2): funding prints are timestamped, bound in the carry root, and spacing + annualization consistency are enforced in-circuit.HighClosed · format v2
H1Carry booked churn for freeThe delta-neutral carry backtest charged no per-trade cost; the anti-fill-fantasy guard was defeated by overloading the slippage field.HighFixed
H2Data-source substitution (U5)The verifier re-derives the root from the same CSV the prover supplies → fabricated history reconciles. A doc line falsely claimed it "prevented." 2026-07-03: verifier now enforces a fail-closed canonical-root allowlist; substituted history fails by default, bring-your-own-data requires an explicit flag and is loudly labeled unpinned.HighInterim fixed
H3Studio blessed dev receiptschecks_pass folded the dev/fake exit-3 into "pass," and the default web verify ran in dev mode.HighFixed
H4Test suite would not compileA months parameter was added to two core functions; five test call sites went stale → 0 of 48 tests ran.HighFixed
H5Disclosure on by default · wrong space reportThe recovery-space report sized the ignored rule DSL, not the active Tier-2 engine; no SDK minimize path.HighFixed
M3Env-based fake detectionThe verifier judged "fake" from its own env, not the receipt structure.MediumFixed
M4·M5Warm-up leverage · soft CAGR floorVol-target warmed at cap; CAGR fixed-point drift left the 20% floor two-sided.MediumFixed
M7·M8Salt in-repo · banned "Capital" termPre-registration salt stored beside the bundle; a legacy "Capital" suffix rendered on credentials/UI (brand is MIZAN).MediumFixed
M9·M10·M11Metric labeling · compute DoS · advisor wordingCorpus metrics shown as "ZK-proven"; unauth compute + CORS*; "reviewed and verified" overstated advisor review.MediumFixed
M1·M2·M6Dev-flag in bundle · prereg default · intrabar MDDSuperseded by M3 / policy note / needed the OHLC data-model change — M6 closed by format v2, 2026-07-05.MediumDeferred → closed
L·1–7Low: digest PKI, date parser, pipefail, PII at rest, no gitHardening items; date-parser fail-safe and git versioning fixed, remainder documented.LowPart-fixed
§04Critical Finding — C1

The prover picked the annualization factor. That forged the gate.

Sharpe scales with √(periods per year); CAGR scales with its exponent. Both are monotonic in periods_per_year. The bar interval was bound to the data — lying about it fails validation — but the annualization basis was never tied to that interval. A prover could take honest daily bars and simply declare six times as many periods per year.

◆ THE ATTACK

A 0.6-Sharpe strategy reports 1.47 and clears the 1.20 gate — with honest data.

honest daily bars · interval 86,400s declare periods_per_year = 2190 Sharpe × √6 ≈ 2.45 gate PASS · credential minted

The attested passed bit is gameable with one free integer — the exact thing the product exists to prevent. The receipt is real, the data is real; only the basis is inflated.

✓ THE FIX — BIND THE BASIS TO WALL-CLOCK

You may not claim more periods per year than the calendar allows.

// mizan-core/src/lib.rs — folded into data_valid on every price path
pub fn ppy_consistent(interval_secs: i64, periods_per_year: u32) -> bool {
    if interval_secs <= 0 { return true; } // irregular data → declared basis
    (periods_per_year as i64).saturating_mul(interval_secs) <= SECONDS_PER_YEAR
}
// over-count → DataInvalid → gate FAIL. Honest under-count (equity 252) allowed.

Under-counting only depresses the prover's own metrics, so it stays legal; over-counting — the attack — now invalidates the dataset. Verified end-to-end: daily bars declared at ppy=2190 now fail with fails:[DataInvalid] instead of minting an inflated-Sharpe pass, and the behavior is locked with a regression test.

Follow-up re-verification (2026-07-03): the fix was independently re-checked against the committed code. Both zkVM guest paths were confirmed bound; the one remaining unbound public API (evaluate, reachable only from tests) was hardened to the same rule and pinned in the regression test. The re-check also surfaced a genuine residual the original pass missed: the carry path could not bind its basis in-circuit because funding data carried no timestamps (finding C1r) — disclosed and tracked rather than silently absorbed, then closed by format v2 on 2026-07-05.

§05Remediation Ledger

Every finding, accounted for.

Sixteen remediations shipped the same day, each verified by the rebuilt test suite and an end-to-end dev-mode prove/verify smoke test. A follow-up pass on 2026-07-03 closed the data-provenance gap (interim), re-minted the real proof, and re-verified the critical fix. Open items carry an explicit, honest rationale rather than a silent close.

C1
Bind annualization basis to bar intervalppy_consistent guard on single + portfolio paths · regression test ppy_inflation_is_rejected_c1
Fixed · tested
H1
Carry charges a 30bp round-trip cost per entry (×leverage), recorded in fee_bpsAnti-fill-fantasy guard now meaningful for carry · test carry_charges_round_trip_cost_h1
Fixed · tested
H3
Studio checks_pass requires a real STARK (exit 0)Dev/fake exit-3 surfaced separately as plumbing_ok, never as a pass
Fixed
H4
Restored the test suite — 50/50 pass at the v10 audit (was 0 compiling)Threaded the months slice through five stale call sites · the guest v5 suite later ran 133/133
Fixed
H5
Engine-aware recovery-space verdict, printed before minting · real --minimal PASS/FAIL pathSizes the active trend/xs/book params, not the ignored rule DSL
Fixed
M3
Verifier rejects InnerReceipt::Fake structurallyRobust to a stray RISC0_DEV_MODE — fakeness read from the receipt, not the env
Fixed
M4·M5
Vol-target warms at 1× · conservative CAGR gate margin (40bp)No early over-leverage; no false pass at the 20% floor
Fixed
M7
Pre-registration salt written outside the repo tree~/.mizan/salt / MIZAN_SALT_DIR · .gitignore hardened for salts, PII, bundles
Fixed
M8·M9·M11
Dropped the legacy "Capital" suffix — brand is MIZAN · metrics labeled historical · advisor-review wordingCorrects the banned regulated-firm term, the ZK-proven metric conflation, and the audit-vs-review overstatement
Fixed
M10
CORS restricted + per-IP rate limit in public modeCaps unauthenticated compute on /api/prove
Fixed
H2·D4·L2
Threat-model corrected to the open U5 gap · fail-safe date parser · git initializedHonest documentation of the data-provenance limitation; verifier no longer panics on malformed CSV; the moat is now versioned
Doc + fix
U5
Canonical-root allowlist — data provenance pinned (2026-07-03)Verifier enforces data/canonical_roots.txt (10 pinned dataset roots), fail-closed on a missing list or unlisted root · bring-your-own-data requires an explicit --any-data flag, loudly labeled PROVENANCE NOT PINNED · residual: the list is MIZAN-curated — independent data-authority signing remains the trustless roadmap item
Interim fixed
C1+
C1 follow-up re-verification (2026-07-03)Remaining unbound public API (evaluate) hardened + regression-tested · carry-path residual (C1r, no in-circuit timestamps) surfaced, documented at evaluate_min_carry, out-of-circuit cadence check specified — later closed by format v2
Fixed · tested
Real STARK re-minted on the patched engine (2026-07-03)220 KB succinct proof at that mint (the current canonical bundle is 225 KB) · all 16 zero-trust verifier checks pass, exit 0 · live /api/verify-real returned real_verified:true in 51 ms
Done
C1r
Carry annualization basis — in-circuit bindingNeeded timestamps in the carry data model (same class as M6) · closed 2026-07-05 by format v2: timestamped funding prints bound in the carry root, spacing + annualization enforced in-circuit
Closed · format v2
M6
Intrabar (OHLC) drawdownBar was close-only; adding OHLC touched every loader + the Merkle root — a data-model change, not a patch. Closed 2026-07-05 (format v2): drawdown and worst-bar are marked on adverse intrabar extremes at leverage.
Closed · format v2
§06Second Review — Guest v5 Ship · 2026-07-18

We adversarially audited our own just-shipped in-circuit ML engine. It caught a live overclaim on this very site — corrected the same day.

On 2026-07-18, hours after shipping guest v5 — the in-circuit black-box gate and zkML proven-inference credential families, plus a re-minted flagship — the engine was put through a second internal adversarial review: five AI auditor agents in parallel (ZK circuit soundness, cryptographic binding, quant honesty of the flagship, deployed-claims integrity, and a dedicated forge-a-credential red-team), each finding independently re-verified before action. The single most important result is the one an honesty-branded company most wants to find in its own work before anyone else does.

Verdict — cryptographic binding sound, flagship honest; one live copy overclaim caught & corrected same-day. Five independent lenses converged on one finding: the black-box credential's public wording said "backdating refused by construction." The circuit genuinely refuses tampering, curation and re-tuning, but it does not prove positions were committed before each outcome was known; the red-team minted a green perfect-hindsight track to prove it. The claim was corrected across the live site within the day, and the real engineering fix — external timestamp-anchoring of the track head (U10) — shipped 2026-07-26. No credential was mis-issued: the finding was in the marketing wording, not the proof.

Corrected on this site, same day

V5·1
Black-box "backdating refused by construction" overclaimCircuit proves forward-ordering + tamper/curation resistance; forward-timing (positions fixed before outcomes) rests on an anchored track head, not the circuit. Copy now states this precisely on the verify page, studio coverage map, and homepage. Real fix U10 shipped 2026-07-26 — see below.
Fixed · deployed
V5·2
Verifier condition count was under-statedThe source-available verifier prints 16 checks on a disclosing credential at that era (12 minimal) — the enumerated list had silently dropped the cost-floor check. Corrected site-wide. Settled by running the verifier, not by reading docs. (The current v11 canon: 17 conditions.)
Fixed · deployed
V5·3
Homepage / coverage-map contradictionHomepage listed point-in-time equities + option chains as "built" while the coverage map said "in build." Reconciled: ML / black-box proven live; PIT equities + per-strike option chains — engines built, our data feeds in build.
Fixed · deployed

The anti-hindsight anchor — shipped

U10
Anti-hindsight anchor — SHIPPED 2026-07-26Bitcoin OpenTimestamps anchoring is live: credentials carry embedded Bitcoin block-header attestations (confirmed blocks 956734–959655), and an hourly cron upgrades pending attestations to confirmed ones. The forward-committed claim now rests on an external chain no one at MIZAN controls, not on our word.
Closed · shipped 07-26
Verified sound. The cryptographic binding held against every forge attempt: no tamper (the track head is re-derived in-circuit), no zkML decision forgery (decisions are recomputed from committed weights), no silent cost softening (returns are computed net of the costs the credential commits and discloses), no dev-mode fake accepted as real, and no engine downgrade on the desktop verifier. The re-minted flagship was independently confirmed honest — no lookahead, no phantom fills, drawdown marked on intrabar wicks, annualization bound to the data — and it runs below buy-and-hold exposure (0.20× average), winning on risk-adjusted terms (Sharpe 1.63 vs buy-and-hold 0.78) at roughly a quarter of the drawdown, not on leverage. Same standing posture as the 2026-07-02 review: credential-grade, not capital-grade — an external paid ZK audit (U1) remains the must-fix before live capital.
§07Component Review — Deflated Sharpe · PBO · CPCV

We reviewed a statistic before it shipped, and again after — catching a way to game it, then a way to overstate it.

The Deflated Sharpe Ratio (Bailey & López de Prado, 2014) corrects a Sharpe for how many strategies you tried before picking the winner — but only if the trial count N is honest, and nobody reports it honestly. MIZAN built an in-circuit DSR that commits N in a Merkle trial ledger. It was audited twice: on 2026-07-18 before it was wired into any credential (D1–D3), and again on 2026-07-20 after it shipped as a public credential (D4–D6). Both audits found real issues; all are fixed. The credential is live and independently verifiable — N=10 committed trials, every trial's Sharpe re-derived in-circuit, and the deflated Sharpe of 0.6779 at /verify/.

D1
Gaming the trial-variance term (critical) — found & fixedScoring only a chosen subset of registered trials collapsed the deflation while the honest count stayed high (DSR 0.00 → 0.96 at N=300). Fixed: the statistic fails closed unless every registered trial is scored, so the variance reflects all N, not a curated few. Regression-tested.
Fixed
D2
Large-N tail approximation (numerical) — found & fixedThe inverse-normal quantile saturated for very large trial counts, overstating the benchmark. Recomputed from log-N directly so it stays accurate at any N. (The fix's own sign error was caught immediately by regression tests — the reason to audit before wiring.)
Fixed
D3
Per-trial score binding (honesty gate) — shippedHeld open at pre-ship: the per-trial scores were committed but declared, so we did not claim that half unfakeable. It shipped 07-19 — each trial's Sharpe is re-derived from that trial's own committed spec inside the circuit and bound, so V[SR] is proof-grade. The live credential's verifier reports it: "EVERY trial's Sharpe re-derived + bound in-circuit."
Shipped
D4
Verifier ignored the passed data file (post-ship, medium) — found & fixedThe published DSR command passed btc_4h.csv, but the verifier's DSR branch exited before loading it — a wrong or nonexistent CSV still printed VERIFIED. Sealed in the receipt (no forgery), but the command implied a re-check that never ran. Fixed: the DSR verifier now recomputes the winner's data root from your CSV, matches the committed root, and pins it to the canonical allowlist; wrong/missing data now refuses. Verifier-only fix — same guest image, the live credential still verifies. Re-tested with live-downloaded artifacts.
Fixed
D5
Significance verdict set at a coin flip (post-ship, medium) — found & fixedThe verdict printed "distinguishable ✓" at DSR ≥ 0.5 — not a significance bar at all. DSR is a probability, so the bar is Bailey–López de Prado's 0.95, the usual 1−α. Our own flagship (DSR 0.6779) was being stamped as clearing a bar it doesn't. Fixed: threshold raised to 0.95; the credential now honestly reports "NOT significant at 95% — this edge does not survive multiple testing across N=10 trials." Our own flagship failing its own bar is the point — the tool doesn't flatter its maker.
Fixed
D6
Winner not bound to the trial ledger (critical, 2026-07-21) — found & fixed in-circuitThe deflation benchmark SR₀ is computed from the committed trials' variance, but the circuit never asserted the winner is one of those trials, nor that its Sharpe is their maximum. A decoy ledger of tightly-clustered specs could drive V[SR]→0 → SR₀→0, collapsing the deflation to the un-deflated Sharpe while every other check stayed green — the exact best-of-N attack the credential exists to stop. Fixed: evaluate_dsr now requires winner∈ledger AND winner==max(proven trials), fail-closed otherwise, and the host submits the provable argmax as the winner. Two regression tests added — a non-max winner and an absent winner both fail closed. Shipped and live: guest rebuilt to v7 (IMAGE_ID 69ee0666…), the flagship re-minted on it, re-anchored (RFC-3161 + Bitcoin OpenTimestamps), verified end-to-end from production — all checks green, still honestly "NOT significant" (DSR 0.68). No false-significant credential ever existed.
Fixed · shipped v7
D7
PBO decoy-ledger gaming (critical, self-found same day as ship) — found & fixed in-circuitWe shipped PBO + CPCV (guest v8) then immediately red-teamed them, and found the exact class of bug the DSR fix (D6) closed, not carried into the new code. PBO was computed over the whole committed trial set and the winner was only checked for ledger membership, not that it was the maximum — padding the ledger with deliberately-weak decoys drove PBO→0 for an overfit winner. Fixed (guest v9): evaluate_pbo now (1) requires every committed trial to clear the institutional gate — a churning-cost decoy can no longer be a "trial" — (2) binds winner==max(trials) like DSR, and (3) pins a canonical S=8 split with a pooled-OOS CSCV Sharpe (the paper's method, replacing a 0-floored sum). The flagship's honest PBO moved from the gamed 0.00 to 0.04 across all 70 partitions — genuinely not overfit, and no longer paddable. Superseded upward in guest v10: PBO is COMPOSED (per-trial STARKs verified in-circuit by an aggregator) at S=16 — all 12,870 partitions — flagship reads 0.0759.
Fixed · shipped v9
D8
CPCV purge/embargo not actually enforced + parameter-shoppable — found & fixed in-circuitThe CPCV docstring claimed a prover who under-purges commits a count the verifier catches — that check was never implemented (verifier only checked purged_total > 0). With label_span=1/embargo=0 the leak stayed in and "leak-free" still minted. And S (PBO) plus N/k/label_span/embargo (CPCV) were prover-chosen after seeing the data — shoppable for the best number. Fixed (guest v9): the CV schema is a canonical constant pinned in-circuit (N=6, k=2, label_span=1, embargo=3 — no shopping, no embargo=0), a per-path purge floor is enforced (a path set that purged nothing fails closed), and the verifier independently re-asserts the schema + floor. Self-found and closed the same day, published before any allocator saw it.
Fixed · shipped v9
D9
PBO clone-padding — found by red-team BEFORE the v10 mint, refused in-circuitThe v10 composed-PBO rebuild was red-teamed the same morning it was written — before any mint. Finding: register the winning strategy under N different salts and every "trial" is gate-passing with identical out-of-sample Sharpes, so no partition can rank the winner below median — raw CSCV reads PBO = 0.00 with zero independent trials (the attack is proven by a test, not asserted). Fix, in-circuit: the aggregator refuses any two trials with bit-identical per-sub-period moment vectors — fail-closed to PBO = 1.0. Honest residual, disclosed: ε-perturbed near-clones remain possible; the forward-only ledger is the mitigation and correlation-clustered effective-N is the queued statistical fix. This is the first attack class caught before shipping rather than after — the D7 lesson applied.
Closed pre-mint · v10

Studio surface — 2026-07-21 five-front audit

A parallel five-auditor sweep of the self-serve studio — claims, methodology, application/ZK security, UX, and cross-property consistency. The self-serve DSR / registry surface, shipped fast, went out under-secured; the live-money and honesty items were fixed the same day.

S1
Unauthenticated mint endpoint → GPU cost-DoS (critical) — fixedThe self-serve mint took a client-supplied email as its only rate key; rotating it allowed unlimited real GPU-proving spend on the public box. Fixed: an authenticated session is required, identity is taken from the session (never the body), and global concurrency + daily caps were added. Unauthenticated requests now refuse with 401.
Fixed · deployed
S2
Non-canonical dev dataset was mintable (high) — fixedA 1,000-bar dev prefix flagged non-public could still mint a wall-grade credential on a short window. Fixed: the validator refuses any non-public dataset before proving — only the full canonical sets mint.
Fixed · deployed
S3
Credential listing keyed on an unauthenticated email (medium) — fixedThe "your credentials" listing filtered on a client-supplied email, leaking existence and metrics of others' work. Fixed: the listing is scoped to the authenticated account; the query parameter is ignored.
Fixed · deployed
S4
Homepage card vs the verifiable artifact (high) — fixedThe hero credential card advertised a research config (Sharpe 1.77 / MaxDD 14.9% / CAGR 27.2%) while the downloadable credential verifies to 1.63 / 20.76% / 26.6%. On a "recompute it yourself" site that gap is the worst kind of mismatch. Fixed: the card now shows exactly what the credential verifies, with the buy-and-hold benchmark beside it.
Fixed · deployed
S5
Self-serve "N cannot be understated" overclaim + consent — fixedSelf-serve N is the caller's own trial count, not proof of their full search. Fixed: the claim is reframed to "certifies the search you commit", the self-serve path now discloses that the strategy is sent to a third-party GPU for the hosted mint (the "trustless / never seen" guarantee holds for the local SDK path), and the registry honors an explicit opt-out. The PSR significance assumption (serially-independent returns; an upper bound on autocorrelated high-frequency bars) is disclosed on the standard page. Remaining roadmap item: default-private opt-in (currently opt-out).
Fixed · deployed
Why audit it twice, and publish both? Because the DSR exists to answer the one question its own author would ask first — "where's your multiple-testing correction?" — and the honest answer includes what we got wrong at each stage and fixed before anyone relied on it. Pre-ship we caught a gaming path; post-ship we caught a claim the verifier didn't back with a check, and closed it the same day. A verify command that passes an argument must check that argument, or the argument comes out. That is the standard this whole page exists to hold.
§08Verification Evidence

Reproducible, not asserted.

Every claim above is backed by a rebuilt binary and a run. The build is green across all crates, the full test suite passes, and the critical fix was confirmed end-to-end against the live host and verifier. Transcripts below are recorded as-run (July 2026, era v10); the current canonical bundle is 225 KB and verifies offline in ~81 ms.

mizan-proof · verification run · 2026-07-02
$ cargo test -p mizan-core
test result: ok. 50 passed; 0 failed; 0 ignored     # was 0 compiling

$ cargo build --release -p host -p verifier
    Finished `release` profile [optimized] target(s)

$ RISC0_DEV_MODE=1 host --prove c1_cheat.json   # daily bars, ppy=2190
  GATE VERDICT : FAIL ✗
  DIAG: net 553.2% · CAGR 584.8% · … → fails: [DataInvalid]   # C1 blocked

$ verifier credential.bundle  (dev receipt)
  ⚠️ CHECKS PASS but the receipt is NOT a real STARK — exit 3   # M3

$ host --prove btc_directional.json --minimal   # H5 minimize path
  🔒 MINIMIZED: only PASS/FAIL committed — strategy unrecoverable
mizan-proof · follow-up · real STARK on the patched engine · 2026-07-03
$ host --credential            # real proving, RISC0_DEV_MODE unset (~12 min)
  Compressed proof: 3547 KB → 220 KB (succinct), verify ✓ 13ms

$ verifier credential_REAL.bundle data/prices.csv
  [] guest image id matches the program we trust
  [] zk receipt verifies (proof is real)
  [] committed journal matches credential (no swap)
  [] data root recomputed from canonical CSV matches
  [] data root pinned to canonical allowlist: prices.csv   # U5 — new
  [] gate policy is the canonical MIZAN policy … (16/16 checks)
  ✅ INDEPENDENTLY VERIFIED — exit 0

$ verifier <bundle> substituted.csv              # fabricated history
  [] data root NOT in canonical allowlist — substituted/unknown dataset

$ curl /api/verify-real
  real_verified: true · elapsed_ms: 51.2 · proof_kb: 219
§09Assurance Posture

What the engine guarantees — and what it does not.

Trust in a verification product is bought with disclosed limits, not hidden ones. After remediation the cryptographic guarantees hold; the remaining gaps are named, tracked, and gated behind an external audit.

◆ Guaranteed after remediation

  • The verifier is zero-trust in real mode — seal, journal-binding, data-root re-derivation, gate pinning.
  • The annualization basis is bound to the bar interval — Sharpe/CAGR can't be inflated for free.
  • No-lookahead holds across every engine path (perturb-last-bar tested).
  • The strategy witness is provably absent from the credential.
  • Dev/fake receipts are rejected structurally and never blessed as real.
  • Carry is netted of borrow and charged real trading cost, in-circuit.
  • Dataset provenance is pinned to a fail-closed canonical-root allowlist — substituted history fails verification by default; bring-your-own-data is loudly labeled, never silently trusted.

○ Not yet claimed — gated on external audit

  • U5 — trustless provenance: the canonical-root allowlist is MIZAN-curated; roots signed by an independent data authority remain the roadmap item for third-party-trustless verification.
  • C1r — CLOSED (format v2, 2026-07-05): funding prints are timestamped and bound; the carry annualization basis is enforced in-circuit.
  • Seal witness-hiding (U9) is flagged unverified pending the external ZK audit.
  • M6 — CLOSED (format v2, 2026-07-05): bars carry OHLC; drawdown and worst-bar are marked against the adverse intrabar extreme at leverage. The change retired our own v1 flagship (−16.2% intrabar wick, gate refusal) — replaced by the production trend book, which passes honestly.
  • The credential digest is tamper-evident, not issuer-signed (PKI is future work).
  • On-chain (Groth16) verification is wired but blocked on x86/Bonsai infra.
  • This is an internal, AI-driven review by the engineering team — not a third-party audit, human security auditor, or certification.
Standing posture. Credential-grade, not capital-grade. The engine may issue and verify zero-trust credentials today — on provenance-pinned canonical data as of 2026-07-03; live capital remains gated behind an external paid ZK audit (U1) and independent data-authority signing for fully trustless provenance. No custody, orders, or funds are touched anywhere in the system.
§10Open Items — The Standing Ledger

What is still open, with dates.

A security page that only lists closes is a marketing page. These are the items open as of this publication, each with the date it was raised and where it is tracked.

IDItemRaisedStatus
V5·4Browser seal-verify hardeningThe in-browser convenience verifier checks the STARK seal + journal match, but not the gate verdict, gate policy, cost floor, or data-root allowlist — a failing or fabricated-data credential can show green in the browser. The authoritative desktop verifier has no such gap. The browser path will decode and assert the full check set.2026-07-18Queued
V5·5Six lower-severity code items--aux/--track binding made fail-closed; leverage bound into the black-box identity; vol-target rebalance turnover costed; integer-cast hardening; engine-id validity-window enforcement; interior-bar causality test. Bundled into one image change. See docs/AUDIT_2026_07_18_v5_findings.md.2026-07-18Queued
U1External paid ZK auditThe standing gate before any live capital — a named, budgeted milestone. Until it is done, the posture stays credential-grade, not capital-grade.2026-07-02Standing gate
U9Seal witness-hiding unverifiedThe zero-knowledge property of the seal itself is flagged unverified pending the external ZK audit; we do not claim it until a third party checks it.2026-07-02Pending U1
IMPL-2026-001Reference implementation partial conformanceThe MIZAN era-v11 reference implementation is registered PARTIAL against VTR-1: R-04 and R-18 duties unmet. Tracked in the public errata register at /errata/.2026-08-09Open
§11Operations & Continuity

If MIZAN disappeared tomorrow, every credential would still verify.

Security includes the question no vendor likes: what depends on us staying in business? The honest answer, stated plainly.

Verification is issuer-independent by design. The verifier binaries are MIT-licensed, and era law governs the engine: every credential names the exact engine era that judged it and verifies against that era forever. Superseded engines are never revoked. An allocator holding a credential and a copy of the verifier needs nothing from MIZAN — no server, no key, no goodwill — and existing credentials remain verifiable even if the company disappears. This is not a promise: the complete verification estate — every era's verifier and host binaries, every public bundle with its Bitcoin timestamps, the canonical crypto datasets, sha256-manifested — is mirrored off-domain on GitHub, outside our DNS, our hosting, and our control to delete quietly.
Minting is not issuer-independent, and we say so. New credentials are minted on founder-operated infrastructure, with GPU proving on a third-party cloud (Modal). If MIZAN stops operating, no new credentials mint — but nothing already issued degrades. The asymmetry is deliberate: the artifact outlives the operator.
PUBLISHED IN FULL

Companion: the Quant Integrity Review — the flagship number itself, put on trial against the retraction ledger. Not an offer of any security or investment product; metrics referenced are historical, after-cost figures. "MIZAN" is a verification and technology provider, not a licensed investment firm.

ENGINE v11 · 3ac3b10b… ● LIVE REGISTRY 77 CREDENTIALS · APPEND-ONLY VERIFY ~81 MS · OFFLINE · TRUSTING NO ONE ANCHOR BITCOIN #962,013 SPEC VTR-1 · FROZEN · CC BY ROOT 88298a2e…c6825a · MERKLE-COMMITTED