@codyswann/lisa 2.10.1 → 2.11.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 +1 -1
- package/plugins/lisa/agents/github-prd-intake.md +2 -2
- package/plugins/lisa/agents/linear-agent.md +128 -0
- package/plugins/lisa/agents/linear-build-intake.md +62 -0
- package/plugins/lisa/agents/linear-prd-intake.md +2 -2
- package/plugins/lisa/agents/notion-prd-intake.md +1 -1
- package/plugins/lisa/commands/plan.md +1 -1
- package/plugins/lisa/rules/config-resolution.md +187 -0
- package/plugins/lisa/rules/intent-routing.md +13 -13
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +9 -4
- package/plugins/lisa/skills/confluence-to-tracker/SKILL.md +23 -16
- package/plugins/lisa/skills/github-create/SKILL.md +4 -4
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +8 -3
- package/plugins/lisa/skills/github-to-tracker/SKILL.md +22 -13
- package/plugins/lisa/skills/github-write-issue/SKILL.md +2 -2
- package/plugins/lisa/skills/implement/SKILL.md +1 -1
- package/plugins/lisa/skills/intake/SKILL.md +3 -3
- package/plugins/lisa/skills/jira-build-intake/SKILL.md +6 -3
- package/plugins/lisa/skills/jira-create/SKILL.md +4 -4
- package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-add-journey/SKILL.md +104 -0
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +160 -0
- package/plugins/lisa/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa/skills/linear-evidence/SKILL.md +86 -0
- package/plugins/lisa/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +11 -6
- package/plugins/lisa/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa/skills/linear-sync/SKILL.md +89 -0
- package/plugins/lisa/skills/linear-to-tracker/SKILL.md +20 -13
- package/plugins/lisa/skills/linear-validate-issue/SKILL.md +270 -0
- package/plugins/lisa/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa/skills/linear-write-issue/SKILL.md +282 -0
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +12 -6
- package/plugins/lisa/skills/notion-to-tracker/SKILL.md +21 -15
- package/plugins/lisa/skills/plan/SKILL.md +3 -2
- package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +1 -1
- package/plugins/lisa/skills/product-walkthrough/SKILL.md +2 -2
- package/plugins/lisa/skills/spec-conformance/SKILL.md +1 -2
- package/plugins/lisa/skills/ticket-triage/SKILL.md +1 -1
- package/plugins/lisa/skills/tracker-add-journey/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-create/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-journey/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-read/SKILL.md +6 -4
- package/plugins/lisa/skills/{jira-source-artifacts → tracker-source-artifacts}/SKILL.md +5 -5
- package/plugins/lisa/skills/tracker-sync/SKILL.md +6 -4
- package/plugins/lisa/skills/tracker-validate/SKILL.md +8 -7
- package/plugins/lisa/skills/tracker-verify/SKILL.md +4 -2
- package/plugins/lisa/skills/tracker-write/SKILL.md +12 -10
- 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-create/SKILL.md +4 -4
- 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-create/SKILL.md +4 -4
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/confluence-prd-intake.md +1 -1
- package/plugins/src/base/agents/github-prd-intake.md +2 -2
- package/plugins/src/base/agents/linear-agent.md +128 -0
- package/plugins/src/base/agents/linear-build-intake.md +62 -0
- package/plugins/src/base/agents/linear-prd-intake.md +2 -2
- package/plugins/src/base/agents/notion-prd-intake.md +1 -1
- package/plugins/src/base/commands/plan.md +1 -1
- package/plugins/src/base/rules/config-resolution.md +187 -0
- package/plugins/src/base/rules/intent-routing.md +13 -13
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +9 -4
- package/plugins/src/base/skills/confluence-to-tracker/SKILL.md +23 -16
- package/plugins/src/base/skills/github-create/SKILL.md +4 -4
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +8 -3
- package/plugins/src/base/skills/github-to-tracker/SKILL.md +22 -13
- package/plugins/src/base/skills/github-write-issue/SKILL.md +2 -2
- package/plugins/src/base/skills/implement/SKILL.md +1 -1
- package/plugins/src/base/skills/intake/SKILL.md +3 -3
- package/plugins/src/base/skills/jira-build-intake/SKILL.md +6 -3
- package/plugins/src/base/skills/jira-create/SKILL.md +4 -4
- package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +1 -1
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-add-journey/SKILL.md +104 -0
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +160 -0
- package/plugins/src/base/skills/linear-create/SKILL.md +146 -0
- package/plugins/src/base/skills/linear-evidence/SKILL.md +86 -0
- package/plugins/src/base/skills/linear-journey/SKILL.md +134 -0
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +11 -6
- package/plugins/src/base/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/src/base/skills/linear-sync/SKILL.md +89 -0
- package/plugins/src/base/skills/linear-to-tracker/SKILL.md +20 -13
- package/plugins/src/base/skills/linear-validate-issue/SKILL.md +270 -0
- package/plugins/src/base/skills/linear-verify/SKILL.md +51 -0
- package/plugins/src/base/skills/linear-write-issue/SKILL.md +282 -0
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +12 -6
- package/plugins/src/base/skills/notion-to-tracker/SKILL.md +21 -15
- package/plugins/src/base/skills/plan/SKILL.md +3 -2
- package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +1 -1
- package/plugins/src/base/skills/product-walkthrough/SKILL.md +2 -2
- package/plugins/src/base/skills/spec-conformance/SKILL.md +1 -2
- package/plugins/src/base/skills/ticket-triage/SKILL.md +1 -1
- package/plugins/src/base/skills/tracker-add-journey/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-create/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-journey/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-read/SKILL.md +6 -4
- package/plugins/src/base/skills/{jira-source-artifacts → tracker-source-artifacts}/SKILL.md +5 -5
- package/plugins/src/base/skills/tracker-sync/SKILL.md +6 -4
- package/plugins/src/base/skills/tracker-validate/SKILL.md +8 -7
- package/plugins/src/base/skills/tracker-verify/SKILL.md +4 -2
- package/plugins/src/base/skills/tracker-write/SKILL.md +12 -10
- package/plugins/src/base/skills/verify/SKILL.md +1 -1
- package/plugins/src/expo/skills/jira-create/SKILL.md +4 -4
- package/plugins/src/rails/skills/jira-create/SKILL.md +4 -4
- package/plugins/lisa/rules/tracker-resolution.md +0 -76
- package/plugins/src/base/rules/tracker-resolution.md +0 -76
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: confluence-to-tracker
|
|
3
3
|
description: >
|
|
4
|
-
Break down a Confluence PRD page into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA
|
|
4
|
+
Break down a Confluence PRD page into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA, GitHub Issues, or Linear per .lisa.config.json). Use this skill whenever the
|
|
5
5
|
user shares a Confluence PRD URL and wants it converted into tracker tickets, or asks to "break down
|
|
6
6
|
this Confluence spec", "create tickets from a Confluence page", "turn this Confluence doc into tickets",
|
|
7
7
|
or similar. This skill mirrors `lisa:notion-to-tracker` for projects whose PRDs live in Confluence —
|
|
@@ -12,7 +12,7 @@ allowed-tools: ["Skill", "Bash", "mcp__atlassian__getConfluencePage", "mcp__atla
|
|
|
12
12
|
|
|
13
13
|
# Confluence PRD to Tracker Breakdown
|
|
14
14
|
|
|
15
|
-
Convert a Confluence PRD into a structured ticket hierarchy in the configured destination tracker (JIRA
|
|
15
|
+
Convert a Confluence PRD into a structured ticket hierarchy in the configured destination tracker (JIRA, GitHub Issues, or Linear per .lisa.config.json): Epics > Stories > Sub-tasks.
|
|
16
16
|
Each sub-task is scoped to exactly one repo and includes an empirical verification plan.
|
|
17
17
|
|
|
18
18
|
This skill is the Confluence counterpart of `lisa:notion-to-tracker`. The two skills share the same
|
|
@@ -102,22 +102,29 @@ page. The caller wanted `lisa:confluence-prd-intake` (batch mode).
|
|
|
102
102
|
|
|
103
103
|
## Configuration
|
|
104
104
|
|
|
105
|
-
This skill reads project
|
|
106
|
-
|
|
105
|
+
This skill reads project configuration from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key) and operational E2E test config from environment variables. See the `config-resolution` rule for the full schema.
|
|
106
|
+
|
|
107
|
+
### From `.lisa.config.json`
|
|
108
|
+
|
|
109
|
+
This skill is a **PRD source** (Confluence); destination tracker resolution is handled by `lisa:tracker-write` and `lisa:tracker-validate` internally — this skill does NOT read `tracker` directly. The relevant config for the source side:
|
|
110
|
+
|
|
111
|
+
| Field | Purpose | Required when |
|
|
112
|
+
|-------|---------|---------------|
|
|
113
|
+
| `atlassian.cloudId` | Atlassian Cloud site UUID for Confluence MCP calls | always |
|
|
114
|
+
| `confluence.spaceKey` | Confluence space hosting PRDs | invoked without an explicit page URL (batch / arg-less mode) and `confluence.parentPageId` is unset |
|
|
115
|
+
| `confluence.parentPageId` | Confluence parent page under which PRDs live | invoked without an explicit page URL (batch / arg-less mode) and `confluence.spaceKey` is unset |
|
|
116
|
+
|
|
117
|
+
### From environment variables (E2E test config — operational, not tracker)
|
|
107
118
|
|
|
108
119
|
| Variable | Purpose | Example |
|
|
109
120
|
|----------|---------|---------|
|
|
110
|
-
| `JIRA_PROJECT` | JIRA project key for ticket creation | `SE` |
|
|
111
|
-
| `JIRA_SERVER` | Atlassian instance URL (site host) | `mycompany.atlassian.net` |
|
|
112
|
-
| `CONFLUENCE_HOST` | Confluence host (often same as `JIRA_SERVER`) | `mycompany.atlassian.net` |
|
|
113
121
|
| `E2E_TEST_PHONE` | Test user phone number for verification plans | `0000000099` |
|
|
114
122
|
| `E2E_TEST_OTP` | Test user OTP code | `555555` |
|
|
115
123
|
| `E2E_TEST_ORG` | Test organization name | `Arsenal` |
|
|
116
124
|
| `E2E_BASE_URL` | Frontend base URL for Playwright tests | `https://dev.example.io/` |
|
|
117
125
|
| `E2E_GRAPHQL_URL` | GraphQL API URL for curl verification | `https://gql.dev.example.io/graphql` |
|
|
118
126
|
|
|
119
|
-
If env vars are not available, ask the user to provide them explicitly before proceeding.
|
|
120
|
-
Do not retrieve credentials from repository files or local agent settings.
|
|
127
|
+
If env vars are not available, ask the user to provide them explicitly before proceeding. Do not retrieve credentials from repository files or local agent settings.
|
|
121
128
|
|
|
122
129
|
## Workflow
|
|
123
130
|
|
|
@@ -151,17 +158,17 @@ PRDs typically reference external design, UX, and data artifacts (Figma files, L
|
|
|
151
158
|
- Embedded images and file attachments on the page itself
|
|
152
159
|
- Fenced code blocks with example data (JSON, SQL, GraphQL, cURL request/response)
|
|
153
160
|
|
|
154
|
-
2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:
|
|
161
|
+
2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:tracker-source-artifacts` skill. That skill is the single source of truth for: domains (`ui-design` / `ux-flow` / `data` / `ops` / `reference`), per-tool classification rules (Figma `/proto/` vs design, Lovable as `ux-flow`, Loom, screenshots), and coverage smells. Do not restate the rules here — invoke the skill so any drift in the rules propagates uniformly.
|
|
155
162
|
|
|
156
163
|
3. **Build an `artifacts` map** keyed by domain. Each entry: `{ url, title, domain, source_page, source_page_url, classification_reason }`. The `classification_reason` makes disambiguation auditable. The `source_page` lets you trace each reference back to where it appeared in the PRD.
|
|
157
164
|
|
|
158
|
-
4. **Surface coverage smells** as defined in `lisa:
|
|
165
|
+
4. **Surface coverage smells** as defined in `lisa:tracker-source-artifacts` §5. Record any detected smells on the epic.
|
|
159
166
|
|
|
160
167
|
### Phase 1.6: Source Precedence & Conflict Resolution
|
|
161
168
|
|
|
162
|
-
Source precedence rules and cross-axis conflict handling are defined in `lisa:
|
|
169
|
+
Source precedence rules and cross-axis conflict handling are defined in `lisa:tracker-source-artifacts` §3 and §4. Apply them during ticket synthesis: every conflict between artifacts must be recorded under `## Open Questions` on the affected ticket, never silently reconciled.
|
|
163
170
|
|
|
164
|
-
The existing-component reuse expectation is defined in `lisa:
|
|
171
|
+
The existing-component reuse expectation is defined in `lisa:tracker-source-artifacts` §7. Encode it on every UI-touching story.
|
|
165
172
|
|
|
166
173
|
### Phase 2: Codebase + Live Product Research
|
|
167
174
|
|
|
@@ -181,7 +188,7 @@ Walkthrough findings are attached to the originating Confluence PRD as a **foote
|
|
|
181
188
|
|
|
182
189
|
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:
|
|
183
190
|
|
|
184
|
-
- `project_key`:
|
|
191
|
+
- `project_key`: resolved by `lisa:tracker-write` from `.lisa.config.json`
|
|
185
192
|
- `issue_type`: `Epic`
|
|
186
193
|
- `summary`: epic title from the PRD
|
|
187
194
|
- `description_body`: a draft of the 3-audience description containing:
|
|
@@ -209,7 +216,7 @@ For each Epic, plan two kinds of stories:
|
|
|
209
216
|
|
|
210
217
|
For each story, **invoke `lisa:tracker-write`** with:
|
|
211
218
|
|
|
212
|
-
- `project_key`:
|
|
219
|
+
- `project_key`: resolved by `lisa:tracker-write` from `.lisa.config.json`
|
|
213
220
|
- `issue_type`: `Story`
|
|
214
221
|
- `epic_parent`: the Epic key captured in Phase 3 (mandatory)
|
|
215
222
|
- `summary`: prefixed per the naming convention above
|
|
@@ -237,7 +244,7 @@ Sub-tasks inherit their parent story's artifacts by reference (the parent link).
|
|
|
237
244
|
|
|
238
245
|
### Phase 5.5: Artifact Preservation Gate (mandatory)
|
|
239
246
|
|
|
240
|
-
Run the preservation gate defined in `lisa:
|
|
247
|
+
Run the preservation gate defined in `lisa:tracker-source-artifacts` §8 against the artifacts extracted in Phase 1.5 and the tickets just created. Do NOT restate or modify the gate logic here — invoke the rules from `lisa:tracker-source-artifacts`.
|
|
241
248
|
|
|
242
249
|
To run the gate, this skill must:
|
|
243
250
|
|
|
@@ -11,7 +11,7 @@ Analyze the provided file(s) and plan a GitHub Issue hierarchy. **This skill pla
|
|
|
11
11
|
## Process
|
|
12
12
|
|
|
13
13
|
1. **Analyze**: Read `$ARGUMENTS` to understand scope.
|
|
14
|
-
2. **Extract source artifacts**: invoke the `lisa:
|
|
14
|
+
2. **Extract source artifacts**: invoke the `lisa:tracker-source-artifacts` skill (vendor-neutral), then enumerate every external URL, embed, attachment, or example payload in the input and classify each by domain per its rules. Build the `artifacts` map (one entry per artifact: url, title, domain, source page, classification reason).
|
|
15
15
|
3. **Walk the live product** (when applicable): if the work touches existing user-facing surfaces, invoke the `lisa:product-walkthrough` skill.
|
|
16
16
|
4. **Determine structure**:
|
|
17
17
|
- Epic needed if: multiple features, major changes, >3 related files.
|
|
@@ -22,8 +22,8 @@ Analyze the provided file(s) and plan a GitHub Issue hierarchy. **This skill pla
|
|
|
22
22
|
Epic → Story → Sub-tasks (test, implement, document, cleanup)
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
6. **Delegate every write to `lisa:github-write-issue`** in dependency order (Epic first, then Stories with the Epic as parent sub-issue, then Sub-tasks with their Story as parent). Pass artifacts (filtered by domain per `lisa:
|
|
26
|
-
7. **Run the artifact preservation gate** (`lisa:
|
|
25
|
+
6. **Delegate every write to `lisa:github-write-issue`** in dependency order (Epic first, then Stories with the Epic as parent sub-issue, then Sub-tasks with their Story as parent). Pass artifacts (filtered by domain per `lisa:tracker-source-artifacts` inheritance rules) and walkthrough findings (under `## Current Product`).
|
|
26
|
+
7. **Run the artifact preservation gate** (`lisa:tracker-source-artifacts` §8): after all writes complete, build the preservation matrix and verify every extracted artifact is reachable from the created issues. Fail loudly if anything was dropped.
|
|
27
27
|
|
|
28
28
|
## Mandatory for Every Code Issue
|
|
29
29
|
|
|
@@ -40,7 +40,7 @@ Issues that change runtime behavior should include a `## Validation Journey` sec
|
|
|
40
40
|
|
|
41
41
|
If `$ARGUMENTS` references any external artifact — PRD, design doc, Figma URL, Lovable prototype, Loom walkthrough, screenshot, example payload — those references MUST be preserved as `## Links` and `## Source Artifacts` sections on the created issues. Silent artifact loss is the single most common quality failure in this pipeline.
|
|
42
42
|
|
|
43
|
-
**Invoke `lisa:
|
|
43
|
+
**Invoke `lisa:tracker-source-artifacts`** for the canonical rules: domains, per-tool classification, source precedence, conflict handling under `## Open Questions`, inheritance from epic → story → sub-task, and the existing-component reuse expectation. This skill is vendor-neutral and used by both the JIRA and the GitHub paths.
|
|
44
44
|
|
|
45
45
|
When delegating actual writes to `lisa:github-write-issue`, pass the extracted artifact list so its Phase 4c (Remote Links / Source Artifacts) step attaches them.
|
|
46
46
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: github-prd-intake
|
|
3
|
-
description: "Scans a GitHub repository for issues labeled `prd-ready` and runs each one through the dry-run validation pipeline. PRDs that pass every gate get tickets written (to whatever destination tracker is configured — JIRA
|
|
3
|
+
description: "Scans a GitHub repository for issues labeled `prd-ready` and runs each one through the dry-run validation pipeline. PRDs that pass every gate get tickets written (to whatever destination tracker is configured — JIRA, GitHub Issues itself, or Linear) and the label flipped to `prd-ticketed`; PRDs that fail get clarifying-question comments and the label flipped to `prd-blocked`. The GitHub counterpart of lisa:notion-prd-intake / lisa:confluence-prd-intake / lisa:linear-prd-intake. Composes existing skills (github-to-tracker, tracker-validate, tracker-source-artifacts, product-walkthrough)."
|
|
4
4
|
allowed-tools: ["Skill", "Bash"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -116,7 +116,7 @@ Invoke the `lisa:github-to-tracker` skill with `dry_run: true` and the PRD issue
|
|
|
116
116
|
- An overall PASS / FAIL verdict
|
|
117
117
|
- A failure count
|
|
118
118
|
|
|
119
|
-
This call indirectly invokes `lisa:
|
|
119
|
+
This call indirectly invokes `lisa:tracker-source-artifacts` (artifact extraction + classification) and `lisa:product-walkthrough` (when the PRD touches existing user-facing surfaces). All gate logic lives in `lisa:tracker-validate` (which dispatches to `lisa:jira-validate-ticket` or `lisa:github-validate-issue` depending on the configured destination).
|
|
120
120
|
|
|
121
121
|
#### 3c. Branch on the verdict
|
|
122
122
|
|
|
@@ -254,7 +254,12 @@ When the configured destination tracker is GitHub Issues AND the PRD repo is the
|
|
|
254
254
|
|
|
255
255
|
## Configuration
|
|
256
256
|
|
|
257
|
-
Same
|
|
257
|
+
Same configuration as `lisa:github-to-tracker`. See that skill for the full table. Key items:
|
|
258
|
+
|
|
259
|
+
- **From `.lisa.config.json`**: `github.org` and `github.repo` (required for the source repo, and also for the destination repo when `tracker = "github"` — self-host case).
|
|
260
|
+
- **From environment variables**: `E2E_BASE_URL`, `E2E_TEST_PHONE`, `E2E_TEST_OTP`, `E2E_TEST_ORG`, `E2E_GRAPHQL_URL` (operational E2E test config).
|
|
261
|
+
|
|
262
|
+
Destination tracker config (jira / github / linear) is consumed by `lisa:tracker-write` internally — this skill does NOT read it. If any required value is missing, surface and exit — never invent values.
|
|
258
263
|
|
|
259
264
|
## Rules
|
|
260
265
|
|
|
@@ -103,20 +103,29 @@ Resolve `<org>/<repo>` from `.lisa.config.json` if `$ARGUMENTS` is just `#<n>` o
|
|
|
103
103
|
|
|
104
104
|
## Configuration
|
|
105
105
|
|
|
106
|
-
This skill reads project
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
|
113
|
-
|
|
106
|
+
This skill reads project configuration from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key) and operational E2E test config from environment variables. See the `config-resolution` rule for the full schema.
|
|
107
|
+
|
|
108
|
+
### From `.lisa.config.json`
|
|
109
|
+
|
|
110
|
+
This skill is a **PRD source** (GitHub Issues). Destination tracker resolution is handled by `lisa:tracker-write` / `lisa:tracker-validate` internally; this skill reads only the source-side config.
|
|
111
|
+
|
|
112
|
+
| Field | Purpose | Required when |
|
|
113
|
+
|-------|---------|---------------|
|
|
114
|
+
| `github.org` | GitHub org hosting the PRD repo | always (source repo); also when `tracker = "github"` (destination repo, can be the same in self-host case) |
|
|
115
|
+
| `github.repo` | GitHub repo hosting the PRD | same |
|
|
116
|
+
|
|
117
|
+
### From environment variables (E2E test config — operational, not tracker)
|
|
118
|
+
|
|
119
|
+
| Variable | Purpose | Example |
|
|
120
|
+
|----------|---------|---------|
|
|
114
121
|
| `E2E_TEST_PHONE` | Test user phone for verification plans | `0000000099` |
|
|
115
122
|
| `E2E_TEST_OTP` | Test user OTP code | `555555` |
|
|
116
123
|
| `E2E_TEST_ORG` | Test organization name | `Arsenal` |
|
|
117
124
|
| `E2E_BASE_URL` | Frontend base URL for Playwright tests | `https://dev.example.io/` |
|
|
118
125
|
| `E2E_GRAPHQL_URL` | GraphQL API URL for curl verification | `https://gql.dev.example.io/graphql` |
|
|
119
126
|
|
|
127
|
+
If env vars are not available, ask the user to provide them explicitly before proceeding. Do not retrieve credentials from repository files or local agent settings.
|
|
128
|
+
|
|
120
129
|
## Workflow
|
|
121
130
|
|
|
122
131
|
### Phase 1: Fetch & Analyze the PRD
|
|
@@ -146,17 +155,17 @@ PRDs typically reference external design, UX, and data artifacts (Figma files, L
|
|
|
146
155
|
- Embedded images and file attachments referenced in the body
|
|
147
156
|
- Fenced code blocks with example data (JSON, SQL, GraphQL, cURL request/response)
|
|
148
157
|
|
|
149
|
-
2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:
|
|
158
|
+
2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:tracker-source-artifacts` skill. That skill is the single source of truth for: domains (`ui-design` / `ux-flow` / `data` / `ops` / `reference`), per-tool classification rules, and coverage smells.
|
|
150
159
|
|
|
151
160
|
3. **Build an `artifacts` map** keyed by domain. Each entry: `{ url, title, domain, source_page, source_page_url, classification_reason }`. `source_page` lets you trace each reference back to where it appeared (PRD body vs a specific sub-issue vs a specific comment).
|
|
152
161
|
|
|
153
|
-
4. **Surface coverage smells** as defined in `lisa:
|
|
162
|
+
4. **Surface coverage smells** as defined in `lisa:tracker-source-artifacts` §5. Record on the Epic.
|
|
154
163
|
|
|
155
164
|
### Phase 1.6: Source Precedence & Conflict Resolution
|
|
156
165
|
|
|
157
|
-
Source precedence rules and cross-axis conflict handling are defined in `lisa:
|
|
166
|
+
Source precedence rules and cross-axis conflict handling are defined in `lisa:tracker-source-artifacts` §3 and §4. Apply them during ticket synthesis: every conflict between artifacts must be recorded under `## Open Questions` on the affected ticket, never silently reconciled.
|
|
158
167
|
|
|
159
|
-
The existing-component reuse expectation is defined in `lisa:
|
|
168
|
+
The existing-component reuse expectation is defined in `lisa:tracker-source-artifacts` §7. Encode it on every UI-touching story.
|
|
160
169
|
|
|
161
170
|
### Phase 2: Codebase + Live Product Research
|
|
162
171
|
|
|
@@ -230,7 +239,7 @@ Sub-tasks inherit their parent Story's artifacts by reference (the parent link).
|
|
|
230
239
|
|
|
231
240
|
### Phase 5.5: Artifact Preservation Gate (mandatory)
|
|
232
241
|
|
|
233
|
-
Run the preservation gate defined in `lisa:
|
|
242
|
+
Run the preservation gate defined in `lisa:tracker-source-artifacts` §8 against the artifacts extracted in Phase 1.5 and the tickets just created. Do NOT restate or modify the gate logic here — invoke the rules from `lisa:tracker-source-artifacts`.
|
|
234
243
|
|
|
235
244
|
To run the gate, this skill must:
|
|
236
245
|
|
|
@@ -92,7 +92,7 @@ Scenario: <name>
|
|
|
92
92
|
## Source Artifacts
|
|
93
93
|
[Group by domain (UI / UX flow / Data / Ops / Reference). One bullet per
|
|
94
94
|
artifact with title and URL. Inherited from the parent epic per the rules
|
|
95
|
-
in lisa:
|
|
95
|
+
in lisa:tracker-source-artifacts.]
|
|
96
96
|
|
|
97
97
|
## Source Precedence
|
|
98
98
|
[When artifacts are attached, name the authoritative source per axis:
|
|
@@ -175,7 +175,7 @@ Identify and attach (under `## Links`):
|
|
|
175
175
|
- Related GitHub PRs, branches, or commits.
|
|
176
176
|
- Confluence / Notion / Linear PRD pages (the originating PRD).
|
|
177
177
|
- Dashboards (Grafana, Datadog, Sentry).
|
|
178
|
-
- **Source artifacts from the originating PRD / parent Epic**: classify and inherit per `lisa:
|
|
178
|
+
- **Source artifacts from the originating PRD / parent Epic**: classify and inherit per `lisa:tracker-source-artifacts`. Inherit by domain — UI → `ui-design` + `ux-flow`; backend → `data`; infra → `ops`; always inherit `reference`. Never assume a developer will walk up to the Epic to find design context.
|
|
179
179
|
|
|
180
180
|
If the issue was generated from a PRD and the parent Epic has no source artifacts, surface that as a smell and ask whether artifacts were missed during extraction.
|
|
181
181
|
|
|
@@ -27,7 +27,7 @@ The team lead does NOT read the input directly. The first task on the team's pla
|
|
|
27
27
|
- If it's a ticket, calls `lisa:tracker-read` (preferred — vendor-agnostic; dispatches per `.lisa.config.json` `tracker`). **Mismatch guard**: if the ticket format doesn't match the configured tracker (e.g., a GitHub URL when `tracker` is `jira`), `tracker-read` stops and reports the error — never auto-translates vendors:
|
|
28
28
|
- JIRA ticket → `lisa:tracker-read` → `lisa:jira-read-ticket`
|
|
29
29
|
- GitHub Issue → `lisa:tracker-read` → `lisa:github-read-issue`
|
|
30
|
-
- Linear
|
|
30
|
+
- Linear identifier or project URL → `lisa:tracker-read` → `lisa:linear-read-issue`
|
|
31
31
|
- Captures comments and metadata, not just the description.
|
|
32
32
|
- If it's a file, reads the entire file without offset or limit.
|
|
33
33
|
- If it's a plain-text request, uses the provided text verbatim as the resolved input.
|
|
@@ -49,7 +49,7 @@ Detect the queue type from `$ARGUMENTS` and route:
|
|
|
49
49
|
| A Confluence **parent page** URL or page ID (the page whose descendants are PRDs) | PRD queue (Confluence, narrowed) | Invoke `lisa:confluence-prd-intake` with the parent ID (CQL: `ancestor = <id> AND label = "prd-ready"`) |
|
|
50
50
|
| A Linear **workspace** URL (e.g. `https://linear.app/acme`) | PRD queue (Linear) | Invoke `lisa:linear-prd-intake` (which queries `list_projects({label: "prd-ready"})` across the workspace, claims each by relabeling to `prd-in-review`, runs the dry-run validate → branch → write pipeline) |
|
|
51
51
|
| A Linear **team** URL (e.g. `https://linear.app/acme/team/ENG/projects`) or a token already routed as a Linear team key | PRD queue (Linear, narrowed) | Invoke `lisa:linear-prd-intake` with the team key (`list_projects({team, label: "prd-ready"})`) |
|
|
52
|
-
| The literal token `linear` | PRD queue (Linear, default workspace) | Invoke `lisa:linear-prd-intake linear` — only valid if `
|
|
52
|
+
| The literal token `linear` | PRD queue (Linear, default workspace) | Invoke `lisa:linear-prd-intake linear` — only valid if `linear.workspace` is configured in `.lisa.config.json` |
|
|
53
53
|
| A JIRA project key (e.g. `SE`) | Work queue (JIRA) | Invoke `lisa:jira-build-intake` (which scans the project for Status=Ready, claims each via In Progress, runs `lisa:implement` per ticket, transitions to On Dev on success) |
|
|
54
54
|
| A full JQL filter (e.g. `project = SE AND component = "frontend"`) | Work queue (JIRA, narrowed) | Invoke `lisa:jira-build-intake` with the JQL |
|
|
55
55
|
| A GitHub **repository** URL or `org/repo` token (e.g. `https://github.com/acme/product-prds` or `acme/product-prds`) when used for **PRDs** | PRD queue (GitHub) | Invoke `lisa:github-prd-intake` (which queries `gh issue list --label prd-ready`, claims each by relabeling to `prd-in-review`, runs the dry-run validate → branch → write pipeline). PRD discovery is independent of the destination tracker — the resulting tickets land wherever `.lisa.config.json` `tracker` says. |
|
|
@@ -62,10 +62,10 @@ Disambiguation rules:
|
|
|
62
62
|
- An Atlassian Confluence URL containing `/wiki/spaces/<KEY>` with no `/pages/...` segment → Confluence space queue.
|
|
63
63
|
- An Atlassian Confluence URL containing `/wiki/spaces/<KEY>/pages/<ID>/...` → Confluence parent-page queue (the page is the parent whose descendants are PRDs). If the user actually meant "this single page is a PRD, plan it", route to `lisa:plan` instead — this skill is batch-only.
|
|
64
64
|
- A `linear.app` URL → Linear queue. If the path is `/<workspace>` only or `/<workspace>/team/<KEY>/...`, route here. If the path includes `/project/<slug>-<id>` it's a single-PRD URL — direct the caller to `lisa:plan` instead, this skill is batch-only.
|
|
65
|
-
- The literal token `linear` (case-insensitive) → Linear queue, default workspace from `
|
|
65
|
+
- The literal token `linear` (case-insensitive) → Linear queue, default workspace from `linear.workspace` in `.lisa.config.json`.
|
|
66
66
|
- A `github.com` URL or an `<org>/<repo>` token → GitHub queue. The PRD-vs-build dispatch is determined by which label namespace the repo currently uses: PRD-side (`prd-ready`) → `lisa:github-prd-intake`; build-side (`status:ready` and `tracker = github` in `.lisa.config.json`) → `lisa:tracker-build-intake`. If both namespaces are present, prefer the PRD queue unless `$ARGUMENTS` includes `intake_mode=build`. If the URL points at a single issue (`https://github.com/<org>/<repo>/issues/<n>`), this skill is batch-only — direct the caller to `lisa:plan` (for a single PRD issue) or `lisa:implement` (for a single build issue).
|
|
67
67
|
- The literal token `github` (case-insensitive) → GitHub queue, default repo from `.lisa.config.json` `github.org` / `github.repo`.
|
|
68
|
-
- A bare alphanumeric token that matches the
|
|
68
|
+
- A bare alphanumeric token that matches the JIRA project key regex (uppercase letters / digits / hyphen, ≤10 chars — typically the value of `jira.project` in `.lisa.config.json`) is treated as a JIRA project key by default. A token that does not match the regex is treated as a Confluence space key. If it does not resolve as a Confluence space key either, attempt to resolve as a Linear team key via `mcp__linear-server__list_teams({query})` before giving up. The only time to stop and ask is when the token resolves to more than one of {JIRA project, Confluence space, Linear team, GitHub `org/repo`} simultaneously — in that overlap the user must disambiguate which queue to scan.
|
|
69
69
|
- An `<org>/<repo>` token (slash-separated, both halves are GitHub-name-shaped) → GitHub queue.
|
|
70
70
|
- A string starting with `project = ` or containing JQL operators (`AND`, `OR`, `=`, `!=`, `~`, etc.) → JQL filter.
|
|
71
71
|
|
|
@@ -131,13 +131,16 @@ Total PRs opened: <n>
|
|
|
131
131
|
|
|
132
132
|
## Configuration
|
|
133
133
|
|
|
134
|
+
Reads `atlassian.cloudId` and `jira.project` from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key). The project key is also accepted as `$ARGUMENTS` for ad-hoc invocations.
|
|
135
|
+
|
|
134
136
|
Status names default to `Ready`, `In Progress`, `On Dev`. If a project uses different names (`Open` instead of `TODO`, `In Development` instead of `In Progress`, `Code Review` instead of `On Dev`), pass overrides in `$ARGUMENTS` as `claim_status="In Development" done_status="Code Review"`.
|
|
135
137
|
|
|
136
138
|
If a `Ready` status does not exist in the JIRA project's workflow, this skill cannot run. The remediation is to add `Ready` to the project workflow scheme — JIRA admin task, not something this skill can do.
|
|
137
139
|
|
|
138
|
-
|
|
|
139
|
-
|
|
140
|
-
| `
|
|
140
|
+
| Field / variable | Default | Purpose |
|
|
141
|
+
|------------------|---------|---------|
|
|
142
|
+
| `.lisa.config.json` `jira.project` | (from `$ARGUMENTS`) | Project key for the default JQL |
|
|
143
|
+
| `.lisa.config.json` `atlassian.cloudId` | — | Atlassian Cloud site UUID (required) |
|
|
141
144
|
| Status: queue | `Ready` | The status that signals "human says this is buildable" |
|
|
142
145
|
| Status: claim | `In Progress` | The intermediate status the agent sets on pickup |
|
|
143
146
|
| Status: done | `On Dev` | The status set after a successful build |
|
|
@@ -11,7 +11,7 @@ Analyze the provided file(s) and plan a JIRA hierarchy. **This skill plans struc
|
|
|
11
11
|
## Process
|
|
12
12
|
|
|
13
13
|
1. **Analyze**: Read $ARGUMENTS to understand scope.
|
|
14
|
-
2. **Extract source artifacts**: invoke the `lisa:
|
|
14
|
+
2. **Extract source artifacts**: invoke the `lisa:tracker-source-artifacts` skill, then enumerate every external URL, embed, attachment, or example payload in the input and classify each by domain per its rules. Build the `artifacts` map (one entry per artifact: url, title, domain, source page, classification reason). See "Source Artifacts" below.
|
|
15
15
|
3. **Walk the live product** (when applicable): if the work touches existing user-facing surfaces, invoke the `lisa:product-walkthrough` skill to capture current behavior, design-vs-product divergence, and reuse candidates. Skip when the work is purely backend or affects a screen that does not yet exist. See "Live Product Walkthrough" below.
|
|
16
16
|
4. **Determine structure**:
|
|
17
17
|
- Epic needed if: multiple features, major changes, >3 related files
|
|
@@ -20,8 +20,8 @@ Analyze the provided file(s) and plan a JIRA hierarchy. **This skill plans struc
|
|
|
20
20
|
```text
|
|
21
21
|
Epic → User Story → Tasks (test, implement, document, cleanup)
|
|
22
22
|
```
|
|
23
|
-
6. **Delegate every write to `lisa:jira-write-ticket`** in dependency order (epic first, then stories with the epic as parent, then sub-tasks with their story as parent). Pass the artifacts (filtered by domain per `lisa:
|
|
24
|
-
7. **Run the artifact preservation gate** (`lisa:
|
|
23
|
+
6. **Delegate every write to `lisa:jira-write-ticket`** in dependency order (epic first, then stories with the epic as parent, then sub-tasks with their story as parent). Pass the artifacts (filtered by domain per `lisa:tracker-source-artifacts` inheritance rules) and the walkthrough findings (under `## Current Product`). See "Delegation to jira-write-ticket" below.
|
|
24
|
+
7. **Run the artifact preservation gate** (`lisa:tracker-source-artifacts` §8): after all writes complete, build the preservation matrix and verify every extracted artifact is reachable from the created tickets. Fail loudly if anything was dropped.
|
|
25
25
|
|
|
26
26
|
## Mandatory for Every Code Issue
|
|
27
27
|
|
|
@@ -89,7 +89,7 @@ h3. Assertions
|
|
|
89
89
|
|
|
90
90
|
If $ARGUMENTS includes (or references) any external artifact — PRD, design doc, Figma URL, Lovable prototype, Loom walkthrough, screenshot, example payload — those references MUST be preserved as remote links on the created tickets. Silent artifact loss is the single most common quality failure in this pipeline.
|
|
91
91
|
|
|
92
|
-
**Invoke the `lisa:
|
|
92
|
+
**Invoke the `lisa:tracker-source-artifacts` skill** for the canonical rules: domains, per-tool classification (Figma `/proto/` vs design, Lovable, Loom, screenshots), source precedence, conflict handling under `## Open Questions`, inheritance from epic → story → sub-task, and the existing-component reuse expectation. Do not restate the rules here — invoke the skill so any rule change propagates uniformly.
|
|
93
93
|
|
|
94
94
|
When delegating actual writes to `lisa:jira-write-ticket`, pass the extracted artifact list so its Phase 4c (Remote Links) step can attach them.
|
|
95
95
|
|
|
@@ -174,7 +174,7 @@ Either way the gate emits `FAIL`, not a third state. Strictness is the caller's
|
|
|
174
174
|
|
|
175
175
|
When `artifacts_attached = true`, description must include source-precedence guidance covering: business rules → PRD body, visual treatment → mocks, flow → prototypes, API/data → data artifacts. Cross-axis conflicts surfaced under `## Open Questions`.
|
|
176
176
|
|
|
177
|
-
Accept either placement — both are valid per `lisa:
|
|
177
|
+
Accept either placement — both are valid per `lisa:tracker-source-artifacts`:
|
|
178
178
|
- A dedicated `## Source Precedence` (or `h2. Source Precedence`) subsection, OR
|
|
179
179
|
- A "Source Precedence" / "source precedence" / "authoritative source" paragraph under `Technical Approach` that covers the four axes above.
|
|
180
180
|
|
|
@@ -170,15 +170,15 @@ Identify and attach:
|
|
|
170
170
|
- Confluence pages (design docs, RFCs, runbooks)
|
|
171
171
|
- Dashboards (Grafana, Datadog, Sentry issue)
|
|
172
172
|
- Incident tickets (PagerDuty, Statuspage)
|
|
173
|
-
- **Source artifacts from the originating PRD / parent epic**: classify and inherit per the rules in `lisa:
|
|
173
|
+
- **Source artifacts from the originating PRD / parent epic**: classify and inherit per the rules in `lisa:tracker-source-artifacts` (invoke that skill if you haven't loaded the rules in this session). The short version: enumerate the parent epic's remote links and inherit the ones whose domain matches this ticket's scope (UI → `ui-design` + `ux-flow`; backend → `data`; infra → `ops`; always inherit `reference`). Never assume a developer will walk up to the epic to find design context — attach it here.
|
|
174
174
|
|
|
175
175
|
If the ticket was generated from a PRD (by `lisa:notion-to-tracker` or similar) and the parent epic has no source artifacts, surface that as a smell and ask whether artifacts were missed during extraction before proceeding.
|
|
176
176
|
|
|
177
177
|
### 4d. Source Precedence (must appear on the ticket)
|
|
178
178
|
|
|
179
|
-
Source precedence rules and cross-axis conflict handling are defined in `lisa:
|
|
179
|
+
Source precedence rules and cross-axis conflict handling are defined in `lisa:tracker-source-artifacts` §3 and §4. When a ticket carries both design artifacts and a description, record the precedence explicitly in the ticket description (under Technical Approach or a dedicated `## Source Precedence` subsection) so the implementer doesn't silently reconcile conflicts. Cross-axis conflicts go under `## Open Questions` as BLOCKER items.
|
|
180
180
|
|
|
181
|
-
For UI-touching tickets, include the existing-component reuse expectation per `lisa:
|
|
181
|
+
For UI-touching tickets, include the existing-component reuse expectation per `lisa:tracker-source-artifacts` §7.
|
|
182
182
|
|
|
183
183
|
### 4e. Live Product Walkthrough Findings (UI-touching tickets)
|
|
184
184
|
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear-add-journey
|
|
3
|
+
description: "Add a Validation Journey section to an existing Linear Issue by analyzing the change type and generating appropriate verification steps with evidence markers. Linear counterpart of lisa:jira-add-journey."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Glob", "Grep", "Skill", "mcp__linear-server__list_teams", "mcp__linear-server__get_issue", "mcp__linear-server__save_issue"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Add Validation Journey to Existing Linear Issue
|
|
8
|
+
|
|
9
|
+
Read an existing Linear Issue, analyze the change type, and append a Validation Journey section to the description with appropriate verification steps based on the project's verification patterns.
|
|
10
|
+
|
|
11
|
+
This skill is the destination of the `lisa:tracker-add-journey` shim when `tracker = "linear"`.
|
|
12
|
+
|
|
13
|
+
## Configuration
|
|
14
|
+
|
|
15
|
+
Reads `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.local` override).
|
|
16
|
+
|
|
17
|
+
## Arguments
|
|
18
|
+
|
|
19
|
+
`$ARGUMENTS`: `<IDENTIFIER>` — Linear Issue identifier (e.g. `ENG-123`).
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
### Step 1: Read the Issue
|
|
24
|
+
|
|
25
|
+
Fetch via `mcp__linear-server__get_issue` and extract: title, description (markdown), labels, project, parent, attachments.
|
|
26
|
+
|
|
27
|
+
### Step 2: Check for Existing Journey
|
|
28
|
+
|
|
29
|
+
If the description already contains a `## Validation Journey` section, report and stop — never overwrite an existing journey without explicit instruction.
|
|
30
|
+
|
|
31
|
+
### Step 3: Analyze the Change Type
|
|
32
|
+
|
|
33
|
+
Examine the description, acceptance criteria, and codebase to determine the change type:
|
|
34
|
+
|
|
35
|
+
1. **API/GraphQL** — New or modified endpoints, request/response schemas
|
|
36
|
+
2. **Database migration** — Schema changes, new tables/columns, indexes
|
|
37
|
+
3. **Background job/queue** — New job processors, queue consumers, event handlers
|
|
38
|
+
4. **Library/utility** — Exported functions, shared modules, npm package changes
|
|
39
|
+
5. **Security fix** — Auth, authorization, input validation, OWASP vulnerabilities
|
|
40
|
+
6. **Authentication/authorization** — Role-based access, session management, tokens
|
|
41
|
+
7. **UI/frontend** — Components, flows, browser-driven verification
|
|
42
|
+
|
|
43
|
+
Use Explore agents or read the codebase to understand which files are affected and what verification approach is appropriate.
|
|
44
|
+
|
|
45
|
+
### Step 4: Map Change Type to Verification Pattern
|
|
46
|
+
|
|
47
|
+
| Change Type | Verification Approach |
|
|
48
|
+
|---|---|
|
|
49
|
+
| API/GraphQL | curl commands verifying endpoints, status codes, response schemas |
|
|
50
|
+
| Database migration | Migration execution + schema verification + rollback check |
|
|
51
|
+
| Background job/queue | Enqueue + process + state change verification |
|
|
52
|
+
| Library/utility | Test execution + build verification + export check |
|
|
53
|
+
| Security fix | Exploit reproduction pre-fix + exploit failure post-fix |
|
|
54
|
+
| Auth/authz | Multi-role verification with explicit status codes |
|
|
55
|
+
| UI/frontend | Playwright browser flow + visual evidence |
|
|
56
|
+
|
|
57
|
+
### Step 5: Draft the Validation Journey (markdown)
|
|
58
|
+
|
|
59
|
+
Linear descriptions are markdown. Use `##` and `###` headings — not Jira wiki markup.
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
## Validation Journey
|
|
63
|
+
|
|
64
|
+
### Prerequisites
|
|
65
|
+
- List required services, database, env vars
|
|
66
|
+
|
|
67
|
+
### Steps
|
|
68
|
+
1. Verify current state before changes
|
|
69
|
+
2. Apply the change
|
|
70
|
+
3. Verify expected new state [EVIDENCE: state-name]
|
|
71
|
+
4. Test error/edge cases [EVIDENCE: error-case]
|
|
72
|
+
5. Verify rollback if applicable [EVIDENCE: rollback]
|
|
73
|
+
|
|
74
|
+
### Assertions
|
|
75
|
+
- Describe what must be true after verification
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Guidelines for Drafting
|
|
79
|
+
|
|
80
|
+
1. **2–5 evidence markers** — Focus on proving the change works and handles errors.
|
|
81
|
+
2. **Concrete, runnable steps** — `Run \`curl -s localhost:3000/health | jq .status\`` not "Check the endpoint".
|
|
82
|
+
3. **Include environment setup** — Database connection, running services, env vars.
|
|
83
|
+
4. **Evidence names in kebab-case** — `api-response`, `schema-check`, `rate-limit-hit`.
|
|
84
|
+
5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly".
|
|
85
|
+
6. **Cover happy path and error path** — At minimum, one success and one failure evidence marker.
|
|
86
|
+
|
|
87
|
+
### Step 6: Present to User for Approval
|
|
88
|
+
|
|
89
|
+
Display the drafted journey and ask for confirmation before appending.
|
|
90
|
+
|
|
91
|
+
### Step 7: Append to Issue Description
|
|
92
|
+
|
|
93
|
+
After approval, fetch the current description, append the new Validation Journey section, and update via `mcp__linear-server__save_issue({id, description: <new-description>})`. Preserve all existing description content — never overwrite.
|
|
94
|
+
|
|
95
|
+
### Step 8: Verify
|
|
96
|
+
|
|
97
|
+
Re-fetch the issue and confirm the section is present.
|
|
98
|
+
|
|
99
|
+
## When to Use This Skill
|
|
100
|
+
|
|
101
|
+
- Issue was created before the Validation Journey convention was established
|
|
102
|
+
- Issue was created manually without following `lisa:linear-create` guidelines
|
|
103
|
+
- Issue needs a journey added or updated based on implementation progress
|
|
104
|
+
- Before starting work on an Issue, to ensure verification steps are documented
|