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>
52 lines
873 B
Markdown
52 lines
873 B
Markdown
---
|
|
kind: epic
|
|
slug: "<epic-slug>"
|
|
title: "<Epic title>"
|
|
plan_slug: "<plan-slug>"
|
|
status: draft
|
|
priority: P2
|
|
tenant_id: "<tenant-uuid-or-placeholder>"
|
|
cursor_epic_id: null
|
|
updated_at: "<ISO-8601>"
|
|
# Optional: default agent prompt for every task under this epic that doesn't
|
|
# set its own. Inherits from the plan if omitted.
|
|
# agent_prompt: |
|
|
# <Epic-level context: which codebase areas matter, which conventions to
|
|
# honor, which tests to run.>
|
|
---
|
|
|
|
# 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 |
|
|
|-------|--------|-------|
|
|
| | | |
|