Repository navigation
chore: retire the Google Jules lane - #12453
Merged
Merged
Conversation
Three test rounds (2026-10-27 to 10-29): watcher events dominated Claude's cost, sessions asked despite interactive=false, and behaviour-preserving refactors mostly failed. The skill now limits Jules to mechanically verifiable work, watches with --changes-only/--allow, forbids confirmation questions and string-sliced edits in prompts, budgets stuck sessions, adds a REST fallback for messages, and records how to prove unchanged UI behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fixed Gemini Flash pre-PR check: a GitHub hiccup could end the watch before the PR was checked, single-dash flags were taken as session IDs, the skill's grep dropped the PR lines, the REST fallback used an unset $D, and stopping a preview server by port lacked the kill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Active critical and moderate findings remain in the watcher’s error-status handling, option parsing, and synchronized routing documentation, so the change is not ready for approval.
3 open issues
What changed in this PR
This PR narrows Jules assignments to mechanically verifiable work, routes larger behavior-preserving refactors to Gemini, and reduces monitoring overhead through watcher, prompt, fallback, and verification updates.
Changes:
- Updates Jules/Gemini routing guidance, guardrails, and operational documentation.
- Adds quieter session monitoring, path allowlists, stricter argument handling, and PR validation.
- Documents branch conventions, fallback messaging, and unchanged-behavior verification procedures.
- Final review findings remain unresolved: credential exposure in the REST fallback (moderate, 1 vote), lost watcher exit status (critical, 2 votes), option-value parsing accepting unknown flags (moderate, 3 votes), and an outdated synchronized routing guide (moderate, 2 votes).
| File | Description |
|---|---|
CLAUDE.md |
Updates agent-selection guidance to restrict Jules to mechanically verifiable work. |
changelog.d/jules-skill-round3.md |
Documents the Jules lane, watcher updates, and verification results. |
.claude/skills/jules-task/SKILL.md |
Defines Jules task boundaries, monitoring, prompts, fallback handling, and review procedures. |
.claude/skills/jules-task/scripts/watch-sessions.py |
Adds quiet monitoring, path allowlists, argument parsing, and PR validation. |
.claude/skills/gemini-task/SKILL.md |
Routes larger behavior-preserving refactors to Gemini. |
.claude/guardrails.md |
Aligns delegation rationale and cost guidance with the revised Jules/Gemini boundaries. |
Review effort: Lite
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
… code behind grep Copilot review of #12453. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Google announced on 2026-10-29 that Jules takes no new sessions after 2026-11-11 and shuts down on 2026-12-31. The owner chose to remove the lane now instead of using the last two weeks: Jules paid off only for mechanically verifiable work, and its rules cost every session context. - Remove the Jules lane from CLAUDE.md, copilot-instructions and the guardrails (a short retired-lane record stays there), the jules-task skill with its watcher, and the Jules MCP server in .mcp.json. - Move the behaviour-proof checks for refactors (jsdom snapshot with the existing test's mocks, browser comparison against the production API, canvas callbacks, loading and error states) into gemini-task. - Keep the CI conditions for Jules and Dependabot PRs until Jules stops taking sessions, since closing a Jules PR wakes its session. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 of 6 tasks
MarkusNeusinger
added a commit
that referenced
this pull request
Oct 29, 2026
## Summary - **DebugPage and MapPage split into sections, with no change in behaviour.** `DebugPage.tsx` goes from 1,853 to 541 lines; its KPI grid, charts, tables, and feedback blocks move into `app/src/sections/debug/`. `MapPage.tsx` goes from 1,291 to 265 lines; selection, search, and resize logic move into hooks with tests (`useMapSelection`, `useMapSearch`, `useMapResize`), and the canvas, legend, hover panel, search pill, and weights panel into `app/src/sections/map/`. Refs #9631: PalettePage and the SpecTabs tag-chip dedup stay open. - **Provenance.** The splits came from a best-of-3 Google Jules round on 2026-10-29: for each page three sessions tried a different cut, and the variant that kept the page unchanged was merged into `feature/split-pages` (DebugPage #12446, MapPage #12450). Of the other variants, one changed visible text, one broke an aria label, one touched a shared hook against the brief, and PalettePage got no usable variant. Jules has since been retired (#12453). - **Fixes on top, found by the Gemini 3.8 Flash pre-PR check** (all verified against `main` before fixing): - MapPage had lost its loading spinner while the specs fetch. - `useMapSelection`'s unmount cleanup read the hover timer at mount, so it never cleared a pending timer. The debounced hover handler now lives in the hook next to the timer it owns. - `MapWeights` drew an invented solid separator instead of the dashed top border of the threshold row. - `countImpls` and five API types were duplicated between the page and the sections. - The split typed props as `any` behind twelve new `eslint-disable` comments; they now use the existing graph types, and the map has two disables, as on `main`. ## Plan N/A ## Test plan - [x] `yarn lint` (no warnings), `yarn fm:check`, `yarn type-check`, `yarn test` (113 files, 1,197 tests), `yarn build` - [x] Browser comparison against `main`, both built with `VITE_API_URL=https://api.anyplot.ai`: `/map` (706 elements), `/palette` (707), and `/debug` (locked view) have identical text and tag sequences - [x] DebugPage jsdom snapshot with the existing test's mocks against the pre-split base: identical apart from the measured mock ping (5 ms and 8 ms) - [x] ForceGraph2D paint callbacks: moved bodies diffed against the original (round 3) - [x] Gemini 3.8 Flash pre-PR check: five findings, all fixed in e8342c3 - [ ] `/map` and `/debug` on the deployed site after the merge 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> 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.


Summary
CLAUDE.mdand.github/copilot-instructions.md: the Jules sentences leave the delegation rule and the external-writes rule (merge exception, Jules CI wording). The Dependabot CI sentence stays..claude/guardrails.md: the Jules lane row, the "why allowed", merge-rule, and Pro-versus-Flash sections become one retired-lane record. The CI-split sections stay, in past tense where they describe the lane.jules-taskskill withwatch-sessions.py,.mcp.json(it held only the Jules server), and the.jules/ignore line.zweitmeinung: the/jules-taskreview case is gone.gemini-task, where behaviour-preserving refactors go: section 3, step 3 now says how to prove that a refactor left behaviour unchanged (a jsdom snapshot with the existing test's mocks, including loading and error states; a browser comparison built against the production API; a diff of canvas callbacks; stopping preview servers by PID).google-labs-jules[bot](ci-tests.yml,ci-image.yml) and the docs that describe them. Until 2026-11-11 a Jules session can still wake up, for example when its PR is closed, and push, so the guard stays. A follow-up after 2026-11-11 removes them (Todoist);ci-image.ymlis coordinated with the agent-network session.Plan
N/A
Test plan
tests/unit/test_agent_instructions.py: 36 passed (the two Jules anchors removed)ruff checkandruff format --checkon the test fileuv run python -m tools.changelog check --base origin/maingrep -rni julesoverCLAUDE.md,.github/copilot-instructions.md,.claude/skills,agentic/docs/project-guide.md,.gitignore: only the DebugPage evidence ingemini-taskand the current CI description remainagentic/workflows/modules/agent.pyreads.mcp.jsononly when it exists🤖 Generated with Claude Code