Add the embeddable reference host + shellcade-kit CLI to the module#44
Merged
Conversation
Move the two seam-free foundation packages from the private shellcade repo (internal/canvas, internal/sdk) into the public kit module under host/. canvas is a stdlib-only leaf; sdk depends only on canvas plus github.com/google/uuid. Import paths rewritten to github.com/shellcade/kit/v2/host/canvas. No private packages are referenced (go list -deps ./host/... has no shellcade/shellcade). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move internal/session and internal/render from the private shellcade repo into the public kit module under host/. Break session's one private edge by switching its identity token from internal/identity.Identity to the public sdk.Player (session treats it as an opaque value-comparable token; no field access). render's identity coupling was indirect through session, so it is clean once internal/canvas -> host/canvas and internal/session -> host/session. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
conformance moves to host/gameabi/conformance (subpackage so ../testdata
resolves). services.NewFactory -> memsvc.New() / memsvc.NewFactory; seatPlayer
builds sdk.Player directly instead of identity.Identity{}.Player(). No private
imports remain.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
cmd/shellcade-kit now builds on the public reference host: services.NewFactory
-> memsvc.NewFactory (play/check), identity.Identity{}.Player() -> direct
sdk.Player (local hot-seat). Adds charmbracelet/x/term for raw-mode play. The
CLI and host import zero private packages.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Both were deferred during the gameabi move (needed render/session/services). Those are now in kit: render/session imports repointed to host/..., services.NewFactory -> memsvc.NewFactory. Recovers the dropped coverage. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…pin job - The *.wasm conformance/host fixtures were gitignored, so CI lacked them and the gameabi/conformance tests failed to LoadGame. Commit them via a .gitignore exception (the private repo commits these too). - go 1.25.0 -> 1.25.11 patches the flagged stdlib vulns (net/textproto, crypto/x509, net) the host paths now reach (govulncheck). - Remove the kit-pin lockstep job: the shellcade-kit binary is now built from this module, so the self-referential "pinned external binary embeds matching kit" check is obsolete. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
BCook98
marked this pull request as ready for review
June 16, 2026 09:19
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.
What
Brings the host that runs a wasm game against the ABI — and the
shellcade-kitCLI built on it — into the kit module underhost/andcmd/shellcade-kit. The CLI'scheck/play/smokeand the conformance gate now run the exact reference host a game runs on, built from source, with no separate host binary.New packages:
host/gameabi— the wasm host (instantiates + drives the guest against the ABI; wazero/extism).host/sdk— the room engine, lifecycle, and the host service interfaces (Services/ServicesFactory/Account/AccountStore).host/render+host/canvas— the 80×24 framebuffer and ANSI renderer.host/blobstore— hibernation snapshot store (in-memory/dir + HMAC sealing; an S3 backend is supplied by the embedder).host/memsvc— in-memory implementations of the service interfaces for the CLI + conformance, with merge-rule contract tests.host/gameabi/conformance— the game conformance harness (shellcade-kit check).cmd/shellcade-kit—new/check/play/smoke.Design notes
Services,Account/KVStore/ConfigStore, leaderboard sink,blobstore.Store), injected by the embedder; the CLI supplies in-memory implementations.Status
Draft — full module
go build ./... && go vet ./... && go test ./...is green. Part of a larger effort to publish the host + CLI and retire the cross-repo release lockstep.🤖 Generated with Claude Code