Implement researched Guix package outcome for #336: [Guix packaging] Dungeon Monkey Unlimited #683

Closed
opened 2026-09-04 07:07:44 +00:00 by htayj · 3 comments
htayj commented 2026-09-04 07:07:44 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #336 ([Guix packaging] Dungeon Monkey Unlimited).

The host-validated research finding follows:

Canonical upstream is the SourceForge project https://sourceforge.net/projects/dmonkey/; the upstream downloads page https://gearheadrpg.com/wp/downloads/ identifies Dungeon Monkey Unlimited v1.001 as the latest stable release. Use the immutable source archive https://downloads.sourceforge.net/project/dmonkey/v1.000%20Series/DungeonMonkeyUnlimited-1.001-source.zip, downloaded successfully during research, SHA-256 f772ed0d74577af55f54a939cb456e5aa547c0443b5ed1d59edebf7e1230e9dc. The archive has no VCS commit or submodules, and contains 26 Pascal sources, 38 gamedata/doc text files, 73 PNGs, and two TTFs; no sound files, updater, telemetry, runtime download, or network code were found. The program source headers in dmu.pas and the units explicitly grant LGPL-2.1-only and license.txt carries the LGPL 2.1 text; this is the package license, despite the less-specific SourceForge project metadata saying GPLv2. The archive credits David E. Gervais tiles; the authoritative OpenGameArt collection identifies those tiles as CC-BY 3.0, and the official RLTiles site identifies its tiles as public domain subject to retaining its required attribution notice. Preserve upstream credits, add exact Bitstream Vera license text for the used VeraBd.ttf, and omit unused augie.ttf, convert32, test programs, Thumbs.db, and debug output from the installed runtime. Treat Joseph Hewitt-authored code/data/docs/maps and modifications as the project LGPL material, retain license.txt/readme/credits, and install a third-party notice covering Gervais CC-BY 3.0, RLTiles public-domain notice, and Bitstream-Vera. This is the Pascal/SDL1.2 Dungeon Monkey sequel in the original Dungeon Monkey lineage; Dungeon Monkey Eternal is a later, distinct third game written in Python and is not a substitute or same-upstream fork. No equivalent dungeon-monkey-unlimited package or same-upstream module is present in this channel or its package inventory, and guix search 'dungeon monkey' returned no official Guix result. Source-build is technically viable from the upstream README: invoke Free Pascal from the DMU directory against the checked-in sources, with Guix inputs fpc from (gnu packages pascal), sdl12-compat, sdl-image, and sdl-ttf from (gnu packages sdl), plus pkg-config only if needed for the SDL1.2-compatible link flags. Use gnu-build-system with no network phases and explicit linker/runtime paths; the research host has no Guix daemon, so no guix shell/build proof was attempted. Expected module path is tay/packages/dungeon-monkey-unlimited.scm. The ordinary executable is an interactive SDL1.2 GUI and writes config.cfg, savegame/*.txt, and possibly debug.txt relative to its working directory; provide a launcher named dungeon-monkey-unlimited that runs it from an XDG data directory, never the store, and provides a package-owned deterministic --smoke mode. The smoke path must set SDL_VIDEODRIVER=dummy, generate a fixed-seed local campaign through the real game units, exercise a meaningful gameplay-state transition plus save/load round-trip in a fresh temporary writable directory, assert no output/store writes, print exactly one success line, and exit zero. Runtime contract: executable and invocation file dungeon-monkey-unlimited; args [--smoke]; success marker DMU-SMOKE: campaign-save-load-ok. Host proof should capture the real SDL initialized/game-state result at .goocastle/evidence/issue-336.png, then run lint, no-graft offline build, upstream tests if available, reproducibility check, and the isolated fresh-HOME/XDG smoke with no store writes.

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": 683,
      "packageName": "dungeon-monkey-unlimited",
      "packageModulePath": "tay/packages/dungeon-monkey-unlimited.scm",
      "artifactPath": ".goocastle/evidence/issue-683.png",
      "runtime": {
        "executable": "dungeon-monkey-unlimited",
        "invocation": {
          "file": "dungeon-monkey-unlimited",
          "args": [
            "--smoke"
          ]
        },
        "successMarker": "DMU-SMOKE: campaign-save-load-ok"
      }
    }
  ]
}

Imported from GitHub issue/PR. Originally posted by htayj on 2026-09-04T07:07:44Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:336:1:implementation-ready --> ## Context This delivery ticket was created from research issue #336 ([Guix packaging] Dungeon Monkey Unlimited). The host-validated research finding follows: Canonical upstream is the SourceForge project https://sourceforge.net/projects/dmonkey/; the upstream downloads page https://gearheadrpg.com/wp/downloads/ identifies Dungeon Monkey Unlimited v1.001 as the latest stable release. Use the immutable source archive https://downloads.sourceforge.net/project/dmonkey/v1.000%20Series/DungeonMonkeyUnlimited-1.001-source.zip, downloaded successfully during research, SHA-256 f772ed0d74577af55f54a939cb456e5aa547c0443b5ed1d59edebf7e1230e9dc. The archive has no VCS commit or submodules, and contains 26 Pascal sources, 38 gamedata/doc text files, 73 PNGs, and two TTFs; no sound files, updater, telemetry, runtime download, or network code were found. The program source headers in dmu.pas and the units explicitly grant LGPL-2.1-only and license.txt carries the LGPL 2.1 text; this is the package license, despite the less-specific SourceForge project metadata saying GPLv2. The archive credits David E. Gervais tiles; the authoritative OpenGameArt collection identifies those tiles as CC-BY 3.0, and the official RLTiles site identifies its tiles as public domain subject to retaining its required attribution notice. Preserve upstream credits, add exact Bitstream Vera license text for the used VeraBd.ttf, and omit unused augie.ttf, convert32, test programs, Thumbs.db, and debug output from the installed runtime. Treat Joseph Hewitt-authored code/data/docs/maps and modifications as the project LGPL material, retain license.txt/readme/credits, and install a third-party notice covering Gervais CC-BY 3.0, RLTiles public-domain notice, and Bitstream-Vera. This is the Pascal/SDL1.2 Dungeon Monkey sequel in the original Dungeon Monkey lineage; Dungeon Monkey Eternal is a later, distinct third game written in Python and is not a substitute or same-upstream fork. No equivalent dungeon-monkey-unlimited package or same-upstream module is present in this channel or its package inventory, and `guix search 'dungeon monkey'` returned no official Guix result. Source-build is technically viable from the upstream README: invoke Free Pascal from the DMU directory against the checked-in sources, with Guix inputs fpc from (gnu packages pascal), sdl12-compat, sdl-image, and sdl-ttf from (gnu packages sdl), plus pkg-config only if needed for the SDL1.2-compatible link flags. Use gnu-build-system with no network phases and explicit linker/runtime paths; the research host has no Guix daemon, so no guix shell/build proof was attempted. Expected module path is tay/packages/dungeon-monkey-unlimited.scm. The ordinary executable is an interactive SDL1.2 GUI and writes config.cfg, savegame/*.txt, and possibly debug.txt relative to its working directory; provide a launcher named dungeon-monkey-unlimited that runs it from an XDG data directory, never the store, and provides a package-owned deterministic --smoke mode. The smoke path must set SDL_VIDEODRIVER=dummy, generate a fixed-seed local campaign through the real game units, exercise a meaningful gameplay-state transition plus save/load round-trip in a fresh temporary writable directory, assert no output/store writes, print exactly one success line, and exit zero. Runtime contract: executable and invocation file dungeon-monkey-unlimited; args [--smoke]; success marker DMU-SMOKE: campaign-save-load-ok. Host proof should capture the real SDL initialized/game-state result at .goocastle/evidence/issue-336.png, then run lint, no-graft offline build, upstream tests if available, reproducibility check, and the isolated fresh-HOME/XDG smoke with no store writes. ## 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": 683, "packageName": "dungeon-monkey-unlimited", "packageModulePath": "tay/packages/dungeon-monkey-unlimited.scm", "artifactPath": ".goocastle/evidence/issue-683.png", "runtime": { "executable": "dungeon-monkey-unlimited", "invocation": { "file": "dungeon-monkey-unlimited", "args": [ "--smoke" ] }, "successMarker": "DMU-SMOKE: campaign-save-load-ok" } } ] } ``` <!-- goocastle-runtime-evidence-contract-end --> --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/683). Originally posted by [htayj](https://github.com/htayj) on 2026-09-04T07:07:44Z.
htayj commented 2026-09-04 13:42:21 +00:00 (Migrated from github.com)

Goocastle blocked this ticket after the bounded repair budget was exhausted for the required command gate.
The failure receipt and task branch provenance remain preserved; inspect the branch and repair the failing gate before retrying.

Bounded failure evidence:
Failed command: node /opt/goocastle/bin/guix-package-proof.mjs '--package-name' dungeon-monkey-unlimited '--module-path' tay/packages/dungeon-monkey-unlimited.scm '--runtime-json' '{"executable":"dungeon-monkey-unlimited","invocation":{"file":"dungeon-monkey-unlimited","args":["--smoke"]},"successMarker":"DMU-SMOKE: campaign-save-load-ok"}'
Exit status: 1
Final failure lines:
[stderr] guix build: error: canonicalize-path: No such file or directory: "/tmp/goocastle-agent-eGoKBf/proof-SKhCGR/tay/packages/dungeon-monkey-unlimited-smoke.pas"
[stderr] guix exited with code [REDACTED]
[earlier or oversized output omitted]


Imported from GitHub comment. Originally posted by htayj on 2026-09-04T13:42:21Z.

<!-- goocastle-repair-blocked:683:safe-package-proof --> Goocastle blocked this ticket after the bounded repair budget was exhausted for the required command gate. The failure receipt and task branch provenance remain preserved; inspect the branch and repair the failing gate before retrying. Bounded failure evidence: Failed command: node /opt/goocastle/bin/guix-package-proof.mjs '--package-name' dungeon-monkey-unlimited '--module-path' tay/packages/dungeon-monkey-unlimited.scm '--runtime-json' '{"executable":"dungeon-monkey-unlimited","invocation":{"file":"dungeon-monkey-unlimited","args":["--smoke"]},"successMarker":"DMU-SMOKE: campaign-save-load-ok"}' Exit status: 1 Final failure lines: [stderr] guix build: error: canonicalize-path: No such file or directory: "/tmp/goocastle-agent-eGoKBf/proof-SKhCGR/tay/packages/dungeon-monkey-unlimited-smoke.pas" [stderr] guix exited with code [REDACTED] [earlier or oversized output omitted] --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/683#issuecomment-5541303839). Originally posted by [htayj](https://github.com/htayj) on 2026-09-04T13:42:21Z.
htayj commented 2026-09-04 16:11:39 +00:00 (Migrated from github.com)

Goocastle verified runtime evidence.

Runtime screenshot

Runtime receipt
  • Package: dungeon-monkey-unlimited
  • Safe package proof phase: safe-package-proof
  • Safe package proof argv: ["node","/opt/goocastle/bin/guix-package-proof.mjs","--package-name","dungeon-monkey-unlimited","--module-path","tay/packages/dungeon-monkey-unlimited.scm","--runtime-json","{&quot;executable&quot;:&quot;dungeon-monkey-unlimited&quot;,&quot;invocation&quot;:{&quot;file&quot;:&quot;dungeon-monkey-unlimited&quot;,&quot;args&quot;:[&quot;--smoke&quot;]},&quot;successMarker&quot;:&quot;DMU-SMOKE: campaign-save-load-ok&quot;}"]
  • Screenshot phase: runtime-screenshot
  • Screenshot argv: ["sh",".goocastle/capture-guix-package-screenshot.sh"]
  • Runtime executable (Guix store/profile): /gnu/store/pcpzwpicbbyp5rihi8n6wg46dgk56hxd-dungeon-monkey-unlimited-1.001/bin/dungeon-monkey-unlimited
  • Runtime invocation: ["/gnu/store/pcpzwpicbbyp5rihi8n6wg46dgk56hxd-dungeon-monkey-unlimited-1.001/bin/dungeon-monkey-unlimited","--smoke"]
  • Expected runtime invocation: ["dungeon-monkey-unlimited","--smoke"]
  • Expected runtime marker: DMU-SMOKE: campaign-save-load-ok
  • Per-issue runtime contract: .goocastle/runtime-evidence-contracts.json (issue #683, SHA-256 f8b9f5b6c627de9d559a036864a4724c3a5dfd651b9d07403f63a496c4e78271)
  • Artifact path: .goocastle/evidence/issue-683.png
  • Artifact SHA-256: d2e01c41a0527cefed2d895ee415601f94884a3a649ac34ea34d7d31daa20f57
  • Artifact commit: 854fe4530f775a347bd4ceef01b1c3a2910a334e
  • Artifact size/format: 3869 bytes / png

Imported from GitHub comment. Originally posted by htayj on 2026-09-04T16:11:39Z.

<!-- goocastle-runtime-evidence:sequential-reviewer:683:1:d2e01c41a0527cefed2d895ee415601f94884a3a649ac34ea34d7d31daa20f57 --> Goocastle verified runtime evidence. ![Runtime screenshot](https://github.com/htayj/guix-channel/blob/854fe4530f775a347bd4ceef01b1c3a2910a334e/.goocastle/evidence/issue-683.png?raw=1) <details><summary>Runtime receipt</summary> - Package: <code>dungeon-monkey-unlimited</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;dungeon-monkey-unlimited&quot;,&quot;--module-path&quot;,&quot;tay/packages/dungeon-monkey-unlimited.scm&quot;,&quot;--runtime-json&quot;,&quot;{\&quot;executable\&quot;:\&quot;dungeon-monkey-unlimited\&quot;,\&quot;invocation\&quot;:{\&quot;file\&quot;:\&quot;dungeon-monkey-unlimited\&quot;,\&quot;args\&quot;:[\&quot;--smoke\&quot;]},\&quot;successMarker\&quot;:\&quot;DMU-SMOKE: campaign-save-load-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/pcpzwpicbbyp5rihi8n6wg46dgk56hxd-dungeon-monkey-unlimited-1.001/bin/dungeon-monkey-unlimited</code> - Runtime invocation: <code>[&quot;/gnu/store/pcpzwpicbbyp5rihi8n6wg46dgk56hxd-dungeon-monkey-unlimited-1.001/bin/dungeon-monkey-unlimited&quot;,&quot;--smoke&quot;]</code> - Expected runtime invocation: <code>[&quot;dungeon-monkey-unlimited&quot;,&quot;--smoke&quot;]</code> - Expected runtime marker: <code>DMU-SMOKE: campaign-save-load-ok</code> - Per-issue runtime contract: <code>.goocastle/runtime-evidence-contracts.json (issue #683, SHA-256 f8b9f5b6c627de9d559a036864a4724c3a5dfd651b9d07403f63a496c4e78271)</code> - Artifact path: <code>.goocastle/evidence/issue-683.png</code> - Artifact SHA-256: <code>d2e01c41a0527cefed2d895ee415601f94884a3a649ac34ea34d7d31daa20f57</code> - Artifact commit: <code>854fe4530f775a347bd4ceef01b1c3a2910a334e</code> - Artifact size/format: <code>3869 bytes / png</code> </details> --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/683#issuecomment-5543287935). Originally posted by [htayj](https://github.com/htayj) on 2026-09-04T16:11:39Z.
htayj commented 2026-09-04 16:11:43 +00:00 (Migrated from github.com)

Completed by Goocastle


Imported from GitHub comment. Originally posted by htayj on 2026-09-04T16:11:43Z.

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