clay-borg/history/260731-game-kernel-response.md

4 KiB
Raw Blame History

2026-07-31 — response to adversarial challenge: CB-RES-0001 (T04)

One round, per InnerLoop §Step 2. Each finding answered with evidence or conceded. New measurements were run before answering B1/S1/S4; harness gained --disable-undo and --single-run flags.

B1 (blocking) — "architectural, not a tuning artifact": partially conceded, empirically resolved

The reviewer was right that the claim was untested and the disableUndo flag unacknowledged. We reran the harness both ways:

moves with undo (moves/s) disableUndo (moves/s)
5,000 1,4391,930* 1,118
10,000 1,605 1,076
20,000 870 942
40,000 733
100,000 DNF @300 s DNF @240 s

* run-to-run variance on this machine is large (1,930 vs 1,439 for the same config); now noted in the survey's risks.

Verdict on the finding: the undo stack is the dominant superlinear term at small N (concede: it is a documented one-line flag, and the original "not a tuning artifact" sentence was an overclaim — retracted). But degradation persists with undo disabled (34% from 5k→40k, RSS 100→232 MB, and 100k still does not finish), consistent with the client's unbounded redux log/deltalog, which has no client-side off switch in 0.50.2. The survey now reports both datasets and attributes the two mechanisms separately. The D3-scaling row is restated against the disableUndo (best-case) configuration: 0.66× at 40k vs 5k.

S1 (significant) — memory methodology: conceded, fixed

--single-run mode now measures RSS immediately after the main run in a fresh process with no warmup/determinism clients. New indicative figures: 100 MB RSS after 5k moves (disableUndo, isolated) rising to 232 MB after 40k. The old 224 MB row is withdrawn; memory rows are labeled indicative (raw RSS includes Node baseline; heap delta not isolated).

S2 (significant) — omitted candidates: conceded, added

OpenSpiel and Ludii added as cited candidates; BGA Studio and Colyseus added as one-line secondary references. The verdict's "what none of them do" paragraph was re-checked against OpenSpiel specifically and reworded: OpenSpiel does cover simultaneous-move + imperfect-information semantics with deterministic replay via action histories — what it lacks is the production layer (client visibility projections, networking, snapshots, embeddable boundary), and that is now stated precisely instead of the blanket claim.

S3 (significant) — unsourced D3 ceiling: conceded, relabeled

The 10⁵10⁶ events/s range stays as an estimate flag, and the headline ≥100k events/s + flat-scaling figure is now explicitly labeled a stipulated engineering target, not a competitor-derived baseline. A measured Rust comparator remains an open follow-up (noted in the survey); until then, parity-cap applies to any evidence row leaning on that number.

S4 (significant) — updatePlayerID in the timed loop: answered with a control

Measured in isolation: ~466,000 calls/s (~2 µs/call) vs ~5001,100 µs per applied move — contamination < 0.5%. Left in the loop (it is part of driving multi-player turns through one client); provenance note added.

M1M4 (minor) — all conceded

  • M1: traceability row demoted from baseline table to an observation.
  • M2: LOC corrected to ~36 and marked gameable/secondary.
  • M3: provenance now states hidden-info (playerView) and hand depletion are unexercised by the workload; commit/reveal shape only.
  • M4: maturity figures kept with the npm-checkable fact primary.

Net effect on the survey

Status remains draft → approved (per this round's disposition: "approvable with corrections", all corrections applied). The central comparative conclusions survive: boardgame.io is the closest semantic comparator but inactive, heavyweight for what it does, and degrades with history even in its best configuration; the surpass opportunity is the combination of production projection/networking, flat-cost replay, and an embeddable boundary — now stated with OpenSpiel explicitly in view.