Linear-style tasks as a portable cross-surface primitive (0161) - #32
Merged
Conversation
…nvergence tests - docs/specs/PAGE_TASK_RECONCILIATION.md: field authority, claim/archive algorithm, cross-page move orderings, deletion semantics, invariants - usePageTaskSync: claim-or-create (restore + update) for task ids unknown to the page, so cut/paste across pages moves the node instead of duplicating or losing it - tests: restore-on-re-add, cross-page move with two mounted syncs, seeded randomized reconciliation convergence Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…derer Adds 'task' to the canvas object kind unions (canvas-core + canvas), schema->kind ingestion mapping (drag a Task node onto the canvas), LOD/ minimap/vector-tile colors, default card size, and TaskNodeComponent: a source-backed renderer that binds the canonical Task node via useNode and renders the shared TaskCard (card/mini modes, tombstone + restore for archived tasks). Canvas nodes store only sourceNodeId + layout - task state is never duplicated into canvas properties. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- TaskSchema: add 'canvas' host relation (canvas-sourced tasks anchor to their canvas + checklist object id via anchorBlockId) - extract useTaskProjectionSync: shared reconciliation core (claim-or- create, archive on removal) parameterized by host surface; page sync is now a thin wrapper with an unchanged API - add useCanvasTaskSync (host: 'canvas', source: 'canvas') with tests covering canvas-hosted creation and page->canvas claims - checklist node: items carry taskId; ensureChecklistTaskIds migrates legacy item data on first render; new items mint task ids Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…list cell New database column type 'tasks' (cell value: Task node ids). Cells show live n/m progress + TaskChips (tombstones for archived tasks); the editor is an inline checklist: Enter creates a Task node (source 'database'), checkboxes write through to the canonical node, x unlinks without touching the node. Registered in the property handler registry, the add-column modal, ColumnType, and filter operators. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tegories - TaskViewSchema: saved views over Task nodes (list/board/triage/ calendar/timeline, LWW filters/sorts/groupBy, optional project scope) - ProjectSchema: thin Linear-style project (name/icon/status/lead/ targetDate + Y.Doc brief); Task gains a 'project' relation - Task status upgraded additively with triage/backlog/in-review; TASK_STATUS_CATEGORIES maps statuses to categories and isCompletedTaskStatus derives the checkbox - projection sync un-completes via category, tests for derivation Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- packages/views/tasks: TaskListGrouped (status groups, collapsible, focused-row contract) and TaskBoard (@dnd-kit columns; dropping a card writes status + derived completed + end-of-column fractional sortKey to the canonical Task node) - apps/web /tasks route + TasksView: All/My Tasks/Triage tabs, list and board modes, Enter-to-create quick capture, open-task navigates to the hosting page or canvas; sidebar entry added - component tests for grouping, collapse, intents, and board columns Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ngle-key task verbs - packages/plugins commands.ts: CommandRegistry with scopes (global / surface / task-focused, most-recent-wins conflicts), Linear-style single-key verbs suppressed in inputs/editors (allowInInput opt-in for modifier combos), and 'g t'-style chords with a pending-step timeout; 10 jsdom tests - WorkspaceCommands (mounted in root): installs the handler, g-chord navigation (g h/t/d/s), '?' shortcut-help overlay - GlobalSearch unified: Cmd+K is a registry command; palette now shows matching workspace commands with key hints, page results, and a quick create-task action - TasksView keyboard layer: j/k/arrows move row focus, x toggles, s/p open filterable status/priority mini-palettes, Enter opens, c focuses quick capture - all registered through the registry scopes Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- TaskSchema gains shortId (XN-142); task-identifiers.ts has parse/ format helpers, branch-name slugs, and per-device allocation blocks - hub TaskIdentifierService + POST /tasks/short-ids/allocate hands out monotonic non-overlapping number blocks per workspace prefix, so ids minted offline never collide - hub github-integration service: magic-word parsing, branch-name extraction, HMAC webhook signature verification, and pure event->action mapping (PR opened -> in-review, merged closes -> done, closed unmerged -> revert, drafts inert) behind POST /tasks/github/webhook with an applyAutomationActions seam - tasks surface: shortId rendered on rows/cards, Mod-Shift-. copies the task's git branch name - 18 new tests across data and hub Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ce test - extract pure groupTasksByStatus/sortTasksBySortKey shared by board and list; perf budgets in CI: group-by 0.8ms, palette filter 0.7ms, full 10k useTasks load through the bridge 16ms (bulk deterministic seed) - TaskGithubBadges on TaskRow/TaskCard: PR open/draft/merged/closed, review approved/changes-requested, CI passing/failing/pending; githubStateFromReferences derives state from reference metadata - hub: pull_request_review and check_suite events emit set-reference-state actions (PR lifecycle state mirrored on link) - validation: concurrent editor-title + board-status convergence test Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…urface primitive Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughAdds task schemas, task views, shared task UI, task projection sync, canvas task support, web task routing/commands, and hub-side identifier/webhook handling. ChangesTask surfaces and sync
Sequence Diagram(s)sequenceDiagram
participant GlobalSearch
participant CommandRegistry
participant TasksView
participant TaskProjectionSync
participant TaskSchema
GlobalSearch->>CommandRegistry: register search.open and run commands
GlobalSearch->>TaskSchema: create task from query
TasksView->>TaskProjectionSync: update task projections
TaskProjectionSync->>TaskSchema: create, restore, update, or remove tasks
Estimated code review effort🎯 5 (Critical) | ⏱️ ~90+ minutes Suggested labels
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
Contributor
|
Preview: https://xnet.fyi/pr/32/app/ |
Contributor
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
This was referenced Jun 12, 2026
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
0161: one canonical Task node that renders and edits natively across every surface — pages, canvases, databases, and a new Linear-style Tasks surface — with a keyboard-first command layer and GitHub integration.Phase 1 — Converge the primitive
docs/specs/PAGE_TASK_RECONCILIATION.md) + claim-or-create path inuseTaskProjectionSyncso cut/pasting tasks across pages/canvases moves the node instead of duplicating it (randomized convergence tests)TaskChip/TaskRow/TaskCardcomponents with tombstone + restore for archived/dangling referencestask(source-backed, live viauseNode); canvas checklists backed by Task nodes with legacy-data migrationtasksdatabase column type: inline checklist cell writing through to canonical nodesPhase 2 — Tasks surface
TaskView+Projectschemas;shortId+project+canvasrelations on Taskcompleted/tasksroute: All/Mine/Triage tabs, grouped list, @dnd-kit board updating status + sortKeyPhase 3 — Keyboard layer
CommandRegistryin packages/plugins: scopes, single-key verbs (suppressed in editors),g t-style chords?help overlayPhase 4 — GitHub integration
XN-142identifiers), copy-branch-name actionpull_request_review+check_suiteevents)73 new tests across data/react/views/ui/plugins/hub; exploration doc checked off (
0161_[x]).🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
j/k,xto toggle,s/pfor status/priority).?).Documentation