Filing this as a question rather than a bug, because either answer is defensible and I cannot tell which one is intended.
.github/workflows/ci.yml installs two different ways:
| job |
line |
install |
check-plugin |
48 |
bun install |
check-pi-plugin |
104 |
bun install |
check-dashboard |
129 |
bun install |
| (later steps) |
160, 193, 233, 298 |
bun install --frozen-lockfile |
bun.lock is committed, so the three unpinned jobs are free to resolve outside it while everything after them is not.
Why I noticed
It produced a real green-local/red-CI split for me. Biome is declared ^2.5.1 in all four package manifests and pinned to 2.5.1 in bun.lock. CI's unpinned install floated it to 2.5.7, whose formatter disagrees with 2.5.1 — Check (plugin) failed on lint with 19 errors, none in any file the PR touched, and the same commit was clean locally. Reproduced by installing 2.5.7 locally against clean master: 19 errors, versus 1 on 2.5.1. Same failure appeared on unrelated PRs at the time, which is what pointed at the toolchain rather than the changes.
The general shape: a patch release of any linter/formatter/type-checker in the ^ range can turn CI red on a commit that changes nothing relevant, and the failure surfaces on whichever PR happens to be open.
The case for leaving it
Floating on the check jobs is an early-warning system — you learn about a breaking toolchain patch from your own CI rather than from a contributor's PR. If that is the intent, this issue is just a note and can be closed; a comment on those three steps saying so would save the next person the same investigation.
The case for pinning
Reproducible CI, and toolchain upgrades become explicit lockfile commits rather than surprises attributed to whoever pushed that day. The cost is losing the early warning, which a scheduled job running unpinned would recover without putting it in every PR's path.
Happy to send the one-line PR if you want the three lines pinned. Not sending one unprompted, since I would be changing a policy rather than fixing a defect.
Filing this as a question rather than a bug, because either answer is defensible and I cannot tell which one is intended.
.github/workflows/ci.ymlinstalls two different ways:check-pluginbun installcheck-pi-pluginbun installcheck-dashboardbun installbun install --frozen-lockfilebun.lockis committed, so the three unpinned jobs are free to resolve outside it while everything after them is not.Why I noticed
It produced a real green-local/red-CI split for me. Biome is declared
^2.5.1in all four package manifests and pinned to2.5.1inbun.lock. CI's unpinned install floated it to 2.5.7, whose formatter disagrees with 2.5.1 —Check (plugin)failed on lint with 19 errors, none in any file the PR touched, and the same commit was clean locally. Reproduced by installing 2.5.7 locally against cleanmaster: 19 errors, versus 1 on 2.5.1. Same failure appeared on unrelated PRs at the time, which is what pointed at the toolchain rather than the changes.The general shape: a patch release of any linter/formatter/type-checker in the
^range can turn CI red on a commit that changes nothing relevant, and the failure surfaces on whichever PR happens to be open.The case for leaving it
Floating on the check jobs is an early-warning system — you learn about a breaking toolchain patch from your own CI rather than from a contributor's PR. If that is the intent, this issue is just a note and can be closed; a comment on those three steps saying so would save the next person the same investigation.
The case for pinning
Reproducible CI, and toolchain upgrades become explicit lockfile commits rather than surprises attributed to whoever pushed that day. The cost is losing the early warning, which a scheduled job running unpinned would recover without putting it in every PR's path.
Happy to send the one-line PR if you want the three lines pinned. Not sending one unprompted, since I would be changing a policy rather than fixing a defect.