fix: the Extensions list gets its industry-standard treatment — grouped, noun-named, contained details, no escaping knobs - #512
Merged
Conversation
…ped, noun-named, contained details, no escaping knobs
Five hands-on-review findings against Settings > Extensions:
- The toggle knob's own compositor layer could paint outside its row
after scrolling with a disclosure open; contain: paint on the row
scopes every descendant's paint (and gives it a containing block)
so this can never happen structurally.
- The list groups into Knowledge/Files/Drawing sections (registry
`group`, now shared by tray tools and tool-less nouns via the new
AtlasNounGroup type) instead of repeating the group word on every
row's own meta line.
- Row titles read as the noun ("Card", "Pencil") via a new nounName
field, separate from the command-verb label ("Add a card") that
still drives the palette/tray tooltips.
- The bare On/Off status text next to each switch is hidden (it was
always aria-hidden in Primer's own markup, so nothing is lost for
screen readers).
- The Annotate tray group's own collapsed trigger now derives its face
icon from the first enabled tool in the group instead of a hardcoded
paintbrush, so disabling that tool never leaves a stale glyph.
atlasNounRegistry.ts split along its own real seam (board-object
content registry vs. the tray-tool registry) to stay under the
500-line file limit, re-exported in full so no other importer moves.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
alicoding
enabled auto-merge (squash)
August 29, 2026 01:28
…th ways Primer's ActionList.Group is structurally unusable here: with list semantics its <li role="presentation"> wrapper hoists the heading and inner <ul role="group"> into the outer list in the accessibility tree (aria-required-children); without list semantics every Item renders as a <button>, nesting the row's own switch inside an interactive (nested-interactive). A section as its own h3-labeled ActionList keeps the same rendered chrome and passes the WCAG gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
alicoding
added a commit
that referenced
this pull request
Aug 29, 2026
Resolves the two overlaps by taking main's structure wholesale and re-applying this branch's deltas in their new homes: the third-party noun path re-lands on main's split registry (its content half now lives in atlasBoardObjectContent.ts, widened to open string kinds there); the installed-plugins mount and third-party row exclusion re-land on the treatment's per-section ExtensionsSection; plugin nouns declare nounName (the treatment's noun-title convention). This branch's own gesture-types extraction is dropped -- main's split already brought the registry under the file limit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
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
Five hands-on-review findings against Settings > Extensions (orchestrator drove the live surface personally; the review was the design contract):
ToggleSwitchknob's own composited layer could paint outside its row (observed live: over the sticky search bar) once a row's disclosure was open and the pane scrolled. Fixed structurally:contain: paint+position: relativeon.row(ExtensionsSection.module.css) scopes every descendant's paint to the row's own box and makes it the containing block — no magic z-index on the knob.TreeView'sTreeViewItemLevelLineuses the identical border-guide convention), and documented why.ActionList.Group+ActionList.GroupHeading, driven by a newAtlasNounGroupfield shared by tray tools and tool-less nouns (diagram/sheet now honestly declaregroup: 'file', the same family Image already names). The collapsed row's own meta line drops the group word (kept in the expanded chips). Verified single-line at exactly 1000px viewport.nounNamefield (AtlasToolShapeBase) separates the row's display title ("Card", "Pencil") from the command-verblabel("Add a card") still used by the palette/tray tooltips.extensionMeta.ts'stoolRowSourcereadsnounName; tool-less nouns already used the noun for their singlelabelfield.aria-hiddenin Primer's own markup) is hidden via a scoped[aria-hidden='true']selector — zero accessible-name loss, bare switches only. (b)AtlasCreationTray's Annotate group trigger now derives its face icon from the first enabled tool in the group instead of a hardcoded paintbrush, so disabling that tool never leaves a stale glyph (verified via SVG path diff, not just a screenshot).atlasNounRegistry.tssplit along its own real seam (atlasBoardObjectContent.tsnow owns the board-object content registry) to stay under the 500-line file limit — re-exported in full so every other importer is unaffected.Test plan
settings-extensions.spec.tsupdated: section headers, noun titles, single-line meta at 1000px, knob-containment viaelementFromPointat the search bar's coordinates (9/9 passing)atlas-tool-exclusivity.spec.ts(annotate-group interaction) still green (6/6)tsc,eslint,check-loc.sh,check-comment-hygiene.sh,check-ui-copy.shall cleango generate ./internal/docsgenregenerated the noun-field-table docs for the newnounNamefield;go test ./internal/docsgen/...green🤖 Generated with Claude Code
https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq