Engine state
Per-stage status, stages 0 to 20
SPEC.md section 13, audit trail| # | stage | last run | result | DONE-check, from disk | exceptions opened today |
|---|---|---|---|---|---|
| 00 | Health | Sun Sep 20, 19:08 | ok | heartbeat 0.0h old (controls/heartbeat) | 0 |
| 01 | Discover | Sun Sep 20, 19:08 | ok | 122 of 122 campaign(s) last_seen today (campaigns.json) | 0 |
| 02 | Sync | Sun Sep 20, 19:08 | ok | 0 of 122 campaign(s) status=ended (campaigns.json) | 0 |
| 03 | Verify | Sun Sep 20, 19:09 | ok | 2 approved_sources[] entries total (campaigns.json) | 4 |
| 04 | Score | Sun Sep 20, 19:09 | ok | 122 of 122 campaign(s) carry all 7 score_parts (campaigns.json) | 0 |
| 05 | Allocate | Sun Sep 20, 19:09 | ok | 4 campaign(s) status selected/active (campaigns.json) | 11 |
| 06 | Ingest | Sun Sep 20, 19:09 | ok | 0 approved, 0 ingested (objects.json) | 0 |
| 07 | Analyze | Sun Sep 20, 19:09 | ok | 0 source(s) analyzed (objects.json) | 3 |
| 08 | Render | Sun Sep 20, 19:09 | ok | 0 clip(s) rendered (objects.json) | 0 |
| 09 | QA | Sun Sep 20, 19:09 | ok | 45 qa_passed, 0 qa_failed (objects.json) | 0 |
| 10 | Schedule | Sun Sep 20, 19:09 | ok | 0 of 0 queue.json row(s) queued | 0 |
| 11 | Pre-publish | Sun Sep 20, 19:09 | ok | 0 of 0 queue.json row(s) carry gate results (persisted to disk, BUILD.md G3 item 6); 0 currently 'claimed' | 0 |
| 12 | Publish | Sun Sep 20, 19:09 | ok | 3 idempotency key(s) claimed (objects.json) | 0 |
| 13 | Confirm | Sun Sep 20, 19:09 | ok | 0 file(s) under dryrun/ | 0 |
| 14 | Submit | Sun Sep 20, 19:09 | ok | no disk marker -- whop.submit() is not capable, exception-only | 0 |
| 15 | Track | Sun Sep 20, 19:09 | ok | metrics.json empty or missing | 0 |
| 16 | Reconcile | Sun Sep 20, 19:09 | ok | metrics.json empty or missing | 0 |
| 17 | Learn | Sun Sep 20, 19:09 | ok | 0 post(s) total measured (metrics.json) | 0 |
| 18 | Cleanup | Sun Sep 20, 19:09 | ok | 1 backup(s) on disk, last restore_test ok=True | 0 |
| 19 | Report | Sun Sep 20, 19:09 | ok | briefs/2026-09-20.md exists | 3 |
| 20 | Sleep | Sun Sep 20, 19:09 | ok | heartbeat 0.0h old (controls/heartbeat, written one stage earlier per AUDIT.md section 1) | 0 |
Source: audit/2026-09-20.jsonl, one line per stage per loop run, written by engine/core/loop.py's _stage_audit(). Result and last-run columns are read verbatim from that trail; the DONE-check column is read independently from objects.json / campaigns.json / queue.json / metrics.json / dryrun/ / backups/ / briefs/, per SPEC.md section 24 ("the report checks the conditions, not the logs"). Hover a DONE-check cell for that stage's full audit detail.
Adapter capabilities
SPEC.md section 14, engine/core/adapters/*.py| adapter | interface | mode | capable of | raises NotCapable on |
|---|---|---|---|---|
| WhopContentRewardsAdapter | MarketplaceAdapter | browser | list_campaigns, get_rules | submit, get_earnings |
| TikTokAdapter | PublishAdapter | session | publish, confirm | stats, quota |
| TelegramNotify | NotifyAdapter | api | page | none |
| SourceAdapter (no concrete class found) | SourceAdapter | n/a | none | fetch, transcript |
Read off the live class objects in engine/core/adapters/*.py (.capabilities, .mode) at build time, not copied from SPEC.md section 14's table.
Controls
SPEC.md section 16launchctl list | grep clipping, run fresh at build time; every other value here is read straight from controls/ on disk.
Gates
BUILD.md, gates.json| gate | status | proof |
|---|---|---|
| G0 | passed | AUDIT.md sections 1-8, 112 rows |
| G1 | passed | 1) Spend cap: brain.ask() calls controls.check_spend_cap() pre-flight, records via audit.cost()+controls.record_spend() (controls/spend_today.json), pages once at 80% (controls.maybe_page_80pct); rule ... |
| G2 | passed | 1) Persisted-login browser session built (engine/core/adapters/whop_session.py: Playwright persistent context at .sessions/contentrewards/, chmod 0700) and run LIVE against the real site. Email-code s ... |
| G3 | pending | no proof on file |
| G4 | pending | no proof on file |
| G5 | pending | no proof on file |
| G6 | passed | PART A (naming/data consistency, this pass) DONE. Part B (Mission Control's per-stage executable-state section on dashboard.py) is NOT done here -- dashboard.py/loop.py/brain.py/controls.py/daily.py w ... |
| G7 | pending | no proof on file |
| G8 | pending | no proof on file |
gates.json updated 2026-09-20 · hover a proof cell for the full text.
Static page rebuilt by engine/dashboard.py on every loop run, SPEC.md Version 3.2.