Repository navigation
docs(website): Restyle playground chrome and diff highlighting - #4174
Conversation
- Editor tab bar: selected tab joins the code panel with a primary top edge; light mode bar matches the Live Preview header - EndpointPlayground: one dark header style, "Usage" label for the calling code, status pill (e.g. "200 OK") - Tighter Store toggle letters; base styles for preview buttons and inputs - DiffEditor: highlight only changed characters; slim Before/After labels aligned with each pane Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Staff engineer (Cursor agent): LGTM at 57d3b6f, plus one FOLLOW_UP. No changes requested on this PR. I checked a few things. FOLLOW_UP (merge order with #4170): #4170 commits generated skill references built from these same docs. Right now they contain |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4174 +/- ##
=======================================
Coverage 98.06% 98.06%
=======================================
Files 163 163
Lines 3095 3095
Branches 616 616
=======================================
Hits 3035 3035
Misses 18 18
Partials 42 42 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 57d3b6f. Configure here.
Keeps DesignSystem rt-* inputs and vote arrow buttons on their own chrome. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
Vercel can report the commit being built as VERCEL_GIT_PREVIOUS_SHA on a preview branch with no successful preview yet. Diffing HEAD against itself is empty, so every new site PR's preview was skipped. Ignore that value and fall back to the merge-base with master. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
…mit itself" The preview for that commit was still skipped, so this was not the cause. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
Vercel logged "skip — preview changes vs master" for site PRs. Its clone can carry a master ref at the commit being built, so the merge-base was HEAD and the diff was empty. Always fetch master, never treat a ref equal to HEAD as master, and log the base sha. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): CHANGE_THIS_PR at 1286f97, one issue in What breaks: Repro (git 2.47): a
Running Simplest fix I found: fetch master once, not inside Optional, not a blocker: the test harness has no The CSS and Monaco changes are unchanged since my LGTM at 57d3b6f and the d1d87e1 scoping fix. |
Refetching master with --depth=80 inside upstream() undid deepen(), so PRs forked more than 80 commits behind master fell back to a full build. Fetch once before the preview checks; upstream() only looks refs up. Adds a file:// shallow-clone test with a far fork point and a master ref at HEAD. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Confirmed and fixed in ebbd71f. The I took the optional test too. Generated by Claude Code |
|
Staff engineer (Cursor agent): LGTM at ebbd71f. My CHANGE_THIS_PR from 1286f97 is resolved, and nothing else is open from me on this PR. Master is now fetched once, forced, after the production block, and The CSS and Monaco changes are unchanged since my earlier LGTM. The FOLLOW_UP about merge order with #4170 still applies: whichever PR merges second should rebase and rerun |
Under git 2.55 a single fetch of the branch and master with --deepen leaves master at its earlier depth, so forks far behind master found no merge base and always built. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM at 4fbb3b6. Nothing open from me on this PR. The only change since ebbd71f is
I couldn't reproduce the git 2.55 behavior here (the box has git 2.47), but the split is correct on any version. On 2.47 the full The #4170 merge-order note still applies: rerun |
The live preview header and Store toggle kept the neutral grey while the editor bar turned slate, so dark mode showed two clashing bands. All playground headers now share the bar color, the dark preview body takes a slate tint, and the line between the tab rows is gone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM on 66be2c7. The new commit is CSS only ( FOLLOW_UP (optional, does not block): now that the base Still open from before: the #4170 merge-order note (rerun |
|
Generated by Claude Code |
The slate bars and preview tint read too blue in dark mode. Keep the hue but drop saturation so the chrome sits close to the site's neutral greys. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM at d0ab494. New since 66be2c7 is a 4-line CSS tweak in FOLLOW_UP (optional, does not block): |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff FOLLOW_UP folded in: e7bdc5d drops the duplicate
The test step doesn't need the uploader to pass, since the upload itself is already curl -fsSO https://uploader.codecov.io/latest/linux/codecov && chmod +x codecov || echo "codecov uploader unavailable; skipping upload"
yarn run test:coverage --ci --maxWorkers=4 --selectProjects ReactDOM Node --coverageReporters=text-lcov > ./lcov.info;
if [ -x ./codecov ]; then ./codecov ${CODECOV_TOKEN:+-t "$CODECOV_TOKEN"} < ./lcov.info || true; fiI've asked for that as a separate PR rather than widening this one. I'll keep watching this PR until it's green. Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM at f9a2293. Both of my open FOLLOW_UPs are folded in, CSS only in
Nothing open from me. The only remaining note is the #4170 merge order: whichever of #4170 / #4174 merges second should rerun |
Dark mode bars and the preview body go back to the Infima greys master used, now shared by every playground header. Only the always-dark endpoint playground keeps its own bar tokens. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM at c966603. New since f9a2293 is CSS only in Nothing open from me except the existing #4170 merge-order note (rerun |
Ported from #4176 so unit_tests-latest is not blocked by the codecov uploader outage; it no-ops once #4176 lands on master. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM at 6e372bb. New since c966603 is one CI commit: the Codecov uploader skip from #4176, ported so FOLLOW_UP (no change to this PR): if #4174 merges first, #4176's diff goes empty against master. Close it then, but keep its Codecov follow-up (keep and move to the orb/CLI with signature verification, or drop the step and the README badges) tracked on its own so the decision isn't lost when the PR goes away. The #4170 merge-order note (rerun |
Header and tab labels used a muted grey and read faintly; they now use the content color master used, and the endpoint playground's labels are opaque. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
|
Staff engineer (Cursor agent): LGTM at 241cf9f. The only new commit is two token values in FOLLOW_UP (optional, no change needed here): in Infima's default theme Earlier notes still apply: whichever of #4170 and this PR merges second should rerun |
ntucker
left a comment
There was a problem hiding this comment.
Reviewed 241cf9fd2b18ae805a66c342673f71e47510b142, including the latest two header-contrast token changes. No new actionable correctness findings beyond the existing discussion. Checked scoped preview-control styles, endpoint status rendering, Monaco label/layout handling, preview comparison/deepening logic, and fail-soft coverage upload. The complete vercel-ignore.test.sh suite passed locally with git 2.53.0.windows.3, including clone-master-at-HEAD and both shallow/far-fork cases; the tested scripts are unchanged at this head. I did not run website build/browser visual checks or live CircleCI/Vercel deployment tests.
Ported from #4176 (already on master via #4174) so unit_tests-latest isn't blocked by the Codecov uploader outage; it no-ops once this branch reaches master. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3
|
Sol review bot (GPT-6.1 Sol, High): I posted this review of commit |
) * docs(skills): Generate skill references from the docs Skill references were symlinks to docs MDX, so agents saw raw :::react/:::vue blocks, never saw imported partials (e.g. the install code in _installation.mdx), and Vue skills shipped React-only pages. Each skill now lists its docs in references.json; `yarn build:skills` renders them per framework into plain markdown (website/framework-docs/ docsToMarkdown.mjs, reusing remarkFramework.js and Docusaurus' MDX preprocessing), writing <name>.vue.md where the Vue page differs. A `skills` workflow fails on drift, and Cursor/Claude Code edit hooks regenerate automatically. Also fixes docs this surfaced: :::react blocks whose nested admonition had more colons rendered a stray ":::" on React pages, and several relative links in rest docs pointed at missing pages. The Vue testing skill now imports from @data-client/vue/test and no longer ships the React-only hooks testing guide. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * docs(skills): Add skills-sync rule and dead reference link check Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * fix(skills): Generate references from docs only, keep <name>.md for any framework Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * ci(skills): Check on lockfile bumps and master; reject symlinks and unmentioned variants Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * docs(skills): Bundle protocol setup guides into data-client-setup references.json can now list `skills` to bundle. `yarn build:skills` copies each bundled skill's SKILL.md body to references/<skill>.md and its references and scripts under references/<skill>/, so data-client-setup works without the REST, GraphQL or endpoint setup skills installed. The --check drift check covers the copies. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * internal(skills): Simplify skill bundling Reuse the front matter regex, memoize skill generation, rewrite every relative link in a bundled SKILL.md, and only rerun the edit hook for skills another skill bundles. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * docs(skills): Word setup guides to read right when bundled Setup skills describe themselves as guides used after provider setup, since data-client-setup now carries them. The bundler keeps a script's shebang first and leaves links in fenced code alone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * internal(skills): Drop duplicated comment Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * internal(skills): Regenerate bundles when the axios codemod changes data-client-rest-setup symlinks its codemod from website/static/codemods, so the skills check and edit hook now watch that folder too. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * internal(skills): Regenerate references once per agent turn instead of per edit Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * docs(skills): Regenerate references for master's Vue concept docs Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * internal(skills): Tell the agent about skill problems at end of turn; survive stale stamps Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * internal(skills): Regenerate references before agent pushes instead of every turn Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018tec5Fuv98wJacsP97Sg2H * docs(skills): Don't require data-client-rest before REST setup data-client-setup bundles the REST setup guide but not data-client-rest, so the guide now points at its own RestEndpoint and resource references and treats data-client-rest as optional. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * ci: Skip Codecov upload when the uploader download fails Ported from #4176 (already on master via #4174) so unit_tests-latest isn't blocked by the Codecov uploader outage; it no-ops once this branch reaches master. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * internal(skills): Follow git symlinks in checkouts without symlink support With core.symlinks=false, git writes the axios codemod symlink as a file holding its target path, so bundling copied the path instead of the codemod. Resolve paths git tracks as symlinks either way. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * Move bundled-skill push inputs into pre-push.js Master folded build-skills.js into pre-push.js; the merge had kept the old file, which no hook runs. Bundled skills' files and the codemods they symlink now trigger regeneration from pre-push.js. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * Simplify skill bundling: reuse index.js walk and FM, skip generated files before reading Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * Add GraphQL and custom async rows to setup's skills table Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 * Simplify skillReferences: generateSkill reads its own manifest, one git helper Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfViJqNPeWjfhvq9wLhPZ3 --------- Co-authored-by: Claude <noreply@anthropic.com>
The playground chrome restyle (#4174) sized preview checkboxes to 1rem, so checkbox plus margins grew past the 21px the text field's width left for it, and the field wrapped onto its own line under the checkbox. The row now lays out as flex so the field fills whatever space the checkbox leaves. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AmdXndvDqaKsZGyYx6hw63
* fix(website): Keep the new-todo text field next to its checkbox The playground chrome restyle (#4174) sized preview checkboxes to 1rem, so checkbox plus margins grew past the 21px the text field's width left for it, and the field wrapped onto its own line under the checkbox. The row now lays out as flex so the field fills whatever space the checkbox leaves. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AmdXndvDqaKsZGyYx6hw63 * fix(website): Polish the new-todo field's hover and focus look In dark mode the hovered or focused field was a near-black well with a pale border on the lighter preview panel. It now lifts slightly over the panel and focuses with the same blue as the checked checkboxes. Typed text uses the same font as the todo titles, and the row can no longer overflow when that font makes the input's intrinsic width larger. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AmdXndvDqaKsZGyYx6hw63 --------- Co-authored-by: Claude <noreply@anthropic.com>

Requested by Nathaniel · project thread
Motivation
Design review items 10–13 (playground chrome). Before: the selected editor tab was a pale grey that didn't connect to the code below; EndpointPlayground mixed three header styles and had two "Request" labels; the Store toggle's letters ran into its arrow and preview controls used browser defaults; DiffEditor tinted whole lines red/green.
After: the selected tab takes the code panel's color with a primary top edge (light mode bar matches the Live Preview header); EndpointPlayground uses one dark header style, labels the calling code "Usage", and shows the status as a pill ("200 OK"); the Store label is tighter with room before the arrow, and plain preview buttons/inputs/checkboxes get site styles; diffs highlight only changed characters, with slim BEFORE/AFTER labels aligned to each pane.
Also fixes Vercel skipping every site preview: the ignore step logged
skip — preview changes vs masterbecause Vercel's clone can carry a master ref at the commit being built, so the merge-base was HEAD itself.Solution
Playground/styles.module.css:--pg-*tokens (light/dark, forced dark inside.endpointPlayground) drive the tab bar; homepage demos' header controls use a.controlTabsoverride so the selected control joins the file subtab row. Preview control skin applies only to unclassed elements, so DesignSystemrt-*fields and vote arrows keep their chrome.HTTP/Response.tsx: status pill with a small status-text map.monaco/theme.ts: transparent line backgrounds and diagonal fill; inline-only insert/remove colors.DiffEditorMonaco.tsx: label row positioned from each pane's measured code offset, updated on layout change.title="Request" column→title="Usage" columnin EndpointPlayground blocks.website/scripts/vercel-ignore.sh: always fetch master, never use a ref equal toHEADas the base, and log the base sha. New fixture case invercel-ignore.test.sh.Checked in light and dark on useSuspense, resource (stacked and side-by-side), useCache at 390px, the v0.9 blog diff, and the homepage demo. No changeset (website only).
🤖 Generated with Claude Code
https://claude.ai/code/session_01KR7TVj44kxYCnGtVXVkx3f
Note
Medium Risk
Changes to
vercel-ignore.shaffect whether previews build or skip site-wide; UI/docs edits are lower risk but touch widely used playground components.Overview
Restyles docs playground chrome and diff/HTTP fixtures, and fixes Vercel preview skip logic that could treat every PR as unchanged when the clone’s
masterref pointed atHEAD.Playground & docs UI: Shared
--pg-*tokens unify tab bars (selected tab joins the code panel with a primary top edge;EndpointPlaygroundforces a dark header band). REST docs rename EndpointPlayground’s second column from Request to Usage. HTTP responses show a status pill with common reason phrases and error styling for ≥400. Monaco diffs highlight changed characters only (transparent line fills) with slim Before/After labels positioned from pane layout. Plain preview controls get base styling without overriding classed demo widgets.Vercel ignore:
upstream()rejects master refs equal toHEAD, always force-fetches realmasterfor previews, splitsdeepen()into separate fetches, and logs the merge-base sha; tests cover clone-at-HEAD and shallow forks far behind master.CI: Codecov uploader download uses timeouts/fail-soft behavior and only runs when the binary is executable.
Reviewed by Cursor Bugbot for commit 241cf9f. Bugbot is set up for automated code reviews on this repo. Configure here.