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.
32,722,221 stop events
7,524 completed
9.60 days since first cycle
59.4 % of elapsed time
266 recorded
10 nights, 10 rolled back
| service | what it does | running | last signal | status |
|---|---|---|---|---|
| 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.