Releases: jrpease/throughline
Release list
v0.13.0
Added
- Subagent-driven model-tier routing — "plan deep, build cheap." Skills now
split work by cognition: anarchitectplans a stage on the strongest tier and
emits a transcription-grade spec in stable identifiers, cheap executors carry it
out, and areviewergates the result. A newreferences/agent-routing.md
defines a portablefast < balanced < deeptier ladder (recommended mapping
Haiku → Sonnet → Opus) with an installer-overridable resolution table — no
concrete model name is hardcoded anywhere, so the routing travels to any
install, and a missing tier collapses to the nearest lower one. Four
Claude-native role agents (architect,figma-executor,code-executor,
reviewer), eachmodel: inherit. - Bridge-locked, verify-then-replace Figma authoring.
figma-executor
resolves names → nodeIds at run time, builds into a namedWIP:frame, and
finalizes only after a programmatic read-back (COMPONENT_SET/variable
existence + count + bound-variable spot-check — a screenshot is not proof). The
entire Figma surface is concurrency-1 through the single Console bridge. - CI guards for the routing model.
ci/validate-skills.mjsnow asserts every
agents/*.mdfrontmatter ismodel: inherit(fails on a hardcoded model name)
and thatagent-routing.mdnames all three tiers.
Changed
- Routing rolled across every subagent-driven skill.
token-sync-layer
(per-adapter →code-executorfast +reviewer),component-builderand
icon-system-builder(Figma authoring → sequentialarchitect→
figma-executor),storybook-chromatic-builder(per-component story-gen →
code-executorfast +reviewer), andtoken-builder/token-sheet-builder
(reframed from "no subagents" to sequential architect → figma-executor).
component-pipelinekeeps its human gates between stages while subagents run
continuously within one. On hosts without subagent dispatch, every site
degrades cleanly to inline single-model execution. - Figma preflight now asserts active-file identity. Because
figma_execute
targets whichever file is active in Figma Desktop, a connected bridge is not
enough —references/figma-scripting.mdnow requires confirming the active
fileKeymatches the target (and re-confirming after any step that could switch
it) before writing.
v0.12.1
Fixed
npx @radicool/throughline initsilently did nothing. npm invokes the bin
through anode_modules/.binsymlink, which defeated the CLI's
direct-invocation guard (pathToFileURL(process.argv[1])never matched the
real module path), so the installer exited 0 without installing. The guard
now realpath-resolvesargv[1]first, with a symlink-invocation regression
test.
v0.12.0
Added
- Published to npm as
@radicool/throughline.
The multi-agent installer is now installable everywhere:npx @radicool/throughline init.
(The unscopedthroughlinenpm name belongs to an unrelated package.) - Tag-driven release automation. Pushing a
vX.Y.Ztag now runs the full CI
validation, publishes to npm with provenance via trusted publishing, and creates
a GitHub Release with notes extracted from this changelog
(.github/workflows/release.yml+ci/extract-changelog.mjs).
Changed
- Install command for Cursor/Codex/AGENTS.md targets is now
npx @radicool/throughline init
(previously documented asnpx throughline init, which was never published). - README version badge now reads live from the npm registry.
v0.11.0 — Library-derived focus states + Figma build-hardening
Reframes focus construction and closes the skill/reference gaps surfaced by a greenfield build run. Documentation/instruction only — tokens and code-gen untouched.
Library-derived focus states
- Focus idiom now derives from
project.uiFramework: shadcn/default0 0 0 3pxspread-shadow ring,vanilla-cssoutline stroke, MUI per-component, ios-swift skip, tier-2 researched — no more single house-style stroke. - Ring mechanism chosen by control fill: drop-shadow effect for filled controls, absolutely-positioned ring child for transparent ones (a Figma drop-shadow only casts from opaque pixels). Padded wrapper forbidden.
clipsContent=trueon the shadow-casting control frame,falseon ancestors. Retrofit clause + audit item so legacy components get fixed when touched.
Figma scripting gotchas (figma-scripting.md)
setBoundVariableForEffect geometry reset · drop-shadow opacity · text-style before .characters (Inter font order) · VERTICAL resize() axis mapping · read-after-write refreshCache · placeholder paint + bind read-back · ~30s figma_execute cap → chunk.
Component standards
Deterministic grid coordinates over minWidth/layoutMode="GRID" for large matrices · component-area must contrast every variant fill · audit exemption for coordinate-laid sets.
Publishing
Self-publish is not tool-verifiable — trust the user's confirmation; an INSTANCE_SWAP key rejection is the authoritative signal.
Icons & components
Tabler + Phosphor promoted to first-class fetch libraries · warning when rebuilding a published/consumed component set detaches downstream instances.
Full diff: v0.10.0...v0.11.0
v0.10.0 — Brownfield retrofit + plugin CI
ThroughLine can now retrofit an existing design system — a mature codebase and a drifted Figma file — not just build greenfield. Plus the plugin's first CI.
Added
- Brownfield retrofit (Plans 1–3). Three new skills —
design-system-audit(size & inventory an existing system with verified reads),token-crosswalk-builder(map new↔old tokens + atokens:validateN/N gate), andretrofit-planner(the safe, gated 7-phase migration). Brownfield branches added totoken-builder,token-sync-layer, andstorybook-chromatic-builder; B1/B2/B4 read-discipline hardening; the B3 detect-or-ask publish fix. - Plugin CI. The repo's first GitHub Actions workflow + zero-dependency validators (
ci/) forplugin.json/marketplace.jsonand every skill/command frontmatter, run on every PR alongside the full test suite (70 tests). - README surfaces the retrofit path; now 12 skills / 10 reference docs.
Additive and backward-compatible — existing greenfield flows are unchanged.
Carry-forward: the B1/B2/B4 mitigations are case-study-authored and not yet reproduced against a live Figma file.
Full changelog: v0.9.0...v0.10.0
v0.9.0
Added
/throughline:start— a deterministic entry-point command that routes straight into environment setup, so design-system setup wins over other plugins' "let's build…" triggers (e.g. superpowers' brainstorming). README now leads with it.
Changed
- Lucide icons fetched from the official source repo. Lucide now batch-fetches the curated subset's official SVGs and componentizes them hands-off (fully automated, official, deterministic naming) instead of making you copy a community file. Community file / importer are fallbacks. Material and custom unchanged.
Fixed
- Cover page no longer built before tokens/styles exist — it's now built by
token-sheet-builderafter tokens exist, so it can be on-brand. - Elevations are now dark-mode-aware — shadow color lives in mode-aware
shadow/*semantic variables the effect styles bind to.
Full changelog: v0.8.0...v0.9.0
v0.8.0
Guidance-hardening release for the Figma-authoring skills.
Added
- Doc-card header division — every component doc card must segment its header from the component area with a
Border/Semantic-bound divider line or a distinct header surface fill. Enforced by a new post-build audit gate. - Two roadmap items — built-in accessibility checks at token/component creation time, and one Figma token library syncing to multiple platforms (React, Android, iOS) with a per-platform-flexible component lifecycle.
Changed
- Component organization is now a fixed law — variants are rows, states are columns; each size variation is its own variant row; every component must include its full relevant state set (default/hover/focus/active/disabled plus applicable loading/selected/success/error). Adds a per-component state checklist and two new audit gates.
- Foundations sheet groups semantic colors by category — organized by role family (surface, text, border, alert/feedback, action…), mirroring primitive ramps instead of one flat list.
Full changelog: v0.7.0...v0.8.0
v0.7.0 — Figma-scripting hardening
Hardening pass from real build-session testing (tokens → foundations → icons → components → Storybook on a pnpm + Turborepo + Next.js 16 + Tailwind v4 monorepo).
Added
references/figma-scripting.md— one home for everyfigma_executegotcha (single-bridge-instance preflight,dynamic-pageasync APIs incl.getNodeByIdAsync,resize()axis-lock, batchtimeout,WRAPchunking), wired into all Figma-writing skills.- Opacity token category on the 0–100 scale;
text/onEmphasiscolor role. - "Clip content off by default" standard + post-build audit gate.
Changed
- Figma write-back confirms once up front (pre-empts the safety classifier).
- Figma scripts default to the async APIs under
dynamic-page.
Fixed
- Opacity rendered everything invisible — now authored 0–100, normalized ÷100 on sync.
resize()collapsed auto-layout frames to ~10px — re-assert pattern + audit read-back.- Storybook Controls were dead — args-through render;
ReactElementslots get a boolean helper arg. - Typography
@utilityduplication/drift — shared@import. - esbuild blocked Storybook on fresh pnpm installs —
onlyBuiltDependenciesnote. - Icon subset names validated against the library version.
- Large
WRAPgrids timed out — chunked into manual rows.
Full changelog: https://github.com/jrpease/throughline/blob/v0.7.0/CHANGELOG.md
v0.6.0
Three bug fixes from v0.1/v0.5 testing.
Fixed
- No Section wrapper around artboards (regression from v0.1). Removed the "Section may only wrap the Frame" escape hatch; the auto-layout Frame now sits directly on the page, explicitly overriding the Figma Console MCP server's "create a Section first" instruction. The post-build audit walks the parent chain to catch any stray Section.
Added
- Component sets laid out as an auto-layout grid — one row per variant (type) across its states, size groups stacked vertically.
- Focus-ring accessibility offset — new
Border/Semanticoffset/focustoken (theoutline-offsetequivalent); focus rings sit 2px clear of the control edge, bound not hardcoded.
v0.5.0
Added
- Import mode runs a completeness pass.
token-builderimport no longer does
a 1:1 transcription of a partial source (e.g. a marketing site + brand guide).
After preserving and organizing the user's values, it diffs them against a
reference model of a full, flexible system and proactively proposes the missing
pieces — derived from their existing values — as a preserve-first, opt-in menu
(tonal ramps, neutral ramp, state colors, dark mode, elevation/radius scales,
semantic role layer). Adds an explicit full-system checklist. - Post-build audit gate for all Figma-writing skills. A single canonical
"Post-build audit (REQUIRED before handoff)" checklist in
figma-component-standards.mdthat reads back the actual node tree (container
type, auto layout, bound variables, deterministic names, scope/status, visual)
rather than trusting a screenshot. Wired intocomponent-builder,
icon-system-builder, andtoken-sheet-builder. - Scope-recognition handoff. New
references/scaling-up-handoff.md: when a
step outgrows a single skill (retrofits, migrations, multi-package refactors),
skills now surface risks and major parts, confirm scope, and brainstorm/plan
before building — handing off to Superpowers when available, else planning
natively. Never a hard dependency. Wired intocomponent-builder(retrofit) and
repository-builder(existing app).
Fixed
- Setup routes before brainstorming.
figma-environment-setupis now labelled
a setup/process skill that runs before generic brainstorming, with explicit
trigger phrases, so prompts like "let's set up my design system" no longer get
hijacked bysuperpowers:brainstorming. - Per-category collection segmentation enforced.
token-builderdescription
and body now lead with the one-collection-per-category-per-tier rule, so it
stops defaulting to a two-collection (Primitives + Semantic) approach. - Deterministic icon acquisition.
icon-system-buildernow treats the
cheapest-first mechanism order as a hard gate: a known library (Lucide, Material)
always uses a community file (#1) or importer plugin (#2), never website-SVG
fetching (#3, the last resort). Provides named default resources so the choice is
consistent across runs instead of improvised. - Layout container must be an auto-layout Frame, never a Section. Corrected the
self-contradictory "Section or Frame with auto layout" rule (Sections have no
layoutMode), acrossfigma-component-standards.mdand the three skills that
restate it. Adds a verify step. - Doc-card token binding enforced. The "dogfood the design system" rule now
includes the binding mechanics (fetch variable IDs, bind don't hardcode), a map
of card chrome → semantic tokens, and a required read-back gate — since a
hardcoded hex and a bound variable render identically in a screenshot.
Changed
- README documents the Superpowers partner handoff for big, ambiguous work,
framed as graceful degradation (plans natively when Superpowers isn't installed). plugin.jsonversion corrected to track the release (was left at0.3.0
through the0.4.0tag).