Dashboard
Pending Review (v16.1b)
Review Queue (v15 legacy)
Alerts & Notifications
Published Articles
PIECE TYPE LEGEND (v16.1b)
/seed endpoint. Always lands in pending_review regardless of arbiter floor.
data_quality.no_content=true. Per-character templated string; no Writer/Arbiter call.
Scoreboard Management
SG Candidates
Value — FCF Yield ≥ 8% OR Earnings Yield > 5% OR PEG < 1.0
Momentum — Weinstein Stage 2 (price > 200d SMA AND 50d > 200d) + positive 3M/6M return
Insider — net buys > 1.5× sells OR congressional trade < 90 days
Narrative — ≥ 60% bullish analyst consensus (min 5 ratings) AND bulls > bears
Regime — ≥ 2 of {VIX < 25, yield curve > -0.5%, F&G 30-75}
Brief Inspector
Manual Publish (Seed)
Generate an article on demand. Uses Opus 4.6 Extended Thinking (16K budget). Arbiter runs if ticker provided.
Pipeline Log
Cost Ledger
Public Pages
Each route is probed via HTTPS HEAD against grantbishop.com. Status 200 = page exists. 404 = route not deployed yet (Pages routing miss or page not yet built). Network errors mean Cloudflare or DNS is unhappy. Last-modified header shown when present.
API Health
SG Backtest Results
Inspector
Runs non-destructive schema additions (creates tables if missing, adds columns if missing). Uses /api/migrate.
Manual Trigger
Bypasses cron and KV dedup. Routes: /api/trigger/:bot
Worker Deploy
/admin/deploy endpoint now returns 410 Gone. Deploy via Cloudflare dashboard editor → Workers → grant-bishop-api. Use the validator below to check code before pasting.Pre-Deploy Validator
Paste index.js. Validator checks critical fixes: Opus 4.6 model string, extended thinking with budget_tokens, Charlotte voice-ID typo (S vs R at position 16), KV dedup, required bot functions.
Worker Versions
Settings
HealthBot keeps running.
HealthBot, relay, Scout.
Admin still works.
16K max tokens
64K max tokens
2× batch cost
proven stable
better tool-calling
Flips config.openai_model. Ensemble verification stays pinned to gpt-5.4 by design — generational diversity for Final Call cross-checks.
Data verification.
Final Calls only.
Every 15min market hrs.
Reset the Board
SUPER_ADMIN_OTP secret match. Cannot be undone.Tuning
pipeline_log with the editor's identifier.
Categories: screen (SG criteria) · cadence (publish rhythm) · longshot (Gambit screen) · gate (sanity gate) · words (article length ceilings) · cron (slot times in ET).
Audit Trail
Defensibility-grade. At any point in the future, you can reconstruct exactly why the system said what it said about a name. No quiet deletions.
ElevenLabs Forensics
By voice — voice IDs you don't recognize signal a key compromise (rotate the key immediately).
By day — concentration on dates when nothing was published signals silent retries or admin manual triggers.
Recent items — long character counts on individual calls signal chunked retries that succeeded but failed delivery.
Quota panel shows current tier, chars used / limit, and next reset window. Endpoint pulls up to 5 pages × 100 items = 500 items max with pagination ceiling.
System Snapshot
Workflow: click Fetch & Copy JSON → paste in next Claude session → diff against tonight to see what changed.
Raw JSON (expand to view)
Help · Route Reference
/public/* — no auth. Admin-gated = /api/* — requires X-Admin-Key. Only a few deploy/inspector ops live under /admin/*.| Path | Method | Purpose |
|---|---|---|
| /public/articles | GET | Published articles feed |
| /public/scoreboard | GET | Scoreboard positions |
| /public/news | GET | Enriched news (cached) |
| /public/ticker | GET | Ticker scroll data (60s KV cache) |
| /public/audio/:id | GET | MP3 from R2 |
| /public/alignment/:id | GET | Word-sync JSON |
| /public/subscribe | POST | Email capture |
| /api/queue | GET | Pending review |
| /api/articles/:id/approve | POST | Publish |
| /api/articles/:id/reject | POST | Reject |
| /api/scoreboard | GET/POST | Scoreboard |
| /api/scoreboard/:id | PUT | Update result |
| /api/notifications | GET | Alerts |
| /api/config | GET/PUT | Config values |
| /api/costs | GET | Cost ledger |
| /api/trigger/:bot | POST | Fire bot |
| /api/generate | POST | Seed article |
| /api/migrate | POST | Schema add-only |
| /api/reset | POST | Board reset (OTP) |
| /api/log | GET | Pipeline log |
| /admin/db-query | POST | Inspector SQL |
| /admin/kv-inspect | POST | KV value |
| /admin/kv-list | GET | KV keys |
| /admin/r2-list | GET | R2 objects |
| /admin/deploy | POST | Removed v11 — returns 410 (use CF dashboard) |
| /admin/versions | GET | Deploy history |
| /admin/rollback | POST | Revert to version |
| Character | Voice ID | Stab | Sim |
|---|---|---|---|
| Grant Bishop | OmpnmugWtOuude52M0Zb | 0.62 | 0.78 |
| Charlotte Cross | FluZbOk3sMJyf5S5UyPF | 0.70 | 0.80 |
| Sal Russo | 2J6TQRRydBqUweLCzmqA | 0.48 | 0.75 |
| Mei Lin Chen | JTSlHBBDbMH7ER5WD0yC | 0.72 | 0.80 |
⚠ Charlotte voice ID: position 16 is S, not R. A prior typo (FluZbOk3sMJyf5R5UyPF) caused Charlotte to fail silently.
Phase 2 Metrics — No-Hallucination Health
| Metric | Alert Threshold | Meaning |
|---|---|---|
| no_content rate per bot | > 30% | Writer refusing too often — data feed or prompt regression |
| data_notice rate | > 10% | Scout or upstream API degraded — feeds need attention |
| arbiter pending rate | > 5% | Articles flagged for review — prompt discipline slipping |
| arbiter rejects 24h | low but non-zero is healthy | Zero = Arbiter too permissive; many = writer hallucinating |
Arbiter v3 Runs
No-Content Events
Ensemble Verification
Brief Snapshots
Arbiter v3 Test Fixtures
- invented_price_critical_fail — "SPY closed yesterday at $571.40" vs brief SPY=568.21. Expected: CRITICAL fail, score 0, rejected.
- clean_article_passes — Every price matches brief within 0.5%. Expected: score ≥ 90, approved.
- fabricated_pct_critical_fail — "Revenue growth of 27%" vs brief 19%. Expected: CRITICAL fail, rejected.