Implement researched Guix package outcome for #333: [Guix packaging] Dragonslayer #681

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

Context

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

The host-validated research finding follows:

Canonical upstream is Walter D. Pullen's Daedalus 3.5 source mirror at https://github.com/CruiserOne/Daedalus, fixed at tag v3.5 and commit 32af46ddf22e53c9bfd7bd7eacca1e249c60a5e8 (2024-10-31 upstream release; the mirror README identifies itself as the official 3.5 source copy with only a README addition). The cloned tree has 87 tracked files and no submodules. Audit hashes are Guix recursive base32 lf4pteu5f2l67eysaq3yd277vmha3yfkpjfouu52umw7zp7ix44q and raw git-archive SHA-256 e23f94cd538d190943b87d8011c32c55796a4c4669a6af059d4cb5e5858be0c6. The only fetched source origin is this fixed commit. It contains license.htm with the complete GNU GPL version 2 text (Version 2, June 1991), the upstream changes page states GPL v2 or later, and the common Walter D. Pullen notice is present throughout the C++ sources; dragon.ds carries the author attribution and embeds its stone, crystal, leaf, door, weapon, armor, amulet, potion, scroll, and wand texture data. No separate fonts, sounds, maps, registries, dependencies, or submodule origins are required; do not install the unrelated hunger.bmp. Preserve license.htm, source notices, and author credits in installed documentation. The embedded leaf data is annotated as based on a Windows 3.1 leaves.bmp, but no separate leaves origin is fetched or installed; retain the upstream attribution and treat the pinned upstream license/notice as the license evidence for the shipped single-origin script and embedded assets. The Makefile documents the offline Unix build g++ -c -O *.cpp; g++ -o daedalus *.o -lm and lists 16 objects. A Guix package should use module (tay packages dragonslayer), package name dragonslayer, version 3.5 with the fixed git revision and the recorded Guix hash, gnu-build-system, patch util.h to comment out WIN and PC for the command-line build, and use only the normal GCC/make toolchain plus libc/libm; no runtime library such as ncurses, SDL, or X11 is indicated. Install the private Daedalus executable, dragon.ds under share/dragonslayer, and license/documentation under share/doc/dragonslayer. The local channel and audit history contain no same-upstream dragonslayer/Daedalus package, closed delivery, or runtime proof, so this is a distinct ordinary package delivery. No daemon-backed build was attempted because the trusted phase has no Guix daemon and prohibits guix shell; the source metadata establishes feasibility but is not package proof. The wrapper should use absolute store paths, avoid network/download/updater/telemetry behavior, provide normal textual command interaction, and add dragonslayer --smoke that opens dragon.ds, performs one MoveU action, prints exactly DRAGONSLAYER_SMOKE_OK, and exits without save commands or store writes. Later acceptance must run package-specific guix lint -L . dragonslayer, a no-network guix build -L . --no-grafts dragonslayer, and guix build -L . --no-grafts --check dragonslayer; upstream has no test target, so document that fact. In a fresh temporary HOME/XDG environment, run the exact smoke invocation through the bounded validator, assert the marker and meaningful gameplay initialization/movement, verify no files are written to the store or unexpected user state, and capture the successful terminal/game state at .goocastle/evidence/issue-333.png while checking installed license and notices.

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": 681,
      "packageName": "dragonslayer",
      "artifactPath": ".goocastle/evidence/issue-681.png",
      "runtime": {
        "executable": "dragonslayer",
        "invocation": {
          "file": "dragonslayer",
          "args": [
            "--smoke"
          ]
        },
        "successMarker": "DRAGONSLAYER_SMOKE_OK"
      }
    }
  ]
}

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

<!-- goocastle-implementation-ticket:sequential-reviewer:333:1:implementation-ready --> ## Context This delivery ticket was created from research issue #333 ([Guix packaging] Dragonslayer). The host-validated research finding follows: Canonical upstream is Walter D. Pullen's Daedalus 3.5 source mirror at https://github.com/CruiserOne/Daedalus, fixed at tag v3.5 and commit 32af46ddf22e53c9bfd7bd7eacca1e249c60a5e8 (2024-10-31 upstream release; the mirror README identifies itself as the official 3.5 source copy with only a README addition). The cloned tree has 87 tracked files and no submodules. Audit hashes are Guix recursive base32 lf4pteu5f2l67eysaq3yd277vmha3yfkpjfouu52umw7zp7ix44q and raw git-archive SHA-256 e23f94cd538d190943b87d8011c32c55796a4c4669a6af059d4cb5e5858be0c6. The only fetched source origin is this fixed commit. It contains license.htm with the complete GNU GPL version 2 text (Version 2, June 1991), the upstream changes page states GPL v2 or later, and the common Walter D. Pullen notice is present throughout the C++ sources; dragon.ds carries the author attribution and embeds its stone, crystal, leaf, door, weapon, armor, amulet, potion, scroll, and wand texture data. No separate fonts, sounds, maps, registries, dependencies, or submodule origins are required; do not install the unrelated hunger.bmp. Preserve license.htm, source notices, and author credits in installed documentation. The embedded leaf data is annotated as based on a Windows 3.1 leaves.bmp, but no separate leaves origin is fetched or installed; retain the upstream attribution and treat the pinned upstream license/notice as the license evidence for the shipped single-origin script and embedded assets. The Makefile documents the offline Unix build `g++ -c -O *.cpp; g++ -o daedalus *.o -lm` and lists 16 objects. A Guix package should use module `(tay packages dragonslayer)`, package name `dragonslayer`, version 3.5 with the fixed git revision and the recorded Guix hash, gnu-build-system, patch util.h to comment out WIN and PC for the command-line build, and use only the normal GCC/make toolchain plus libc/libm; no runtime library such as ncurses, SDL, or X11 is indicated. Install the private Daedalus executable, dragon.ds under share/dragonslayer, and license/documentation under share/doc/dragonslayer. The local channel and audit history contain no same-upstream dragonslayer/Daedalus package, closed delivery, or runtime proof, so this is a distinct ordinary package delivery. No daemon-backed build was attempted because the trusted phase has no Guix daemon and prohibits guix shell; the source metadata establishes feasibility but is not package proof. The wrapper should use absolute store paths, avoid network/download/updater/telemetry behavior, provide normal textual command interaction, and add `dragonslayer --smoke` that opens dragon.ds, performs one MoveU action, prints exactly `DRAGONSLAYER_SMOKE_OK`, and exits without save commands or store writes. Later acceptance must run package-specific `guix lint -L . dragonslayer`, a no-network `guix build -L . --no-grafts dragonslayer`, and `guix build -L . --no-grafts --check dragonslayer`; upstream has no test target, so document that fact. In a fresh temporary HOME/XDG environment, run the exact smoke invocation through the bounded validator, assert the marker and meaningful gameplay initialization/movement, verify no files are written to the store or unexpected user state, and capture the successful terminal/game state at .goocastle/evidence/issue-333.png while checking installed license and notices. ## 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": 681, "packageName": "dragonslayer", "artifactPath": ".goocastle/evidence/issue-681.png", "runtime": { "executable": "dragonslayer", "invocation": { "file": "dragonslayer", "args": [ "--smoke" ] }, "successMarker": "DRAGONSLAYER_SMOKE_OK" } } ] } ``` <!-- goocastle-runtime-evidence-contract-end --> --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/681). Originally posted by [htayj](https://github.com/htayj) on 2026-09-03T07:27:44Z.
htayj commented 2026-09-03 15:06:42 +00:00 (Migrated from github.com)

Goocastle blocked this legacy delivery issue because its per-issue runtime contract is not safely derivable.

Workflow: guix-package-quality-gates
Contract file: .goocastle/runtime-evidence-contracts.json
Issue body digest: 0c2182919ac076501a9b444067b3e63d5958888a7d94a638335e2401d4f7bfbd

Bounded audit evidence:

  • Invalid runtime evidence: runtimeEvidenceContracts.contracts[0].packageModulePath must be a non-empty single-line string without NUL

Manual repair: review the original handoff, add only exact package/runtime/artifact values to the named contract file, commit it, then rerun goocastle audit-runtime-contracts --write and goocastle explain-readiness ISSUE before restoring ready-for-agent.


Imported from GitHub comment. Originally posted by htayj on 2026-09-03T15:06:42Z.

<!-- goocastle-runtime-contract-recovery:v1:guix-package-quality-gates:681:manual-repair:0c2182919ac076501a9b444067b3e63d5958888a7d94a638335e2401d4f7bfbd --> Goocastle blocked this legacy delivery issue because its per-issue runtime contract is not safely derivable. Workflow: `guix-package-quality-gates` Contract file: `.goocastle/runtime-evidence-contracts.json` Issue body digest: `0c2182919ac076501a9b444067b3e63d5958888a7d94a638335e2401d4f7bfbd` Bounded audit evidence: - Invalid runtime evidence: runtimeEvidenceContracts.contracts[0].packageModulePath must be a non-empty single-line string without NUL Manual repair: review the original handoff, add only exact package/runtime/artifact values to the named contract file, commit it, then rerun `goocastle audit-runtime-contracts --write` and `goocastle explain-readiness ISSUE` before restoring `ready-for-agent`. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/681#issuecomment-5527763929). Originally posted by [htayj](https://github.com/htayj) on 2026-09-03T15:06:42Z.
htayj commented 2026-09-04 06:04:16 +00:00 (Migrated from github.com)

Delivered in ba3927e.

Runtime proof passed from published master:

  • guix build -L . --no-grafts dragonslayer
  • isolated tests/dragonslayer-smoke.sh under a user+network namespace
  • guix build --check, offline lint, and source-inventory check

The proof runs the packaged Dragonslayer startup script and a gameplay move without writable store/state leakage. Screenshot evidence: github.com/htayj/guix-channel@ba3927ed3b/.goocastle/evidence/issue-681.png


Imported from GitHub comment. Originally posted by htayj on 2026-09-04T06:04:16Z.

Delivered in ba3927e. Runtime proof passed from published master: - `guix build -L . --no-grafts dragonslayer` - isolated `tests/dragonslayer-smoke.sh` under a user+network namespace - `guix build --check`, offline lint, and source-inventory check The proof runs the packaged Dragonslayer startup script and a gameplay move without writable store/state leakage. Screenshot evidence: https://github.com/htayj/guix-channel/blob/ba3927ed3b427ee75eb46bbab41da02a9c8ff734/.goocastle/evidence/issue-681.png --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/681#issuecomment-5536419369). Originally posted by [htayj](https://github.com/htayj) on 2026-09-04T06:04:16Z.
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#681
No description provided.