Repository navigation
fix(docs): pin typescript to ^6 so npm ci resolves - #3877
Conversation
`@astrojs/check@0.9.10` declares `peer typescript@"^5.0.0 || ^6.0.0"`, so the TypeScript 7 lockfile from #3870 makes `npm ci` fail ERESOLVE and takes the docs build down on main. Revert to the pre-bump lockfile and tell Dependabot to skip typescript majors until `@astrojs/check` accepts `^7`.
|
Another occurrence of this failure: run 32615714639 — One thing worth adding: the PR body defers Local run of the whole
|
worktrunk-bot
left a comment
There was a problem hiding this comment.
Self-review. The fix itself holds up on the facts: @astrojs/check@0.9.10 is still the latest release and its peer range is {"typescript": "^5.0.0 || ^6.0.0"}, typescript@6.0.3 is the latest 6.x, and both docs/package.json and docs/package-lock.json at this head are byte-identical to their blobs at 8e405bced (#3866) — so the "restored rather than regenerated" claim is exact, not approximate. check-docs passes here, which is the step that failed on #3870.
One thing I'd want a maintainer to decide on, flagged inline: the new ignore entry has no reader for its own removal condition.
The `ignore` entry added here suppresses the only proposal Dependabot would make for it, so nothing surfaces when `@astrojs/check` widens its peer range. The weekly CI Pin Bumps pass is where versions Dependabot can't see get revisited, and it was told to skip `docs/package.json` outright — name the entry as the exception it now owns.
worktrunk-bot
left a comment
There was a problem hiding this comment.
Self-review of 2109b84. The bullet closes the gap the last review flagged — the weekly pin-bump pass now owns the ignore entry, with a version-agnostic removal condition and a concrete check (npm view @astrojs/check peerDependencies.typescript returns ^5.0.0 || ^6.0.0 today, against @astrojs/check@0.9.10). Resolving that thread.
One thing the commit left behind: the inline comment on the ignore entry in .github/dependabot.yaml still says "Drop this once @astrojs/check accepts ^7", which is the narrow framing the commit message itself argues against. The entry blocks every typescript major, so following that condition literally when @astrojs/check widens to ^7 while TypeScript 8 is current would drop the guard and let the same ERESOLVE back into npm ci — the exact failure this PR reverts. It's the same defect one file over from the one just fixed, so I'm pushing the comment fix rather than leaving the two halves of one instruction disagreeing.
|
A third occurrence, and a new workflow: run 32615601934 — The reason it's worth a comment rather than a silent tally is timing. That run was EvidenceThe failing step in run 32615601934, before lychee is even installed (
The issue-filing job's gate, at
This PR's own checks are green at |
A clean worktree holding an untracked file whose name matches one the incoming commits add made `git rebase` refuse the checkout. No rebase started, so `rebasing` was false, the guarded abort returned non-zero, and the sweep exited 1 — the ordinary-case non-zero exit this recipe exists to avoid, in a state agents hit routinely with scratch files. The refusal cases all share a property the tail can key on: git declined atomically and left nothing behind. So a rebase that fails without starting one is not a sweep failure, and only an abort that itself fails leaves a worktree needing attention. Also drops the local `typescript` pin — #3877 landed the same revert plus a `dependabot.yaml` ignore entry that stops the bump recurring, so this branch takes main's version. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Weekly CI pin bump. Only `worktrunk` drifted since last week — every other `baptiste0928/cargo-install` pin (cargo-affected `0.4.0`, cargo-insta `1.48.0`, cargo-nextest `0.9.143`, cargo-llvm-cov `0.9.0`, cargo-msrv `0.19.3`, cargo-udeps `0.1.61`, lychee `0.24.2`), plus `setup-nu` `0.115.1` and the `.codex/cloud.sh` / `setup-web` pins (pre-commit `4.6.2`, PowerShell `7.6.5`), is already at the latest upstream release. - **worktrunk** `=0.75.0` → `=0.76.0` (3 sites: `ci.yaml` ×2, `nightly.yaml`) Compatibility: worktrunk `0.76.0` declares `rust-version = 1.97`, matching the pinned toolchain (`rust-toolchain.toml` channel `1.97.0`), so it builds under `baptiste0928/cargo-install`. This is the `wt` that runs the suite (`wt hook pre-merge`) on all three platforms, so it goes on its own PR — its own matrix is the only place the bump gets tested. The 0.76.0 breaking changes are in `wt switch --execute` argv handling, retired `commit.generation` config keys, and the library API; none of them touch `wt hook pre-merge`. <details><summary>Checks that found no drift</summary> - **MSRV/toolchain**: current stable is `1.98.1`, so latest−1 is `1.97`, already what `Cargo.toml`, `tests/helpers/wt-perf/Cargo.toml`, and `rust-toolchain.toml` pin. The `nightly-2026-08-01` pins in `nightly.yaml` are ~5 weeks old, inside the three-month window. - **Runner images**: `ubuntu-24.04`, `macos-26`, and `windows-2025` each still equal their `-latest` label in the `actions/runner-images` availability table; `ubuntu-24.04-arm` and `macos-26-intel` follow those rows. Ubuntu 26.04 is badged preview, so not a bump target. - **`dependabot.yaml` typescript ignore**: `npm view @astrojs/check peerDependencies.typescript` is still `^5.0.0 || ^6.0.0` against a current `typescript` major of 7, so the major-version ignore entry stays (#3877). </details> Co-authored-by: worktrunk-bot <254187624+worktrunk-bot@users.noreply.github.com>
Weekly CI pin bump for the `worktrunk` pin only.
- **worktrunk** `=0.76.0` → `=0.77.0` (3 sites: `ci.yaml` ×2,
`nightly.yaml`)
This is the `wt` that runs the suite (`wt hook pre-merge`) on all three
platforms, so it goes on its own PR — its own matrix is the only place
the bump gets tested. The rest of this week's drift (cargo-llvm-cov,
cargo-nextest, PowerShell) is in a separate PR.
Compatibility: worktrunk `0.77.0` declares `rust-version = 1.97`,
matching the pinned toolchain (`rust-toolchain.toml` channel `1.97.0`),
so it builds under `baptiste0928/cargo-install`.
CI calls `wt` only as `wt hook pre-merge --yes <filters>` (`insta` in
`ci.yaml` and `nightly.yaml`, `lockfile doctest doc` in `ci.yaml`). None
of 0.77.0's breaking changes reach that path: the `--format=json`
schema-2 default and the `wt config show` non-zero exit are other
commands, `wt config update --print` and the Codex plugin uninstall
changes are unused in CI, and the newly-erroring unguarded `{{ branch
}}` appears in `.config/wt.toml` only under `[[post-start]]` and `[list]
url` — every `[[pre-merge]]` entry there is a plain string with no
template variables, which matters because `actions/checkout` leaves a
detached HEAD.
<details><summary>Weekly checks that found no drift</summary>
- **MSRV/toolchain**: current stable is `1.98.1` (`1.98.0` released
2026-08-20, `1.98.1` on 2026-09-03), so latest−1 is `1.97` — already
what `Cargo.toml`, `tests/helpers/wt-perf/Cargo.toml`, and
`rust-toolchain.toml` pin. The `nightly-2026-08-01` pins in
`nightly.yaml` are ~6 weeks old, inside the three-month window. No
toolchain change, so no `flake.lock` refresh.
- **Other `cargo-install` pins**: `cargo-affected` 0.4.0, `cargo-insta`
1.48.0, `cargo-msrv` 0.19.3, `cargo-udeps` 0.1.61, `lychee` 0.24.2 all
match their current crates.io release.
- **`setup-nu`**: `0.115.1` is still the latest `nushell/nushell`
release, across all five call sites.
- **Runner images**: `ubuntu-24.04`, `macos-26`, and `windows-2025` each
still equal their `-latest` label in the `actions/runner-images`
availability table; `ubuntu-24.04-arm` and `macos-26-intel` follow those
rows. Ubuntu 26.04 and Xcode 27 are badged preview, so not bump targets.
- **`dependabot.yaml` typescript ignore**: `npm view @astrojs/check
peerDependencies.typescript` is still `^5.0.0 || ^6.0.0` while the
latest `typescript` is `7.0.2`, so the major-version ignore entry stays
(#3877).
- **LLM model pins**: `claude-haiku-4.5` is still the "fastest model"
row on Anthropic's models page, and `gpt-5.6-luna` is still the
fast/lowest-cost entry in the Codex recommended list. GPT-6 Astra joined
that list as the *most capable* model, which doesn't change the
commit-generation recommendation; `gpt-5.3-codex-spark` remains a
Pro-only research preview with no API access.
- **Statusline cache-check**: clean. `wt config state logs profile`
reports `same_context_duplicates: []` and 0 extra calls on a `wt list
statusline --format=claude-code` render.
- **Agent integration surfaces**: nothing to flag. Claude Code shipped
2.1.265–2.1.270 since the last weekly run with no statusline field
additions (every `Requires Claude Code v…` note in the field table is
2.1.260 or earlier) and no change to `WorktreeCreate`/`WorktreeRemove`;
2.1.265's switch to preferring marketplace-entry display metadata over
`plugin.json` is a no-op here, since `.claude-plugin/marketplace.json`
and `plugins/worktrunk/.claude-plugin/plugin.json` carry the same
description. Codex `rust-v0.154.0` only refreshes plugin skills/hooks
after external upgrades and reroutes approvals internally —
`UserPromptSubmit`, `PermissionRequest`, `Stop`, and `SessionEnd` are
unchanged, and the removed `codex mcp-server` entry point is unused
here. Gemini CLI `v0.59.0` and OpenCode `v1.18.26`–`v1.18.30` carry
nothing touching extension loading or the plugins API.
- **README date stamp**: the blockquote already reads September 2026.
</details>
Co-authored-by: worktrunk-bot <254187624+worktrunk-bot@users.noreply.github.com>
Weekly CI pin bump for the `worktrunk` pin only.
- **worktrunk** `=0.77.0` → `=0.78.0` (3 sites: `ci.yaml` ×2,
`nightly.yaml`)
This is the `wt` that runs the suite (`wt hook pre-merge`) on all three
platforms, so it goes on its own PR — its own matrix is the only place
the bump gets tested. The rest of this week's drift (cargo-affected,
cargo-nextest) is in a separate PR.
Compatibility: worktrunk `0.78.0` declares `rust-version = 1.97`,
matching the pinned toolchain (`rust-toolchain.toml` channel `1.97.0`),
so it builds under `baptiste0928/cargo-install`.
Neither of 0.78.0's breaking changes reaches CI. CI calls `wt` only as
`wt hook pre-merge --yes <filters>` (`insta` in `ci.yaml` and
`nightly.yaml`, `lockfile doctest doc` in `ci.yaml`). The hook-context
key rename — `worktree`, `repo_root`, `main_worktree`,
`main_worktree_path` becoming `worktree_path`, `repo_path`, `repo`,
`primary_worktree_path` — affects templates, `--execute` bodies, `--var`
overrides, and scripts that read the piped JSON; every `[[pre-merge]]`
entry in `.config/wt.toml` is a plain string with no template variable,
and no CI step pipes the hook context anywhere. The `{{ branch }}` and
`{{ target }}` variables that the file does use, under `[[post-start]]`,
`[post-merge] sync`, and `[list] url`, are not in the renamed set and
don't run in CI. The `wt config plugins pi` → `omp` split is a command
CI never invokes.
<details><summary>Weekly checks that found no drift</summary>
- **MSRV/toolchain**: current stable is `1.98.1`, so latest−1 is `1.97`
— already what `Cargo.toml`, `tests/helpers/wt-perf/Cargo.toml`, and
`rust-toolchain.toml` pin. The `nightly-2026-08-01` pins in
`nightly.yaml` are ~7 weeks old, inside the three-month window. No
toolchain change, so no `flake.lock` refresh (and so the Nix-daemon
socket the sandbox blocks never came up).
- **Other `cargo-install` pins**: `cargo-insta` 1.48.0, `cargo-llvm-cov`
0.9.1, `cargo-msrv` 0.19.3, `cargo-udeps` 0.1.61, and `lychee` 0.24.2
all match their current crates.io release.
- **`setup-nu`**: `0.115.1` is still the latest `nushell/nushell`
release, across all five call sites.
- **Codex Cloud tools**: `.codex/cloud.sh`'s PowerShell `7.6.6` is still
the latest `PowerShell/PowerShell` release and pre-commit `4.6.2` the
latest on PyPI; its Nushell pin tracks `setup-nu` above, and its
cargo-nextest pin moves in the sibling PR.
- **Runner images**: `ubuntu-24.04`, `macos-26`, and `windows-2025` each
still equal their `-latest` label in the `actions/runner-images`
availability table; `ubuntu-24.04-arm` and `macos-26-intel` follow those
rows. Ubuntu 26.04 is listed with its own label rather than against
`-latest`, and Xcode 27 is badged preview, so neither is a bump target.
- **`dependabot.yaml` typescript ignore**: `npm view @astrojs/check
peerDependencies.typescript` is still `^5.0.0 || ^6.0.0` while the
latest `typescript` is `7.0.2`, so the major-version ignore entry stays
(#3877).
- **LLM model pins**: `claude-haiku-4.5` is still the "Fastest" latency
row on Anthropic's models page, and `gpt-5.6-luna` is still the "lowest
cost in the family" entry in the Codex recommended list. GPT-6 Astra
sits above it as the *most capable* model, which doesn't change the
commit-generation recommendation.
- **Statusline cache-check**: clean. `wt config state logs profile`
reports `same_context_duplicates: []` and 0 extra calls on a `wt list
statusline --format=claude-code` render.
- **Agent integration surfaces**: nothing to flag. Claude Code shipped
2.1.271–2.1.278 since the last weekly run with no statusline schema
additions and no change to `WorktreeCreate`/`WorktreeRemove`; its plugin
and marketplace entries in that window are consumer-side fixes
(`installed_plugins.json` commit recording, reload-preview extraction,
`--marketplace` on `/plugin install`) that leave the published
marketplace manifest format alone, and the npm-source `--ignore-scripts`
hardening doesn't apply to a git-sourced marketplace. Gemini CLI
`v0.60.0` hardened extension-loader path resolution and added consent
prompts for environment changes; `gemini-extension.json` declares only
name, version, and description — no command paths outside the extension
directory and no environment — so neither touches it. Codex
`rust-v0.155.1` and OpenCode `v1.18.26`–`v1.18.31` carry nothing
affecting the marketplace or the plugins API.
- **README date stamp**: the blockquote already reads September 2026.
- **Dependency PRs**: none open — no Dependabot or renovate PR to review
this week.
</details>
Co-authored-by: worktrunk-bot <254187624+worktrunk-bot@users.noreply.github.com>
Weekly CI pin bump: `worktrunk` `=0.78.0` → `=0.79.0`, at three sites (`ci.yaml` ×2, `nightly.yaml`). This is the `wt` that runs the suite (`wt hook pre-merge`) on all three platforms, so it has its own PR: this PR's CI matrix is the only place the bump gets tested. This week's other drifted pins (cargo-nextest and Nushell) are in their own PRs. Compatibility: worktrunk 0.79.0 declares `rust-version = 1.97`, which matches the pinned toolchain (`rust-toolchain.toml` channel `1.97.0`). Neither of 0.79.0's two breaking changes reaches CI. CI calls `wt` only as `wt hook pre-merge --yes <filters>`. The breaking changes are to `wt switch --no-cd -x` (the program now runs in the new worktree) and to `wt merge`/`wt step rebase`, which now pass `--no-update-refs`. CI invokes none of those commands. <details><summary>Weekly checks that found no drift</summary> - **MSRV/toolchain**: current stable is `1.98.1`, so latest−1 is `1.97`, which `Cargo.toml`, `tests/helpers/wt-perf/Cargo.toml`, and `rust-toolchain.toml` already pin. The `nightly-2026-08-01` pins in `nightly.yaml` are about 8 weeks old, inside the three-month window. With no toolchain change, `flake.lock` needed no refresh. - **Other `cargo-install` pins**: `cargo-affected` 0.4.1, `cargo-insta` 1.48.0, `cargo-llvm-cov` 0.9.1, `cargo-msrv` 0.19.3, `cargo-udeps` 0.1.61, and `lychee` 0.24.2 all match their current crates.io releases. - **Codex Cloud tools**: PowerShell `7.6.6` is still the latest `PowerShell/PowerShell` release. `cloud.sh`'s cargo-nextest and Nushell pins move in the sibling PRs. - **Runner images**: `ubuntu-24.04`, `macos-26`, and `windows-2025` each still match their `-latest` label in the `actions/runner-images` table, and `ubuntu-24.04-arm` and `macos-26-intel` follow those rows. Xcode 27 is still badged preview. - **`dependabot.yaml` typescript ignore**: `@astrojs/check` still declares `typescript` `^5.0.0 || ^6.0.0`, so the major-version ignore entry stays (#3877). - **LLM model pins**: `claude-haiku-4.5` is still the current Haiku, and `gpt-6-luna` is what the Codex models page calls "our most efficient model". - **Statusline cache-check**: clean. `wt config state logs profile` reports `same_context_duplicates: []` on a `wt list statusline --format=claude-code` render. - **Agent integration surfaces**: nothing to flag. Claude Code 2.1.280–2.1.283 made no statusline schema change and no `WorktreeCreate`/`WorktreeRemove` change. Its new `claude plugin validate` checks (marketplace names it can't install, unquoted `${CLAUDE_PLUGIN_ROOT}` in shell-form hooks) pass for our manifest: the marketplace and plugin are both named `worktrunk`, and every hook quotes `"$CLAUDE_PLUGIN_ROOT/..."`. Codex `rust-v0.156.x`–`0.157.1`, Gemini CLI `v0.61.0`, and OpenCode `v1.18.32` change nothing in the marketplace, extension, or plugins API. - **README date stamp**: already September 2026. - **Dependency PRs**: none open. </details> Co-authored-by: worktrunk-bot <254187624+worktrunk-bot@users.noreply.github.com>
publish-docsis red onmain:@astrojs/check@0.9.10declarespeer typescript@"^5.0.0 || ^6.0.0", so the TypeScript 7 lockfile that landed in #3870 makesnpm cifail withERESOLVEbefore any docs step runs. This revertsdocs/package.json+docs/package-lock.jsonto their pre-bump state and tells Dependabot to skip TypeScript majors until@astrojs/checkaccepts^7. Verified locally withnpm ciandnpm run check.Problem
Run 32615600271 failed at the Install docs dependencies step of
.github/actions/docs-build:check-docshad already failed the same way on #3870 itself (run 32558778950), so the breakage merged rather than appearing after it. Everypublish-docsrun since is red —64efa5e5dandbe2c088a6(currentmain) — and every subsequent run will be, because the failure is in dependency installation, not in anything docs content can change.There is no upstream fix to move to:
0.9.10is the latest@astrojs/check, and its peer range still excludes^7.Solution
Three parts, two durable:
docs/package.jsongoes back totypescript: "^6.0.3"anddocs/package-lock.jsonis restored byte-for-byte to8e405bced(chore: bump typescript from 6.0.3 to 7.0.2 in /docs in the docs-site group #3870's merge base) rather than regenerated — chore: bump typescript from 6.0.3 to 7.0.2 in /docs in the docs-site group #3870 is the only commit to touch either file since, and the local npm is 10.9.8 against CI's 11.17.0, which would otherwise striplibcmetadata from ~20 optional dependency entries as unrelated churn. The lockfile diff is exactly the inverse of chore: bump typescript from 6.0.3 to 7.0.2 in /docs in the docs-site group #3870's.ignoreentry fortypescriptversion-update:semver-majorunder the/docsnpm ecosystem. Without it Dependabot reproposes the identical bump next week, and the fix is a revert each time. Minor and patch TypeScript 6 updates still flow through thedocs-sitegroup; the comment names the condition for removing the entry.ignoreentry suppresses the only proposal Dependabot would ever make for it, so nothing surfaces when@astrojs/checkwidens its peer range — and the rule is version-agnostic, so it would go on blocking a TypeScript major@astrojs/checkfully supports. The weekly CI Pin Bumps pass is where versions Dependabot can't see get revisited, and it currently says to skipdocs/package.jsonoutright;.claude/skills/running-tend/SKILL.mdnow names this entry as the exception that pass owns, with thenpm viewcheck to run and the condition for deleting it.Pinning at the manifest is the right level here — the alternative fixes (
npm ci --legacy-peer-depsin the composite action, or anoverridesblock) would silence the peer conflict for every dependency rather than the one that is genuinely incompatible, and would let a real breakage install quietly.Testing
Ran the CI install and check steps locally against the fixed tree, in
docs/:Verification output
npm cileft the lockfile unmodified, confirming manifest and lockfile agree. The remainingdocs-buildsteps (npm test,npm run build,npm run test:site) need theworktrunk-assetsclone, so CI covers those —check-docson this PR exercises the whole action.Fixes #3879 — the scheduled
nightlyrun auto-filed it for the sameERESOLVEonlink-check(run 32621228902).Automated fix for failed run