feat(epic): add Working Model as required section for epics

Epics now require a "Working Model" section in their description,
in addition to "Success Criteria". This provides clear guidance on
HOW the epic will be executed:

- Owner role: Coordinator vs Implementer
- Delegation target: Polecats, crew, external
- Review process: Approval gates

Closes gt-0lp

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
diesel
2026-01-22 17:32:38 -08:00
committed by John Ogle
parent 6e82d1e2ee
commit 5483ecf437
4 changed files with 80 additions and 42 deletions

View File

@@ -24,3 +24,25 @@ Manage epics (large features composed of multiple issues).
4. Auto-close when done: `bd epic close-eligible`
Epics use parent-child dependencies to track subtasks.
## Epic Template Sections
Epics require two sections in their description:
### Success Criteria
Define high-level criteria for epic completion. What does "done" look like?
### Working Model
Define HOW the epic will be executed:
- **Owner role**: Is the assignee a Coordinator (decomposes and delegates) or Implementer (does hands-on work)?
- **Delegation target**: Who does the work? Polecats? Other crew? External contributors?
- **Review process**: Who approves completed subtasks? What gates must pass?
Example:
```markdown
## Working Model
- **Owner role**: Coordinator - decompose into subtasks and sling to polecats
- **Delegation target**: Polecat swarm (3-5 workers)
- **Review process**: Refinery MQ for each subtask, owner approval for epic closure
```

View File

@@ -560,6 +560,7 @@ func (t IssueType) RequiredSections() []RequiredSection {
case TypeEpic:
return []RequiredSection{
{Heading: "## Success Criteria", Hint: "Define high-level success criteria"},
{Heading: "## Working Model", Hint: "Owner role (coordinator/implementer), delegation target, review process"},
}
default:
// Chore and custom types have no required sections

View File

@@ -579,7 +579,7 @@ func TestIssueTypeRequiredSections(t *testing.T) {
{TypeBug, 2, "## Steps to Reproduce"},
{TypeFeature, 1, "## Acceptance Criteria"},
{TypeTask, 1, "## Acceptance Criteria"},
{TypeEpic, 1, "## Success Criteria"},
{TypeEpic, 2, "## Success Criteria"},
{TypeChore, 0, ""},
// Gas Town types are now custom and have no required sections
{IssueType("message"), 0, ""},

View File

@@ -97,19 +97,34 @@ Widget displays correctly`,
// Epic type tests
{
name: "epic with success criteria",
name: "epic with all sections",
issueType: types.TypeEpic,
description: `Big project
## Success Criteria
- Project ships
- Users happy`,
- Users happy
## Working Model
- Owner role: Coordinator
- Delegation target: Polecats
- Review process: Refinery MQ`,
wantErr: false,
},
{
name: "epic missing success criteria",
name: "epic missing all sections",
issueType: types.TypeEpic,
description: "Do everything",
wantErr: true,
wantMissing: 2,
},
{
name: "epic missing working model",
issueType: types.TypeEpic,
description: `Big project
## Success Criteria
- Project ships`,
wantErr: true,
wantMissing: 1,
},