Certify framework handoffs and agent containment - #25
Merged
Merged
Conversation
forhappy
marked this pull request as ready for review
August 12, 2026 13:37
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.
What changed
uv.locksupport,.python-versionselection, shared download caches, and lane-private virtual environmentsWhy
The framework adapters introduced by #24 needed production evidence that successor lanes inherit the exact semantic checkpoint and reuse only compatible dependencies or build state. Python and CMake also require private mutable outputs rather than shared immutable layers.
Terminal agents previously inherited too much host and project context. A project integration could escape a lane even when the process cwd pointed at its Trail workdir. The new default profiles make the containment policy explicit, kernel-enforce writable roots on macOS, and expose a receipt callers can audit.
Finally, lane/task summaries used a lightweight root-diff path that hard-coded line counts to zero. The shared indexed diff now calculates counts from changed content while retaining bounded changed-path traversal and linear rename lookup.
User impact
Verification
cargo fmt --all -- --checkcargo check --workspace --lockedcargo test --workspace --locked --quiet(full feature patch before the final root-summary correction)cargo test -p trail --lib --locked— 905 passed, 4 ignoredcargo test -p trail --test e2e terminal_agent_ --locked— 7 passedcargo clippy --workspace --all-targets --all-features --locked -- -D warningspython3 -m unittest scripts/test_edit_real_framework_semantic.py scripts/test_check_real_framework_handoff.py— 7 passedscripts/check-real-framework-handoff.pysrc/error.rsinside an NFS Trail lane; Trail recorded exact source ancestry, macOS kernel containment, an unchanged original checkout, Cargo environment re-sync with 234,235,159 reused bytes, and successful managedcargo fmt --check+4/-4Real framework repositories used: bbolt (Go), clob-client-v2 (pnpm), uuid (npm), tappy (Python), and LevelDB (CMake).