Implement researched Guix package outcome for #392: [Guix packaging] Hellcrawl #694

Closed
opened 2026-09-06 14:12:25 +00:00 by htayj · 2 comments
htayj commented 2026-09-06 14:12:25 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #392 ([Guix packaging] Hellcrawl).

The host-validated research finding follows:

Canonical upstream: https://github.com/Hellmonk/hellcrawl, published stable tag 5.7 at immutable commit 8abd87763372e1c1be472510ac55faeff7b0dca7; moving master 1886dd7e54ed54f9cfa2baff6c7f3b7d5ef9a806 is not the pin. A Guix git-fetch tree hash was computed as base32 105593jwy1k7s25m1nlvszcy3hqc616hkmvdh6n5qmyy4lwagc79 (raw git-archive SHA-256 0f0fb566c6af9ecd1fdf1306fb2c2984b8cbda71f19b5bc5d31ff32b3b8bbffb). Hellcrawl is an independently playable DCSS 0.19-era fork, materially distinct from local bloatcrawl2 and bcrawl sibling packages; no exact Hellcrawl package or duplicate delivery is present in the local channel. crawl-ref/licence.txt grants the program GPLv2-or-later and identifies compatible BSD-2/BSD-3, CC0/public-domain, MIT, zlib, and Apache-2.0 components. The terminal-only closure installs code, maps/data, documentation, CREDITS, and docs/license notices; it deliberately excludes tiles, fonts, sound, webserver content, and all contrib gitlink contents, avoiding the upstream artwork caveat and separately fetched origins. The 11 fixed contrib gitlinks (fonts, freetype, libpng, Lua, LuaJIT, PCRE, SDL2, SDL2-image, SDL2-mixer, SQLite, zlib) must not be recursively fetched; crawl-ref/INSTALL.txt explicitly says the listed external development libraries are the complete set and avoid bundled contribs. Implement tay/packages/hellcrawl.scm with gnu-build-system, deleting configure, entering crawl-ref/source, setting a fixed release version for generated metadata, and building with TILES=, DATADIR=$out/share/hellcrawl, LUA_PACKAGE=lua-5.1, system SQLite headers/libs, and forced gcc/g++. Expected native inputs are bison, flex, perl, pkg-config, and which; inputs are bash-minimal/coreutils-minimal/findutils, lua-5.1, ncurses, sqlite, and zlib, with the GNU toolchain supplied by gnu-build-system. Install only terminal data and the upstream docs/license notices, and provide a launcher that keeps mutable saves/logs under XDG_DATA_HOME (fallback $HOME/.local/share/hellcrawl), preserves a read-only store, and has no updater, telemetry, or runtime download. Add a wrapper-only --smoke mode: it must use a fresh HOME/XDG tree, TERM=xterm-256color and LC_ALL=C, run the real installed terminal game through a PTY with deterministic normal-game arguments -seed 285 -no-save -name Goocastle -species Hu -background Fi, and assert character creation plus dungeon entry before emitting the single-line marker 'hellcrawl smoke: terminal UI OK; no store writes'. Acceptance is guix lint -L . hellcrawl with no package findings; offline guix build -L . --no-grafts --no-substitutes hellcrawl; upstream nondebug tests where available; guix build -L . --no-grafts --no-substitutes --check hellcrawl; then the isolated runtime proof through bounded-validation/unshare, asserting the marker, captured PTY gameplay evidence, empty HOME/XDG config/cache/state/runtime trees, immutable output, and .goocastle/evidence/issue-392.png. No package proof is claimed in this research phase.

Acceptance criteria

  • Implement the viable package change identified in the host-validated research finding.
  • Preserve Guix source provenance, licensing, and deterministic build requirements recorded in the finding.
  • Add and pass a package-specific safe smoke proof using isolated HOME/XDG state before closure.

Runtime evidence contract

Implementation workflow: guix-package-quality-gates
Reviewed contract file: .goocastle/runtime-evidence-contracts.json
Required proof phase: safe-package-proof; screenshot phase: runtime-screenshot
Evidence adapter: github-issue-comment
Copy this reviewed contract into the named file before running the package proof workflow.

{
  "version": 1,
  "contracts": [
    {
      "issueNumber": 694,
      "packageName": "hellcrawl",
      "packageModulePath": "tay/packages/hellcrawl.scm",
      "artifactPath": ".goocastle/evidence/issue-694.png",
      "runtime": {
        "executable": "hellcrawl",
        "invocation": {
          "file": "hellcrawl",
          "args": [
            "--smoke"
          ]
        },
        "successMarker": "hellcrawl smoke: terminal UI OK; no store writes"
      }
    }
  ]
}

Imported from GitHub issue/PR. Originally posted by htayj on 2026-09-06T14:12:25Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:392:1:implementation-ready --> ## Context This delivery ticket was created from research issue #392 ([Guix packaging] Hellcrawl). The host-validated research finding follows: Canonical upstream: https://github.com/Hellmonk/hellcrawl, published stable tag 5.7 at immutable commit 8abd87763372e1c1be472510ac55faeff7b0dca7; moving master 1886dd7e54ed54f9cfa2baff6c7f3b7d5ef9a806 is not the pin. A Guix git-fetch tree hash was computed as base32 105593jwy1k7s25m1nlvszcy3hqc616hkmvdh6n5qmyy4lwagc79 (raw git-archive SHA-256 0f0fb566c6af9ecd1fdf1306fb2c2984b8cbda71f19b5bc5d31ff32b3b8bbffb). Hellcrawl is an independently playable DCSS 0.19-era fork, materially distinct from local bloatcrawl2 and bcrawl sibling packages; no exact Hellcrawl package or duplicate delivery is present in the local channel. crawl-ref/licence.txt grants the program GPLv2-or-later and identifies compatible BSD-2/BSD-3, CC0/public-domain, MIT, zlib, and Apache-2.0 components. The terminal-only closure installs code, maps/data, documentation, CREDITS, and docs/license notices; it deliberately excludes tiles, fonts, sound, webserver content, and all contrib gitlink contents, avoiding the upstream artwork caveat and separately fetched origins. The 11 fixed contrib gitlinks (fonts, freetype, libpng, Lua, LuaJIT, PCRE, SDL2, SDL2-image, SDL2-mixer, SQLite, zlib) must not be recursively fetched; crawl-ref/INSTALL.txt explicitly says the listed external development libraries are the complete set and avoid bundled contribs. Implement tay/packages/hellcrawl.scm with gnu-build-system, deleting configure, entering crawl-ref/source, setting a fixed release version for generated metadata, and building with TILES=, DATADIR=$out/share/hellcrawl, LUA_PACKAGE=lua-5.1, system SQLite headers/libs, and forced gcc/g++. Expected native inputs are bison, flex, perl, pkg-config, and which; inputs are bash-minimal/coreutils-minimal/findutils, lua-5.1, ncurses, sqlite, and zlib, with the GNU toolchain supplied by gnu-build-system. Install only terminal data and the upstream docs/license notices, and provide a launcher that keeps mutable saves/logs under XDG_DATA_HOME (fallback $HOME/.local/share/hellcrawl), preserves a read-only store, and has no updater, telemetry, or runtime download. Add a wrapper-only --smoke mode: it must use a fresh HOME/XDG tree, TERM=xterm-256color and LC_ALL=C, run the real installed terminal game through a PTY with deterministic normal-game arguments -seed 285 -no-save -name Goocastle -species Hu -background Fi, and assert character creation plus dungeon entry before emitting the single-line marker 'hellcrawl smoke: terminal UI OK; no store writes'. Acceptance is guix lint -L . hellcrawl with no package findings; offline guix build -L . --no-grafts --no-substitutes hellcrawl; upstream nondebug tests where available; guix build -L . --no-grafts --no-substitutes --check hellcrawl; then the isolated runtime proof through bounded-validation/unshare, asserting the marker, captured PTY gameplay evidence, empty HOME/XDG config/cache/state/runtime trees, immutable output, and .goocastle/evidence/issue-392.png. No package proof is claimed in this research phase. ## Acceptance criteria - Implement the viable package change identified in the host-validated research finding. - Preserve Guix source provenance, licensing, and deterministic build requirements recorded in the finding. - Add and pass a package-specific safe smoke proof using isolated HOME/XDG state before closure. <!-- goocastle-runtime-evidence-contract --> ## Runtime evidence contract Implementation workflow: `guix-package-quality-gates` Reviewed contract file: `.goocastle/runtime-evidence-contracts.json` Required proof phase: `safe-package-proof`; screenshot phase: `runtime-screenshot` Evidence adapter: `github-issue-comment` Copy this reviewed contract into the named file before running the package proof workflow. ```json { "version": 1, "contracts": [ { "issueNumber": 694, "packageName": "hellcrawl", "packageModulePath": "tay/packages/hellcrawl.scm", "artifactPath": ".goocastle/evidence/issue-694.png", "runtime": { "executable": "hellcrawl", "invocation": { "file": "hellcrawl", "args": [ "--smoke" ] }, "successMarker": "hellcrawl smoke: terminal UI OK; no store writes" } } ] } ``` <!-- goocastle-runtime-evidence-contract-end --> --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/694). Originally posted by [htayj](https://github.com/htayj) on 2026-09-06T14:12:25Z.
htayj commented 2026-09-08 20:31:23 +00:00 (Migrated from github.com)

Goocastle verified runtime evidence.

Runtime screenshot

Runtime receipt
  • Package: hellcrawl
  • Safe package proof phase: safe-package-proof
  • Safe package proof argv: ["node","/opt/goocastle/bin/guix-package-proof.mjs","--package-name","hellcrawl","--module-path","tay/packages/hellcrawl.scm","--runtime-json","{&quot;executable&quot;:&quot;hellcrawl&quot;,&quot;invocation&quot;:{&quot;file&quot;:&quot;hellcrawl&quot;,&quot;args&quot;:[&quot;--smoke&quot;]},&quot;successMarker&quot;:&quot;hellcrawl smoke: terminal UI OK; no store writes&quot;}"]
  • Screenshot phase: runtime-screenshot
  • Screenshot argv: ["sh",".goocastle/capture-guix-package-screenshot.sh"]
  • Runtime executable (Guix store/profile): /gnu/store/znbfx4avvj4sd3p8prnhcb50qd48qp07-hellcrawl-5.7/bin/hellcrawl
  • Runtime invocation: ["/gnu/store/znbfx4avvj4sd3p8prnhcb50qd48qp07-hellcrawl-5.7/bin/hellcrawl","--smoke"]
  • Expected runtime invocation: ["hellcrawl","--smoke"]
  • Expected runtime marker: hellcrawl smoke: terminal UI OK; no store writes
  • Per-issue runtime contract: .goocastle/runtime-evidence-contracts.json (issue #694, SHA-256 0f1f9cda9ef0b999da5ce2e09157b62940ea04de402b74b7db62a95b102de9fd)
  • Artifact path: .goocastle/evidence/issue-694.png
  • Artifact SHA-256: 3a09b9ca63031ee83b1faa0bd0311aa667d29b2573337f96cd1c7371db2ceed6
  • Artifact commit: c4c8e836be9348c0eebb97d63d37a339414ba267
  • Artifact size/format: 51625 bytes / png

Imported from GitHub comment. Originally posted by htayj on 2026-09-08T20:31:23Z.

<!-- goocastle-runtime-evidence:sequential-reviewer:694:1:3a09b9ca63031ee83b1faa0bd0311aa667d29b2573337f96cd1c7371db2ceed6 --> Goocastle verified runtime evidence. ![Runtime screenshot](https://github.com/htayj/guix-channel/blob/c4c8e836be9348c0eebb97d63d37a339414ba267/.goocastle/evidence/issue-694.png?raw=1) <details><summary>Runtime receipt</summary> - Package: <code>hellcrawl</code> - Safe package proof phase: <code>safe-package-proof</code> - Safe package proof argv: <code>[&quot;node&quot;,&quot;/opt/goocastle/bin/guix-package-proof.mjs&quot;,&quot;--package-name&quot;,&quot;hellcrawl&quot;,&quot;--module-path&quot;,&quot;tay/packages/hellcrawl.scm&quot;,&quot;--runtime-json&quot;,&quot;{\&quot;executable\&quot;:\&quot;hellcrawl\&quot;,\&quot;invocation\&quot;:{\&quot;file\&quot;:\&quot;hellcrawl\&quot;,\&quot;args\&quot;:[\&quot;--smoke\&quot;]},\&quot;successMarker\&quot;:\&quot;hellcrawl smoke: terminal UI OK; no store writes\&quot;}&quot;]</code> - Screenshot phase: <code>runtime-screenshot</code> - Screenshot argv: <code>[&quot;sh&quot;,&quot;.goocastle/capture-guix-package-screenshot.sh&quot;]</code> - Runtime executable (Guix store/profile): <code>/gnu/store/znbfx4avvj4sd3p8prnhcb50qd48qp07-hellcrawl-5.7/bin/hellcrawl</code> - Runtime invocation: <code>[&quot;/gnu/store/znbfx4avvj4sd3p8prnhcb50qd48qp07-hellcrawl-5.7/bin/hellcrawl&quot;,&quot;--smoke&quot;]</code> - Expected runtime invocation: <code>[&quot;hellcrawl&quot;,&quot;--smoke&quot;]</code> - Expected runtime marker: <code>hellcrawl smoke: terminal UI OK; no store writes</code> - Per-issue runtime contract: <code>.goocastle/runtime-evidence-contracts.json (issue #694, SHA-256 0f1f9cda9ef0b999da5ce2e09157b62940ea04de402b74b7db62a95b102de9fd)</code> - Artifact path: <code>.goocastle/evidence/issue-694.png</code> - Artifact SHA-256: <code>3a09b9ca63031ee83b1faa0bd0311aa667d29b2573337f96cd1c7371db2ceed6</code> - Artifact commit: <code>c4c8e836be9348c0eebb97d63d37a339414ba267</code> - Artifact size/format: <code>51625 bytes / png</code> </details> --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/694#issuecomment-5591463300). Originally posted by [htayj](https://github.com/htayj) on 2026-09-08T20:31:23Z.
htayj commented 2026-09-08 20:31:27 +00:00 (Migrated from github.com)

Completed by Goocastle


Imported from GitHub comment. Originally posted by htayj on 2026-09-08T20:31:27Z.

Completed by Goocastle --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/694#issuecomment-5591464072). Originally posted by [htayj](https://github.com/htayj) on 2026-09-08T20:31:27Z.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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#694
No description provided.