You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Record page: the Details / Related / Activity / History tabs, the header's quick actions and the app pill have accessible names #12625
Read from the accessibility tree on objectui main 8415d9f11, the lead record page: the four tabs read as tab with no name; the three header quick-action buttons (Log a Call, Log a Meeting, Schedule a Meeting) read as button with no name while their text is visible; the app bar's app pill (HotCRM ▾) reads as button with no name; the section header buttons in Details read unnamed. Same shape as objectui#12510, which fixed it in Studio. Verify with the same tool first: a name computed from visible text may read empty where the text is in an aria-hidden span.
Target
Each tab's accessible name is its label; each action button's name is its label; the app pill's name is "Switch app · HotCRM"; section headers are buttons named by the section title.
The accessibility tree of the lead record, pasted in the PR, shows no unnamed tab or button.
pnpm --filter @object-ui/plugin-detail test green.
Evidence
No screenshot; the measurements above are the evidence.
Filed by the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff from the 2026-10-16 walk of HotCRM's core pages as a user: objectui main 8415d9f11, HotCRM 63db83e2, the vite console on :5180 against objectstack serve --dev on :4001, the maintainer's browser pane at 1024 × 768 (en). The maintainer asked for the findings to be filed on the repository each belongs to, verbatim: 「相关问题也在对应的项目上创建任务」.
Claim: PM loop round 2
Session: session_01XVp19E1MYUTFM3dnkwz8gB
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-12625-record-page-names
Worktree: objectui-issue-12625
Domain: domain:ui
Seat: domain:ui#2
File surface: packages/plugin-detail/src/DetailView.tsx (the record tabs), the record header's action buttons (in packages/components/src/renderers/layout/containers.tsx, page:header, only where a button's name is lost), packages/app-shell/src/layout/AppSwitcher.tsx (the app pill's name only), the tests beside each, and one .changeset/12625-*.md (stop on breach; explain in the report) Revised 2026-10-16T11:35Z after the dev measured on maina5bb7ac: the tabs, the header actions and the app pill are already named. The two real defects are in packages/plugin-detail/src/DetailSection.tsx, now added to the surface: the collapsible section header (a div with aria-expanded, no role, not focusable) and the copy-value icon button (no name). That file is the one this round changes.
Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
Clause-②: no
Responsibility: objectui: controls whose only text sits in an aria-hidden span, or carry no name | objectui#12510 fixed the same shape in Studio | screen-reader users on every record page; measured on the HotCRM lead record
Thread-read: none
Serial constraints cleared: this card waits for this seat's PR #12651 (objectui#12605), which edits AppSwitcher.tsx and is in the merge queue. The dev round starts from the main that carries it. This seat's objectui#12617 (PR #12635) already landed its page:header banding in containers.tsx, and this card touches only accessible names there.
Claimed at: 2026-10-16T11:15Z
os-dev-report
{
"issue": 12625,
"status": "blocked",
"branch": "claude/issue-12625-record-page-names",
"pr": null,
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": false,
"summary": "Measured first on origin/main a5bb7ac (PR #12651 merged: is-ancestor exit 0), mounting the real console RecordDetailView (lead object, three record_header actions Log a Call / Log a Meeting / Schedule a Meeting, a child lookup for the Related tab, a collapsible fieldGroup 'Lead Information') and reading names with RTL's role-name matcher, then loading the same rendered DOM into real Chromium (/opt/pw-browsers/chromium, CDP Accessibility.getFullAXTree). ALREADY NAMED on main, no change needed: tabs Details and Related (page:tabs in containers.tsx renders the label in a plain span; Activity/History go through the same trigger code), all three header actions plus Edit / More actions / Refresh (page:header renderButton puts the label in a plain span), and the app pill (real Radix trigger: name 'HotCRM', title 'HotCRM'; AppMark is aria-hidden). The card's tab / action / pill readings reproduce in neither tool, the same tool artefact objectui#12510 / PR #12580 found. REALLY BROKEN, both in packages/plugin-detail/src/DetailSection.tsx, which is OUTSIDE this order's file surface (the claim attributed the section headers to DetailView.tsx; DetailView only composes DetailSection): (1) the collapsible section header is CollapsibleTrigger asChild on CardHeader, so it renders a div carrying aria-expanded with no role and no tabindex: not a button, not focusable, so getByRole('button', { name: 'Lead Information' }) cannot resolve and a keyboard user cannot toggle the section; (2) the per-field copy-value icon button (ghost size=icon, Copy icon, name only in a closed tooltip) reads button with name empty in both jsdom and Chromium. The order says anything outside the surface = stop and report, and the in-place-fix exemption fails condition 2 (the header shape is not pinned: native button inside the heading vs role=button on the div), so I stopped before any edit. Nothing committed; the branch is the empty base.",
"tests": "Measurement only (temporary test files, run then deleted from the worktree; copies kept in the scratchpad issue-12625 dir). jsdom, RecordDetailView mount under os-verify-lock: 'VERDICT command-exit 0', Tests 1 passed; names read: tab Details, tab Related, button Log a Call, button Log a Meeting, button Schedule a Meeting, button Edit, button More actions, button Refresh, one button name empty (DetailSection copy-value button), and 'aria-expanded host DIV role=- tabindex=- text=Lead Information'. Pill (real DropdownMenuTrigger): 'VERDICT command-exit 0', 'button name=HotCRM'. Chromium CDP getFullAXTree on the same DOM: tab Details, tab Related, button Log a Call / Log a Meeting / Schedule a Meeting / Edit / More actions named, one button name empty; the Lead Information header does not surface as a button or with an expanded state at all. No gates run: zero source edits. No ablation: nothing to ablate.",
"mcp_calls": "0",
"api_writes": "2 — git push of the empty branch (not REST); POST /repos//issues/12625/comments (this os-dev-report comment, via fleet-write relay)",
"open_questions": [
{
"question": "Extend #12625's file surface to packages/plugin-detail/src/DetailSection.tsx (collapsible section header + copy-value button), and which header shape?",
"options": [
"A Extend the surface. Header becomes the WAI-ARIA accordion shape: the title row's trigger is a native button type=button (CollapsibleTrigger asChild on it, full-width, text-left) inside the CardHeader, so its name is the section title and it is focusable with native Enter/Space; copy-value button gains aria-label from the existing detail.copyToClipboard key (no new i18n string). Pins: getByRole('button', { name: 'Lead Information' }) with aria-expanded toggling, copy button by name, plus the already-passing tab / header action / pill pins the order asked for. Cost: one file plus tests beside, small.",
"B Extend the surface but keep the div: role=button + tabIndex=0 + an onKeyDown for Enter/Space on the CardHeader. Same names, smaller diff, but hand-rolls keyboard behaviour a native button gives for free.",
"C Do not extend: land only the passing pins (tabs, header actions, pill) as test-only with an empty changeset, Part of #12625, and file the DetailSection pair as its own card."
],
"recommendation": "A. Real business need: the defect is measured on the record page every object uses (any collapsible fieldGroup), not speculative. Long-term soundness: a native button is the contract-shaped fix; B is a hand-rolled substitute. AI-error resistance: no metadata change either way; A leaves nothing for an author to get wrong. Startup focus: A adds no new surface, key or gate, one file. C splits one defect class across two cards for no gain."
}
],
"out_of_scope_findings": [
"class: a · reach: public door, the record page Details tab in the console: a collapsible fieldGroup header is a div with aria-expanded, no role, no tabindex (jsdom and Chromium AX tree), so it is neither a button nor keyboard-reachable; and the per-field copy-value icon button reads button with an empty name · evidence above in tests · dedupe words: DetailSection collapsible header button, copy value accessible name, record details section keyboard · carrier: this card #12625 if the PM extends its surface (option A), otherwise a new card"
]
}
os-dev-report
{
"issue": 12625,
"status": "done",
"branch": "claude/issue-12625-record-page-names",
"pr": "#12661",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Seat ruling A executed on the revised claim (DetailSection.tsx added to the surface). The collapsible section header is now a native button type=button inside the CardHeader (CollapsibleTrigger asChild target, full-width, text-left), named by the section title, carrying aria-expanded, reachable by Tab and toggled by Enter/Space; the header keeps its classes and becomes relative, and the button's after: overlay keeps the whole header clickable; the non-collapsible header is unchanged. The copy-value icon button takes aria-label from the existing detail.copyToClipboard key (no new string; every copy button reads the same name, a per-field name would need a new interpolated key, noted not added). The card's tab / header-action / pill premise was stale (already named on main, measured round 1); those are now regression pins on the real RecordDetailView mount and the real AppSwitcher trigger. Draft PR 12661 open, assignee baozhoutao, Fixes #12625, Clause-② line no; changeset @object-ui/plugin-detail patch.",
"tests": "Final head 94c0d6a. New pins: plugin-detail DetailSection.accessibleNames-12625 (5 passed): header button by name, aria-expanded toggled by click, by Enter and by Space after Tab, defaultCollapsed, copy buttons by name, CONTROL non-collapsible has no header button. app-shell RecordDetailView.accessibleNames-12625 (3) + AppSwitcher.accessibleName-12625 (1): 4 passed. Ablation (after committing the fix at 294ef98): header block reverted to the base div shape on disk (new-block marker 1 to 0, CollapsibleTrigger directly on CardHeader 0 to 1), EXIT trap: pin file 3 failed | 2 passed (the three header rows red, CONTROL and copy row green); restored via git checkout HEAD --, HEAD blob hash matched, git diff HEAD empty; tests import src via the root vitest alias, so no build in between. Package: vitest run packages/plugin-detail/ -> Test Files 274 passed, 1 skipped; Tests 2660 passed, 14 skipped; VERDICT command-exit 0. app-shell NARROWED (declared): full packages/app-shell/ dir not run locally (foreground cap; plugin-detail alone held the lock 11m56s); ran all RecordDetailView* and AppSwitcher* tests: 65 files, 413 tests passed, VERDICT command-exit 0; CI owns the full run. Type-check after closure builds: plugin-detail type-check exit 0, app-shell type-check exit 0 (both compile tests via tsconfig.test.json). ESLint --no-inline-config --format json on the 4 changed files: 4 files, 0 errors; DetailSection.tsx 12 warnings = base 12, tests 0 (narrowed lint, repo-wide lint is CI's). Battery all exit 0: check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, check-hand-rolled-comment-mask.mjs, check-changeset-fixed.mjs, check-changeset-presence.mjs. check:spec-floors not run (not in this order's list). CI: in_progress at report time.",
"mcp_calls": "0",
"api_writes": "3 REST via fleet-write relay — POST /repos//issues/12625/comments (round-1 blocked report, comment 6214591957), POST /repos/objectstack-ai/objectui/pulls (draft 12661) + POST .../issues/12661/assignees (baozhoutao), POST /repos//issues/12625/comments (this report); plus 3 git pushes (empty branch, 294ef98, 94c0d6a). Labels: zero writes (objectui, none named by the order).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted in PR Acceptance notes, not filed: every copy-value button on a record shares the name 'Copy to clipboard'; a field-specific name needs a new interpolated i18n key in all ten packs (polish, not one of the three filing classes)"
]
}
c18abe488 deletes the one BACKLOG entry packages/plugin-detail/src/DetailSection.tsx · Check | Copy from iconOnlyButtonCensus-12143.test.ts (one line removed, nothing else in the census touched); the copy-value button is now named, which is what turned CI shard 10/16 red.
c4ab6f212 merges origin/main (f78efdd1e), a merge commit, no rebase.
Local, --maxWorkers=1 from the repo root: the census test and the DetailSection pin, Test Files 2 passed, Tests 9 passed (VERDICT command-exit 0). check:control-bytes exit 0.
PR #12661 merged through the merge queue as 4be76e0, which is on main. The squash commit's message names no model.
Verified by content:
The four new files (three pins and the changeset) on origin/main are blob-identical to the accepted head c4ab6f2.
The squash commit's patch for DetailSection.tsx and the census test matches the PR's own patch line for line. main had moved, so the comparison is 4be76e0^1..4be76e0 against the PR's patch.
6 files, +367 / −24.
What landed:
A collapsible record section's header is a native button named by the section title. It carries aria-expanded, can be reached with Tab, and Enter or Space toggles it. A click anywhere on the header still toggles the section.
The copy-value icon button is named "Copy to clipboard".
New pins hold these names, by role and name, on DetailSection, on the real record page mount (tabs, header actions, section header) and on the app pill.
The census entry DetailSection.tsx · Check | Copy is retired.
Live E2E (informational) was red at the accepted head because of the lane-wide cold-install crash in npm, objectui#12649. That was recorded on the PR before it entered the queue.
pm:dispatched leaves with this note. The card closed completed on merge.
Activity
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 2
Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-12625-record-page-namesWorktree:
objectui-issue-12625Domain:
domain:uiSeat:
domain:ui#2File surface:
packages/plugin-detail/src/DetailView.tsx(the record tabs), the record header's action buttons (inpackages/components/src/renderers/layout/containers.tsx,page:header, only where a button's name is lost),packages/app-shell/src/layout/AppSwitcher.tsx(the app pill's name only), the tests beside each, and one.changeset/12625-*.md(stop on breach; explain in the report) Revised 2026-10-16T11:35Z after the dev measured onmaina5bb7ac: the tabs, the header actions and the app pill are already named. The two real defects are inpackages/plugin-detail/src/DetailSection.tsx, now added to the surface: the collapsible section header (adivwitharia-expanded, no role, not focusable) and the copy-value icon button (no name). That file is the one this round changes.Container & model:
S,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuireads no path-derived mandate)Clause-②: no
Responsibility:
objectui: controls whose only text sits in an aria-hidden span, or carry no name | objectui#12510 fixed the same shape in Studio | screen-reader users on every record page; measured on the HotCRM lead recordThread-read: none
Serial constraints cleared: this card waits for this seat's PR #12651 (objectui#12605), which edits
AppSwitcher.tsxand is in the merge queue. The dev round starts from themainthat carries it. This seat's objectui#12617 (PR #12635) already landed itspage:headerbanding incontainers.tsx, and this card touches only accessible names there.Claimed at: 2026-10-16T11:15Z
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{
"issue": 12625,
"status": "blocked",
"branch": "claude/issue-12625-record-page-names",
"pr": null,
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": false,
"summary": "Measured first on origin/main a5bb7ac (PR #12651 merged: is-ancestor exit 0), mounting the real console RecordDetailView (lead object, three record_header actions Log a Call / Log a Meeting / Schedule a Meeting, a child lookup for the Related tab, a collapsible fieldGroup 'Lead Information') and reading names with RTL's role-name matcher, then loading the same rendered DOM into real Chromium (/opt/pw-browsers/chromium, CDP Accessibility.getFullAXTree). ALREADY NAMED on main, no change needed: tabs Details and Related (page:tabs in containers.tsx renders the label in a plain span; Activity/History go through the same trigger code), all three header actions plus Edit / More actions / Refresh (page:header renderButton puts the label in a plain span), and the app pill (real Radix trigger: name 'HotCRM', title 'HotCRM'; AppMark is aria-hidden). The card's tab / action / pill readings reproduce in neither tool, the same tool artefact objectui#12510 / PR #12580 found. REALLY BROKEN, both in packages/plugin-detail/src/DetailSection.tsx, which is OUTSIDE this order's file surface (the claim attributed the section headers to DetailView.tsx; DetailView only composes DetailSection): (1) the collapsible section header is CollapsibleTrigger asChild on CardHeader, so it renders a div carrying aria-expanded with no role and no tabindex: not a button, not focusable, so getByRole('button', { name: 'Lead Information' }) cannot resolve and a keyboard user cannot toggle the section; (2) the per-field copy-value icon button (ghost size=icon, Copy icon, name only in a closed tooltip) reads button with name empty in both jsdom and Chromium. The order says anything outside the surface = stop and report, and the in-place-fix exemption fails condition 2 (the header shape is not pinned: native button inside the heading vs role=button on the div), so I stopped before any edit. Nothing committed; the branch is the empty base.",
"tests": "Measurement only (temporary test files, run then deleted from the worktree; copies kept in the scratchpad issue-12625 dir). jsdom, RecordDetailView mount under os-verify-lock: 'VERDICT command-exit 0', Tests 1 passed; names read: tab Details, tab Related, button Log a Call, button Log a Meeting, button Schedule a Meeting, button Edit, button More actions, button Refresh, one button name empty (DetailSection copy-value button), and 'aria-expanded host DIV role=- tabindex=- text=Lead Information'. Pill (real DropdownMenuTrigger): 'VERDICT command-exit 0', 'button name=HotCRM'. Chromium CDP getFullAXTree on the same DOM: tab Details, tab Related, button Log a Call / Log a Meeting / Schedule a Meeting / Edit / More actions named, one button name empty; the Lead Information header does not surface as a button or with an expanded state at all. No gates run: zero source edits. No ablation: nothing to ablate.",
"mcp_calls": "0",
"api_writes": "2 — git push of the empty branch (not REST); POST /repos//issues/12625/comments (this os-dev-report comment, via fleet-write relay)",
"open_questions": [
{
"question": "Extend #12625's file surface to packages/plugin-detail/src/DetailSection.tsx (collapsible section header + copy-value button), and which header shape?",
"options": [
"A Extend the surface. Header becomes the WAI-ARIA accordion shape: the title row's trigger is a native button type=button (CollapsibleTrigger asChild on it, full-width, text-left) inside the CardHeader, so its name is the section title and it is focusable with native Enter/Space; copy-value button gains aria-label from the existing detail.copyToClipboard key (no new i18n string). Pins: getByRole('button', { name: 'Lead Information' }) with aria-expanded toggling, copy button by name, plus the already-passing tab / header action / pill pins the order asked for. Cost: one file plus tests beside, small.",
"B Extend the surface but keep the div: role=button + tabIndex=0 + an onKeyDown for Enter/Space on the CardHeader. Same names, smaller diff, but hand-rolls keyboard behaviour a native button gives for free.",
"C Do not extend: land only the passing pins (tabs, header actions, pill) as test-only with an empty changeset, Part of #12625, and file the DetailSection pair as its own card."
],
"recommendation": "A. Real business need: the defect is measured on the record page every object uses (any collapsible fieldGroup), not speculative. Long-term soundness: a native button is the contract-shaped fix; B is a hand-rolled substitute. AI-error resistance: no metadata change either way; A leaves nothing for an author to get wrong. Startup focus: A adds no new surface, key or gate, one file. C splits one defect class across two cards for no gain."
}
],
"out_of_scope_findings": [
"class: a · reach: public door, the record page Details tab in the console: a collapsible fieldGroup header is a div with aria-expanded, no role, no tabindex (jsdom and Chromium AX tree), so it is neither a button nor keyboard-reachable; and the per-field copy-value icon button reads button with an empty name · evidence above in tests · dedupe words: DetailSection collapsible header button, copy value accessible name, record details section keyboard · carrier: this card #12625 if the PM extends its surface (option A), otherwise a new card"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{
"issue": 12625,
"status": "done",
"branch": "claude/issue-12625-record-page-names",
"pr": "#12661",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Seat ruling A executed on the revised claim (DetailSection.tsx added to the surface). The collapsible section header is now a native button type=button inside the CardHeader (CollapsibleTrigger asChild target, full-width, text-left), named by the section title, carrying aria-expanded, reachable by Tab and toggled by Enter/Space; the header keeps its classes and becomes relative, and the button's after: overlay keeps the whole header clickable; the non-collapsible header is unchanged. The copy-value icon button takes aria-label from the existing detail.copyToClipboard key (no new string; every copy button reads the same name, a per-field name would need a new interpolated key, noted not added). The card's tab / header-action / pill premise was stale (already named on main, measured round 1); those are now regression pins on the real RecordDetailView mount and the real AppSwitcher trigger. Draft PR 12661 open, assignee baozhoutao, Fixes #12625, Clause-② line no; changeset @object-ui/plugin-detail patch.",
"tests": "Final head 94c0d6a. New pins: plugin-detail DetailSection.accessibleNames-12625 (5 passed): header button by name, aria-expanded toggled by click, by Enter and by Space after Tab, defaultCollapsed, copy buttons by name, CONTROL non-collapsible has no header button. app-shell RecordDetailView.accessibleNames-12625 (3) + AppSwitcher.accessibleName-12625 (1): 4 passed. Ablation (after committing the fix at 294ef98): header block reverted to the base div shape on disk (new-block marker 1 to 0, CollapsibleTrigger directly on CardHeader 0 to 1), EXIT trap: pin file 3 failed | 2 passed (the three header rows red, CONTROL and copy row green); restored via git checkout HEAD --, HEAD blob hash matched, git diff HEAD empty; tests import src via the root vitest alias, so no build in between. Package: vitest run packages/plugin-detail/ -> Test Files 274 passed, 1 skipped; Tests 2660 passed, 14 skipped; VERDICT command-exit 0. app-shell NARROWED (declared): full packages/app-shell/ dir not run locally (foreground cap; plugin-detail alone held the lock 11m56s); ran all RecordDetailView* and AppSwitcher* tests: 65 files, 413 tests passed, VERDICT command-exit 0; CI owns the full run. Type-check after closure builds: plugin-detail type-check exit 0, app-shell type-check exit 0 (both compile tests via tsconfig.test.json). ESLint --no-inline-config --format json on the 4 changed files: 4 files, 0 errors; DetailSection.tsx 12 warnings = base 12, tests 0 (narrowed lint, repo-wide lint is CI's). Battery all exit 0: check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, check-hand-rolled-comment-mask.mjs, check-changeset-fixed.mjs, check-changeset-presence.mjs. check:spec-floors not run (not in this order's list). CI: in_progress at report time.",
"mcp_calls": "0",
"api_writes": "3 REST via fleet-write relay — POST /repos//issues/12625/comments (round-1 blocked report, comment 6214591957), POST /repos/objectstack-ai/objectui/pulls (draft 12661) + POST .../issues/12661/assignees (baozhoutao), POST /repos//issues/12625/comments (this report); plus 3 git pushes (empty branch, 294ef98, 94c0d6a). Labels: zero writes (objectui, none named by the order).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted in PR Acceptance notes, not filed: every copy-value button on a record shares the name 'Copy to clipboard'; a field-specific name needs a new interpolated i18n key in all ten packs (polish, not one of the three filing classes)"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Patch round on PR #12661: new head
c4ab6f212.c18abe488deletes the one BACKLOG entrypackages/plugin-detail/src/DetailSection.tsx · Check | CopyfromiconOnlyButtonCensus-12143.test.ts(one line removed, nothing else in the census touched); the copy-value button is now named, which is what turned CI shard 10/16 red.c4ab6f212mergesorigin/main(f78efdd1e), a merge commit, no rebase.--maxWorkers=1from the repo root: the census test and the DetailSection pin, Test Files 2 passed, Tests 9 passed (VERDICT command-exit 0).check:control-bytesexit 0.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-16T13:00ZPR #12661 merged through the merge queue as
4be76e0, which is onmain. The squash commit's message names no model.Verified by content:
origin/mainare blob-identical to the accepted headc4ab6f2.DetailSection.tsxand the census test matches the PR's own patch line for line.mainhad moved, so the comparison is4be76e0^1..4be76e0against the PR's patch.What landed:
aria-expanded, can be reached with Tab, and Enter or Space toggles it. A click anywhere on the header still toggles the section.DetailSection, on the real record page mount (tabs, header actions, section header) and on the app pill.DetailSection.tsx · Check | Copyis retired.Live E2E (informational) was red at the accepted head because of the lane-wide cold-install crash in npm, objectui#12649. That was recorded on the PR before it entered the queue.
pm:dispatchedleaves with this note. The card closedcompletedon merge.Generated by Claude Code