Repository navigation
ci: no CI on pushes to feature/**, where Jules branches live - #12441
Merged
Merged
Conversation
Jules names its branch after the one it starts from (feature/head-metadata-dedup-<session id>), and ci-lint, ci-tests, ci-migrations and ci-image ran on every push to feature/**. A push run has no PR author, and Jules pushes with the owner's grant, so the PR-author checks from #12429 treated unread Jules code as trusted: the first such push gave renderer-image its GCP login before the run was cancelled. feature/** is removed from every push trigger, and Run E2E Tests and renderer-image refuse feature refs at job level. Skill, guardrails and CLAUDE.md follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gemini Flash pre-PR check: the feature-ref guard only covers push and dispatch, so also refuse PRs whose base is a feature branch. 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
Critical merge-group guard gaps could allow untrusted feature code to run in OIDC-enabled jobs with GCP access, and two documentation issues remain.
4 open issues
What changed in this PR
This pull request hardens CI for Jules-managed feature/** branches by removing push-triggered workflows, restricting credentialed jobs, and updating the related documentation.
Changes:
- Removes
feature/**from push triggers for lint, tests, migrations, and image workflows. - Adds feature-ref and feature-base guards to E2E and renderer-image jobs.
- Updates Jules guidance, guardrails, and the changelog for PR-based validation.
| File | Summary | Review notes |
|---|---|---|
CLAUDE.md |
Documents that feature-branch pushes no longer run CI. | Mirror the updated guidance in .github/copilot-instructions.md. |
changelog.d/ci-no-feature-push.md |
Records the CI security change. | Clarify the incomplete final clause describing E2E behavior. |
.github/workflows/ci-tests.yml |
Removes feature push triggers and guards the E2E job. | Add a merge_group base-branch guard for feature branches. Add regression tests for feature push filters and ref/base guards. |
.github/workflows/ci-migrations.yml |
Removes feature push triggers. | No additional review comments. |
.github/workflows/ci-lint.yml |
Removes feature push triggers while retaining feature pull-request checks. | No additional review comments. |
.github/workflows/ci-image.yml |
Removes feature push triggers and guards the renderer-image job. | Add a merge_group base-branch guard so feature code cannot reach the OIDC-enabled job. |
.claude/skills/jules-task/SKILL.md |
Updates Jules CI and merge guidance. | No additional review comments. |
.claude/guardrails.md |
Documents the feature-push security incident and mitigation. | No additional review comments. |
Review effort: Lite
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Copilot review of #12441: the feature guards also cover merge_group via its base_ref, the push-trigger rule is mirrored in copilot-instructions.md, and the changelog sentence is complete. 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
feature/head-metadata-dedup-<session id>), andci-lint,ci-tests,ci-migrations, andci-imagealso ran on every push tofeature/**. A push run has no PR author, and Jules pushes with the owner's GitHub grant, so the PR-author checks from feat(agents): Jules lane, delegation rules, secret-free Jules CI #12429 treated unread Jules code as trusted. On both head-metadata pushes today,renderer-imagereached its GCP login before Claude cancelled the runs; in both cases only files Jules had not touched ran with it, since the two diffs changeapp/only.feature/**is removed from every push trigger, so feature branches and Jules's branches under them get CI only through pull requests.Run E2E Testsalso refuses any ref under refs/heads/feature and any PR whose base is a feature branch;renderer-imagerefuses feature refs too. This also ends the doubled Lint/Tests runs on every Jules sub-PR.CLAUDE.mddrop the "e2e on the push the merge makes" claim: e2e runs on the PR intomain.Plan
N/A. Follows the owner's decision of 2026-10-29 that Jules PRs run without secrets or an OIDC token.
Test plan
actionlintonci-lint.yml,ci-tests.yml,ci-migrations.yml,ci-image.ymltests/unit/test_agent_instructions.pyandtests/unit/workflows: 1098 passeduv run python -m tools.changelog check --base origin/mainfeature/…-<session id>branch starts no workflow run, and its PR into the feature branch showsRun E2E Testsskipped