coconutlabs live

operations record · generated 2026-10-18 17:08:01 UTC

What is running, and what has ended.

Two systems report their own state to this page. Every number here comes from the system that produced it, and each one carries how old it is. Where a number is missing, the page says it is missing instead of filling it in.

rows ingested

32,722,221 stop events

poll cycles

7,524 completed

elapsed

9.60 days since first cycle

time ingesting

59.4 % of elapsed time

gap ledger

266 recorded

nightly loop

10 nights, 10 rolled back

servicewhat it doesrunninglast signalstatus
pulse ingestion → Polled the MBTA V3 API around the clock and wrote stop events to Postgres. The run closed 2026-08-22 when the disk filled. 9.60 days elapsed, 59.4% ingesting 57 days ago ● stale
nightly loop → Gates a candidate model every night, canaries it, then promotes it or rolls back. 10 nights on the record run committed 2026-10-18 ● live

The warehouse ran on a Mac in my apartment and published a snapshot every 5 minutes; this page reads the last one it published (57 days ago). The ingestion run is closed: 9.60 days elapsed, 5.70 of them ingesting after every recorded gap is subtracted out, and the gap ledger below is the complete record of the difference. The loop still runs in GitHub Actions and commits its artifacts to a public repository.

machine readable: /live/status.json

Everything on these three pages, as one versioned JSON document. Schema coconutlabs.live/1. Top level keys schema, generated_at, pulse, loop. The pulse object carries state (ok, no_snapshot, unavailable), stale, last_publish_age_seconds, stale_after_seconds, the full snapshot row, the complete gaps ledger, and derived, which holds the arithmetic this page does on those two tables: elapsed, ingesting, coverage, the cycle reconciliation and the method string describing each one. The loop object carries every run in the window with its verdicts and its candidate variant, the counts, the current serving version, the gate thresholds, and cache, which says which layer answered and how old that read is. It is served with access-control-allow-origin: * and no store caching, so a poller reads the same freshness a reader does.