{"doctrine":"The market-call endpoints grade themselves. Twice a day the EXACT paid /signal and /brief computes are recorded (verdict + spot), then graded 24h later against realized movement. Fixed, recomputable hit rules — see method.","endpoints":["GET /signal","GET /brief"],"calls_recorded":114,"graded":113,"pending":1,"hit_rate_pct":44,"by_verdict":{"neutral":{"n":88,"hits":40,"rate_pct":45},"bearish":{"n":16,"hits":6,"rate_pct":38},"bullish":{"n":9,"hits":4,"rate_pct":44}},"honesty_note":"Direction on liquid majors is close to a coin flip. If this hit rate converges to ~50%, the ledger is saying the signal has no edge — and this page will say exactly that. Either outcome is the point: it makes every other number here credible.","known_data_caveat":"DISCLOSURE (2026-07-23): rows recorded before this date with momentum exactly 0 were produced while the 24h-change upstream (CoinGecko) was rate-limiting our host's shared egress IP. With no change/range input, momentum is 0 by construction and the verdict defaults to 'neutral' — those rows are a degraded artifact, not verdicts the product stands behind, and they will grade as misses. The Truth Engine itself surfaced this (nine consecutive momentum-0 rows); the endpoint now returns an UNCHARGED 502 instead of a hollow 'neutral', and the engine skips the slot rather than recording one. The affected rows are LEFT IN PLACE and labeled here rather than deleted — quietly removing inconvenient rows is precisely what a tamper-evident ledger exists to prevent.","recent":[{"kind":"brief","symbol":"BTC","slot":"2026-09-11T00","verdict":"neutral","change_pct":null,"hit":null,"graded":false},{"kind":"brief","symbol":"BTC","slot":"2026-08-17T00","verdict":"neutral","change_pct":22.41,"hit":false,"graded":true},{"kind":"brief","symbol":"BTC","slot":"2026-08-16T12","verdict":"neutral","change_pct":22.01,"hit":false,"graded":true},{"kind":"brief","symbol":"BTC","slot":"2026-08-16T00","verdict":"neutral","change_pct":0.24,"hit":true,"graded":true},{"kind":"signal","symbol":"BTC","slot":"2026-08-15T12","verdict":"neutral","change_pct":0.03,"hit":true,"graded":true},{"kind":"brief","symbol":"BTC","slot":"2026-08-15T12","verdict":"neutral","change_pct":0.02,"hit":true,"graded":true},{"kind":"signal","symbol":"ETH","slot":"2026-08-15T12","verdict":"neutral","change_pct":0.07,"hit":true,"graded":true},{"kind":"brief","symbol":"BTC","slot":"2026-08-15T00","verdict":"neutral","change_pct":0.09,"hit":true,"graded":true},{"kind":"signal","symbol":"ETH","slot":"2026-08-15T00","verdict":"neutral","change_pct":-0.06,"hit":true,"graded":true},{"kind":"signal","symbol":"BTC","slot":"2026-08-15T00","verdict":"neutral","change_pct":0.09,"hit":true,"graded":true},{"kind":"signal","symbol":"ETH","slot":"2026-08-14T12","verdict":"neutral","change_pct":0.13,"hit":true,"graded":true},{"kind":"signal","symbol":"BTC","slot":"2026-08-14T12","verdict":"neutral","change_pct":0.25,"hit":true,"graded":true}],"method":{"record":"00Z + 12Z slots, BTC + ETH /signal + BTC /brief, exact paid code path (signalVerdict/marketBrief exports)","grade":"24h later vs Coinbase spot; bullish/risk_on hit ⇔ change > +0.25%, bearish/risk_off hit ⇔ change < −0.25%, neutral hit ⇔ |change| ≤ 0.75%","durability":"append-only JSONL, git-snapshotted (tamper-evident), survives redeploys"},"as_of":"2026-09-11T04:58:15.714Z"}