@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,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: confluence-to-
|
|
2
|
+
name: confluence-to-tracker
|
|
3
3
|
description: >
|
|
4
|
-
Break down a Confluence PRD page into
|
|
5
|
-
user shares a Confluence PRD URL and wants it converted into
|
|
6
|
-
this Confluence spec", "create tickets from a Confluence page", "turn this Confluence doc into
|
|
7
|
-
or similar. This skill mirrors `lisa:notion-to-
|
|
4
|
+
Break down a Confluence PRD page into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json). Use this skill whenever the
|
|
5
|
+
user shares a Confluence PRD URL and wants it converted into tracker tickets, or asks to "break down
|
|
6
|
+
this Confluence spec", "create tickets from a Confluence page", "turn this Confluence doc into tickets",
|
|
7
|
+
or similar. This skill mirrors `lisa:notion-to-tracker` for projects whose PRDs live in Confluence —
|
|
8
8
|
the workflow, gates, dry-run mode, and validation rules are identical; only the source-of-truth tool
|
|
9
9
|
surface differs (Confluence MCP instead of Notion MCP).
|
|
10
|
-
allowed-tools: ["Skill", "Bash", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__searchConfluenceUsingCql", "mcp__atlassian__getAccessibleAtlassianResources"
|
|
10
|
+
allowed-tools: ["Skill", "Bash", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__searchConfluenceUsingCql", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# Confluence PRD to
|
|
13
|
+
# Confluence PRD to Tracker Breakdown
|
|
14
14
|
|
|
15
|
-
Convert a Confluence PRD into a structured JIRA
|
|
15
|
+
Convert a Confluence PRD into a structured ticket hierarchy in the configured destination tracker (JIRA or GitHub Issues 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
|
-
This skill is the Confluence counterpart of `lisa:notion-to-
|
|
18
|
+
This skill is the Confluence counterpart of `lisa:notion-to-tracker`. The two skills share the same
|
|
19
19
|
phases, gates, dry-run contract, and per-ticket validation logic. Only the PRD-side fetch / comment
|
|
20
20
|
tools differ. When changing workflow logic, change BOTH skills together so the two source vendors
|
|
21
21
|
stay behaviorally identical.
|
|
@@ -24,16 +24,16 @@ stay behaviorally identical.
|
|
|
24
24
|
|
|
25
25
|
This skill supports two modes, controlled by a `dry_run` flag in `$ARGUMENTS`:
|
|
26
26
|
|
|
27
|
-
- **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:
|
|
28
|
-
- **`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:
|
|
27
|
+
- **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:tracker-write`, run the preservation gate, report.
|
|
28
|
+
- **`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:confluence-prd-intake`) can decide whether to proceed.
|
|
29
29
|
|
|
30
|
-
Dry-run output format is identical to `lisa:notion-to-
|
|
30
|
+
Dry-run output format is identical to `lisa:notion-to-tracker`'s. Reuse the same fields, including
|
|
31
31
|
`prd_anchor` and `prd_section`. The only difference: `prd_anchor` is the inline-comment anchor text
|
|
32
32
|
that `createConfluenceInlineComment` accepts (typically the full selected substring; truncate if it
|
|
33
33
|
exceeds the tool's max anchor length and emit `null` if no resolvable anchor exists).
|
|
34
34
|
|
|
35
35
|
```text
|
|
36
|
-
## confluence-to-
|
|
36
|
+
## confluence-to-tracker dry-run: <PRD title>
|
|
37
37
|
|
|
38
38
|
### Planned hierarchy
|
|
39
39
|
- Epic: <summary>
|
|
@@ -67,11 +67,11 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
|
|
|
67
67
|
modifies the source Confluence page, never adds/removes labels, and never posts comments — that is the
|
|
68
68
|
orchestrating skill's responsibility (`lisa:confluence-prd-intake`).
|
|
69
69
|
|
|
70
|
-
## Hard Rule: All Writes Go Through `lisa:
|
|
70
|
+
## Hard Rule: All Writes Go Through `lisa:tracker-write`
|
|
71
71
|
|
|
72
|
-
**Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:
|
|
72
|
+
**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.**
|
|
73
73
|
|
|
74
|
-
`lisa:
|
|
74
|
+
`lisa:tracker-write` enforces gates this skill does not:
|
|
75
75
|
- 3-audience description (Context / Technical Approach / Acceptance Criteria)
|
|
76
76
|
- Gherkin acceptance criteria
|
|
77
77
|
- Epic parent validation
|
|
@@ -80,7 +80,7 @@ orchestrating skill's responsibility (`lisa:confluence-prd-intake`).
|
|
|
80
80
|
- Sign-in account and target environment recorded in description
|
|
81
81
|
- Post-create verification
|
|
82
82
|
|
|
83
|
-
Bypassing `lisa:
|
|
83
|
+
Bypassing `lisa:tracker-write` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. The Atlassian read tools (`getJiraIssue`, `searchJiraIssuesUsingJql`, `getJiraIssueRemoteIssueLinks`, `getAccessibleAtlassianResources`, `getJiraProjectIssueTypesMetadata`, `getVisibleJiraProjects`, and the Confluence read endpoints listed in `allowed-tools` above) ARE allowed for context gathering and the Phase 5.5 preservation gate.
|
|
84
84
|
|
|
85
85
|
## Input
|
|
86
86
|
|
|
@@ -165,7 +165,7 @@ The existing-component reuse expectation is defined in `lisa:jira-source-artifac
|
|
|
165
165
|
|
|
166
166
|
### Phase 2: Codebase + Live Product Research
|
|
167
167
|
|
|
168
|
-
Identical to `lisa:notion-to-
|
|
168
|
+
Identical to `lisa:notion-to-tracker` Phase 2. Two complementary inputs ground PRD analysis: the **code** (what's there to reuse / extend) and the **live product** (what users see today). Skipping either produces tickets that misjudge the change.
|
|
169
169
|
|
|
170
170
|
**2a. Codebase research.** If the session doesn't already have codebase context, explore the repos to understand what exists. Use Explore agents for repos not yet examined.
|
|
171
171
|
|
|
@@ -177,9 +177,9 @@ Walkthrough findings are attached to the originating Confluence PRD as a **foote
|
|
|
177
177
|
|
|
178
178
|
### Phase 3: Create Epics
|
|
179
179
|
|
|
180
|
-
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:
|
|
180
|
+
> **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.
|
|
181
181
|
|
|
182
|
-
For each PRD epic, **invoke the `lisa:
|
|
182
|
+
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
183
|
|
|
184
184
|
- `project_key`: from `JIRA_PROJECT` config
|
|
185
185
|
- `issue_type`: `Epic`
|
|
@@ -199,7 +199,7 @@ Capture the returned epic key — Phase 4 needs it as the parent for stories.
|
|
|
199
199
|
|
|
200
200
|
### Phase 4: Create Stories
|
|
201
201
|
|
|
202
|
-
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:
|
|
202
|
+
> **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.
|
|
203
203
|
|
|
204
204
|
For each Epic, plan two kinds of stories:
|
|
205
205
|
- **One "X.0 Setup" story** for data model and infrastructure prerequisites
|
|
@@ -207,13 +207,13 @@ For each Epic, plan two kinds of stories:
|
|
|
207
207
|
|
|
208
208
|
**Story naming convention**: Prefix the summary with a short code derived from the PRD title (e.g., `[CU-1.1]` for "Contract Upload").
|
|
209
209
|
|
|
210
|
-
For each story, **invoke `lisa:
|
|
210
|
+
For each story, **invoke `lisa:tracker-write`** with:
|
|
211
211
|
|
|
212
212
|
- `project_key`: from `JIRA_PROJECT` config
|
|
213
213
|
- `issue_type`: `Story`
|
|
214
214
|
- `epic_parent`: the Epic key captured in Phase 3 (mandatory)
|
|
215
215
|
- `summary`: prefixed per the naming convention above
|
|
216
|
-
- `description_body`: 3-audience description as in `lisa:notion-to-
|
|
216
|
+
- `description_body`: 3-audience description as in `lisa:notion-to-tracker` Phase 4
|
|
217
217
|
- `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below
|
|
218
218
|
|
|
219
219
|
| Story type | Inherits domains |
|
|
@@ -227,7 +227,7 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
|
|
|
227
227
|
|
|
228
228
|
### Phase 5: Create Sub-tasks
|
|
229
229
|
|
|
230
|
-
Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:
|
|
230
|
+
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.**
|
|
231
231
|
|
|
232
232
|
Each sub-task MUST:
|
|
233
233
|
1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
|
|
@@ -241,9 +241,9 @@ Run the preservation gate defined in `lisa:jira-source-artifacts` §8 against th
|
|
|
241
241
|
|
|
242
242
|
To run the gate, this skill must:
|
|
243
243
|
|
|
244
|
-
1. Pull the remote links of every epic and story created in this run via `
|
|
244
|
+
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)`.
|
|
245
245
|
2. Apply the §8 preservation matrix and verdict rules.
|
|
246
|
-
3. If the gate fails: list each dropped/misrouted artifact and either re-attach via `lisa:
|
|
246
|
+
3. If the gate fails: list each dropped/misrouted artifact and either re-attach via `lisa:tracker-write` (UPDATE mode) or stop and ask the human.
|
|
247
247
|
4. If the gate passes: print the matrix compactly and proceed to Phase 6.
|
|
248
248
|
|
|
249
249
|
This gate is not optional.
|
|
@@ -275,13 +275,13 @@ When delegating to agents, provide this context. **The "MUST invoke jira-write-t
|
|
|
275
275
|
```text
|
|
276
276
|
Create JIRA sub-tasks in the [PROJECT] project at [CLOUD_ID].
|
|
277
277
|
|
|
278
|
-
CRITICAL: For each sub-task, invoke the `lisa:
|
|
279
|
-
Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:
|
|
278
|
+
CRITICAL: For each sub-task, invoke the `lisa:tracker-write` skill via the Skill tool.
|
|
279
|
+
Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:tracker-write` skill
|
|
280
280
|
enforces required quality gates (Gherkin acceptance criteria, 3-audience description,
|
|
281
281
|
single-repo scope, sign-in/environment fields, post-create verification). Bypassing it
|
|
282
282
|
produces broken tickets that downstream skills (triage, journey, evidence) cannot use.
|
|
283
283
|
|
|
284
|
-
For each sub-task, invoke `lisa:
|
|
284
|
+
For each sub-task, invoke `lisa:tracker-write` with:
|
|
285
285
|
- issue_type: "Sub-task"
|
|
286
286
|
- parent: the parent story key
|
|
287
287
|
- project_key: [PROJECT]
|
|
@@ -297,9 +297,9 @@ For each sub-task, invoke `lisa:jira-write-ticket` with:
|
|
|
297
297
|
Each sub-task must:
|
|
298
298
|
1. Be scoped to ONE repo only — repo named in brackets in the summary
|
|
299
299
|
2. Include the Empirical Verification Plan in the description
|
|
300
|
-
3. Be created via `lisa:
|
|
300
|
+
3. Be created via `lisa:tracker-write`, not via direct MCP calls
|
|
301
301
|
|
|
302
|
-
If `lisa:
|
|
302
|
+
If `lisa:tracker-write` rejects a sub-task, fix the input and re-invoke. Do NOT fall back
|
|
303
303
|
to a direct `createJiraIssue` call to bypass the gate.
|
|
304
304
|
|
|
305
305
|
Test user info: [credentials from config]
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-add-journey
|
|
3
|
+
description: "Add a Validation Journey section to an existing GitHub Issue by analyzing the change type and generating appropriate verification steps with evidence markers. The GitHub counterpart of lisa:jira-add-journey."
|
|
4
|
+
allowed-tools: ["Bash", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Add Validation Journey to Existing GitHub Issue
|
|
8
|
+
|
|
9
|
+
Read an existing GitHub Issue, analyze the change type, and append a `## Validation Journey` markdown section with appropriate verification steps based on the project's verification patterns.
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
`$ARGUMENTS`: `<ISSUE_REF>`
|
|
14
|
+
|
|
15
|
+
- `ISSUE_REF` (required): GitHub issue ref — `org/repo#<number>` or full GitHub issue URL.
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- `gh` CLI authenticated (`gh auth status`).
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
### Step 1: Read the Issue
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
gh issue view <number> --repo <org>/<repo> --json number,title,body,labels,assignees,milestone,url
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Extract: title, body, type (from `type:` label), components (from `component:` labels), assignees, linked PRs.
|
|
30
|
+
|
|
31
|
+
### Step 2: Check for Existing Journey
|
|
32
|
+
|
|
33
|
+
Parse the body for an existing `## Validation Journey` heading. If present and the section contains at least one `[EVIDENCE: <name>]` marker, the issue already has a journey — report this to the user and stop.
|
|
34
|
+
|
|
35
|
+
### Step 3: Analyze the Change Type
|
|
36
|
+
|
|
37
|
+
Examine the body, acceptance criteria, and codebase to determine the change type:
|
|
38
|
+
|
|
39
|
+
1. **API/GraphQL changes** — New or modified endpoints, request/response schemas
|
|
40
|
+
2. **Database migration** — Schema changes, new tables/columns, indexes
|
|
41
|
+
3. **Background job/queue** — New job processors, queue consumers, event handlers
|
|
42
|
+
4. **Library/utility** — Exported functions, shared modules, npm package changes
|
|
43
|
+
5. **Security fix** — Auth, authorization, input validation, OWASP vulnerabilities
|
|
44
|
+
6. **Authentication/authorization** — Role-based access, session management, tokens
|
|
45
|
+
|
|
46
|
+
Use Explore agents or read the codebase directly to understand which files are affected.
|
|
47
|
+
|
|
48
|
+
### Step 4: Map Change Type to Verification Pattern
|
|
49
|
+
|
|
50
|
+
| Change Type | Verification Approach |
|
|
51
|
+
|---|---|
|
|
52
|
+
| API/GraphQL | curl commands verifying endpoints, status codes, response schemas |
|
|
53
|
+
| Database migration | Migration execution + schema verification + rollback check |
|
|
54
|
+
| Background job/queue | Enqueue + process + state change verification |
|
|
55
|
+
| Library/utility | Test execution + build verification + export check |
|
|
56
|
+
| Security fix | Exploit reproduction pre-fix + exploit failure post-fix |
|
|
57
|
+
| Auth/authz | Multi-role verification with explicit status codes |
|
|
58
|
+
|
|
59
|
+
### Step 5: Draft the Validation Journey
|
|
60
|
+
|
|
61
|
+
Compose the journey with `[EVIDENCE: name]` markers at key verification points:
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
## Validation Journey
|
|
65
|
+
|
|
66
|
+
### Prerequisites
|
|
67
|
+
- List required services, database, env vars
|
|
68
|
+
|
|
69
|
+
### Steps
|
|
70
|
+
1. Verify current state before changes
|
|
71
|
+
2. Apply the change
|
|
72
|
+
3. Verify expected new state [EVIDENCE: state-name]
|
|
73
|
+
4. Test error/edge cases [EVIDENCE: error-case]
|
|
74
|
+
5. Verify rollback if applicable [EVIDENCE: rollback]
|
|
75
|
+
|
|
76
|
+
### Assertions
|
|
77
|
+
- Describe what must be true after verification
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Guidelines for Drafting
|
|
81
|
+
|
|
82
|
+
1. **2–5 evidence markers** — Focus on proving the change works and handles errors.
|
|
83
|
+
2. **Concrete, runnable steps** — `Run \`curl -s localhost:3000/health | jq .status\`` not "Check the endpoint".
|
|
84
|
+
3. **Include environment setup** — Database connection, running services, env vars.
|
|
85
|
+
4. **Evidence names in kebab-case** — `api-response`, `schema-check`, `rate-limit-hit`.
|
|
86
|
+
5. **Assertions are measurable** — `Returns 200 with {status: ok}` not "API works correctly".
|
|
87
|
+
6. **Cover happy path AND error path** — At minimum, one success and one failure marker.
|
|
88
|
+
|
|
89
|
+
### Step 6: Present to User for Approval
|
|
90
|
+
|
|
91
|
+
Display the drafted Validation Journey and ask for confirmation before appending it to the issue body. (If invoked from a parent skill running unattended — e.g., `lisa:github-write-issue` Phase 6 step 5 — proceed without the prompt.)
|
|
92
|
+
|
|
93
|
+
### Step 7: Append to Issue Body
|
|
94
|
+
|
|
95
|
+
After approval:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
current_body=$(gh issue view <number> --repo <org>/<repo> --json body --jq '.body')
|
|
99
|
+
# Compose new body: existing + "\n\n## Validation Journey\n..." (or replace if present)
|
|
100
|
+
gh issue edit <number> --repo <org>/<repo> --body-file /tmp/updated-body.md
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Preserve every other section verbatim — never re-render the body from parsed fields, since the issue may carry `extra_sections` we don't recognize.
|
|
104
|
+
|
|
105
|
+
### Step 8: Verify
|
|
106
|
+
|
|
107
|
+
Re-read the issue and confirm the `## Validation Journey` section is present and includes at least one `[EVIDENCE: <name>]` marker.
|
|
108
|
+
|
|
109
|
+
## When to Use This Skill
|
|
110
|
+
|
|
111
|
+
- Issue was created before the Validation Journey convention was established.
|
|
112
|
+
- Issue was created manually without following `lisa:github-create` guidelines.
|
|
113
|
+
- Issue needs a journey added or updated based on implementation progress.
|
|
114
|
+
- Before starting work on an issue, to ensure verification steps are documented.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-build-intake
|
|
3
|
+
description: "GitHub counterpart to lisa:jira-build-intake. Scans a GitHub repository for issues labeled `status:ready`, claims each by relabeling to `status:in-progress`, runs the implementation/build flow via lisa:github-agent, and relabels to `status:on-dev` on completion. The `status:ready` label is the human-flipped signal that an issue is truly ready for development — mirroring how Notion PRDs work product Draft → Ready → (us) In Review → Blocked|Ticketed."
|
|
4
|
+
allowed-tools: ["Skill", "Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GitHub Build Intake: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
`$ARGUMENTS` is one of:
|
|
10
|
+
|
|
11
|
+
1. A GitHub `org/repo` token (e.g., `acme/frontend-v2`).
|
|
12
|
+
2. A full GitHub repo URL (e.g., `https://github.com/acme/frontend-v2`).
|
|
13
|
+
3. The literal token `github` — falls back to `.lisa.config.json` (`github.org` / `github.repo`).
|
|
14
|
+
|
|
15
|
+
Run one build-intake cycle. Each `status:ready` issue is claimed, built via the `lisa:github-agent` flow, and relabeled to `status:on-dev` (or the equivalent next-label for that repo). The cycle is the symmetric mirror of `lisa:notion-prd-intake`: humans flip `status:ready`, agents pick up and progress.
|
|
16
|
+
|
|
17
|
+
## Confirmation policy
|
|
18
|
+
|
|
19
|
+
Do NOT ask the caller whether to proceed. Once invoked with a repo, run the cycle to completion — claim, dispatch each issue through `lisa:github-agent`, relabel successful builds to `status:on-dev`, write the summary. The caller (a human or a cron) has already authorized the run by invoking the skill; re-prompting defeats the purpose of a background batch.
|
|
20
|
+
|
|
21
|
+
Specifically forbidden:
|
|
22
|
+
|
|
23
|
+
- Previewing projected scope (issue count, projected PR count, build duration) and asking whether to continue.
|
|
24
|
+
- Offering A/B/C-style choices like "proceed / skip a few / dry-run only".
|
|
25
|
+
- Pausing because the queue is large, issues look complex, or issues are likely to be `Blocked` by `lisa:github-agent`'s pre-flight gate. Pre-flight `Blocked` is a valid terminal state of the per-issue lifecycle, not a failure mode.
|
|
26
|
+
- Pausing because the build flow looks expensive.
|
|
27
|
+
|
|
28
|
+
The only legitimate reasons to stop early:
|
|
29
|
+
|
|
30
|
+
- Missing repo or required configuration. Surface the missing value and exit.
|
|
31
|
+
- Label namespace not adopted (no issue carries any of `status:ready` / `status:in-progress` / `status:code-review` / `status:on-dev` / `status:done`). Surface a label-convention error and exit (this is setup, not a normal idle cycle — see "Adoption" at the bottom).
|
|
32
|
+
- Empty `status:ready` set. Exit cleanly with `"No GitHub issues labeled status:ready in <org>/<repo>. Nothing to do."`
|
|
33
|
+
|
|
34
|
+
## Lifecycle assumed
|
|
35
|
+
|
|
36
|
+
The GitHub Issues build lifecycle uses **labels** (we deliberately do NOT key off open/closed alone — closed issues aren't always the right post-build state):
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
status:ready → status:in-progress → status:code-review → status:on-dev → status:done
|
|
40
|
+
(human) (us claim) (us / PR opens) (us done; PR ready) (downstream / merge)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This skill ONLY transitions:
|
|
44
|
+
|
|
45
|
+
- `status:ready` → `status:in-progress` (claim)
|
|
46
|
+
- `status:in-progress` → `status:on-dev` (build complete, PR ready)
|
|
47
|
+
|
|
48
|
+
It never touches `status:code-review` (set by the agent / PR open hook), `status:done` (set by merge automation or PM), or any other status.
|
|
49
|
+
|
|
50
|
+
A "transition" means: remove the old `status:*` label and add the new one, in two `gh issue edit` calls (`--remove-label` + `--add-label`) or one combined call. The skill MUST verify exactly one `status:*` label is present after the update — having two simultaneously breaks idempotency.
|
|
51
|
+
|
|
52
|
+
**Pre-flight check**: at the start of each cycle, confirm at least one of the `status:*` labels exists on the repo via `gh label list --repo <org>/<repo> --json name`. If none exist, the convention has not been adopted — surface the label-convention error and exit.
|
|
53
|
+
|
|
54
|
+
## Phases
|
|
55
|
+
|
|
56
|
+
### Phase 1 — Resolve the repo
|
|
57
|
+
|
|
58
|
+
1. Parse `$ARGUMENTS`:
|
|
59
|
+
- `org/repo` token → use as-is.
|
|
60
|
+
- GitHub URL → extract `org` and `repo`.
|
|
61
|
+
- Literal `github` → resolve from `.lisa.config.json` (`github.org`, `github.repo`); error if not set.
|
|
62
|
+
2. Confirm `gh auth status` succeeds.
|
|
63
|
+
3. Confirm the repo is reachable: `gh repo view <org>/<repo> --json name --jq '.name'`.
|
|
64
|
+
|
|
65
|
+
### Phase 2 — Find Ready issues
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
gh issue list --repo <org>/<repo> --label status:ready --state open --json number,title,labels,assignees,milestone,createdAt --limit 100
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
If empty, run a secondary check to distinguish a genuinely empty queue from an unconfigured repo:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
gh label list --repo <org>/<repo> --json name --jq '.[] | select(startswith("status:")) | .name'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If no `status:*` labels exist → label namespace not adopted, surface a setup error and exit. If `status:*` labels exist but none are `status:ready` on any open issue → genuinely empty queue, exit cleanly with `"No GitHub issues labeled status:ready. Nothing to do."`
|
|
78
|
+
|
|
79
|
+
### Phase 3 — Process each Ready issue (serial)
|
|
80
|
+
|
|
81
|
+
#### 3a. Claim
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
gh issue edit <number> --repo <org>/<repo> --remove-label status:ready --add-label status:in-progress
|
|
85
|
+
gh issue comment <number> --repo <org>/<repo> --body "[claude-build-intake] Claimed by Claude. Starting build."
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This is the idempotency lock — a re-entrant cycle's `--label status:ready` filter will not see this issue again.
|
|
89
|
+
|
|
90
|
+
If the relabel fails (permission, race), log under "Errors" in the cycle summary and skip this issue. **Do not invoke the build flow on an issue you didn't successfully claim.**
|
|
91
|
+
|
|
92
|
+
#### 3b. Run the build flow
|
|
93
|
+
|
|
94
|
+
Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `lisa:github-agent` owns:
|
|
95
|
+
- Reading the full issue graph (`lisa:github-read-issue`)
|
|
96
|
+
- Running its own pre-flight quality gate (`lisa:github-verify`)
|
|
97
|
+
- Running issue triage (`lisa:ticket-triage`)
|
|
98
|
+
- Routing to the appropriate flow (Build / Fix / Investigate / Improve based on `type:` label)
|
|
99
|
+
- Posting progress comments via `lisa:github-sync`
|
|
100
|
+
- Posting evidence via `lisa:github-evidence`
|
|
101
|
+
|
|
102
|
+
Wait for `lisa:github-agent` to return. Capture its outcome:
|
|
103
|
+
|
|
104
|
+
- **Success** — PR is ready (open or merged); evidence posted; ready for next status.
|
|
105
|
+
- **Blocked by github-verify pre-flight gate** — `lisa:github-agent` itself relabels the issue to `status:blocked` (or removes `status:in-progress` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.
|
|
106
|
+
- **Blocked by ticket-triage ambiguities** — `lisa:github-agent` posts findings and stops. The issue stays in `status:in-progress`. Surface to human; do not auto-relabel. Record under "Errors".
|
|
107
|
+
- **Errored** — exception, missing config, etc. Leave the issue in `status:in-progress` for human investigation. Record under "Errors".
|
|
108
|
+
|
|
109
|
+
#### 3c. Transition to On Dev (only on Success)
|
|
110
|
+
|
|
111
|
+
If `lisa:github-agent` returned Success:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
gh issue edit <number> --repo <org>/<repo> --remove-label status:in-progress --add-label status:on-dev
|
|
115
|
+
gh issue comment <number> --repo <org>/<repo> --body "[claude-build-intake] Build complete. PR <URL>. Transitioned to status:on-dev."
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
For any non-Success outcome, do NOT transition. The issue sits in `status:in-progress` (or wherever `lisa:github-agent` left it) — humans take it from there.
|
|
119
|
+
|
|
120
|
+
#### 3d. Continue
|
|
121
|
+
|
|
122
|
+
Move to the next Ready issue. One issue failing does not stop others.
|
|
123
|
+
|
|
124
|
+
### Phase 4 — Summary report
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
## github-build-intake summary
|
|
128
|
+
|
|
129
|
+
Repo: <org>/<repo>
|
|
130
|
+
Cycle started: <ISO timestamp>
|
|
131
|
+
Cycle completed: <ISO timestamp>
|
|
132
|
+
|
|
133
|
+
Issues processed: <n>
|
|
134
|
+
- status:on-dev (build complete, PR ready): <n>
|
|
135
|
+
- <org>/<repo>#<number> <title> → PR <URL>
|
|
136
|
+
- Blocked (pre-flight verify failed): <n>
|
|
137
|
+
- <org>/<repo>#<number> <title> — see issue comments
|
|
138
|
+
- Held (triage found ambiguities): <n>
|
|
139
|
+
- <org>/<repo>#<number> <title> — see issue comments
|
|
140
|
+
- Errors: <n>
|
|
141
|
+
- <org>/<repo>#<number> <title> — <reason>
|
|
142
|
+
|
|
143
|
+
Total PRs opened: <n>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Idempotency & safety
|
|
147
|
+
|
|
148
|
+
- **Claim-first ordering**: `status:in-progress` set BEFORE `lisa:github-agent` invocation — no double-pickup.
|
|
149
|
+
- **No writes outside the lifecycle**: this skill only relabels `status:ready → status:in-progress` and `status:in-progress → status:on-dev`. Every other label change is owned by `lisa:github-agent`.
|
|
150
|
+
- **Failure isolation**: per-issue exceptions caught and recorded; the cycle continues.
|
|
151
|
+
- **Single cycle per repo**: do not run two `lisa:github-build-intake` cycles in parallel against the same repo — concurrent claims could race. The scheduling layer is responsible for serialization.
|
|
152
|
+
- **Single-label invariant**: after every transition, verify exactly one `status:*` label is present on the issue. If two are present (rare race), surface as an Error and skip — do NOT auto-resolve.
|
|
153
|
+
|
|
154
|
+
## Configuration
|
|
155
|
+
|
|
156
|
+
| Variable | Default | Purpose |
|
|
157
|
+
|----------|---------|---------|
|
|
158
|
+
| `.lisa.config.json` `github.org` | (from `$ARGUMENTS`) | GitHub org for the default queue |
|
|
159
|
+
| `.lisa.config.json` `github.repo` | (from `$ARGUMENTS`) | GitHub repo for the default queue |
|
|
160
|
+
| Label: queue | `status:ready` | The label that signals "human says this is buildable" |
|
|
161
|
+
| Label: claim | `status:in-progress` | The label set on pickup |
|
|
162
|
+
| Label: done | `status:on-dev` | The label set after a successful build |
|
|
163
|
+
|
|
164
|
+
If the repo has not adopted the `status:*` label namespace, this skill cannot run. The remediation is to create the labels — `gh label create status:ready --color FBCA04 --description "Ready for build"` and similar — typically a one-time setup.
|
|
165
|
+
|
|
166
|
+
## Rules
|
|
167
|
+
|
|
168
|
+
- Never relabel an issue the cycle didn't claim. The `status:in-progress` label is the signature of cycle ownership.
|
|
169
|
+
- Never bypass `lisa:github-agent` to do build work directly. `lisa:github-agent` owns the per-issue lifecycle.
|
|
170
|
+
- Never auto-transition past `status:on-dev`. Downstream labels (`status:done`, etc.) are owned by QA / PM / merge automation.
|
|
171
|
+
- If the issue has no Validation Journey or no sign-in credentials, `lisa:github-agent`'s pre-flight verify will catch it — **don't try to fix the issue from here**.
|
|
172
|
+
- On any unexpected response from `lisa:github-agent` (status it doesn't claim, missing PR URL on success), record as Error and surface — never assume.
|
|
173
|
+
|
|
174
|
+
## Adoption (one-time per repo)
|
|
175
|
+
|
|
176
|
+
Before this skill can run, the repo must adopt the `status:*` label namespace:
|
|
177
|
+
|
|
178
|
+
1. Create the labels:
|
|
179
|
+
```bash
|
|
180
|
+
gh label create status:ready --color FBCA04 --description "Ready for build" --repo <org>/<repo>
|
|
181
|
+
gh label create status:in-progress --color 0E8A16 --description "Build in progress" --repo <org>/<repo>
|
|
182
|
+
gh label create status:code-review --color 5319E7 --description "PR open, awaiting review" --repo <org>/<repo>
|
|
183
|
+
gh label create status:on-dev --color 1D76DB --description "Built, deployed to dev" --repo <org>/<repo>
|
|
184
|
+
gh label create status:done --color 0E8A16 --description "Shipped" --repo <org>/<repo>
|
|
185
|
+
```
|
|
186
|
+
2. Apply `status:ready` to issues that are ready for development.
|
|
187
|
+
3. Reserve `status:in-progress`, `status:on-dev` for this skill — humans should not set them manually except to recover from an error.
|
|
188
|
+
4. PRD-source labels (`prd-ready`, `prd-in-review`, etc.) are a SEPARATE namespace owned by `lisa:github-prd-intake`. Don't conflate.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-create
|
|
3
|
+
description: This skill should be used when creating GitHub Issue Epics, Stories, and Sub-tasks from code files or descriptions. It analyzes the provided input, determines the appropriate issue hierarchy, and creates issues with comprehensive quality requirements including test-first development and documentation. The GitHub counterpart of lisa:jira-create.
|
|
4
|
+
allowed-tools: ["Read", "Glob", "LS", "Skill", "Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Create GitHub Issues from $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Analyze the provided file(s) and plan a GitHub Issue hierarchy. **This skill plans structure only — every individual issue write is delegated to `lisa:github-write-issue` (which itself goes through the `lisa:tracker-write` shim when invoked from a vendor-neutral caller).** Do not call `gh issue create` from this skill; the necessary write invocations belong to the writer skill so the gates can never be bypassed.
|
|
10
|
+
|
|
11
|
+
## Process
|
|
12
|
+
|
|
13
|
+
1. **Analyze**: Read `$ARGUMENTS` to understand scope.
|
|
14
|
+
2. **Extract source artifacts**: invoke the `lisa:jira-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
|
+
3. **Walk the live product** (when applicable): if the work touches existing user-facing surfaces, invoke the `lisa:product-walkthrough` skill.
|
|
16
|
+
4. **Determine structure**:
|
|
17
|
+
- Epic needed if: multiple features, major changes, >3 related files.
|
|
18
|
+
- Direct Tasks if: bug fix, single file, minor change.
|
|
19
|
+
5. **Plan hierarchy**:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
Epic → Story → Sub-tasks (test, implement, document, cleanup)
|
|
23
|
+
```
|
|
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:jira-source-artifacts` inheritance rules) and walkthrough findings (under `## Current Product`).
|
|
26
|
+
7. **Run the artifact preservation gate** (`lisa:jira-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
|
+
|
|
28
|
+
## Mandatory for Every Code Issue
|
|
29
|
+
|
|
30
|
+
**Test-First**: Write tests before implementation
|
|
31
|
+
**Quality Gates**: All tests/checks must pass, no SonarCloud violations
|
|
32
|
+
**Documentation**: Check existing, update/create new, remove obsolete
|
|
33
|
+
**Cleanup**: Remove temporary code, scripts, dev configs
|
|
34
|
+
|
|
35
|
+
## Validation Journey
|
|
36
|
+
|
|
37
|
+
Issues that change runtime behavior should include a `## Validation Journey` section. This section is consumed by `lisa:github-journey` to automate verification. Use `lisa:github-add-journey` to draft + append the section after creation.
|
|
38
|
+
|
|
39
|
+
## Source Artifacts
|
|
40
|
+
|
|
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
|
+
|
|
43
|
+
**Invoke `lisa:jira-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
|
+
|
|
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
|
+
|
|
47
|
+
## Live Product Walkthrough
|
|
48
|
+
|
|
49
|
+
When the work touches existing user-facing surfaces, invoke `lisa:product-walkthrough` before drafting issues. The findings become inputs to the issue plan and surface under `## Current Product` on the resulting issues.
|
|
50
|
+
|
|
51
|
+
## Issue Requirements
|
|
52
|
+
|
|
53
|
+
Each issue must clearly communicate to:
|
|
54
|
+
|
|
55
|
+
- **Coding Assistants**: Implementation requirements
|
|
56
|
+
- **Developers**: Technical approach
|
|
57
|
+
- **Stakeholders**: Business value
|
|
58
|
+
|
|
59
|
+
Default repo: from `.lisa.config.json` `github.org` / `github.repo` (override via arguments).
|
|
60
|
+
|
|
61
|
+
## Delegation to github-write-issue
|
|
62
|
+
|
|
63
|
+
**Mandatory.** Every issue created by this skill MUST go through `lisa:github-write-issue`. This skill never calls `gh issue create` itself — that invocation belongs to the writer.
|
|
64
|
+
|
|
65
|
+
`lisa:github-write-issue` enforces:
|
|
66
|
+
- 3-audience description (Context / Technical Approach / Acceptance Criteria)
|
|
67
|
+
- Gherkin acceptance criteria
|
|
68
|
+
- Parent sub-issue validation (non-bug, non-epic types)
|
|
69
|
+
- Explicit relationship discovery (`Blocks` / `Blocked by` / `Relates to` / `Duplicates` / `Cloned from`)
|
|
70
|
+
- Remote links (PRs, Confluence, dashboards)
|
|
71
|
+
- Single-repo scope check for Bug / Task / Sub-task
|
|
72
|
+
- Sign-in account and target environment recorded in body
|
|
73
|
+
- Post-create verification
|
|
74
|
+
|
|
75
|
+
### Invocation order
|
|
76
|
+
|
|
77
|
+
Issues must be created in parent-before-child order:
|
|
78
|
+
|
|
79
|
+
1. Invoke `lisa:github-write-issue` for the Epic. Capture the returned issue number.
|
|
80
|
+
2. For each Story, invoke `lisa:github-write-issue` with the Epic ref as `parent_ref`. Capture each Story number.
|
|
81
|
+
3. For each Sub-task, invoke `lisa:github-write-issue` with the Story ref as `parent_ref`.
|
|
82
|
+
|
|
83
|
+
### What to pass to each invocation
|
|
84
|
+
|
|
85
|
+
For every delegated write, pass:
|
|
86
|
+
- The summary, issue type, repo (org/repo), and priority you decided
|
|
87
|
+
- The body with all sections drafted (Context / Technical Approach / Acceptance Criteria / Out of Scope / etc.)
|
|
88
|
+
- Gherkin acceptance criteria
|
|
89
|
+
- `parent_ref` (Epic ref for Stories; Story ref for Sub-tasks)
|
|
90
|
+
- The artifact list extracted in "Source Artifacts", filtered by domain per the inheritance rules — `lisa:github-write-issue` Phase 4c attaches them
|
|
91
|
+
- For runtime-behavior issues: instruct the writer to call `lisa:github-add-journey` after create
|
|
92
|
+
|
|
93
|
+
### What this skill is responsible for
|
|
94
|
+
|
|
95
|
+
- Deciding the *shape* of the hierarchy (what's an Epic vs. Story vs. Sub-task).
|
|
96
|
+
- Drafting the body and acceptance criteria from the input.
|
|
97
|
+
- Extracting and classifying source artifacts.
|
|
98
|
+
- Threading parent refs through subsequent writes.
|
|
99
|
+
- Running the preservation check after all writes complete.
|
|
100
|
+
|
|
101
|
+
It does not own the actual `gh issue create` call — that's `lisa:github-write-issue`'s job.
|