[Guix packaging] GruntHack #385
Labels
No labels
accessibility
bug
category:ai-tool
category:browser
category:command-line-tool
category:compiler-toolchain
category:desktop-application
category:developer-tool
category:editor-extension
category:emulator
category:font
category:game
category:input-accessibility
category:library-framework
category:mud-client
category:multimedia
category:networking-client
category:programming-language
category:roguelike
category:storage-media-tool
category:system-tool
category:terminal-application
complexity:high
complexity:low
complexity:medium
difficulty:blocked
difficulty:easy
difficulty:hard
difficulty:moderate
documentation
duplicate
enhancement
good first issue
gooflow:guix-package-high
gooflow:guix-package-moderate
gooflow:guix-package-quality-gates
gooflow:guix-research-disposition
gooflow:guix-runtime-evidence-refresh
help wanted
invalid
kind:disposition
kind:packaging
needs:license-investigation
priority:quick
question
ready-for-agent
state:available-elsewhere
state:blocked
state:deferred
state:out-of-scope
state:ready
state:research
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tay/guix-channel#385
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Candidate
Scope
Package the independently playable roguelike variant from source. The canonical repository, latest stable release, source hash, complete dependency closure, and relationship to parent games or sibling forks must be established before implementation. Do not substitute an opaque prebuilt binary.
Research checklist
Acceptance checks
guix lint -L . <package>has no package-specific findings.guix build -L . --no-grafts <package>succeeds without network access or opaque binaries.guix build -L . --no-grafts --check <package>verifies reproducibility.Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-24T17:30:30Z.
Goocastle recorded disposition: implementation-ready.
Created implementation ticket: #691.
Canonical source: https://github.com/NHTangles/GruntHack (the GruntHack project page identifies this as the updated repository; the issue's https://github.com/GruntHack/GruntHack URL is not publicly resolvable). Use the stable GruntHack 0.2.4 source at commit 51d75eebbcf8ab0ce31ddab9581d266db0a691c5 (include/patchlevel.h; commit date 2018-09-17), pinned GitHub archive SHA-256 00c8b0178f4fb2aefd08c51d08263b9f6c57340b601afb6d9f9528fdd9bd7187. The project is a NetHack 3.4.3 derivative, distinct from this channel's acehack and dnethack packages; no same-upstream GruntHack package or delivery history was found in the local channel. The single repository has no Git submodules and no language registry. Its authoritative Unix build metadata is sys/unix/setup.sh plus the generated Makefiles: run the setup, build the terminal port from src, generate the game data with the top-level targets, and link WINTTYLIB=-lncurses. The package module should be tay/packages/grunthack.scm, package name grunthack, with a manual/gnu build using gcc-toolchain, gnumake, and ncurses; use the repository's shipped lex/yacc output or declare flex/bison when regenerating the level utilities, and avoid the historical install target because it assumes /usr, a games account, setgid/setuid, and a writable compiled-in /usr/gh. Patch the build/install phases to place the executable and read-only data in the store, install dat/license and the relevant text documentation, and make the launcher set HACKDIR/NETHACKDIR to store data while directing saves, scores, and other mutable state to an XDG data directory under the user's HOME. Upstream has no updater, telemetry, runtime download, or network feature. License evidence is dat/license at the pinned commit: it is the NetHack General Public License and README explicitly directs distributors to it; code, maps, game data, and documentation shipped from this one origin are covered by that notice. Do not install sys/share/sounds, optional font/tile assets, or other files whose provenance is not needed: sys/share/sounds/README only says the Roland samples should have no copyright, which is not a clear redistribution grant. The tty-only package therefore has no installed sound/font/tile origin requiring separate clearance. Research did not claim a build proof because the phase boundary forbids Guix-daemon/toolchain execution; the upstream build metadata is sufficient to define the later offline Guix build and no-network closure. Required delivery acceptance: guix lint and no-grafts build offline; run upstream-compatible tests where available; run --check; verify installed license/notice coverage and no writable store paths. The wrapper must add the exact safe runtime contract below: grunthack --guix-smoke creates an isolated fresh HOME/XDG data directory, runs the real terminal game through a bounded PTY with fixed TERM and deterministic character-selection/gameplay input, enters the first level, performs a movement, saves, exits, restores that save, performs another normal command, asserts the save and all mutable files remain below the isolated XDG directory and the store is unchanged, emits the single-line marker, and exits zero. Capture .goocastle/evidence/issue-385.png showing the real local game and the successful save/restore proof.
Imported from GitHub comment. Originally posted by htayj on 2026-09-06T07:11:49Z.
Published signed/authenticated
d1dfab4b13. GruntHack exact git-pinned native package: local daemon build, reproducibility --check, offline package lint and integrated make check-source-count check-grunthack check-nitrohack passed. Removed shipped --guix-smoke branches and Goocastle dependencies/contracts; standalone test drives three actual processes with real movement/search turns, full inventory, native save/exit, exact HUD/map/position/stats/turn/inventory restoration and further gameplay/resave. PrivateHOME/XDG and verified network/mount/PID namespaces, readonlystore, unchanged NAR 1inwh39gy38gw4lqqip4nvv3ggkl5510193qm8dxwsww9w4lc4vl. Evidence /tmp/omp-grunthack-published; actual native terminal screenshot .goocastle/evidence/issue-385.png rendered in matching geometry and inspected. No upstream test suite exists; runtime proof is independent. No userprofile deployment; unrelated staged Fourk warning remains. GruntHack retains compiledTTY/curses; eleven unused Roland-derived samples excluded at origin for missing permission, notices preserved; actual screenshotHP14/16T13.