Gate 0 — Provisional Pass
Date: 2026-09-11
Decided by: Jeroen Teeuwen (user, acting lead) — explicit decision, presented with the alternatives "keep the gate, wait for the friend" and "single-player first"
Verdict: PASSED — confirmed GO 2026-09-11 by the two-machine friend playtest (Jeroen host, Eric client, real internet over Unity Relay; evidenceproduction/playtests/gate-0-2026-09-11/). The provisional pass below is history; the five netcode ADRs (0008–0012) are Accepted without qualification.
Note carried to the register: Eric reported occasional stutter of the remote body at ≈ 150–180 ms RTT (0 warps counted on his side, 3 on the host's) — an interpolation tuning item (ADR-0009 §6), not a model concern.
What the gate asked
"Does dash-and-strike co-op combat feel instant for the local player at 40–80 ms real internet latency?" — two real machines, real RTT and jitter, a second person's spoken verdict.
Evidence on hand (why "provisional" is defensible)
| Source | What it showed | What it did not show |
|---|---|---|
2026-08-25 localhost prototype (prototypes/combat-netcode-feel-concept/REPORT.md) | Owner-authoritative movement + host-authoritative damage with local-only prediction: dash starts on the pressed frame on both host and client; hit→stagger connected at ~70 ms simulated RTT | Real jitter; real Relay hop |
2026-09-11 two-instance run over Unity Relay (build c197115, europe-west4) | The whole Relay path works end to end: anonymous sign-in, allocation, join code, host + client session, enemies spawned, hits registered on the client; RTT logged per second to CSV | A second person; a clean link — this Mac's baseline ping to Cloudflare anycast averaged 154 ms (spikes to 263), so the in-game 249 ms RTT and the visible warps are the link, not the model |
Headless Relay self-test (RelaySession -gate0-selftest) | Link + Relay enablement proven on every build shipped | — |
The model the ADRs will codify is the one both runs used. Nothing measured contradicts it; what is missing is the feel verdict at a normal home connection, which only the friend session can give.
Revisit clause (binding on ADR-0008–0012)
Each of the five ADRs carries, in its Status line: "Accepted 2026-09-11 under the Gate 0 provisional pass — revisit on the friend playtest verdict."
- GO / GO WITH NOTES → the word "provisional" is removed from this record and the ADRs; notes become register items.
- NO-GO → the affected ADR(s) are marked Superseded by a replacement decision; every story whose
ADR Governing Implementationnames them is reopened (Status: Blocked) until the replacement is Accepted. The transport seam (ISessionLauncher, QQ-04) and the pure assemblies (ADR-0001/0003) bound the blast radius to the wire layer.
What this unblocks
NetcodeSession (Foundation), PlayerMovement, Inventory replication half, Combat wire, Crafting, BaseBuilding, EnemyAI, presentation-ui-hud-screens, tide story 010, land story 009. The order stays the one in production/epics/index.md § Suggested order.
What is still owed, and by whom
- Friend playtest: build is published at https://driftlands.kroesneger.nl/ (Download playtest build); protocol P3–P7 open — Jeroen + friend.
- Windows player if the friend is on Windows — needs the Windows Build Support (Mono) module in Unity Hub, then
Gate0Setup.BuildWin. - After the session: CSVs from both machines + recording + verdict form → this record is amended and the ADR status lines updated.
Confirmation — 2026-09-11
Friend playtest run the same day the ADRs were written. Measured on Eric's client: RTT ≈ 150–180 ms via Relay (europe-west4), hit→stagger avg 161–179 ms over 14–20 hits, warps 0 (largest 0.00 u); host side counted 3 warps of Eric's body over the session. Verdict GO, agreed aloud. Own actions instant on both sides; hits landed where the client saw the enemy; occasional remote stutter noted → docs/tech-debt-register.md.