Skip to content
This repository was archived by the owner on Oct 27, 2026. It is now read-only.

ci: wait for the published design-system version before bumping - #1233

Merged
teallarson merged 2 commits into
mainfrom
claude/fix-design-system-autobump
Oct 8, 2026
Merged

teallarson merged 2 commits into
mainfrom
claude/fix-design-system-autobump

Conversation

@claude

@claude claude Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Teal Larson · Slack thread

Before: Every automated design-system bump opened or updated the PR with the release before the one that triggered it. For example, the monorepo published 7.11.0 at 22:18:42Z on 2026-10-07 and dispatched run 37695420617 at 22:19:20Z. That run resolved latest at 22:19:47Z, but npm didn't serve 7.11.0 until 22:22:01Z, so #1223 got 7.10.1. Runs 37527886593, 37507281617, and 37355238970 show the same 4–5 minute gap.

After: When the dispatch passes a version, the workflow polls npm until it serves that exact version (every 30s, up to 20 attempts, so at most 10 minutes), then runs pnpm install @arcadeai/design-system@<version>. If no version is passed, it installs latest as it does today, so manual runs keep working.

How: workflow_dispatch gets an optional version input. A new step checks the input against a semver regex, then loops on npm view @arcadeai/design-system@$VERSION version --prefer-online. The install step uses ${{ inputs.version || 'latest' }}, passed through env instead of being interpolated into the script.

Companion change in ArcadeAI/monorepo: https://github.com/ArcadeAI/monorepo/pull/5265 updates .github/workflows/design-system-publish.yml (trigger-docs-update job) to pass the version it published:

gh workflow run update-design-system-dependency.yml \
  --repo ArcadeAI/docs \
  --ref main \
  -f version=${{ needs.check-version.outputs.version }}

Merge this PR before ArcadeAI/monorepo#5265. gh workflow run -f version=... fails against a workflow that doesn't declare the input.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WDfrftnAqwD1QKiL3MYXBf


Generated by Claude Code


Note

Low Risk
CI-only workflow change with input validation; no application runtime or auth/data paths affected.

Overview
Fixes automated design-system bumps installing the previous npm release when the monorepo dispatches the workflow right after publish, before the new version is visible on the registry.

The update-design-system-dependency workflow now accepts an optional version workflow_dispatch input. When set, it validates semver, polls npm (30s intervals, up to ~10 minutes) until @arcadeai/design-system@<version> is available, then runs pnpm install for that exact version. Manual runs with an empty input still install latest unchanged.

This pairs with a monorepo change that passes the published version on dispatch; that dispatch must run against a workflow that already declares the input.

Reviewed by Cursor Bugbot for commit 0bc5be0. Bugbot is set up for automated code reviews on this repo. Configure here.

The monorepo publish workflow dispatches update-design-system-dependency
seconds after `bun publish` returns, but npm takes several minutes to serve
the new version, so `pnpm install @arcadeai/design-system@latest` resolved
the previous release on every run. Accept an optional `version` input, poll
npm until that version is served, and install it exactly.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WDfrftnAqwD1QKiL3MYXBf
@vercel

vercel Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
docs Ready Ready Preview Oct 8, 2026 2:13pm UTC

Request Review

@claude
claude Bot marked this pull request as ready for review October 8, 2026 14:02
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WDfrftnAqwD1QKiL3MYXBf
@teallarson
teallarson merged commit e2a482a into main Oct 8, 2026
7 checks passed
sdserranog added a commit that referenced this pull request Oct 19, 2026
* chore: scaffold Fumadocs + Next 16 + bun skeleton

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs: migration plan / workstream contract

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* feat: migrate all docs content, components, toolkit pages, scripts, tests and CI to Fumadocs

- 170 MDX pages + 37 meta.json converted from app/en (bodies byte-identical, verified by scripts/migration/verify-content.ts)
- Nextra-compat MDX components (Callout, Tabs with index-based persistence, Steps, Cards, pre with Terminal header, Mermaid)
- toolkit (MCP server) pages served from JSON through the docs catch-all (124 routes) + generated sidebar meta.json
- scripts, 72 test files, husky hooks, GitHub workflows ported to bun
- llms.mdx per-page markdown route, Orama search, sitemap, redirects, security headers
- update-internal-links: skip locale-root redirects (empty path matched every link/backtick pair)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* feat(content): link directly to /en routes; fix stale internal links

- codemod prefixes 860 root-relative content links with /en so clicks no
  longer bounce through the proxy locale redirect (verifier updated to match)
- migrate-content gains --content-only and emits hidden-page markers and
  formatted meta.json so a re-run leaves a clean tree
- 404 page, MCP client grid and landing page point at current URLs

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(ui): restore the Nextra chrome and fix visual regressions

- notebook layout: top navbar with logo, search, Sign Up / Dashboard, GitHub
  and Discord (single GitHub icon), sidebar sections open by default
- Docs Home icon (lucide 1.x renamed Home -> House)
- Nextra-style coloured callouts; terminal traffic lights no longer overridden
  by shiki span styles; description no longer duplicated under the title
- toolkit pages: single breadcrumb, content clear of the fixed TOC panel
- page components rendered inside the prose body keep their own heading
  spacing; toolkit catalog designation and behavior-flag order restored
  (the linter sorts object keys, so display order is now explicit)
- Edit on GitHub moves under the table of contents

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* ci: skip jobs that need upstream secrets when they are not configured

- llms.txt generation skips (with a notice) when OPENAI_API_KEY is unset
- Algolia crawler sync runs only when ALGOLIA_CRAWLER_ID is configured
- scheduled toolkit-docs generation and example-date updates run only in
  the upstream repo or when triggered manually
- schema validation: an empty file list no longer produces a bare "|" that
  made the validator fail with "No files found" (latent upstream bug)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix: keep root files out of the locale redirect; verifier overrides; freshness schema

- /:locale redirect scoped to (en|es|pt-BR): it was sending /llms.txt,
  /robots.txt and /sitemap.xml to /<file>/home (404)
- proxy matcher lets /specs/*.yaml through
- verify-content reads scripts/migration/overrides/*.json so intentional
  moves, deletions, enhanced pages and new hub pages can be declared per owner
- frontmatter gains lastVerified / verifyEvery for the freshness badge

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* build: allow NEXT_DIST_DIR for parallel builds

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Bring in upstream docs changes since the migration snapshot

The migration was taken from ArcadeAI/docs at 2ba3f56. This ports the
twelve commits made there since, up to ab83fe0.

- New Private Registry page under Governance, with its four images,
  its menu entry, and the links to it from the governance overview and
  the two MCP gateway pages (#1225, #1230, #1231).
- Dashboard menu label "Connected apps" is now "OAuth providers" on 36
  auth provider pages (#1226).
- Slack: reactions:write added to the scope list (#1224).
- Toolkit data refreshed for 83 files (#1219), and the generator pages
  public tools at the API's 1,000 cap (#1228).
- llms.txt: summaries come from Claude Haiku 4.5, placeholder
  descriptions are retried, and the file is not rewritten when only the
  header would change; workflows read ANTHROPIC_API_KEY (#1229).
- Design system 7.11.0, and the update workflow waits for the requested
  version to appear on npm (#1223, #1233).

The Next.js and transitive security bumps (#1235, #1240) needed no
change: the lockfile here already had the patched versions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Make the migrated site an exact copy of production

A side-by-side comparison with docs.arcade.dev showed the migration had
the same content and routes but a different look. This ports
production's own layout and components instead of approximating them.

- Chrome (components/chrome): navbar, sidebar with its footer row,
  mobile menu, breadcrumb, title row with the single "Copy page" button,
  table of contents, last updated date, previous/next links, footer band
  and 404 page, with production's sizes, colours and behaviour.
- Content: Nextra's element renderers ported for headings, links, lists,
  tables, tabs (every panel in the HTML, synced and remembered), code
  blocks, steps, callouts, cards, details and image zoom. Heading ids
  come from one github-slugger per page, as in production.
- Toolkit, catalog and home pages: production's typography, borders,
  legend text and "Copy page" request.
- Search is production's component on react-instantsearch.
- Head metadata, sidebar tree and sitemap are equal on all 294 pages.
- /en and /es redirect through the proxy with a 307, as in production.
- Packages shared with production are pinned to its versions (React,
  lucide-react, ui-kit, mermaid, motion, posthog and others). Biome and
  ultracite stay on the versions this repo's config is written for.
- Upstream #1242 (Entra group access permissions) ported.

Not copied on purpose: production lets the toolkit article run 16px
under the right-hand panel at 1280-1440px, which clips text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Close the gaps a full-page pixel diff found against production

Every one of the 294 pages was screenshotted top to bottom on
docs.arcade.dev and on this build, in dark desktop, dark phone and light
desktop, and compared pixel by pixel.

- Code fences: Nextra's line-highlight meta is parsed in full, so
  `{1-5} {16}` and `{9-18, 20, 24}` shade the same lines as production.
- Table of contents: inline code in an entry renders with the content's
  own code component.
- Toolkit pages: the article has production's exact width again, so
  every line breaks in the same place.
- "Last updated on": imported pages carry the date production shows for
  them (data/upstream-last-modified.json); a page edited after the
  import uses its own git date. Dates are formatted in UTC.

Result: 289 of 294 pages are pixel-identical in dark desktop and 290 on
phone. The rest are the two PostHog survey pages (no key locally), one
recompressed image and Cloudflare's e-mail protection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Upgrade every package to its latest version

Next.js 16.4.0, React 19.3.0, Fumadocs 16.17, Tailwind 4.3.3,
TypeScript 7, Vitest 5, lucide-react 1.x, mermaid 12, motion 14,
ui-kit 0.21, zod 4.6, posthog, algolia and the rest. Changelogs for
every major jump were checked against how this repo uses the package.

- Mermaid 12 defaults to the ELK layout and the "neo" look; the diagram
  component asks for dagre and "classic", which the diagrams were
  written for.
- The style-review scripts named a retired Claude model; they use
  claude-sonnet-5-5 now.

No other code needed changing: type check, lint, 884 tests and the
production build pass. Against production, 172 of 294 pages stay
pixel-identical on desktop; about 120 differ by at most 0.03% of
pixels (redrawn lucide icons), and the glossary diagrams by 0.7%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Remove machine-specific paths from the migration script and plan

The content migration script defaulted to a path on one developer machine.
It now requires --source or MIGRATION_SOURCE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Remove migration scripts and plan, run the toolkit generator on Node

Drop scripts/migration and MIGRATION_PLAN.md along with their package
scripts and references.

The toolkit generator CLI and the sidebar sync crashed under Bun: Bun
resolves the design system bun export condition, which points at
sources the package does not ship. Run both through the pinned tsx, as
production does, and add Node to the workflow. The nine integration
meta.json files now carry the key order the sync writes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Run llms.txt generation on Node

scripts/generate-llmstxt.ts crashed under Bun for the same reason as the
toolkit generator: it imports design system metadata, and Bun resolves
the package bun export condition to sources that are not shipped. Run it
through the pinned tsx and add Node to the llms.txt workflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Keep package versions at production levels, restore dropped files

Revert the package upgrades so the pull request only swaps the docs
framework: every package production also uses is back at production
version, including vite.

Restore two files production has that the migration dropped: the
curate-toolkit-docs skill (paths updated for the new layout) and
components.json.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Drop formatting and refactors unrelated to the migration

Use production lint versions and config (Biome 2.3.2, ultracite 6.1.0)
so files production already has are not reformatted, and put
production text back wherever the migration only needed to move a file
or update its import paths. Each restored file was kept only if
typecheck, lint, the test suite and the rendered HTML of every page
were unaffected.

Also restore production Node version (22), its schema validation
workflow and its .gitignore, and split three functions in new code that
production complexity rule rejects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Point the changelog agent and the Examples page at the new paths

The changelog agent still wrote to app/en/references/changelog/page.mdx,
which no longer exists, and the Examples page told contributors to edit
the old file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Remove stale references to the old layout

Curation import lines, and the toolkit data generated from them, named
modules that no longer exist (app/_components and nextra/components).
They now name the current components, with the curation hashes
refreshed through the generator hash function.

Also correct components.json paths, drop the i18n cache entry from
.cursorignore, and reword comments that described the previous setup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Update old paths in test fixtures and two comments

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Restore the header and footer on the page-not-found screen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Match production: dependency pins, crawler selectors, workflow conditions

- Carry the security pins from pnpm-workspace.yaml into package.json.
- Exempt @arcadeai/design-system from the release-age guard so the
  update workflow can install a release right after it is published.
- Restore the crawler selectors: the pages keep the same class names.
- Remove job conditions and the build directory option that production
  does not have.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Match production's proxy: drop the yaml exclusion and the pathname refactor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Point Next at the following page on toolkit pages

Toolkit pages are not part of the previous/next sequence. When one was
open, Next skipped the real page right after it (Gmail went to Tavily
instead of Nimble). Previous and Next now point at the pages on either
side of it. Nextra had the same skip on production.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Check the root meta.json in the pre-commit hook

The hook's pattern needed a folder after content/docs/, so the top-level
sidebar file never reached check-meta. It does now.

The catch-all also passes the toolkit pages' breadcrumb explicitly, with
a note that the sidebar trail above the toolkit's own one matches
production.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 0bc5be07 Deployed Oct 8, 2026 by vercel[bot]
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants