ci(renovate): park TypeScript majors behind dashboard approval #58

Merged
ullrich merged 1 commit from ci/renovate-park-typescript-majors into main 2026-07-31 07:15:45 +00:00
Owner

Closes the loop on #45. A TypeScript major is a decision, not a bump — this parks it on the dependency dashboard so it appears only when someone deliberately ticks it.

Why TS 7 is blocked, precisely

TS 7 ships without the programmatic compiler API, and is designed to run side-by-side with TS 6 (announcement). That is the root cause of typescript-eslint's incompatibility (typescript-eslint#12518) — not a lagging port.

typescript-estree converts TS source into an ESTree AST for ESLint by calling that API. With no API to call it fails at import, so lint dies before any rule runs:

TypeError: Cannot read properties of undefined (reading 'Cjs')
  at @typescript-eslint/typescript-estree/…

Seven packages, identical failure, zero files linted. Nothing in this repo could have fixed it.

Expo is a second, independent blocker: it does not run on TS 7, and Expo rather than the catalog owns apps/mobile's TypeScript version — expo.install.exclude lists only react and @sentry/react-native, so expo install --fix manages TS there.

The part worth recording for later

Because TS 7 is a side-by-side install, adopting it means adding it — TS 7 to compile, TS 6 retained for API consumers like eslint — not rewriting ~6.0.3 to ~7.0.0 in the catalog and apps/mobile, which is what Renovate raises. The bump is the wrong shape regardless of when upstream catches up. That is the thing most likely to be forgotten in six months, so it lives in the config comment.

dependencyDashboardApproval, not enabled: false

Disabling would hide the decision. This is one that should stay visible — same treatment the config already gives Expo SDK majors, for the same reason.

Verified

Effective flags computed per scenario with later-wins ordering, rather than read off rule order:

scenario enabled needs approval automerge
typescript major (catalog) true true false
typescript major (mobile literal) true true false
typescript patch true false true
typescript minor true false true
vite major (control) true false false

Both TS locations are covered, and patch/minor still flow normally.

Correction

#45 bumped both the catalog and apps/mobile. I earlier described it as mobile-only, having read a diff fetched before Renovate rebased the branch. It was raising the coordinated change correctly — the blockers are upstream, not the PR.

Closes the loop on #45. A TypeScript major is a decision, not a bump — this parks it on the dependency dashboard so it appears only when someone deliberately ticks it. ## Why TS 7 is blocked, precisely **TS 7 ships without the programmatic compiler API**, and is designed to run side-by-side with TS 6 ([announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0)). That is the root cause of typescript-eslint's incompatibility ([typescript-eslint#12518](https://github.com/typescript-eslint/typescript-eslint/issues/12518)) — not a lagging port. `typescript-estree` converts TS source into an ESTree AST for ESLint by calling that API. With no API to call it fails at *import*, so lint dies before any rule runs: ``` TypeError: Cannot read properties of undefined (reading 'Cjs') at @typescript-eslint/typescript-estree/… ``` Seven packages, identical failure, **zero files linted**. Nothing in this repo could have fixed it. **Expo is a second, independent blocker**: it does not run on TS 7, and Expo rather than the catalog owns `apps/mobile`'s TypeScript version — `expo.install.exclude` lists only `react` and `@sentry/react-native`, so `expo install --fix` manages TS there. ## The part worth recording for later Because TS 7 is a **side-by-side** install, adopting it means *adding* it — TS 7 to compile, TS 6 retained for API consumers like eslint — **not** rewriting `~6.0.3` to `~7.0.0` in the catalog and `apps/mobile`, which is what Renovate raises. The bump is the wrong shape regardless of when upstream catches up. That is the thing most likely to be forgotten in six months, so it lives in the config comment. ## `dependencyDashboardApproval`, not `enabled: false` Disabling would hide the decision. This is one that should stay visible — same treatment the config already gives Expo SDK majors, for the same reason. ## Verified Effective flags computed per scenario with later-wins ordering, rather than read off rule order: | scenario | enabled | needs approval | automerge | |---|---|---|---| | typescript major (catalog) | true | **true** | false | | typescript major (mobile literal) | true | **true** | false | | typescript patch | true | false | true | | typescript minor | true | false | true | | vite major (control) | true | false | false | Both TS locations are covered, and patch/minor still flow normally. ## Correction #45 bumped **both** the catalog and `apps/mobile`. I earlier described it as mobile-only, having read a diff fetched before Renovate rebased the branch. It was raising the coordinated change correctly — the blockers are upstream, not the PR.
chore(deps): Update dependency typescript to v7
Some checks failed
CD Staging / Build & Push Docker Images (pull_request) Has been skipped
CD Staging / Build & Push Docker Images-1 (pull_request) Has been skipped
CD Staging / Deploy Staging (pull_request) Has been skipped
CD Staging / Deploy PR Preview (pull_request) Has been skipped
CI / Security Scan (pull_request) Successful in 2m23s
CI / Dockerfile Package Check (pull_request) Successful in 32s
CI / Checks (pull_request) Failing after 6m58s
CI / E2E Tests (pull_request) Has been skipped
CI / Visual Tests (pull_request) Successful in 2m36s
CI / Journal Image Smoke Test (pull_request) Successful in 23m22s
CD Staging / Tear Down PR Preview (pull_request) Successful in 31s
eafa528402
ci(renovate): park TypeScript majors behind dashboard approval
Some checks failed
CD Staging / Build & Push Docker Images (pull_request) Has been skipped
CD Staging / Build & Push Docker Images-1 (pull_request) Has been skipped
CD Staging / Deploy Staging (pull_request) Has been skipped
CD Staging / Deploy PR Preview (pull_request) Has been skipped
CD Staging / Tear Down PR Preview (pull_request) Has been skipped
CI / Security Scan (pull_request) Has been cancelled
CI / Dockerfile Package Check (pull_request) Has been cancelled
CI / Checks (pull_request) Has been cancelled
CI / Visual Tests (pull_request) Has been cancelled
CI / E2E Tests (pull_request) Has been cancelled
CI / Journal Image Smoke Test (pull_request) Has been cancelled
5b507f5a02
Closes the loop on #45. A TypeScript major is a decision, not a bump, so it
should appear only when someone deliberately asks for it.

TS 7 is the native port and it ships WITHOUT the programmatic compiler API,
designed to run side-by-side with TS 6:
  https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0

That is the actual reason typescript-eslint cannot support it:
  https://github.com/typescript-eslint/typescript-eslint/issues/12518

`typescript-estree` converts TS source into an ESTree AST for ESLint by calling
that API. With no API to call it fails at import, so lint dies before any rule
runs — "Cannot read properties of undefined (reading 'Cjs')" across seven
packages, zero files linted. Nothing in this repo could have fixed it.

Expo is a second, independent blocker: it does not run on TS 7, and Expo rather
than the catalog owns apps/mobile's TypeScript version (`expo.install.exclude`
lists only react and @sentry/react-native, so `expo install --fix` manages TS).

The part worth recording for whoever picks this up later: because TS 7 is a
side-by-side install, adopting it means ADDING it — TS 7 to compile, TS 6
retained for API consumers — not rewriting ~6.0.3 to ~7.0.0 in the catalog and
apps/mobile, which is what Renovate raises. The bump is the wrong shape
regardless of when upstream catches up.

`dependencyDashboardApproval` rather than `enabled: false` on purpose: disabling
would hide the decision, and this is one that should stay visible.

Verified by computing effective flags per scenario with later-wins ordering:

  typescript major (catalog)          approval=true   automerge=false
  typescript major (mobile literal)   approval=true   automerge=false
  typescript patch/minor              approval=false  automerge=true
  vite major (control)                approval=false  automerge=false

Note #45 bumped BOTH the catalog and apps/mobile — I earlier described it as
mobile-only, having read a diff from before Renovate rebased the branch. It was
raising the coordinated change correctly; the blockers are upstream, not the PR.

Refs #45

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8hNxgYp777FRqYtVmQNaU
ullrich force-pushed ci/renovate-park-typescript-majors from 5b507f5a02
Some checks failed
CD Staging / Build & Push Docker Images (pull_request) Has been skipped
CD Staging / Build & Push Docker Images-1 (pull_request) Has been skipped
CD Staging / Deploy Staging (pull_request) Has been skipped
CD Staging / Deploy PR Preview (pull_request) Has been skipped
CD Staging / Tear Down PR Preview (pull_request) Has been skipped
CI / Security Scan (pull_request) Has been cancelled
CI / Dockerfile Package Check (pull_request) Has been cancelled
CI / Checks (pull_request) Has been cancelled
CI / Visual Tests (pull_request) Has been cancelled
CI / E2E Tests (pull_request) Has been cancelled
CI / Journal Image Smoke Test (pull_request) Has been cancelled
to f08e77d3c8
All checks were successful
CI / Security Scan (pull_request) Successful in 1m6s
CI / Dockerfile Package Check (pull_request) Successful in 25s
CI / Checks (pull_request) Successful in 5m43s
CI / Visual Tests (pull_request) Successful in 5m46s
CI / Journal Image Smoke Test (pull_request) Successful in 14m28s
CI / E2E Tests (pull_request) Successful in 10m25s
2026-07-31 07:15:28 +00:00
Compare
ullrich deleted branch ci/renovate-park-typescript-majors 2026-07-31 07:15:45 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
trails-cool/trails!58
No description provided.