- MCP create-backlog-item for natural language Plan/Epic/Task authoring - Worker non-code: optional worktree + per-harness allowlist + doc_review→published - Harness registry: harness_providers/role_harness_routes, WorkerAdapter (minimal|crewai|langgraph|remote-ag-ui), AG-UI POST /api/ag-ui, Settings → Harnesses with Test - Plans tree: backlog.listTree + createPlan/Epic/Task + Start→Convoy, web CRUD without CLI - Fleet: /fleet rollup across workspaces + SSE /api/fleet/events Decision: docs/decisions/2026-08-25-second-brain-os-pivot.md Convoy: .convoys/second-brain-os-v01 Co-authored-by: orchestrator
44 lines
2.4 KiB
Markdown
44 lines
2.4 KiB
Markdown
---
|
|
brief: 4
|
|
convoy: second-brain-os-v01
|
|
role: role-implementer
|
|
title: Plans tree — web CRUD for plans/ without CLI, Start→Convoy
|
|
status: ready
|
|
priority: P0
|
|
slice_dependencies: [1, 3]
|
|
recommended_model: qwen-coder
|
|
model_tier: local
|
|
---
|
|
|
|
# Brief 4 — Plans tree (1w) — Epic 10
|
|
|
|
## Goal
|
|
|
|
Web `Plans` is Obsidian-like tree — read/write `plans/Plan-*/Epic-*/Task-*.md` without `pnpm import:markdown-backlog` CLI; click `Start → Convoy`.
|
|
|
|
## Files
|
|
|
|
- `apps/web/server/routers/backlog.ts:29` — add `listTree` (returns hierarchical `Plan → Epic → Task` with `status/priority/repoPath`), `createPlan/createEpic/createTask` (`slug/title/bodyMarkdown/agent_prompt` → writes `.md` via `join(repoRoot, repoPath)` atomically `.tmp→rename`, then direct DB upsert or `syncMarkdownBacklogScan`), `updateTaskBody`, `getBacklogItem` already exists. Enforce slug `^[a-z0-9-]+$`, `workspace_id` fence, `updated_at` bump.
|
|
- `apps/web/app/(app)/[workspaceSlug]/plans/page.tsx` NEW — tree component (collapsible `Radix Collapsible` + `ScrollArea`), status chips, search, `New Plan/Epic/Task` dialogs, `Start` button → calls `convoys.create` `apps/web/server/routers/convoys.ts:173` with `planSlug/epicSlug`.
|
|
- Reuse `resolveWorkflowPrompt` preview in task detail drawer.
|
|
- `docs/Glossary.md:50` hierarchy respected; `config/CursorSync.md:33` export allow-list preserved (web writes go through same export path).
|
|
|
|
## Acceptance
|
|
|
|
- `Plans` page shows `Plan-clarity → Epic-ai-tags → Task-local-tag-prompt [ready]` from DB without CLI after DB seed.
|
|
- `New Task` dialog `title: Research prompt` `slug: research-prompt` creates `plans/Plan-clarity/Epic-ai-tags/Task-research-prompt.md` on disk + row in `markdown_backlog_items` visible after refresh without manual import.
|
|
- `Start` on a `ready` task creates convoy `clarity-research-prompt` at `draft` and links `briefFiles: [repoPath]`.
|
|
- `MCP create-backlog-item` brief 1 and web create produce same file format (round-trip parse test).
|
|
- `pnpm lint && pnpm type-check` pass.
|
|
|
|
## Prompt
|
|
|
|
You are `role-implementer` brief 4. Read `plans/README.md`, `packages/database/src/markdown-backlog/parse.ts`, `apps/web/server/routers/backlog.ts`, `docs/decisions/2026-08-25-second-brain-os-pivot.md`. Follow existing tRPC patterns `ai-models.ts`. Keep UI to `components/ui/*` + Tailwind.
|
|
|
|
## Depends
|
|
|
|
Briefs 1,3 — needs MCP tool shape + harness registry for Start.
|
|
|
|
## Out of scope
|
|
|
|
Full Notion drag-n-drop, breadcrumb perf — keep tree simple.
|