@codyswann/lisa 2.6.4 → 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 +10 -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/agents/verification-specialist.md +8 -2
- package/plugins/lisa/commands/codify-verification.md +6 -0
- package/plugins/lisa/commands/intake.md +2 -2
- package/plugins/lisa/commands/plan.md +2 -2
- package/plugins/lisa/hooks/block-no-verify.sh +37 -0
- package/plugins/lisa/rules/intent-routing.md +21 -15
- package/plugins/lisa/rules/tracker-resolution.md +76 -0
- package/plugins/lisa/rules/verification.md +2 -2
- package/plugins/lisa/skills/codify-verification/SKILL.md +152 -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/verification-lifecycle/SKILL.md +31 -9
- package/plugins/lisa/skills/verify/SKILL.md +7 -6
- 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/.claude-plugin/plugin.json +6 -0
- 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/agents/verification-specialist.md +8 -2
- package/plugins/src/base/commands/codify-verification.md +6 -0
- package/plugins/src/base/commands/intake.md +2 -2
- package/plugins/src/base/commands/plan.md +2 -2
- package/plugins/src/base/hooks/block-no-verify.sh +37 -0
- package/plugins/src/base/rules/intent-routing.md +21 -15
- package/plugins/src/base/rules/tracker-resolution.md +76 -0
- package/plugins/src/base/rules/verification.md +2 -2
- package/plugins/src/base/skills/codify-verification/SKILL.md +152 -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/verification-lifecycle/SKILL.md +31 -9
- package/plugins/src/base/skills/verify/SKILL.md +7 -6
- package/plugins/src/expo/skills/jira-verify/SKILL.md +1 -1
- package/plugins/src/rails/skills/jira-verify/SKILL.md +1 -1
|
@@ -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.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-evidence
|
|
3
|
+
description: "Upload text evidence to the GitHub `pr-assets` release, update PR description, post a GitHub Issue comment with code blocks, and relabel the issue to `status:code-review`. Reusable by any skill that captures evidence and generates evidence/comment.md (and optionally evidence/comment.txt). The GitHub counterpart of lisa:jira-evidence."
|
|
4
|
+
allowed-tools: ["Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GitHub Evidence Posting
|
|
8
|
+
|
|
9
|
+
Upload captured evidence and generated templates to the GitHub PR description and the originating GitHub Issue. This skill is the posting step — it assumes evidence files and a comment template already exist in the evidence directory.
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
`$ARGUMENTS`: `<ISSUE_REF> <EVIDENCE_DIR> <PR_NUMBER>`
|
|
14
|
+
|
|
15
|
+
- `ISSUE_REF` (required): GitHub issue ref — `org/repo#<number>` or full GitHub issue URL.
|
|
16
|
+
- `EVIDENCE_DIR` (required): Directory containing evidence and templates (e.g., `./evidence`).
|
|
17
|
+
- `PR_NUMBER` (required): GitHub PR number to update description.
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
- `gh` CLI authenticated (`gh auth status`).
|
|
22
|
+
- Evidence directory containing:
|
|
23
|
+
- `NN-name.txt` or `NN-name.json` text evidence files (e.g., `01-health-check.json`)
|
|
24
|
+
- `comment.md` — GitHub markdown body for both the issue comment and the PR description's `## Evidence` section.
|
|
25
|
+
- (Optional) `comment.txt` — kept for parity with the JIRA path; not used here.
|
|
26
|
+
|
|
27
|
+
## Workflow
|
|
28
|
+
|
|
29
|
+
1. **Resolve refs**
|
|
30
|
+
|
|
31
|
+
Parse `ISSUE_REF` into `<issue-org>/<issue-repo>#<issue-number>`. Parse the local repo (where the PR lives) via `gh repo view --json nameWithOwner --jq '.nameWithOwner'`.
|
|
32
|
+
|
|
33
|
+
2. **Ensure the `pr-assets` release exists in the IMPLEMENTATION repo**
|
|
34
|
+
|
|
35
|
+
The `pr-assets` release is the asset CDN for evidence files. Each PR's evidence is uploaded with the PR number prefix in the asset name to keep them addressable.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
gh release view pr-assets --repo <impl-org>/<impl-repo> >/dev/null 2>&1 \
|
|
39
|
+
|| gh release create pr-assets --repo <impl-org>/<impl-repo> --title "PR Assets" --notes "CDN for PR evidence"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
3. **Upload each evidence file**
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
for f in "$EVIDENCE_DIR"/[0-9][0-9]-*.txt "$EVIDENCE_DIR"/[0-9][0-9]-*.json; do
|
|
46
|
+
[ -f "$f" ] || continue
|
|
47
|
+
name="pr-${PR_NUMBER}-$(basename "$f")"
|
|
48
|
+
gh release upload pr-assets --repo <impl-org>/<impl-repo> --clobber "$f#$name"
|
|
49
|
+
done
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The `#$name` syntax sets the asset name. `--clobber` lets re-runs overwrite.
|
|
53
|
+
|
|
54
|
+
4. **Update the PR description**
|
|
55
|
+
|
|
56
|
+
Replace or append the `## Evidence` section in the PR body using `comment.md`:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
current_body=$(gh pr view "$PR_NUMBER" --repo <impl-org>/<impl-repo> --json body --jq '.body')
|
|
60
|
+
evidence_section=$(cat "$EVIDENCE_DIR/comment.md")
|
|
61
|
+
# Replace existing ## Evidence ... up to next ## or EOF; otherwise append.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Use a Bash heredoc / temp file to compose the new body, then:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
gh pr edit "$PR_NUMBER" --repo <impl-org>/<impl-repo> --body-file /tmp/pr-body.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
5. **Post a comment on the originating issue**
|
|
71
|
+
|
|
72
|
+
The issue may live in a different repo than the PR (cross-repo work):
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
gh issue comment <issue-number> --repo <issue-org>/<issue-repo> --body-file "$EVIDENCE_DIR/comment.md"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
6. **Relabel the issue to `status:code-review`**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
gh issue edit <issue-number> --repo <issue-org>/<issue-repo> \
|
|
82
|
+
--remove-label status:in-progress \
|
|
83
|
+
--add-label status:code-review
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
If the current label is already `status:code-review`, skip. If neither `status:in-progress` nor `status:code-review` is present, log a warning and continue without changing labels — the issue may have been hand-managed.
|
|
87
|
+
|
|
88
|
+
## Evidence Naming Convention
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
evidence/
|
|
92
|
+
01-health-check.json uploaded
|
|
93
|
+
02-schema-after-migration.txt uploaded
|
|
94
|
+
03-rate-limit-response.txt uploaded
|
|
95
|
+
comment.md used for issue comment + PR description
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Asset names in the release are prefixed with `pr-<number>-` so multiple PRs' evidence coexists without collision.
|
|
99
|
+
|
|
100
|
+
## Troubleshooting
|
|
101
|
+
|
|
102
|
+
### Evidence not appearing in GitHub PR or issue
|
|
103
|
+
|
|
104
|
+
Check:
|
|
105
|
+
- `gh auth status` succeeds.
|
|
106
|
+
- The PR / issue refs are correct.
|
|
107
|
+
- The `pr-assets` release exists in the implementation repo.
|
|
108
|
+
|
|
109
|
+
### `gh issue edit` returns 404
|
|
110
|
+
|
|
111
|
+
The issue may live in a different repo than the PR — pass `--repo <issue-org>/<issue-repo>` explicitly. The implementation repo and the destination tracker repo can differ when `tracker = "github"` is set on a project that ships from a separate codebase.
|
|
112
|
+
|
|
113
|
+
## Notes
|
|
114
|
+
|
|
115
|
+
- This skill is symmetric with `lisa:jira-evidence` — the evidence directory layout and `comment.md` content are identical so a single template generator can serve both vendors.
|
|
116
|
+
- The PR's `## Evidence` section is the canonical link for reviewers; the issue comment is for the PRD/PM thread.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-journey
|
|
3
|
+
description: "Parse a GitHub Issue's Validation Journey section, execute the verification steps using appropriate tools (curl, test commands, database queries), capture evidence at each marker, and post results via lisa:github-evidence. The GitHub counterpart of lisa:jira-journey."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Glob", "Grep", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GitHub Validation Journey
|
|
8
|
+
|
|
9
|
+
Parse a GitHub Issue's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each `[EVIDENCE: <name>]` marker, and post to the issue + GitHub PR.
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
`$ARGUMENTS`: `<ISSUE_REF> [PR_NUMBER]`
|
|
14
|
+
|
|
15
|
+
- `ISSUE_REF` (required): GitHub issue ref — `org/repo#<number>` or full GitHub issue URL.
|
|
16
|
+
- `PR_NUMBER` (optional): GitHub PR number for the implementation PR. If omitted, the skill auto-detects the PR from `lisa:github-read-issue`'s linked-PR list (preferring the most recent open PR).
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
- `gh` CLI authenticated.
|
|
21
|
+
- Appropriate services running for the verification type (dev server, database, etc.).
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
### Step 1: Parse the Validation Journey
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
gh issue view <number> --repo <org>/<repo> --json body --jq '.body'
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Extract the `## Validation Journey` section (plus its `### Prerequisites`, `### Steps`, and `### Assertions` sub-sections). Parse each step into a structured form: `{ index, text, evidence_marker (or null) }`.
|
|
32
|
+
|
|
33
|
+
If the issue has no Validation Journey, stop and instruct the caller to run `/github-add-journey <issue-ref>` first.
|
|
34
|
+
|
|
35
|
+
### Step 2: Satisfy Prerequisites
|
|
36
|
+
|
|
37
|
+
Before starting the journey, verify each prerequisite:
|
|
38
|
+
|
|
39
|
+
1. Check if required services are running (`curl localhost:<port>/health`, `pg_isready`, etc.).
|
|
40
|
+
2. Verify database connectivity if the journey touches data.
|
|
41
|
+
3. Ensure environment variables are set.
|
|
42
|
+
4. Run any setup commands mentioned in `### Prerequisites`.
|
|
43
|
+
|
|
44
|
+
### Step 3: Execute Steps and Capture Evidence
|
|
45
|
+
|
|
46
|
+
Execute each step sequentially. Determine the verification approach based on the step text and the issue's change type (inferred from `type:` label, `component:` labels, and the body):
|
|
47
|
+
|
|
48
|
+
- **API endpoints** → Run curl commands, capture HTTP response to `evidence/NN-name.txt` (or `.json`).
|
|
49
|
+
- **Database changes** → Run psql/migration commands, capture schema output.
|
|
50
|
+
- **Background jobs** → Trigger the job, check queue/state, capture logs.
|
|
51
|
+
- **Library/utility changes** → Run tests, capture output.
|
|
52
|
+
- **Security fixes** → Reproduce exploit attempt, verify fix, capture output.
|
|
53
|
+
|
|
54
|
+
At each `[EVIDENCE: name]` marker, capture stdout/stderr to a numbered file:
|
|
55
|
+
|
|
56
|
+
#### Evidence Naming Convention
|
|
57
|
+
|
|
58
|
+
`{NN}-{evidence-name}.txt` (or `.json` for structured data):
|
|
59
|
+
|
|
60
|
+
- `NN`: zero-padded sequential number (01, 02, 03...).
|
|
61
|
+
- `evidence-name`: the value from `[EVIDENCE: <name>]` (kebab-case).
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
evidence/
|
|
67
|
+
01-health-check.json
|
|
68
|
+
02-schema-after-migration.txt
|
|
69
|
+
03-rate-limit-response.txt
|
|
70
|
+
comment.md
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Step 4: Generate Evidence Templates
|
|
74
|
+
|
|
75
|
+
Compose `evidence/comment.md` with:
|
|
76
|
+
|
|
77
|
+
- The issue ref + title.
|
|
78
|
+
- The PR ref.
|
|
79
|
+
- Each evidence marker rendered as a GitHub markdown section with a fenced code block of the captured file.
|
|
80
|
+
- An "Assertions verified" subsection mapping each `### Assertions` line to "PASS / FAIL".
|
|
81
|
+
|
|
82
|
+
This template generator is shared with `lisa:jira-journey` (the JIRA path renders the same content as wiki markup). When the markdown comment is the canonical artifact, both vendors stay aligned.
|
|
83
|
+
|
|
84
|
+
### Step 5: Post Evidence
|
|
85
|
+
|
|
86
|
+
Use `lisa:github-evidence` to post everything:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Equivalent of: bash scripts/post-evidence.sh — but invoked via the Skill tool
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Invoke the skill with `<ISSUE_REF> ./evidence <PR_NUMBER>`. It uploads the files to the `pr-assets` release, edits the PR's `## Evidence` section, posts a comment on the issue, and relabels the issue to `status:code-review`.
|
|
93
|
+
|
|
94
|
+
### Step 6: Verify
|
|
95
|
+
|
|
96
|
+
Confirm:
|
|
97
|
+
- Evidence files exist as release assets named `pr-<PR>-NN-name.{txt,json}`.
|
|
98
|
+
- The PR description contains the `## Evidence` section with code-block embeds.
|
|
99
|
+
- The issue has a new comment whose body matches `comment.md`.
|
|
100
|
+
- The issue's labels include `status:code-review` and not `status:in-progress`.
|
|
101
|
+
|
|
102
|
+
## Verification Patterns Reference
|
|
103
|
+
|
|
104
|
+
| Change Type | Verification Method | Evidence Format |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| API endpoint | `curl -s localhost:PORT/endpoint` | JSON response |
|
|
107
|
+
| Database migration | `psql -c "\d table"` or migration output | Schema text |
|
|
108
|
+
| Background job | Trigger + check state | Log output |
|
|
109
|
+
| Library/utility | `bun run test -- path/to/test` | Test output |
|
|
110
|
+
| Security fix | Reproduce + verify fix | Request/response |
|
|
111
|
+
| Auth/authz | Multi-role verification | Status codes per role |
|
|
112
|
+
|
|
113
|
+
## Troubleshooting
|
|
114
|
+
|
|
115
|
+
### Evidence file is empty
|
|
116
|
+
|
|
117
|
+
Ensure the command succeeded and produced output. Use `2>&1` to capture both stdout and stderr.
|
|
118
|
+
|
|
119
|
+
### Parser returns no steps
|
|
120
|
+
|
|
121
|
+
The issue may not have a Validation Journey section — run `/github-add-journey <ISSUE_REF>` first.
|