Prepare locked uv Python workspaces automatically - #2669
Merged
Merged
Conversation
This was referenced Sep 13, 2026
jonathanKingston
force-pushed
the
copse/build-2376-29fb13
branch
from
September 13, 2026 13:29
4ab1055 to
c68879d
Compare
jonathanKingston
force-pushed
the
codex/prepare-python-uv
branch
from
September 13, 2026 13:30
7a1845a to
833b391
Compare
Contributor
jonathanKingston
force-pushed
the
codex/prepare-python-uv
branch
from
September 13, 2026 13:52
833b391 to
c9a0111
Compare
jonathanKingston
force-pushed
the
codex/prepare-python-uv
branch
from
September 13, 2026 14:22
c9a0111 to
70ff1f6
Compare
Contributor
Reference screenshots ready for reviewReview GitHub’s image diffs in screenshot PR #2672. Rendered for If this source branch moves, a later successful render closes the stale review PR and replaces this link. |
jonathanKingston
marked this pull request as ready for review
September 14, 2026 12:15
jonathanKingston
added a commit
that referenced
this pull request
Sep 25, 2026
## Outcome The feature copy in `site/index.html` was last updated in early August. Every `site/` change since then has only touched badges, links or the architecture page. This PR updates the landing page to cover features that have shipped since, limited to those that are **on by default**: - **Tour:** a new fifth item, "Ship the pull request". It covers opening a PR from the message box (#2324, #2047) and the PRs panel following comments, reviews and individual CI checks (#2597). Its image, `site/screenshots/create-pr-dialog.png`, is a 1200×800 downscale of the existing e2e screenshot `tests/e2e/screenshots/create-pr-dialog.png`. - **"Set the boundary" card:** adds allow, ask or block for each Copse and MCP tool separately (#2688). - **Other features:** the grid goes from 6 to 9 items. - "Worktrees ready to work": dependencies are installed automatically for Node, Python (uv), Go and Rust projects, and old worktrees can be cleaned up in bulk (#2388, #2669, #2780, #2607). - "Shells and a real browser": draw on a page to show the agent what to change (#2934), and tabs come back after a relaunch. - New: the agent can propose a new thread (#2334), image diffs in review plus Copy image (#2637, #2760, #3038), and an unread marker plus a one-click continue-plan suggestion (#1765, #1890). - **Meta description and JSON-LD** now mention pull requests. These features are deliberately **not** on the page because they're experimental or not finished yet: SSH workspaces (marked "(experimental)" in Settings), inline canvas, Apple Simulator and Android, the VNC desktop viewer, container runs, Copse Reviewer, automations, and multiple windows. For windows, `create-main-window.ts` still throws "Agent actions are not available in secondary windows yet". A separate investigation into which of these could be turned on by default has been queued. ## Risk and review Low. The site is static: this changes copy and adds one PNG. There's no change to the app, and `site.js` and `styles.css` are untouched. The site only deploys when `release` is pushed, not when this merges into `main`. No independent review has happened yet. ## Validation - `pnpm test -- sync-site-markdown`: 32 passed, 0 failed. - `pnpm run site:md`: the generated Markdown copy includes the new headings. The output is gitignored and not committed. - `pnpm run check:local`: passed. Run on Node 22 in the cloud container, where pnpm printed an engine warning. - `pnpm run oracle -- --explain`: HIGH confidence, 0 mapped specs. The full unit suite was deferred under the low-risk fast path; required PR CI (`ci.yml`) will run it. - Visual check: the page was rendered in headless Chromium at 1440×1000 and 390×844. After clicking "Ship the pull request", the tour image switches to `create-pr-dialog.png` with naturalWidth 1200. The "Other features" grid renders as 3×3 on desktop and a single column on mobile. There's no horizontal scroll at 390px (`scrollWidth` is 390). This is a static marketing page, not the Electron app, so there's no WebdriverIO spec. ## Remaining work - The new screenshot uses the app's current pink accent. The existing site screenshots were captured when the app used a green accent, so they're out of date too. Refreshing all of them from `tests/e2e/screenshots/` would be a sensible follow-up. - Browser tab restore is still listed under "Unreleased" in `CHANGELOG.md`. Before the site is next deployed from `release`, check that the published build includes it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01GkUNKJuLswZxUawPMmtRzi --- _Generated by [Claude Code](https://claude.ai/code/session_01GkUNKJuLswZxUawPMmtRzi)_ Co-authored-by: Claude <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.
Locked uv projects currently need a manual Copse preparation declaration. Detect
pyproject.tomlplusuv.lockand synchronize the Python workspace withuv sync --locked --all-packages --no-python-downloads, using the project's.venvand a managed uv cache. Missing or conflicting inputs receive configuration guidance, and explicit declarations retain control of non-JavaScript setup.This is the uv portion of #2654, stacked on #2388. Hash-locked pip, Cargo and Go remain open; this PR does not claim those adapters are implemented.
Readiness checks uv and Python identity and the locked installed environment on every inspection, invalidates on workspace manifests/configuration/version files, and preserves useful failed-check diagnostics. uv can execute build-backend/repository code, which the exact-command approval states. Neither uv nor Python is installed globally.
uv's check requires temporary bookkeeping, so preflight subprocesses receive private disposable scratch. The project and shared caches remain read-only, scratch is removed after execution, and offline network isolation has no shared proxy or unsandboxed fallback.
Validation:
tests/e2e/screenshots/worktree-preparation-python.pngwas visually inspected.pnpm run check: all static gates and 9,244 tests passed, with no failures or skips.The real uv fixture explicitly skips when uv or Python is not installed; no test installs tools globally. Other unit and sandbox-boundary tests do not require uv. The design and remaining sequence are documented in
docs/plans/project-worktree-preparation.md.Rebased onto the CI fixes in #2388 at
31e5f3872. The inherited backup fix covers ordinary and linked worktrees without writable checkout mounts. Full CI is explicitly enabled for this draft viaci-full, including build and all e2e shards.Full CI verification passed on
b43e003bb: precheck, unit tests, build, benchmarks, all eight e2e shards, screenshot artifacts, and the aggregate CI gate. The repaired plan-value spec passed in a single 31-spec Linux shard run.Includes the corrected proposed-image e2e fixture from #2388; approval-preview coverage uses a real non-Git workspace rather than depending on a failed recovery backup.
Two e2e harness races are fixed: the test launcher consumes a pending seed after the outgoing Electron process has saved its old config, and screenshot framing resolves its target by selector inside the page so transcript updates cannot invalidate a WebDriver argument. Regression tests cover node replacement and the seed handoff, including preserving subsequent product writes. All four affected Electron specs passed locally, and focused skill-error/roadmap screenshots were inspected.
The plan-value fixture now seeds its usage history and project together through that handoff. Its unchanged worth-it assertions pass, and refreshed worth-it/inference screenshots were visually reviewed. The full local gate remains green: 9,244 tests, no failures or skips.