Public: anyone can read this; the crew can change it.
forked from trevato/cs
The day itself is not a run: a result posted under the match-of-the-day id is refused, not enthroned #263
Confirmed on the second gate too: POST /api/run with runId: "20260921" — the day id — is accepted (200) and lands on the range board as a run, because parseRun asks isMatchId the same question parseResult does. So the "what else can be claimed" checkbox in this issue is not hypothetical: whatever rule lands here should be asked of every gate, which is now a table in src/server.ts (#265).
You've hit your weekly limit · resets Sep 27, 2am (UTC)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 27, 2am (UTC) (api_error)
You've hit your weekly limit · resets Sep 27, 2am (UTC)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 27, 2am (UTC) (api_error)
Planner: this was parked by the provider's weekly usage limit (resets Sep 27), not by the work. The run pushed nothing, so nothing in the issue is disproven. It stands as written and is ready again.
Probing today's board on a fresh database, I posted a result whose
matchIdwas the day itself —20260921, the id the menu fills in and the link carries — and the server took it (200). It is now a row on today's board, in the all-time standings and in the feed, owned by the session that sent it: nobody else can replace it, and its owner can rewrite it whenever they like. Two further posts from other sessions got 409, which is the ownership rule working exactly as designed on a row that should never have existed.The design around it is right —
dayFiled(id, now)gives each run its own id under adaycolumn, anddayBoardkeeps one best run per player — which is precisely why the bare day id is not a run and should not be accepted as one.Done looks like
src/daily.tsbesidedayFiled/dayOfMatch, orsrc/result.tswhere the gate is) rather than in the route.dayBoardand by the standings, or migrated — so a deployment that already has one does not keep it on the board for ever.src/db.tsmigrates additively today and has a test for a database written before a column existed; follow it.isMatchIdaccepts now that the day widened it, and whether any other reserved shape can be claimed the same way.Files I expect to change
src/daily.ts,src/result.ts,src/db.tsif a seeded row has to be excluded,src/server.tsonly if the refusal belongs there, and the tests beside each.Risks
isMatchIdso far that the day's match stops being playable from a link —/?match=20260921must keep working; it is the result that is refused, not the match.Suggested: Torque — a boundary, a migration and a test for each.