Personal research project — paper-testing & tuning, not raising capital.
Paper research · advisory · not live

Refusal log · what we declined, and why

Every trade the desk declined — with a plain-language reason, the structural-haircut breakdown, and a hashed proof you can re-derive yourself. We publish what we refuse, not just what we trade.

Why this is rare

Everyone publishes their wins. Almost nobody publishes what they declined. Refusal comes before economics — a great quote cannot buy its way past a toxic book. The refusal log is the credibility artifact.

How to read it

Each row is a hashed gate verdict (REFUSE or ENTRY) with its yield-decomposition haircuts. Expand "proof" to see the structural reason, per-driver haircuts and the row's hashes. A green chain badge means a from-scratch recompute of every hash agreed.

Chain integrity

source: static / offline
verifying chain…
 refused  entered

Head hash (fingerprint of the decision history)

chain length: · spec docs/PROOF_CHAIN_SPEC.md

What refusing was worth — in dollars

Refusal is the moat — but philosophy is easy to wave away. Here it is in money: how much a naive book that HELD the refused toxic PTs would have lost through the real, dated 2024–2026 depegs. This is a measured counterfactual (a lower bound, from the real peg drawdown), NOT our realized P&L — we did not hold these books.

avoided loss per $100k allocation · lower bound · evidence: historical backtest

Source: /api/rates-desk/refusal-value · deterministic, rebuild: python3 -m spa_core.strategy_lab.rates_desk.refusal_value

The decision feed (most recent first)

A live feed from /api/rates-desk/refusals. REFUSALS are surfaced prominently — they are the moat. Each row expands into its structural reason, per-driver haircuts, and the hashes you can recompute.

Loading the refusal log…

Verify it yourself

Don't trust us — check us. Download one zero-dependency standalone verifier and the public decision log, run it on a clean machine with none of our code — it re-derives every hash and reports the exact broken_at if a single byte of history was altered after the fact.

Command

python3 verify_spa.py decision_log.jsonl

Spec

docs/PROOF_CHAIN_SPEC.md

Verifier

scripts/verify_spa.py

Canonical-JSON rule: json.dumps(obj, sort_keys=True, separators=(',',':'), ensure_ascii=False); hash = sha256(canonical_json).hexdigest(). The chain is append-only — each entry hashes the prior head, so flipping any past decision breaks the link.

Go deeper

Per-protocol verdicts — "is it safe?"

Personal research project in paper validation — not investment advice, not a regulated service, not raising capital; results are simulated. Full disclaimer & risk disclosure →