Implement researched Guix package outcome for #387: [Guix packaging] Hack'EM #693
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tay/guix-channel#693
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?
Context
This delivery ticket was created from research issue #387 ([Guix packaging] Hack'EM).
The host-validated research finding follows:
Delivery is technically and legally viable as the distinct Hack'EM variant (not the official Guix nethack package or this channel's related grunthack package). Canonical maintained source: https://github.com/elunna/hackem; fixed stable release v1.2.2, commit 6e99cffbeecd2cbf71b3d27b9285be345aca298b; commit archive SHA-256 53cee6b27997eceab653401b20face1f64f6e7360ec6ad448f5b2256c76dddb. The local channel has no hackem definition/history; official GNU Guix games.scm has nethack, but its upstream is NetHack/NetHack and it is not an equivalent Hack'EM package. Upstream README describes Hack'EM as an independently playable EvilHack-based successor/variant incorporating Slash'EM, SpliceHack, UnNetHack, SlashTHEM, xNetHack, FIQHack, SporkHack, slashem-up and SLASHEM9. The pinned source is one complete archive with no .gitmodules, language registry, updater or runtime-download dependency; the Windows CI's separate PDCurses clone is not part of the Linux package. LICENSE is the NETHACK GENERAL PUBLIC LICENSE: copying/modification/redistribution is granted with intact notices, source availability and identical terms for derivatives. Core source, maps and docs carry the corresponding NetHack freely-redistributable notices; preserve them and install LICENSE plus selected README/Guidebook/man documentation. The sound README only says Roland S-750 samples “should be no copyright” and is not a clear redistribution grant, so do not install any sys/share/sounds files. Build only the Linux tty/curses port, which the linux hints select with in-tree tty/curses sources, ncurses/tinfo, generated makedefs/dungeon/level data, and no X11/Qt/bitmap/font assets; optional unlinked GIF reader/random.c material is not in the runtime closure. Use gnu-build-system, disable parallel make, run sys/unix/setup.sh with a fixed Linux hints file, then make all offline. Expected native inputs are gcc-toolchain, gnu-make, flex, bison and the documentation formatter (groff-minimal, with col if required); runtime/build inputs are ncurses/tinfo and wrapper utilities bash-minimal, coreutils/findutils/util-linux. Expect GNU89/fcommon compatibility flags and a fixed SOURCE_DATE_EPOCH for generated files. Do not run upstream make install: its Makefile deletes HACKDIR and creates writable files there. Install the real binary as libexec/hackem-real and the generated data archive/license/docs under share/hackem; patch the compiled VAR_PLAYGROUND path to a launcher-provided environment value, keep HACKDIR/NETHACKDIR read-only store data, and wrap normal play so saves, scores, bones, locks, logs and config live below XDG_STATE_HOME/XDG_DATA_HOME (with fresh HOME fallback), with no network/server/updater behavior. The wrapper must provide exactly one safe contract, --guix-smoke: create an isolated fresh HOME/XDG/TMP tree, launch the real tty game through a PTY with deterministic locale/seed/config, select a character, make a real move, save and restore (or cleanly quit after the meaningful save/load), capture terminal output, assert all mutable files remain in the isolated tree and the store is untouched, then print the single stdout line hackem guix smoke passed. Delivery must run upstream build checks where available, guix lint/build --no-grafts --check, and this bounded smoke; research could not run Guix because the host provides no daemon and therefore claims no package proof.
Acceptance criteria
Runtime evidence contract
Implementation workflow:
guix-package-quality-gatesReviewed contract file:
.goocastle/runtime-evidence-contracts.jsonRequired proof phase:
safe-package-proof; screenshot phase:runtime-screenshotEvidence adapter:
github-issue-commentCopy this reviewed contract into the named file before running the package proof workflow.
Imported from GitHub issue/PR. Originally posted by htayj on 2026-09-06T13:00:42Z.
Goocastle verified runtime evidence.
Runtime receipt
hackemsafe-package-proof["node","/opt/goocastle/bin/guix-package-proof.mjs","--package-name","hackem","--module-path","tay/packages/hackem.scm","--runtime-json","{"executable":"hackem","invocation":{"file":"hackem","args":["--guix-smoke"]},"successMarker":"hackem guix smoke passed"}"]runtime-screenshot["sh",".goocastle/capture-guix-package-screenshot.sh"]/gnu/store/wj1x36rsyrccdkkwv8bwrk2jz0jg8fib-hackem-1.2.2/bin/hackem["/gnu/store/wj1x36rsyrccdkkwv8bwrk2jz0jg8fib-hackem-1.2.2/bin/hackem","--guix-smoke"]["hackem","--guix-smoke"]hackem guix smoke passed.goocastle/runtime-evidence-contracts.json (issue #693, SHA-256 74d69dc1184499a69633e190476c6b2b5616eaf98254546168eb646246d61188).goocastle/evidence/issue-693.pngb8c6c75822bdc1bffdb8a75f19777c8091ad267c0232279a3b750aa4194b759ea5878e4abb954ad91e1dd38455cf6dfffca6dd4027389 bytes / pngImported from GitHub comment. Originally posted by htayj on 2026-09-08T04:36:36Z.
Completed by Goocastle
Imported from GitHub comment. Originally posted by htayj on 2026-09-08T04:36:40Z.