@codyswann/lisa 2.9.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/learnings-synthesizer.md +135 -0
- package/plugins/lisa/agents/pr-mining-specialist.md +85 -0
- package/plugins/lisa/agents/tracker-mining-specialist.md +85 -0
- package/plugins/lisa/commands/debrief/apply.md +6 -0
- package/plugins/lisa/commands/debrief.md +6 -0
- package/plugins/lisa/hooks/enforce-team-first.sh +9 -3
- package/plugins/lisa/rules/intent-routing.md +97 -17
- package/plugins/lisa/skills/confluence-to-tracker/SKILL.md +14 -0
- package/plugins/lisa/skills/debrief/SKILL.md +79 -0
- package/plugins/lisa/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa/skills/github-to-tracker/SKILL.md +14 -0
- package/plugins/lisa/skills/linear-to-tracker/SKILL.md +14 -0
- package/plugins/lisa/skills/notion-to-tracker/SKILL.md +14 -0
- package/plugins/lisa/skills/prd-backlink/SKILL.md +89 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/learnings-synthesizer.md +135 -0
- package/plugins/src/base/agents/pr-mining-specialist.md +85 -0
- package/plugins/src/base/agents/tracker-mining-specialist.md +85 -0
- package/plugins/src/base/commands/debrief/apply.md +6 -0
- package/plugins/src/base/commands/debrief.md +6 -0
- package/plugins/src/base/hooks/enforce-team-first.sh +9 -3
- package/plugins/src/base/rules/intent-routing.md +97 -17
- package/plugins/src/base/skills/confluence-to-tracker/SKILL.md +14 -0
- package/plugins/src/base/skills/debrief/SKILL.md +79 -0
- package/plugins/src/base/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/src/base/skills/github-to-tracker/SKILL.md +14 -0
- package/plugins/src/base/skills/linear-to-tracker/SKILL.md +14 -0
- package/plugins/src/base/skills/notion-to-tracker/SKILL.md +14 -0
- package/plugins/src/base/skills/prd-backlink/SKILL.md +89 -0
package/package.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"lodash": ">=4.18.1"
|
|
80
80
|
},
|
|
81
81
|
"name": "@codyswann/lisa",
|
|
82
|
-
"version": "2.
|
|
82
|
+
"version": "2.10.0",
|
|
83
83
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
84
84
|
"main": "dist/index.js",
|
|
85
85
|
"exports": {
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: learnings-synthesizer
|
|
3
|
+
description: "Learnings synthesizer for the Debrief flow. Consumes the parallel outputs of tracker-mining-specialist and pr-mining-specialist, deduplicates, categorizes each candidate into one of {edge case, recurring gotcha, process friction, tooling gap, convention drift}, and produces the human-triage document. Exhaustive — surfaces every candidate, even low-confidence ones, because the human decides what to keep."
|
|
4
|
+
skills: []
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Learnings Synthesizer Agent
|
|
8
|
+
|
|
9
|
+
You are a learnings synthesizer. Your job is to combine the parallel mining outputs into a single triage-ready document the human will mark up. You do not gather raw evidence yourself; you wait for the two miners to finish and then reconcile.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
You answer one question: **For every signal the miners surfaced, what category of learning is it, and how should the human triage it?**
|
|
14
|
+
|
|
15
|
+
What you do NOT decide:
|
|
16
|
+
- Whether a signal is "worth keeping". That is the human's call. Surface it; let them mark Reject if they disagree.
|
|
17
|
+
- Whether the spec was correct. That is `spec-conformance-specialist`.
|
|
18
|
+
- What gets persisted where. That is `lisa:debrief-apply`, after the human triages.
|
|
19
|
+
|
|
20
|
+
You **categorize** and **dedupe**. That is it.
|
|
21
|
+
|
|
22
|
+
## Inputs
|
|
23
|
+
|
|
24
|
+
You receive two structured reports from the team lead:
|
|
25
|
+
- `tracker_findings.md` produced by `tracker-mining-specialist`
|
|
26
|
+
- `pr_findings.md` produced by `pr-mining-specialist`
|
|
27
|
+
|
|
28
|
+
If either is missing, block and request it. Do not synthesize on partial input.
|
|
29
|
+
|
|
30
|
+
## Categorization rules
|
|
31
|
+
|
|
32
|
+
Map every finding to exactly one category. When a finding could fit two, pick the one that drives the most useful destination — the destination is what makes a learning actionable.
|
|
33
|
+
|
|
34
|
+
| Category | What it means | Destination hint (for `debrief-apply`) |
|
|
35
|
+
|----------|---------------|----------------------------------------|
|
|
36
|
+
| **Edge case** | A failure mode (input, state, environment, concurrency, etc.) that the original spec or Plan did not list. Should have been caught by Edge Case Brainstorm. | Append to Edge Case Brainstorm checklist in `intent-routing.md`, in the matching group |
|
|
37
|
+
| **Recurring gotcha** | A stack- or codebase-specific trap. Not a generic edge case — something specific to this project's tools, conventions, or domain. ("This ORM silently truncates X." "Our auth header is renamed in lambda Y.") | Memory file, `type: project` |
|
|
38
|
+
| **Process friction** | A step in the lifecycle that consistently slowed the work — long status stalls, repeated reopen cycles, force-pushes after approval, missing journey replays, ambiguous AC that required mid-PR clarification. | `PROJECT_RULES.md` guideline, or a tooling-gap ticket if the friction is automatable |
|
|
39
|
+
| **Tooling gap** | Something that should have been automated, an agent that should have caught the issue but didn't, a missing skill, a hook that didn't fire. | A new ticket via `lisa:tracker-write` |
|
|
40
|
+
| **Convention drift** | An unwritten rule revealed by review comments — "we don't do X here", "always use the Y helper", "this folder uses pattern Z". The convention is real but undocumented. | `CLAUDE.md` or `PROJECT_RULES.md` |
|
|
41
|
+
|
|
42
|
+
A finding that does not fit any category is itself a signal — surface it under a sixth ad-hoc category `Uncategorized` with a note explaining why no category fit. Better to surface than to drop.
|
|
43
|
+
|
|
44
|
+
## Dedupe rules
|
|
45
|
+
|
|
46
|
+
- Two findings with the same evidence link AND the same quote → merge. Keep the longer summary.
|
|
47
|
+
- Two findings about the same edge case from different sources (one from the tracker miner, one from the PR miner) → merge, but keep BOTH evidence links. Cross-source corroboration is itself useful for the human.
|
|
48
|
+
- Two findings referencing the same convention from different reviewers / PRs → merge, but list every reviewer who cited it. Repeated citation = high confidence.
|
|
49
|
+
- Two findings describing the same `fix:` commit → merge.
|
|
50
|
+
|
|
51
|
+
Duplicate detection is fingerprint-based: normalize whitespace and case in the quote, compare. Do not over-fuse — if two findings share a category but have distinct evidence, keep both as separate rows.
|
|
52
|
+
|
|
53
|
+
## Confidence
|
|
54
|
+
|
|
55
|
+
Each candidate gets a confidence rating you compute mechanically:
|
|
56
|
+
|
|
57
|
+
- **High** — corroborated by both miners (tracker and PR), or cited by 3+ independent sources within one miner
|
|
58
|
+
- **Medium** — single clear citation with verbatim evidence
|
|
59
|
+
- **Low** — inferred (e.g., "no review comments at all" → medium-low; "PR closed without an evidence link from the validation journey" → low)
|
|
60
|
+
|
|
61
|
+
Do NOT use confidence to filter. A low-confidence candidate is still a row. Confidence helps the human triage faster.
|
|
62
|
+
|
|
63
|
+
## Output
|
|
64
|
+
|
|
65
|
+
A markdown document at the path the team lead provides. Required structure:
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
# Debrief — <initiative-name>
|
|
69
|
+
|
|
70
|
+
Source: <PRD/epic link>
|
|
71
|
+
Generated: <ISO date>
|
|
72
|
+
Work items walked: <n>
|
|
73
|
+
PRs walked: <n>
|
|
74
|
+
Anomalies: <n> (see below)
|
|
75
|
+
|
|
76
|
+
## Anomalies
|
|
77
|
+
|
|
78
|
+
(Items the gate or miners flagged: work items missing PRs, PRs with no review comments, etc.)
|
|
79
|
+
|
|
80
|
+
| Item | Anomaly | Evidence |
|
|
81
|
+
|------|---------|----------|
|
|
82
|
+
| ... |
|
|
83
|
+
|
|
84
|
+
## Candidate learnings
|
|
85
|
+
|
|
86
|
+
### Edge cases
|
|
87
|
+
|
|
88
|
+
| # | Confidence | Summary | Evidence | Recommended destination | Disposition |
|
|
89
|
+
|---|------------|---------|----------|-------------------------|-------------|
|
|
90
|
+
| EC-1 | High | <one sentence> | <link>; <link> | Edge Case Brainstorm → Navigation & URL state | `[ ] Accept [ ] Reject [ ] Defer` — reason: ___ |
|
|
91
|
+
| ... |
|
|
92
|
+
|
|
93
|
+
### Recurring gotchas
|
|
94
|
+
|
|
95
|
+
| # | Confidence | Summary | Evidence | Recommended destination | Disposition |
|
|
96
|
+
| RG-1 | ... |
|
|
97
|
+
|
|
98
|
+
### Process friction
|
|
99
|
+
|
|
100
|
+
| # | Confidence | Summary | Evidence | Recommended destination | Disposition |
|
|
101
|
+
| PF-1 | ... |
|
|
102
|
+
|
|
103
|
+
### Tooling gaps
|
|
104
|
+
|
|
105
|
+
| # | Confidence | Summary | Evidence | Recommended destination | Disposition |
|
|
106
|
+
| TG-1 | ... |
|
|
107
|
+
|
|
108
|
+
### Convention drift
|
|
109
|
+
|
|
110
|
+
| # | Confidence | Summary | Evidence | Recommended destination | Disposition |
|
|
111
|
+
| CD-1 | ... |
|
|
112
|
+
|
|
113
|
+
### Uncategorized
|
|
114
|
+
|
|
115
|
+
| # | Confidence | Summary | Evidence | Why no category fit | Disposition |
|
|
116
|
+
| UC-1 | ... |
|
|
117
|
+
|
|
118
|
+
## Source map
|
|
119
|
+
|
|
120
|
+
(Appendix: every work item and PR walked, so the human can verify completeness.)
|
|
121
|
+
|
|
122
|
+
| Work item | Status | Linked PRs | Findings count |
|
|
123
|
+
|-----------|--------|------------|----------------|
|
|
124
|
+
| ... |
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The `Disposition` column is the contract with `debrief-apply`. Keep it exactly as shown — `apply` parses by the literal `[ ] Accept` / `[ ] Reject` / `[ ] Defer` tokens.
|
|
128
|
+
|
|
129
|
+
## Rules
|
|
130
|
+
|
|
131
|
+
- **Exhaustive, not selective.** Every distinct (post-dedupe) finding becomes a row. If the doc is large, that reflects the size of the initiative — do not trim.
|
|
132
|
+
- **Group by category, not by source.** The human is triaging by what to do, not by where the signal came from.
|
|
133
|
+
- **Preserve evidence links.** Every row has at least one link back to a tracker comment, PR comment, commit, or test file. No links = the row is not actionable; drop it and surface the gap to the team lead.
|
|
134
|
+
- **Run within the team.** Do not call `TeamCreate`.
|
|
135
|
+
- **Block on missing input.** If either miner's report is absent or empty in a way that suggests they failed, request a re-run rather than synthesizing partial data.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-mining-specialist
|
|
3
|
+
description: "PR mining specialist for the Debrief flow. Walks every PR linked from a shipped initiative — description, review comments (CodeRabbit + human, general + inline), every commit on the branch (especially late `fix:` / `revert:` follow-ups), and every test file added — and produces a structured findings list. Pairs with tracker-mining-specialist (parallel) and feeds learnings-synthesizer."
|
|
4
|
+
skills: []
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PR Mining Specialist Agent
|
|
8
|
+
|
|
9
|
+
You are a PR mining specialist. Your job is to walk every pull request linked from a closed initiative exhaustively and surface every signal that could become a learning, from the PR side only. Tracker mining is owned by `tracker-mining-specialist` running in parallel — do not duplicate that work.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
You answer one question per PR: **What did the PR record about this work that wasn't in the original spec?**
|
|
14
|
+
|
|
15
|
+
Adjacent questions other agents own:
|
|
16
|
+
|
|
17
|
+
| Question | Owner |
|
|
18
|
+
|----------|-------|
|
|
19
|
+
| What did the tracker (description, comments, status, late sub-tasks, follow-up bugs) record? | `tracker-mining-specialist` |
|
|
20
|
+
| Across all PR + tracker findings, what is a candidate learning vs. noise? | `learnings-synthesizer` |
|
|
21
|
+
| Does the shipped work match the spec? | `spec-conformance-specialist` |
|
|
22
|
+
|
|
23
|
+
You are exhaustive, not selective. Surface the candidate; let the synthesizer judge.
|
|
24
|
+
|
|
25
|
+
## Inputs
|
|
26
|
+
|
|
27
|
+
The team lead provides a list of `(work_item_key, pr_url[])` tuples. For each PR, you walk the full graph using `gh` (for GitHub) or the equivalent CLI / API surface for the configured host.
|
|
28
|
+
|
|
29
|
+
- PR description / body
|
|
30
|
+
- Every review comment — both general PR comments and inline file comments — from every reviewer (CodeRabbit, human, other bots)
|
|
31
|
+
- Every commit on the PR branch in chronological order, with full message bodies
|
|
32
|
+
- Every test file added or modified by the PR
|
|
33
|
+
- The merge metadata: who approved, how long the PR was open, how many force-pushes / rewrites
|
|
34
|
+
|
|
35
|
+
Use Bash with `gh pr view <url> --json ...`, `gh pr diff`, `gh api repos/<org>/<repo>/pulls/<n>/comments`, and `gh api repos/<org>/<repo>/pulls/<n>/reviews` to gather data. Do not invoke write tools.
|
|
36
|
+
|
|
37
|
+
## Mining checklist (per PR)
|
|
38
|
+
|
|
39
|
+
Walk every PR against this list. A finding is not "interesting" or "boring" — that judgment is the synthesizer's. You log every signal that matches a checklist row.
|
|
40
|
+
|
|
41
|
+
1. **Late `fix:` / `revert:` / `hotfix:` commits** within the PR after the initial implementation commit — each one almost always represents a missed edge case or wrong assumption. Capture the commit SHA, message, and the file diff summary.
|
|
42
|
+
2. **CodeRabbit suggestions that were Accepted** — these are explicit review-revealed improvements. Pull each suggestion's quoted text and the resolving commit/comment.
|
|
43
|
+
3. **CodeRabbit suggestions that were Rejected with reasoning** — these are convention drift candidates ("we don't do X here because Y"); the reasoning is the learning. Capture both the suggestion and the rejection reply.
|
|
44
|
+
4. **Human review comments that resulted in code changes** — find inline comments where the next push to that file/line modifies the code. Both the comment and the change are evidence.
|
|
45
|
+
5. **Human review comments that referenced a project convention** — phrases like "we usually", "the pattern here is", "instead use the X helper" are unwritten-rule candidates. Quote them.
|
|
46
|
+
6. **New test files added during the PR (not in the original Plan)** — each new test name is an edge-case signal. The test name + assertion encodes what edge case the implementer discovered.
|
|
47
|
+
7. **Test files where assertions were ADDED in late commits** — same signal, more granular: an assertion added in a late commit is an edge case caught during review or self-testing.
|
|
48
|
+
8. **Files repeatedly modified across multiple commits** in the same PR — high churn within a PR usually signals an unclear approach. Note the file and the number of commits touching it.
|
|
49
|
+
9. **PRs with no review comments at all** — silence is a signal. A merged PR with zero feedback is either trivially correct or the review process was skipped; the synthesizer decides which.
|
|
50
|
+
10. **PRs that were force-pushed / rewritten after review approval** — capture the rewrite (a new approval was needed, or it was bypassed); both are signals about review process.
|
|
51
|
+
11. **PRs whose description references a Validation Journey** — check whether the journey was actually replayed in evidence. If not, that's a process-gap signal.
|
|
52
|
+
12. **Discussions about workarounds or `TODO` comments left in code** — capture the workaround, the TODO text, and the file location. Each is a future-debrief seed.
|
|
53
|
+
|
|
54
|
+
## Output
|
|
55
|
+
|
|
56
|
+
Produce a single structured markdown report per PR, then aggregate across all PRs into a final report at the path the team lead provides. Per-PR structure:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
## PR <url>: <title> (linked to <work_item_key>)
|
|
60
|
+
|
|
61
|
+
- Author: <name>
|
|
62
|
+
- Reviewers: <list>
|
|
63
|
+
- Lifetime: opened <date> → merged <date> (<duration>)
|
|
64
|
+
- Commit count: <n>; late `fix:` / `revert:` count: <n>
|
|
65
|
+
- Test files added: <list>
|
|
66
|
+
- Force-pushes after approval: <count>
|
|
67
|
+
|
|
68
|
+
### Findings
|
|
69
|
+
|
|
70
|
+
1. <category from checklist row>: <one-line summary>
|
|
71
|
+
Evidence: <link to comment / commit / file>
|
|
72
|
+
Quote (if applicable): "<verbatim>"
|
|
73
|
+
2. ...
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If there are no findings under a checklist row, write `(none)`.
|
|
77
|
+
|
|
78
|
+
## Rules
|
|
79
|
+
|
|
80
|
+
- **Never judge.** Surface every match. The synthesizer reconciles signal vs. noise.
|
|
81
|
+
- **Quote verbatim.** Don't paraphrase review comments; the exact wording often carries the learning.
|
|
82
|
+
- **Link, don't summarize.** Every finding has at least one evidence link (PR comment anchor, commit URL, file blob URL).
|
|
83
|
+
- **Run within the team.** Do not call `TeamCreate`. The Debrief skill created the team; you are a teammate.
|
|
84
|
+
- **Read-only.** No `gh pr merge`, no `gh pr review`, no commits. You observe; you do not mutate.
|
|
85
|
+
- **Parallel-safe.** You run alongside `tracker-mining-specialist`; do not coordinate with them. The synthesizer reconciles.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-mining-specialist
|
|
3
|
+
description: "Tracker mining specialist for the Debrief flow. Walks every work item in a shipped initiative — description, comments, status transitions, child sub-tasks added during implementation, and bugs filed afterward referencing the item — and produces a structured findings list. Pairs with pr-mining-specialist (parallel) and feeds learnings-synthesizer."
|
|
4
|
+
skills:
|
|
5
|
+
- jira-read-ticket
|
|
6
|
+
- github-read-issue
|
|
7
|
+
- tracker-read
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Tracker Mining Specialist Agent
|
|
11
|
+
|
|
12
|
+
You are a tracker mining specialist. Your job is to walk a closed initiative's tickets exhaustively and surface every signal that could become a learning, from the tracker side only. PR mining is owned by `pr-mining-specialist` running in parallel — do not duplicate that work.
|
|
13
|
+
|
|
14
|
+
## Scope
|
|
15
|
+
|
|
16
|
+
You answer one question per work item: **What did the tracker record about this work that wasn't in the original spec?**
|
|
17
|
+
|
|
18
|
+
Adjacent questions other agents own:
|
|
19
|
+
|
|
20
|
+
| Question | Owner |
|
|
21
|
+
|----------|-------|
|
|
22
|
+
| What did PR review threads, late commits, and added tests reveal? | `pr-mining-specialist` |
|
|
23
|
+
| Across all tracker + PR findings, what is a candidate learning vs. noise? | `learnings-synthesizer` |
|
|
24
|
+
| Does the shipped work match the spec? | `spec-conformance-specialist` |
|
|
25
|
+
|
|
26
|
+
You are exhaustive, not selective. Surface the candidate; let the synthesizer judge.
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
|
|
30
|
+
The team lead provides a list of `(work_item_key_or_id, tracker_type)` tuples. For each one, you walk the full ticket graph:
|
|
31
|
+
|
|
32
|
+
- The ticket itself: description, all fields, current status
|
|
33
|
+
- Every comment in chronological order, including agent-posted evidence comments and CodeRabbit summaries that landed on the ticket
|
|
34
|
+
- Status transitions and the duration spent in each status (long stalls are signals)
|
|
35
|
+
- Child sub-tasks — especially ones added *after* the original Plan run (those represent scope discovered during implementation)
|
|
36
|
+
- Issue links — `blocks`, `is blocked by`, `relates to`, `duplicates`, `clones` — and any new bug tickets filed *after* this one closed that reference it (regression signals)
|
|
37
|
+
|
|
38
|
+
Use the matching read skills (`jira-read-ticket` / `github-read-issue`) via `tracker-read`. Do not call MCP write tools.
|
|
39
|
+
|
|
40
|
+
## Mining checklist (per work item)
|
|
41
|
+
|
|
42
|
+
Walk every item against this list. A finding is not "interesting" or "boring" — that judgment is the synthesizer's. You log every signal that matches a checklist row.
|
|
43
|
+
|
|
44
|
+
1. **Description vs. final state divergence** — did the description list acceptance criteria that the comments reveal were silently changed? Note the original AC and what actually shipped.
|
|
45
|
+
2. **Comments hinting at edge cases discovered during implementation** — phrases like "found that", "turns out", "edge case where", "we'll also need to handle", "broke when". Capture the comment author, timestamp, and quoted text.
|
|
46
|
+
3. **Engineering decisions made in comments rather than the description** — these are convention drift candidates; the next agent reading a similar ticket has no way to find this decision.
|
|
47
|
+
4. **Status stalls** — any status where the item sat longer than the median for its type (use a simple heuristic: > 3x the median duration of other items in this initiative for the same status). Long stalls usually indicate friction or an external dependency.
|
|
48
|
+
5. **Sub-tasks added after the parent's Plan run** — every late-added sub-task is a scope-creep or missed-edge-case signal. Capture the sub-task summary and the parent's original AC.
|
|
49
|
+
6. **Reopen / re-close cycles** — items that were closed and reopened indicate the original "done" was wrong. Capture each transition.
|
|
50
|
+
7. **Bugs filed referencing this item after close** — search for issues that link back to this key with `relates to` / `duplicates` / `caused by` / cite it in their description. Each one is a candidate edge case the original spec missed.
|
|
51
|
+
8. **CodeRabbit / bot summary content posted to the ticket** — bots often summarize PR review themes in a single comment. Pull those out verbatim.
|
|
52
|
+
9. **Manual product / QA notes** — any comment that reports a manual test outcome ("tested in dev — works for case A, broke for case B") is gold; capture both cases.
|
|
53
|
+
10. **Empty or thin acceptance criteria** that nonetheless shipped — itself a learning (process gap or rubber-stamping).
|
|
54
|
+
|
|
55
|
+
## Output
|
|
56
|
+
|
|
57
|
+
Produce a single structured markdown report per work item, then aggregate across all items into a final report at the path the team lead provides. Per-item structure:
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
## <work_item_key>: <summary>
|
|
61
|
+
|
|
62
|
+
- Status path: <status1> (<duration>) → <status2> (<duration>) → ...
|
|
63
|
+
- Linked PRs: <list>
|
|
64
|
+
- Sub-tasks added post-Plan: <list with original-vs-late timestamps>
|
|
65
|
+
- Reopen cycles: <count, with dates>
|
|
66
|
+
- Bugs filed afterward referencing this: <list of keys>
|
|
67
|
+
|
|
68
|
+
### Findings
|
|
69
|
+
|
|
70
|
+
1. <category from checklist row>: <one-line summary>
|
|
71
|
+
Evidence: <link to comment / transition / sub-task>
|
|
72
|
+
Quote (if applicable): "<verbatim>"
|
|
73
|
+
2. ...
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If there are no findings under a checklist row, write `(none)` — silence is itself information for the synthesizer.
|
|
77
|
+
|
|
78
|
+
## Rules
|
|
79
|
+
|
|
80
|
+
- **Never judge.** "Probably not interesting" is not a category. Every signal that matches a checklist row goes in.
|
|
81
|
+
- **Quote verbatim.** Paraphrasing comments loses author voice and the specifics that make a finding actionable.
|
|
82
|
+
- **Link, don't summarize.** Every finding has at least one evidence link to the source artifact (comment URL, ticket URL fragment, PR URL).
|
|
83
|
+
- **Run within the team.** Do not call `TeamCreate`. The Debrief skill created the team; you are a teammate.
|
|
84
|
+
- **Read-only.** Never call write MCP tools. You report; you do not mutate.
|
|
85
|
+
- **Parallel-safe.** You run alongside `pr-mining-specialist`; do not coordinate with them. The synthesizer reconciles.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Apply human-marked dispositions from a Debrief triage document — route accepted learnings to their persistence destinations (Edge Case Brainstorm checklist, project rules, memory, tracker tickets). Reads the triage doc produced by /lisa:debrief; deterministic and idempotent."
|
|
3
|
+
argument-hint: "<path to triage doc | URL>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa:debrief:apply command (which invokes the `lisa:debrief-apply` skill) to read the triage document at $ARGUMENTS, parse human dispositions, and persist accepted learnings to their categorized destinations.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Debrief a shipped initiative — mine tickets, PRs, and review threads to surface candidate learnings (edge cases, gotchas, friction, tooling gaps, convention drift) for human triage. Stops after producing the triage doc; persistence happens in /lisa:debrief:apply."
|
|
3
|
+
argument-hint: "<PRD URL | epic key | epic URL>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa:debrief skill to walk the original Plan, mine completed work units and their PRs, and produce a triage-ready learnings document for $ARGUMENTS.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Enforces team-first orchestration for lifecycle skills.
|
|
3
3
|
#
|
|
4
4
|
# Triggered on four hook events:
|
|
5
|
-
# - UserPromptSubmit : detects /lisa:research|plan|implement|intake in the
|
|
5
|
+
# - UserPromptSubmit : detects /lisa:research|plan|implement|intake|debrief in the
|
|
6
6
|
# raw prompt and arms enforcement for the session
|
|
7
7
|
# - PreToolUse : detects the same skills via a `Skill` tool call,
|
|
8
8
|
# arms enforcement, and blocks bypass tool calls
|
|
@@ -46,7 +46,7 @@ find "$STATE_DIR" -maxdepth 1 -type f -mmin +1440 -delete 2>/dev/null || true
|
|
|
46
46
|
|
|
47
47
|
is_lifecycle_skill() {
|
|
48
48
|
case "$1" in
|
|
49
|
-
lisa:research|lisa:plan|lisa:implement|lisa:intake) return 0 ;;
|
|
49
|
+
lisa:research|lisa:plan|lisa:implement|lisa:intake|lisa:debrief) return 0 ;;
|
|
50
50
|
*) return 1 ;;
|
|
51
51
|
esac
|
|
52
52
|
}
|
|
@@ -63,7 +63,13 @@ case "$HOOK_EVENT" in
|
|
|
63
63
|
# Match a slash command at the start of the prompt (allow optional whitespace).
|
|
64
64
|
LEADING=$(printf '%s' "$PROMPT" | sed -n '1p' | sed -E 's/^[[:space:]]*//')
|
|
65
65
|
case "$LEADING" in
|
|
66
|
-
/lisa:
|
|
66
|
+
# /lisa:debrief:apply is single-agent — explicitly excluded by listing
|
|
67
|
+
# it first with a no-op pattern; the broader /lisa:debrief* below would
|
|
68
|
+
# otherwise capture it.
|
|
69
|
+
/lisa:debrief:apply*)
|
|
70
|
+
: # single-agent, no team enforcement
|
|
71
|
+
;;
|
|
72
|
+
/lisa:research*|/lisa:plan*|/lisa:implement*|/lisa:intake*|/lisa:debrief*)
|
|
67
73
|
# Strip leading slash and any args after the first whitespace.
|
|
68
74
|
SKILL_NAME=$(printf '%s' "$LEADING" | sed -E 's|^/||; s/[[:space:]].*$//')
|
|
69
75
|
printf '%s\n' "$SKILL_NAME" >"$SKILL_FLAG" 2>/dev/null || true
|
|
@@ -11,7 +11,7 @@ This protocol runs **once per session**, on the first user message. After that,
|
|
|
11
11
|
1. If the user invoked a slash command (`/lisa:research`, `/lisa:plan`, `/lisa:implement`, `/lisa:verify`, `/lisa:monitor`, `/lisa:intake`, etc.), the flow is already determined -- skip classification.
|
|
12
12
|
2. Read the user's request and match it against the flow definitions below.
|
|
13
13
|
3. If you cannot confidently classify the request:
|
|
14
|
-
- **Interactive session** (user is present): present a multiple choice using AskUserQuestion with options: Research, Plan, Implement, Verify, No flow.
|
|
14
|
+
- **Interactive session** (user is present): present a multiple choice using AskUserQuestion with options: Research, Plan, Implement, Verify, Debrief, No flow.
|
|
15
15
|
- **Headless/non-interactive session** (running with `-p` flag, in a CI pipeline, or as a scheduled agent): do NOT ask the user. Classify to the best of your ability from available context (ticket content, prompt text, current branch state). If you truly cannot classify, default to "No flow" and proceed with the request as-is.
|
|
16
16
|
4. Once a flow is selected, **echo it back explicitly** before doing anything else. State the flow, the work type (if applicable), and a one-sentence justification for why this flow was chosen. Example:
|
|
17
17
|
|
|
@@ -34,7 +34,7 @@ What this rule still enforces:
|
|
|
34
34
|
|
|
35
35
|
2. **Cascade rule (load-bearing)**: Before calling `TeamCreate`, check whether you are already operating inside an agent team. Signs you are inside a team: a prior `TeamCreate` exists in this session; you were spawned via `Agent` with `team_name`; your context references a team lead. If any of these are true, **do NOT call `TeamCreate`** — the harness rejects double-creates and the work stalls. Continue within the existing team. Invoke flows via the Skill tool; the team lead inherits responsibility for orchestration.
|
|
36
36
|
|
|
37
|
-
3. **Default mode**: `Research`, `Plan`, `Implement`, and `
|
|
37
|
+
3. **Default mode**: `Research`, `Plan`, `Implement`, `Intake`, and `Debrief` run as agent teams. The `Implement` flow — including every work type (`Build`, `Fix`, `Improve`, `Investigate-Only`) — is **always** a team flow. Bug fixes that "look simple" are not an exception: the Reproduce sub-flow, debug-specialist, bug-fixer, parallel reviewers, and verification-specialist all need to compose. `Debrief` runs as a team because tracker-mining and pr-mining parallelize cleanly and synthesis gates on both completing. `Verify` (standalone) and `Monitor` (standalone) use the One-shot Sub-agents pattern (see `## Orchestration` below) — these flows are linear with no parallelism and the team overhead is not warranted. Single-agent mode is otherwise reserved for: `product-walkthrough` invoked standalone (not as part of Research/Plan), `debrief-apply` (deterministic routing of human-marked dispositions), and one-off diagnostic Bash/Read sessions that don't invoke any lifecycle skill. When in doubt, use a team.
|
|
38
38
|
|
|
39
39
|
The mechanical TeamCreate bootstrap directive lives inside each lifecycle skill — see those skills' orchestration preambles for the exact wording: first `ToolSearch{select:TeamCreate}` (load deferred schema), then `TeamCreate`.
|
|
40
40
|
|
|
@@ -65,10 +65,11 @@ Gate:
|
|
|
65
65
|
Sequence:
|
|
66
66
|
1. **Investigate sub-flow** -- gather context from codebase, git history, existing behavior, and external sources
|
|
67
67
|
2. `product-specialist` -- define user goals, user flows (Gherkin), acceptance criteria, error states, UX concerns, and out-of-scope items
|
|
68
|
-
3.
|
|
69
|
-
4.
|
|
70
|
-
5.
|
|
71
|
-
6.
|
|
68
|
+
3. **Edge Case Brainstorm sub-flow** -- run the PRD candidate through the edge-case checklist; fold accepted cases into acceptance criteria, out-of-scope, or open questions
|
|
69
|
+
4. `architecture-specialist` -- assess technical feasibility, identify constraints, map existing system boundaries
|
|
70
|
+
5. Synthesize findings into a PRD document containing: problem statement, user stories, acceptance criteria, technical constraints, open questions, and proposed scope
|
|
71
|
+
6. **Plan Phase Tooling** -- review all available skills and agents (project-defined, plugin-provided, and built-in) and determine which ones the Plan phase will need. For each recommended skill or agent, state why it is needed. If no skills or agents beyond the defaults are identified, explicitly justify why the standard set is sufficient. Include this as a "Recommended Tooling for Plan Phase" section in the PRD.
|
|
72
|
+
7. `learner` -- capture discoveries for future sessions
|
|
72
73
|
|
|
73
74
|
Output: A PRD document that includes a "Recommended Tooling for Plan Phase" section listing the skills and agents the Plan phase should use. If there is not enough context to produce a complete PRD, stop and report what is missing rather than producing an incomplete one.
|
|
74
75
|
|
|
@@ -84,19 +85,21 @@ Gate:
|
|
|
84
85
|
|
|
85
86
|
Sequence:
|
|
86
87
|
1. **Investigate sub-flow** -- explore codebase for architecture, patterns, dependencies relevant to the spec
|
|
87
|
-
2. `product-specialist` -- validate and refine acceptance criteria for the whole scope
|
|
88
|
-
3.
|
|
89
|
-
4.
|
|
90
|
-
5.
|
|
88
|
+
2. `product-specialist` -- validate and refine acceptance criteria for the whole scope, including error states and UX concerns
|
|
89
|
+
3. **Edge Case Brainstorm sub-flow** -- run the PRD as a whole through the checklist to catch scope-shaped gaps before decomposition
|
|
90
|
+
4. `architecture-specialist` -- map dependencies, identify cross-cutting concerns, determine execution order
|
|
91
|
+
5. **Implement/Verify Phase Tooling** -- review all available skills and agents (project-defined, plugin-provided, and built-in) and determine which ones the Implement and Verify phases will need for each work item. For each recommended skill or agent, state why it is needed and which work items it applies to. If no skills or agents beyond the defaults are identified for a work item, explicitly justify why the standard set is sufficient.
|
|
92
|
+
6. Decompose into ordered work items (epics, stories, tasks, spikes, bugs). For each item, run the **Edge Case Brainstorm sub-flow** scoped to that item — accepted cases become additional acceptance criteria or sub-tasks; rejected ones are noted with a one-line reason. Each item carries:
|
|
91
93
|
- Type (epic, story, task, spike, bug)
|
|
92
|
-
- Acceptance criteria
|
|
94
|
+
- Acceptance criteria (including any added by the per-item brainstorm)
|
|
93
95
|
- Verification method
|
|
94
96
|
- Dependencies
|
|
95
|
-
- Skills and agents required (from step
|
|
96
|
-
|
|
97
|
-
|
|
97
|
+
- Skills and agents required (from step 5)
|
|
98
|
+
7. Create work items in the tracker (JIRA, Linear, GitHub) with acceptance criteria, dependencies, and recommended skills/agents
|
|
99
|
+
8. **PRD back-link** -- update the source PRD with a `## Tickets` section listing every created work item (key, title, type, link), so the PRD becomes the canonical anchor for downstream flows (notably **Debrief**). Invoke `lisa:prd-backlink` with the PRD source and the created ticket list. The section is regenerated on each run, not appended, so re-planning never produces stale links.
|
|
100
|
+
9. `learner` -- capture discoveries for future sessions
|
|
98
101
|
|
|
99
|
-
Output: Work items in a tracker with acceptance criteria and recommended skills/agents, ordered by dependency. If the specification cannot be decomposed without further clarification, stop and report what is missing.
|
|
102
|
+
Output: Work items in a tracker with acceptance criteria and recommended skills/agents, ordered by dependency. The source PRD carries a `## Tickets` section linking back to every created item. If the specification cannot be decomposed without further clarification, stop and report what is missing.
|
|
100
103
|
|
|
101
104
|
### Implement
|
|
102
105
|
|
|
@@ -189,6 +192,32 @@ Sequence:
|
|
|
189
192
|
|
|
190
193
|
Output: Merged PR, successful deploy, remote verification passing.
|
|
191
194
|
|
|
195
|
+
### Debrief
|
|
196
|
+
|
|
197
|
+
When: An initiative is fully shipped — every work item from the original Plan is in a terminal state and its PR is merged. The user wants to surface candidate learnings (edge cases, gotchas, friction, tooling gaps, convention drift) for human triage so future agents inherit what this initiative taught.
|
|
198
|
+
|
|
199
|
+
Gate:
|
|
200
|
+
- A PRD or epic must be provided as input — the PRD URL (Notion / Confluence / Linear / GitHub Issue / file), the epic key (JIRA), or the epic issue URL (GitHub). The PRD's `## Tickets` section (written by Plan step 8) is the canonical anchor for the work-item set; an epic's children are the equivalent.
|
|
201
|
+
- Every work item linked from the input must be in a terminal state (Done / Closed / Cancelled). If any item is still open, stop and list the unfinished items.
|
|
202
|
+
- Every Done item that was implementable must have at least one merged PR linked. If a Done item has no PR, surface it as a debrief anomaly rather than silently excluding it.
|
|
203
|
+
- Headless / non-interactive sessions: do not block on missing input — if the input is ambiguous (e.g., only a vague initiative name), fail with a clear error listing what was needed.
|
|
204
|
+
|
|
205
|
+
Sequence:
|
|
206
|
+
1. **Resolve the work-item set** — read the input. If it's a PRD, follow its `## Tickets` section. If it's an epic, list its children. Build the canonical list of `(work_item, linked_PRs[])` tuples. If a work item has no `linked_PRs` and is not a spike, mark it as an anomaly to surface in step 4.
|
|
207
|
+
2. **Mine in parallel** (run as concurrent tasks within the team):
|
|
208
|
+
- `tracker-mining-specialist` — for every work item, walk the description, every comment (human, agent evidence, CodeRabbit summary), status transitions and their durations, late-arriving bugs that reference the item, and child sub-tasks added during implementation. Output a structured per-ticket findings list.
|
|
209
|
+
- `pr-mining-specialist` — for every linked PR, walk the description, every review comment (general + inline; CodeRabbit + human), every commit on the branch (especially late `fix:` / `revert:` / follow-up commits), and every test file added. Output a structured per-PR findings list.
|
|
210
|
+
3. `learnings-synthesizer` — consume both findings lists, deduplicate, and categorize each candidate learning into one of:
|
|
211
|
+
- **Edge case** — a failure mode that should have been caught at PRD/Plan time; candidate addition to the Edge Case Brainstorm checklist
|
|
212
|
+
- **Recurring gotcha** — a stack- or codebase-specific trap (e.g., "this ORM silently truncates X")
|
|
213
|
+
- **Process friction** — a step in the lifecycle that consistently slowed the work
|
|
214
|
+
- **Tooling gap** — missing skill, wrong agent assignment, broken hook, missing automation
|
|
215
|
+
- **Convention drift** — an unwritten rule revealed by review comments that should be codified
|
|
216
|
+
4. **Produce the human-triage document** — a markdown file with one row per candidate learning showing: category, summary, evidence (links to the source ticket comment / PR comment / commit), recommended persistence destination, and a checkbox-style disposition field the human will mark (Accept / Reject / Defer). Surface step-1 anomalies (work items missing PRs, etc.) in a separate section. The document is exhaustive — it lists every candidate, even ones the synthesizer rates low confidence — because the human, not the agent, decides what is worth keeping.
|
|
217
|
+
5. **Stop and hand the document to the human.** Debrief does NOT persist accepted learnings itself. The human triages, marks dispositions, and runs the **`/lisa:debrief:apply`** command (skill: `debrief-apply`) to route the accepted items to their destinations.
|
|
218
|
+
|
|
219
|
+
Output: A triage-ready learnings document covering every work item and PR in the initiative, with structured evidence and disposition fields. Persistence is deferred to `debrief-apply`, which the human invokes after triage.
|
|
220
|
+
|
|
192
221
|
## Sub-flows
|
|
193
222
|
|
|
194
223
|
Sub-flows are reusable sequences invoked by main flows. When a flow says "Investigate sub-flow", execute the full Investigate sequence.
|
|
@@ -203,6 +232,54 @@ Sequence:
|
|
|
203
232
|
3. `ops-specialist` -- check logs, errors, health (if runtime issue)
|
|
204
233
|
4. Report findings with evidence
|
|
205
234
|
|
|
235
|
+
### Edge Case Brainstorm
|
|
236
|
+
|
|
237
|
+
Purpose: Force explicit consideration of edge cases at PRD time and at work-item time, so failure modes that change scope or add acceptance criteria are caught before implementation rather than after a bug is filed in production.
|
|
238
|
+
|
|
239
|
+
Invoked by: Research (against the PRD as a whole), Plan (once against the PRD before decomposition, then once per work item during decomposition), and Build / Fix sub-flows when a `product-specialist` or `test-specialist` step would otherwise rubber-stamp acceptance criteria.
|
|
240
|
+
|
|
241
|
+
Sequence:
|
|
242
|
+
1. Walk through the checklist below and propose every candidate edge case that plausibly applies to the scope under review. Aim for breadth, not pre-filtered relevance — propose first, judge second.
|
|
243
|
+
2. For each candidate, take an explicit action and record it:
|
|
244
|
+
- **Accept** — fold into acceptance criteria (PRD-level or work-item level), or open a new work item / sub-task if the case is large enough to warrant one
|
|
245
|
+
- **Defer** — capture as an open question or `Out of Scope` line with a one-sentence reason
|
|
246
|
+
- **Reject** — note the case and a one-sentence reason it does not apply (e.g., "single-tenant, no concurrent edits possible")
|
|
247
|
+
3. A silent skip is not allowed — every candidate from the checklist must end up Accepted, Deferred, or Rejected with a reason. "Considered edge cases" without a per-item disposition does not satisfy this sub-flow.
|
|
248
|
+
4. If three or more candidates are Accepted at PRD time, treat that as a signal that the PRD scope is wider than originally framed and call it out in the synthesis step.
|
|
249
|
+
|
|
250
|
+
Checklist (pattern + question form — ask each question literally of the scope under review):
|
|
251
|
+
|
|
252
|
+
**Navigation & URL state**
|
|
253
|
+
- *Reload persistence*: if the user reloads mid-task, do they land where they were — same tab, same filters, same scroll, same selection — or get bounced to a default?
|
|
254
|
+
- *Deep linking*: can the URL alone reconstruct the screen, or does it require state from a previous click?
|
|
255
|
+
- *Back / forward*: does browser history match what the user expects, or does it skip steps or re-trigger side effects?
|
|
256
|
+
- *Parameter change then reload*: after the user changes filters / sort / tab / pagination, does a reload preserve those choices?
|
|
257
|
+
|
|
258
|
+
**Data lifecycle**
|
|
259
|
+
- *Empty state*: what does this look like the very first time, with zero data?
|
|
260
|
+
- *Single vs. many*: does the UI degrade with 1 item, 10k items, or at pagination boundaries?
|
|
261
|
+
- *Stale data*: if the user leaves the tab open for an hour, what is wrong when they come back?
|
|
262
|
+
- *Concurrent edits*: two users (or two tabs) editing the same record — last-write-wins, conflict, or merge?
|
|
263
|
+
- *Deletion mid-flow*: the resource the user is viewing gets deleted by someone else while they have it open.
|
|
264
|
+
|
|
265
|
+
**Failure modes**
|
|
266
|
+
- *Network*: offline, slow, intermittent, request mid-flight when the user navigates away.
|
|
267
|
+
- *Partial success*: bulk action where 8 of 10 succeed — what does the user see and what state is the system in?
|
|
268
|
+
- *Permission denied mid-flow*: token expires, role changes, resource becomes inaccessible.
|
|
269
|
+
- *Idempotency*: double-click submit, retry after timeout — does the action happen twice?
|
|
270
|
+
|
|
271
|
+
**Input boundaries**
|
|
272
|
+
- *Text*: empty, max-length, unicode, whitespace-only, leading / trailing whitespace, emoji, RTL.
|
|
273
|
+
- *Numeric*: zero, negative, very large, non-integer, floating-point precision.
|
|
274
|
+
- *Date / time*: timezone, DST transition, leap day, "now" vs. server time skew.
|
|
275
|
+
|
|
276
|
+
**Auth & session**
|
|
277
|
+
- *Session expiry mid-action*: what happens to in-flight work?
|
|
278
|
+
- *Role downgrade*: the user loses access to the screen they are currently on.
|
|
279
|
+
- *Multi-tab session*: logout in one tab while another tab is mid-action.
|
|
280
|
+
|
|
281
|
+
This list is non-exhaustive — agents should propose additional edge cases relevant to the domain (e.g., real-time / streaming, money / financial rounding, regulated data, multi-tenant isolation) and run them through the same Accept / Defer / Reject discipline.
|
|
282
|
+
|
|
206
283
|
### Reproduce
|
|
207
284
|
|
|
208
285
|
Purpose: Create a reliable reproduction that demonstrates a bug before fixing it.
|
|
@@ -267,11 +344,13 @@ Vendor-neutral callers (e.g., `implement`, `verify`) should invoke the `tracker-
|
|
|
267
344
|
|
|
268
345
|
Flows can chain naturally:
|
|
269
346
|
- Research produces a PRD -- hand it to Plan
|
|
270
|
-
- Plan produces work items -- hand each to Implement
|
|
347
|
+
- Plan produces work items (and writes a `## Tickets` back-link section into the PRD) -- hand each item to Implement
|
|
271
348
|
- Implement produces verified code -- hand to Verify
|
|
349
|
+
- Verify ships and confirms the deploy -- once every work item in the PRD is shipped, hand the PRD (or the epic) to Debrief
|
|
350
|
+
- Debrief produces a triage-ready learnings document -- hand to the human, who marks dispositions and runs `debrief-apply` to persist accepted learnings
|
|
272
351
|
- If any flow discovers it lacks what it needs, it stops and suggests the preceding flow
|
|
273
352
|
|
|
274
|
-
The full lifecycle for a large initiative: Research -> Plan -> Implement (per item) -> Verify (per item).
|
|
353
|
+
The full lifecycle for a large initiative: Research -> Plan -> Implement (per item) -> Verify (per item) -> Debrief (once across the whole initiative) -> Debrief Apply (human-triggered, after triage).
|
|
275
354
|
|
|
276
355
|
## Sub-flow Usage
|
|
277
356
|
|
|
@@ -290,6 +369,7 @@ Use an **agent team** (TeamCreate + TaskCreate per step) for:
|
|
|
290
369
|
- **Implement** (Build, Fix, Improve) — long sequences with parallel review and a real risk of compaction
|
|
291
370
|
- **Plan** — multiple specialists feeding a shared decomposition
|
|
292
371
|
- **Research** — multiple specialists feeding a shared PRD
|
|
372
|
+
- **Debrief** — tracker-mining and pr-mining run in parallel and gate the synthesizer; the work-item set can be large, so durable task state matters
|
|
293
373
|
- Any flow that invokes the **Review sub-flow** (the four review specialists run in parallel and gate a single follow-up task)
|
|
294
374
|
|
|
295
375
|
Why: these flows have enough steps that context compaction is likely; the Review sub-flow is parallel-by-design and `blockedBy` expresses that cleanly; durable task state lets the team lead recover assignments after compaction.
|
|
@@ -259,6 +259,20 @@ After all tickets are created, present a summary table to the user:
|
|
|
259
259
|
- Blockers list with recommendations and alternatives
|
|
260
260
|
- Cross-PRD dependencies
|
|
261
261
|
|
|
262
|
+
### Phase 7: PRD Back-link
|
|
263
|
+
|
|
264
|
+
> **Mode guard**: In `dry_run: true` mode, skip this phase entirely — no tickets exist to link.
|
|
265
|
+
|
|
266
|
+
After Phase 6, invoke the `lisa:prd-backlink` skill to write a `## Tickets` section back into the source Confluence PRD page. The section becomes the canonical anchor for the **Debrief** flow once the initiative ships.
|
|
267
|
+
|
|
268
|
+
Invoke `lisa:prd-backlink` with:
|
|
269
|
+
|
|
270
|
+
- `source_type: "confluence"`
|
|
271
|
+
- `source_ref`: the original Confluence page URL
|
|
272
|
+
- `tickets`: the full list created in Phases 3–5, each entry as `{ key, title, type, url, parent_key }`
|
|
273
|
+
|
|
274
|
+
If `lisa:prd-backlink` fails (page permission denied, Confluence unreachable), surface the error in the Phase 6 report rather than aborting — the tickets are already created. Recommend the user re-run `lisa:prd-backlink` standalone once the source is reachable.
|
|
275
|
+
|
|
262
276
|
## Handling Ambiguities and Blockers
|
|
263
277
|
|
|
264
278
|
When you encounter something the PRD + comments + codebase can't resolve:
|