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
1.1 In src/views/ProjectBoard.vue, add a navigateToTask(task) method that calls this.$router.push({ name: 'TaskDetail', params: { id: this.project?.id ?? this.$route.params.id, taskId: task.id } }), mirroring ProjectListnavigateToProject
1.2 On the card wrapper, add role="button", tabindex="0", :aria-label="task.title", data-testid="task-card", @click, @keydown.enter, @keydown.space.prevent all invoking navigateToTask(task) — existing draggable/@dragstart/@dragend bindings unchanged. The data-testid satisfies task-collaboration.spec.ts's [data-testid="task-card"] selector without changing the card to an <a>
1.3 Add a :focus-visible outline in the card's scoped <style> (var(--color-primary-element), no hardcoded color)
2.1 Added a per-card "Move to…" control (NcActions with one NcActionButton per other column, :force-menu="true") in the ProjectBoard.vue card wrapper, reachable by keyboard
2.2 Wired its handler to moveTask(task, status) → shared applyStatusMove which calls the existing updateTaskStatus store action (the same method the drag path uses via the refactored onDrop) — optimistic update + rollback + RBAC identical between drag and keyboard
2.3 The "Move to…" wrapper is draggable="false" with @dragstart.stop, @click.stop, @keydown.enter/.space.stop so it never starts a drag or navigates to detail
3.1 In openspec/specs/kanban-board.md, checked off "Board is keyboard-navigable (WCAG AA)" (line 155)
4.5 Companion note: navigateToTask + data-testid="task-card" now give task-collaboration.spec.ts's taskLink selector a real target; that spec's fixture-absence guards were converted to assertions in the e2e-seed change.
Synced from openspec/changes/kanban-task-detail-keyboard-navigation by OpenSpec workflow App: planninq
Artifacts
Specs
Tasks
src/views/ProjectBoard.vue, add anavigateToTask(task)method that callsthis.$router.push({ name: 'TaskDetail', params: { id: this.project?.id ?? this.$route.params.id, taskId: task.id } }), mirroringProjectListnavigateToProjectrole="button",tabindex="0",:aria-label="task.title",data-testid="task-card",@click,@keydown.enter,@keydown.space.preventall invokingnavigateToTask(task)— existingdraggable/@dragstart/@dragendbindings unchanged. Thedata-testidsatisfiestask-collaboration.spec.ts's[data-testid="task-card"]selector without changing the card to an<a>:focus-visibleoutline in the card's scoped<style>(var(--color-primary-element), no hardcoded color)NcActionswith oneNcActionButtonper other column,:force-menu="true") in theProjectBoard.vuecard wrapper, reachable by keyboardmoveTask(task, status)→ sharedapplyStatusMovewhich calls the existingupdateTaskStatusstore action (the same method the drag path uses via the refactoredonDrop) — optimistic update + rollback + RBAC identical between drag and keyboarddraggable="false"with@dragstart.stop,@click.stop,@keydown.enter/.space.stopso it never starts a drag or navigates to detailopenspec/specs/kanban-board.md, checked off "Board is keyboard-navigable (WCAG AA)" (line 155)navigateToTask+data-testid="task-card"now givetask-collaboration.spec.ts'staskLinkselector a real target; that spec's fixture-absence guards were converted to assertions in the e2e-seed change.Synced from
openspec/changes/kanban-task-detail-keyboard-navigationby OpenSpec workflowApp:
planninq