Implement researched Guix package outcome for #127: [Guix packaging] houmain/keymapper #747
Labels
No labels
accessibility
bug
category:ai-tool
category:browser
category:command-line-tool
category:compiler-toolchain
category:desktop-application
category:developer-tool
category:editor-extension
category:emulator
category:font
category:game
category:input-accessibility
category:library-framework
category:mud-client
category:multimedia
category:networking-client
category:programming-language
category:roguelike
category:storage-media-tool
category:system-tool
category:terminal-application
complexity:high
complexity:low
complexity:medium
difficulty:blocked
difficulty:easy
difficulty:hard
difficulty:moderate
documentation
duplicate
enhancement
good first issue
gooflow:guix-package-high
gooflow:guix-package-moderate
gooflow:guix-package-quality-gates
gooflow:guix-research-disposition
gooflow:guix-runtime-evidence-refresh
help wanted
invalid
kind:disposition
kind:packaging
needs:license-investigation
priority:quick
question
ready-for-agent
state:available-elsewhere
state:blocked
state:deferred
state:out-of-scope
state:ready
state:research
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tay/guix-channel#747
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
This delivery ticket was created from research issue #127 ([Guix packaging] houmain/keymapper).
The host-validated research finding follows:
Delivery is ready for the ordinary upstream package, not an update to an existing installed package: the local channel has only source-only metadata (define-public houmain-keymapper-source at guix/tay/packages/starred-d-h.scm:373) and no public keymapper/keymapperd/keymapperctl package. Pin canonical Git origin https://github.com/houmain/keymapper at revision 2ddd5cc3957f5faabb5232c13cb0c18f86d933cf, the exact commit for upstream release 5.6.0, verified by fixed-revision fetch and tag ancestry. The main tree has GPLv3 LICENSE at this revision; separately vendored test-only src/test/catch.hpp is Catch v2.13.8 with an explicit Boost-1.0 distribution grant at the same revision. Therefore declare (license (list license:gpl3+ license:boost1.0)). The local repository convention does not include an upstream license-list exception, so the approved license list must supply its standard Boost spelling before lint. Implement in guix/tay/packages/keymapper.scm with package name keymapper, module name keymapper, and description/source strings sourced from the declared GitHub origin or homepage rather than copied upstream text. Use cmake-build-system with ENABLE_TEST=ON and RUN_TESTS_WITH_ASAN=OFF; build all three executables and test-keymapper, then run the test binary with --durations yes in the check phase without uinput or physical-device access. Build dependencies are cmake, ninja, gcc-toolchain, pkg-config; inputs/propagated-inputs should include libusb, libudev/eudev, dbus, glib, gtk+ and libayatana-appindicator for tray support, plus libx11, libx11-xcb, libxkbcommon and libxkbcommon-x11 for X11/xkbcommon, and wayland, wayland-protocols, libxkbcommon for Wayland support. Explicitly preserve conditional upstream handling by disabling optional integrations only when they cannot be declared cleanly, instead of relying on opaque host discovery. Install upstream's intended binaries and desktop integration files, but do not install a global udev rule or require build-time device access: wrap keymapper/keymapperd so their graphical/device runtime dependencies resolve, keep authorization explicit at user runtime, and package keymapperctl directly. The deterministic non-privileged runtime proof uses installed keymapperctl --print Goocastle-local --result. Upstream source at src/control/main.cpp lines 182-190 prints the requested string locally and the accumulated result without connecting before processing requests, so it emits exactly Goocastle-local and exits 0. Separately assert keymapper --check --no-notify --config exits 0. Capture the required .goocastle/evidence/issue-127.png using the same executable and argv. Research did not run daemon-backed guix lint/build because the host boundary prohibits Guix use; this is an evidence-limited implementation brief, not a package proof.
Acceptance criteria
Runtime evidence contract
Implementation workflow:
guix-package-quality-gatesReviewed contract file:
.goocastle/runtime-evidence-contracts.jsonRequired proof phase:
safe-package-proof; screenshot phase:runtime-screenshotEvidence adapter:
github-issue-commentCopy this reviewed contract into the named file before running the package proof workflow.
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' keymapper '--module-path' guix/tay/packages/keymapper.scm '--runtime-json' '{"executable":"keymapperctl","invocation":{"file":"keymapperctl","args":["--print","Goocastle-local","--result"]},"successMarker":"Goocastle-local"}'
Exit status: 1
Final failure lines:
[stderr] Guix package proof failed: target module is missing or not a regular file: /workspace/guix/tay/packages/keymapper.scm
Delivered in signed, Guix-authenticated commit
cc1c75a45c4244ce382fbc2c56545cc478b117c4.Source pin
2ddd5cc3957f5faabb5232c13cb0c18f86d933cfis two commits after5.6.0, packaged as5.6.0-0.2ddd5cc. Source license verified GPL3-only (not +), Boost test framework and HPND Wayland protocol. Binaries keymapper/keymapperd/keymapperctl plus store-aware integration files. Autostart is an inert user-copied template under share/keymapper/xdg/autostart; no udev rules, services or autostart activated.Main OMP gates: local build,4326 assertions in201 upstream tests,
--checkreproducibility, offline lint, source inventory and make check-keymapper passed. Final output/gnu/store/4k11pk9vfrh7wa2jiy2d5bv95afj78qb-keymapper-5.6.0-0.2ddd5cc. Earlier compiler SIGTERM under full swap was resolved with serialized one-core retry, not by disabling tests.Fresh HOME/XDG, clear environment, private network/PID namespaces: valid config accepted, malformed config rejected with exact located error and nonzero exit; no daemon/device/session access, immutable NAR unchanged. Independent review findings fixed and rereviewed clean (inert autostart and effective negative assertions).
Research correction: keymapperctl --print connects first and hangs without a client, and --result appends0. Replaced impossible safe contract with real
keymapper --check --no-notify --config valid.conf, generated fixture in private cwd, markerThe configuration is valid. No program semantics changed to fake a marker.__omp_shell("Actual config checker")
PNG SHA256
bbd9ae4d42c7cf454464c682cedcd394df010986d6713f389255ac4b7bdd595e. Direct OMP PTY/xterm/Xvfb capture, no Goocastle runner. No user profile or physical input mapping changed.