[Guix packaging] Hydra Slayer (corrected runtime contract) #697
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#697
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?
Supersedes #696
The first delivery ticket contained an incorrect module path in its reviewed runtime contract. This corrected ticket preserves the same package scope and evidence requirements.
Context
This delivery ticket was created from research issue #398 ([Guix packaging] Hydra Slayer).
The host-validated research finding follows:
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 tay/packages/hydra-slayer.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.
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-09T00:27:54Z.
Goocastle verified runtime evidence.
Runtime receipt
hydra-slayersafe-package-proof["node","/opt/goocastle/bin/guix-package-proof.mjs","--package-name","hydra-slayer","--module-path","tay/packages/hydra-slayer.scm","--runtime-json","{"executable":"hydra","invocation":{"file":"hydra","args":["--guix-smoke"]},"successMarker":"HYDRA_SLAYER_GUIX_SMOKE_OK: new-game, turn, save-load, isolated-state"}"]runtime-screenshot["sh",".goocastle/capture-guix-package-screenshot.sh"]/gnu/store/6jj4r3nm2cq8p1fz0kd6cz9i6n3b2nvq-hydra-slayer-18.3/bin/hydra["/gnu/store/6jj4r3nm2cq8p1fz0kd6cz9i6n3b2nvq-hydra-slayer-18.3/bin/hydra","--guix-smoke"]["hydra","--guix-smoke"]HYDRA_SLAYER_GUIX_SMOKE_OK: new-game, turn, save-load, isolated-state.goocastle/runtime-evidence-contracts.json (issue #697, SHA-256 f177eae31c038866e95f8ba115224fec38c2b186b617c809ffddbace7aecca52).goocastle/evidence/issue-697.pngce5688feb7e753d9faa746c8ad63e78f5ef51bd0075ea151279182e48a6464a2905ca5868cd01c2e651b536cf87e9d4aec8e60d129589 bytes / pngImported from GitHub comment. Originally posted by htayj on 2026-09-09T01:11:29Z.
Completed by Goocastle
Imported from GitHub comment. Originally posted by htayj on 2026-09-09T01:11:33Z.
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.