[Guix packaging] Hack #386
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#386
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 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:31Z.
Goocastle recorded disposition: implementation-ready.
Created implementation ticket: #692.
Canonical upstream is Andries Brouwer's authoritative CWI Hack page, https://homepages.cwi.nl/~aeb/games/hack/hack.html, which identifies Hack 1.0.3 as the last distributed version (23-Jul-1985) and links the complete source archive https://homepages.cwi.nl/~aeb/games/hack/hack-1.0.3.tar.gz. There is no maintained upstream VCS repository or commit; pin the immutable 1.0.3 archive itself: SHA-256 688534e776acfe620ea9e24822bea8b0b4bbe8ec2c2f3c74c8db89b51c7bcc30 (Guix nix-base32 0c6cgcfbb2fvr1s3qbrcxklbpd5hm2z24j72m4765zmcfvkk91b8). The archive is one origin with 57 C files, 20 headers, data/help/hh/rumors, hack.6, READ_ME, and the historical build files; no submodules, registries, fonts, tiles, sounds, or separately fetched dependencies. The CWI page grants exact three-clause BSD terms for CWI's 1985 contributions and reproduces Jay Fenlason's exact three-clause BSD grant for his code. The archive's COPYRIGHT and COPYRIGHT-JF notices must both be retained in installed documentation; install the same-origin data/help/rumors/man documentation only with those notices, omit unverified third-party assets, and omit Original_READ_ME unless its documentation coverage is explicitly accepted. The source is legally redistributable but its 1985 Makefile is not directly modern-buildable: it assumes cc, /lib/crt0.o, ld, termlib, and lint. Implement with gnu-build-system, a target C compiler plus make, and ncurses/terminfo (termcap compatibility); replace the obsolete final link and omit lint, generate hack.onames.h with makedefs, and use serialized deterministic C compilation as needed for K&R-era code. No language-ecosystem closure or network access is required. The installed GNU Guix search for ^hack$ was empty, and the local channel/audit search found no package named hack or hack.scm; acehack, dhack, dnethack, grunthack, and flaghack are distinct upstream variants, so this is not a duplicate. Package identity should be hack in tay/packages/hack.scm. The wrapper must disable the source's MAIL and shell-escape behavior at build time, keep all mutable files (record, perm/locks, bones, save, news if created) below ${XDG_DATA_HOME:-$HOME/.local/share}/hack, expose immutable data/help/hh/rumors from the store without store writes, set TERMINFO_DIRS to the ncurses input, and pass -d to the private state directory. Add a --guix-smoke wrapper mode that runs the real terminal game in a bounded PTY with deterministic input: start a fresh game as a fixed player, make at least one movement/turn, save, exit, restore the save, then verify the restored game screen and that every created path remains under the fresh XDG state directory; emit exactly the single-line marker hack guix smoke passed on stdout. Acceptance must include guix lint -L . hack, guix build -L . --no-grafts --no-substitutes hack, upstream/available tests or an explicit no-test rationale, --check reproducibility, and the fresh HOME/XDG smoke proof with the PNG artifact path below. Research did not claim a Guix build proof because the trusted phase forbids daemon/toolchain use.
Imported from GitHub comment. Originally posted by htayj on 2026-09-06T12:42:19Z.
Completed in signed/pushed commit
e072fc7e8a. Source-built Hack 1.0.3 output/gnu/store/x16fh3kj668qp9ldxfyns49mymnjgdzj-hack-1.0.3. Serial build, --check reproducibility and --no-network lint passed (only unrelated channel flex/Fourk warnings). Native smoke uses fresh HOME/XDG, private namespaces and read-only store: real movement/turn, inventory, save/exit, exact independent restore, further turn/resave and second exact restore; NAR unchanged. Evidence/tmp/hack-native-proof.UnCLqo, actual pre-exit frame Level1 HP14/14 AC7 Str17 Exp1 turn4. CWI and Jay Fenlason notices retained; README documents provenance/runtime limits. Replaced obsolete synthetic evidence contract with standalone native PTY acceptance; no Goocastle executor used. No user-profile deployment or OKF deployment update applicable.