@codyswann/lisa 1.82.0 → 1.83.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/cdk/copy-overwrite/tsconfig.json +1 -3
- package/cdk/create-only/tsconfig.local.json +4 -1
- package/expo/copy-overwrite/tsconfig.json +1 -3
- package/expo/create-only/tsconfig.local.json +3 -1
- package/nestjs/copy-overwrite/tsconfig.json +1 -3
- package/nestjs/create-only/tsconfig.local.json +3 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/jira-agent.md +17 -8
- package/plugins/lisa/agents/spec-conformance-specialist.md +49 -0
- package/plugins/lisa/agents/verification-specialist.md +1 -0
- package/plugins/lisa/commands/jira/read-ticket.md +7 -0
- package/plugins/lisa/commands/jira/write-ticket.md +7 -0
- package/plugins/lisa/commands/spec-conformance.md +7 -0
- package/plugins/lisa/skills/jira-create/SKILL.md +7 -1
- package/plugins/lisa/skills/jira-read-ticket/SKILL.md +180 -0
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +178 -0
- package/plugins/lisa/skills/spec-conformance/SKILL.md +161 -0
- package/plugins/lisa/skills/ticket-triage/SKILL.md +14 -2
- package/plugins/lisa/skills/verification-lifecycle/SKILL.md +21 -5
- 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/jira-agent.md +17 -8
- package/plugins/src/base/agents/spec-conformance-specialist.md +49 -0
- package/plugins/src/base/agents/verification-specialist.md +1 -0
- package/plugins/src/base/commands/jira/read-ticket.md +7 -0
- package/plugins/src/base/commands/jira/write-ticket.md +7 -0
- package/plugins/src/base/commands/spec-conformance.md +7 -0
- package/plugins/src/base/skills/jira-create/SKILL.md +7 -1
- package/plugins/src/base/skills/jira-read-ticket/SKILL.md +180 -0
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +178 -0
- package/plugins/src/base/skills/spec-conformance/SKILL.md +161 -0
- package/plugins/src/base/skills/ticket-triage/SKILL.md +14 -2
- package/plugins/src/base/skills/verification-lifecycle/SKILL.md +21 -5
- package/typescript/copy-overwrite/audit.ignore.config.json +45 -0
- package/typescript/copy-overwrite/tsconfig.json +1 -3
- package/typescript/create-only/tsconfig.local.json +3 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-conformance
|
|
3
|
+
description: "Verifies that shipped work matches its spec section-by-section — acceptance criteria, Out of Scope, Technical Approach, Validation Journey assertions, and any explicit deliverables. Builds a coverage matrix mapping each requirement to evidence, flags scope creep separately from misses, and produces a verdict (CONFORMS / PARTIAL / DIVERGES). Runs during the verification phase alongside empirical system verification."
|
|
4
|
+
allowed-tools: ["Read", "Glob", "Grep", "Bash", "Skill", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Spec Conformance: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Compare shipped work against its spec section-by-section. This is the "accountant lens" — did the work ship exactly what was written, nothing more, nothing less? It is NOT UX review (that's `product-specialist`) and it is NOT empirical system verification (that's `verification-specialist`). Run it alongside those, not instead of them.
|
|
10
|
+
|
|
11
|
+
## Phase 1 — Resolve Spec Source
|
|
12
|
+
|
|
13
|
+
Determine the source of truth for this work. Check in this order:
|
|
14
|
+
|
|
15
|
+
1. **Explicit spec argument** — plan file path (e.g. `.claude/plans/<name>.md`), JIRA key (e.g. `PROJ-123`), Linear key, GitHub issue URL, or PRD path passed as `$ARGUMENTS`.
|
|
16
|
+
2. **Linked JIRA ticket** — if the current branch or PR body references a JIRA key, use it.
|
|
17
|
+
3. **PR body** — if the PR description contains a "Spec" or "Ticket" link, follow it.
|
|
18
|
+
4. **Plan file on disk** — check `.claude/plans/` for an active plan matching the branch name.
|
|
19
|
+
|
|
20
|
+
If none of the above resolves, stop. Do not guess what the spec was. Report: "No spec source found — pass a plan file, ticket key, or PR URL."
|
|
21
|
+
|
|
22
|
+
Based on the source, load the full spec:
|
|
23
|
+
|
|
24
|
+
| Source | How to Load |
|
|
25
|
+
|--------|-------------|
|
|
26
|
+
| Plan file (`.md`) | `Read` the file |
|
|
27
|
+
| JIRA key | Invoke `/jira-read-ticket <KEY>` to get the full context bundle (primary ticket + epic + linked tickets) |
|
|
28
|
+
| Linear key | Fetch via Linear MCP if available; else `Bash` with Linear CLI; else report "Linear reader unavailable" |
|
|
29
|
+
| GitHub issue | `gh issue view <number> --json title,body,comments,labels,milestone` |
|
|
30
|
+
| PRD | `Read` the file or fetch via Notion MCP if it's a Notion URL |
|
|
31
|
+
|
|
32
|
+
## Phase 2 — Extract Requirements
|
|
33
|
+
|
|
34
|
+
Parse the spec into a structured requirement list. Do NOT skip sections — every requirement becomes a row in the coverage matrix.
|
|
35
|
+
|
|
36
|
+
Sections to extract:
|
|
37
|
+
|
|
38
|
+
| Section | What to Extract | Classification |
|
|
39
|
+
|---------|-----------------|----------------|
|
|
40
|
+
| Acceptance Criteria | Each Gherkin scenario or bullet | `acceptance` |
|
|
41
|
+
| Out of Scope | Each excluded item | `excluded` (flags scope creep) |
|
|
42
|
+
| Technical Approach | Each concrete implementation commitment (not narrative) | `technical` |
|
|
43
|
+
| Validation Journey Assertions | Each `Assertion:` bullet | `assertion` |
|
|
44
|
+
| Deliverables | Each explicit deliverable (migration, doc, endpoint, script) | `deliverable` |
|
|
45
|
+
| Plan file tasks | Each task marked complete in the plan | `task` |
|
|
46
|
+
| Linked blocker resolutions | Each `is blocked by` that required work in this ticket | `blocker` |
|
|
47
|
+
|
|
48
|
+
If an acceptance criterion is not in Gherkin, still extract it as a requirement — but flag it as `LOW_SPECIFICITY` so the verdict downgrades.
|
|
49
|
+
Downgrade rule: if any `LOW_SPECIFICITY` requirement exists, the maximum possible verdict is `PARTIAL` unless the spec is tightened and re-evaluated.
|
|
50
|
+
|
|
51
|
+
Skip narrative prose (Context / Business Value) — it isn't directly verifiable. Reference it only when explaining a miss.
|
|
52
|
+
|
|
53
|
+
## Phase 3 — Inspect Shipped Work
|
|
54
|
+
|
|
55
|
+
Gather evidence of what was actually shipped:
|
|
56
|
+
|
|
57
|
+
1. **Diff scope** — the commits on the current branch vs. the default branch:
|
|
58
|
+
```bash
|
|
59
|
+
BASE_BRANCH="$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')"
|
|
60
|
+
git log "${BASE_BRANCH}"..HEAD --oneline
|
|
61
|
+
git diff "${BASE_BRANCH}"...HEAD --stat
|
|
62
|
+
```
|
|
63
|
+
2. **File-level changes** — per-file diff for each changed file:
|
|
64
|
+
```bash
|
|
65
|
+
git diff "${BASE_BRANCH}"...HEAD -- <file>
|
|
66
|
+
```
|
|
67
|
+
3. **Test coverage** — which tests were added/changed for the requirements:
|
|
68
|
+
```bash
|
|
69
|
+
git diff "${BASE_BRANCH}"...HEAD -- '**/*.test.*' '**/*.spec.*'
|
|
70
|
+
```
|
|
71
|
+
4. **Empirical evidence** — output of `verification-specialist` if available (proof artifacts, API captures, UI screenshots, DB queries). If that report isn't in context, ask the caller for it before proceeding — do not substitute reading code for running the system.
|
|
72
|
+
5. **PR description** — `gh pr view --json title,body,files` if a PR exists.
|
|
73
|
+
6. **Deployed state** — if the verification phase already hit a deployed environment, use those captures.
|
|
74
|
+
|
|
75
|
+
Do NOT run the system yourself — that's the verification-specialist's job. Your job is to map their evidence to the spec.
|
|
76
|
+
|
|
77
|
+
## Phase 4 — Build Coverage Matrix
|
|
78
|
+
|
|
79
|
+
For every requirement extracted in Phase 2, produce one row:
|
|
80
|
+
|
|
81
|
+
| Column | Value |
|
|
82
|
+
|--------|-------|
|
|
83
|
+
| Requirement ID | Stable identifier (e.g. `AC-1`, `OOS-2`, `ASSERT-3`) |
|
|
84
|
+
| Classification | `acceptance` / `excluded` / `technical` / `assertion` / `deliverable` / `task` / `blocker` |
|
|
85
|
+
| Requirement Text | Verbatim from spec |
|
|
86
|
+
| Evidence | Specific pointer — file:line, test name, verification report section, PR file, screenshot name |
|
|
87
|
+
| Status | `MATCH` / `PARTIAL` / `MISSING` / `SCOPE_CREEP_VIOLATION` |
|
|
88
|
+
| Notes | One line — why partial, what's missing, or where evidence is thin |
|
|
89
|
+
|
|
90
|
+
### Status definitions
|
|
91
|
+
|
|
92
|
+
- **`MATCH`** — requirement is implemented AND there is empirical evidence it works (test + verification report).
|
|
93
|
+
- **`PARTIAL`** — implementation exists but evidence is incomplete (e.g. code present, no test; or test present, no run-time verification).
|
|
94
|
+
- **`MISSING`** — requirement has no corresponding implementation OR no evidence at all.
|
|
95
|
+
- **`SCOPE_CREEP_VIOLATION`** — used for `excluded` classification only. An Out-of-Scope item appears to have been shipped anyway. This is a different failure than a miss — it means the agent exceeded the spec.
|
|
96
|
+
|
|
97
|
+
### Scope creep detection
|
|
98
|
+
|
|
99
|
+
Separately from the matrix, scan the diff for work NOT traceable to any requirement. For each such change:
|
|
100
|
+
|
|
101
|
+
- Identify the file/module
|
|
102
|
+
- Summarize the change in one line
|
|
103
|
+
- Classify as `UNTRACEABLE_CHANGE` (not necessarily wrong — refactors often land here — but MUST be surfaced)
|
|
104
|
+
|
|
105
|
+
Untraceable changes are not automatic failures. They become findings the human reviews.
|
|
106
|
+
|
|
107
|
+
## Phase 5 — Verdict
|
|
108
|
+
|
|
109
|
+
Produce exactly one verdict:
|
|
110
|
+
|
|
111
|
+
- **`CONFORMS`** — every requirement is `MATCH`. No `SCOPE_CREEP_VIOLATION`. Untraceable changes, if any, are clearly refactors or test support.
|
|
112
|
+
- **`PARTIAL`** — some requirements are `PARTIAL` but none are `MISSING` or `SCOPE_CREEP_VIOLATION`. Work is mostly there but evidence is thin.
|
|
113
|
+
- **`DIVERGES`** — at least one requirement is `MISSING`, OR at least one `SCOPE_CREEP_VIOLATION` exists, OR there are substantive untraceable changes that materially alter behavior.
|
|
114
|
+
|
|
115
|
+
A verdict of `PARTIAL` or `DIVERGES` blocks task completion. The caller must resolve the gaps (implement the miss, remove the creep, add the missing evidence) before re-running.
|
|
116
|
+
|
|
117
|
+
## Phase 6 — Output
|
|
118
|
+
|
|
119
|
+
Structure the report so it can be pasted into a PR comment or JIRA ticket:
|
|
120
|
+
|
|
121
|
+
```text
|
|
122
|
+
## Spec Conformance Report
|
|
123
|
+
|
|
124
|
+
**Spec source:** <plan file / JIRA key / Linear / GitHub issue / PRD>
|
|
125
|
+
**Shipped scope:** <N commits, M files, K tests on branch <branch> vs <default-branch>>
|
|
126
|
+
|
|
127
|
+
### Coverage Matrix
|
|
128
|
+
|
|
129
|
+
| ID | Class | Requirement | Evidence | Status | Notes |
|
|
130
|
+
|----|-------|-------------|----------|--------|-------|
|
|
131
|
+
| AC-1 | acceptance | [text] | [pointer] | MATCH | |
|
|
132
|
+
| AC-2 | acceptance | [text] | — | MISSING | No corresponding code or test |
|
|
133
|
+
| OOS-1 | excluded | [text] | src/foo.ts:42 | SCOPE_CREEP_VIOLATION | Added anyway |
|
|
134
|
+
| ASSERT-1 | assertion | [text] | verification-report §2 | PARTIAL | Asserted in code, not run in verification |
|
|
135
|
+
|
|
136
|
+
### Untraceable Changes
|
|
137
|
+
- src/utils/helpers.ts — extracted shared regex constant (refactor, no behavior change)
|
|
138
|
+
- src/auth/session.ts — added retry logic (NOT IN SPEC — verify intentional)
|
|
139
|
+
|
|
140
|
+
### Verdict: CONFORMS | PARTIAL | DIVERGES
|
|
141
|
+
|
|
142
|
+
**Matches:** N/Total
|
|
143
|
+
**Partial:** N
|
|
144
|
+
**Missing:** N
|
|
145
|
+
**Scope creep violations:** N
|
|
146
|
+
**Untraceable changes flagged for review:** N
|
|
147
|
+
|
|
148
|
+
### Required Actions (if PARTIAL or DIVERGES)
|
|
149
|
+
1. [specific action — implement X, remove Y, add test for Z, capture evidence for W]
|
|
150
|
+
2. ...
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Rules
|
|
154
|
+
|
|
155
|
+
- Never substitute "I read the code and it looks right" for empirical evidence. If verification-specialist hasn't run yet, request its report before producing a verdict.
|
|
156
|
+
- Never mark a requirement `MATCH` based on the presence of code alone — evidence means test + runtime observation.
|
|
157
|
+
- Always surface scope creep separately from misses. They are distinct failures.
|
|
158
|
+
- Always surface untraceable changes — even benign refactors — so the human can confirm intent.
|
|
159
|
+
- The Out of Scope section is load-bearing. If the spec has one, every item must appear in the matrix as `excluded`.
|
|
160
|
+
- If the spec has no acceptance criteria, flag the spec itself as inadequate before running the matrix. The verdict is `DIVERGES` for spec inadequacy until criteria are added.
|
|
161
|
+
- Do not invent requirements the spec didn't state. If the shipped work does something reasonable but unspecified, it becomes an untraceable change, not a match.
|
|
@@ -6,7 +6,7 @@ allowed-tools: ["Read", "Glob", "Grep", "Bash"]
|
|
|
6
6
|
|
|
7
7
|
# Ticket Triage: $ARGUMENTS
|
|
8
8
|
|
|
9
|
-
Perform analytical triage on the JIRA ticket. The caller
|
|
9
|
+
Perform analytical triage on the JIRA ticket. The caller MUST have run `jira-read-ticket` first and provided the resulting context bundle — which includes the primary ticket, all linked tickets (blocks / is blocked by / relates to / duplicates), epic parent, epic siblings, subtasks, and remote PR state. Do not triage from a bare ticket summary — if the bundle is missing link or epic context, stop and instruct the caller to run `/jira-read-ticket` first.
|
|
10
10
|
|
|
11
11
|
Repository name for scoped labels and comment headers: determine via `basename $(git rev-parse --show-toplevel)`.
|
|
12
12
|
|
|
@@ -23,6 +23,18 @@ If NO relevant code is found in this repo:
|
|
|
23
23
|
|
|
24
24
|
If relevant code IS found, proceed to Phase 2.
|
|
25
25
|
|
|
26
|
+
## Phase 1.5 -- Relationship & Epic Awareness
|
|
27
|
+
|
|
28
|
+
From the context bundle, evaluate relationships before analyzing this ticket in isolation:
|
|
29
|
+
|
|
30
|
+
- **Open blockers (`is blocked by`)**: if any blocker is not `Done` or its linked PR is not merged, raise an ambiguity: "Blocker {KEY} is not shipped — work cannot meaningfully start." This is an automatic `BLOCKED` verdict unless the human confirms the blocker state is acceptable.
|
|
31
|
+
- **Epic siblings in progress**: if a sibling under the same epic is `In Progress` / `In Review` with a different assignee and overlapping scope, raise it as an edge case in Phase 4 ("Duplicate-work risk with {KEY}").
|
|
32
|
+
- **`duplicates` / `is duplicated by` links**: if this ticket is a duplicate of an open ticket, verdict is `BLOCKED` with the recommendation to close as duplicate rather than implement.
|
|
33
|
+
- **`relates to` links with shipped PRs**: flag the PRs in the verification methodology (Phase 5) as prior art worth reviewing before writing new code.
|
|
34
|
+
|
|
35
|
+
Do not re-fetch tickets — the bundle already has the context.
|
|
36
|
+
If Phase 1.5 finds an automatic blocker condition (`is blocked by` not shipped, or duplicate-of-open), emit `BLOCKED` immediately and skip to Phase 6 output formatting.
|
|
37
|
+
|
|
26
38
|
## Phase 2 -- Cross-Repo Awareness
|
|
27
39
|
|
|
28
40
|
Parse the ticket's existing comments for triage headers from OTHER repositories. Look for patterns like:
|
|
@@ -111,7 +123,7 @@ Every verification method must be specific enough that an automated agent could
|
|
|
111
123
|
Evaluate the findings and produce exactly one verdict:
|
|
112
124
|
|
|
113
125
|
- **`NOT_RELEVANT`** -- No relevant code was found in this repository (Phase 1). The caller should add the triage label and skip implementation in this repo.
|
|
114
|
-
- **`BLOCKED`** --
|
|
126
|
+
- **`BLOCKED`** -- Blocking conditions were found in Phase 1.5 (open blockers, duplicate-of-open) and/or ambiguities were found in Phase 3. Work MUST NOT proceed until resolved by a human. The caller should post findings, add the triage label, and STOP.
|
|
115
127
|
- **`PASSED_WITH_FINDINGS`** -- No ambiguities, but edge cases or verification findings were identified. Work can proceed. The caller should post findings and add the triage label.
|
|
116
128
|
- **`PASSED`** -- No ambiguities, edge cases, or verification gaps found. Work can proceed. The caller should add the triage label.
|
|
117
129
|
|
|
@@ -42,9 +42,23 @@ A verification plan that only lists `bun run test`, `bun run typecheck`, or `bun
|
|
|
42
42
|
|
|
43
43
|
After implementation, run the verification plan. Execute each verification type in order.
|
|
44
44
|
|
|
45
|
-
### 7.
|
|
45
|
+
### 7. Spec Conformance
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
After empirical verification produces evidence, run spec conformance as a separate, mandatory step. Invoke the `spec-conformance` skill (or delegate to the `spec-conformance-specialist` agent) with the spec source — plan file, JIRA/Linear/GitHub key, or PRD.
|
|
48
|
+
|
|
49
|
+
Spec conformance answers a question empirical verification does NOT: does the shipped work match what was asked, section-by-section? It consumes the empirical evidence from step 6 and builds a coverage matrix over every requirement (acceptance criteria, Out of Scope, technical commitments, Validation Journey assertions, deliverables).
|
|
50
|
+
|
|
51
|
+
Required outputs:
|
|
52
|
+
- Coverage matrix with one row per requirement
|
|
53
|
+
- Scope creep findings (Out-of-Scope violations, surfaced separately from misses)
|
|
54
|
+
- Untraceable change findings (diff not traceable to any requirement)
|
|
55
|
+
- Verdict: `CONFORMS`, `PARTIAL`, or `DIVERGES`
|
|
56
|
+
|
|
57
|
+
`PARTIAL` or `DIVERGES` blocks completion. Fix the gaps (implement the miss, remove the creep, capture the missing evidence) and re-run both empirical verification AND spec conformance. Never skip this step — it catches failures that empirical verification by itself does not, such as a feature that works but wasn't asked for, or a spec item that was quietly dropped.
|
|
58
|
+
|
|
59
|
+
### 8. Loop
|
|
60
|
+
|
|
61
|
+
If any verification or spec-conformance check fails, fix the issue and re-verify. Do not declare done until all required types pass AND the spec-conformance verdict is `CONFORMS`. If a verification or conformance check is stuck after 3 attempts, escalate.
|
|
48
62
|
|
|
49
63
|
---
|
|
50
64
|
|
|
@@ -180,8 +194,9 @@ Agents must follow this sequence unless explicitly instructed otherwise:
|
|
|
180
194
|
8. Implement the change.
|
|
181
195
|
9. Execute verification plan — run the actual system and observe results.
|
|
182
196
|
10. Collect proof artifacts.
|
|
183
|
-
11.
|
|
184
|
-
12.
|
|
197
|
+
11. Run spec conformance — build coverage matrix against the spec source (plan/ticket/issue), flag scope creep and untraceable changes, produce verdict.
|
|
198
|
+
12. Summarize what changed, what was verified, conformance verdict, and remaining risk.
|
|
199
|
+
13. Label the result with a verification level.
|
|
185
200
|
|
|
186
201
|
---
|
|
187
202
|
|
|
@@ -290,9 +305,10 @@ A task is done only when:
|
|
|
290
305
|
|
|
291
306
|
- End user is identified
|
|
292
307
|
- All applicable verification types are classified and executed
|
|
293
|
-
- Verification lifecycle is completed (classify, check tooling, plan, execute, loop)
|
|
308
|
+
- Verification lifecycle is completed (classify, check tooling, plan, execute, spec conformance, loop)
|
|
294
309
|
- Required verification surfaces and tooling surfaces are used or explicitly unavailable
|
|
295
310
|
- Proof artifacts are captured
|
|
311
|
+
- Spec conformance verdict is `CONFORMS` (not `PARTIAL`, not `DIVERGES`)
|
|
296
312
|
- Verification level is declared
|
|
297
313
|
- Risks and gaps are documented
|
|
298
314
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: jira-agent
|
|
3
3
|
description: JIRA lifecycle agent. Reads tickets, determines intent (Bug → Implement/Fix, Story/Task → Implement/Build, Epic → Plan, Spike → Implement/Investigate), delegates to the appropriate flow, syncs progress at milestones, and posts evidence at completion.
|
|
4
4
|
skills:
|
|
5
|
+
- jira-read-ticket
|
|
6
|
+
- jira-write-ticket
|
|
5
7
|
- jira-sync
|
|
6
8
|
- jira-evidence
|
|
7
9
|
- jira-verify
|
|
@@ -17,13 +19,20 @@ You are a JIRA lifecycle agent. Your job is to read a JIRA ticket, determine wha
|
|
|
17
19
|
|
|
18
20
|
### 1. Read the Ticket
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
- Description, comments, attachments, linked issues
|
|
22
|
-
- Epic parent, subtasks, story points
|
|
23
|
-
- Current status, assignee, labels
|
|
24
|
-
- Extract any credentials, URLs, or reproduction steps from the ticket body
|
|
22
|
+
Invoke the `jira-read-ticket` skill with the ticket key. This is mandatory — do NOT read the ticket ad-hoc via MCP calls. The skill fetches the primary ticket AND its full graph in one pass:
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
- Full description, acceptance criteria, Validation Journey
|
|
25
|
+
- All comments in chronological order
|
|
26
|
+
- All metadata (status, assignee, labels, components, fix version, priority, story points, sprint)
|
|
27
|
+
- Remote links — PRs (with state and unresolved review comments via `gh`), Confluence pages, dashboards
|
|
28
|
+
- Every linked ticket (`blocks`, `is blocked by`, `relates to`, `duplicates`, `clones`) with their descriptions, statuses, and recent comments
|
|
29
|
+
- Epic parent — full description, comments, and acceptance criteria
|
|
30
|
+
- Epic siblings — so you see in-flight related work before starting
|
|
31
|
+
- Subtasks
|
|
32
|
+
|
|
33
|
+
Pass the resulting context bundle verbatim to every downstream agent. Extract credentials, URLs, and reproduction steps from the bundle. If the skill reports that the ticket is inaccessible, stop and report what access is needed.
|
|
34
|
+
|
|
35
|
+
**Never act on a ticket in isolation.** If the bundle shows open blockers, flag them and stop. If it shows an epic sibling in progress with a different assignee, surface that before proceeding so work isn't duplicated.
|
|
27
36
|
|
|
28
37
|
### 2. Validate Ticket Quality
|
|
29
38
|
|
|
@@ -97,7 +106,7 @@ Based on the milestone, suggest (but don't auto-transition):
|
|
|
97
106
|
## Rules
|
|
98
107
|
|
|
99
108
|
- Never auto-transition ticket status — always suggest and let the human confirm
|
|
100
|
-
- Always read the full ticket before determining intent — don't rely on ticket type alone
|
|
101
|
-
-
|
|
109
|
+
- Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
|
|
110
|
+
- Never create or materially edit a ticket by calling MCP write tools directly — always delegate to `jira-write-ticket` so relationships, Gherkin criteria, and metadata gates are enforced
|
|
102
111
|
- If sign-in credentials are in the ticket, extract and pass them to the flow
|
|
103
112
|
- If the ticket has a Validation Journey section, pass it to the verifier agent
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-conformance-specialist
|
|
3
|
+
description: "Spec conformance specialist agent. Verifies shipped work matches its spec exactly — acceptance criteria, Out of Scope, Technical Approach, Validation Journey assertions, and deliverables. Produces a coverage matrix, flags scope creep separately from misses, and issues a verdict (CONFORMS / PARTIAL / DIVERGES). Runs alongside verification-specialist and product-specialist during the verification phase; they catch different failure modes."
|
|
4
|
+
skills:
|
|
5
|
+
- spec-conformance
|
|
6
|
+
- jira-read-ticket
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Spec Conformance Specialist Agent
|
|
10
|
+
|
|
11
|
+
You are a spec conformance specialist. Your job is to prove that the shipped work matches its spec **exactly** — nothing more, nothing less.
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
You answer one question: **Does what shipped match what was asked?**
|
|
16
|
+
|
|
17
|
+
That is distinct from two adjacent questions that other agents own:
|
|
18
|
+
|
|
19
|
+
| Question | Owner |
|
|
20
|
+
|----------|-------|
|
|
21
|
+
| Does the system actually run and produce correct observable output? | `verification-specialist` |
|
|
22
|
+
| Is the user experience coherent and are error states humane? | `product-specialist` |
|
|
23
|
+
| Does every line of shipped code trace back to a requirement, and is nothing missing from the spec? | **you** |
|
|
24
|
+
|
|
25
|
+
You depend on `verification-specialist`'s empirical evidence — you do not gather it yourself. If their report is not available, request it before producing a verdict.
|
|
26
|
+
|
|
27
|
+
## Process
|
|
28
|
+
|
|
29
|
+
Follow the `spec-conformance` skill end-to-end:
|
|
30
|
+
|
|
31
|
+
1. Resolve the spec source (plan file, JIRA key, Linear, GitHub issue, PRD).
|
|
32
|
+
2. Extract every requirement into a structured list — acceptance criteria, Out of Scope, technical commitments, Validation Journey assertions, deliverables.
|
|
33
|
+
3. Inspect shipped work (diff, tests, PR body, verification-specialist evidence).
|
|
34
|
+
4. Build the coverage matrix — every requirement gets a row with a status.
|
|
35
|
+
5. Detect scope creep and untraceable changes separately.
|
|
36
|
+
6. Produce the verdict.
|
|
37
|
+
|
|
38
|
+
## Output
|
|
39
|
+
|
|
40
|
+
Return the structured report defined in the skill. Never summarize or drop rows. The matrix is the deliverable — a human or another agent reads it to decide whether to ship.
|
|
41
|
+
|
|
42
|
+
## Rules
|
|
43
|
+
|
|
44
|
+
- **Require empirical evidence.** A requirement is not `MATCH` because code exists. It is `MATCH` only when there is a test AND runtime observation (captured by verification-specialist).
|
|
45
|
+
- **Scope creep is a distinct failure.** Do not fold `SCOPE_CREEP_VIOLATION` into "missing" or "untraceable." Scope creep means Out of Scope was violated — it blocks shipping.
|
|
46
|
+
- **Untraceable changes get surfaced, not judged.** Refactors and test helpers often land here. Surface them so the human can confirm intent; do not automatically fail.
|
|
47
|
+
- **If the spec itself is inadequate** (no acceptance criteria, no Out of Scope, no Validation Journey for runtime changes), the verdict is `DIVERGES` until the spec is tightened. Do not paper over an ambiguous spec with a generous match.
|
|
48
|
+
- **Never gather empirical evidence yourself.** That is verification-specialist's job. You read their report. If it's missing, block and ask.
|
|
49
|
+
- **Never approve your own work.** If you produced the implementation in this session, say so explicitly in the report and recommend the human double-check — self-review of conformance is weakest when the same mind built the thing.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Read a JIRA ticket with full scope — metadata, comments, remote PRs, linked tickets, epic siblings, subtasks"
|
|
3
|
+
allowed-tools: ["Skill"]
|
|
4
|
+
argument-hint: "<TICKET-ID>"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use the /lisa:jira-read-ticket skill to fetch the full scope of the JIRA ticket and its related graph. $ARGUMENTS
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Create or update a JIRA ticket with enforced relationships, Gherkin criteria, and metadata quality gates"
|
|
3
|
+
allowed-tools: ["Skill"]
|
|
4
|
+
argument-hint: "[TICKET-ID | <create-intent-description>]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use the /lisa:jira-write-ticket skill to create or update the JIRA ticket with full relationship discovery and quality enforcement. $ARGUMENTS
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Verify shipped work matches its spec — coverage matrix with scope-creep detection and verdict"
|
|
3
|
+
allowed-tools: ["Skill"]
|
|
4
|
+
argument-hint: "[plan-file | TICKET-KEY | issue-url]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use the /lisa:spec-conformance skill to compare shipped work against its spec and produce a coverage matrix with verdict. $ARGUMENTS
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jira-create
|
|
3
3
|
description: This skill should be used when creating JIRA epics, stories, and tasks from code files or descriptions. It analyzes the provided input, determines the appropriate issue hierarchy, and creates issues with comprehensive quality requirements including test-first development and documentation.
|
|
4
|
-
allowed-tools: ["Read", "Glob", "LS", "
|
|
4
|
+
allowed-tools: ["Read", "Glob", "LS", "Skill", "mcp__atlassian__getVisibleJiraProjects", "mcp__atlassian__getJiraProjectIssueTypesMetadata", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Create JIRA Issues from $ARGUMENTS
|
|
@@ -93,3 +93,9 @@ Default project: from jira-cli config (override via arguments)
|
|
|
93
93
|
Exclude unless requested: migration plans, performance tests
|
|
94
94
|
|
|
95
95
|
Execute the analysis and create the complete JIRA structure with proper parent-child relationships.
|
|
96
|
+
|
|
97
|
+
## Delegation to jira-write-ticket
|
|
98
|
+
|
|
99
|
+
For every individual ticket that will be created, delegate to the `jira-write-ticket` skill rather than calling `mcp__atlassian__createJiraIssue` directly. `jira-write-ticket` enforces description quality (Gherkin acceptance criteria, stakeholder/developer/assistant sections), relationship discovery (`blocks`, `is blocked by`, `relates to`, remote PR/Confluence/dashboard links), epic parent validation, and post-create verification.
|
|
100
|
+
|
|
101
|
+
This skill's role is to analyze the input and decide the hierarchy (which epics, which stories, which tasks, in what parent-child structure). `jira-write-ticket` handles the actual write with full quality gates.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-read-ticket
|
|
3
|
+
description: "Fetches the full scope of a JIRA ticket — metadata, description, acceptance criteria, all comments, remote links (PRs, Confluence, dashboards), issue links (blocks/is blocked by/relates to/duplicates/clones), epic parent with siblings, and subtasks. Produces a consolidated context bundle that downstream agents consume so they never act on a single ticket in isolation."
|
|
4
|
+
allowed-tools: ["Bash", "mcp__atlassian__getJiraIssue", "mcp__atlassian__getJiraIssueRemoteIssueLinks", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Read JIRA Ticket: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Fetch the full scope of the ticket AND its related graph. Downstream agents must never act on a ticket in isolation — always call this skill first so they see blockers, epic siblings, linked PRs, and historical comments.
|
|
10
|
+
|
|
11
|
+
Repository name for scoped comments and logs: `basename $(git rev-parse --show-toplevel)`.
|
|
12
|
+
|
|
13
|
+
## Phase 1 — Resolve Context
|
|
14
|
+
|
|
15
|
+
1. Call `mcp__atlassian__getAccessibleAtlassianResources` to get the cloud ID.
|
|
16
|
+
2. If $ARGUMENTS is not a ticket key (e.g. `PROJ-123`), stop and report. Do NOT guess.
|
|
17
|
+
|
|
18
|
+
## Phase 2 — Fetch Primary Ticket
|
|
19
|
+
|
|
20
|
+
Call `mcp__atlassian__getJiraIssue` for the target ticket. Extract and preserve:
|
|
21
|
+
|
|
22
|
+
### Metadata
|
|
23
|
+
|
|
24
|
+
- Key, summary, issue type, status, resolution
|
|
25
|
+
- Priority, assignee, reporter, creator
|
|
26
|
+
- Labels, components, fix versions, affects versions
|
|
27
|
+
- Sprint, story points, original/remaining estimate
|
|
28
|
+
- Created, updated, resolved dates
|
|
29
|
+
- Parent (epic link or parent issue)
|
|
30
|
+
- Custom fields relevant to the project (read every custom field — do not filter)
|
|
31
|
+
|
|
32
|
+
### Body
|
|
33
|
+
|
|
34
|
+
- Full description (preserve formatting)
|
|
35
|
+
- Acceptance criteria section if separately structured
|
|
36
|
+
- **Validation Journey** section if present (pass verbatim to downstream)
|
|
37
|
+
- Attachments list (names + URLs, do not download unless needed)
|
|
38
|
+
|
|
39
|
+
### Comments
|
|
40
|
+
|
|
41
|
+
Fetch ALL comments in chronological order. Do not truncate. For each:
|
|
42
|
+
- Author, timestamp, body
|
|
43
|
+
- Flag comments that contain: credentials, reproduction steps, status updates from stakeholders, decisions, or triage headers like `[repo-name]`
|
|
44
|
+
|
|
45
|
+
## Phase 3 — Fetch Remote Links
|
|
46
|
+
|
|
47
|
+
Call `mcp__atlassian__getJiraIssueRemoteIssueLinks`. For each remote link:
|
|
48
|
+
|
|
49
|
+
- **GitHub PR or commit** (`github.com/.../(pull|commit)/...`): run `gh pr view <url> --json title,state,body,mergedAt,reviewDecision,comments,reviews` (for PRs) or `gh api repos/<owner>/<repo>/commits/<sha>` (for commits). Capture title, state, body, unresolved review comments, merge status.
|
|
50
|
+
- **Confluence page**: capture title and URL. Do not fetch body unless a downstream task explicitly needs it.
|
|
51
|
+
- **Dashboard, log link, or external URL**: capture title and URL only.
|
|
52
|
+
|
|
53
|
+
If `gh` is not authenticated, note "gh auth required" and continue — do not abort.
|
|
54
|
+
|
|
55
|
+
## Phase 4 — Fetch Issue Links (Relationships)
|
|
56
|
+
|
|
57
|
+
Every linked ticket must be fetched. Do not skip any link type. For each link in the primary ticket's `issuelinks` field, group by type:
|
|
58
|
+
|
|
59
|
+
- `blocks` / `is blocked by`
|
|
60
|
+
- `relates to`
|
|
61
|
+
- `duplicates` / `is duplicated by`
|
|
62
|
+
- `clones` / `is cloned by`
|
|
63
|
+
- Any other custom link types configured in the project
|
|
64
|
+
|
|
65
|
+
For each linked ticket, call `mcp__atlassian__getJiraIssue` and capture:
|
|
66
|
+
|
|
67
|
+
- Key, summary, type, status, resolution
|
|
68
|
+
- Description (full, unless closed with resolution `Won't Do`/`Duplicate` — then summary only)
|
|
69
|
+
- Acceptance criteria
|
|
70
|
+
- Last 10 comments (chronological)
|
|
71
|
+
- Remote links (PR URLs and state only — skip deep fetch unless the link is `blocks` or `is blocked by`)
|
|
72
|
+
|
|
73
|
+
**Special handling for `is blocked by`:** fetch the full PR/commit details via `gh` for each blocker's remote links so the agent knows whether the blocker is actually shipped.
|
|
74
|
+
|
|
75
|
+
## Phase 5 — Fetch Epic Context
|
|
76
|
+
|
|
77
|
+
If the primary ticket has an epic parent (or IS an epic):
|
|
78
|
+
|
|
79
|
+
1. Fetch the epic itself via `mcp__atlassian__getJiraIssue` — full description, acceptance criteria, all comments, Validation Journey.
|
|
80
|
+
2. Find epic siblings via JQL:
|
|
81
|
+
```jql
|
|
82
|
+
"Epic Link" = <EPIC-KEY> AND key != <TICKET-KEY>
|
|
83
|
+
```
|
|
84
|
+
Use `mcp__atlassian__searchJiraIssuesUsingJql`. For each sibling capture: key, summary, type, status, assignee, priority.
|
|
85
|
+
3. Read each sibling's description at a SUMMARY level (first paragraph only) — the goal is to surface related in-flight work, not duplicate full content. If a sibling is `In Progress` or `In Review` with an assignee different from the current ticket, flag it prominently.
|
|
86
|
+
|
|
87
|
+
If the primary ticket IS an epic, also fetch all children via the JQL above.
|
|
88
|
+
|
|
89
|
+
## Phase 6 — Fetch Subtasks
|
|
90
|
+
|
|
91
|
+
If the primary ticket has subtasks, fetch each via `mcp__atlassian__getJiraIssue`: key, summary, type, status, assignee, description (first paragraph), acceptance criteria.
|
|
92
|
+
|
|
93
|
+
## Phase 7 — Assemble Context Bundle
|
|
94
|
+
|
|
95
|
+
Produce a single structured output that the caller can pass verbatim to downstream agents. Use this format:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
# Ticket Context: <KEY>
|
|
99
|
+
|
|
100
|
+
## Primary Ticket
|
|
101
|
+
- Key: <KEY>
|
|
102
|
+
- Type: <type>
|
|
103
|
+
- Status: <status>
|
|
104
|
+
- Priority: <priority>
|
|
105
|
+
- Assignee: <name>
|
|
106
|
+
- Epic: <epic-key> — <epic-summary>
|
|
107
|
+
- Sprint: <sprint>
|
|
108
|
+
- Labels: <labels>
|
|
109
|
+
- Components: <components>
|
|
110
|
+
|
|
111
|
+
### Description
|
|
112
|
+
<full description>
|
|
113
|
+
|
|
114
|
+
### Acceptance Criteria
|
|
115
|
+
<criteria>
|
|
116
|
+
|
|
117
|
+
### Validation Journey
|
|
118
|
+
<section or "None">
|
|
119
|
+
|
|
120
|
+
### Comments (<count>)
|
|
121
|
+
<chronological comments, flagged items called out>
|
|
122
|
+
|
|
123
|
+
### Attachments
|
|
124
|
+
<list>
|
|
125
|
+
|
|
126
|
+
## Remote Links
|
|
127
|
+
### Pull Requests (<count>)
|
|
128
|
+
- <url> — <title> — <state> — <reviewDecision>
|
|
129
|
+
<body summary + unresolved review comments>
|
|
130
|
+
|
|
131
|
+
### Confluence
|
|
132
|
+
- <title> — <url>
|
|
133
|
+
|
|
134
|
+
### Other
|
|
135
|
+
- <title> — <url>
|
|
136
|
+
|
|
137
|
+
## Issue Links
|
|
138
|
+
### Blocks (<count>)
|
|
139
|
+
<per-ticket block>
|
|
140
|
+
|
|
141
|
+
### Is Blocked By (<count>)
|
|
142
|
+
<per-ticket block with PR state>
|
|
143
|
+
|
|
144
|
+
### Relates To (<count>)
|
|
145
|
+
<per-ticket block>
|
|
146
|
+
|
|
147
|
+
### Duplicates / Clones
|
|
148
|
+
<per-ticket block>
|
|
149
|
+
|
|
150
|
+
## Epic Context
|
|
151
|
+
### Epic <EPIC-KEY> — <summary>
|
|
152
|
+
- Status: <status>
|
|
153
|
+
- Description: <full>
|
|
154
|
+
- Comments: <chronological>
|
|
155
|
+
- Validation Journey: <section or None>
|
|
156
|
+
|
|
157
|
+
### Siblings In-Flight (<count>)
|
|
158
|
+
- <KEY> — <status> — <assignee> — <summary> **[FLAG: in progress by other assignee]**
|
|
159
|
+
|
|
160
|
+
### Other Siblings (<count>)
|
|
161
|
+
- <KEY> — <status> — <summary>
|
|
162
|
+
|
|
163
|
+
## Subtasks (<count>)
|
|
164
|
+
- <KEY> — <status> — <assignee> — <summary>
|
|
165
|
+
|
|
166
|
+
## Summary for Downstream
|
|
167
|
+
- Full ticket count pulled: <N>
|
|
168
|
+
- Blockers still open: <list>
|
|
169
|
+
- Related in-flight work: <list>
|
|
170
|
+
- Relevant PRs: <list with state>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Rules
|
|
174
|
+
|
|
175
|
+
- Never summarize or truncate the primary ticket's description or Validation Journey.
|
|
176
|
+
- Never skip a link type, even if it seems unrelated — the agent downstream decides relevance.
|
|
177
|
+
- If a linked ticket returns an access error, capture the error and continue. Do not abort the read.
|
|
178
|
+
- Flag in-flight sibling work prominently so the caller can avoid duplicate implementation.
|
|
179
|
+
- If the ticket has no epic parent, state this explicitly — do not silently skip Phase 5.
|
|
180
|
+
- Output is pure context. This skill never modifies the ticket.
|