Skip to content

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

Closed

Description

@objectstack-fleet

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

  1. Data › Form designer › a group title input → no aria-label / <label for> (ObjectFormDesigner.tsx ~483).
  2. Field inspector › Description / Help text (ObjectFieldInspector.tsx ~1050 / ~1067) → unnamed.
  3. 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

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — priority:p2 · domain:ui · area:studio · pm:queue (finding removed) · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T16:12Z

    ⛔ Not a claim, ⛔ not a dispatch.

    • 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.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uipm:dispatchedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions