Implement researched Guix package outcome for #162: [Guix packaging] sezanzeb/input-remapper #756

Closed
opened 2026-09-21 20:29:33 +00:00 by tay · 2 comments
Owner

Context

This delivery ticket was created from research issue #162 ([Guix packaging] sezanzeb/input-remapper).

The host-validated research finding follows:

Implement a new Guix package named input-remapper in guix/tay/packages/input-remapper.scm from canonical upstream git+https://github.com/sezanzeb/input-remapper at exact revision 3b519a18fc39c4d3b4b3074ca96fbcd46585a9ac. The local channel has no existing package or other origin matching this project. Source inspection at that revision identifies version 2.2.1 in pyproject.toml even though the commit is after release tag 2.2.1; retain the candidate commit and record its full hash. Upstream pyproject.toml declares license GPL-3.0-or-later and LICENSE contains the verbatim GNU GPL version 3 text, so use license:gpl3+ (the issue's GPL-3.0-only SPDX evidence is narrower than the authoritative project declaration). The commit has no submodules. Build is source-viable with pyproject-build-system, Python >=3.10, setuptools >=77.0.3, and propagated-inputs python-evdev, python-psutil, python-dasbus, python-pycairo, python-pygobject, python-pydantic, and python-packaging; gettext and pkg-config may be needed only if native/build metadata proves it. Package install remains confined to the store: do not use upstream's root installer. Install the four bin scripts, data assets, desktop/metainfo/icon files, D-Bus system policy, polkit action, and two udev rule files through Guix phases; hard-code store executables and paths as required. Add a search-path-specification or wrapper environment so the Python package and GObject typelibs resolve. Integrate runtime privilege without touching host configuration at build time by providing an etc systemd user/system service pointing ExecStart at store input-remapper-service with BusName inputremapper.Control and Type dbus, plus the D-Bus and polkit files; expose but do not activate udev rules or autostart. The implementation should explain that udev/systemd activation and /dev/input access remain host-administrator actions outside the package build. The Guix daemon was unavailable in this research environment, so no guix shell or package build was attempted; source/build metadata is the build evidence. Runtime smoke proof: install and run the installed executable input-remapper-control with exactly the arguments ["--symbol-names"] in an isolated environment; it exercises the real CLI, GLib, evdev constants, and keyboard-layout output without opening an input device, D-Bus service, polkit, udev, or host configuration. Assert single-line stdout contains KEY_A and exit status 0, then capture the required PNG at .goocastle/evidence/issue-162.png. Acceptance remains guix lint -L . input-remapper and guix build -L . input-remapper in an authorized daemon-backed 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": 756,
      "packageName": "input-remapper",
      "packageModulePath": "guix/tay/packages/input-remapper.scm",
      "artifactPath": ".goocastle/evidence/issue-756.png",
      "runtime": {
        "executable": "input-remapper-control",
        "invocation": {
          "file": "input-remapper-control",
          "args": [
            "--symbol-names"
          ]
        },
        "successMarker": "KEY_A"
      }
    }
  ]
}
<!-- goocastle-implementation-ticket:sequential-reviewer:162:1:implementation-ready --> ## Context This delivery ticket was created from research issue #162 ([Guix packaging] sezanzeb/input-remapper). The host-validated research finding follows: Implement a new Guix package named input-remapper in guix/tay/packages/input-remapper.scm from canonical upstream git+https://github.com/sezanzeb/input-remapper at exact revision 3b519a18fc39c4d3b4b3074ca96fbcd46585a9ac. The local channel has no existing package or other origin matching this project. Source inspection at that revision identifies version 2.2.1 in pyproject.toml even though the commit is after release tag 2.2.1; retain the candidate commit and record its full hash. Upstream pyproject.toml declares license GPL-3.0-or-later and LICENSE contains the verbatim GNU GPL version 3 text, so use license:gpl3+ (the issue's GPL-3.0-only SPDX evidence is narrower than the authoritative project declaration). The commit has no submodules. Build is source-viable with pyproject-build-system, Python >=3.10, setuptools >=77.0.3, and propagated-inputs python-evdev, python-psutil, python-dasbus, python-pycairo, python-pygobject, python-pydantic, and python-packaging; gettext and pkg-config may be needed only if native/build metadata proves it. Package install remains confined to the store: do not use upstream's root installer. Install the four bin scripts, data assets, desktop/metainfo/icon files, D-Bus system policy, polkit action, and two udev rule files through Guix phases; hard-code store executables and paths as required. Add a search-path-specification or wrapper environment so the Python package and GObject typelibs resolve. Integrate runtime privilege without touching host configuration at build time by providing an etc systemd user/system service pointing ExecStart at store input-remapper-service with BusName inputremapper.Control and Type dbus, plus the D-Bus and polkit files; expose but do not activate udev rules or autostart. The implementation should explain that udev/systemd activation and /dev/input access remain host-administrator actions outside the package build. The Guix daemon was unavailable in this research environment, so no guix shell or package build was attempted; source/build metadata is the build evidence. Runtime smoke proof: install and run the installed executable input-remapper-control with exactly the arguments ["--symbol-names"] in an isolated environment; it exercises the real CLI, GLib, evdev constants, and keyboard-layout output without opening an input device, D-Bus service, polkit, udev, or host configuration. Assert single-line stdout contains KEY_A and exit status 0, then capture the required PNG at .goocastle/evidence/issue-162.png. Acceptance remains guix lint -L . input-remapper and guix build -L . input-remapper in an authorized daemon-backed 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": 756, "packageName": "input-remapper", "packageModulePath": "guix/tay/packages/input-remapper.scm", "artifactPath": ".goocastle/evidence/issue-756.png", "runtime": { "executable": "input-remapper-control", "invocation": { "file": "input-remapper-control", "args": [ "--symbol-names" ] }, "successMarker": "KEY_A" } } ] } ``` <!-- goocastle-runtime-evidence-contract-end -->
Author
Owner

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' input-remapper '--module-path' guix/tay/packages/input-remapper.scm '--runtime-json' '{"executable":"input-remapper-control","invocation":{"file":"input-remapper-control","args":["--symbol-names"]},"successMarker":"KEY_A"}'
Exit status: 1
Final failure lines:
[stderr] Guix package proof failed: target module is missing or not a regular file: /workspace/guix/tay/packages/input-remapper.scm

<!-- goocastle-repair-blocked:756: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' input-remapper '--module-path' guix/tay/packages/input-remapper.scm '--runtime-json' '{"executable":"input-remapper-control","invocation":{"file":"input-remapper-control","args":["--symbol-names"]},"successMarker":"KEY_A"}' Exit status: 1 Final failure lines: [stderr] Guix package proof failed: target module is missing or not a regular file: /workspace/guix/tay/packages/input-remapper.scm
Author
Owner

Delivered in signed, Guix-authenticated commit c8964b52578859f3d5701d95dfc8dddfdfc1e2ec.

Pinned source 3b519a18fc39c4d3b4b3074ca96fbcd46585a9ac, version2.2.1-0.3b519a1, GPL3-or-later per authoritative metadata. Source-built Python/translations; store-pinned Python/GI and helper paths. D-Bus/polkit/systemd/udev assets supplied but not activated. Autoload desktop is an inert template in share/input-remapper/xdg/autostart, not active etc/xdg. Host privileged pkexec remains explicit.

Main OMP gates passed: local build, --check reproducibility, offline lint, source inventory and make check-input-remapper. Output /gnu/store/cs44g8fangk1kgx70z3vclyjk93vn16b-input-remapper-2.2.1-0.3b519a1. Upstream unit suite525 tests,5 exclusions (one system D-Bus, four wall-clock bounds), documented rather than hidden.

Installed input-remapper-control --symbol-names in network-disabled fresh HOME/XDG returned641 actual symbols including KEY_A, without devices/service activation. Private state empty, installed notices/layout checked, output NAR unchanged/read-only. Independent audit no findings after inert-autostart correction.

__omp_shell("Verbatim symbol output")

PNG SHA256 303f35cbee3071cf4eee2d0c4f1b3f62bd736a470003298756ffdb939d6b9551. Image is verbatim contiguous stdout around KEY_A, not a generated success caption. No live GUI/device remapping, host service or profile changes; direct OMP proof, no Goocastle runner.

Delivered in signed, Guix-authenticated commit `c8964b52578859f3d5701d95dfc8dddfdfc1e2ec`. Pinned source `3b519a18fc39c4d3b4b3074ca96fbcd46585a9ac`, version2.2.1-0.3b519a1, GPL3-or-later per authoritative metadata. Source-built Python/translations; store-pinned Python/GI and helper paths. D-Bus/polkit/systemd/udev assets supplied but not activated. Autoload desktop is an inert template in share/input-remapper/xdg/autostart, not active etc/xdg. Host privileged pkexec remains explicit. Main OMP gates passed: local build, `--check` reproducibility, offline lint, source inventory and make check-input-remapper. Output `/gnu/store/cs44g8fangk1kgx70z3vclyjk93vn16b-input-remapper-2.2.1-0.3b519a1`. Upstream unit suite525 tests,5 exclusions (one system D-Bus, four wall-clock bounds), documented rather than hidden. Installed `input-remapper-control --symbol-names` in network-disabled fresh HOME/XDG returned641 actual symbols including KEY_A, without devices/service activation. Private state empty, installed notices/layout checked, output NAR unchanged/read-only. Independent audit no findings after inert-autostart correction. __omp_shell("[Verbatim symbol output](https://192.168.7.121/tay/guix-channel/raw/commit/c8964b52578859f3d5701d95dfc8dddfdfc1e2ec/.goocastle/evidence/issue-756.png)") PNG SHA256 `303f35cbee3071cf4eee2d0c4f1b3f62bd736a470003298756ffdb939d6b9551`. Image is verbatim contiguous stdout around KEY_A, not a generated success caption. No live GUI/device remapping, host service or profile changes; direct OMP proof, no Goocastle runner.
tay closed this issue 2026-09-29 23:34:23 +00:00
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#756
No description provided.