@codyswann/lisa 2.7.0 → 2.8.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/confluence-prd-intake.md +5 -5
- package/plugins/lisa/agents/github-agent.md +141 -0
- package/plugins/lisa/agents/github-build-intake.md +62 -0
- package/plugins/lisa/agents/github-prd-intake.md +64 -0
- package/plugins/lisa/agents/linear-prd-intake.md +5 -5
- package/plugins/lisa/agents/notion-prd-intake.md +5 -5
- package/plugins/lisa/commands/intake.md +2 -2
- package/plugins/lisa/commands/plan.md +2 -2
- package/plugins/lisa/rules/intent-routing.md +16 -11
- package/plugins/lisa/rules/tracker-resolution.md +76 -0
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +11 -11
- package/plugins/lisa/skills/{confluence-to-jira → confluence-to-tracker}/SKILL.md +31 -31
- package/plugins/lisa/skills/github-add-journey/SKILL.md +114 -0
- package/plugins/lisa/skills/github-build-intake/SKILL.md +188 -0
- package/plugins/lisa/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa/skills/github-evidence/SKILL.md +116 -0
- package/plugins/lisa/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +286 -0
- package/plugins/lisa/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa/skills/github-sync/SKILL.md +73 -0
- package/plugins/lisa/skills/github-to-tracker/SKILL.md +312 -0
- package/plugins/lisa/skills/github-validate-issue/SKILL.md +288 -0
- package/plugins/lisa/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa/skills/github-write-issue/SKILL.md +304 -0
- package/plugins/lisa/skills/implement/SKILL.md +4 -4
- package/plugins/lisa/skills/intake/SKILL.md +14 -4
- package/plugins/lisa/skills/jira-source-artifacts/SKILL.md +1 -1
- package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +3 -3
- package/plugins/lisa/skills/jira-verify/SKILL.md +1 -1
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +10 -10
- package/plugins/lisa/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +11 -11
- package/plugins/{src/base/skills/notion-to-jira → lisa/skills/notion-to-tracker}/SKILL.md +34 -34
- package/plugins/lisa/skills/plan/SKILL.md +8 -6
- package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +22 -12
- package/plugins/lisa/skills/product-walkthrough/SKILL.md +1 -1
- package/plugins/lisa/skills/spec-conformance/SKILL.md +2 -3
- package/plugins/lisa/skills/ticket-triage/SKILL.md +7 -7
- package/plugins/lisa/skills/tracker-add-journey/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +25 -0
- package/plugins/lisa/skills/tracker-create/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-journey/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-read/SKILL.md +25 -0
- package/plugins/lisa/skills/tracker-sync/SKILL.md +26 -0
- package/plugins/lisa/skills/tracker-validate/SKILL.md +35 -0
- package/plugins/lisa/skills/tracker-verify/SKILL.md +25 -0
- package/plugins/lisa/skills/tracker-write/SKILL.md +43 -0
- package/plugins/lisa/skills/verify/SKILL.md +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/skills/jira-verify/SKILL.md +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-rails/skills/jira-verify/SKILL.md +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/confluence-prd-intake.md +5 -5
- package/plugins/src/base/agents/github-agent.md +141 -0
- package/plugins/src/base/agents/github-build-intake.md +62 -0
- package/plugins/src/base/agents/github-prd-intake.md +64 -0
- package/plugins/src/base/agents/linear-prd-intake.md +5 -5
- package/plugins/src/base/agents/notion-prd-intake.md +5 -5
- package/plugins/src/base/commands/intake.md +2 -2
- package/plugins/src/base/commands/plan.md +2 -2
- package/plugins/src/base/rules/intent-routing.md +16 -11
- package/plugins/src/base/rules/tracker-resolution.md +76 -0
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +11 -11
- package/plugins/src/base/skills/{confluence-to-jira → confluence-to-tracker}/SKILL.md +31 -31
- package/plugins/src/base/skills/github-add-journey/SKILL.md +114 -0
- package/plugins/src/base/skills/github-build-intake/SKILL.md +188 -0
- package/plugins/src/base/skills/github-create/SKILL.md +101 -0
- package/plugins/src/base/skills/github-evidence/SKILL.md +116 -0
- package/plugins/src/base/skills/github-journey/SKILL.md +121 -0
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +286 -0
- package/plugins/src/base/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/src/base/skills/github-sync/SKILL.md +73 -0
- package/plugins/src/base/skills/github-to-tracker/SKILL.md +312 -0
- package/plugins/src/base/skills/github-validate-issue/SKILL.md +288 -0
- package/plugins/src/base/skills/github-verify/SKILL.md +29 -0
- package/plugins/src/base/skills/github-write-issue/SKILL.md +304 -0
- package/plugins/src/base/skills/implement/SKILL.md +4 -4
- package/plugins/src/base/skills/intake/SKILL.md +14 -4
- package/plugins/src/base/skills/jira-source-artifacts/SKILL.md +1 -1
- package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +3 -3
- package/plugins/src/base/skills/jira-verify/SKILL.md +1 -1
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +10 -10
- package/plugins/src/base/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +11 -11
- package/plugins/{lisa/skills/notion-to-jira → src/base/skills/notion-to-tracker}/SKILL.md +34 -34
- package/plugins/src/base/skills/plan/SKILL.md +8 -6
- package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +22 -12
- package/plugins/src/base/skills/product-walkthrough/SKILL.md +1 -1
- package/plugins/src/base/skills/spec-conformance/SKILL.md +2 -3
- package/plugins/src/base/skills/ticket-triage/SKILL.md +7 -7
- package/plugins/src/base/skills/tracker-add-journey/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +25 -0
- package/plugins/src/base/skills/tracker-create/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-journey/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-read/SKILL.md +25 -0
- package/plugins/src/base/skills/tracker-sync/SKILL.md +26 -0
- package/plugins/src/base/skills/tracker-validate/SKILL.md +35 -0
- package/plugins/src/base/skills/tracker-verify/SKILL.md +25 -0
- package/plugins/src/base/skills/tracker-write/SKILL.md +43 -0
- package/plugins/src/base/skills/verify/SKILL.md +1 -1
- package/plugins/src/expo/skills/jira-verify/SKILL.md +1 -1
- package/plugins/src/rails/skills/jira-verify/SKILL.md +1 -1
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: notion-to-
|
|
2
|
+
name: notion-to-tracker
|
|
3
3
|
description: >
|
|
4
|
-
Break down a Notion PRD into
|
|
5
|
-
shares a Notion PRD URL and wants it converted into
|
|
6
|
-
"create tickets from a PRD", "turn this PRD into
|
|
4
|
+
Break down a Notion PRD into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json). Use this skill whenever the user
|
|
5
|
+
shares a Notion PRD URL and wants it converted into tracker tickets, or asks to "break down a PRD",
|
|
6
|
+
"create tickets from a PRD", "turn this PRD into tickets", or similar. Also trigger when the user
|
|
7
7
|
mentions creating epics/stories/tasks from a Notion document. This skill handles the full pipeline:
|
|
8
8
|
fetching the PRD, analyzing comments, researching the codebase, identifying blockers, and creating
|
|
9
9
|
all tickets with empirical verification plans.
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# Notion PRD to
|
|
12
|
+
# Notion PRD to Tracker Breakdown
|
|
13
13
|
|
|
14
|
-
Convert a Notion PRD into a structured JIRA
|
|
14
|
+
Convert a Notion PRD into a structured ticket hierarchy in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json): Epics > Stories > Sub-tasks.
|
|
15
15
|
Each sub-task is scoped to exactly one repo and includes an empirical verification plan.
|
|
16
16
|
|
|
17
17
|
## Modes
|
|
18
18
|
|
|
19
19
|
This skill supports two modes, controlled by a `dry_run` flag in `$ARGUMENTS`:
|
|
20
20
|
|
|
21
|
-
- **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:
|
|
22
|
-
- **`dry_run: true`** (planning + validation only — no writes): run Phases 1, 1.5, 1.6, 2, 3, 4 to plan the hierarchy and draft each ticket spec, then call `lisa:
|
|
21
|
+
- **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:tracker-write`, run the preservation gate, report.
|
|
22
|
+
- **`dry_run: true`** (planning + validation only — no writes): run Phases 1, 1.5, 1.6, 2, 3, 4 to plan the hierarchy and draft each ticket spec, then call `lisa:tracker-validate` (with `--spec-only`) on every drafted ticket. Aggregate the per-ticket validator reports into a single dry-run report. **Skip Phase 5 (sub-task creation), Phase 5.5 (preservation gate), and Phase 6 (results report)** — none of those make sense without writes. Return the dry-run report so the caller (e.g. `lisa:notion-prd-intake`) can decide whether to proceed.
|
|
23
23
|
|
|
24
24
|
Dry-run output format:
|
|
25
25
|
|
|
26
26
|
```text
|
|
27
|
-
## notion-to-
|
|
27
|
+
## notion-to-tracker dry-run: <PRD title>
|
|
28
28
|
|
|
29
29
|
### Planned hierarchy
|
|
30
30
|
- Epic: <summary>
|
|
@@ -60,11 +60,11 @@ The `failures` array passes the validator's `Failure details` block through verb
|
|
|
60
60
|
|
|
61
61
|
The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJiraIssue`. It also never sets a Notion status — that is the orchestrating skill's responsibility.
|
|
62
62
|
|
|
63
|
-
## Hard Rule: All Writes Go Through `lisa:
|
|
63
|
+
## Hard Rule: All Writes Go Through `lisa:tracker-write`
|
|
64
64
|
|
|
65
|
-
**Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:
|
|
65
|
+
**Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:tracker-write` skill. Never call `mcp__atlassian__createJiraIssue`, `mcp__atlassian__editJiraIssue`, `mcp__atlassian__createIssueLink`, or any other Atlassian write tool directly from this skill or from any sub-agent it spawns.**
|
|
66
66
|
|
|
67
|
-
`lisa:
|
|
67
|
+
`lisa:tracker-write` enforces gates this skill does not:
|
|
68
68
|
- 3-audience description (Context / Technical Approach / Acceptance Criteria)
|
|
69
69
|
- Gherkin acceptance criteria
|
|
70
70
|
- Epic parent validation
|
|
@@ -73,7 +73,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
|
|
|
73
73
|
- Sign-in account and target environment recorded in description
|
|
74
74
|
- Post-create verification
|
|
75
75
|
|
|
76
|
-
Bypassing `lisa:
|
|
76
|
+
Bypassing `lisa:tracker-write` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. This is the most common failure mode this skill has had — calling `createJiraIssue` directly is a regression, not an optimization. The Atlassian read tools (`getJiraIssue`, `searchJiraIssuesUsingJql`, `getJiraIssueRemoteIssueLinks`, `getAccessibleAtlassianResources`, `getJiraProjectIssueTypesMetadata`, `getVisibleJiraProjects`) ARE allowed for context gathering and the Phase 5.5 preservation gate.
|
|
77
77
|
|
|
78
78
|
## Input
|
|
79
79
|
|
|
@@ -160,9 +160,9 @@ Walkthrough findings are attached to the originating Notion PRD as a comment ("C
|
|
|
160
160
|
|
|
161
161
|
### Phase 3: Create Epics
|
|
162
162
|
|
|
163
|
-
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:
|
|
163
|
+
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:tracker-write` in this phase. Instead, draft the epic spec (summary, description_body, artifacts) and validate it with `lisa:tracker-validate --spec-only`. Record the drafted spec (including a placeholder epic key like `DRY-RUN-EPIC-1`) for Phase 4 to use as parent references. In `dry_run: false` mode (default), proceed as described below.
|
|
164
164
|
|
|
165
|
-
For each PRD epic, **invoke the `lisa:
|
|
165
|
+
For each PRD epic, **invoke the `lisa:tracker-write` skill** (do not call `createJiraIssue` directly). Pass it everything it needs to enforce its quality gates:
|
|
166
166
|
|
|
167
167
|
- `project_key`: from `JIRA_PROJECT` config
|
|
168
168
|
- `issue_type`: `Epic`
|
|
@@ -175,14 +175,14 @@ For each PRD epic, **invoke the `lisa:jira-write-ticket` skill** (do not call `c
|
|
|
175
175
|
- Blockers and open questions
|
|
176
176
|
- Dependencies on other epics or PRDs
|
|
177
177
|
- A **Source Artifacts** section listing every artifact extracted in Phase 1.5 (grouped by domain)
|
|
178
|
-
- `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub, and anyone working on the epic or its descendants must be able to reach the full set from one place. No filtering at the epic level. `lisa:
|
|
178
|
+
- `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub, and anyone working on the epic or its descendants must be able to reach the full set from one place. No filtering at the epic level. `lisa:tracker-write` Phase 4c attaches them as remote links.
|
|
179
179
|
- `priority`, `labels`, `components`, `fix_version`: as appropriate
|
|
180
180
|
|
|
181
181
|
Capture the returned epic key — Phase 4 needs it as the parent for stories.
|
|
182
182
|
|
|
183
183
|
### Phase 4: Create Stories
|
|
184
184
|
|
|
185
|
-
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:
|
|
185
|
+
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:tracker-write` in this phase. Instead, draft each story spec and validate it with `lisa:tracker-validate --spec-only`. Use placeholder keys (e.g. `DRY-RUN-STORY-1.1`) for any downstream references. In `dry_run: false` mode (default), proceed as described below.
|
|
186
186
|
|
|
187
187
|
For each Epic, plan two kinds of stories:
|
|
188
188
|
- **One "X.0 Setup" story** for data model and infrastructure prerequisites (new entities, migrations, new fields, infrastructure like S3 buckets or SQS queues)
|
|
@@ -193,24 +193,24 @@ For each Epic, plan two kinds of stories:
|
|
|
193
193
|
- "Squad Planning" -> `[SP-1.1]`
|
|
194
194
|
- Use your judgment for other PRDs
|
|
195
195
|
|
|
196
|
-
For each story, **invoke `lisa:
|
|
196
|
+
For each story, **invoke `lisa:tracker-write`** with:
|
|
197
197
|
|
|
198
198
|
- `project_key`: from `JIRA_PROJECT` config
|
|
199
199
|
- `issue_type`: `Story`
|
|
200
|
-
- `epic_parent`: the Epic key captured in Phase 3 (mandatory — `lisa:
|
|
200
|
+
- `epic_parent`: the Epic key captured in Phase 3 (mandatory — `lisa:tracker-write` rejects non-bug, non-epic tickets without an epic parent)
|
|
201
201
|
- `summary`: prefixed per the naming convention above
|
|
202
202
|
- `description_body`: a draft of the 3-audience description containing:
|
|
203
203
|
- **Context / Business Value**: the user story statement from the PRD
|
|
204
204
|
- **Technical Approach**: notes from engineering comments and Phase 2 codebase research
|
|
205
|
-
- **Acceptance Criteria** (Gherkin) derived from the functional requirements — `lisa:
|
|
205
|
+
- **Acceptance Criteria** (Gherkin) derived from the functional requirements — `lisa:tracker-write` will reject prose-only acceptance criteria
|
|
206
206
|
- Blockers with recommendation + alternatives (if any), under `## Open Questions`
|
|
207
207
|
- A **Source Artifacts** section listing the artifacts inherited from the epic that match this story's scope (see propagation rules below)
|
|
208
|
-
- `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below — `lisa:
|
|
208
|
+
- `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below — `lisa:tracker-write` Phase 4c attaches them as remote links
|
|
209
209
|
- `priority`, `labels`, `components`, `fix_version`: as appropriate
|
|
210
210
|
|
|
211
211
|
Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
|
|
212
212
|
|
|
213
|
-
**Inherit domain-matching artifacts as story remote links**. For each story, the artifact set passed to `lisa:
|
|
213
|
+
**Inherit domain-matching artifacts as story remote links**. For each story, the artifact set passed to `lisa:tracker-write` should be the Phase 1.5 artifacts whose domain matches the story's scope:
|
|
214
214
|
|
|
215
215
|
| Story type | Inherits domains |
|
|
216
216
|
|------------|------------------|
|
|
@@ -223,10 +223,10 @@ When classification is ambiguous, err on the side of inclusion — a developer c
|
|
|
223
223
|
|
|
224
224
|
### Phase 5: Create Sub-tasks
|
|
225
225
|
|
|
226
|
-
Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:
|
|
226
|
+
Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:tracker-write` for each sub-task — no agent may call `createJiraIssue` directly.** This is non-negotiable; see the Agent Prompt Template at the bottom of this skill for the exact instructions to pass.
|
|
227
227
|
|
|
228
228
|
Each sub-task MUST:
|
|
229
|
-
1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`. `lisa:
|
|
229
|
+
1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`. `lisa:tracker-write` enforces single-repo scope on Sub-task; cross-repo sub-tasks will be rejected and must be split before delegation.
|
|
230
230
|
2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
|
|
231
231
|
|
|
232
232
|
**Verification plan examples by stack:**
|
|
@@ -234,11 +234,11 @@ Each sub-task MUST:
|
|
|
234
234
|
- **Frontend web**: Playwright browser tests (login with test user, navigate, interact, screenshot)
|
|
235
235
|
- **Infrastructure**: `cdk synth` / `terraform plan` verification, CLI checks after deploy
|
|
236
236
|
|
|
237
|
-
Use the test user credentials from config for all verification plans. The credentials are passed to `lisa:
|
|
237
|
+
Use the test user credentials from config for all verification plans. The credentials are passed to `lisa:tracker-write` as the sign-in account so it can record them in the description per its own rules.
|
|
238
238
|
|
|
239
|
-
For each sub-task, the spawned agent invokes `lisa:
|
|
239
|
+
For each sub-task, the spawned agent invokes `lisa:tracker-write` with `issue_type: "Sub-task"` and `parent` set to the Story key. The Story key is the parent — the epic relationship is inherited transitively.
|
|
240
240
|
|
|
241
|
-
Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task — that creates noise. The only exception is when a sub-task depends on an artifact that the parent story doesn't (e.g., a sub-task spec'd from a specific Figma frame that the broader story doesn't cite) — in that case, pass the specific artifact in the `artifacts` parameter to `lisa:
|
|
241
|
+
Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task — that creates noise. The only exception is when a sub-task depends on an artifact that the parent story doesn't (e.g., a sub-task spec'd from a specific Figma frame that the broader story doesn't cite) — in that case, pass the specific artifact in the `artifacts` parameter to `lisa:tracker-write`.
|
|
242
242
|
|
|
243
243
|
### Phase 5.5: Artifact Preservation Gate (mandatory)
|
|
244
244
|
|
|
@@ -246,9 +246,9 @@ Run the preservation gate defined in `lisa:jira-source-artifacts` §8 against th
|
|
|
246
246
|
|
|
247
247
|
To run the gate, this skill must:
|
|
248
248
|
|
|
249
|
-
1. Pull the remote links of every epic and story created in this run via `
|
|
249
|
+
1. Pull the remote links of every epic and story created in this run via `lisa:tracker-read (vendor-neutral; dispatches to jira-read-ticket or github-read-issue)`.
|
|
250
250
|
2. Apply the §8 preservation matrix and verdict rules.
|
|
251
|
-
3. If the gate fails: list each dropped/misrouted artifact (domain, title, source page, why it was dropped) and either re-attach via `lisa:
|
|
251
|
+
3. If the gate fails: list each dropped/misrouted artifact (domain, title, source page, why it was dropped) and either re-attach via `lisa:tracker-write` (UPDATE mode) or stop and ask the human. Never silently proceed past a gate failure.
|
|
252
252
|
4. If the gate passes: print the matrix compactly and proceed to Phase 6.
|
|
253
253
|
|
|
254
254
|
This gate is not optional. Skipping it is the failure mode the architecture exists to prevent.
|
|
@@ -287,13 +287,13 @@ When delegating to agents, provide this context. **The "MUST invoke jira-write-t
|
|
|
287
287
|
```text
|
|
288
288
|
Create JIRA sub-tasks in the [PROJECT] project at [CLOUD_ID].
|
|
289
289
|
|
|
290
|
-
CRITICAL: For each sub-task, invoke the `lisa:
|
|
291
|
-
Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:
|
|
290
|
+
CRITICAL: For each sub-task, invoke the `lisa:tracker-write` skill via the Skill tool.
|
|
291
|
+
Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:tracker-write` skill
|
|
292
292
|
enforces required quality gates (Gherkin acceptance criteria, 3-audience description,
|
|
293
293
|
single-repo scope, sign-in/environment fields, post-create verification). Bypassing it
|
|
294
294
|
produces broken tickets that downstream skills (triage, journey, evidence) cannot use.
|
|
295
295
|
|
|
296
|
-
For each sub-task, invoke `lisa:
|
|
296
|
+
For each sub-task, invoke `lisa:tracker-write` with:
|
|
297
297
|
- issue_type: "Sub-task"
|
|
298
298
|
- parent: the parent story key
|
|
299
299
|
- project_key: [PROJECT]
|
|
@@ -309,9 +309,9 @@ For each sub-task, invoke `lisa:jira-write-ticket` with:
|
|
|
309
309
|
Each sub-task must:
|
|
310
310
|
1. Be scoped to ONE repo only — repo named in brackets in the summary
|
|
311
311
|
2. Include the Empirical Verification Plan in the description
|
|
312
|
-
3. Be created via `lisa:
|
|
312
|
+
3. Be created via `lisa:tracker-write`, not via direct MCP calls
|
|
313
313
|
|
|
314
|
-
If `lisa:
|
|
314
|
+
If `lisa:tracker-write` rejects a sub-task (cross-repo scope, missing Gherkin, missing
|
|
315
315
|
sign-in, etc.), fix the input and re-invoke. Do NOT fall back to a direct
|
|
316
316
|
`createJiraIssue` call to bypass the gate.
|
|
317
317
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan
|
|
3
|
-
description: "Decompose a single PRD or specification into ordered work items in the configured tracker. Vendor-agnostic — the source can be a Notion PRD URL, a Confluence PRD URL, a Linear project URL, an existing JIRA epic key, a markdown file, or a free-form description; the destination tracker is whatever the project is configured to use (JIRA
|
|
3
|
+
description: "Decompose a single PRD or specification into ordered work items in the configured tracker. Vendor-agnostic — the source can be a Notion PRD URL, a Confluence PRD URL, a Linear project URL, a GitHub Issue URL, an existing JIRA epic key, a markdown file, or a free-form description; the destination tracker is whatever the project is configured to use via `.lisa.config.json` `tracker` (JIRA or GitHub Issues). Single-PRD mode only — for batch scanning of all Ready PRDs in a queue, use the lisa:intake skill."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -20,14 +20,16 @@ Detect the input type from `$ARGUMENTS` and route to the appropriate source skil
|
|
|
20
20
|
|
|
21
21
|
| If `$ARGUMENTS` is... | Hand off to |
|
|
22
22
|
|------------------------|-------------|
|
|
23
|
-
| A Notion **page** URL or page ID (single PRD) | `lisa:notion-to-
|
|
23
|
+
| A Notion **page** URL or page ID (single PRD) | `lisa:notion-to-tracker` (with the PRD URL; runs the full pipeline: extract artifacts → walk live product → validate → write tickets → coverage audit) |
|
|
24
24
|
| A Notion **database** URL or database ID | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a database. |
|
|
25
|
-
| A Confluence **page** URL containing `/wiki/spaces/<KEY>/pages/<ID>/...` (single PRD) | `lisa:confluence-to-
|
|
25
|
+
| A Confluence **page** URL containing `/wiki/spaces/<KEY>/pages/<ID>/...` (single PRD) | `lisa:confluence-to-tracker` (with the PRD URL; same full pipeline as the Notion path) |
|
|
26
26
|
| A Confluence **space** URL (`/wiki/spaces/<KEY>` with no `/pages/...`) | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a space. |
|
|
27
|
-
| A Linear **project** URL (`https://linear.app/<workspace>/project/<slug>-<id>`) | `lisa:linear-to-
|
|
27
|
+
| A Linear **project** URL (`https://linear.app/<workspace>/project/<slug>-<id>`) | `lisa:linear-to-tracker` (with the project URL; same full pipeline as the Notion / Confluence paths). The Linear project's description, attached documents, and sub-issues form the PRD body. |
|
|
28
28
|
| A Linear **workspace** URL (`https://linear.app/<workspace>` with no `/project/...`) or **team** URL | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a workspace or team. |
|
|
29
29
|
| A JIRA ticket ID/URL of an Epic (existing epic *is* the spec) | `lisa:jira-agent` (read epic, decompose into stories/sub-tasks) |
|
|
30
|
-
| A GitHub
|
|
30
|
+
| A GitHub **issue** URL (`https://github.com/<org>/<repo>/issues/<number>`) or `<org>/<repo>#<number>` token (single PRD) | `lisa:github-to-tracker` (with the issue ref; runs the full pipeline: extract artifacts → walk live product → validate → write tickets → coverage audit). The destination tracker is read from `.lisa.config.json` `tracker`. |
|
|
31
|
+
| A GitHub **repository** URL or `<org>/<repo>` token (no issue number) | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a GitHub repo. |
|
|
32
|
+
| A GitHub Issue URL of a build-side ticket (`type:Epic` / `type:Story` / etc., not `prd-*`-labelled) when `tracker = github` | `lisa:github-agent` (read issue, decompose into Sub-tasks). Symmetric counterpart to the JIRA-Epic branch above. |
|
|
31
33
|
| A file path (`@plan.md`, `./spec.md`) | Read the file as the spec; run the Plan flow's core decomposition with the file content as input. |
|
|
32
34
|
| A plain-text description | Use the description as the spec; run the Plan flow's core decomposition. |
|
|
33
35
|
|
|
@@ -39,4 +41,4 @@ Execute the **Plan** flow as defined in the `intent-routing` rule (loaded via th
|
|
|
39
41
|
|
|
40
42
|
## Output
|
|
41
43
|
|
|
42
|
-
Work items in the configured tracker (JIRA
|
|
44
|
+
Work items in the configured tracker (JIRA or GitHub Issues, per `.lisa.config.json` `tracker`) with acceptance criteria, dependencies, and recommended skills/agents per item. Ordered by dependency. If the specification cannot be decomposed without further clarification, stop and report what is missing.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prd-ticket-coverage
|
|
3
|
-
description: "Verifies that every requirement in a PRD (Notion, Confluence, or
|
|
4
|
-
allowed-tools: ["Skill", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources", "mcp__linear-server__get_project", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__list_comments"]
|
|
3
|
+
description: "Verifies that every requirement in a PRD (Notion, Confluence, Linear, or GitHub Issues) is covered by at least one created destination ticket (JIRA or GitHub Issues) — no silent drops. Parses the PRD into atomic items (goals, user stories, functional/non-functional requirements, acceptance criteria, important notes), maps each to the created tickets, and produces a coverage matrix and verdict (COMPLETE / COMPLETE_WITH_SCOPE_CREEP / GAPS_FOUND / NO_TICKETS_FOUND). Used by notion-prd-intake / confluence-prd-intake / linear-prd-intake / github-prd-intake post-write to gate the Ticketed transition; can also be invoked standalone for after-the-fact audits."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources", "mcp__linear-server__get_project", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__list_comments"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# PRD Ticket Coverage Audit: $ARGUMENTS
|
|
@@ -11,15 +11,21 @@ allowed-tools: ["Skill", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_
|
|
|
11
11
|
1. A PRD URL alone — auto-discover created tickets via the PRD's epic remote link.
|
|
12
12
|
2. A PRD URL plus an explicit list of ticket keys — `<PRD URL> tickets=[KEY-1,KEY-2,...]`. Use this when called from `lisa:notion-prd-intake` or `lisa:confluence-prd-intake` (which know the keys they just created).
|
|
13
13
|
|
|
14
|
-
The PRD URL can be a **Notion page URL**, a **Confluence page URL**,
|
|
14
|
+
The PRD URL can be a **Notion page URL**, a **Confluence page URL**, a **Linear project URL**, or a **GitHub issue URL**. Detect the vendor from the host:
|
|
15
15
|
|
|
16
16
|
- `notion.so` / `notion.site` → Notion. Fetch with `mcp__claude_ai_Notion__notion-fetch` (`include_discussions: true`) and `mcp__claude_ai_Notion__notion-get-comments`.
|
|
17
17
|
- Atlassian Confluence host (e.g. `*.atlassian.net/wiki/...`) → Confluence. Fetch with `mcp__atlassian__getConfluencePage`, `mcp__atlassian__getConfluencePageDescendants` (for child epic pages), `mcp__atlassian__getConfluencePageFooterComments`, `mcp__atlassian__getConfluencePageInlineComments`, and `mcp__atlassian__getConfluenceCommentChildren` for nested replies.
|
|
18
18
|
- `linear.app` host → Linear. Fetch with `mcp__linear-server__get_project` (capture description, labels, state, attached resources), `mcp__linear-server__list_documents({projectId})` + `mcp__linear-server__get_document` per attached document, `mcp__linear-server__list_issues({project})` for sub-issues that act as child epics / user stories, and `mcp__linear-server__list_comments({issueId})` per sub-issue for decisions and engineering notes. Comments do not exist on the project itself in the MCP surface — sub-issue comments are the substitute.
|
|
19
|
+
- `github.com` host → GitHub Issues. Fetch with the `gh` CLI (no GitHub MCP — Lisa uses the CLI exclusively for GitHub):
|
|
20
|
+
- `gh issue view <number> --repo <org>/<repo> --json number,title,body,labels,milestone,assignees,author,createdAt,comments,url` for the PRD body and comments.
|
|
21
|
+
- `gh api graphql` with the `subIssues` field for native sub-issue children (these stand in for child epic pages — see `lisa:github-read-issue` Phase 3 for the exact query).
|
|
22
|
+
- `gh issue view <child-num> --repo <org>/<repo> --json body,comments` per child sub-issue, recursively to depth 3.
|
|
19
23
|
|
|
20
|
-
All
|
|
24
|
+
All four vendors produce the same downstream artifact-extraction and coverage-matrix logic — only the fetch surface differs. The rest of this skill is vendor-agnostic.
|
|
21
25
|
|
|
22
|
-
Verify that every atomic item in the PRD is covered by at least one of the listed/discovered
|
|
26
|
+
Verify that every atomic item in the PRD is covered by at least one of the listed/discovered destination tickets. The output gates whether the PRD's lifecycle should remain at `Ticketed` (Notion `Status = Ticketed`, Confluence / Linear / GitHub `prd-ticketed` label) or revert to `Blocked`.
|
|
27
|
+
|
|
28
|
+
The destination tickets are read via `lisa:tracker-read` (which dispatches to `lisa:jira-read-ticket` or `lisa:github-read-issue` per `.lisa.config.json` `tracker`) so this skill itself stays agnostic of which tracker hosts the work.
|
|
23
29
|
|
|
24
30
|
## Why this exists
|
|
25
31
|
|
|
@@ -36,16 +42,20 @@ Per-ticket gates (`lisa:jira-validate-ticket`) prove each created ticket is well
|
|
|
36
42
|
- **Notion**: `notion-fetch` with `include_discussions: true`. Capture: title, body, child Epic pages, all comment threads.
|
|
37
43
|
- **Confluence**: `getConfluencePage` (capture title, body, labels), `getConfluencePageFooterComments` + `getConfluencePageInlineComments` (capture all comments; walk replies via `getConfluenceCommentChildren` for any thread with children).
|
|
38
44
|
- **Linear**: `get_project` (capture name, description, labels, state, attached resources). Capture sub-issues via `list_issues({project})` and per-issue comments via `list_comments({issueId})`.
|
|
39
|
-
|
|
45
|
+
- **GitHub**: `gh issue view --json` for the source PRD issue (title, body, labels, comments). Capture sub-issues via the GraphQL `subIssues` traversal.
|
|
46
|
+
3. If the PRD has child Epic sub-pages / sub-issues (a multi-epic PRD), fetch each in parallel:
|
|
40
47
|
- **Notion**: `notion-fetch` per child page with `include_discussions: true`.
|
|
41
48
|
- **Confluence**: enumerate descendants via `getConfluencePageDescendants`, then `getConfluencePage` per child plus its comment streams.
|
|
42
49
|
- **Linear**: enumerate attached documents via `list_documents({projectId})` and fetch each via `get_document`. Treat each document as an extra body source. Sub-issues themselves stand in for "child epic pages" — their descriptions and comments are already captured in step 2.
|
|
50
|
+
- **GitHub**: enumerate native sub-issues via `gh api graphql` (`subIssues` field), then `gh issue view <child-num> --json body,comments` per child. Recurse to depth 3.
|
|
43
51
|
The audit walks the full PRD tree.
|
|
44
|
-
4. If `tickets=[...]` not provided, locate the
|
|
45
|
-
- Looking for a
|
|
46
|
-
- Searching
|
|
52
|
+
4. If `tickets=[...]` not provided, locate the destination Epic by:
|
|
53
|
+
- Looking for a destination URL in the PRD body, comments, or the PRD's most recent "Ticketed by Claude" comment posted by `lisa:notion-prd-intake` / `lisa:confluence-prd-intake` / `lisa:linear-prd-intake` / `lisa:github-prd-intake` (for Linear, this comment lives on the project's sentinel feedback issue; for the others, it lives on the PRD page / issue itself).
|
|
54
|
+
- Searching the destination tracker via `lisa:tracker-read` (or directly via `searchJiraIssuesUsingJql` / `gh issue list --search`) for an epic whose summary or description references the PRD title or project ID.
|
|
47
55
|
- If no epic found, return verdict `NO_TICKETS_FOUND` with a clear remediation — coverage cannot be assessed without the ticket set.
|
|
48
|
-
5. Once the epic is known, fetch all child stories and sub-tasks
|
|
56
|
+
5. Once the epic is known, fetch all child stories and sub-tasks:
|
|
57
|
+
- **JIRA destination**: JQL `"Epic Link" = <EPIC-KEY>` and recursively for sub-tasks.
|
|
58
|
+
- **GitHub destination**: `gh api graphql` `subIssues` traversal of the Epic, recursively for sub-tasks.
|
|
49
59
|
|
|
50
60
|
### Phase 2 — Extract atomic PRD items
|
|
51
61
|
|
|
@@ -147,7 +157,7 @@ Atomic PRD items extracted: <n>
|
|
|
147
157
|
### Scope-creep count: <n>
|
|
148
158
|
```
|
|
149
159
|
|
|
150
|
-
`prd_anchor` and `prd_section` are built the same way as in `lisa:notion-to-
|
|
160
|
+
`prd_anchor` and `prd_section` are built the same way as in `lisa:notion-to-tracker` / `lisa:confluence-to-tracker` / `lisa:linear-to-tracker` / `lisa:github-to-tracker`. For Notion, `prd_anchor` is the `selection_with_ellipsis` start/end snippet; for Confluence, it's the inline-comment selection text accepted by `createConfluenceInlineComment`; for Linear, it's a sub-issue identifier (e.g. `LIN-123`) when the gap maps to a specific issue, otherwise `null` (the caller posts unanchored Linear gaps on the project's sentinel feedback issue); for GitHub, it's the section heading from the PRD issue body when the gap traces to a specific section, otherwise `null` (the caller approximates inline anchoring by quoting a body excerpt at the top of the comment). The downstream caller knows which vendor it's writing to and uses the right API; this skill just emits the anchor that vendor expects.
|
|
151
161
|
|
|
152
162
|
`category` is drawn from the same fixed taxonomy used by `lisa:jira-validate-ticket` so downstream callers can apply one consistent comment-formatting policy. Most coverage gaps map to `scope` (item not represented in any ticket) or `product-clarity` (item too vague to map). Use `acceptance-criteria` for missing pass/fail conditions and `design-ux` for missing visuals.
|
|
153
163
|
|
|
@@ -157,4 +167,4 @@ Atomic PRD items extracted: <n>
|
|
|
157
167
|
- Never silently drop a PRD item from extraction. If an item is ambiguous about whether it's scope, include it in extraction with type `ambiguous` and let the matching phase resolve it. The point of the audit is to catch silent drops; the audit can't have its own.
|
|
158
168
|
- Be explicit about confidence in matches — the matrix is for humans to skim; vague matches help no one. If a match is rule-3 ("scope inheritance"), say so.
|
|
159
169
|
- Scope creep is INFORMATIONAL. It is normal for an agent to add infra tickets (`X.0 Setup`) the PRD doesn't explicitly enumerate. Only flag scope creep when the ticket genuinely doesn't trace to PRD content AND isn't standard scaffolding.
|
|
160
|
-
- The `GAPS_FOUND` verdict is the gate. The caller (e.g. `lisa:notion-prd-intake`, `lisa:confluence-prd-intake`, `lisa:linear-prd-intake`) uses it to decide whether to revert the lifecycle from `Ticketed` to `Blocked`.
|
|
170
|
+
- The `GAPS_FOUND` verdict is the gate. The caller (e.g. `lisa:notion-prd-intake`, `lisa:confluence-prd-intake`, `lisa:linear-prd-intake`, `lisa:github-prd-intake`) uses it to decide whether to revert the lifecycle from `Ticketed` to `Blocked`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: product-walkthrough
|
|
3
|
-
description: "Methodology for evaluating the live product via a real browser (Playwright MCP) when planning work or evaluating a PRD. Reading a PRD or a mock without seeing the current product produces tickets that misjudge the change — this skill grounds the analysis in what actually exists today. Invoke this skill from notion-to-
|
|
3
|
+
description: "Methodology for evaluating the live product via a real browser (Playwright MCP) when planning work or evaluating a PRD. Reading a PRD or a mock without seeing the current product produces tickets that misjudge the change — this skill grounds the analysis in what actually exists today. Invoke this skill from notion-to-tracker (Phase 2b live-product walkthrough), jira-create, and any PRD intake flow whose work touches existing user-facing surfaces."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read", "mcp__plugin_playwright_playwright__browser_navigate", "mcp__plugin_playwright_playwright__browser_snapshot", "mcp__plugin_playwright_playwright__browser_take_screenshot", "mcp__plugin_playwright_playwright__browser_click", "mcp__plugin_playwright_playwright__browser_type", "mcp__plugin_playwright_playwright__browser_select_option", "mcp__plugin_playwright_playwright__browser_fill_form", "mcp__plugin_playwright_playwright__browser_press_key", "mcp__plugin_playwright_playwright__browser_hover", "mcp__plugin_playwright_playwright__browser_navigate_back", "mcp__plugin_playwright_playwright__browser_resize", "mcp__plugin_playwright_playwright__browser_tabs", "mcp__plugin_playwright_playwright__browser_console_messages", "mcp__plugin_playwright_playwright__browser_network_requests", "mcp__plugin_playwright_playwright__browser_wait_for", "mcp__plugin_playwright_playwright__browser_close"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -24,10 +24,9 @@ Based on the source, load the full spec:
|
|
|
24
24
|
| Source | How to Load |
|
|
25
25
|
|--------|-------------|
|
|
26
26
|
| Plan file (`.md`) | `Read` the file |
|
|
27
|
-
| JIRA key | Invoke `/jira-read-ticket
|
|
27
|
+
| JIRA key or GitHub issue ref | Invoke `/tracker-read <ref>` (vendor-neutral; dispatches to `/jira-read-ticket` or `/github-read-issue` per `.lisa.config.json` `tracker`) to get the full context bundle (primary ticket + epic / parent + linked tickets) |
|
|
28
28
|
| Linear key | Fetch via Linear MCP if available; else `Bash` with Linear CLI; else report "Linear reader unavailable" |
|
|
29
|
-
|
|
|
30
|
-
| PRD | `Read` the file or fetch via Notion MCP if it's a Notion URL |
|
|
29
|
+
| PRD | `Read` the file or fetch via Notion / Confluence MCP, or `gh issue view` for a GitHub PRD |
|
|
31
30
|
|
|
32
31
|
## Phase 2 — Extract Requirements
|
|
33
32
|
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ticket-triage
|
|
3
|
-
description: "Analytical triage gate for JIRA
|
|
3
|
+
description: "Analytical triage gate for tickets in the configured destination tracker (JIRA or GitHub Issues). Detects requirement ambiguities, identifies edge cases from codebase analysis, and plans verification methodology. Posts findings to the ticket and produces a verdict (BLOCKED/PASSED_WITH_FINDINGS/PASSED) that gates whether implementation can proceed. Vendor-neutral: the caller (jira-agent or github-agent) is responsible for fetching the ticket via lisa:tracker-read, running the pre-flight gate via lisa:tracker-verify, and posting findings via the matching vendor comment tool."
|
|
4
4
|
allowed-tools: ["Read", "Glob", "Grep", "Bash"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Ticket Triage: $ARGUMENTS
|
|
8
8
|
|
|
9
|
-
Perform analytical triage on the
|
|
9
|
+
Perform analytical triage on the ticket. The caller MUST have run `lisa:tracker-read` (or its vendor-specific underlying skill — `lisa:jira-read-ticket` for JIRA, `lisa:github-read-issue` for GitHub) first and provided the resulting context bundle — which includes the primary ticket, all linked tickets (blocks / is blocked by / relates to / duplicates), parent (Epic in JIRA, parent sub-issue in GitHub), siblings, sub-tasks / sub-issues, and remote PR state. Do not triage from a bare ticket summary — if the bundle is missing link or parent context, stop and instruct the caller to run `/tracker-read` first.
|
|
10
10
|
|
|
11
11
|
Repository name for scoped labels and comment headers: determine via `basename $(git rev-parse --show-toplevel)`.
|
|
12
12
|
|
|
13
13
|
## Phase 0 -- Pre-flight Description Gate
|
|
14
14
|
|
|
15
|
-
Before any analytical work, confirm the ticket carries the content an implementer needs to start. The caller should already have run `lisa:
|
|
15
|
+
Before any analytical work, confirm the ticket carries the content an implementer needs to start. The caller should already have run `lisa:tracker-verify`; this phase consumes its output. If `lisa:tracker-verify` returned `FAIL` for any of the following, emit `BLOCKED` immediately with the missing-requirements list and skip to Phase 6:
|
|
16
16
|
|
|
17
|
-
- Epic parent
|
|
17
|
+
- Parent missing (Epic parent for JIRA non-bug-non-epic; parent sub-issue for GitHub non-bug-non-epic)
|
|
18
18
|
- Description quality failures (no Gherkin acceptance criteria, missing audience sections)
|
|
19
19
|
- Validation Journey missing on a runtime-behavior ticket
|
|
20
20
|
- Target backend environment missing on a runtime-behavior ticket
|
|
21
21
|
- Sign-in credentials missing on a ticket that touches authenticated surfaces
|
|
22
22
|
- Single-repo scope violated (Bug / Task / Sub-task spanning repos)
|
|
23
|
-
- Relationship discovery missing (no links AND no documented git+
|
|
23
|
+
- Relationship discovery missing (no links AND no documented git + tracker-search outcome)
|
|
24
24
|
|
|
25
|
-
The caller (jira-agent) is responsible for transitioning the ticket to `Blocked
|
|
25
|
+
The caller (jira-agent or github-agent) is responsible for transitioning the ticket to `Blocked` (JIRA status) or relabeling to `status:blocked` (GitHub), reassigning to the **Reporter / original author**, and posting a comment listing the missing requirements. This skill only emits the verdict and the missing-requirements list.
|
|
26
26
|
|
|
27
|
-
If `lisa:
|
|
27
|
+
If `lisa:tracker-verify` returned `PASS` for all the above, proceed to Phase 1.
|
|
28
28
|
|
|
29
29
|
## Phase 1 -- Relevance Check
|
|
30
30
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-add-journey
|
|
3
|
+
description: "Vendor-neutral wrapper for appending a Validation Journey section to an existing ticket/issue. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-add-journey or lisa:github-add-journey."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Add Journey: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor skill.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-add-journey` with `$ARGUMENTS` verbatim. Arg: a JIRA ticket key.
|
|
18
|
+
- `github` → invoke `lisa:github-add-journey` with `$ARGUMENTS` verbatim. Arg: `org/repo#<number>` or a GitHub issue URL.
|
|
19
|
+
3. Pass through the output.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- The Validation Journey content format is identical across both vendors (markdown sections with `[EVIDENCE: name]` markers). The only difference is how the section is appended — JIRA via `editJiraIssue`, GitHub via `gh issue edit --body-file`.
|
|
24
|
+
- If the ticket already has a Validation Journey, the vendor skill reports it and stops. This shim does not retry.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-build-intake
|
|
3
|
+
description: "Vendor-neutral wrapper for the build-queue batch scanner. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-build-intake (JQL/project-key queue) or lisa:github-build-intake (GitHub repo queue keyed off the `status:ready` label). Counterpart to lisa:intake's PRD-side dispatchers."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Build Intake: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor build-queue scanner.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a JIRA project key (e.g., `SE`) or a JQL filter.
|
|
18
|
+
- `github` → invoke `lisa:github-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a GitHub `org/repo` token or a full GitHub repo URL.
|
|
19
|
+
3. Pass through the cycle summary verbatim.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Single cycle per invocation — the vendor skill processes the current `Ready` set and exits.
|
|
24
|
+
- The vendor skills run their own pre-flight checks (JIRA workflow transitions for the JIRA path; label namespace adoption for the GitHub path) before processing items. Never bypass.
|
|
25
|
+
- Never run two intake cycles concurrently against overlapping queues — the scheduling layer is responsible for serialization.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-create
|
|
3
|
+
description: "Vendor-neutral wrapper for creating tickets/issues from code files or descriptions. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-create or lisa:github-create. Plans hierarchy structure (epic / story / sub-task), then delegates each individual write through the tracker-write shim."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Create: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor planning skill.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-create` with `$ARGUMENTS` verbatim.
|
|
18
|
+
- `github` → invoke `lisa:github-create` with `$ARGUMENTS` verbatim.
|
|
19
|
+
3. Pass through the output.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Both vendor skills delegate every individual ticket write through `lisa:tracker-write`. They never call vendor-specific write tools directly.
|
|
24
|
+
- This shim is for ad-hoc creation from code files / descriptions. PRD-driven creation goes through the `*-to-tracker` skills (notion / confluence / linear / github).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-evidence
|
|
3
|
+
description: "Vendor-neutral wrapper for posting verification evidence. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-evidence or lisa:github-evidence. Uploads evidence to the GitHub `pr-assets` release, updates the PR description, posts a comment on the originating ticket/issue, and transitions the ticket/issue to its post-build review state."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Evidence: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor evidence skill.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-evidence` with `$ARGUMENTS` verbatim. Arg shape: `<TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>`.
|
|
18
|
+
- `github` → invoke `lisa:github-evidence` with `$ARGUMENTS` verbatim. Arg shape: `<ISSUE_REF> <EVIDENCE_DIR> <PR_NUMBER>` where `ISSUE_REF` is `org/repo#<number>` or a GitHub issue URL.
|
|
19
|
+
3. Pass through the vendor skill's output.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- The GitHub `pr-assets` release lives on the implementation repo (the one with the PR), regardless of which tracker hosts the ticket/issue. Both vendor skills upload there.
|
|
24
|
+
- Never post evidence to a different ticket than the one named — `$ARGUMENTS` is the source of truth.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-journey
|
|
3
|
+
description: "Vendor-neutral wrapper for executing a ticket/issue's Validation Journey end-to-end. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-journey or lisa:github-journey. Parses the journey, satisfies prerequisites, executes the steps, captures evidence at each marker, and posts results via tracker-evidence."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Journey: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor journey skill.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-journey` with `$ARGUMENTS` verbatim. Arg shape: `<TICKET_ID> [PR_NUMBER]`.
|
|
18
|
+
- `github` → invoke `lisa:github-journey` with `$ARGUMENTS` verbatim. Arg shape: `<ISSUE_REF> [PR_NUMBER]`.
|
|
19
|
+
3. Pass through the output.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- The journey content is identical across vendors; only the parser source differs (the JIRA vendor reads description via Atlassian MCP; the GitHub vendor reads body via `gh issue view --json body`).
|
|
24
|
+
- Evidence posting always goes through `lisa:tracker-evidence` — never bypass.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-read
|
|
3
|
+
description: "Vendor-neutral wrapper for fetching the full scope of a ticket/issue and its related graph. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-read-ticket or lisa:github-read-issue. Returns a consolidated context bundle so downstream agents never act on a single ticket in isolation."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Read: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor read skill.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-read-ticket` with `$ARGUMENTS` verbatim. The argument is a JIRA key (e.g., `PROJ-123`).
|
|
18
|
+
- `github` → invoke `lisa:github-read-issue` with `$ARGUMENTS` verbatim. The argument is `org/repo#<number>` or a full GitHub issue URL.
|
|
19
|
+
3. Return the vendor skill's context bundle verbatim.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Read-only — never modify the ticket/issue.
|
|
24
|
+
- The two vendors emit different context-bundle formats (because their data models differ). Callers must be tolerant of both — or, more precisely, agents at the next layer (e.g. `tracker-agent`-equivalent) parse the per-vendor bundle.
|
|
25
|
+
- If the input format doesn't match the configured tracker (e.g. tracker is jira but `$ARGUMENTS` looks like a GitHub URL), stop and report — never auto-translate.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tracker-sync
|
|
3
|
+
description: "Vendor-neutral wrapper for posting milestone updates to the linked ticket/issue. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-sync or lisa:github-sync. Posts at: plan created, implementation in progress, PR ready, PR merged. Suggests (never auto-transitions) the next status."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tracker Sync: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor sync skill.
|
|
10
|
+
|
|
11
|
+
See the `tracker-resolution` rule for configuration and dispatch table.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Resolve tracker config (same logic as `lisa:tracker-write`).
|
|
16
|
+
2. Dispatch:
|
|
17
|
+
- `jira` → invoke `lisa:jira-sync` with `$ARGUMENTS` verbatim.
|
|
18
|
+
- `github` → invoke `lisa:github-sync` with `$ARGUMENTS` verbatim.
|
|
19
|
+
3. Pass through the output.
|
|
20
|
+
|
|
21
|
+
If `$ARGUMENTS` is empty, both vendor skills auto-detect a ticket reference from the active plan file (most recently modified `.md` in `plans/`).
|
|
22
|
+
|
|
23
|
+
## Rules
|
|
24
|
+
|
|
25
|
+
- Idempotent updates — running sync at the same milestone twice should not produce duplicate comments. Vendor skills enforce this.
|
|
26
|
+
- Never auto-transition status. Suggestions only.
|