[Guix packaging] Hydra Slayer #398

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

Candidate

  • Project: Hydra Slayer
  • Candidate upstream/homepage: http://www.roguetemple.com/z/hydra.php
  • Discovery evidence: IRLDb
  • Reported license: GNU GPL v2
  • License status: reported free license; verify exact terms and asset coverage against the pinned upstream source
  • Catalog note: IRLDb status: stable.

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:48Z.

## Candidate - Project: Hydra Slayer - Candidate upstream/homepage: http://www.roguetemple.com/z/hydra.php - Discovery evidence: [IRLDb](https://forums.roguetemple.com/irldb/index.php?i=47e013c) - Reported license: GNU GPL v2 - License status: reported free license; verify exact terms and asset coverage against the pinned upstream source - Catalog note: IRLDb status: stable. ## 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/398). Originally posted by [htayj](https://github.com/htayj) on 2026-08-24T17:30:48Z.
htayj commented 2026-09-08 23:32:50 +00:00 (Migrated from github.com)

Goocastle recorded disposition: implementation-ready.

Created implementation ticket: #696.

Canonical upstream is https://github.com/zenorogue/noteye, fixed at commit 55bb69d716a9fb269c6364f9df89d4bc260cb1a1 (master commit dated 2025-01-28; source hydra/hydra.cpp identifies Hydra Slayer 18.3, matching the upstream 18.3 release dated 2025-01-30). The fixed GitHub tarball SHA-256 is 41ec5986e75684ba026afcc2a80235915adbf24f598bae14e62f7457cb8b4f24. This is the standalone Hydra Slayer console game embedded in the NotEye repository, not the NotEye frontend and not a sibling fork; hydra/Makefile builds hydra.cpp with g++ and ncurses only. No Git submodules are present. Use package name hydra-slayer in gnu/packages/games.scm with gnu-build-system, build in hydra/ via the upstream Makefile (or an equivalent bounded make invocation), use the compiler/make provided by the build system plus ncurses, and add a small PTY-driver runtime input (for example Python) only if needed by the package-owned smoke mode; install the resulting console executable plus the GPL notice. Do not install NotEye, its SDL/Lua/OpenGL closure, or graphical/audio assets. The Hydra source headers grant GPLv3-or-later; the repository LICENSE is GPL-3.0, and the standalone build fetches no separate origin. The repo asset notices independently identify optional NotEye fonts/tiles and Hydra graphics/sounds (CC BY/CC BY-SA/public-domain), but those assets are excluded from this console package. The source has no updater/runtime download path: non-NOTEYE Hydra stubs out sharing/highscore networking, and state is local files hydra.sav, hydra-bak.sav, hydralog.txt, hydrascores.sav, and hydrachallenge.sav. The package wrapper must map these to an XDG_STATE_HOME/HOME state directory and keep store paths read-only; it should preserve normal arguments including fixed seed -s and the file options. Add a package-owned --guix-smoke mode to the installed hydra launcher: in a fresh HOME/XDG tree, allocate a bounded PTY and invoke the real binary twice with deterministic internal arguments -s 398 -f STATE/hydra.sav -b STATE/hydra-bak.sav -t STATE/hydralog.txt -g STATE/hydrascores.sav; drive the first run with n, Enter, ., S, s, y (new game, one wait-turn, return to menu, save and quit), verify the save exists, then drive the second run with q, x, y, q (loaded game, quit without recording, exit), assert the second run reaches the saved-game welcome state, all created files stay below the disposable state directory, and no store path changes. After the assertions print exactly one stdout line containing the declared marker. The current channel has no same-upstream hydra-slayer package or equivalent audit hit. Research did not run a build because the host explicitly has no Guix daemon; authoritative Makefile metadata establishes source-buildability but not package proof. Acceptance remains the issue's Guix lint/build/check gates plus the isolated smoke and screenshot at the declared artifact path.


Imported from GitHub comment. Originally posted by htayj on 2026-09-08T23:32:50Z.

<!-- goocastle-disposition:sequential-reviewer:398:2:implementation-ready --> Goocastle recorded disposition: implementation-ready. Created implementation ticket: #696. Canonical upstream is https://github.com/zenorogue/noteye, fixed at commit 55bb69d716a9fb269c6364f9df89d4bc260cb1a1 (master commit dated 2025-01-28; source hydra/hydra.cpp identifies Hydra Slayer 18.3, matching the upstream 18.3 release dated 2025-01-30). The fixed GitHub tarball SHA-256 is 41ec5986e75684ba026afcc2a80235915adbf24f598bae14e62f7457cb8b4f24. This is the standalone Hydra Slayer console game embedded in the NotEye repository, not the NotEye frontend and not a sibling fork; hydra/Makefile builds hydra.cpp with g++ and ncurses only. No Git submodules are present. Use package name hydra-slayer in gnu/packages/games.scm with gnu-build-system, build in hydra/ via the upstream Makefile (or an equivalent bounded make invocation), use the compiler/make provided by the build system plus ncurses, and add a small PTY-driver runtime input (for example Python) only if needed by the package-owned smoke mode; install the resulting console executable plus the GPL notice. Do not install NotEye, its SDL/Lua/OpenGL closure, or graphical/audio assets. The Hydra source headers grant GPLv3-or-later; the repository LICENSE is GPL-3.0, and the standalone build fetches no separate origin. The repo asset notices independently identify optional NotEye fonts/tiles and Hydra graphics/sounds (CC BY/CC BY-SA/public-domain), but those assets are excluded from this console package. The source has no updater/runtime download path: non-NOTEYE Hydra stubs out sharing/highscore networking, and state is local files hydra.sav, hydra-bak.sav, hydralog.txt, hydrascores.sav, and hydrachallenge.sav. The package wrapper must map these to an XDG_STATE_HOME/HOME state directory and keep store paths read-only; it should preserve normal arguments including fixed seed -s and the file options. Add a package-owned --guix-smoke mode to the installed hydra launcher: in a fresh HOME/XDG tree, allocate a bounded PTY and invoke the real binary twice with deterministic internal arguments -s 398 -f STATE/hydra.sav -b STATE/hydra-bak.sav -t STATE/hydralog.txt -g STATE/hydrascores.sav; drive the first run with n, Enter, ., S, s, y (new game, one wait-turn, return to menu, save and quit), verify the save exists, then drive the second run with q, x, y, q (loaded game, quit without recording, exit), assert the second run reaches the saved-game welcome state, all created files stay below the disposable state directory, and no store path changes. After the assertions print exactly one stdout line containing the declared marker. The current channel has no same-upstream hydra-slayer package or equivalent audit hit. Research did not run a build because the host explicitly has no Guix daemon; authoritative Makefile metadata establishes source-buildability but not package proof. Acceptance remains the issue's Guix lint/build/check gates plus the isolated smoke and screenshot at the declared artifact path. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/398#issuecomment-5593357230). Originally posted by [htayj](https://github.com/htayj) on 2026-09-08T23:32:50Z.
Owner

Published signed, Guix-authenticated commit a2d904dce7. Hydra Slayer output /gnu/store/8lvp0d0kv35y1yqp66n8x8zmlvm2zx12-hydra-slayer-18.3: local source build, --check, offline lint and integrated runtime passed. Direct timeout/user-network-PID namespace replaces Goocastle executor; first-session save and second-session load assertions retained. PNG697 now contains genuine second-session alternate-screen prefix rendered by xterm, replacing mixed-screen historical evidence. #696 is the redundant delivery ticket for the implementation already tracked by #697. Initial source fetch received unexplained SIGTERM; separate source acquisition then succeeded. No timeout/memory-cause claim or host protection changes. make check-source-count check-pyrosimple check-hydra-slayer passed. OMP-only execution; no user profile changes.

Published signed, Guix-authenticated commit a2d904dce7e247fba5dd79bbd22a45234c774712. Hydra Slayer output /gnu/store/8lvp0d0kv35y1yqp66n8x8zmlvm2zx12-hydra-slayer-18.3: local source build, --check, offline lint and integrated runtime passed. Direct timeout/user-network-PID namespace replaces Goocastle executor; first-session save and second-session load assertions retained. PNG697 now contains genuine second-session alternate-screen prefix rendered by xterm, replacing mixed-screen historical evidence. #696 is the redundant delivery ticket for the implementation already tracked by #697. Initial source fetch received unexplained SIGTERM; separate source acquisition then succeeded. No timeout/memory-cause claim or host protection changes. make check-source-count check-pyrosimple check-hydra-slayer passed. OMP-only execution; no user profile changes.
tay closed this issue 2026-09-30 12:02:38 +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#398
No description provided.