Repository navigation
feat(console,app-shell): a settings action row draws its label once, on the button; the Installed Apps kernel note is the Uninstall tooltip (objectui#12610) - #12645
Conversation
…nel note is the Uninstall tooltip (objectui#12610) The settings renderer's action_button row printed the manifest label on the left and again on the button. The button now carries it alone; the row's left side holds the manifest's description when declared, nothing otherwise. Installed Apps' "kernel API is additive only" paragraph leaves the page foot (where it sat under the empty state too) and becomes the tooltip and accessible description of a loaded row's Uninstall. The value is plain text in all ten packs, so it no longer goes through dangerouslySetInnerHTML. Claude-Session: https://claude.ai/code/session_01P1jMq7XJa8LG1or2Z2jgxH Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1jMq7XJa8LG1or2Z2jgxH Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: Face: the ① Derived judgments
② Semver level
③ Boundary flagsThe dev's three open questions are ruled as shipped:
Out of scope:
The seat reports both; neither blocks. Implemented-by: VERDICT: PASS Generated by Claude Code |
席位核对 · ACCEPT ·
|
Fixes #12610
Clause-②: yes
Items 1 and 4 of the card, as triage narrowed them. Items 2 and 3 are objectstack-ai/objectstack#23839 and objectstack-ai/objectstack#23841, not touched here.
What changes
1. A settings action row has one label, on the button. The console's settings renderer drew an
action_buttonspecifier'slabeltwice: as the row label on the left and again inside the button. That is why Mail Delivery read "Send test email / Send test email" and AI & Embedder repeated "Test connection", "Reset to environment defaults" and "Test embedder". The manifests declare onelabeleach, so the fix is in the renderer, once, for every action row (SettingsField, theaction_buttonbranch).descriptionwhen the manifest declares one, as one line of muted text. Otherwise it holds nothing and the button stands alone at the row's end.descriptionon anaction_buttontoday, and the renderer invents none.SettingsViewis untouched.4. The Installed Apps kernel note is the Uninstall tooltip. The "kernel API is additive only" paragraph sat at the foot of the list, including under the empty state. It now opens as a tooltip, on hover or focus, on a loaded local row's Uninstall. It is that button's accessible description (
aria-describedbyto onesr-onlycopy), using the console's existingTooltipProvider/Tooltip/TooltipTriggerpattern.dangerouslySetInnerHTML.i18n.
marketplace.installedAdditiveNotedropped its leading bold "Note:" label (astrongelement, and each translation's equivalent) in all ten packs. The sentence after it is unchanged, and so is the key name.check:i18n-driftreads one en value changed, followed by all nine packs.Tests
SettingsField.actionRowOneLabel-12610.test.tsx(console). It renders the realSettingsViewover a stubbedfetchfor everyaction_buttonthe server's settings manifests declare: Mail, SMS, AI × 3, Knowledge, File Storage. It asserts that no string a button carries is drawn anywhere outside that button. Also covered:actions.ID.label;InstalledListWidget.kernelNoteTooltip-12610.test.tsx(app-shell), inenandzh, over the realmarketplaceApi:de: 1 failed | 16 passed (17).Local gates (head
514ee9d)@object-ui/console^...: 34/34 tasks.type-checkfor@object-ui/i18n,@object-ui/app-shelland@object-ui/console: 0.pnpm exec vitest run apps/console/src/pages/settings/ packages/app-shell/src/console/marketplace/ packages/i18n/: 134 files passed, 1689 tests passed, 13 skipped.check:i18n-keys,check:i18n-drift,check:i18n-dead-keys,check:changeset-claims,changeset:check,check:test-path-roots,check:spec-symbolsand changeset presence: all 0.Screenshots
Branch
claude/issue-12610-evidence, underevidence/12610/. These are Mail Delivery, AI & Embedder (three action rows), File Storage and Installed Apps (empty state). They were taken at 1280 × 900 with the console dev server, against a published@objectstack/*18.0.0-next.1 showcase backend (e2e/live/ci/start-backend.sh). Each page has a-beforeshot (base8ed7e5a) and an-aftershot (this head).NOT MEASURED: a screenshot of the Uninstall tooltip itself. Reason: the fresh backend had no installed package, so there was no Uninstall row to hover. The tooltip is pinned by the app-shell test above.
Changesets
12610-settings-action-row-one-label.md:@object-ui/consolepatch.12610-installed-apps-kernel-note-tooltip.md:@object-ui/app-shellpatch.12610-i18n-kernel-note-plain-text.md:@object-ui/i18npatch, carrying the Clause-② note.Acceptance notes
edgesOut;isDefaultfrom the showcasecapability-mappage.OS_PLATFORM_OWNER_EMAIL=admin@objectos.ai. Without it, the seeded admin is refusedmanage_platform_settings.e2e/live/ci/stop-backend.shleft theobjectstack devchild running on its port, so the next start came up on the next port. This is reported to the seat; it is not changed here.Provenance: written by the
os-devcloud sessionsession_01P1jMq7XJa8LG1or2Z2jgxH(claim6211778237) and opened by thedomain:uiseat 1 PM (session_011K9g23W67dy2zwnyzaoB6o) from that session's final message, because a cloud session cannot open a PR from its container. The seat changed only the two tag-shaped spellings of the bold label into words.Generated by Claude Code