[Guix packaging] Hack #386

Closed
opened 2026-08-24 17:30:31 +00:00 by htayj · 2 comments
htayj commented 2026-08-24 17:30:31 +00:00 (Migrated from github.com)

Candidate

  • Project: Hack
  • Candidate upstream/homepage: http://homepages.cwi.nl/~aeb/games/hack/hack.html
  • Discovery evidence: IRLDb
  • Reported license: three-clause BSD
  • License status: reported free license; verify exact terms and asset coverage against the pinned upstream source
  • Catalog note: IRLDb status: major.

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

  • Identify the canonical maintained source repository and immutable release/commit.
  • Verify the exact FOSS license for code and every installed font, tile, sound, map, documentation, and bundled dependency.
  • Check GNU Guix and the channel audit set for an equivalent same-upstream package.
  • Determine the offline build system and source closure, including submodules or language registries.
  • Identify updater, telemetry, runtime download, mutable-state, and network behavior that needs Guix integration.

Acceptance checks

  • guix lint -L . <package> has no package-specific findings.
  • guix build -L . --no-grafts <package> succeeds without network access or opaque binaries.
  • Upstream tests run where available, and guix build -L . --no-grafts --check <package> verifies reproducibility.
  • A fresh HOME/XDG smoke test starts a real local game, exercises meaningful gameplay or save/load behavior, and proves no store writes.
  • Installed license and third-party notices cover the shipped closure and assets.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-24T17:30:31Z.

## Candidate - Project: Hack - Candidate upstream/homepage: http://homepages.cwi.nl/~aeb/games/hack/hack.html - Discovery evidence: [IRLDb](https://forums.roguetemple.com/irldb/index.php?i=47e013c) - Reported license: three-clause [[BSD]] - License status: reported free license; verify exact terms and asset coverage against the pinned upstream source - Catalog note: IRLDb status: major. ## 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 - Identify the canonical maintained source repository and immutable release/commit. - Verify the exact FOSS license for code and every installed font, tile, sound, map, documentation, and bundled dependency. - Check GNU Guix and the channel audit set for an equivalent same-upstream package. - Determine the offline build system and source closure, including submodules or language registries. - Identify updater, telemetry, runtime download, mutable-state, and network behavior that needs Guix integration. ## Acceptance checks - `guix lint -L . <package>` has no package-specific findings. - `guix build -L . --no-grafts <package>` succeeds without network access or opaque binaries. - Upstream tests run where available, and `guix build -L . --no-grafts --check <package>` verifies reproducibility. - A fresh HOME/XDG smoke test starts a real local game, exercises meaningful gameplay or save/load behavior, and proves no store writes. - Installed license and third-party notices cover the shipped closure and assets. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/386). Originally posted by [htayj](https://github.com/htayj) on 2026-08-24T17:30:31Z.
htayj commented 2026-09-06 12:42:19 +00:00 (Migrated from github.com)

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.

<!-- goocastle-disposition:sequential-reviewer:386:1:implementation-ready --> 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](https://github.com/htayj/guix-channel/issues/386#issuecomment-5559286624). Originally posted by [htayj](https://github.com/htayj) on 2026-09-06T12:42:19Z.
Owner

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.

Completed in signed/pushed commit e072fc7e8a2edf715f704e68fd9dfb6d3b2606af. 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.
tay closed this issue 2026-10-03 05:52:21 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tay/guix-channel#386
No description provided.