Skip to content

chore(deps): resolve major Renovate updates, fix Vercel deploys & enable safe auto-merge - #166

Merged
phonofidelic merged 9 commits into
mainfrom
claude/renovate-auto-merge-config-b0wv7g
Jul 23, 2026
Merged

chore(deps): resolve major Renovate updates, fix Vercel deploys & enable safe auto-merge#166
phonofidelic merged 9 commits into
mainfrom
claude/renovate-auto-merge-config-b0wv7g

Conversation

@phonofidelic

@phonofidelic phonofidelic commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Summary

Clears the backlog of open Renovate PRs, fixes the Vercel deploy failures that were blocking Renovate auto-merge, and hardens renovate.json so safe updates auto-merge going forward.

Major dependency updates

  • tailwindcss 3 → 4 — CSS-first migration (@import "tailwindcss" + @config in globals.css, @tailwindcss/postcss plugin); theme, custom border-3, and class-based dark mode preserved via the retained tailwind.config.ts
  • @sanity/image-url 1 → 2SanityImageSource is now a root named export
  • @vercel/analytics 1 → 2, @vercel/speed-insights 1 → 2
  • import-in-the-middle 1 → 3, react-cookie 7 → 8

Deploy fixes

  • Sanity typegen — add --force to sanity schema extract. The committed src/sanity/schema.json made the prebuild typegen step fail (“already exists, pass --force”), breaking every Vercel pnpm build while CI stayed green (CI runs next build directly, skipping prebuild). This was the actual cause of the red checks blocking auto-merge.
  • Node version — declare engines.node: "24.x" (matches .nvmrc and CI). A build dependency now requires Node ≥ 22.12; Vercel was building on Node 20. (Also set Node 24 in Vercel Project Settings.)

Renovate auto-merge (renovate.json)

  • platformAutomerge so GitHub-native auto-merge lands PRs the moment required checks pass
  • auto-merge lockfile-maintenance and pin/digest updates
  • keep grouped minor/patch auto-merge; majors stay manual
  • enable the dependency dashboard

Held back

Verification

  • pnpm install --frozen-lockfile, pnpm build, pnpm run lint — all green under pnpm 9 (matching Vercel/CI)
  • Vercel deploy green

Renovate PRs

Auto-close on merge: #151, #157, #159, #160, #161, #164. #165 (grouped minor/patch) rebases onto the deploy fixes and auto-merges. Held: #149, #154, #163.

🤖 Generated with Claude Code

claude added 2 commits July 22, 2026 19:43
…x Vercel typegen

Addresses the backlog of open Renovate major-version PRs and unblocks the
failing Vercel deployments that were preventing Renovate auto-merge.

Dependency majors:
- tailwindcss 3 -> 4 (CSS-first: @import "tailwindcss" + @config in
  globals.css, @tailwindcss/postcss plugin; existing theme, custom border-3
  and class-based dark mode preserved via the retained tailwind.config.ts)
- @sanity/image-url 1 -> 2 (SanityImageSource now a root named export)
- @vercel/analytics 1 -> 2, @vercel/speed-insights 1 -> 2
- import-in-the-middle 1 -> 3, react-cookie 7 -> 8

Tooling:
- pnpm 9 -> 11; move pnpm settings out of package.json (no longer read by
  pnpm 11) into pnpm-workspace.yaml, approving build scripts via allowBuilds

Vercel deploy fix:
- Add --force to `sanity schema extract`. The committed src/sanity/schema.json
  made the prebuild typegen step fail ("already exists, pass --force"), which
  broke every Vercel `pnpm build` while CI stayed green (CI runs `next build`
  directly, skipping prebuild).

Held back (require a Next 15 -> 16 upgrade, out of scope here): next-sanity v13
(peers: next ^16, sanity ^5||^6) and eslint v10 (needs eslint-config-next 16).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
- platformAutomerge so GitHub-native auto-merge lands PRs the moment
  required checks pass (more reliable than Renovate polling)
- auto-merge lockFileMaintenance and pin/digest updates
- keep the grouped minor/patch auto-merge; explicitly keep majors manual
- enable the dependency dashboard

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
website Ready Ready Preview, ✅ 1 resolved Jul 23, 2026 11:56am

Vercel builds without Corepack, so it ignores the `packageManager` field and
runs pnpm 9. pnpm 9 treats pnpm-workspace.yaml as a workspace definition and
aborts with "packages field missing or empty" on the settings-only file the
pnpm 11 migration added, breaking every deploy.

Revert the pnpm 11 bump (restore packageManager pnpm@9.15.9 and the package.json
pnpm config, remove pnpm-workspace.yaml). All other dependency migrations and
the sanity typegen --force deploy fix remain. pnpm v11 (#154) is held alongside
next-sanity v13 and eslint v10; adopt it later by enabling Corepack on Vercel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
A build dependency now requires Node >=22.12, but Vercel was building on
Node 20. Vercel doesn't read .nvmrc; declaring engines.node lets it (and other
tooling) pick a supported Node major. Matches .nvmrc (24.16.0) and CI (Node 24).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
@phonofidelic phonofidelic changed the title chore(deps): resolve major dependency updates, migrate to pnpm 11, fix Vercel typegen chore(deps): resolve major Renovate updates, fix Vercel deploys & enable safe auto-merge Jul 22, 2026
Tailwind v4 reimplemented `divide-x` to put the divider on each child's
inline-end (right) except the last, whereas v3 put it on the left of each
child except the first. ProjectLink paired the divider with `pl-2 first:pl-0`
(left padding), so under v4 the divider hugged the left link with an uneven
gap to the right one. Move the padding to the right side (`pr-2 last:pr-0`)
so it pairs with v4's divider, restoring the original symmetric spacing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
Tailwind v4 puts utilities in a native `@layer utilities`, and unlayered CSS
beats any layer. The leftover create-next-app `body { background: var(--background) }`
rule in globals.css was unlayered, so under v4 it overrode the body's
`bg-white dark:bg-zinc-900` / `text-zinc-800 dark:text-gray-200` utilities —
making the page follow `prefers-color-scheme` (system) only and ignore the
`.dark` class toggled by ThemeSelector. In v3 the utilities won by specificity.

Move the `body` rule into `@layer base` so the theme utilities win again,
restoring Light/Dark/System switching. Vars and font-family are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
universal-cookie v8 no longer defaults the cookie path to "/", so the
client-written theme cookie was scoped to the current document path and
was not read back on refresh (and "System" could not clear the "/"-scoped
cookie the middleware sets). Pass { path: "/" } explicitly to setCookie
and removeCookie to restore v4 behavior.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
claude added 2 commits July 23, 2026 11:34
The client CookiesProvider wrote the theme cookie with SameSite=Strict,
while the middleware re-stamps it with Next's default SameSite=Lax. Strict
cookies are withheld on top-level navigations that don't originate
same-site, so the value set on switch could be dropped on the next full
page load, and the two writers disagreed on cookie attributes. A theme
cookie must be sent for SSR on every top-level navigation, so use Lax to
match the middleware.

Reverts the earlier redundant explicit path args: defaultSetOptions
already supplies path: '/'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
The middleware re-set the theme (and anonymous_id/override) cookies with
only maxAge, while the client CookiesProvider writes path/sameSite/secure.
Since a cookie's identity is name+path+domain, the two writers overwrote
each other's cookie with drifting attributes, contributing to the theme
value flaking across a refresh. Stamp the same attributes on both sides
(path: '/', sameSite: 'lax', secure).

Also fix the maxAge unit: it was 1000x too large (maxAge is seconds, not
milliseconds), so "1 year" is 365*60*60*24.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmhussXpt1fFqT9jEkD5NN
@phonofidelic
phonofidelic merged commit ca83107 into main Jul 23, 2026
3 checks passed
@phonofidelic
phonofidelic deleted the claude/renovate-auto-merge-config-b0wv7g branch July 23, 2026 11:57
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.

2 participants