Skip to content

feat: add Markdown-native project workspace - #72

Draft
cnjack wants to merge 1 commit into
mainfrom
codex/project-workspace
Draft

feat: add Markdown-native project workspace#72
cnjack wants to merge 1 commit into
mainfrom
codex/project-workspace

Conversation

@cnjack

@cnjack cnjack commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary

Turns one .board plus its Markdown Cards into a professional project workspace without introducing a second task database or a .project manifest.

  • adds Backlog and Gantt projections, My Work, Inbox, reminders, mentions, archive recovery, project metadata, persistent personal views, and a context-preserving Card detail sheet;
  • adds field-level Activity backed by typed domain events with Actor / Client / Token provenance;
  • expands Kanban MCP with delete, labels, attachments, complete relations, bulk updates, and status management for both unpinned and board-pinned endpoints;
  • keeps Desktop, Web, and board-react on the same shared Card/UI model while preserving platform-specific persistence and permission adapters;
  • adds a transactionally maintained cloud Board-membership index so Board snapshots do not scan every Markdown body in a cloud workspace.

Impact matrix

Area Decision Reason
Desktop app Yes Local vault entry point, filesystem persistence, personal view state, stale-snapshot write lockout, and full-document navigation.
Web app Yes Cloud collaboration, members/roles, viewer read-only, Activity, mentions, and indexed Board snapshots.
Shared model/utilities Yes Project metadata, Card planning fields, personal state, projection transforms, validation, and Activity types are cross-surface.
Shared UI Yes Projection switcher, Backlog, Gantt, work scopes, batch toolbar, settings, and detail sheet stay props-in/callbacks-out.
Web service/API Yes New Activity and Board Card snapshot contracts, durable events, provenance, membership index, and migrations 0030/0031.
packages/board-react Yes Public types/state/read-only behavior, editable detail, source/dist/example/README, collision-safe creation, and embed tests change.
CLI/MCP MCP Yes; CLI No MCP receives the requested complete Card/status surface. Existing local Markdown commands preserve fields; no new CLI binary is claimed.
In-app Help Yes EN/ZH workflows and AI/tool catalog are updated.
Other docs Yes Root README, API docs, package docs, screenshots, and implementation notes are updated.
Release/deployment Build Yes; deploy No Desktop/Web/package builds are verified. No installer, image, npm release, or production migration is published by this PR.

Full design, acceptance criteria, contracts, and release notes: docs/implementation-notes/project-workspace.md.

Visuals

Gantt

Gantt

Context-preserving Card detail and audited Activity

Card detail

Mobile Inbox

Mobile Inbox

Verification

  • npm run test:unit — 78 passed
  • shared Board fixture E2E — 27 passed
  • Desktop App E2E — 33 passed
  • Web dashboard/Board E2E — 33 passed
  • packages/board-react: 21 unit + 19 embed E2E passed; production build/dist rebuild passed
  • Web service feature/API suites — 150 passed
  • services/jtype-core — 38 passed
  • Tauri backend — 2 passed
  • Desktop frontend, Web frontend, and board package production builds passed
  • Desktop/Web Lingui catalogs extracted and compiled
  • git diff --check passed

Migration notes

0030_project_activity extends kanban_events, adds board_document_memberships, and extends document-version provenance with mcp. 0031_board_membership_rollout_bridge adds the per-workspace reconciliation watermark and clock index used during rolling upgrades.

  • It backfills event IDs and document IDs, creates columns/indexes, and alters an enum; large installations should plan for scans and DDL metadata locks.
  • Before recording v31, the canonical Rust frontmatter parser performs one per-workspace, 250-row-batched membership rebuild while holding the same sync_clock lock used by writers, then records the clock as a watermark. Legacy instances that write later receive a higher clock and are repaired incrementally on the next Board snapshot. This requires no trigger, SUPER privilege, SQL YAML parser, or instantaneous fleet restart.
  • Legacy delete code can take document and workspace locks in the opposite order. Projection scans therefore preflight document rows with MySQL 8 FOR UPDATE NOWAIT and retry only native 1213/3572 conflicts (up to four attempts) or 1205 timeouts (one retry), always as a fresh whole transaction; other database errors remain fatal.
  • Down migration is intentionally lossy for provenance: mcp sources are mapped to web before narrowing the enum.
  • The migration has not been deployed by this PR.

Deliberate boundaries

  • No .project manifest until one project genuinely owns multiple Boards.
  • No second Card/task table; Markdown remains authoritative and the membership table is only a transactional projection.
  • Conflict-document commit and conflict-row resolution remain two transactions; same-content retries are idempotent and documented.
  • New Japanese/Korean project-workspace strings currently fall back to English; EN/ZH are complete.
  • Checked-in board-react dist is rebuilt, but package version 0.1.2 is not published here.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: bc9b46d2-c9a8-4b17-8fc2-c69e6720c5d4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant