Skip to content

v1.91.118.0 test: held-install recovery fixture no longer assumes the checkout has no local main - #3237

Merged
capy-ai[bot] merged 3 commits into
mainfrom
capy/held-install-recovery-fixture
Oct 17, 2026
Merged

capy-ai[bot] merged 3 commits into
mainfrom
capy/held-install-recovery-fixture

Conversation

@garrytan

Copy link
Copy Markdown
Owner

Free Tests has been red on every push to main since 3e8b34d (#3209): all five makeFixture callers in test/held-install-recovery.test.ts fail at git checkout -q --orphan main.

Cause. On a push, actions/checkout runs git checkout --force -B main refs/remotes/origin/main, so the checkout has a local main branch. The fixture's git clone --shared ROOT work therefore also has a local main, and git checkout --orphan main refuses with fatal: a branch named 'main' already exists (the CI log drops git's stderr; it reproduces on the runner's git 2.55.0 and on any local checkout of main). init.defaultBranch is not involved: git -c init.defaultBranch=main init followed by checkout --orphan main succeeds.

Why PR CI missed it. PR runs check out refs/remotes/pull/N/merge detached, with no local branch, so the clone has no main and the orphan checkout succeeds. Selection was not the gap: #3209's PR run (38965221645) ran this file in shard 17 and it passed.

Fix. The fixture builds its root commit on an orphan branch named held-fixture and pushes HEAD:refs/heads/main to the bare origin, so it no longer depends on which branch the source checkout is on. Every assertion is unchanged.

Regression. makeFixture takes an optional source, and a new test builds the fixture from a clone checked out on main (the push-run form) and from one detached with no branches (the PR-run form), asserting origin main is the fixed release whose only parent is the held root commit. Without the fix the on main case fails with the same error and the detached case passes, which is exactly the push/PR split.

Open in Capy

…s no local main

actions/checkout leaves push runs on a local main branch, so the fixture's
clone already had main and 'checkout --orphan main' failed. Build the root
commit on an orphan held-fixture branch and push HEAD:refs/heads/main; add a
regression covering a source on main and a detached source with no branch.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@trunk-io

trunk-io Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Evals: ✅ PASS

[test:paid] VERDICT GREEN — lane gate/pr, attempt 1
  rule 0/0 · behavior 0/0 · judge 0/0 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 0m00s · cost $0.00

0 executed, 0 reused rule/judge records | 0 manual accepted (unscored; no score-cache credit) | $0 rule/judge cost | reconcile exit: 0

Profile: pr / mode pr; selected behaviors: 0, judges: 0. Deferred to scheduled/release coverage: 0 behaviors and 0 changed prompt files. Deferred checks did not run and receive no PR-pass credit.

Rule and judge shards
Shard Automated result Manual/unscored Executed Reused Status Cost
Fail-closed reconciliation
[test:paid] report: 1/1 slices, 0 planned shards, tier=gate, attempt 1
[test:paid] coverage: profile=pr mode=pr; selected E2E=0, judges=0
[test:paid] deferred: 0 broad behaviors, 0 changed prompts without quick live coverage; these are not PR passes
[test:paid] collector final outcomes: 0 executed, 0 reused; 0 passed, 0 failed, 0 manual accepted (unscored; no score-cache credit) (0 attempt records from 0 collectors; every record counts)
[test:paid] VERDICT GREEN — lane gate/pr, attempt 1
  rule 0/0 · behavior 0/0 · judge 0/0 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 0m00s · cost $0.00
[test:paid] report: every planned shard accounted and passed

Sliced lane: planner → duration-packed executors → fail-closed report. Behavior cases run a pre-registered 3-trial panel (PASS at 2/3 with no contract violation); a PASS 2/3 is shown with its failed trial, never as a clean pass. Reused results retain their original provenance and expiry.

garrytan and others added 2 commits October 17, 2026 04:36
… checkout has no local main

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@github-actions github-actions Bot changed the title test: held-install recovery fixture no longer assumes the checkout has no local main v1.91.118.0 test: held-install recovery fixture no longer assumes the checkout has no local main Oct 17, 2026
@capy-ai
capy-ai Bot merged commit a6eb647 into main Oct 17, 2026
55 checks passed
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.

1 participant