Skip to content

MBTA clock boundary

Status: Stage 0 closed the snapshot branch.

Decision

stop:no_identity_preserving_clock

No 30-, 60-, or 300-second clock preserves the frozen retrospective event task. The finest candidate already merges 1,459 exact predecessor-target pairs and contains 1,461 bins with strictly ordered departures. Coarser clocks lose more identity. Stage 1's snapshot DiffusionGRU branch is therefore closed; the event carrier remains canonical.

947,489 physical departures ---> 940,551 strict targets
             |
             +--  30 s --> 1,459 merged targets --+
             +--  60 s --> 3,823 merged targets --+--> stop snapshot branch
             `-- 300 s --> 120,752 merged targets -+
             |
             `----------------------------------------> retain event-time mesh

A regular clock is not merely a lossy storage choice here. One snapshot update cannot represent two strictly ordered departures in the same operational lane and bin. Averaging or selecting one departure would change the task rather than provide a matched control.

Frozen boundary

The audit rehydrated only the 110,610,188 bytes named by the sealed population manifest and verified every retained source fact before projection. Rebuilding the task had to reproduce its protocol byte-for-byte; the topology protocol had to name that exact task digest and 940,551 targets. This also freezes the split, route counts, exclusions, and retained Schedule/run-ambiguity masks.

Events are grouped by (service_date, parent_station, trunk_route_id, direction_id) in half-open UTC bins [start, end). Empty work spans only the inclusive range from a lane-day's first occupied bin through its last. Equal timestamps remain separate physical events and are reported independently; no order is invented for them.

Full-population audit

Clock Cells Occupied Empty Empty rate Causal collision bins / events Merged targets Maximum occupancy
30 s 14,333,994 945,817 13,388,177 93.40% 1,461 / 2,932 1,459 3
60 s 7,170,046 943,452 6,226,594 86.84% 3,811 / 7,648 3,823 3
300 s 1,438,867 826,474 612,393 42.56% 102,906 / 223,764 120,752 6

The 206 equal-time sets containing 413 events are unchanged across candidates and are excluded from causal-collision counts. Collision bins and merged targets need not match one-for-one: a bin may affect multiple targets, while a collision at a lane-day boundary may not correspond to an eligible target.

Merged targets occur in every split:

Clock Train Validation Test
30 s 1,087 94 278
60 s 2,915 187 721
300 s 82,941 12,973 24,838

They are also not confined to one route:

Route 30 s 60 s 300 s
Blue 2 2 8,897
Green-B 411 1,083 15,299
Green-C 334 913 16,023
Green-D 376 817 20,491
Green-E 166 590 20,852
Mattapan 19 41 781
Orange 10 22 22,916
Red 141 355 15,493

The strongest 30-second collision concentrations are Green lane-days at place-kencl / direction 1 and place-pktrm / direction 0: four named lane-days each contain 22 collision bins and 44 participating events. The largest 30-second work extreme is place-clmnl / Green / direction 1 on 2026-07-27, with 34 occupied cells inside a 2,712-cell active span. These extremes reinforce the global result but do not drive it; the admission rule is exact over every target.

Reproduction

The retained audit is generated only from an explicitly rehydrated source directory:

uv run --locked -m experiments.tools.mbta_population acquire --plan experiments/fixtures/mbta_population/manifest.json --source-dir /tmp/mbta-population-source
uv run --locked --with duckdb==1.4.1 -m experiments.tools.mbta_clock --source-dir /tmp/mbta-population-source --population-audit experiments/fixtures/mbta_population/audit.json --task-protocol experiments/fixtures/mbta_headway_task/protocol.json --topology-protocol experiments/fixtures/mbta_topology/protocol.json --output /tmp/mbta-clock-audit.json
uv run --locked python -m experiments.run mbta_clock

The clean decision run is bound to tinymesh revision f95a77971ddb800981fbfdcfd636fa8c6681f766 and pinned PyTorch Geometric Temporal revision fe555bc30ee197755c4b58a89407033a5f383415. The reference iterator establishes the snapshot-sequence interface only; it does not supply an aggregation or missingness policy that could repair event identity.

Scope and consequence

This result rejects these three regular clocks as matched carriers for this frozen 28-day task. It does not reject irregular event-time recurrence, clocks for a newly specified aggregate target, or clocks below 30 seconds. A finer clock would increase the already 15.13 cells per physical event at 30 seconds and was outside the fixed candidates.

No runtime dependency, dataset adapter, public export, tensor model, or src/tinymesh/ code is introduced. The next stage must specify an event-time memory control directly and preserve the frozen task and topology boundary.