Icon scale — as applied

Read from the working tree, not from the plan. Counts are actual token references across all six repos. This is not pushed-and-final — see the status box at the bottom.

The scale, as it now exists

Each step drawn with four real glyphs at its true size. The gap between 18 and 48 is deliberate — nothing legitimate lives there.

Actual token references in the tree

What replaced what

BeforeSitesNow
8, 10, 1157ICON_XS or ICON_SM, by role
1231ICON_XS (decorative) / ICON_SM (target)
1324ICON_SM
1445ICON_SM
15, 16, 1730ICON_SM
18, 2011ICON_MD
484ICON_XL

13 distinct sizes → 4. The 15s and 17s that nobody chose are gone entirely.

In context — every surface at the applied sizes

Section header · tab bar

WORKSPACE tree…

HEADER_ICON_SIZE is now an alias of ICON_SM, in a 24px target box.

Tree rows · breadcrumb root

Trail glyphs ICON_SM; the separator stays 9 — the documented punctuation exception.

Decorative — inline metadata

venact-studio
Workspace and canvas module

ICON_XS — no handler, sits inside 0.65rem text.

Derived — composite badges

iconBadgeSize(ICON_SM) = 8. Off-scale by design — a badge only reads as a badge while it stays proportional to its parent glyph.

The exceptions — glyphs legitimately off the scale

GlyphSizeWhy it is exempt
Breadcrumb separator9Punctuation — must read smaller than what it separates. ICON_XS is only 2px under ICON_SM, not enough hierarchy.
Composite badgesiconBadgeSize()Derived from the parent glyph, so the badge and its corner offset can never drift apart.
Button / Dropdown / SegmentedToggle content iconsiconSize()Derived from control height by design.
Background size={1}1React Flow canvas dot radius — not an icon at all.
ForbiddenIcon size={100}100Full-panel illustration, not an icon.

Not finished — what is still open

The sweep is incomplete. I killed the third agent mid-run when I found it was committing and pushing. It had finished venact-shared and was partway through login / mentor / compute.
What is solid. The four tokens, their role guide and the closed exceptions list are in controlTokens.js. HEADER_ICON_SIZE and TREE_ICON_SIZE are aliases rather than independent numbers, which is what actually prevents the split from re-forming. Studio is fully migrated with zero literals left; admin has 2 known stragglers, both deliberate.