Conversation
beebauman
enabled auto-merge
September 3, 2026 04:57
A clean macOS host with no Homebrew could not run `yoke qa browser setup`: the setup path shelled out to `brew install node` and, finding no Homebrew, exited 2 before materializing the runtime or Chromium. That made the supported browser-recovery path depend on developer-machine knowledge and blocked fresh-host QA entirely. Yoke now owns the toolchain. `yoke_cli.browser_node_toolchain` resolves a Node 18+ with npm already on PATH, else the pinned release already unpacked under ~/.yoke/node/<version>/, else a checksum-verified download of node-v24.20.0 from nodejs.org/dist. Every browser process runs against that one resolved toolchain with its bin directory leading PATH, because npm and npx are `#!/usr/bin/env node` scripts and Playwright spawns further Node processes of its own: daemon start on both the harness and core paths, `npm install`, the Chromium probe, `npx playwright install`, and the sign-in window. The Homebrew path is gone. Every refusal names a code and the operator action that clears it (node_platform_unsupported, node_download_failed, node_archive_digest_mismatch, node_archive_unusable, node_provisioned_but_unusable), in both the text message and the --json payload, and `yoke qa browser status` reports the resolved Node version and whether it came from the host or from Yoke. The shared external-artifact fetch gateway moves from yoke_core to yoke_cli: yoke-harness and yoke-cli sit below yoke-core and cannot import it, and yoke_cli is the declared home of shared client transport substrate. The architecture model's external_artifact_fetch approved_modules follows. Verified against a clean-host simulation (isolated machine home, PATH with neither node nor brew): setup downloaded and checksum-verified v24.20.0, ran npm install through it, and started the daemon; status reported "node: ready (v24.20.0) [managed]" with chromium ready; a rerun reported no prerequisite actions and an already-running daemon. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The builder stage runs one module straight from the source tree before any wheel exists, so the interpreter resolves its imports from the PYTHONPATH the Dockerfile spells out. That list named only contracts and core, so moving the external-artifact fetch gateway into yoke-cli left the bootstrap unable to import it and failed the image build with ModuleNotFoundError. yoke-core declares yoke-contracts, yoke-cli, and yoke-harness as dependencies, so listing every split package makes the bootstrap path the declared closure rather than a hand-picked subset that goes stale without a reader. Add a guard that walks the bootstrap entry module's first-party imports transitively and resolves each against exactly the roots the Dockerfile declares, so the next omission fails in seconds naming the package and the fix, instead of minutes into a container build naming only the module. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Item branch for YOK-2787; lands through the merge queue's merge_group integration gate.