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
kanban: every card tells screen-reader users to press Space to pick it up, but the board has no keyboard sensor, so Space starts no drag (and the instructions stay English under zh) #12837
Filing gate ①: a user-visible accessibility defect. reach: a public entry, measured in the browser on the showcase task board (objectstack 66d456d01examples/app-showcase--fresh, console from objectui PR #12835's branch). Filed by domain:ui seat 3 (session_01Vk15bz8xHtKGUfXfCm16h4) from the os-dev report on objectui#12716, which does not change this. ⛔ Not a claim.
Reader who acts: objectui triage. The landing is packages/plugin-kanban/src/KanbanImpl.tsx (the board's sensors and its DndContext accessibility) and the packages/plugin-kanban/README.md features line.
Measured
Every card's aria-describedby points at dnd-kit's default instructions: "To pick up a draggable item, press the space bar. While dragging, use the arrow keys …".
Space on a focused card starts no drag: the live region does not change, and no card reports aria-pressed.
Under zh the instructions stay English.
Mechanism (read from source)
KanbanImpl.tsx builds useSensors(PointerSensor, TouchSensor) with no KeyboardSensor, and passes no accessibility.screenReaderInstructions.
The package README lists "Accessible: Built on @dnd-kit with keyboard navigation support".
Expected
Either the board supports keyboard drag (a KeyboardSensor, with instructions from the kanban bundle region in all ten packs), or it stops advertising it: no instructions that name a key that does nothing, and a README line that matches. Which one is triage's to grade.
Dedupe (open and closed): every objectui domain:ui card (2433 rows, through #12743) plus the newest objectui issues (from #12741), grepped for KeyboardSensor|screenReaderInstructions|press the space bar and kanban near keyboard: 0 hits. The drag announcements themselves are objectui#12716.
Dedupe words: kanban keyboard drag, KeyboardSensor, screenReaderInstructions, press the space bar kanban.
Why p3: the same grade as its sibling objectui#12716 (p3), the board's other screen-reader defect. The instructions name a key that does nothing; no data is at risk.
Premise read on origin/main:packages/plugin-kanban/src/KanbanImpl.tsx:944 builds useSensors(PointerSensor, TouchSensor) with no KeyboardSensor, and README.md:225 still reads "keyboard navigation support".
The route triage grades (the card leaves it to triage): the truth fix. No instruction names a key that does nothing, and the README line matches what ships. Keyboard drag (a KeyboardSensor and cross-lane coordinates) is a new capability. It is held for the maintainer to name, and this card does not build it.
Claim: PM loop round 3 (priority:p3 bug, a11y; filed by domain:ui seat 3 and graded by the triage seat, 6227684358: the truth fix, with keyboard drag held for the maintainer; serial after objectui#12716, which landed as PR #12835)
Session: session_01SJn1GEkrbbBQkhGC26wEDw
Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-12837-kanban-dnd-instructions
Worktree: objectui-issue-12837 (in the cloud session's own container)
Domain: domain:ui
Seat: domain:ui#4
File surface:
packages/plugin-kanban/src/KanbanImpl.tsx: the board's DndContextaccessibility gains screenReaderInstructions.draggable from one bundle sentence, which names no key. The sensors stay PointerSensor and TouchSensor.
packages/plugin-kanban/README.md: the "Accessible" features line (about :225) matches what ships.
packages/i18n/src/locales/*.ts: one key, kanban.dnd.instructions, in all ten packs.
Tests beside the board, and changesets for @object-ui/plugin-kanban and @object-ui/i18n (patch).
⛔ No KeyboardSensor and no keyboard-drag capability. That is a new capability, held for the maintainer by the triage grade. packages/components/src/ui/** stays out.
Stop on breach; explain in the report.
Container & model: S, mode:cloud, model: opus (cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)
Clause-②: yes
Clause-② reason: one new @object-ui/i18n key (kanban.dnd.instructions) in all ten packs. No exported type or prop moves.
Responsibility: n/a — every kanban card tells screen-reader users to press Space, which does nothing, and says it in English under zh
Thread-read: 6227684358
Serial constraints cleared:
No open objectui PR touches packages/plugin-kanban/src/** or the README. chore: release packages (next) #11600 touches only a .changeset/pre file of that package. No pm:dispatched objectui claim names the board (read at dispatch).
{
"issue": 12837,
"status": "done",
"branch": "claude/issue-12837-kanban-dnd-instructions",
"pr": 12882,
"session": "session_01WT5P73Bw57v6j8kro7afTn (dispatched by PM seat domain:ui#4, session_01SJn1GEkrbbBQkhGC26wEDw)",
"premise_still_valid": true,
"summary": "The board's DndContext accessibility memo now carries screenReaderInstructions.draggable = t('kanban.dnd.instructions') beside the objectui#12716 announcements. That is one new bundle sentence in all ten packs and in useKanbanT's inline defaults. It says a card moves to another column by pointer or touch drag and names no key. The sensors are unchanged (PointerSensor and TouchSensor, no KeyboardSensor). The plugin-kanban README 'Accessible' line now says what ships. Measured live under zh-CN on the showcase task board, main reads dnd-kit's English space-bar text and the branch reads the zh sentence. On both, Space and Enter on a focused card do nothing, and no keyboard route on the board changes a card's column. Branch head 4057737, one commit on BASE 64acb7e; origin/main has not moved since (re-fetched, merge-tree clean).",
"tests": "New: packages/plugin-kanban/src/__tests__/dndInstructions-12837.test.tsx (4 tests): under en and under zh the card's aria-describedby target equals the bundle sentence and contains none of space/Space/空格/arrow/方向键; CONTROL the board's useSensor calls include PointerSensor and TouchSensor and not KeyboardSensor; CONTROL Space keydown on a focused card leaves the live region unchanged and sets no aria-pressed=true. Existing objectui#12716 pins (dndAnnouncements-12716.test.tsx) pass unchanged. Run on head 4057737: `pnpm exec vitest run --maxWorkers=2 packages/plugin-kanban/` under the verify lock gave VERDICT command-exit 0, Test Files 74 passed (74), Tests 500 passed (500). Ablations ran through objectstack scripts/ablation-replace.mjs; each anchor hit x1 to x0, the blob changed, and the restore was verified blob == HEAD with `git diff HEAD` empty. A: delete the screenReaderInstructions line gave 2 failed / 2 passed; the en and zh pins went red, received '\\n To pick up a draggable item, pr…'. B: import `KeyboardSensor as TouchSensor` gave 2 failed / 2 passed; both CONTROLs went red, and Space on a focused card then starts a drag, so the Space control can fail. No dist preflight: the test imports ../KanbanImpl, and vitest aliases @object-ui/i18n to src.",
"gates": "All exit codes captured before any pipe. Under the lock: plugin-kanban full vitest exit 0; `pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-kanban^...' build` exit 0; `pnpm --filter @object-ui/i18n type-check|lint|build` exit 0/0/0; `pnpm --filter @object-ui/plugin-kanban type-check|lint|build` exit 0/0/0. Script names were echoed. The plugin-kanban lint is normal mode, 0 errors and 261 pre-existing warnings; eslint on the touched files reports 0 problems. `pnpm check:i18n-keys` exit 0 (every call-site key resolves against en). `pnpm check:i18n-drift` exit 0 (no en value changed). `pnpm check:i18n-dead-keys` exit 0 with no kanban.dnd row. `node scripts/check-changeset-presence.mjs` exit 0. `pnpm check:new-line-citations` exit 0 (0 new). Control-byte self-scan of every changed file found 0 hits; objectui has no scripts/check-nul-bytes.mjs (MODULE_NOT_FOUND, not a gate result). dispatch-gates.mjs is objectstack-only, so the gates were hand-derived. CI check-runs: NOT MEASURED, because no PR exists yet (the PM opens it).",
"mcp_calls": "3 — mcp__github__issue_read (get #12837), mcp__github__issue_read (get_comments #12837), mcp__github__pull_request_read (get #12835). Also one mcp__claude-code-remote__add_repo (objectstack-ai/objectstack, access read; nothing attached, anonymous clone). No write tool.",
"api_writes": "0 REST writes. git push only: claude/issue-12837-kanban-dnd-instructions (empty at 64acb7e, then 4057737) and claude/issue-12837-evidence (e502955).",
"files_changed": [
"packages/plugin-kanban/src/KanbanImpl.tsx",
"packages/plugin-kanban/README.md",
"packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts (one key each)",
"packages/plugin-kanban/src/__tests__/dndInstructions-12837.test.tsx",
".changeset/kanban-dnd-instructions-12837.md (patch: @object-ui/plugin-kanban, @object-ui/i18n)"
],
"screenshots": [
"before (main 64acb7e, zh-CN, light): https://github.com/objectstack-ai/objectui/blob/e5029552b5e00adb5635a86ffb32be74c4d87225/docs/design/findings/12837/main-before-zh-light.png?raw=true",
"after (branch 4057737, zh-CN, light): https://github.com/objectstack-ai/objectui/blob/e5029552b5e00adb5635a86ffb32be74c4d87225/docs/design/findings/12837/branch-after-zh-light.png?raw=true"
],
"line_budget": "n/a",
"deviations": [
"Contract vs order: os-dev.md makes the draft PR and the os-dev-report issue comment the dev's own writes. The dispatch's degraded channel forbids both in this container (the fleet-write relay is refused with 403). I followed the dispatch: no PR, no comment, and the PR body is drafted below for the PM.",
"The lock and ablation tooling were run from the read-only objectstack clone at /home/user/objectstack-ai/objectstack. objectui AGENTS.md names /home/user/objectstack, which does not exist here, and objectui has no ablation-replace.mjs of its own.",
"The stale local branch claude/issue-12837-kanban-dnd-instructions had no commits of its own and was checked out in the shared /home/user/objectui checkout. To delete it as ordered, I detached that checkout at the same commit (64acb7e). No file in it was edited.",
"The claim says 'changesets'. One changeset file declares both packages as patch.",
"Live: the PUT to /api/v1/auth/me/localization answered 404, so zh-CN was set through the objectui-locale localStorage key. The rendered UI was zh (看板, 待规划), as both screenshots show.",
"The screenshot caption overlay uses inline style. It exists only in the Playwright page and never in the repo."
],
"pm_assumptions": [
"1 held: useSensors(useSensor(PointerSensor…), useSensor(TouchSensor…)), no KeyboardSensor.",
"2 held: DndContext accessibility={dndAccessibility}; the memo held only announcements, and live main read dnd-kit's default English instructions.",
"3 partly falsified: SortableCard writes an explicit role=\"listitem\" after spreading dnd-kit's attributes, so a card's role is listitem, not button. Because dnd-kit sets aria-pressed only for its default button role, no card ever reports aria-pressed. tabIndex=0 and aria-describedby (DndDescribedBy-0) are present as assumed. Enter and Space on a focused card do nothing on main and on the branch (measured live). A pointer click opens the record (URL moves to /record/ID).",
"4 held: the kanban.dnd region was in all ten packs with the nine named keys; instructions is the tenth."
],
"open_questions": [
{
"question": "Keyboard drag for the board (a KeyboardSensor with cross-lane coordinates), held by the triage grade. Should it be a follow-up?",
"options": [
"A: no card until the maintainer names it",
"B: file a capability card now"
],
"recommendation": "A. On 业务需求, no measured user asks for it, and the only signal was the false promise this PR removes. On 创业阶段不扩散需求, it is a new capability, so expansion stays tight by default. On 防 AI 写错, the board now claims only what ships."
},
{
"question": "On a board whose cards cannot move (KanbanCardsMovable false; the sortable is disabled and reports aria-disabled), dnd-kit still points each card's aria-describedby at the same instructions node. Such a card reads 'drag it … to move it' beside aria-disabled.",
"options": [
"A: leave as is; aria-disabled is announced with it",
"B: follow-up that gives the board a no-move sentence when nothing is movable"
],
"recommendation": "A for this card, because the ruling fixes one sentence and the memo has no per-card hook. B only if someone shows a real read-only board where the sentence misleads; noted, not filed."
}
],
"out_of_scope_findings": [
"class: a (user-visible a11y) · reach: public door measured live on the showcase task board under zh-CN, main 64acb7e and branch 4057737. A kanban card is a keyboard tab stop (tabIndex=0) with no keyboard action: Enter and Space on the focused card leave the URL, dialogs and live region unchanged, while a pointer click opens the record (/apps/showcase_app/showcase_task/record/ID). A keyboard user can reach a card but cannot open its record from the board · dedupe words: kanban card Enter opens record, kanban card keyboard activation, SortableCard onClick keyboard, kanban card tabIndex no action"
],
"pr_title_draft": "fix(plugin-kanban,i18n): a kanban card's description names no key the board lacks (objectui#12837)",
"pr_body_draft": "(elided here: it is the body of objectstack-ai/objectui#12882, the dev's draft verbatim)",
"head": "4057737"
}
Relayed by seat domain:ui#4 (session_01SJn1GEkrbbBQkhGC26wEDw) from the cloud session's final report. This is the degraded channel: the session pushed and returned pr: null. The seat opened #12882 from claude/issue-12837-kanban-dnd-instructions at 4057737 and set pr and head above. The title is the dev's draft and already names the card. The seat's rulings on the two open questions and on the out-of-scope finding are in the ACCEPT on the PR.
the pre-12837 readings are kept, and one delta case per example asserts that only the instructions text moved
objectui#6939's own finding is untouched
.changeset/kanban-dnd-instructions-12837.md
present: patch for @object-ui/plugin-kanban and @object-ui/i18n
—
a model name in the merge commit's message
0
—
PNG files in the merge's diff
0
the screenshots stay on claude/issue-12837-evidence
State change: the card closed as completed through Fixes #12837. This act removes pm:dispatched. The cloud session session_01WT5P73Bw57v6j8kro7afTn is archived. The out-of-scope finding is objectui#12883, with triage. objectui#12838, which touches the same file, is now free to dispatch.
Records of this card:
the claim: 6233377291;
the report relayed: 6233697349;
the ACCEPT: 6233700847;
the contract review, TIER_DEFAULT PASS: 6233705384;
Activity
objectstack-fleet commentedon Oct 17, 2026
Triage: first grade,
priority:p3·domain:ui·area:records·a11y·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-17T01:00ZTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.
origin/main:packages/plugin-kanban/src/KanbanImpl.tsx:944buildsuseSensors(PointerSensor, TouchSensor)with noKeyboardSensor, andREADME.md:225still reads "keyboard navigation support".KeyboardSensorand cross-lane coordinates) is a new capability. It is held for the maintainer to name, and this card does not build it.Generated by Claude Code
objectstack-fleet commentedon Oct 17, 2026
Claim: PM loop round 3 (
priority:p3bug,a11y; filed bydomain:uiseat 3 and graded by the triage seat,6227684358: the truth fix, with keyboard drag held for the maintainer; serial after objectui#12716, which landed as PR #12835)Session:
session_01SJn1GEkrbbBQkhGC26wEDwAccount:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-12837-kanban-dnd-instructionsWorktree:
objectui-issue-12837(in the cloud session's own container)Domain:
domain:uiSeat:
domain:ui#4File surface:
packages/plugin-kanban/src/KanbanImpl.tsx: the board'sDndContextaccessibilitygainsscreenReaderInstructions.draggablefrom one bundle sentence, which names no key. The sensors stayPointerSensorandTouchSensor.packages/plugin-kanban/README.md: the "Accessible" features line (about :225) matches what ships.packages/i18n/src/locales/*.ts: one key,kanban.dnd.instructions, in all ten packs.@object-ui/plugin-kanbanand@object-ui/i18n(patch).KeyboardSensorand no keyboard-drag capability. That is a new capability, held for the maintainer by the triage grade.packages/components/src/ui/**stays out.Stop on breach; explain in the report.
Container & model:
S,mode:cloud,model: opus(cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)Clause-②: yes
Clause-② reason: one new
@object-ui/i18nkey (kanban.dnd.instructions) in all ten packs. No exported type or prop moves.Responsibility: n/a — every kanban card tells screen-reader users to press Space, which does nothing, and says it in English under zh
Thread-read: 6227684358
Serial constraints cleared:
36e2f7b), and this branch is cut after it.packages/plugin-kanban/src/**or the README. chore: release packages (next) #11600 touches only a.changeset/prefile of that package. Nopm:dispatchedobjectui claim names the board (read at dispatch).console.settingsViewregion, notkanban. If it lands first, this branch mergesorigin/main.aria-labeltemplates, the same file) waits for this card.objectstack-fleet commentedon Oct 17, 2026
os-dev-report
{ "issue": 12837, "status": "done", "branch": "claude/issue-12837-kanban-dnd-instructions", "pr": 12882, "session": "session_01WT5P73Bw57v6j8kro7afTn (dispatched by PM seat domain:ui#4, session_01SJn1GEkrbbBQkhGC26wEDw)", "premise_still_valid": true, "summary": "The board's DndContext accessibility memo now carries screenReaderInstructions.draggable = t('kanban.dnd.instructions') beside the objectui#12716 announcements. That is one new bundle sentence in all ten packs and in useKanbanT's inline defaults. It says a card moves to another column by pointer or touch drag and names no key. The sensors are unchanged (PointerSensor and TouchSensor, no KeyboardSensor). The plugin-kanban README 'Accessible' line now says what ships. Measured live under zh-CN on the showcase task board, main reads dnd-kit's English space-bar text and the branch reads the zh sentence. On both, Space and Enter on a focused card do nothing, and no keyboard route on the board changes a card's column. Branch head 4057737, one commit on BASE 64acb7e; origin/main has not moved since (re-fetched, merge-tree clean).", "tests": "New: packages/plugin-kanban/src/__tests__/dndInstructions-12837.test.tsx (4 tests): under en and under zh the card's aria-describedby target equals the bundle sentence and contains none of space/Space/空格/arrow/方向键; CONTROL the board's useSensor calls include PointerSensor and TouchSensor and not KeyboardSensor; CONTROL Space keydown on a focused card leaves the live region unchanged and sets no aria-pressed=true. Existing objectui#12716 pins (dndAnnouncements-12716.test.tsx) pass unchanged. Run on head 4057737: `pnpm exec vitest run --maxWorkers=2 packages/plugin-kanban/` under the verify lock gave VERDICT command-exit 0, Test Files 74 passed (74), Tests 500 passed (500). Ablations ran through objectstack scripts/ablation-replace.mjs; each anchor hit x1 to x0, the blob changed, and the restore was verified blob == HEAD with `git diff HEAD` empty. A: delete the screenReaderInstructions line gave 2 failed / 2 passed; the en and zh pins went red, received '\\n To pick up a draggable item, pr…'. B: import `KeyboardSensor as TouchSensor` gave 2 failed / 2 passed; both CONTROLs went red, and Space on a focused card then starts a drag, so the Space control can fail. No dist preflight: the test imports ../KanbanImpl, and vitest aliases @object-ui/i18n to src.", "gates": "All exit codes captured before any pipe. Under the lock: plugin-kanban full vitest exit 0; `pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-kanban^...' build` exit 0; `pnpm --filter @object-ui/i18n type-check|lint|build` exit 0/0/0; `pnpm --filter @object-ui/plugin-kanban type-check|lint|build` exit 0/0/0. Script names were echoed. The plugin-kanban lint is normal mode, 0 errors and 261 pre-existing warnings; eslint on the touched files reports 0 problems. `pnpm check:i18n-keys` exit 0 (every call-site key resolves against en). `pnpm check:i18n-drift` exit 0 (no en value changed). `pnpm check:i18n-dead-keys` exit 0 with no kanban.dnd row. `node scripts/check-changeset-presence.mjs` exit 0. `pnpm check:new-line-citations` exit 0 (0 new). Control-byte self-scan of every changed file found 0 hits; objectui has no scripts/check-nul-bytes.mjs (MODULE_NOT_FOUND, not a gate result). dispatch-gates.mjs is objectstack-only, so the gates were hand-derived. CI check-runs: NOT MEASURED, because no PR exists yet (the PM opens it).", "mcp_calls": "3 — mcp__github__issue_read (get #12837), mcp__github__issue_read (get_comments #12837), mcp__github__pull_request_read (get #12835). Also one mcp__claude-code-remote__add_repo (objectstack-ai/objectstack, access read; nothing attached, anonymous clone). No write tool.", "api_writes": "0 REST writes. git push only: claude/issue-12837-kanban-dnd-instructions (empty at 64acb7e, then 4057737) and claude/issue-12837-evidence (e502955).", "files_changed": [ "packages/plugin-kanban/src/KanbanImpl.tsx", "packages/plugin-kanban/README.md", "packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts (one key each)", "packages/plugin-kanban/src/__tests__/dndInstructions-12837.test.tsx", ".changeset/kanban-dnd-instructions-12837.md (patch: @object-ui/plugin-kanban, @object-ui/i18n)" ], "screenshots": [ "before (main 64acb7e, zh-CN, light): https://github.com/objectstack-ai/objectui/blob/e5029552b5e00adb5635a86ffb32be74c4d87225/docs/design/findings/12837/main-before-zh-light.png?raw=true", "after (branch 4057737, zh-CN, light): https://github.com/objectstack-ai/objectui/blob/e5029552b5e00adb5635a86ffb32be74c4d87225/docs/design/findings/12837/branch-after-zh-light.png?raw=true" ], "line_budget": "n/a", "deviations": [ "Contract vs order: os-dev.md makes the draft PR and the os-dev-report issue comment the dev's own writes. The dispatch's degraded channel forbids both in this container (the fleet-write relay is refused with 403). I followed the dispatch: no PR, no comment, and the PR body is drafted below for the PM.", "The lock and ablation tooling were run from the read-only objectstack clone at /home/user/objectstack-ai/objectstack. objectui AGENTS.md names /home/user/objectstack, which does not exist here, and objectui has no ablation-replace.mjs of its own.", "The stale local branch claude/issue-12837-kanban-dnd-instructions had no commits of its own and was checked out in the shared /home/user/objectui checkout. To delete it as ordered, I detached that checkout at the same commit (64acb7e). No file in it was edited.", "The claim says 'changesets'. One changeset file declares both packages as patch.", "Live: the PUT to /api/v1/auth/me/localization answered 404, so zh-CN was set through the objectui-locale localStorage key. The rendered UI was zh (看板, 待规划), as both screenshots show.", "The screenshot caption overlay uses inline style. It exists only in the Playwright page and never in the repo." ], "pm_assumptions": [ "1 held: useSensors(useSensor(PointerSensor…), useSensor(TouchSensor…)), no KeyboardSensor.", "2 held: DndContext accessibility={dndAccessibility}; the memo held only announcements, and live main read dnd-kit's default English instructions.", "3 partly falsified: SortableCard writes an explicit role=\"listitem\" after spreading dnd-kit's attributes, so a card's role is listitem, not button. Because dnd-kit sets aria-pressed only for its default button role, no card ever reports aria-pressed. tabIndex=0 and aria-describedby (DndDescribedBy-0) are present as assumed. Enter and Space on a focused card do nothing on main and on the branch (measured live). A pointer click opens the record (URL moves to /record/ID).", "4 held: the kanban.dnd region was in all ten packs with the nine named keys; instructions is the tenth." ], "open_questions": [ { "question": "Keyboard drag for the board (a KeyboardSensor with cross-lane coordinates), held by the triage grade. Should it be a follow-up?", "options": [ "A: no card until the maintainer names it", "B: file a capability card now" ], "recommendation": "A. On 业务需求, no measured user asks for it, and the only signal was the false promise this PR removes. On 创业阶段不扩散需求, it is a new capability, so expansion stays tight by default. On 防 AI 写错, the board now claims only what ships." }, { "question": "On a board whose cards cannot move (KanbanCardsMovable false; the sortable is disabled and reports aria-disabled), dnd-kit still points each card's aria-describedby at the same instructions node. Such a card reads 'drag it … to move it' beside aria-disabled.", "options": [ "A: leave as is; aria-disabled is announced with it", "B: follow-up that gives the board a no-move sentence when nothing is movable" ], "recommendation": "A for this card, because the ruling fixes one sentence and the memo has no per-card hook. B only if someone shows a real read-only board where the sentence misleads; noted, not filed." } ], "out_of_scope_findings": [ "class: a (user-visible a11y) · reach: public door measured live on the showcase task board under zh-CN, main 64acb7e and branch 4057737. A kanban card is a keyboard tab stop (tabIndex=0) with no keyboard action: Enter and Space on the focused card leave the URL, dialogs and live region unchanged, while a pointer click opens the record (/apps/showcase_app/showcase_task/record/ID). A keyboard user can reach a card but cannot open its record from the board · dedupe words: kanban card Enter opens record, kanban card keyboard activation, SortableCard onClick keyboard, kanban card tabIndex no action" ], "pr_title_draft": "fix(plugin-kanban,i18n): a kanban card's description names no key the board lacks (objectui#12837)", "pr_body_draft": "(elided here: it is the body of objectstack-ai/objectui#12882, the dev's draft verbatim)", "head": "4057737" }Relayed by seat
domain:ui#4(session_01SJn1GEkrbbBQkhGC26wEDw) from the cloud session's final report. This is the degraded channel: the session pushed and returnedpr: null. The seat opened #12882 fromclaude/issue-12837-kanban-dnd-instructionsat4057737and setprandheadabove. The title is the dev's draft and already names the card. The seat's rulings on the two open questions and on the out-of-scope finding are in the ACCEPT on the PR.Generated by Claude Code
objectstack-fleet commentedon Oct 17, 2026
Landed · PR #12882 merged as
8a25feeonmain· read 2026-10-17T12:51Zorigin/main8a25feescreenReaderInstructionsinKanbanImpl.tsx{ draggable: t('kanban.dnd.instructions') }in the board'sdndAccessibilitymemo (:1195)announcementssit beside it, unchangeduseKanbanTinline default'kanban.dnd.instructions'(:64)KeyboardSensorinKanbanImpl.tsxkanban.dnd.instructionsin the packszh.ts:912)packages/plugin-kanban/README.md:225examples/schema-catalog/test/kanban-column-cards-6939.test.tsx.changeset/kanban-dnd-instructions-12837.mdpatchfor@object-ui/plugin-kanbanand@object-ui/i18nclaude/issue-12837-evidenceState change: the card closed as completed through
Fixes #12837. This act removespm:dispatched. The cloud sessionsession_01WT5P73Bw57v6j8kro7afTnis archived. The out-of-scope finding is objectui#12883, with triage. objectui#12838, which touches the same file, is now free to dispatch.Records of this card:
6233377291;6233697349;6233700847;TIER_DEFAULTPASS:6233705384;6233753122;6233952379.Generated by Claude Code