Implement researched Guix package outcome for #331: [Guix packaging] dNetHack #679
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#679
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 #331 ([Guix packaging] dNetHack).
The host-validated research finding follows:
Package the ordinary dNetHack variant as Guix package
dnethackfrom the canonical maintained repository https://github.com/Chris-plus-alphanumericgibberish/dNAO, stable branchcompat-3.26.0, fixed commita6f0a1c43e66f4fb1bcac34d7d9709706682ec19(2026-05-28 18:03:32 UTC), internal version 3.26.0, Guix recursive source hash0lakz0czfkymnnb64q7yjvm3r3yfj3xqbylrha3cpc2ix07x0cvj. The only upstream tag is the older v3.21.3.1; the default/current stable branch is the materially newer 3.26.0 line. Upstream README and GNUmakefile establish a Unix source build:make allcompiles the C tty/curses game and recover utility, regenerates yacc/flex products, generatesdat/nhdatfrom the repository's maps/data, and links onlypkg-config --libs ncurseswplus-lm;git submodule statusis empty and there is no language registry or runtime download. This phase was explicitly daemonless, so no guix build or upstream compile was attempted and this is not package proof. Implement withgnu-build-system, no configure phase, serialized generation/build if needed, native bison/flex/pkg-config plus the standard GCC toolchain, and ncurses (including the tinfo linkage as exposed by the Guix ncurses package); use bash-minimal/coreutils-minimal only for the launcher. Do not run upstreammake install: install the built executable as libexec data,nhdatand the NGPL notice undershare/dnethack, and retained upstream documentation undershare/doc/dnethack. Override the makefile's Git description with the fixed revision and patchutil/makedefs.c's wall-clocktime()input to the pinned commit epoch1779991412so generated date/verinfo/data and--checkare reproducible. Upstream README at the pinned source says dNetHack is under the NetHack General Public License;dat/licensecontains the exact grant and generated map/data source files carry the same NetHack redistribution notice. The Unix target installs no fonts, graphical tiles, sound samples, or submodules;util/MacroMagicMarker.pyis separately MIT-licensed but is not an installed runtime origin. Retaindat/license, README, Guidebook.txt, and relevant man/documentation notices. The local channel audit found no dNetHack/dNAO package or same-upstream module;acehackis a separate historical variant and is not a duplicate. The wrapper nameddnethackmust create a per-invocation private playground, expose immutablenhdat/license from the store by symlink, keep saves, locks, scores, logs, dumps, panic/hangup and other mutable files under$XDG_DATA_HOME/dnethack(falling back to HOME), set HACKDIR/NETHACKDIR to that playground, and never write the store. Disable the compiled Unix MAIL feature or otherwise bind mailbox checks to private state, leave the upstream shell escape disabled, and do not invoke updater, telemetry, network, or runtime-download behavior (static inspection found none). For the isolated proof, the wrapper's--guix-smokemode must run the real tty/curses executable twice in a fresh temporary playground: start a fully specified discovery character with-X -n -u goocastle-tourist-human-neutral-male, perform a movement/rest command and save/confirm, relaunch the same character, confirm restoration, quit/confirm, assert the save/load and mutable-file checks, then print the standalone markerdnethack guix smoke passed. The host runtime proof must call only the revieweddnethack --guix-smokecontract under a fresh HOME/XDG environment via bounded PTY validation and verify the screenshot and absence of store writes; later delivery must also run upstream tests where available, guix lint, offline no-grafts build, and reproducibility check.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-02T23:09:29Z.
Goocastle verified runtime evidence.
Runtime receipt
dnethacksafe-package-proof["sh",".goocastle/prove-guix-package.sh"]runtime-screenshot["sh",".goocastle/capture-guix-package-screenshot.sh"]/gnu/store/zpmr7c6bbxvifwl724sdgi740xlfi58g-dnethack-3.26.0/bin/dnethack["/gnu/store/zpmr7c6bbxvifwl724sdgi740xlfi58g-dnethack-3.26.0/bin/dnethack","--guix-smoke"]["dnethack","--guix-smoke"]dnethack guix smoke passed.goocastle/runtime-evidence-contracts.json (issue #679, SHA-256 7cbb33bd39b00297e10384dece4cc5e6407000ce3b777e5aead8bbdc384966cb).goocastle/evidence/issue-679.pnga20fa153019632f9e906435f775c766eda377c72ea8572802c93173f5d578cd109b2c78e9c97c9059bc3818cfc8e2e272b09cb8022674 bytes / pngImported from GitHub comment. Originally posted by htayj on 2026-09-03T01:34:04Z.
Completed by Goocastle
Imported from GitHub comment. Originally posted by htayj on 2026-09-03T01:34:08Z.