Per-category Figma variable collection structure#2
Merged
Conversation
Fixes the two-tier/two-collection conflation in token-builder so each token category owns its own mode axis, plus adds missing border-width tokens. Skill-instructions scope only. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds three missed impacts: a second anti-redundancy doctrine copy in brainstorm-before-build import mode, border-width binding in component-builder, and multi-mode (brand) primitive handling plus a collection->token-name mapping rule in the sync layer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… Step 1 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…cy doctrine Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rivacy, border width Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… per-axis modes Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ted logical identity Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…y doctrine Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…apping Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…cing-tier rule Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…idth section Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ming consistency Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jrpease
added a commit
that referenced
this pull request
Jun 4, 2026
Two runs with Lucide picked two different mechanisms: once fetching SVGs off lucide.dev and hand-prepping components (mechanism #3, the last resort), once recommending a community file (#1, correct). Root causes: - The cheapest-first list was a soft "preference order" with no gate, so runs could drift to #3 for a library that has a community file. - The "name the specific resource" section was a literal placeholder ("[this Lucide community component file]") — it told the model to name a resource but gave none, so each run improvised; the concrete fallback the model could always do was fetch website SVGs (= #3 in disguise). Fixes: - Hard gate: for a known library the path is #1 (→#2), never #3. Explicitly call out that fetching a library's SVGs off its website is mechanism #3 wearing a disguise and is forbidden for Lucide/Material. Same library must yield the same mechanism every run. - Provide concrete default candidates per library (official Lucide/Material resources + licenses), with a verify-the-current-link step, so the model stops improvising. If it can't confirm a resource, ask — never silently drop to SVGs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Primitives+ oneSemanticcollection — fixing the bug where non-color categories (e.g. spacing) inherited color's Light/Dark modes. Each category now owns its own mode axis.width/{0,1,2,4}and semanticwidth/{default,focus,emphasis}, with component-builder binding component borders to them and the Foundations sheet rendering a border-width section.token-builderand thebrainstorm-before-buildimport mode._Color/Primitive, Theme axis onColor/Semantic— two independent axes in two collections, staying under the Professional 4-mode cap./-grouped and omit the category prefix (gray/50,text/primary); the dotted form (color.gray.50) is the logical/code identity the sync layer derives.[data-brand]selector). Updates the manifest schema example.Spec:
docs/superpowers/specs/2026-06-03-figma-variable-collection-structure-design.mdPlan:
docs/superpowers/plans/2026-06-03-figma-variable-collection-structure.mdTest Plan
["Primitives","Semantic"]) assumptions across skills/references/commands.token-builderagainst a real Figma file to confirm per-category collections build with correctly scoped modes (manual, follow-up).🤖 Generated with Claude Code