Implement researched Guix package outcome for #487: [Guix packaging] Robotfindskitten #717

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

Context

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

The host-validated research finding follows:

Implementation-ready as a materially distinct update of the existing GNU Guix robotfindskitten package, not a duplicate: the official Guix module gnu/packages/games.scm currently defines package robotfindskitten at 2.8284271.702, while the maintained canonical repository is https://codeberg.org/robotfindskitten/robotfindskitten and its latest stable tag is 3.0000000.726, dereferenced at commit 471872786ca3a40db5b53f7baf96233a3793c45d (tag commit date 2026-06-16). Use a new channel module tay/packages/robotfindskitten.scm (or the channel's equivalent games module) retaining package name robotfindskitten and updating the existing identity. Use the immutable Codeberg commit archive URL https://codeberg.org/robotfindskitten/robotfindskitten/archive/471872786ca3a40db5b53f7baf96233a3793c45d.tar.gz; the observed SHA-256 is 6be0c9bab746e8484e29b2033bb915a59880cc1205c9f4ec3a377c62ca6cd5e7. The release is an Autotools C project: configure.ac requires AC_PROG_CC, LT_INIT, ncurses, and signal/ncurses headers; Makefile.am builds src/robotfindskitten.c and installs the game under games, nki/vanilla.nki under share/games/robotfindskitten, the man/info documentation, desktop/metainfo files, and PNG/SVG icons. The archive has no generated configure or Makefiles, so add native inputs autoconf, automake, and libtool and run autoreconf -vfi before configure; add ncurses as the runtime/build input. Upstream CI runs autoreconf, configure, make, make check, and make distcheck. README build metadata mentions gnulib and TeX tools for regenerating documentation, but the release's configure.ac and installed-file manifests show no language registry, vendored dependency, or submodule; use the minimal declared toolchain and verify whether texinfo is needed by the release's doc target. All shipped project files carry SPDX GPL-2.0-or-later metadata or are covered by REUSE.toml, and LICENSES/GPL-2.0-or-later.txt is included; no separately fetched origin or unlicensed asset was found. Upstream has no updater, telemetry, runtime download, or network behavior; the program reads optional user .robotfindskitten/*.nki content from HOME and otherwise remains local. Preserve the upstream program while adding a safe wrapper mode for the required proof: install the real binary in libexec and a wrapper named robotfindskitten in bin; the wrapper's exact accepted proof mode is --guix-smoke, and its normal path passes ordinary arguments through. In proof mode, use a small Python PTY helper (python-minimal runtime input) to run the real ncurses game with fixed child args -n 1 -s 0, fresh HOME and XDG_CONFIG_HOME/XDG_DATA_HOME/XDG_STATE_HOME/XDG_CACHE_HOME below a private temporary directory, TERM=xterm, and a finite deterministic h/j/k/l movement sequence followed by q; require clean child exit and print exactly one stdout line GUIX_SMOKE_OK robotfindskitten. Acceptance: guix lint -L . robotfindskitten has no package-specific findings; offline guix build -L . --no-grafts succeeds with no opaque binary or network access; upstream autoreconf/configure/make/check/distcheck checks run where available and --check is left to the authorized Guix phase; the smoke proof uses artifact .goocastle/evidence/issue-487.png, checks meaningful gameplay state, uses fresh HOME/XDG, and verifies no store writes. Research could not run Guix builds because the host boundary explicitly provides no Guix daemon; that is an environment limitation, not an upstream build failure.

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": 717,
      "packageName": "robotfindskitten",
      "packageModulePath": "tay/packages/robotfindskitten.scm",
      "artifactPath": ".goocastle/evidence/issue-717.png",
      "runtime": {
        "executable": "robotfindskitten",
        "invocation": {
          "file": "robotfindskitten",
          "args": [
            "--guix-smoke"
          ]
        },
        "successMarker": "GUIX_SMOKE_OK robotfindskitten"
      }
    }
  ]
}

Imported from GitHub issue/PR. Originally posted by htayj on 2026-09-12T06:51:03Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:487:1:implementation-ready --> ## Context This delivery ticket was created from research issue #487 ([Guix packaging] Robotfindskitten). The host-validated research finding follows: Implementation-ready as a materially distinct update of the existing GNU Guix robotfindskitten package, not a duplicate: the official Guix module gnu/packages/games.scm currently defines package robotfindskitten at 2.8284271.702, while the maintained canonical repository is https://codeberg.org/robotfindskitten/robotfindskitten and its latest stable tag is 3.0000000.726, dereferenced at commit 471872786ca3a40db5b53f7baf96233a3793c45d (tag commit date 2026-06-16). Use a new channel module tay/packages/robotfindskitten.scm (or the channel's equivalent games module) retaining package name robotfindskitten and updating the existing identity. Use the immutable Codeberg commit archive URL https://codeberg.org/robotfindskitten/robotfindskitten/archive/471872786ca3a40db5b53f7baf96233a3793c45d.tar.gz; the observed SHA-256 is 6be0c9bab746e8484e29b2033bb915a59880cc1205c9f4ec3a377c62ca6cd5e7. The release is an Autotools C project: configure.ac requires AC_PROG_CC, LT_INIT, ncurses, and signal/ncurses headers; Makefile.am builds src/robotfindskitten.c and installs the game under games, nki/vanilla.nki under share/games/robotfindskitten, the man/info documentation, desktop/metainfo files, and PNG/SVG icons. The archive has no generated configure or Makefiles, so add native inputs autoconf, automake, and libtool and run autoreconf -vfi before configure; add ncurses as the runtime/build input. Upstream CI runs autoreconf, configure, make, make check, and make distcheck. README build metadata mentions gnulib and TeX tools for regenerating documentation, but the release's configure.ac and installed-file manifests show no language registry, vendored dependency, or submodule; use the minimal declared toolchain and verify whether texinfo is needed by the release's doc target. All shipped project files carry SPDX GPL-2.0-or-later metadata or are covered by REUSE.toml, and LICENSES/GPL-2.0-or-later.txt is included; no separately fetched origin or unlicensed asset was found. Upstream has no updater, telemetry, runtime download, or network behavior; the program reads optional user .robotfindskitten/*.nki content from HOME and otherwise remains local. Preserve the upstream program while adding a safe wrapper mode for the required proof: install the real binary in libexec and a wrapper named robotfindskitten in bin; the wrapper's exact accepted proof mode is --guix-smoke, and its normal path passes ordinary arguments through. In proof mode, use a small Python PTY helper (python-minimal runtime input) to run the real ncurses game with fixed child args -n 1 -s 0, fresh HOME and XDG_CONFIG_HOME/XDG_DATA_HOME/XDG_STATE_HOME/XDG_CACHE_HOME below a private temporary directory, TERM=xterm, and a finite deterministic h/j/k/l movement sequence followed by q; require clean child exit and print exactly one stdout line GUIX_SMOKE_OK robotfindskitten. Acceptance: guix lint -L . robotfindskitten has no package-specific findings; offline guix build -L . --no-grafts succeeds with no opaque binary or network access; upstream autoreconf/configure/make/check/distcheck checks run where available and --check is left to the authorized Guix phase; the smoke proof uses artifact .goocastle/evidence/issue-487.png, checks meaningful gameplay state, uses fresh HOME/XDG, and verifies no store writes. Research could not run Guix builds because the host boundary explicitly provides no Guix daemon; that is an environment limitation, not an upstream build failure. ## 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": 717, "packageName": "robotfindskitten", "packageModulePath": "tay/packages/robotfindskitten.scm", "artifactPath": ".goocastle/evidence/issue-717.png", "runtime": { "executable": "robotfindskitten", "invocation": { "file": "robotfindskitten", "args": [ "--guix-smoke" ] }, "successMarker": "GUIX_SMOKE_OK robotfindskitten" } } ] } ``` <!-- goocastle-runtime-evidence-contract-end --> --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/717). Originally posted by [htayj](https://github.com/htayj) on 2026-09-12T06:51:03Z.
htayj commented 2026-09-12 07:28:48 +00:00 (Migrated from github.com)

Goocastle verified runtime evidence.

Runtime screenshot

Runtime receipt
  • Package: robotfindskitten
  • Safe package proof phase: safe-package-proof
  • Safe package proof argv: ["node","/opt/goocastle/bin/guix-package-proof.mjs","--package-name","robotfindskitten","--module-path","tay/packages/robotfindskitten.scm","--runtime-json","{&quot;executable&quot;:&quot;robotfindskitten&quot;,&quot;invocation&quot;:{&quot;file&quot;:&quot;robotfindskitten&quot;,&quot;args&quot;:[&quot;--guix-smoke&quot;]},&quot;successMarker&quot;:&quot;GUIX_SMOKE_OK robotfindskitten&quot;}"]
  • Screenshot phase: runtime-screenshot
  • Screenshot argv: ["sh",".goocastle/capture-guix-package-screenshot.sh"]
  • Runtime executable (Guix store/profile): /gnu/store/rllykw8szalksnbqjymbaavi4bxvy49h-robotfindskitten-3.0000000.726/bin/robotfindskitten
  • Runtime invocation: ["/gnu/store/rllykw8szalksnbqjymbaavi4bxvy49h-robotfindskitten-3.0000000.726/bin/robotfindskitten","--guix-smoke"]
  • Expected runtime invocation: ["robotfindskitten","--guix-smoke"]
  • Expected runtime marker: GUIX_SMOKE_OK robotfindskitten
  • Per-issue runtime contract: .goocastle/runtime-evidence-contracts.json (issue #717, SHA-256 48ed117cebe5fdf28aa9c00d8ded09bf6a4f6a178549519d914b0814adbefede)
  • Artifact path: .goocastle/evidence/issue-717.png
  • Artifact SHA-256: 4d2e4cda7a11d0cc2e16713b1b07180bd4c7223a9fb672ceb205251fba10b0c1
  • Artifact commit: 3f78ebcd759e4cd9bd1d7b67c6bdac0bb4a33365
  • Artifact size/format: 6192 bytes / png

Imported from GitHub comment. Originally posted by htayj on 2026-09-12T07:28:48Z.

<!-- goocastle-runtime-evidence:sequential-reviewer:717:1:4d2e4cda7a11d0cc2e16713b1b07180bd4c7223a9fb672ceb205251fba10b0c1 --> Goocastle verified runtime evidence. ![Runtime screenshot](https://github.com/htayj/guix-channel/blob/3f78ebcd759e4cd9bd1d7b67c6bdac0bb4a33365/.goocastle/evidence/issue-717.png?raw=1) <details><summary>Runtime receipt</summary> - Package: <code>robotfindskitten</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;robotfindskitten&quot;,&quot;--module-path&quot;,&quot;tay/packages/robotfindskitten.scm&quot;,&quot;--runtime-json&quot;,&quot;{\&quot;executable\&quot;:\&quot;robotfindskitten\&quot;,\&quot;invocation\&quot;:{\&quot;file\&quot;:\&quot;robotfindskitten\&quot;,\&quot;args\&quot;:[\&quot;--guix-smoke\&quot;]},\&quot;successMarker\&quot;:\&quot;GUIX_SMOKE_OK robotfindskitten\&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/rllykw8szalksnbqjymbaavi4bxvy49h-robotfindskitten-3.0000000.726/bin/robotfindskitten</code> - Runtime invocation: <code>[&quot;/gnu/store/rllykw8szalksnbqjymbaavi4bxvy49h-robotfindskitten-3.0000000.726/bin/robotfindskitten&quot;,&quot;--guix-smoke&quot;]</code> - Expected runtime invocation: <code>[&quot;robotfindskitten&quot;,&quot;--guix-smoke&quot;]</code> - Expected runtime marker: <code>GUIX_SMOKE_OK robotfindskitten</code> - Per-issue runtime contract: <code>.goocastle/runtime-evidence-contracts.json (issue #717, SHA-256 48ed117cebe5fdf28aa9c00d8ded09bf6a4f6a178549519d914b0814adbefede)</code> - Artifact path: <code>.goocastle/evidence/issue-717.png</code> - Artifact SHA-256: <code>4d2e4cda7a11d0cc2e16713b1b07180bd4c7223a9fb672ceb205251fba10b0c1</code> - Artifact commit: <code>3f78ebcd759e4cd9bd1d7b67c6bdac0bb4a33365</code> - Artifact size/format: <code>6192 bytes / png</code> </details> --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/717#issuecomment-5644467558). Originally posted by [htayj](https://github.com/htayj) on 2026-09-12T07:28:48Z.
htayj commented 2026-09-12 07:28:53 +00:00 (Migrated from github.com)

Completed by Goocastle


Imported from GitHub comment. Originally posted by htayj on 2026-09-12T07:28:53Z.

Completed by Goocastle --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/717#issuecomment-5644467931). Originally posted by [htayj](https://github.com/htayj) on 2026-09-12T07:28:53Z.
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#717
No description provided.