feat/harness!: drop the legacy install step, the pool generation is the only install #109

Merged
pti merged 1 commit from feat/harness-drop-legacy-install into main 2026-10-20 08:29:36 +02:00
Owner

Part of #107, item one of three, the pre-1.0 Phase 4 cutover. Breaking. wraptool harness install and update no longer run the harness's own installer into the legacy pool trees after realizing a generation. The Install recipe field on harness descriptors is gone together with the npm installer, Antigravity's curl pipe bash, which was the last one in the codebase, the two legacy installers, the per-source warn-instead-of-fail downgrade logic, the version pinning helper and the guix-absent special case, about 1300 lines. A realize failure now fails install and update the way sync already did, with the oci provisioning-image hint folded into the error, and a nil realize error is the guarantee that the host pointer is active because the orchestrator activates on success and reports activation failures through the same channel, so the defensive post-install check the first cut added was removed as unreachable after review. Every registry harness is pool-lockable, pinned by a new registry test. Eight tests that covered only the legacy installer are deleted and eleven converted from warn-and-fall-through to error assertions, every pool-state assertion kept, verified by the reviewer against each deleted body. Mutation making a realize failure warn again fails six tests. Docs in cli-reference, getting-started, platform-guix and terminology, design section 16 status, CLAUDE.md, CHANGELOG second Breaking bullet. Items two and three, the bin and lib layout cleanup and the feature description bump, follow as their own PRs. 🤖 Generated with Claude Code

Part of #107, item one of three, the pre-1.0 Phase 4 cutover. Breaking. wraptool harness install and update no longer run the harness's own installer into the legacy pool trees after realizing a generation. The Install recipe field on harness descriptors is gone together with the npm installer, Antigravity's curl pipe bash, which was the last one in the codebase, the two legacy installers, the per-source warn-instead-of-fail downgrade logic, the version pinning helper and the guix-absent special case, about 1300 lines. A realize failure now fails install and update the way sync already did, with the oci provisioning-image hint folded into the error, and a nil realize error is the guarantee that the host pointer is active because the orchestrator activates on success and reports activation failures through the same channel, so the defensive post-install check the first cut added was removed as unreachable after review. Every registry harness is pool-lockable, pinned by a new registry test. Eight tests that covered only the legacy installer are deleted and eleven converted from warn-and-fall-through to error assertions, every pool-state assertion kept, verified by the reviewer against each deleted body. Mutation making a realize failure warn again fails six tests. Docs in cli-reference, getting-started, platform-guix and terminology, design section 16 status, CLAUDE.md, CHANGELOG second Breaking bullet. Items two and three, the bin and lib layout cleanup and the feature description bump, follow as their own PRs. 🤖 Generated with Claude Code
feat(harness)!: drop the legacy install step, the pool generation is the only install
All checks were successful
Lint / lint (pull_request) Successful in 52s
Lint / sonarqube (pull_request) Has been skipped
f912224bfc
wraptool harness install, update and sync used to finish by running the
harness's own installer (npm for claude/opencode/pi, Antigravity's curl
pipe bash for agy) into the legacy pool bin/ and lib/ trees, after the
version-locked generation had already been realized and activated. Since
#108, wraptool up only ever runs the active generation, so that second
install produced a binary nothing uses, needed guix on the host for npm
harnesses, and forced a per-source rule set for when its failure could be
downgraded to a warning. Per the 1.0 decision record (release-1-0.md
§3.5 addendum), it goes.

The Descriptor.Install recipe field, npmInstall, agy's curl recipe and
every consumer are removed: legacyInstall, legacyInstallVersionLocked,
maybeInstallLocked, warnInsteadOfFailForRealizedGeneration,
legacyInstallCause, pinInstallVersion, offGuixInstallError, errGuixAbsent,
runInstallArgv, unmarkLegacyRemoved, poolOnly, requirePoolOnlyActive and
printRealizeWarning.
Every registry entry is pool-lockable, now enforced by a registry test,
so the install command's unpinned non-lockable branch is gone too.

A realize failure on install or update now fails the command, wrapped
with the harness name and, for the oci backend, the pinned provisioning
image hint that used to go into the warning (finishInstall). A nil
RealizeErr already guarantees an active host pointer, since
RealizeGeneration activates on success and repairActivation reports its
failures there, so the former pool-only active-generation check is
dropped rather than generalised. sync keeps its hard failure on realize
errors and no longer runs or mentions a host-side install for any
platform.

gc --legacy and the bin/ lib/ creation and exposure are unchanged here;
they are #107 items 2 and 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pti merged commit c9efc8d131 into main 2026-10-20 08:29:36 +02:00
pti deleted branch feat/harness-drop-legacy-install 2026-10-20 08:29:36 +02:00
Sign in to join this conversation.
No reviewers
No labels
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
pti/wraptool!109
No description provided.