Repository navigation
feat(land): the fixer fetches dependencies and verifies what it reports - #356
Merged
Merged
Conversation
Quest-Claim: 076a7bfb8a1783f5
The fixer container already had public egress, but the prompt's "never contact GitHub" made Codex build with --offline, so git dependencies such as moq's uniffi failed and Rust fixes were requeued uncompiled. The prompt now allows dependency fetches from package registries and github.com/codeload.github.com, keeps GitHub's API, pushing, and other hosts forbidden, and requires a build and test of what the PR and fix touch before fixed or requeue, handing back with the failing command otherwise. The README's wrapper contract and the fixer quest's host line now describe the egress as built. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
marked this pull request as ready for review
November 1, 2026 13:24
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 36 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
kixelated
enabled auto-merge (squash)
November 1, 2026 16:43
kixelated
added a commit
that referenced
this pull request
Nov 1, 2026
Keep main's registry-network decision (#356) and this PR's protected-path decision in the epic README, and point workflows-permission.md's link to the deleted protected.md quest at this PR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 1, 2026
kixelated
added a commit
that referenced
this pull request
Nov 1, 2026
Align the lockfile quest with the restructured land fixer epic: registry fetches already shipped (#356) and protected edits now return as ready commits, so flake.lock stays protected. Hand back when the PR's manifest no longer admits a version the base moved to, and hold manifest changes the package manager makes (go mod tidy) to the same trace rule. Reword the epic's docs paragraph so it no longer claims to finish the epic. Co-Authored-By: Claude Opus 5.5 <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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Finishes quest/m0/land-fixer/network.md, part of the land fixer epic.
Summary
The host never blocked the fixer's network: kixelated/nixos
modules/ci-egress.nixgivesqland-fixthe check containers' public egress, and Codex runs with--dangerously-bypass-approvals-and-sandbox. The fixer chosecargo --offlinebecauseassets/land-fix.mdsaid "Never push or contact GitHub", and fetching a git dependency such as moq'suniffifromgithub.comcounted as contact. In 17 of moq's last 40 fix jobs,cargofailed with "failed to getuniffi".assets/land-fix.md: two new paragraphs.github.com/codeload.github.comfor git dependencies. The fixer must not build--offlineto avoid them. GitHub's API (gh,api.github.com), pushing, and every other host stay forbidden.fixedorrequeue, the fixer builds and tests the packages the PR and its fix touch, including whatever the failure log shows failing, and names the commands in the reason. If it can't get a PR passing mechanically, or can't run its build or tests, it hands the PR back and quotes the command and the output line that shows why.README.md: the fixer wrapper contract said the wrapper "must restrict network access to the model proxy". It now says the network must reach the model proxy, the package registries, andgithub.com/codeload.github.com, and that the prompt allows only dependency fetches.quest/m0/host-land/fixer.md: the "network access only to CLIProxyAPI" line now describes the host as built.quest/m0/land-fixer/README.md: removes the quest fromRequired, points the audit table row at this PR, and keeps the decision record that lived in the deleted quest file.test/land.test.ts: a new test pins the network and verification wording, next to the existing prompt-injection test.To avoid conflicts with moq-dev/quest#357, which rewrites the protected-path sentences, the new rules are separate paragraphs placed after the protected-path paragraph. That paragraph is unchanged, so its "Never push or contact GitHub" stays. The new paragraph carves the exception out of it: "These fetches are the only GitHub contact allowed".
Choices made without asking
fixedorrequeue". So a PR whose build or tests the fixer cannot run is handed back rather than requeued untested. If the container lacks a repository's toolchain, more handbacks result.github.com/codeload.github.com. A PR that needs one cannot be built, so it is handed back.api.github.comduring a git fetch; the fixer must not call the API directly.Follow-ups
build.rs, test code, and npm lifecycle scripts. That code runs as the same user as Codex in a container with public egress, so it can readOPENAI_API_KEYfrom/proc/<codex pid>/environand send it anywhere. This risk existed before this PR, since the egress was already public and offline builds still ranbuild.rs, but this change makes it more likely. Options:qland-fixegress to a registry allowlist or proxy, as Gate host's Goal states.quest/m0/host-land/host.md's Goal is out of date. It still says the containers' network "reaches only the package registries and the host's CLIProxyAPI", while its own Plan records that egress follows the CI public-IPv4 policy. Either correct the Goal or narrow the egress to match it.Review
Codex (
quest review --deep), gpt-6-astra at medium effort, round 1 of session01a19747-c865-7ac0-aded-0ef7a72f0194, reviewed head0b842d48559baaa44adb835c670d514ced8b4c2aagainstorigin/main(4bc19cc): no findings.Local checks on this head:
just check,quest check --base origin/main, andtest/land.test.ts(131 tests) passed.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)