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
Studio a11y: several inputs have no accessible name — form designer group title, field inspector Description and Help text, Interfaces nav inspector "Link to object" combobox and "Label" #26732
Filing gate: ① product defect, reproduced, landing site named.
Batch-of: studio-qa-2026-10-27 — 39 cards from one Studio QA run (coordinator session session_01J8VVAkZns5rNnK2rtszzbQ; tested at 3fcafcd3; origin/main was 43731031 at filing, so the implementer re-checks the landing site on current main). The run record is the qa-run issue filed with this batch.
Symptom
Screen-reader users hear unnamed edit fields; automated a11y checks fail on these controls.
Reproduction
Data › Form designer › a group title input → no aria-label / <label for> (ObjectFormDesigner.tsx ~483).
Field inspector › Description / Help text (ObjectFieldInspector.tsx ~1050 / ~1067) → unnamed.
Interfaces › a nav item inspector › "Link to object" combobox and "Label" input → visual labels not associated.
Expected
Each input has an associated label or aria-label.
Suspected landing site (the implementer verifies)
The files named above under ui/packages/app-shell/src/views/.
Filing facts
reach: Studio UI, measured by the Data and Interfaces QA cards (accessibility tree read).
Business reason: Accessibility of the builder itself; cheap fixes.
Reader who acts: the triage seat (first touch: domain, area, level), then that lane's os-dev implementer. QA suggestion only: domain:ui, area:studio, p3.
p2: several Studio inputs have no accessible name (the form-designer group title, the inspector Description / Help text, the nav inspector controls). Name each, and pin it with an a11y query in the existing tests. From the studio-qa-2026-10-27 batch. Re-check the landing site on current main.
Claim: PM loop round 1
Session: session_01QsR2jTfvjNTaR29ehLk26T
Account: zhuangjianguo
Branch: claude/project-thread-dq6ksb (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)
Worktree: objectstack-issue-26732
Domain: domain:ui
Seat: domain:ui#4
File surface: ui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.tsx, ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx, ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (the nav-item inspector only), studio namespace en.ts/zh.ts, tests beside, one root changeset; ⛔ packages/spec/**, server packages, any new key, a new component (stop on breach; explain in the report)
Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: Studio inputs (ui app-shell, this lane) carry no accessible name: the form designer's group title, the field inspector's Description and Help text, and the nav-item inspector's object and label controls · the platform path that may cover it: the inspector field components' own label wiring, which these controls bypass · reached by every screen-reader user and every automated a11y check in Studio
Thread-read: 6447148168
Premise: holds (the group-title input at ObjectFormDesigner.tsx:483-490 carries no aria-label, aria-labelledby or id on origin/main 2720874a at 2026-10-27T20:41Z)
Serial constraints cleared: #26836's thread edits StudioDesignSurface.tsx's AccessPillar, and PR #26839 touches InterfacesPillar near ~5203, both different regions; the thread merges main if either lands first
Dispatched at 2026-10-27T20:44Z to the card thread on that branch; the order lives in the thread's opening message.
{
"issue": 26732,
"status": "done",
"branch": "claude/project-thread-dq6ksb",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26926",
"head": "67406db6",
"session": "session_01QsR2jT6kwaZ4RiKsDR3s5f",
"premise_still_valid": true,
"summary": "All five controls named on main 2720874a. Form designer group-title input: aria-label from the existing key engine.studio.designer.group.nameLabel (no new key). ObjectFieldInspector's local TextareaField closes its Label/textarea pair with useId + htmlFor, naming Description and Help text. StudioNavItemInspector: Link to object label and Label label tied to the StudioPicker trigger and the input by useId + htmlFor. Sweep: no other unnamed input in the three files (option-row inputs are named by placeholder, colour swatch by title; left as is).",
"tests": "New: ObjectFieldInspector.textareaNames-26732 (en + zh awaiting loadStudioCatalogue), ObjectFormDesigner.groupTitleName-26732, StudioDesignSurface.navItemInspectorNames-26732: 3 files, 4 tests passed. Ablations via ablation-replace.mjs at a3764046, anchor 1->0 each, restored blob == HEAD: group aria-label 1/1 red, TextareaField htmlFor 2/2 red, object picker id 1/1 red, Label input id 1/1 red. Narrowed app-shell run (89 files naming the touched components): 892 passed, 1 failed at a3764046 (sharedSelect-11865 pinned the unnamed object picker); pin updated in 67406db6, 79/79 green. app-shell type-check (src + tests) exit 0.",
"gates": "dispatch-gates --commands: 34 derived, all exit 0 at 67406db6 (list identical at a3764046); vitest run scripts/ 178 passed 2 skipped; --ran: 34 run, 0 NOT-MEASURED. PR-body gates (no-major, adr-0087, closing-keyword-parity, partof) exit 0. check:new-line-citations 0. ESLint on 7 touched files: 0 errors, no warning on changed lines. PR check-runs: in_progress at report time.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"line_budget": "8 files, +219 / -11",
"files_changed": [
".changeset/26732-studio-input-names.md",
"ui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.tsx",
"ui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.groupTitleName-26732.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.textareaNames-26732.test.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.navItemInspectorNames-26732.test.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.sharedSelect-11865.test.tsx"
],
"deviations": [
"No studio-namespace key added: the group title reuses engine.studio.designer.group.nameLabel (claim forbids any new key; en.ts/zh.ts untouched).",
"StudioDesignSurface.sharedSelect-11865.test.tsx edited (test beside): its pin 'the object picker had none' contradicts the card; it now pins the name Link to object. StudioPicker's header comment updated to match."
],
"mcp_calls": "3: issue_read get, issue_read get_comments x2 (reads only)",
"api_writes": "2: fleet-write relay pr_create (PR 26926, assignee zhuangjianguo, read-back identical) and this os-dev-report comment",
"open_questions": [],
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
priority:p2·domain:ui·area:studio·pm:queue(findingremoved) · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T16:12Z⛔ Not a claim, ⛔ not a dispatch.
main.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 1
Session:
session_01QsR2jTfvjNTaR29ehLk26TAccount:
zhuangjianguoBranch:
claude/project-thread-dq6ksb(platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)Worktree:
objectstack-issue-26732Domain:
domain:uiSeat:
domain:ui#4File surface:
ui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.tsx,ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx,ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx(the nav-item inspector only), studio namespaceen.ts/zh.ts, tests beside, one root changeset; ⛔packages/spec/**, server packages, any new key, a new component (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z),effort: highClause-②: no
Metadata-protocol: none
Responsibility: Studio inputs (ui app-shell, this lane) carry no accessible name: the form designer's group title, the field inspector's Description and Help text, and the nav-item inspector's object and label controls · the platform path that may cover it: the inspector field components' own label wiring, which these controls bypass · reached by every screen-reader user and every automated a11y check in Studio
Thread-read: 6447148168
Premise: holds (the group-title input at ObjectFormDesigner.tsx:483-490 carries no
aria-label,aria-labelledbyoridon origin/main2720874aat 2026-10-27T20:41Z)Serial constraints cleared: #26836's thread edits StudioDesignSurface.tsx's AccessPillar, and PR #26839 touches InterfacesPillar near ~5203, both different regions; the thread merges main if either lands first
Dispatched at 2026-10-27T20:44Z to the card thread on that branch; the order lives in the thread's opening message.
Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26732, "status": "done", "branch": "claude/project-thread-dq6ksb", "pr": "https://github.com/objectstack-ai/objectstack/pull/26926", "head": "67406db6", "session": "session_01QsR2jT6kwaZ4RiKsDR3s5f", "premise_still_valid": true, "summary": "All five controls named on main 2720874a. Form designer group-title input: aria-label from the existing key engine.studio.designer.group.nameLabel (no new key). ObjectFieldInspector's local TextareaField closes its Label/textarea pair with useId + htmlFor, naming Description and Help text. StudioNavItemInspector: Link to object label and Label label tied to the StudioPicker trigger and the input by useId + htmlFor. Sweep: no other unnamed input in the three files (option-row inputs are named by placeholder, colour swatch by title; left as is).", "tests": "New: ObjectFieldInspector.textareaNames-26732 (en + zh awaiting loadStudioCatalogue), ObjectFormDesigner.groupTitleName-26732, StudioDesignSurface.navItemInspectorNames-26732: 3 files, 4 tests passed. Ablations via ablation-replace.mjs at a3764046, anchor 1->0 each, restored blob == HEAD: group aria-label 1/1 red, TextareaField htmlFor 2/2 red, object picker id 1/1 red, Label input id 1/1 red. Narrowed app-shell run (89 files naming the touched components): 892 passed, 1 failed at a3764046 (sharedSelect-11865 pinned the unnamed object picker); pin updated in 67406db6, 79/79 green. app-shell type-check (src + tests) exit 0.", "gates": "dispatch-gates --commands: 34 derived, all exit 0 at 67406db6 (list identical at a3764046); vitest run scripts/ 178 passed 2 skipped; --ran: 34 run, 0 NOT-MEASURED. PR-body gates (no-major, adr-0087, closing-keyword-parity, partof) exit 0. check:new-line-citations 0. ESLint on 7 touched files: 0 errors, no warning on changed lines. PR check-runs: in_progress at report time.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "line_budget": "8 files, +219 / -11", "files_changed": [ ".changeset/26732-studio-input-names.md", "ui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.tsx", "ui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.groupTitleName-26732.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.textareaNames-26732.test.tsx", "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx", "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.navItemInspectorNames-26732.test.tsx", "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.sharedSelect-11865.test.tsx" ], "deviations": [ "No studio-namespace key added: the group title reuses engine.studio.designer.group.nameLabel (claim forbids any new key; en.ts/zh.ts untouched).", "StudioDesignSurface.sharedSelect-11865.test.tsx edited (test beside): its pin 'the object picker had none' contradicts the card; it now pins the name Link to object. StudioPicker's header comment updated to match." ], "mcp_calls": "3: issue_read get, issue_read get_comments x2 (reads only)", "api_writes": "2: fleet-write relay pr_create (PR 26926, assignee zhuangjianguo, read-back identical) and this os-dev-report comment", "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code