8.8 KiB
status, system, created, owners
| status | system | created | owners | |
|---|---|---|---|---|
| active | ui | 2026-07-17 |
|
Direct Sidebar View Creation Requirements
Overview
Creating a sidebar view currently requires changing an existing view before Save as… becomes available. This makes a basic organizational action feel hidden and risks teaching users that editing an existing view is part of creating a new one.
Requirements
REQ-UI-SIDEBAR-VIEW-CREATION-001: Direct Sidebar View Creation
Intent: Creating a sidebar view currently requires changing an existing view before Save as… becomes available. This makes a basic organizational action feel hidden and risks teaching users that editing an existing view is part of creating a new one.
Acceptance criteria
- AC-UI-SIDEBAR-VIEW-CREATION-001.1: The desktop Tasks view picker ends with a separated
New viewaction. The label has no ellipsis because selection creates the view immediately rather than opening a pre-creation dialog. - AC-UI-SIDEBAR-VIEW-CREATION-001.2: The mobile task-switcher sheet exposes a fixed
New viewaction beside the horizontally scrolling saved-view chips and filter control. It remains reachable without hover or horizontal page scrolling and has at least a 40×40 px hit area. - AC-UI-SIDEBAR-VIEW-CREATION-001.3: Selecting
New viewimmediately appends and activates a saved view with canonical defaults: no filters,stateascending sort,repositorygrouping, and no collapsed groups. - AC-UI-SIDEBAR-VIEW-CREATION-001.4: Canonical defaults do not inherit from the active view, an active draft, or a user-modified
All tasksview. - AC-UI-SIDEBAR-VIEW-CREATION-001.5: The automatic name is the lowest exact name not already present:
New view, thenNew view 2,New view 3, and so on. Existing manually duplicated names remain valid. - AC-UI-SIDEBAR-VIEW-CREATION-001.6: After creation, the existing filter popover opens with its rename input focused and prefilled with the automatic name. Saving a rename keeps the popover open so the user can configure filters, sort, and grouping next.
- AC-UI-SIDEBAR-VIEW-CREATION-001.7: Rename is optional. Canceling rename, pressing Escape, or closing the popover keeps the already-created view under its automatic name.
- AC-UI-SIDEBAR-VIEW-CREATION-001.8:
Save as…remains available for deriving a view from unsaved changes; direct creation does not replace or change that workflow.
Migrated source detail
Why
Creating a sidebar view currently requires changing an existing view before Save as… becomes available. This makes a basic organizational action feel hidden and risks teaching users that editing an existing view is part of creating a new one.
What
- The desktop Tasks view picker ends with a separated
New viewaction. The label has no ellipsis because selection creates the view immediately rather than opening a pre-creation dialog. - The mobile task-switcher sheet exposes a fixed
New viewaction beside the horizontally scrolling saved-view chips and filter control. It remains reachable without hover or horizontal page scrolling and has at least a 40×40 px hit area. - Selecting
New viewimmediately appends and activates a saved view with canonical defaults: no filters,stateascending sort,repositorygrouping, and no collapsed groups. - Canonical defaults do not inherit from the active view, an active draft, or a user-modified
All tasksview. - The automatic name is the lowest exact name not already present:
New view, thenNew view 2,New view 3, and so on. Existing manually duplicated names remain valid. - After creation, the existing filter popover opens with its rename input focused and prefilled with the automatic name. Saving a rename keeps the popover open so the user can configure filters, sort, and grouping next.
- Rename is optional. Canceling rename, pressing Escape, or closing the popover keeps the already-created view under its automatic name.
Save as…remains available for deriving a view from unsaved changes; direct creation does not replace or change that workflow.- When the active view has unsaved changes, direct creation is disabled and explains that the user must save or discard those changes first. No draft is silently cleared.
- A user may save at most 50 sidebar views per workspace. At 50 views, direct creation is disabled with a clear limit reason; backend validation remains authoritative.
- The filter popover fits narrow viewports without document-level horizontal overflow.
Workspace scope
Workspace sidebar task views owns saved-view scope and legacy migration. All collection, active-selection, draft, automatic naming, and limit behavior in this document applies per user and workspace.
Persistence and failure behavior
- A user settings record that omits sidebar-view fields resolves to one canonical
All tasksview and a matching active-view ID in every complete backend settings payload. The canonical view uses no filters,stateascending sort,repositorygrouping, and no collapsed groups. - The first edit to that canonical view persists its draft without requiring a prior create, rename, or save-as action and without surfacing a sidebar-view settings error.
- Replacing the workspace's saved views without an active-view field keeps the persisted
active ID referentially valid; an empty replacement resolves to the same
canonical
All tasksview. - Creation persists the new view and active-view selection immediately through existing backend-owned user settings. A successful create survives reload and is available on the user's other clients.
- A failed create restores the previous saved views, active view, and draft, then surfaces the existing sidebar-view sync error. It never leaves a selected view that is absent from persisted settings.
- Each new view owns independent filter, sort, and collapsed-group data; later changes to it cannot mutate the canonical default or another view by shared reference.
See ADR 0041 for backend ownership of portable user settings.
Scenarios
- GIVEN a new user whose stored settings omit sidebar-view fields, WHEN
Kandev returns the user's effective settings, THEN the response contains
exactly one canonical
All tasksview and its ID is the active-view ID. - GIVEN that new user's canonical
All tasksview, WHEN the user changes a filter, sort, or group before creating any other view, THEN the draft persists successfully and no sidebar-view error is shown. - GIVEN a scoped settings update replaces its views with an empty array and
omits its active-view field, THEN the effective settings retain the
canonical
All tasksview and matching active ID. - GIVEN fewer than 50 saved views and no unsaved draft, WHEN the user selects
New view, THEN a canonical default view is appended, activated immediately, and offered for focused rename. - GIVEN the active saved view has custom filters, sort, grouping, or collapsed groups, WHEN the user creates a new view, THEN the new view still uses the canonical defaults rather than cloning the active state.
- GIVEN saved views named
New viewandNew view 3, WHEN the user creates a new view, THEN its automatic name isNew view 2. - GIVEN a newly created view is in rename mode, WHEN the user cancels or closes the popover, THEN the view remains saved and active under its automatic name.
- GIVEN a newly created view is in rename mode, WHEN the user saves a nonblank name, THEN the name persists and the filter popover remains open for customization.
- GIVEN an unsaved sidebar-view draft, WHEN the user inspects direct creation on desktop or mobile, THEN
New viewis disabled and communicates that the draft must be saved or discarded first. - GIVEN 50 saved sidebar views, WHEN the user inspects direct creation on desktop or mobile, THEN
New viewis disabled and communicates the saved-view limit. - GIVEN the create settings write fails, WHEN retry handling finishes, THEN the prior sidebar-view state is restored and the sidebar-view error is shown.
- GIVEN a narrow mobile viewport, WHEN the task-switcher sheet opens, THEN
New viewis touch-reachable, the chip row still scrolls, and neither the bar nor popover causes horizontal page overflow.
Out of scope
- Migrating existing non-empty custom views or weakening active-view referential validation.
- Changing
Save as…, duplicate-view, rename, delete, or saved-view ordering semantics. - A pre-creation naming dialog, cancel-to-delete behavior, or delayed persistence until rename.
- Cloning the active view from the direct-create action.
- Backend schemas, new endpoints, or a new cross-tab conflict model for full-array user-settings writes.
- Broad sidebar visual redesign or animation dependencies.