Implement researched Guix package outcome for #41: [Guix packaging] aap/blincolnlights #605

Closed
opened 2026-08-25 12:32:18 +00:00 by htayj · 1 comment
htayj commented 2026-08-25 12:32:18 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #41 ([Guix packaging] aap/blincolnlights).

The host-validated research finding follows:

Canonical upstream is https://github.com/aap/blincolnlights at fixed revision 932d2cedfaec3368d6e1890b15645decc4815429 (commit date 2026-08-14; use Guix version 0-932d2ce, git-fetch with recursive? #f; the locally audited non-recursive checkout hash is 1dq8h2y8hc7avszsb36b5war8cahkiyyig3z1fx7f1fhxb6246s9). Upstream README at github.com/aap/blincolnlights@932d2cedfa/README.md documents three SDL virtual panels (Blincolnlights 18, PDP-1, Whirlwind), host emulators for Whirlwind, TX-0, PDP-1, and PDP-5, and mmap panel files; the root Makefile at github.com/aap/blincolnlights@932d2cedfa/Makefile also confirms that the default build mixes hardware drivers with host targets, so do not invoke root make. The root LICENSE at github.com/aap/blincolnlights@932d2cedfa/LICENSE is MIT, matching Guix license:expat; the selected host-side files do not require the Lua gitlink or Raspberry Pi code, so the source is legally redistributable and statically source-buildable with GNU C, libc, pthread, and math plus SDL2 for PDP-1 audio and SDL2 plus SDL2_image for the three virtual panels. No installable equivalent exists in this channel: tay/packages/larsbrinkhoff-a-f.scm:25 contains only the older source-only preservation package at 660f37803bd3c7ff8c3e24154c7d9cc7f29c2d34, generated by the copy-only helper in tay/packages/source-snapshot.scm; it is not the pinned revision and does not build or install emulators. Add a new module tay/packages/blincolnlights.scm with module (tay packages blincolnlights), package blincolnlights, gnu-build-system, native input pkg-config, and SDL2/SDL2_image inputs; use an explicit custom build phase or direct compiler invocations because the upstream Makefiles hard-code cc and library flags. Build and install these exact host artifacts: vpanel_b18/panel_b18 as blincolnlights-panel-b18, vpanel_pdp1/panel_pdp1 as blincolnlights-panel-pdp1, vpanel_whirlwind/panel_whirlwind as blincolnlights-panel-whirlwind, pdp1/pdp1 and pdp1_b18 as blincolnlights-pdp1 and blincolnlights-pdp1-b18, pdp5/pdp5 as blincolnlights-pdp5, tx0/tx0_pdp1 and tx0_b18 as blincolnlights-tx0-pdp1 and blincolnlights-tx0-b18, whirlwind/whirlwind and whirlwind_b18 as blincolnlights-whirlwind and blincolnlights-whirlwind-b18, and tools/mkptyfl plus tools/mkptyfio as support utilities. Exclude panel_b18, panel_pidp1, panel_pidp10, panel_pidp1_user, panel_pidp1_kernel, pinctrl, gpio.c, vpanel_pdp6, pdp6, pdp_periph, tapevis, and netmem_cache; those are hardware, Raspberry Pi, unvendored-Lua, peripheral, or out-of-scope paths. Install the PDP-1 maindec and tapes under share/blincolnlights/pdp1 and add the package-owned alias tapes/dpys5.rim -> tapes/ddt.rim: pinned pdp1/main.c:322-325 opens the absent relative default tapes/dpys5.rim even though ddt.rim is present. Each host-emulator launcher must create or use ${XDG_STATE_HOME:-$HOME/.local/state}/blincolnlights/, symlink the read-only packaged data there, cd to that writable directory before exec so coremem and punch.out never target the Guix store, and preserve all user arguments; virtual-panel launchers may exec directly because their PNG assets are compiled into the binaries. The shared panel paths are hard-coded as /tmp/b18_panel, /tmp/pdp1_panel, and /tmp/whirlwind_panel in common/panel code, and the emulators expose fixed TCP services documented by the README (PDP-1 1040-1043 and 3400-3401; PDP-5 1550), so document single-user/port-collision behavior and do not claim network isolation. Acceptance must be exact and bounded: after the definition exists, run guix lint -L. blincolnlights and guix build -L. blincolnlights; then create a fresh HOME and XDG_STATE_HOME, remove only the test-owned /tmp/pdp1_panel with a trap, run xvfb-run -a with SDL_VIDEODRIVER=x11, start blincolnlights-panel-pdp1, wait until /tmp/pdp1_panel exists and is nonempty, start blincolnlights-pdp5, require both processes to remain alive for at least two seconds, verify the PDP-5 state directory receives writable runtime state after clean termination, and assert neither log reports cannot find operator panel before cleaning up both processes and the shared file. This is a delivery plan, not a claim that Guix lint/build or the smoke has already passed.

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.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-25T12:32:18Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:41:1:implementation-ready --> ## Context This delivery ticket was created from research issue #41 ([Guix packaging] aap/blincolnlights). The host-validated research finding follows: Canonical upstream is https://github.com/aap/blincolnlights at fixed revision 932d2cedfaec3368d6e1890b15645decc4815429 (commit date 2026-08-14; use Guix version 0-932d2ce, git-fetch with recursive? #f; the locally audited non-recursive checkout hash is 1dq8h2y8hc7avszsb36b5war8cahkiyyig3z1fx7f1fhxb6246s9). Upstream README at https://github.com/aap/blincolnlights/blob/932d2cedfaec3368d6e1890b15645decc4815429/README.md documents three SDL virtual panels (Blincolnlights 18, PDP-1, Whirlwind), host emulators for Whirlwind, TX-0, PDP-1, and PDP-5, and mmap panel files; the root Makefile at https://github.com/aap/blincolnlights/blob/932d2cedfaec3368d6e1890b15645decc4815429/Makefile also confirms that the default build mixes hardware drivers with host targets, so do not invoke root make. The root LICENSE at https://github.com/aap/blincolnlights/blob/932d2cedfaec3368d6e1890b15645decc4815429/LICENSE is MIT, matching Guix license:expat; the selected host-side files do not require the Lua gitlink or Raspberry Pi code, so the source is legally redistributable and statically source-buildable with GNU C, libc, pthread, and math plus SDL2 for PDP-1 audio and SDL2 plus SDL2_image for the three virtual panels. No installable equivalent exists in this channel: tay/packages/larsbrinkhoff-a-f.scm:25 contains only the older source-only preservation package at 660f37803bd3c7ff8c3e24154c7d9cc7f29c2d34, generated by the copy-only helper in tay/packages/source-snapshot.scm; it is not the pinned revision and does not build or install emulators. Add a new module tay/packages/blincolnlights.scm with module (tay packages blincolnlights), package blincolnlights, gnu-build-system, native input pkg-config, and SDL2/SDL2_image inputs; use an explicit custom build phase or direct compiler invocations because the upstream Makefiles hard-code cc and library flags. Build and install these exact host artifacts: vpanel_b18/panel_b18 as blincolnlights-panel-b18, vpanel_pdp1/panel_pdp1 as blincolnlights-panel-pdp1, vpanel_whirlwind/panel_whirlwind as blincolnlights-panel-whirlwind, pdp1/pdp1 and pdp1_b18 as blincolnlights-pdp1 and blincolnlights-pdp1-b18, pdp5/pdp5 as blincolnlights-pdp5, tx0/tx0_pdp1 and tx0_b18 as blincolnlights-tx0-pdp1 and blincolnlights-tx0-b18, whirlwind/whirlwind and whirlwind_b18 as blincolnlights-whirlwind and blincolnlights-whirlwind-b18, and tools/mkptyfl plus tools/mkptyfio as support utilities. Exclude panel_b18, panel_pidp1, panel_pidp10, panel_pidp1_user, panel_pidp1_kernel, pinctrl, gpio.c, vpanel_pdp6, pdp6, pdp_periph, tapevis, and netmem_cache; those are hardware, Raspberry Pi, unvendored-Lua, peripheral, or out-of-scope paths. Install the PDP-1 maindec and tapes under share/blincolnlights/pdp1 and add the package-owned alias tapes/dpys5.rim -> tapes/ddt.rim: pinned pdp1/main.c:322-325 opens the absent relative default tapes/dpys5.rim even though ddt.rim is present. Each host-emulator launcher must create or use ${XDG_STATE_HOME:-$HOME/.local/state}/blincolnlights/<program>, symlink the read-only packaged data there, cd to that writable directory before exec so coremem and punch.out never target the Guix store, and preserve all user arguments; virtual-panel launchers may exec directly because their PNG assets are compiled into the binaries. The shared panel paths are hard-coded as /tmp/b18_panel, /tmp/pdp1_panel, and /tmp/whirlwind_panel in common/panel code, and the emulators expose fixed TCP services documented by the README (PDP-1 1040-1043 and 3400-3401; PDP-5 1550), so document single-user/port-collision behavior and do not claim network isolation. Acceptance must be exact and bounded: after the definition exists, run guix lint -L. blincolnlights and guix build -L. blincolnlights; then create a fresh HOME and XDG_STATE_HOME, remove only the test-owned /tmp/pdp1_panel with a trap, run xvfb-run -a with SDL_VIDEODRIVER=x11, start blincolnlights-panel-pdp1, wait until /tmp/pdp1_panel exists and is nonempty, start blincolnlights-pdp5, require both processes to remain alive for at least two seconds, verify the PDP-5 state directory receives writable runtime state after clean termination, and assert neither log reports cannot find operator panel before cleaning up both processes and the shared file. This is a delivery plan, not a claim that Guix lint/build or the smoke has already passed. ## 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. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/605). Originally posted by [htayj](https://github.com/htayj) on 2026-08-25T12:32:18Z.
htayj commented 2026-08-26 05:32:04 +00:00 (Migrated from github.com)

Rebased the verified branch onto current master, restored the concurrent Apout Makefile target that the textual conflict resolution initially dropped, and reran the safe package proof. Merged and pushed as 2b3829e.


Imported from GitHub comment. Originally posted by htayj on 2026-08-26T05:32:04Z.

Rebased the verified branch onto current master, restored the concurrent Apout Makefile target that the textual conflict resolution initially dropped, and reran the safe package proof. Merged and pushed as 2b3829e. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/605#issuecomment-5421044765). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T05:32:04Z.
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#605
No description provided.