Skip to content

Stable required status check, and make the node_modules ignore actually hold - #32

Merged
flyingrobots merged 2 commits into
mainfrom
ci/stable-required-check
Aug 4, 2026
Merged

Stable required status check, and make the node_modules ignore actually hold#32
flyingrobots merged 2 commits into
mainfrom
ci/stable-required-check

Conversation

@flyingrobots

Copy link
Copy Markdown
Owner

Two repo-integrity fixes found while sorting out branch protection.

The required status check is a landmine

Branch protection matches a check by its literal context string. A matrix job reports as <job-id> (<matrix values>), so the required check on main is test (22). The day the matrix moves off Node 22, that context stops being reported at all — every pull request blocks forever while the ruleset UI still shows a green, satisfied rule. The failure mode is silence.

An aggregate job named ci pins the context. It gates on needs.test.result, which is success only when every matrix leg succeeded, so the matrix can change freely without touching branch protection.

  • always() rather than !cancelled() — a check that never reports is indistinguishable from a blocked branch, so a cancelled run must fail loudly instead of going quiet.
  • needs.test.result reaches the shell via env:, not ${{ }} interpolation, so it cannot be expanded as shell syntax.

Follow-up required: once this is on main, the required context must move from test (22) to ci. Until then the job runs without being required.

node_modules is tracked on main right now

.gitignore had node_modules/. A trailing slash matches a directory only, so a symlink of the same name is still staged by git add -A:

pattern 'node_modules/' -> staged: 1
pattern 'node_modules'  -> staged: 0

66bb72b untracked the symlink but left the pattern alone, so the next git add -Af866f14, the review-fix commit — re-added it, and it merged to main in #31. The link points at an absolute path inside a local worktree, so a fresh clone of main gets a dangling node_modules.

Untracking only sticks once the pattern does, so both happen together here. The other never-tracked tool directories lose their trailing slashes for the same reason. Only the index entry is removed; local symlinks are untouched.

Verification

  • npm run test:fast — 185/185, both ratchets clean
  • Workflow YAML parses; ci job resolves to name: ci, needs: [test], if: always()
  • git add -A no longer re-stages the symlink; git check-ignore attributes it to .gitignore:28

think added 2 commits August 4, 2026 03:58
A trailing slash in .gitignore matches a directory only, so a symlink of
the same name is still picked up by `git add -A`. Demonstrated:

  pattern 'node_modules/' -> staged: 1
  pattern 'node_modules'  -> staged: 0

66bb72b untracked the symlink but left the pattern alone, so the very next
`git add -A` — in f866f14, the review-fix commit — re-added it, and it
reached main. The link points at an absolute path in a local worktree, so a
fresh clone gets a dangling node_modules.

Untracking only sticks once the pattern does, so both happen here. The other
never-tracked tool directories lose their trailing slashes for the same
reason. Only the index entry is removed; the local symlink stays.
Branch protection matches a status check by its literal context string, and
a matrix job reports as "<job-id> (<matrix values>)". The required check on
main is "test (22)", so the day the matrix moves off Node 22 that context
stops being reported entirely — pull requests block forever while the
ruleset still shows a green, satisfied rule. The failure mode is silence,
which is the hardest kind to diagnose.

An aggregate job named "ci" fixes the context in place. It gates on
needs.test.result, which is success only when every matrix leg succeeded, so
the matrix can grow without touching branch protection.

always() rather than !cancelled(): a check that never reports looks
identical to a blocked branch, so a cancelled run has to fail loudly.

needs.test.result reaches the shell through env rather than ${{ }}
interpolation, so the value cannot be expanded as shell syntax.

The required context must move from "test (22)" to "ci" once this is on
main; until then this job runs without being required.
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@flyingrobots, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 4 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: fff562f0-28b7-4c68-b2dd-4e4ada99a2d5

📥 Commits

Reviewing files that changed from the base of the PR and between def5d96 and 9d555f0.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • .gitignore
  • node_modules

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@flyingrobots
flyingrobots merged commit 0f1049c into main Aug 4, 2026
3 checks passed
@flyingrobots
flyingrobots deleted the ci/stable-required-check branch August 4, 2026 11: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.

1 participant