106 lines
5.7 KiB
Markdown
106 lines
5.7 KiB
Markdown
---
|
|
status: implemented
|
|
created: 2026-08-13
|
|
owner: kandev
|
|
---
|
|
|
|
# Task-create dependency selector refinement
|
|
|
|
## Why
|
|
|
|
The task-create dialog currently presents dependencies as a small action beside
|
|
a separate label and then renders selected tasks as chips below it. This makes
|
|
the control look different from the agent, executor, and workflow selectors,
|
|
and the dependency behavior is easy to miss when a user is planning an ordered
|
|
set of tasks.
|
|
|
|
## What
|
|
|
|
- In create mode, the dependency control appears in the row below the agent and
|
|
executor selectors, on the right of the workflow selector when that selector
|
|
is visible.
|
|
- The dependency control is one searchable selector. It keeps the existing
|
|
ability to choose multiple predecessor tasks by toggling task entries in the
|
|
same selector.
|
|
- With no predecessor selected, the trigger shows `No dependency` and the
|
|
dependency icon. With one predecessor selected, it shows that task's title.
|
|
With multiple predecessors selected, it shows a localized dependency count.
|
|
- The selector includes a `No dependency` entry that clears every selected
|
|
predecessor. A selected task can be removed by toggling its entry off.
|
|
- Every task entry in the selector displays a task icon. Archived tasks are not
|
|
offered as candidates, and the existing candidate sources from both Kanban
|
|
board slices remain available.
|
|
- The selector's search row has an info control on its right side. Hovering or
|
|
focusing the control explains that dependencies wait for all selected tasks
|
|
to finish successfully and that starting an agent starts this task
|
|
automatically after they resolve. The control has an accessible name and is
|
|
usable with touch and keyboard input.
|
|
- The existing `blockedBy` form state and `blocked_by` create payload remain
|
|
unchanged. Selecting several predecessors keeps the existing AND semantics.
|
|
- The dependency selector is disabled while the create flow is creating a
|
|
session, matching the current dependency control behavior.
|
|
- The selector is available only for an unstarted task in create mode. It does
|
|
not add an edge editor to task detail or edit mode.
|
|
- All new trigger labels, search copy, empty states, count labels, and help
|
|
copy use the task translation namespace. No new user-facing literal is
|
|
hardcoded in a component.
|
|
|
|
## Mobile design contract
|
|
|
|
- Desktop entry point: the dependency selector in the task-create dialog row
|
|
beside the workflow selector. Mobile entry point: the same full-width
|
|
selector in the dialog's vertically scrolling form.
|
|
- The nearest shipped mobile exemplar is the task-create repository picker and
|
|
its `Pill` command surface. Reuse its contained searchable picker geometry,
|
|
touch-safe actions, and no-horizontal-overflow expectations while keeping the
|
|
dependency selector's full-width selector trigger consistent with the agent
|
|
and executor controls.
|
|
- Mobile hierarchy is workflow first, dependency second, followed by the rest
|
|
of the form. The dependency trigger and each task row are the primary touch
|
|
targets for this surface.
|
|
- The picker remains a viewport-contained searchable popover with an internal
|
|
command-list scroll owner. The dialog form remains the outer scroll owner
|
|
when the picker is closed. No document-level horizontal scrolling is added.
|
|
- The selector shares task derivation, filtering, selection, and `blockedBy`
|
|
mutation logic across viewports. Only layout and touch presentation vary.
|
|
|
|
## Scenarios
|
|
|
|
- **GIVEN** a new task dialog with no selected predecessors, **WHEN** the user
|
|
views the workflow/dependency row, **THEN** the dependency trigger is on the
|
|
workflow row's right side and shows `No dependency` with its icon.
|
|
- **GIVEN** the workflow selector is hidden because a single workflow is
|
|
already enforced, **WHEN** the user opens the create dialog, **THEN** the
|
|
dependency selector remains available in the same row position instead of
|
|
disappearing with the workflow control.
|
|
- **GIVEN** the dependency trigger, **WHEN** the user opens it, **THEN** the
|
|
search field, the info control, the `No dependency` entry, and all non-archived
|
|
board tasks are available.
|
|
- **GIVEN** two non-archived candidate tasks, **WHEN** the user selects both
|
|
entries, **THEN** both entries are marked selected, the trigger shows a
|
|
localized count, and the form retains both task IDs in `blockedBy`.
|
|
- **GIVEN** selected predecessors, **WHEN** the user selects `No dependency`,
|
|
**THEN** the trigger returns to its default state and the form's `blockedBy`
|
|
value is empty.
|
|
- **GIVEN** the selector's info control, **WHEN** the user hovers, focuses, or
|
|
taps it, **THEN** the dependency explanation is readable without changing
|
|
the current task selection, and Escape or outside interaction dismisses it.
|
|
- **GIVEN** an archived board task, **WHEN** the user searches the dependency
|
|
selector, **THEN** the archived task is not offered.
|
|
- **GIVEN** a Pixel 5-sized viewport, **WHEN** the user opens the create dialog
|
|
and dependency selector, **THEN** the trigger and task rows remain reachable,
|
|
the picker stays within the viewport, and the document has no horizontal
|
|
overflow.
|
|
- **GIVEN** a task with selected predecessors, **WHEN** the user submits the
|
|
create dialog, **THEN** the request still contains the selected IDs in
|
|
`blocked_by`; no dependency API or backend contract changes.
|
|
|
|
## Out of scope
|
|
|
|
- Changing the dependency graph, auto-start semantics, or backend/API payload.
|
|
- Limiting a task to one predecessor. Multiple predecessors and AND semantics
|
|
remain supported.
|
|
- Adding dependency editing to task detail, Kanban card menus, or MCP.
|
|
- Adding a new mobile navigation surface or replacing the task-create dialog.
|
|
- Changing workflow, agent, executor, repository, or branch selector behavior.
|