None of this was caught because nothing ever ran on Windows: every job in every workflow was ubuntu-latest, and checks.yml did not even run on the PR that reported it — only Vercel, which failed on fork authorization. The check job now runs on both, fail-fast off so a Windows-only break still reports the Linux result. `shell: bash` on the multi-line steps, since the default shell there is pwsh, which shares none of that syntax; Git Bash ships on the runner, so nothing needs rewriting. The two drift checks stay Linux-only — they verify that a committed generated file matches its generator, which is a property of the repo, not of the platform. The new build step is unconditional and unscoped on purpose. `--affected` is exactly what let these through: they lived in build scripts, so a PR touching no affected package never ran them. A `pnpm clean` step guards the lane that was broken in all eleven packages. pnpm-workspace.yaml's release-age exclusions had drifted almost across the board — turbo pinned at 2.10.1 against 2.10.9 in the lockfile, the Claude SDK at 0.3.196 against 0.3.226, both codex packages a minor behind. A stale pin does not fail loudly; it simply stops excluding anything, and the package falls back under the gate. That is the silent optional-dep drop the file's own esbuild comment documents, and every one of these ships per-platform packages including win32.
61 lines
3.2 KiB
YAML
61 lines
3.2 KiB
YAML
packages:
|
|
- "packages/*"
|
|
- "apps/*"
|
|
# apps/web is both airship's home page and the app `make run` points the CLI at.
|
|
# It lives inside this workspace — unlike the standalone home/ and examples/
|
|
# trees it replaces, each of which carried its own lockfile and node_modules.
|
|
# One lockfile, one install, one lint pass; the cost is that React, Vite and
|
|
# Tailwind are now root dependencies. See README.md § The site.
|
|
allowBuilds:
|
|
esbuild: true
|
|
# wrangler's runtime. apps/web deploys to Cloudflare Workers, and both
|
|
# `make web:preview` and the deploy lane need it to have run its install step.
|
|
workerd: true
|
|
minimumReleaseAgeExclude:
|
|
# esbuild ships its binary as ~25 per-platform packages listed as OPTIONAL
|
|
# dependencies, published minutes apart from the parent. When the parent is
|
|
# old enough to pass the release-age gate but the platform packages are not,
|
|
# pnpm drops them silently — optional deps that fail resolution are not an
|
|
# error — and installs an esbuild with no binary behind it. The postinstall
|
|
# then finds a different version's binary on the hoist path and fails with
|
|
# `Expected "0.28.2" but got "0.27.7"`.
|
|
#
|
|
# The parent is pinned; the platform packages cannot be, because pnpm rejects
|
|
# a name pattern carrying a version union and enumerating all 25 for every
|
|
# bump is not maintainable. They only ever publish in lockstep with the
|
|
# version above, so the unpinned glob follows whatever it is pinned to.
|
|
#
|
|
# EVERY VERSION BELOW MUST MATCH THE LOCKFILE. A pin left behind at an older
|
|
# version does not fail loudly — it simply stops excluding anything, and the
|
|
# package silently falls back under the release-age gate, which is the
|
|
# esbuild failure above all over again. All of these but esbuild had drifted
|
|
# at once (turbo 2.10.1 vs 2.10.9, the Claude SDK 0.3.196 vs 0.3.226, both
|
|
# codex packages a minor behind), and every one of them ships per-platform
|
|
# optional deps including win32 — so the package most likely to go missing is
|
|
# the one for whichever platform is least represented in the team's machines.
|
|
# `pnpm why <pkg>` after a bump, and update the pin in the same commit.
|
|
- 'esbuild@0.28.2'
|
|
- '@esbuild/*'
|
|
- '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.226'
|
|
- '@anthropic-ai/claude-agent-sdk@0.3.226'
|
|
- '@openai/codex-sdk@0.147.0'
|
|
# Unlike the other two SDKs this bundles no binary — the `opencode` CLI is a
|
|
# separate install, detected on PATH at runtime. See providers/opencode.ts.
|
|
- '@opencode-ai/sdk@1.18.15'
|
|
- '@openai/codex@0.147.0-darwin-arm64 || 0.147.0-darwin-x64 || 0.147.0-linux-arm64 || 0.147.0-linux-x64 || 0.147.0-win32-arm64 || 0.147.0-win32-x64 || 0.147.0'
|
|
- '@turbo/darwin-64@2.10.9'
|
|
- '@turbo/darwin-arm64@2.10.9'
|
|
- '@turbo/linux-64@2.10.9'
|
|
- '@turbo/linux-arm64@2.10.9'
|
|
- '@turbo/windows-64@2.10.9'
|
|
- '@turbo/windows-arm64@2.10.9'
|
|
- turbo@2.10.9
|
|
- ultracite@7.10.2
|