Implement researched Guix package outcome for #438: [Guix packaging] Martin's Dungeon Bash #705

Closed
opened 2026-09-11 05:00:45 +00:00 by htayj · 2 comments
htayj commented 2026-09-11 05:00:45 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #438 ([Guix packaging] Martin's Dungeon Bash).

The host-validated research finding follows:

Canonical upstream is Martin Read's official project page https://www.chiark.greenend.org.uk/~mpread/dungeonbash/; the candidate GitHub URL https://github.com/rsaarelm/martins-dungeon-bash currently returns HTTP 404 and must not be used. The official page identifies stable v1.7, released 2009-01-06, at https://www.chiark.greenend.org.uk/~mpread/dungeonbash/archive-1.7/dungeonbash-1.7.tar.gz; observed SHA-256 is 790bde04ff869ba2817ad1f07d062d75f7f15af4a2c99669dd60a4b98fdf1380. The fixed archive has no Git submodules, language registries, fonts, tiles, sounds, or bundled third-party dependencies: it contains C sources/headers, a Makefile, notes.txt, and project HTML spoiler documentation. notes.txt states copyright 2005-2009 Martin Read and reproduces the BSD 2-clause license; the C source headers carry the same redistribution grant. Install notes.txt or an extracted copy of that notice with the binary; omit the HTML spoiler files unless their documentation license is separately verified. Makefile metadata is a direct GCC build of dungeonbash with -lpanel -lncurses; use module path tay/packages/martins-dungeon-bash.scm and package name martins-dungeon-bash, native gcc-toolchain, ncurses for panel/curses, bash-minimal because upstream save/load use system(), gzip because they call gzip and gunzip, and util-linux for the PTY smoke wrapper. Current GNU Guix gnu/packages/games.scm and the local channel inventory contain no matching Martin's Dungeon Bash, dungeonbash, or Cave Chop package, so this is not a duplicate. Package by copying the built executable to libexec and provide a wrapper executable named dungeonbash with a safe --smoke mode: in a fresh temporary working directory and PTY, send a stand-still/gameplay key followed by S and an exit key to create dunbash.sav.gz, launch again in the same directory so the program loads that save, answer X/Y to quit, assert the observed Game loaded. message, and print the single-line marker MARTINS_DUNGEON_BASH_SMOKE_OK; use util-linux script and fixed store paths for helper tools, and keep all state outside the store. Normal invocation must preserve the upstream working-directory save behavior. This is implementation-ready from source metadata, but no package proof is claimed here because the host intentionally has no Guix daemon; the delivery phase must run lint, no-graft offline build/check, and the fresh-HOME/XDG wrapper smoke with the planned screenshot artifact.

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": 705,
      "packageName": "martins-dungeon-bash",
      "packageModulePath": "tay/packages/martins-dungeon-bash.scm",
      "artifactPath": ".goocastle/evidence/issue-705.png",
      "runtime": {
        "executable": "dungeonbash",
        "invocation": {
          "file": "dungeonbash",
          "args": [
            "--smoke"
          ]
        },
        "successMarker": "MARTINS_DUNGEON_BASH_SMOKE_OK"
      }
    }
  ]
}

Imported from GitHub issue/PR. Originally posted by htayj on 2026-09-11T05:00:45Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:438:1:implementation-ready --> ## Context This delivery ticket was created from research issue #438 ([Guix packaging] Martin's Dungeon Bash). The host-validated research finding follows: Canonical upstream is Martin Read's official project page https://www.chiark.greenend.org.uk/~mpread/dungeonbash/; the candidate GitHub URL https://github.com/rsaarelm/martins-dungeon-bash currently returns HTTP 404 and must not be used. The official page identifies stable v1.7, released 2009-01-06, at https://www.chiark.greenend.org.uk/~mpread/dungeonbash/archive-1.7/dungeonbash-1.7.tar.gz; observed SHA-256 is 790bde04ff869ba2817ad1f07d062d75f7f15af4a2c99669dd60a4b98fdf1380. The fixed archive has no Git submodules, language registries, fonts, tiles, sounds, or bundled third-party dependencies: it contains C sources/headers, a Makefile, notes.txt, and project HTML spoiler documentation. notes.txt states copyright 2005-2009 Martin Read and reproduces the BSD 2-clause license; the C source headers carry the same redistribution grant. Install notes.txt or an extracted copy of that notice with the binary; omit the HTML spoiler files unless their documentation license is separately verified. Makefile metadata is a direct GCC build of dungeonbash with -lpanel -lncurses; use module path tay/packages/martins-dungeon-bash.scm and package name martins-dungeon-bash, native gcc-toolchain, ncurses for panel/curses, bash-minimal because upstream save/load use system(), gzip because they call gzip and gunzip, and util-linux for the PTY smoke wrapper. Current GNU Guix gnu/packages/games.scm and the local channel inventory contain no matching Martin's Dungeon Bash, dungeonbash, or Cave Chop package, so this is not a duplicate. Package by copying the built executable to libexec and provide a wrapper executable named dungeonbash with a safe --smoke mode: in a fresh temporary working directory and PTY, send a stand-still/gameplay key followed by S and an exit key to create dunbash.sav.gz, launch again in the same directory so the program loads that save, answer X/Y to quit, assert the observed Game loaded. message, and print the single-line marker MARTINS_DUNGEON_BASH_SMOKE_OK; use util-linux script and fixed store paths for helper tools, and keep all state outside the store. Normal invocation must preserve the upstream working-directory save behavior. This is implementation-ready from source metadata, but no package proof is claimed here because the host intentionally has no Guix daemon; the delivery phase must run lint, no-graft offline build/check, and the fresh-HOME/XDG wrapper smoke with the planned screenshot artifact. ## 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": 705, "packageName": "martins-dungeon-bash", "packageModulePath": "tay/packages/martins-dungeon-bash.scm", "artifactPath": ".goocastle/evidence/issue-705.png", "runtime": { "executable": "dungeonbash", "invocation": { "file": "dungeonbash", "args": [ "--smoke" ] }, "successMarker": "MARTINS_DUNGEON_BASH_SMOKE_OK" } } ] } ``` <!-- goocastle-runtime-evidence-contract-end --> --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/705). Originally posted by [htayj](https://github.com/htayj) on 2026-09-11T05:00:45Z.
htayj commented 2026-09-11 05:27:08 +00:00 (Migrated from github.com)

Goocastle verified runtime evidence.

Runtime screenshot

Runtime receipt
  • Package: martins-dungeon-bash
  • Safe package proof phase: safe-package-proof
  • Safe package proof argv: ["node","/opt/goocastle/bin/guix-package-proof.mjs","--package-name","martins-dungeon-bash","--module-path","tay/packages/martins-dungeon-bash.scm","--runtime-json","{&quot;executable&quot;:&quot;dungeonbash&quot;,&quot;invocation&quot;:{&quot;file&quot;:&quot;dungeonbash&quot;,&quot;args&quot;:[&quot;--smoke&quot;]},&quot;successMarker&quot;:&quot;MARTINS_DUNGEON_BASH_SMOKE_OK&quot;}"]
  • Screenshot phase: runtime-screenshot
  • Screenshot argv: ["sh",".goocastle/capture-guix-package-screenshot.sh"]
  • Runtime executable (Guix store/profile): /gnu/store/76abxcbmr8r335alvp9kr1lggvrqs1w8-martins-dungeon-bash-1.7/bin/dungeonbash
  • Runtime invocation: ["/gnu/store/76abxcbmr8r335alvp9kr1lggvrqs1w8-martins-dungeon-bash-1.7/bin/dungeonbash","--smoke"]
  • Expected runtime invocation: ["dungeonbash","--smoke"]
  • Expected runtime marker: MARTINS_DUNGEON_BASH_SMOKE_OK
  • Per-issue runtime contract: .goocastle/runtime-evidence-contracts.json (issue #705, SHA-256 7b0de17c556bcee4000d2ec77eddac7833f821ac5215b58ea852254393e23e66)
  • Artifact path: .goocastle/evidence/issue-705.png
  • Artifact SHA-256: 642e6cb138727e8987f4bb0db9502ab59bbacb282aac4b08c9219324c7b76557
  • Artifact commit: acc3114744e7442063c8c163cc783b543ea831a6
  • Artifact size/format: 31214 bytes / png

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

<!-- goocastle-runtime-evidence:sequential-reviewer:705:1:642e6cb138727e8987f4bb0db9502ab59bbacb282aac4b08c9219324c7b76557 --> Goocastle verified runtime evidence. ![Runtime screenshot](https://github.com/htayj/guix-channel/blob/acc3114744e7442063c8c163cc783b543ea831a6/.goocastle/evidence/issue-705.png?raw=1) <details><summary>Runtime receipt</summary> - Package: <code>martins-dungeon-bash</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;martins-dungeon-bash&quot;,&quot;--module-path&quot;,&quot;tay/packages/martins-dungeon-bash.scm&quot;,&quot;--runtime-json&quot;,&quot;{\&quot;executable\&quot;:\&quot;dungeonbash\&quot;,\&quot;invocation\&quot;:{\&quot;file\&quot;:\&quot;dungeonbash\&quot;,\&quot;args\&quot;:[\&quot;--smoke\&quot;]},\&quot;successMarker\&quot;:\&quot;MARTINS_DUNGEON_BASH_SMOKE_OK\&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/76abxcbmr8r335alvp9kr1lggvrqs1w8-martins-dungeon-bash-1.7/bin/dungeonbash</code> - Runtime invocation: <code>[&quot;/gnu/store/76abxcbmr8r335alvp9kr1lggvrqs1w8-martins-dungeon-bash-1.7/bin/dungeonbash&quot;,&quot;--smoke&quot;]</code> - Expected runtime invocation: <code>[&quot;dungeonbash&quot;,&quot;--smoke&quot;]</code> - Expected runtime marker: <code>MARTINS_DUNGEON_BASH_SMOKE_OK</code> - Per-issue runtime contract: <code>.goocastle/runtime-evidence-contracts.json (issue #705, SHA-256 7b0de17c556bcee4000d2ec77eddac7833f821ac5215b58ea852254393e23e66)</code> - Artifact path: <code>.goocastle/evidence/issue-705.png</code> - Artifact SHA-256: <code>642e6cb138727e8987f4bb0db9502ab59bbacb282aac4b08c9219324c7b76557</code> - Artifact commit: <code>acc3114744e7442063c8c163cc783b543ea831a6</code> - Artifact size/format: <code>31214 bytes / png</code> </details> --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/705#issuecomment-5629925054). Originally posted by [htayj](https://github.com/htayj) on 2026-09-11T05:27:08Z.
htayj commented 2026-09-11 05:27:11 +00:00 (Migrated from github.com)

Completed by Goocastle


Imported from GitHub comment. Originally posted by htayj on 2026-09-11T05:27:11Z.

Completed by Goocastle --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/705#issuecomment-5629925626). Originally posted by [htayj](https://github.com/htayj) on 2026-09-11T05:27:11Z.
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#705
No description provided.