feat(tasks): Linear-grade tasks UI & UX (0198) - #167
Merged
Conversation
Changelog: Add exploration 0198 mapping the current tasks surface against Linear's navigation/view/render patterns and proposing a 4-phase plan (render+density, interaction parity, IA+detail slide-over, model extensions). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Changelog: Tasks list gains sticky group headers with count badges and a hover "+ add", a compact/comfortable density toggle, multi-select plumbing on TaskRow, and an opt-in "Linear" violet accent theme variant (Settings → Appearance → Accent). Implements Phase 1 of exploration 0198. - TaskRow: density (comfortable/compact) + left-edge selection checkbox - TaskListGrouped: sticky headers, count badge, group "+ add", density, selection passthrough - tokens.css/ThemeProvider: opt-in `data-variant='linear'` violet accent - settings: Appearance → Accent (Monochrome / Linear) - TasksView: density toggle, create-in-group Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Changelog: The Tasks surface gains Linear-style multi-select with a floating bulk-action bar, Space-to-peek, and a fuller keyboard model. `x` now selects (Shift-click range, ⌘A all, Esc clear); bulk status/priority/assign/delete apply in one optimistic batch. New verbs: a assign, i assign-me, l label, r rename, ⌘. copy id. Implements Phase 2 of exploration 0198. - CommandRegistry.commandsForScopes() helper (+ test) - TaskBulkBar + TaskPeek components (+ tests) - TaskMiniPalette generalized to per-option icons (assignee/label pickers) - TasksView: selection state, bulk handlers (mutate batch / remove), keyboard verbs, peek Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Changelog: Tasks gains a Linear-style detail slide-over (the list stays visible behind it), a filter bar (F) with Property: Value chips, and a Display Options popover (V) for grouping (status/priority/assignee/none), ordering, density, and show-completed — persisted locally. Implements the view-level half of Phase 3 of exploration 0198. - grouping.ts: generic buildTaskGroups + orderTasks (+ tests) - TaskListGrouped: renders any groupBy with the right header glyph - TaskFilterBar + task-filter (pure, tested) and TaskDisplayOptions (+ tests) - TasksView: detail slide-over (Sheet), filter/display bar, f/v shortcuts, show-completed, localStorage-persisted display settings Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Changelog: The Tasks surface gains a Linear-style left sub-nav (Views: All Issues / My Issues / Triage, plus the Projects list) on desktop; the top-bar tabs remain on compact widths. Completes the IA half of Phase 3 of exploration 0198. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Changelog: Mark exploration 0198 implemented (Phases 1–3) and record the browser-verified validation results. Phase 4 (estimate/relations/cycles) and a few Phase 3 sub-items (node-backed SavedView, @xnetjs/views extraction, deep mobile) remain explicit follow-ups. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
🖼️ UI changes in this PRScreensAuto-captured by CI · run. Informational — not a blocking check. |
Contributor
|
Preview removed for PR #167. |
…caffold test Changelog: none (CI/test hygiene). - apps/web task-filter.test.ts: apply Prettier formatting (CI format-check). - packages/cli connector.test.ts: the scaffolder emits a LICENSE (marketplace requirement, #157) but this expected-file list was stale and red on main already — align it with plugin.test.ts, which already expects LICENSE. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
crs48
added a commit
that referenced
this pull request
Jun 18, 2026
## What Backfills the changelog so it reflects what's live on `main`. The per-PR fragment system (exploration 0197) was current through PR #163 (PR #178 backfilled #151/#153/#156/#157/#160/#163), but the recent **0198/0199 batch** and a couple of stragglers shipped without entries. This adds 7 fragments, with prose lifted from each PR's own `## Changelog` block where present. | PR | Entry | Tags | |---|---|---| | #143 | AI chat that knows your workspace | `ai` | | #167 | Linear-grade Tasks | `tasks` `app` | | #169 | Cleaner page editor typography | `editor` | | #170 | Bring your Slack data into xNet | `plugins` `platform` | | #171 | Smoother, more consistent motion | `app` | | #173 | Airtable-grade database grids | `app` | | #174 | A redesigned chat & channels experience | `app` | ## Deliberately excluded - **In-editor AI (#154 / #158)** — shipped the transform engine + diff/approval logic, but both PRs state the `/ai` UI wiring into the running app is **deferred**, so it isn't user-visible yet. An entry would overclaim. - **Slack (#170)** — entry scoped to the migration connector + compatibility layer (genuinely live); avoids claiming the webhook/slash-command hub endpoints work, since they're generic-over-an-injected-sink and not mounted in a running server yet. - Pure infra/ops/docs PRs (cloud M1/M2, CI, runbooks) — not user-facing. ## Verification - `validate-changelog.ts` → **26 fragments valid** (19 existing + 7 new) - `prettier --check` on all new files → clean - Newest-first ordering confirmed — the 7 entries slot in at the top ## Changelog <!-- This PR only adds changelog fragments for already-merged work; it ships no user-facing change of its own. --> 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Implements exploration 0198 — make the Tasks surface look and behave a lot more like Linear (navigate / view / render), without breaking xNet's two load-bearing opinions: tasks stay one canonical node projected across surfaces (0161), and chrome stays monochrome by default (0166).
Changelog
The Tasks surface (
/tasks) gets a Linear-grade overhaul:xselects, Shift-click range, ⌘A, Esc clears) with a floating bulk-action bar (status / priority / assign-me / delete in one optimistic batch), Space-to-peek, and verbsaassign ·iassign-me ·llabel ·rrename · ⌘. copy id.F) with Property: Value chips, and a Display Options popover (V) for grouping (status / priority / assignee / none), ordering, density, and show-completed — persisted locally.What's verified
typecheck(ui / views / web / plugins) ✓ ·eslint✓ ·prettier --check✓buildTaskGroups/orderTasks,task-filter,commandsForScopes; new components:TaskBulkBar,TaskPeek,TaskDisplayOptions,TaskFilterBar, grouped-list rendering).editor-uxPlaywright spec references the tasks surface, so no e2e selectors broke.Deferred (explicit follow-ups, per the doc)
estimate, issue relations (blocks/blocked-by/related/duplicate), Cycles, roadmap.SavedView(today:localStorage),@xnetjs/viewsextraction of the issue-grid primitives (ship-tasks-first), deep mobile parity, and the [0172] UTC due-date fix.🤖 Generated with Claude Code