Implement researched Guix package outcome for #73: [Guix packaging] Interlisp/medley #623

Open
opened 2026-08-26 09:02:41 +00:00 by htayj · 2 comments
htayj commented 2026-08-26 09:02:41 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #73 ([Guix packaging] Interlisp/medley).

The host-validated research finding follows:

Package name should be interlisp-medley in a new tay/packages/interlisp-medley.scm module. Canonical upstream is https://github.com/Interlisp/medley; use the fixed Medley tag medley-260810-634d092e_260319-9259716e and commit 634d092ed802314ada447878418686fbfeeb3048, with git-fetch recursive hash 1d3dmhwcbwqi060679a9dsxsw45r37ppjskfn3a6n8d61h83bl95. Its required VM is the independently fetched canonical origin https://github.com/Interlisp/maiko at fixed tag maiko-260319-9259716e and commit 9259716e9a797fefcdb59b6418b00f434c48dc40, with recursive hash 1sd8w4rfjmc485qkg8jm0qv7hfcfy6nvxaa240sin03fjb1w7992. These are the only two independently fetched source origins: both exact trees have no gitlink entries and Medley has an empty .gitmodules file; do not fetch LOOPS, Notecards, or the apps-stage Notecards origin. Revision-specific license evidence is Medley LICENSE at github.com/Interlisp/medley@634d092ed8/LICENSE, which is an explicit MIT grant naming Interlisp.org and acknowledging Xerox, Venue, John Sybalsky, and other contributors, and Maiko LICENSE plus NOTICE at github.com/Interlisp/maiko@9259716e9a/LICENSE and github.com/Interlisp/maiko@9259716e9a/NOTICE, where the NOTICE explicitly grants permission from the Venue-rights holder to release Venue works under MIT. Maiko bin/config.guess and bin/config.sub at that same fixed revision carry the FSF GPLv3 plus Autoconf exception and are build-only. The source is legally packageable only with historical notices preserved and with the free runtime scope kept narrow: include Medley source/runtime trees needed by full.sysout, clos, rooms, greetfiles, scripts, library, lispusers, sources, internal runtime files, loadups/full.sysout and loadups/lisp.sysout, fonts/medleydisplayfonts, fonts/postscriptfonts/c0, and unicode/xerox text mappings; omit unicode/vendors, unicode/eastasia, unicode/iso8859, optional/random font trees, the unknown-provenance unicode/xerox XCCStoUni binary and Xerox PDF, and Maiko legacy/proprietary build metadata such as bin/copyright. The Apple and IBM Unicode readmes provide no permissive redistribution grant, but those trees are not needed by the default full loadup; do not copy them. Install both upstream license files and the Maiko NOTICE, while retaining file-level historical copyright notices in shipped source/assets. Local coverage contains only the non-executable interlisp-medley-source copy snapshot in tay/packages/starred-i-m.scm; the local channel and the supplied coverage review found no equivalent installable package. Use gnu-build-system for the top-level custom pipeline, a fixed Maiko origin input, and fixed Medley git-fetch source. Build Maiko first with cmake and ninja using MAIKO_DISPLAY_X11=ON, MAIKO_DISPLAY_SDL=OFF, MAIKO_NETWORK_TYPE=NONE, gcc-toolchain, cmake, ninja, pkg-config, libbsd, libx11, and the required shell tools; stage lde, ldex, ldeinit under a Maiko tree containing linux.x86_64 and bin/osversion plus bin/machinetype. The source BUILDING.md and loadup scripts establish the source-build path: run Xvfb on a private display with -nolisten tcp, set DISPLAY, MAIKODIR, and a writable LOADUP_OUTDIR, then run scripts/loadups/loadup-all.sh -f -d to execute the starter.sysout bootstrap through ldeinit and produce full.sysout; do not run the apps target because it requires the omitted Notecards origin, and do not fetch anything during build. Install a read-only Medley tree below libexec/medley with the generated loadups and required assets, install Maiko below libexec/maiko, and provide bin/medley that sets or passes MEDLEYDIR to libexec/medley and --maikodir to libexec/maiko before execing scripts/medley/medley.command --full. The launcher must leave HOME and LOGINDIR user-controlled so upstream creates writable per-user il/vmem state, must work with an existing X display, and must not enable Maiko networking. Specific smoke proof: in a network-disabled test environment create a temporary HOME and REM.CM containing a sentinel print followed by IL:LOGOUT T 0, start Xvfb :99 -screen 0 1024x768x24 -nolisten tcp, invoke bin/medley with DISPLAY=:99, --config -, --full, --greet -, --id guix-smoke, --logindir /il, and the absolute REM.CM path, then require exit status 0, the sentinel in the captured output/dribble, and creation of the run's lisp_guix-smoke.virtualmem under the temporary user directory; this proves the installed wrapper selects full.sysout, Maiko, local runtime assets, and writable user state without network. Acceptance is guix lint -L. interlisp-medley followed by guix build -L. interlisp-medley and the isolated smoke above. Those commands were not run here and are not package proof because the workspace lacks /var/guix/daemon-socket/socket; this is an implementation brief, not a claim that the package already exists or passes.

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-26T09:02:41Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:73:1:implementation-ready --> ## Context This delivery ticket was created from research issue #73 ([Guix packaging] Interlisp/medley). The host-validated research finding follows: Package name should be interlisp-medley in a new tay/packages/interlisp-medley.scm module. Canonical upstream is https://github.com/Interlisp/medley; use the fixed Medley tag medley-260810-634d092e_260319-9259716e and commit 634d092ed802314ada447878418686fbfeeb3048, with git-fetch recursive hash 1d3dmhwcbwqi060679a9dsxsw45r37ppjskfn3a6n8d61h83bl95. Its required VM is the independently fetched canonical origin https://github.com/Interlisp/maiko at fixed tag maiko-260319-9259716e and commit 9259716e9a797fefcdb59b6418b00f434c48dc40, with recursive hash 1sd8w4rfjmc485qkg8jm0qv7hfcfy6nvxaa240sin03fjb1w7992. These are the only two independently fetched source origins: both exact trees have no gitlink entries and Medley has an empty .gitmodules file; do not fetch LOOPS, Notecards, or the apps-stage Notecards origin. Revision-specific license evidence is Medley LICENSE at https://github.com/Interlisp/medley/blob/634d092ed802314ada447878418686fbfeeb3048/LICENSE, which is an explicit MIT grant naming Interlisp.org and acknowledging Xerox, Venue, John Sybalsky, and other contributors, and Maiko LICENSE plus NOTICE at https://github.com/Interlisp/maiko/blob/9259716e9a797fefcdb59b6418b00f434c48dc40/LICENSE and https://github.com/Interlisp/maiko/blob/9259716e9a797fefcdb59b6418b00f434c48dc40/NOTICE, where the NOTICE explicitly grants permission from the Venue-rights holder to release Venue works under MIT. Maiko bin/config.guess and bin/config.sub at that same fixed revision carry the FSF GPLv3 plus Autoconf exception and are build-only. The source is legally packageable only with historical notices preserved and with the free runtime scope kept narrow: include Medley source/runtime trees needed by full.sysout, clos, rooms, greetfiles, scripts, library, lispusers, sources, internal runtime files, loadups/full.sysout and loadups/lisp.sysout, fonts/medleydisplayfonts, fonts/postscriptfonts/c0, and unicode/xerox text mappings; omit unicode/vendors, unicode/eastasia, unicode/iso8859, optional/random font trees, the unknown-provenance unicode/xerox XCCStoUni binary and Xerox PDF, and Maiko legacy/proprietary build metadata such as bin/copyright. The Apple and IBM Unicode readmes provide no permissive redistribution grant, but those trees are not needed by the default full loadup; do not copy them. Install both upstream license files and the Maiko NOTICE, while retaining file-level historical copyright notices in shipped source/assets. Local coverage contains only the non-executable interlisp-medley-source copy snapshot in tay/packages/starred-i-m.scm; the local channel and the supplied coverage review found no equivalent installable package. Use gnu-build-system for the top-level custom pipeline, a fixed Maiko origin input, and fixed Medley git-fetch source. Build Maiko first with cmake and ninja using MAIKO_DISPLAY_X11=ON, MAIKO_DISPLAY_SDL=OFF, MAIKO_NETWORK_TYPE=NONE, gcc-toolchain, cmake, ninja, pkg-config, libbsd, libx11, and the required shell tools; stage lde, ldex, ldeinit under a Maiko tree containing linux.x86_64 and bin/osversion plus bin/machinetype. The source BUILDING.md and loadup scripts establish the source-build path: run Xvfb on a private display with -nolisten tcp, set DISPLAY, MAIKODIR, and a writable LOADUP_OUTDIR, then run scripts/loadups/loadup-all.sh -f -d <staged-maiko> to execute the starter.sysout bootstrap through ldeinit and produce full.sysout; do not run the apps target because it requires the omitted Notecards origin, and do not fetch anything during build. Install a read-only Medley tree below libexec/medley with the generated loadups and required assets, install Maiko below libexec/maiko, and provide bin/medley that sets or passes MEDLEYDIR to libexec/medley and --maikodir to libexec/maiko before execing scripts/medley/medley.command --full. The launcher must leave HOME and LOGINDIR user-controlled so upstream creates writable per-user il/vmem state, must work with an existing X display, and must not enable Maiko networking. Specific smoke proof: in a network-disabled test environment create a temporary HOME and REM.CM containing a sentinel print followed by IL:LOGOUT T 0, start Xvfb :99 -screen 0 1024x768x24 -nolisten tcp, invoke bin/medley with DISPLAY=:99, --config -, --full, --greet -, --id guix-smoke, --logindir <temporary-home>/il, and the absolute REM.CM path, then require exit status 0, the sentinel in the captured output/dribble, and creation of the run's lisp_guix-smoke.virtualmem under the temporary user directory; this proves the installed wrapper selects full.sysout, Maiko, local runtime assets, and writable user state without network. Acceptance is guix lint -L. interlisp-medley followed by guix build -L. interlisp-medley and the isolated smoke above. Those commands were not run here and are not package proof because the workspace lacks /var/guix/daemon-socket/socket; this is an implementation brief, not a claim that the package already exists or passes. ## 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/623). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T09:02:41Z.
htayj commented 2026-08-26 22:15:49 +00:00 (Migrated from github.com)

Blocked by the authoritative safe-package proof.

guix build -L . --no-grafts interlisp-medley builds Maiko successfully, starts the private Xvfb loadup, then Medley crashes during loadup-init with *Error* Segmentation fault at address (nil). Its error path then attempts freopen("/dev/tty", ...), which is unavailable in Guix builders. A writable build-only HOME was verified and committed (a54ddc4) but does not resolve the underlying loadup crash.

The signed implementation branch is preserved at goocastle/sequential-reviewer/issue-623-1787779436251-1; future work needs an upstream-compatible noninteractive loadup strategy or a source-level fix for the crash before this package can be delivered.


Imported from GitHub comment. Originally posted by htayj on 2026-08-26T22:15:49Z.

Blocked by the authoritative safe-package proof. `guix build -L . --no-grafts interlisp-medley` builds Maiko successfully, starts the private Xvfb loadup, then Medley crashes during `loadup-init` with `*Error* Segmentation fault at address (nil)`. Its error path then attempts `freopen("/dev/tty", ...)`, which is unavailable in Guix builders. A writable build-only HOME was verified and committed (`a54ddc4`) but does not resolve the underlying loadup crash. The signed implementation branch is preserved at `goocastle/sequential-reviewer/issue-623-1787779436251-1`; future work needs an upstream-compatible noninteractive loadup strategy or a source-level fix for the crash before this package can be delivered. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/623#issuecomment-5431750494). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T22:15:49Z.
htayj commented 2026-08-29 22:07:51 +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: 23e1154b73c9a7d7760dba305ea47884056615d1f5e3d44e2e9708ecd6b59c20

Bounded audit evidence:

  • no fenced JSON runtime-evidence handoff was found under a Runtime evidence heading or bounded legacy runtime-evidence section

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-08-29T22:07:51Z.

<!-- goocastle-runtime-contract-recovery:v1:guix-package-quality-gates:623:manual-repair:23e1154b73c9a7d7760dba305ea47884056615d1f5e3d44e2e9708ecd6b59c20 --> 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: `23e1154b73c9a7d7760dba305ea47884056615d1f5e3d44e2e9708ecd6b59c20` Bounded audit evidence: - no fenced JSON runtime-evidence handoff was found under a Runtime evidence heading or bounded legacy runtime-evidence section 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/623#issuecomment-5465160155). Originally posted by [htayj](https://github.com/htayj) on 2026-08-29T22:07:51Z.
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#623
No description provided.