Adds the data layer for per-item agent prompts. Markdown frontmatter gets an `agent_prompt:` block scalar that survives the importer round-trip (newlines preserved), and `resolveWorkflowPrompt()` walks task → epic → plan → built-in default returning both the resolved string and the source level. Walk is slug-based, not parent_id-based, because the importer leaves parent_id briefly null mid-transaction. tRPC `backlog.getWorkflowPrompt` returns ownOverride + effectivePrompt so future UI can render the override box + preview without two queries. `backlog.updateWorkflowPrompt` is owner/admin-gated (prompts change downstream Cursor/Claude behavior) and audit-logged on every write. UI deferred — apps/web doesn't have a backlog-item detail panel yet; the existing object-detail panel is for the objects table. Follow-up filed at Task-workflow-prompt-task-detail-ui.md. Co-authored-by: Cursor <cursoragent@cursor.com>
873 B
873 B
| kind | slug | title | plan_slug | status | priority | tenant_id | cursor_epic_id | updated_at |
|---|---|---|---|---|---|---|---|---|
| epic | <epic-slug> | <Epic title> | <plan-slug> | draft | P2 | <tenant-uuid-or-placeholder> | null | <ISO-8601> |
Epic objective
One paragraph: what milestone this epic delivers.
In scope / out of scope
In scope
- …
Out of scope
- …
Related tasks
| Task | Link |
|---|---|
./Task-<task-slug>.md |
Dependencies
- Depends on: …
- Blocks: …
Acceptance criteria
- Criterion 1
- Criterion 2
Proposed timeline
| Phase | Window | Notes |
|---|---|---|