What is declared
/home/tom/mecattaf/dotfiles/home/seat-feeder.nix declares one user timer per external-seat instrument at half-tick. MEASURED, systemctl --user list-timers 'tally-seat-feeder*' --no-pager prints exactly three units and no more:
tally-seat-feeder-claude.timer last 2026-09-19 23:17:27 CEST
tally-seat-feeder-codex.timer last 2026-09-19 23:17:27 CEST
tally-seat-feeder-pi-qwencloud.timer last 2026-09-19 23:17:27 CEST
There is no tally-seat-feeder-gpu-worker and no tally-seat-feeder-gpu-coordinator.
What that leaves behind
MEASURED, ls -la --time-style=full-iso /home/tom/.local/state/tally-rewrite/meters/ at 23:17 CEST:
| file |
mtime |
cadence it implies |
| cc.json, cc2.json, cc3.json, codex.json, pi-qwencloud.json |
23:16:56 to 23:17:08 |
the 30 s feeder half-tick |
| gpu-worker.json, gpu-coordinator.json, mechanical.json |
23:16:58 |
the 5 min tally-uplink.timer wake |
Three rows are written by the uplink itself, on the uplink's cadence, because nothing else writes them.
/home/tom/.local/state/tally-rewrite/meters/gpu-worker.json, verbatim at that minute:
{"schema_version":"seat-meter/1","seat":"gpu-worker","owner":"kernel",
"observed_at":"2026-09-19T21:16:58.627Z","utilization_pct":0,"holders":0,"capacity":1,
"running":false,"running_grade":"MEASURED","running_source":"not-applicable",
"running_detail":"none","context_window":32768,"checkpoint_grace_seconds":30,
"kill_grace_seconds":10,"per_attempt_token_cap":100000,"window":{"kind":"none"}}
MEASURED at the same minute, from the two oracles that do know:
curl -s http://worker:8731/health: in_flight: 1, busy_for_s: 6.5, slots: 4, slot_ctx: 262144, context: 262144.
tally query pools: worker-gpu capacity 1, held 1, queued 216, signal STOP.
So at one instant, on one box, the seat row says the GPU is idle at utilization 0 with a 32,768 token context, the server says it is mid call, and the scheduler says it is at 100 percent with 216 jobs waiting. The row the lake reads is the one that is wrong.
running_grade: "MEASURED" on a field nobody measured is worse than an absent row. It converts a gap into a false positive, against the standing rule that unknown is never headroom.
Ask
Add a tally-seat-feeder-gpu-worker unit to /home/tom/mecattaf/dotfiles/home/seat-feeder.nix alongside the three that exist, polling http://worker:8731/health every half-tick and writing:
running from in_flight > 0 or busy
running_detail from busy_for_s
holders and capacity from tally query pools for worker-gpu, or from slots when the daemon is unreachable
context_window from the server's own context, which reads 262144, not from a 32768 constant
running_grade MEASURED only when the poll succeeded, and UNKNOWN with a reason when it did not
Do the same for gpu-coordinator or declare it explicitly ungraded. Until a feeder exists, the uplink should write the row with running_grade: "UNKNOWN" and a reason rather than asserting a measurement it did not take.
Cross-link: tally#63 asks for the kernel-side half of this. The pairing convention is already in use (#425 with tally#59, #427 with tally#62).
tier: Opus
What is declared
/home/tom/mecattaf/dotfiles/home/seat-feeder.nixdeclares one user timer per external-seat instrument at half-tick. MEASURED,systemctl --user list-timers 'tally-seat-feeder*' --no-pagerprints exactly three units and no more:There is no
tally-seat-feeder-gpu-workerand notally-seat-feeder-gpu-coordinator.What that leaves behind
MEASURED,
ls -la --time-style=full-iso /home/tom/.local/state/tally-rewrite/meters/at 23:17 CEST:tally-uplink.timerwakeThree rows are written by the uplink itself, on the uplink's cadence, because nothing else writes them.
/home/tom/.local/state/tally-rewrite/meters/gpu-worker.json, verbatim at that minute:{"schema_version":"seat-meter/1","seat":"gpu-worker","owner":"kernel", "observed_at":"2026-09-19T21:16:58.627Z","utilization_pct":0,"holders":0,"capacity":1, "running":false,"running_grade":"MEASURED","running_source":"not-applicable", "running_detail":"none","context_window":32768,"checkpoint_grace_seconds":30, "kill_grace_seconds":10,"per_attempt_token_cap":100000,"window":{"kind":"none"}}MEASURED at the same minute, from the two oracles that do know:
curl -s http://worker:8731/health:in_flight: 1,busy_for_s: 6.5,slots: 4,slot_ctx: 262144,context: 262144.tally query pools:worker-gpu capacity 1, held 1, queued 216, signal STOP.So at one instant, on one box, the seat row says the GPU is idle at utilization 0 with a 32,768 token context, the server says it is mid call, and the scheduler says it is at 100 percent with 216 jobs waiting. The row the lake reads is the one that is wrong.
running_grade: "MEASURED"on a field nobody measured is worse than an absent row. It converts a gap into a false positive, against the standing rule that unknown is never headroom.Ask
Add a
tally-seat-feeder-gpu-workerunit to/home/tom/mecattaf/dotfiles/home/seat-feeder.nixalongside the three that exist, pollinghttp://worker:8731/healthevery half-tick and writing:runningfromin_flight > 0orbusyrunning_detailfrombusy_for_sholdersandcapacityfromtally query poolsforworker-gpu, or fromslotswhen the daemon is unreachablecontext_windowfrom the server's owncontext, which reads 262144, not from a 32768 constantrunning_gradeMEASURED only when the poll succeeded, and UNKNOWN with a reason when it did notDo the same for
gpu-coordinatoror declare it explicitly ungraded. Until a feeder exists, the uplink should write the row withrunning_grade: "UNKNOWN"and a reason rather than asserting a measurement it did not take.Cross-link: tally#63 asks for the kernel-side half of this. The pairing convention is already in use (#425 with tally#59, #427 with tally#62).
tier: Opus