Add Brogue CE as a new door game#446
Open
mpiorowski wants to merge 5 commits into
Open
Conversation
- Allow platform-specific async voice cleanup
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.
Summary
late-brogue) runs the realbroguebinary over a PTY, andlate-sshconnects to it as an SSH client, streaming the remote terminal throughvt100into the existing ratatui door chrome.-nameflag, so player identity is a per-player working directory (LATE_BROGUE_DATA_DIR/players/<playname>) keyed by the same claim-once arcade handle used by the other doors; saves and high scores are per-player, with no shared scoreboard in v1.scripts/brogue_hangup_save.patch) that adds a SIGHUP/SIGTERM save-on-disconnect handler the stock curses build lacks, so a dropped SSH connection or a host redeploy doesn't lose an in-progress run.Changes
late-brogueworkspace crate: russh server (server.rs), per-session PTY bridge with SIGHUP-save teardown (host.rs), config (config.rs), shared-secret Ed25519 key derivation (identity.rs), and playname sanitization used as the save-directory path-traversal boundary (playname.rs).late-ssh/src/app/door/brogueclient module (proxy/identity/state/render), wired into the Games hub as an 8th card (HubGame::Brogue, after DCSS), the top-level app state/input/render/tick lifecycle, andSessionConfig/config.rs/ssh.rs/session_bootstrap.rs/test helpers.brogue-buildstage compiling Brogue CE 1.15.1 from a SHA-256-verified upstream tarball (curses-only,TERMINAL=YES GRAPHICS=NO) with the hangup-save patch applied, plus aruntime-brogueimage stage.infra/brogue.tf(RWO save PVC),infra/service-brogue.tf(Deployment + ClusterIP service),infra/secrets.tf(shared identity secret), new CI workflows.github/workflows/brogue.yml(build validation) anddeploy_brogue.yml(image build/push); other deploy/terraform workflows updated to pass through thelate-brogueimage tag.NOTICEupdated with Brogue CE's AGPL-3.0 attribution and network-clause (section 13) compliance notes, since we ship a patched build.CONTEXT.md,late-ssh/src/app/door/brogue/CONTEXT.md(new),DOOR.md, andhelp_modal/data.rs(bot/bartender app context) updated to document and route to the new door.Behavior notes
LATE_BROGUE_ENABLED(defaultfalse); when disabled the launcher shows "Currently unavailable" andconnectis a no-op, but the host pod deploys unconditionally.argvstays empty) so wizard/seed flags stay unreachable to players;TERMand per-sessionHOMEare the only allowlisted env vars, andLINES/COLUMNSare intentionally not exported since ncurses freezes at spawn-time geometry (the PTY winsize is the only size source).deploy_brogue.ymlbefore any other deploy workflow, or the image lookup will fail.Feature flags
LATE_BROGUE_ENABLED(client, defaultfalse) gates the door in the Games hub.LATE_BROGUE_HOST/LATE_BROGUE_PORT/LATE_BROGUE_SECRET(client) must match the host'sLATE_BROGUE_SECRET/ listen config.Screenshots / Video
Not included in this draft; attach before review (a live terminal screenshot of the Brogue landing/running screens would be the most reviewer-useful asset here, per DOOR.md's "best screenshots a terminal can produce" goal for this door).
Testing
_test.rscoverage for client+hostidentity(derivation determinism/distinctness, cross-crate known-answer fingerprint), clientstate(disabled connect no-op, input forwarding/stripping, F1 remap, exit grace, claim-prompt handling), hostplayname(sanitize incl. path traversal), hostserver(effective_termfallback), hosthost(player_dirdistinctness), and hubstate/primitivesupdates for the new card. Run viamake test-llm ARGS="-E 'package(late-brogue) or (package(late-ssh) and test(brogue))'".service-broguehost before/after the prod rollout.