Skip to content

ci: no CI on pushes to feature/**, where Jules branches live - #12441

Merged
MarkusNeusinger merged 4 commits into
mainfrom
fix/ci-no-feature-push
Oct 29, 2026
Merged

MarkusNeusinger merged 4 commits into
mainfrom
fix/ci-no-feature-push

Conversation

@MarkusNeusinger

Copy link
Copy Markdown
Owner

Summary

  • Security fix for feat(agents): Jules lane, delegation rules, secret-free Jules CI #12429. Google Jules names its own branch after the one it starts from (feature/head-metadata-dedup-<session id>), and ci-lint, ci-tests, ci-migrations, and ci-image also ran on every push to feature/**. 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-image reached its GCP login before Claude cancelled the runs; in both cases only files Jules had not touched ran with it, since the two diffs change app/ 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 Tests also refuses any ref under refs/heads/feature and any PR whose base is a feature branch; renderer-image refuses feature refs too. This also ends the doubled Lint/Tests runs on every Jules sub-PR.
  • Skill, guardrails, and CLAUDE.md drop the "e2e on the push the merge makes" claim: e2e runs on the PR into main.

Plan

N/A. Follows the owner's decision of 2026-10-29 that Jules PRs run without secrets or an OIDC token.

Test plan

  • actionlint on ci-lint.yml, ci-tests.yml, ci-migrations.yml, ci-image.yml
  • tests/unit/test_agent_instructions.py and tests/unit/workflows: 1098 passed
  • uv run python -m tools.changelog check --base origin/main
  • Gemini 3.8 Flash pre-PR check: no remaining path where Jules code runs with secrets; its two findings (PR-into-feature guard, stale comment) fixed
  • Workflow changes have no local verification loop. After merge: the next Jules push to a feature/…-<session id> branch starts no workflow run, and its PR into the feature branch shows Run E2E Tests skipped

MarkusNeusinger and others added 2 commits October 29, 2026 10:37
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>
Copilot AI lite review requested due to automatic review settings October 29, 2026 09:49
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment thread .github/workflows/ci-image.yml Resolved
Comment thread .github/workflows/ci-tests.yml Resolved
Comment thread CLAUDE.md Resolved
Comment thread changelog.d/ci-no-feature-push.md Resolved
@codecov

codecov Bot commented Oct 29, 2026

Copy link
Copy Markdown

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>
@MarkusNeusinger
MarkusNeusinger merged commit 39e0950 into main Oct 29, 2026
24 checks passed
@MarkusNeusinger
MarkusNeusinger deleted the fix/ci-no-feature-push branch October 29, 2026 10:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants