Switch documented/CI build profile to -gc=conservative#37
Merged
Conversation
…d long rooms) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The kit-pin job fails when the pinned binary release falls behind the newest published one; v2.9.0 shipped 2026-06-10, so any PR now trips the gate. SHA256 is the linux/amd64 entry from v2.9.0's checksums.txt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Production OOM evidence (2026-06-11): 4 rooms trapped against the host's 32 MiB linear-memory cap at ~28–56 min of room age (~52 min of play in the worst case) —
-gc=leakingnever frees, so every allocation is permanent and long-lived rooms inevitably hit the cap and trap.The spike (TinyGo 0.41.1, exact production configuration)
-gc=conservative: dead flat at 1.88 MiB. A leaking contrast build trapped at callback 70,250 with the exact production stack.shellcade-kit check, including hibernation determinism PASS.What changed
.github/workflows/ci.yml): both author-journey tinygo builds (-opt=1PR gate,-opt=2nightly/tag release job) now use-gc=conservative.0.41.0→0.41.1in both jobs: the spike verified 0.41.1 specifically; 0.41.0 was never re-tested against the old fault, so the pin moves with the profile.README.md,GUIDE.md,ABI.md§6,CLAUDE.md): build commands flipped, and the recorded rationale corrected — the "TinyGo 0.41 conservative GC faults in this reactor configuration" finding does not reproduce on 0.41.1. It was also already contradicted in-tree: the platform repo ships a conservative-built benchmark guest (loadspike-cons.wasm, "the candidate profile for resident rooms").internal/game/codec.go,internal/game/run.go, one test comment): the roster-cache rationale updated — the leaking-build leak math is retained as historical contrast.What did NOT change
The kit's allocation-free steady-state design (roster cache, reused frame/encode buffers) remains load-bearing and the guidance is retained everywhere: under conservative GC, steady-state allocations are GC pressure — pauses inside the callback deadline — so the discipline matters as much as ever.
No Go API change, docs+CI only — no changeset (CI does not require one for this).
Companion
Companion games-repo PR: shellcade/games#48 (shellcade/games#48).
🤖 Generated with Claude Code