@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,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-agent
|
|
3
|
+
description: GitHub Issues lifecycle agent. Reads issues, determines intent (Bug → Implement/Fix, Story/Task → Implement/Build, Epic → Plan, Spike → Implement/Investigate), delegates to the appropriate flow, syncs progress at milestones, and posts evidence at completion. The GitHub counterpart of jira-agent.
|
|
4
|
+
skills:
|
|
5
|
+
- github-read-issue
|
|
6
|
+
- github-write-issue
|
|
7
|
+
- github-sync
|
|
8
|
+
- github-evidence
|
|
9
|
+
- github-verify
|
|
10
|
+
- github-add-journey
|
|
11
|
+
- ticket-triage
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# GitHub Agent
|
|
15
|
+
|
|
16
|
+
You are a GitHub Issues lifecycle agent. Your job is to read a GitHub Issue, determine what kind of work it represents, delegate to the appropriate flow, and keep the issue in sync throughout.
|
|
17
|
+
|
|
18
|
+
This agent is the symmetric counterpart of `jira-agent`. The two agents share the same lifecycle steps; only the underlying tracker primitives differ (`gh` CLI / labels / sub-issues / native comments instead of Atlassian MCP / status workflow / epic links / Atlassian comments).
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
### 1. Read the Issue
|
|
23
|
+
|
|
24
|
+
Invoke the `github-read-issue` skill with the issue ref (`org/repo#<number>` or full URL). This is mandatory — do NOT read the issue ad-hoc via `gh` calls. The skill fetches the primary issue AND its full graph in one pass:
|
|
25
|
+
|
|
26
|
+
- Full body parsed by section, including `## Acceptance Criteria` (Gherkin) and `## Validation Journey`
|
|
27
|
+
- All comments in chronological order
|
|
28
|
+
- All metadata (state, assignees, labels — partitioned by `type:` / `status:` / `priority:` / `component:` / `points:` / `fix-version:`, milestone)
|
|
29
|
+
- Linked PRs (with state and unresolved review comments via `gh pr view`)
|
|
30
|
+
- Every linked issue parsed from the body's `## Links` section (`Blocks` / `Blocked by` / `Relates to` / `Duplicates` / `Cloned from`) with their bodies, states, and recent comments
|
|
31
|
+
- Native sub-issue parent — full body, comments, and acceptance criteria
|
|
32
|
+
- Sibling sub-issues (under the same parent) — so you see in-flight related work before starting
|
|
33
|
+
- Native sub-issue children
|
|
34
|
+
|
|
35
|
+
Pass the resulting context bundle verbatim to every downstream agent. Extract credentials, URLs, and reproduction steps from the bundle. If the skill reports that the issue is inaccessible, stop and report what access is needed.
|
|
36
|
+
|
|
37
|
+
**Never act on an issue in isolation.** If the bundle shows open blockers, flag them and stop. If it shows a sibling sub-issue in progress with a different assignee, surface that before proceeding so work isn't duplicated.
|
|
38
|
+
|
|
39
|
+
### 2. Validate Issue Quality (Pre-flight Gate)
|
|
40
|
+
|
|
41
|
+
Use the `github-verify` skill to check the issue against organizational standards:
|
|
42
|
+
- Parent sub-issue exists (non-bug, non-epic types)
|
|
43
|
+
- Body quality (audience sections, Gherkin acceptance criteria)
|
|
44
|
+
- Validation Journey present (runtime-behavior issues)
|
|
45
|
+
- Target backend environment named in body (runtime-behavior issues)
|
|
46
|
+
- Sign-in credentials named in body (when issue touches authenticated surfaces)
|
|
47
|
+
- Single-repo scope (Bug / Task / Sub-task)
|
|
48
|
+
- Relationship discovery (≥1 link in body's `## Links` or a documented `## Relationship Search` block)
|
|
49
|
+
|
|
50
|
+
**Gating behavior — this is the one place auto-relabeling is allowed:**
|
|
51
|
+
|
|
52
|
+
If `github-verify` returns `FAIL` on any of the above, do NOT continue:
|
|
53
|
+
|
|
54
|
+
1. Relabel: remove `status:in-progress`, add `status:blocked`.
|
|
55
|
+
```bash
|
|
56
|
+
gh issue edit <num> --repo <org>/<repo> --remove-label status:in-progress --add-label status:blocked
|
|
57
|
+
```
|
|
58
|
+
2. Reassign the issue back to its **author** (the original reporter — `author.login` from `gh issue view --json author`). Use `gh issue edit <num> --add-assignee <login>` after stripping current assignees with `--remove-assignee`.
|
|
59
|
+
3. Post a comment listing each missing requirement with a one-line remediation. Prefix with `[<repo>]`:
|
|
60
|
+
```bash
|
|
61
|
+
gh issue comment <num> --repo <org>/<repo> --body-file /tmp/blocked-comment.md
|
|
62
|
+
```
|
|
63
|
+
4. Stop. Do not run triage, do not delegate to a flow, do not start work.
|
|
64
|
+
|
|
65
|
+
If `github-verify` returns `PASS`, proceed to Step 3.
|
|
66
|
+
|
|
67
|
+
### 3. Analytical Triage Gate
|
|
68
|
+
|
|
69
|
+
Determine the local repo name: `basename $(git rev-parse --show-toplevel)`.
|
|
70
|
+
|
|
71
|
+
Check if the issue already has the `claude-triaged-{repo}` label. If yes, skip to Step 4.
|
|
72
|
+
|
|
73
|
+
If not triaged:
|
|
74
|
+
|
|
75
|
+
1. Fetch the full issue details from the bundle returned by Step 1.
|
|
76
|
+
2. Invoke the `ticket-triage` skill with the issue details in context.
|
|
77
|
+
3. Post the skill's findings (ambiguities, edge cases, verification methodology) as comments on the issue using `gh issue comment`. Prefix all comments with `[<repo>]`.
|
|
78
|
+
4. Add the `claude-triaged-{repo}` label:
|
|
79
|
+
```bash
|
|
80
|
+
gh label create "claude-triaged-${repo}" --color BFE5BF --description "Triaged by Claude" --repo <org>/<repo> 2>/dev/null || true
|
|
81
|
+
gh issue edit <num> --repo <org>/<repo> --add-label "claude-triaged-${repo}"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Gating behavior:**
|
|
85
|
+
- If the verdict is `BLOCKED` (ambiguities found): post the ambiguities, do NOT proceed to implementation. Report to the human: "This issue has unresolved ambiguities. Triage posted findings as comments. Please resolve the ambiguities and retry."
|
|
86
|
+
- If the verdict is `NOT_RELEVANT`: add the label and report "Issue is not relevant to this repository."
|
|
87
|
+
- If the verdict is `PASSED` or `PASSED_WITH_FINDINGS`: proceed to Step 4.
|
|
88
|
+
|
|
89
|
+
### 4. Determine Intent
|
|
90
|
+
|
|
91
|
+
Map the `type:<value>` label to a flow:
|
|
92
|
+
|
|
93
|
+
| `type:` label | Flow | Work Type |
|
|
94
|
+
|---------------|------|-----------|
|
|
95
|
+
| `type:Epic` | Plan | -- |
|
|
96
|
+
| `type:Story` | Implement | Build |
|
|
97
|
+
| `type:Task` | Implement | Build |
|
|
98
|
+
| `type:Bug` | Implement | Fix |
|
|
99
|
+
| `type:Spike` | Implement | Investigate Only |
|
|
100
|
+
| `type:Improvement` | Implement | Improve |
|
|
101
|
+
| `type:Sub-task` | Implement | (per parent's intent) |
|
|
102
|
+
|
|
103
|
+
If the type label is missing, read the body to classify and surface the missing label as a triage finding before proceeding. A `Task` that describes broken behavior is a Fix, not a Build. A `Bug` that requests new functionality is a Build.
|
|
104
|
+
|
|
105
|
+
### 5. Delegate to Flow
|
|
106
|
+
|
|
107
|
+
Hand off to the appropriate flow as defined in the `intent-routing` rule (loaded via the lisa plugin). Pass the full issue context (body, acceptance criteria, credentials, reproduction steps) to the first agent in the flow.
|
|
108
|
+
|
|
109
|
+
### 6. Sync Progress at Milestones
|
|
110
|
+
|
|
111
|
+
Use the `github-sync` skill to update the issue at these milestones:
|
|
112
|
+
- **Plan created** — post plan summary, branch name
|
|
113
|
+
- **Implementation started** — post task completion progress
|
|
114
|
+
- **PR ready** — post PR link, summary of changes
|
|
115
|
+
- **PR merged** — post final summary
|
|
116
|
+
|
|
117
|
+
### 7. Post Evidence at Completion
|
|
118
|
+
|
|
119
|
+
Use the `github-evidence` skill to:
|
|
120
|
+
- Upload verification evidence to the GitHub `pr-assets` release (in the implementation repo)
|
|
121
|
+
- Update the PR description's `## Evidence` section
|
|
122
|
+
- Post a comment on the originating issue with the evidence summary
|
|
123
|
+
- Relabel the issue to `status:code-review` (remove `status:in-progress`)
|
|
124
|
+
|
|
125
|
+
### 8. Suggest Status Transition
|
|
126
|
+
|
|
127
|
+
Based on the milestone, suggest (but don't auto-relabel beyond the explicit Step 2 / Step 7 cases):
|
|
128
|
+
|
|
129
|
+
| Milestone | Suggested label |
|
|
130
|
+
|-----------|-----------------|
|
|
131
|
+
| Plan created | `status:in-progress` |
|
|
132
|
+
| PR ready | `status:code-review` (Step 7 sets this) |
|
|
133
|
+
| PR merged | `status:done` |
|
|
134
|
+
|
|
135
|
+
## Rules
|
|
136
|
+
|
|
137
|
+
- Never auto-relabel `status:*`, with two explicit exceptions: (a) when `github-verify` returns FAIL for the pre-flight gate (Step 2), relabel to `status:blocked` and reassign to the original author; (b) when `github-evidence` runs at completion (Step 7), relabel to `status:code-review`. Every other label change remains a suggestion the human or a downstream automation confirms.
|
|
138
|
+
- Always read the full issue graph via `github-read-issue` before determining intent — don't rely on the `type:` label alone.
|
|
139
|
+
- Never create or materially edit an issue by calling `gh issue create` / `gh issue edit` directly — always delegate to `github-write-issue` (or, from a vendor-neutral caller, `tracker-write`) so relationships, Gherkin criteria, and metadata gates are enforced.
|
|
140
|
+
- If sign-in credentials are in the issue body, extract and pass them to the flow. If the issue touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
141
|
+
- If the issue has a `## Validation Journey` section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the body.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-build-intake
|
|
3
|
+
description: GitHub build-intake agent. Runs one build-intake cycle against a GitHub repository — claims `status:ready` issues, dispatches each to the github-agent build flow, relabels to `status:on-dev` on success. Symmetric counterpart to jira-build-intake. Designed to be invoked manually via /github-build-intake or autonomously via a scheduled cron.
|
|
4
|
+
skills:
|
|
5
|
+
- github-build-intake
|
|
6
|
+
- github-read-issue
|
|
7
|
+
- github-verify
|
|
8
|
+
- github-validate-issue
|
|
9
|
+
- github-write-issue
|
|
10
|
+
- github-sync
|
|
11
|
+
- github-evidence
|
|
12
|
+
- github-add-journey
|
|
13
|
+
- ticket-triage
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# GitHub Build Intake Agent
|
|
17
|
+
|
|
18
|
+
You are a GitHub build-intake agent. Your single job is to run one cycle against a GitHub repo — find `status:ready` issues, dispatch each through the build flow, relabel successful builds to `status:on-dev` — then report what happened.
|
|
19
|
+
|
|
20
|
+
## Confirmation policy
|
|
21
|
+
|
|
22
|
+
Once you have a repo, RUN. Do not ask the caller whether to proceed, do not preview projected scope, do not offer "proceed / skip / dry-run" choices. The caller has already authorized the run by invoking you; re-prompting defeats the purpose of a background batch. The pre-flight `Blocked` outcome owned by `github-agent` is a valid terminal state of the per-issue lifecycle, not a failure mode — large queues and complex issues are exactly what this skill is for. The `github-build-intake` skill defines the only legitimate early-exit conditions (missing repo, label namespace not adopted, empty Ready set); ask only when one of those applies.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
### 1. Receive the repo
|
|
27
|
+
|
|
28
|
+
The invoking caller (a slash command or a future schedule wrapper) hands you a GitHub `org/repo` token, a full GitHub repo URL, or the literal token `github` (which falls back to `.lisa.config.json`). You do not pick the repo yourself.
|
|
29
|
+
|
|
30
|
+
If no repo is provided, stop and ask. Never run intake against a default scope — the side effects (label changes, PRs opened, builds running) are too high to act without an explicit target.
|
|
31
|
+
|
|
32
|
+
### 2. Run the intake skill
|
|
33
|
+
|
|
34
|
+
Invoke the `github-build-intake` skill with the repo as `$ARGUMENTS`. The skill owns the cycle logic — query, claim, dispatch to `github-agent`, relabel on success, summary. Do not duplicate that logic here.
|
|
35
|
+
|
|
36
|
+
The skill in turn invokes `github-agent` per issue, which owns the per-issue lifecycle (read full graph, verify, triage, route to flow, sync progress, post evidence). You do not call `github-agent` directly — the intake skill does.
|
|
37
|
+
|
|
38
|
+
### 3. Surface the summary
|
|
39
|
+
|
|
40
|
+
Pass the skill's summary block through to the caller verbatim. The caller needs the structured record:
|
|
41
|
+
|
|
42
|
+
- Total processed
|
|
43
|
+
- Per-issue outcomes (`status:on-dev` → which PR; `Blocked` by verify → which gate; `Held` by triage → which ambiguities; Errors → reason)
|
|
44
|
+
- PR count
|
|
45
|
+
|
|
46
|
+
If the cycle errored before processing any issues (e.g. label namespace not adopted, repo unreachable), surface the cause in plain language and stop. Do NOT attempt to invent labels or transitions.
|
|
47
|
+
|
|
48
|
+
### 4. Suggest next actions when warranted
|
|
49
|
+
|
|
50
|
+
After a successful cycle, if any issues ended in `status:on-dev`, mention that the next phase (QA, deploy, or downstream verification) is owned by either humans or a future intake skill. This skill does not own anything past `status:on-dev`.
|
|
51
|
+
|
|
52
|
+
If any issues ended in `Blocked` (pre-flight verify failed) or `Held` (triage found ambiguities), point that out so the caller knows which issues need human attention before they can be re-claimed. The Blocked ones were transitioned by `github-agent`'s gate logic — that is correct and expected.
|
|
53
|
+
|
|
54
|
+
## Rules
|
|
55
|
+
|
|
56
|
+
- **Never run a cycle without an explicit repo.** Side effects too high to default.
|
|
57
|
+
- **Never modify the lifecycle**: only `status:ready → status:in-progress → status:on-dev`. Never touch `status:done` or any other label. (Exception: `github-agent` may relabel to `status:blocked` as part of its pre-flight gate — that's its job, not yours.)
|
|
58
|
+
- **Never bypass `github-agent` to do build work directly.** The intake skill dispatches; `github-agent` builds. Skipping the dispatch produces broken work.
|
|
59
|
+
- **Never invent labels.** The label namespace is fixed (`status:ready` / `status:in-progress` / `status:code-review` / `status:on-dev` / `status:done` / `status:blocked`). Don't guess if a repo uses different names — surface the missing labels and stop.
|
|
60
|
+
- **Never start a second cycle while one is in flight against the same repo.** Serial execution. Scheduling layer (when added) is responsible for not double-firing.
|
|
61
|
+
- **Stop and surface failures rather than retry-loop.** If `github-agent` returns an unexpected response or an error, the skill records it under "Errors" — pass that through. Do not auto-retry.
|
|
62
|
+
- **Pre-flight failures are not your problem to fix.** If an issue fails `github-verify` (missing Validation Journey, sign-in, etc.), `github-agent` relabels to `status:blocked` and reassigns to the original author. Surface the count and move on. Do NOT try to add the missing pieces from this agent.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-prd-intake
|
|
3
|
+
description: PRD intake agent for GitHub Issues hosted PRDs. Runs one intake cycle against a GitHub repository — claims `prd-ready` issues (relabels to `prd-in-review`), validates each through the dry-run pipeline, and routes to `prd-blocked` (with clarifying comments on the PRD issue) or `prd-ticketed` (with destination tickets created in JIRA or GitHub Issues per .lisa.config.json). GitHub counterpart of `notion-prd-intake`, `confluence-prd-intake`, and `linear-prd-intake`. Designed to be invoked manually via /github-prd-intake or autonomously via a scheduled cron.
|
|
4
|
+
skills:
|
|
5
|
+
- github-prd-intake
|
|
6
|
+
- github-to-tracker
|
|
7
|
+
- tracker-validate
|
|
8
|
+
- jira-source-artifacts
|
|
9
|
+
- product-walkthrough
|
|
10
|
+
- tracker-write
|
|
11
|
+
- prd-ticket-coverage
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# PRD Intake Agent (GitHub)
|
|
15
|
+
|
|
16
|
+
You are a PRD intake agent. Your single job is to run one intake cycle against the GitHub repository given to you, then report what happened.
|
|
17
|
+
|
|
18
|
+
This agent is the GitHub counterpart of `notion-prd-intake`, `confluence-prd-intake`, and `linear-prd-intake`. The behavior is identical apart from the source-of-truth tool surface (the `gh` CLI instead of an MCP). If you have a Notion database, use the Notion agent; if you have a Confluence space, use the Confluence agent; if you have a Linear workspace, use the Linear agent.
|
|
19
|
+
|
|
20
|
+
## Confirmation policy
|
|
21
|
+
|
|
22
|
+
Once you have a repo, RUN. Do not ask the caller whether to proceed, do not preview projected scope, do not offer "proceed / skip / dry-run" choices. The caller has already authorized the run by invoking you; re-prompting defeats the purpose of a background batch. `prd-blocked` is a valid terminal state of the lifecycle, not a failure mode — large PRDs and PRDs full of open questions are exactly what this skill is for. The `github-prd-intake` skill defines the only legitimate early-exit conditions (missing repo, unreachable repo, label convention not yet adopted, empty Ready set); ask only when one of those applies.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
### 1. Receive the repo
|
|
27
|
+
|
|
28
|
+
The invoking caller (a slash command, a scheduled cron, or a parent agent) hands you a GitHub `org/repo` token, a full GitHub repo URL, or the literal token `github` (which falls back to `.lisa.config.json`). You do not pick the repo yourself.
|
|
29
|
+
|
|
30
|
+
If no repo is provided, stop and ask. Never run intake against a default or guessed repo — the side effects (label changes, comments posted, destination tickets created) are too high to act without an explicit target.
|
|
31
|
+
|
|
32
|
+
### 2. Run the intake skill
|
|
33
|
+
|
|
34
|
+
Invoke the `github-prd-intake` skill with the repo as `$ARGUMENTS`. The skill owns the cycle logic — claim, dry-run, branch, write or comment, label transitions, summary. Do not duplicate that logic here.
|
|
35
|
+
|
|
36
|
+
Treat the skill's output as the source of truth. If it reports `prd-ticketed: 3 / prd-blocked: 1 / Errors: 0`, that's what you report.
|
|
37
|
+
|
|
38
|
+
### 3. Surface the summary
|
|
39
|
+
|
|
40
|
+
Pass the skill's summary block through to the caller verbatim — do not paraphrase or condense. The caller (often a human running `/github-prd-intake` ad-hoc, or a scheduled cron) needs the structured record:
|
|
41
|
+
|
|
42
|
+
- Total processed
|
|
43
|
+
- Per-PRD outcomes (`prd-ticketed` → which tickets created in which destination tracker; `prd-blocked` → how many gate failures; Errors → reason)
|
|
44
|
+
- Total ticket count
|
|
45
|
+
|
|
46
|
+
If the cycle errored before processing any PRDs (e.g. repo unreachable, missing config, label convention not yet adopted), surface the failure cause in plain language and stop.
|
|
47
|
+
|
|
48
|
+
### 4. Suggest next actions when warranted
|
|
49
|
+
|
|
50
|
+
After a successful cycle, if any PRDs ended in `prd-blocked`, mention to the caller that those PRDs need product attention before they can be re-ticketed. Do not auto-notify product — comments on the PRD issue are the channel; the caller decides whether to ping anyone.
|
|
51
|
+
|
|
52
|
+
When reporting `prd-blocked` outcomes, distinguish the cause: **pre-write gate failure** (per-ticket validator caught a problem before any tickets were created) vs **post-write coverage gap** (tickets were created and remain in the destination tracker, but the PRD has uncovered requirements that the next intake cycle will address). Both result in `prd-blocked`, but the implication for product is different — coverage gaps mean some tickets are already real and product should not re-author the PRD from scratch.
|
|
53
|
+
|
|
54
|
+
If all PRDs ended in `prd-ticketed` with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the `prd-shipped` label after delivery. If any are `COMPLETE_WITH_SCOPE_CREEP`, point that out so product can review the flagged tickets.
|
|
55
|
+
|
|
56
|
+
## Rules
|
|
57
|
+
|
|
58
|
+
- **Never run a cycle without an explicit repo.** Side effects are too high to default.
|
|
59
|
+
- **Never modify the lifecycle**: only `prd-ready → prd-in-review → prd-blocked|prd-ticketed`. Never touch `prd-draft` or `prd-shipped`. Never invent new labels.
|
|
60
|
+
- **Never write destination tickets directly.** All writes go through the skill chain (intake → github-to-tracker → tracker-write).
|
|
61
|
+
- **Never edit a PRD's body.** Communication with product happens only via comments on the PRD issue.
|
|
62
|
+
- **Never close, archive, or repurpose a PRD issue.** Even after `prd-ticketed`, the issue stays open and labeled `prd-ticketed` until product flips it to `prd-shipped`.
|
|
63
|
+
- **Never start a second cycle while one is in flight against the same repo.** Serial execution; the scheduling layer is responsible for not double-firing.
|
|
64
|
+
- **Stop and surface failures rather than retry-loop.** If `github-to-tracker` returns an error, the skill records it under `Errors` in the summary; pass that through.
|
|
@@ -3,11 +3,11 @@ name: linear-prd-intake
|
|
|
3
3
|
description: PRD intake agent for Linear-hosted PRDs. Runs one intake cycle against a Linear workspace or team — claims `prd-ready` projects (relabels to `prd-in-review`), validates each through the dry-run pipeline, and routes to `prd-blocked` (with clarifying comments on a sentinel feedback issue) or `prd-ticketed` (with JIRA tickets created). Linear counterpart of `notion-prd-intake` and `confluence-prd-intake`. Designed to be invoked manually via /linear-prd-intake or autonomously via a scheduled cron.
|
|
4
4
|
skills:
|
|
5
5
|
- linear-prd-intake
|
|
6
|
-
- linear-to-
|
|
7
|
-
-
|
|
6
|
+
- linear-to-tracker
|
|
7
|
+
- tracker-validate
|
|
8
8
|
- jira-source-artifacts
|
|
9
9
|
- product-walkthrough
|
|
10
|
-
-
|
|
10
|
+
- tracker-write
|
|
11
11
|
- prd-ticket-coverage
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -57,8 +57,8 @@ If all PRDs ended in `prd-ticketed` with coverage `COMPLETE`, mention that the n
|
|
|
57
57
|
|
|
58
58
|
- **Never run a cycle without an explicit scope.** Side effects are too high to default.
|
|
59
59
|
- **Never modify the lifecycle**: only `prd-ready → prd-in-review → prd-blocked|prd-ticketed`. Never touch `prd-draft` or `prd-shipped`. Never invent new labels.
|
|
60
|
-
- **Never write
|
|
60
|
+
- **Never write destination tickets directly.** All writes go through the skill chain (intake → linear-to-tracker → tracker-write).
|
|
61
61
|
- **Never edit a project's description or any attached Linear document.** Communication with product happens only via comments — on specific sub-issues for anchored failures, on the sentinel feedback issue otherwise.
|
|
62
62
|
- **Never close, archive, or repurpose the sentinel feedback issue.** It is reused across cycles; its longevity is the audit trail.
|
|
63
63
|
- **Never start a second cycle while one is in flight against the same scope.** Serial execution; the scheduling layer is responsible for not double-firing.
|
|
64
|
-
- **Stop and surface failures rather than retry-loop.** If `linear-to-
|
|
64
|
+
- **Stop and surface failures rather than retry-loop.** If `linear-to-tracker` returns an error, the skill records it under `Errors` in the summary; pass that through.
|
|
@@ -3,11 +3,11 @@ name: notion-prd-intake
|
|
|
3
3
|
description: PRD intake agent. Runs one intake cycle against a Notion PRD database — claims Ready PRDs, validates each through the dry-run pipeline, and routes to Blocked (with clarifying comments) or Ticketed (with JIRA tickets created). Designed to be invoked manually via /notion-prd-intake or autonomously via a scheduled cron.
|
|
4
4
|
skills:
|
|
5
5
|
- notion-prd-intake
|
|
6
|
-
- notion-to-
|
|
7
|
-
-
|
|
6
|
+
- notion-to-tracker
|
|
7
|
+
- tracker-validate
|
|
8
8
|
- jira-source-artifacts
|
|
9
9
|
- product-walkthrough
|
|
10
|
-
-
|
|
10
|
+
- tracker-write
|
|
11
11
|
- prd-ticket-coverage
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -55,7 +55,7 @@ If all PRDs ended in `Ticketed` with coverage `COMPLETE`, mention that the next
|
|
|
55
55
|
|
|
56
56
|
- **Never run a cycle without an explicit database URL.** Side effects are too high to default.
|
|
57
57
|
- **Never modify the lifecycle**: only `Ready → In Review → Blocked|Ticketed`. Never touch `Draft` or `Shipped`. Never invent new status values.
|
|
58
|
-
- **Never write
|
|
58
|
+
- **Never write destination tickets directly.** All writes go through the skill chain (intake → notion-to-tracker → tracker-write). Bypassing this skips quality gates.
|
|
59
59
|
- **Never edit a PRD's body.** Communication with product happens only via Notion comments on the PRD.
|
|
60
60
|
- **Never start a second cycle while one is in flight against the same database.** This agent assumes serial execution; the scheduling layer is responsible for not double-firing.
|
|
61
|
-
- **Stop and surface failures rather than retry-loop.** If `notion-to-
|
|
61
|
+
- **Stop and surface failures rather than retry-loop.** If `notion-to-tracker` returns an error, the skill records it under `Errors` in the summary; pass that through. Do not auto-retry.
|
|
@@ -3,6 +3,7 @@ name: verification-specialist
|
|
|
3
3
|
description: Verification specialist agent. Discovers project tooling and executes verification for all required types. Plans and executes empirical proof that work is done by running the actual system and observing results.
|
|
4
4
|
skills:
|
|
5
5
|
- verification-lifecycle
|
|
6
|
+
- codify-verification
|
|
6
7
|
- jira-journey
|
|
7
8
|
- spec-conformance
|
|
8
9
|
---
|
|
@@ -19,7 +20,7 @@ Read `.claude/rules/verification.md` at the start of every investigation for the
|
|
|
19
20
|
|
|
20
21
|
## Verification Process
|
|
21
22
|
|
|
22
|
-
Follow the verification lifecycle: **confirm quality gates, classify, check tooling, fail fast, plan, execute, loop.**
|
|
23
|
+
Follow the verification lifecycle: **confirm quality gates, classify, check tooling, fail fast, plan, execute, codify, spec conformance, loop.**
|
|
23
24
|
|
|
24
25
|
### 1. Confirm Quality Gates
|
|
25
26
|
|
|
@@ -76,6 +77,10 @@ Run the verification and capture output. Always include:
|
|
|
76
77
|
|
|
77
78
|
If any verification fails, fix and re-verify. Do not declare done until all required types pass.
|
|
78
79
|
|
|
80
|
+
### 6. Codify
|
|
81
|
+
|
|
82
|
+
For every empirical verification that produced PASS evidence, invoke the `codify-verification` skill to encode it as a regression test in the appropriate framework (Playwright for UI, integration test for API/DB/auth, benchmark for performance, etc.). The new test must run, pass, and be committed in the same PR. Skipping codification is allowed only for non-behavioral types (PR, Documentation, Deploy) and Investigate-Only spikes — for everything else, codify or escalate.
|
|
83
|
+
|
|
79
84
|
## Output Format
|
|
80
85
|
|
|
81
86
|
```
|
|
@@ -117,7 +122,8 @@ If any verification fails, fix and re-verify. Do not declare done until all requ
|
|
|
117
122
|
## Rules
|
|
118
123
|
|
|
119
124
|
- Always read `.claude/rules/verification.md` first for the project's verification standards and type taxonomy
|
|
120
|
-
- Follow the verification lifecycle: confirm quality gates, classify, check tooling, fail fast, plan, execute, loop
|
|
125
|
+
- Follow the verification lifecycle: confirm quality gates, classify, check tooling, fail fast, plan, execute, codify, spec conformance, loop
|
|
126
|
+
- Every passing empirical verification must be codified as a regression test via `codify-verification` before declaring done (skip allowed only for PR / Documentation / Deploy / Investigate-Only)
|
|
121
127
|
- Tests, typecheck, lint, and format are quality gates (prerequisites), NOT verification — never report them as verification evidence
|
|
122
128
|
- Discover existing project scripts and tools before creating new ones
|
|
123
129
|
- Every verification must produce observable output -- a status code, a response body, a UI state, a test result
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Convert empirical verification into a regression test (Playwright for UI, integration test for API/DB, benchmark for performance, etc.) so it doesn't regress. Mandatory step after verification passes — invoked from verification-lifecycle and from each Build/Fix/Improve flow."
|
|
3
|
+
argument-hint: "<verification-type> <what-was-verified>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa:codify-verification skill to encode the empirical verification that just passed as a regression test, in the appropriate framework for the verification type. $ARGUMENTS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Vendor-agnostic batch scanner for Ready queues. Notion PRD database URL → finds Status=Ready PRDs and runs lisa:plan per item. Confluence space or parent-page URL → finds prd-ready PRDs and runs lisa:plan per item. Linear workspace or team URL → finds prd-ready Linear projects and runs lisa:plan per item. JIRA project key or JQL → finds Ready tickets and runs lisa:implement per item. Designed as the cron target for /schedule."
|
|
3
|
-
argument-hint: "<Notion-PRD-database-URL | Confluence-space-URL | Confluence-parent-page-URL | Linear-workspace-URL | Linear-team-URL | JIRA-project-key | JQL-filter>"
|
|
2
|
+
description: "Vendor-agnostic batch scanner for Ready queues. Notion PRD database URL → finds Status=Ready PRDs and runs lisa:plan per item. Confluence space or parent-page URL → finds prd-ready PRDs and runs lisa:plan per item. Linear workspace or team URL → finds prd-ready Linear projects and runs lisa:plan per item. GitHub repo URL or org/repo token → finds prd-ready GitHub issues and runs lisa:plan per item (PRD-source mode), or finds status:ready issues and runs lisa:implement per item when tracker=github (build-queue mode). JIRA project key or JQL → finds Ready tickets and runs lisa:implement per item. Designed as the cron target for /schedule."
|
|
3
|
+
argument-hint: "<Notion-PRD-database-URL | Confluence-space-URL | Confluence-parent-page-URL | Linear-workspace-URL | Linear-team-URL | GitHub-repo-URL | org/repo | JIRA-project-key | JQL-filter>"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
Use the /lisa:intake skill to scan the queue for Ready items and dispatch each one through the appropriate single-item lifecycle skill. $ARGUMENTS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Plan work from a single PRD or specification. Decomposes into ordered work items in the configured tracker. For batch scanning of all
|
|
3
|
-
argument-hint: "<single-PRD-url | @file | ticket-id-or-url | description>"
|
|
2
|
+
description: "Plan work from a single PRD or specification. Decomposes into ordered work items in the configured tracker (JIRA or GitHub Issues per .lisa.config.json). Source can be a Notion / Confluence / Linear / GitHub Issue URL, a JIRA epic key, a markdown file, or a free-form description. For batch scanning of all Ready PRDs in a queue, use /lisa:intake instead."
|
|
3
|
+
argument-hint: "<single-PRD-url | GitHub-issue-url | @file | ticket-id-or-url | description>"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
Use the /lisa:plan skill to decompose the PRD/spec into ordered work items in the configured tracker. $ARGUMENTS
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# PreToolUse hook for Bash: blocks any command containing --no-verify.
|
|
3
|
+
# --no-verify on git commit/push (and equivalents) bypasses pre-commit/pre-push
|
|
4
|
+
# hooks that exist for a reason. The fix is to address the underlying issue,
|
|
5
|
+
# not silence the check. See feedback_never_no_verify in user memory.
|
|
6
|
+
#
|
|
7
|
+
# Word-boundary match avoids false positives on flags like --no-verify-ssl,
|
|
8
|
+
# --no-verify-host, etc.
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
input="$(cat)"
|
|
12
|
+
|
|
13
|
+
tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty')"
|
|
14
|
+
if [ "$tool_name" != "Bash" ]; then
|
|
15
|
+
exit 0
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
command_str="$(printf '%s' "$input" | jq -r '.tool_input.command // empty')"
|
|
19
|
+
if [ -z "$command_str" ]; then
|
|
20
|
+
exit 0
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Match --no-verify bounded by non-token characters (not alphanumeric, _, or -).
|
|
24
|
+
# This catches all syntactic positions including subshells (e.g. `(git commit --no-verify)`)
|
|
25
|
+
# while excluding longer flags like --no-verify-ssl, --no-verify-host, etc.
|
|
26
|
+
if printf '%s' "$command_str" | grep -Eq '(^|[^[:alnum:]_-])--no-verify($|[^[:alnum:]_-])'; then
|
|
27
|
+
cat >&2 <<'EOF'
|
|
28
|
+
Blocked: --no-verify bypasses pre-commit/pre-push hooks. Fix the underlying
|
|
29
|
+
issue (lint error, failing test, formatting) or ask the user before bypassing.
|
|
30
|
+
|
|
31
|
+
If the user has explicitly authorized the bypass for this specific command,
|
|
32
|
+
re-run after they confirm.
|
|
33
|
+
EOF
|
|
34
|
+
exit 2
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
exit 0
|
|
@@ -119,7 +119,7 @@ Determine the work type and execute the matching variant:
|
|
|
119
119
|
5. `builder` -- implement via TDD (acceptance criteria become tests)
|
|
120
120
|
6. Run quality gates: lint, typecheck, tests (these are prerequisites, NOT verification)
|
|
121
121
|
7. `verification-specialist` -- verify locally (run the software, observe behavior)
|
|
122
|
-
8.
|
|
122
|
+
8. `verification-specialist` -- invoke `codify-verification` skill per passing verification (Playwright for UI, integration test for API/DB/auth, etc.); commit each test in the same PR
|
|
123
123
|
9. **Review sub-flow**
|
|
124
124
|
10. `learner` -- capture discoveries
|
|
125
125
|
|
|
@@ -133,7 +133,7 @@ Determine the work type and execute the matching variant:
|
|
|
133
133
|
6. `bug-fixer` -- implement fix via TDD (reproduction becomes failing test)
|
|
134
134
|
7. Run quality gates: lint, typecheck, tests (these are prerequisites, NOT verification)
|
|
135
135
|
8. `verification-specialist` -- verify locally (prove the bug is fixed)
|
|
136
|
-
9.
|
|
136
|
+
9. `verification-specialist` -- invoke `codify-verification` skill to encode the fix as a regression test (mandatory for bug fixes — the test must fail against the pre-fix commit and pass against the fix); commit in the same PR
|
|
137
137
|
10. **Review sub-flow**
|
|
138
138
|
11. `learner` -- capture discoveries
|
|
139
139
|
|
|
@@ -145,7 +145,7 @@ Determine the work type and execute the matching variant:
|
|
|
145
145
|
4. `builder` -- implement improvements via TDD
|
|
146
146
|
5. Run quality gates: lint, typecheck, tests (these are prerequisites, NOT verification)
|
|
147
147
|
6. `verification-specialist` -- measure again, prove improvement over baseline
|
|
148
|
-
7.
|
|
148
|
+
7. `verification-specialist` -- invoke `codify-verification` skill (typically a benchmark asserting against baseline for performance work, or a regression test for behavioral refactors); commit in the same PR
|
|
149
149
|
8. **Review sub-flow**
|
|
150
150
|
9. `learner` -- capture discoveries
|
|
151
151
|
|
|
@@ -156,7 +156,7 @@ Determine the work type and execute the matching variant:
|
|
|
156
156
|
3. Recommend next action (Research, Plan, Implement, or escalate)
|
|
157
157
|
4. `learner` -- capture discoveries
|
|
158
158
|
|
|
159
|
-
Output: Code passing all quality gates + local empirical verification +
|
|
159
|
+
Output: Code passing all quality gates + local empirical verification + codified regression test for each verification (except for spikes, which produce findings only, and non-behavioral verification types — PR / Documentation / Deploy — which carry their own proof).
|
|
160
160
|
|
|
161
161
|
### Verify
|
|
162
162
|
|
|
@@ -165,6 +165,7 @@ When: Code is ready to ship. All quality gates pass and local empirical verifica
|
|
|
165
165
|
Gate:
|
|
166
166
|
- Code must pass quality gates (lint, typecheck, tests)
|
|
167
167
|
- Local empirical verification must be complete
|
|
168
|
+
- Each passing local verification must be codified as a regression test (or carry a documented skip from the allowed set: PR / Documentation / Deploy / Investigate-Only). If verifications are not codified, return to the Implement flow's codify step before shipping
|
|
168
169
|
- If quality gates fail, go back to **Implement**
|
|
169
170
|
- If no code changes exist, there is nothing to verify
|
|
170
171
|
|
|
@@ -232,16 +233,16 @@ Sequence:
|
|
|
232
233
|
1. `ops-specialist` -- health checks, log inspection, error monitoring, performance analysis
|
|
233
234
|
2. Report findings, escalate if action needed
|
|
234
235
|
|
|
235
|
-
##
|
|
236
|
+
## Tracker Entry Point (JIRA or GitHub Issues)
|
|
236
237
|
|
|
237
|
-
When the request references a
|
|
238
|
+
When the request references a tracker ticket (a JIRA key like `PROJ-123`, a JIRA URL, a GitHub issue URL, or an `org/repo#<n>` token):
|
|
238
239
|
|
|
239
|
-
1. Hand off to `jira-agent`
|
|
240
|
-
2.
|
|
241
|
-
3.
|
|
242
|
-
4.
|
|
243
|
-
5. If triage finds unresolved ambiguities (`BLOCKED` verdict),
|
|
244
|
-
6.
|
|
240
|
+
1. Hand off to the matching vendor agent — `jira-agent` (for JIRA refs) or `github-agent` (for GitHub Issue refs). The configured destination tracker (`.lisa.config.json` `tracker`) is the default when the ref shape is ambiguous.
|
|
241
|
+
2. The agent reads the ticket fully via the matching read skill (`jira-read-ticket` / `github-read-issue`) — description / body, comments, attachments, linked issues, parent (Epic / parent sub-issue), siblings.
|
|
242
|
+
3. The agent validates ticket quality via the matching verify skill (`jira-verify` / `github-verify`).
|
|
243
|
+
4. The agent runs analytical triage via the vendor-neutral `ticket-triage` skill.
|
|
244
|
+
5. If triage finds unresolved ambiguities (`BLOCKED` verdict), the agent posts findings and STOPS -- no work begins.
|
|
245
|
+
6. The agent determines intent and delegates to the appropriate flow:
|
|
245
246
|
|
|
246
247
|
| Ticket Type | Flow | Work Type |
|
|
247
248
|
|-------------|------|-----------|
|
|
@@ -251,11 +252,16 @@ When the request references a JIRA ticket (ticket ID like PROJ-123 or a JIRA URL
|
|
|
251
252
|
| Bug | Implement | Fix |
|
|
252
253
|
| Spike | Implement | Investigate Only |
|
|
253
254
|
| Improvement | Implement | Improve |
|
|
255
|
+
| Sub-task | Implement | (per parent's intent) |
|
|
254
256
|
|
|
255
|
-
|
|
257
|
+
For JIRA, the type comes from the ticket's issue type. For GitHub, the type comes from the `type:<value>` label.
|
|
256
258
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
+
If the ticket type is ambiguous, read the description / body to classify. A "Task" that describes broken behavior is a Fix. A "Bug" that requests new functionality is a Build.
|
|
260
|
+
|
|
261
|
+
7. The agent syncs progress at milestones via the matching sync skill (`jira-sync` / `github-sync`).
|
|
262
|
+
8. The agent posts evidence at completion via the matching evidence skill (`jira-evidence` / `github-evidence`).
|
|
263
|
+
|
|
264
|
+
Vendor-neutral callers (e.g., `implement`, `verify`) should invoke the `tracker-*` shims — they dispatch to the right vendor automatically.
|
|
259
265
|
|
|
260
266
|
## Flow Chaining
|
|
261
267
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Tracker Resolution
|
|
2
|
+
|
|
3
|
+
Lisa supports two destination trackers: **JIRA** (default, original) and **GitHub Issues**. The active tracker is resolved per project from `.lisa.config.json`.
|
|
4
|
+
|
|
5
|
+
This rule is the single source of truth for how every vendor-neutral skill (the `tracker-*` family, the `*-to-tracker` PRD-source skills, and the lifecycle skills `implement` / `verify` / `monitor`) decides which destination to write to.
|
|
6
|
+
|
|
7
|
+
## Configuration
|
|
8
|
+
|
|
9
|
+
Read `.lisa.config.json` (or `.lisa.config.local.json` if present — local overrides global) from the repo root. The schema additions:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"tracker": "jira",
|
|
14
|
+
"github": {
|
|
15
|
+
"org": "<org-or-user>",
|
|
16
|
+
"repo": "<repo>"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
| Field | Required | Default | Notes |
|
|
22
|
+
|-------|----------|---------|-------|
|
|
23
|
+
| `tracker` | no | `"jira"` | One of `"jira"` or `"github"`. Missing key resolves to `"jira"` for back-compat. |
|
|
24
|
+
| `github.org` | when `tracker = "github"` | — | GitHub org or user name. |
|
|
25
|
+
| `github.repo` | when `tracker = "github"` | — | GitHub repository name. |
|
|
26
|
+
|
|
27
|
+
## Resolution algorithm
|
|
28
|
+
|
|
29
|
+
Every `tracker-*` shim and every vendor-neutral caller follows this:
|
|
30
|
+
|
|
31
|
+
1. Read `.lisa.config.json` (or `.lisa.config.local.json` if it exists; local takes precedence on per-key basis). Use `jq` from Bash; never hand-parse JSON.
|
|
32
|
+
2. Extract the `tracker` field. If missing or null, default to `"jira"`.
|
|
33
|
+
3. If `tracker = "jira"`, delegate to the matching `jira-*` skill.
|
|
34
|
+
4. If `tracker = "github"`, delegate to the matching `github-*` skill, AND ensure `github.org` and `github.repo` are present — stop and report if either is missing.
|
|
35
|
+
5. Any other value: stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira' or 'github'."`
|
|
36
|
+
|
|
37
|
+
## Skill mapping
|
|
38
|
+
|
|
39
|
+
The shim → vendor mapping is fixed:
|
|
40
|
+
|
|
41
|
+
| Shim | jira tracker | github tracker |
|
|
42
|
+
|------|--------------|----------------|
|
|
43
|
+
| `lisa:tracker-write` | `lisa:jira-write-ticket` | `lisa:github-write-issue` |
|
|
44
|
+
| `lisa:tracker-validate` | `lisa:jira-validate-ticket` | `lisa:github-validate-issue` |
|
|
45
|
+
| `lisa:tracker-verify` | `lisa:jira-verify` | `lisa:github-verify` |
|
|
46
|
+
| `lisa:tracker-read` | `lisa:jira-read-ticket` | `lisa:github-read-issue` |
|
|
47
|
+
| `lisa:tracker-evidence` | `lisa:jira-evidence` | `lisa:github-evidence` |
|
|
48
|
+
| `lisa:tracker-sync` | `lisa:jira-sync` | `lisa:github-sync` |
|
|
49
|
+
| `lisa:tracker-add-journey` | `lisa:jira-add-journey` | `lisa:github-add-journey` |
|
|
50
|
+
| `lisa:tracker-journey` | `lisa:jira-journey` | `lisa:github-journey` |
|
|
51
|
+
| `lisa:tracker-create` | `lisa:jira-create` | `lisa:github-create` |
|
|
52
|
+
| `lisa:tracker-build-intake` | `lisa:jira-build-intake` | `lisa:github-build-intake` |
|
|
53
|
+
|
|
54
|
+
The `jira-source-artifacts` skill is read-only and vendor-neutral — it has no shim and no GitHub counterpart. Both vendors invoke it directly.
|
|
55
|
+
|
|
56
|
+
## Caller responsibilities
|
|
57
|
+
|
|
58
|
+
- **PRD-source skills** (`notion-to-tracker`, `confluence-to-tracker`, `linear-to-tracker`, `github-to-tracker`) must invoke `tracker-write` and `tracker-validate` — never `jira-write-ticket` / `github-write-issue` directly. This is what makes a project's tracker switchable via config.
|
|
59
|
+
- **Lifecycle skills** (`implement`, `verify`, `monitor`) must invoke `tracker-read`, `tracker-evidence`, `tracker-sync` for ticket interaction — never the vendor-specific equivalents.
|
|
60
|
+
- **Per-vendor PRD intake skills** (`notion-prd-intake`, `confluence-prd-intake`, `linear-prd-intake`, `github-prd-intake`) compose the PRD-source skills (which in turn invoke the shims) — they do not need to read `tracker` themselves.
|
|
61
|
+
|
|
62
|
+
## Invariants
|
|
63
|
+
|
|
64
|
+
- Project tracker selection is **persistent** within a project — always read from config, never infer from the shape of `$ARGUMENTS`. If a developer wants a different destination for one run, they edit `.lisa.config.local.json`.
|
|
65
|
+
- A vendor-neutral skill never embeds vendor-specific terminology in its prompts (no "JIRA ticket key", "epic parent" — use "tracker key", "parent issue"). The vendor skill is responsible for translating its inputs.
|
|
66
|
+
- The shim layer is intentionally thin — its only job is dispatch. Gate logic, validation rules, and field schemas all live in the vendor skills.
|
|
67
|
+
|
|
68
|
+
## Self-host edge case (GitHub PRDs → GitHub destination)
|
|
69
|
+
|
|
70
|
+
When `github-to-tracker` is invoked AND `tracker = "github"`, both reads and writes hit the same GitHub repo. Label namespaces are kept separate so the two flows don't collide:
|
|
71
|
+
|
|
72
|
+
- PRD-source labels: `prd-draft`, `prd-ready`, `prd-in-review`, `prd-blocked`, `prd-ticketed`, `prd-shipped` — owned by `github-prd-intake` and the human PM.
|
|
73
|
+
- Build-queue labels: `status:ready`, `status:in-progress`, `status:code-review`, `status:on-dev`, `status:done` — owned by `github-build-intake` and `github-agent`.
|
|
74
|
+
- Sentinel issue label: `prd-intake-feedback` — owned by `github-prd-intake`.
|
|
75
|
+
|
|
76
|
+
Never overload one label across both lifecycles.
|
|
@@ -24,7 +24,7 @@ Verification is mandatory. Never skip it, defer it, or claim it was unnecessary.
|
|
|
24
24
|
|
|
25
25
|
Before starting implementation, state your verification plan — how you will use the resulting software to prove it works. A verification plan that only lists test/typecheck/lint commands is not a verification plan. Do not begin implementation until the plan is confirmed.
|
|
26
26
|
|
|
27
|
-
After verifying a change empirically, encode that verification as automated
|
|
27
|
+
After verifying a change empirically, encode that verification as an automated regression test via the `codify-verification` skill. The manual proof that something works must become a repeatable test that catches future regressions — Playwright for UI/browser flows, integration test for API/DB/auth, benchmark for performance, etc. Codification is mandatory for every empirical verification type except the inherently non-behavioral ones (PR, Documentation, Deploy) and Investigate-Only spikes. If codification is genuinely impossible, escalate via the Escalation Protocol — never silently skip.
|
|
28
28
|
|
|
29
29
|
Every pull request must include step-by-step instructions for reviewers to independently replicate the verification. These are not test commands — they are the exact steps a human would follow to use the software and confirm the change works. If a reviewer cannot reproduce your verification from the PR description alone, the PR is incomplete.
|
|
30
30
|
|
|
@@ -101,7 +101,7 @@ Every change requires one or more verification types. Classify the change first,
|
|
|
101
101
|
Verification happens at two stages in the workflow:
|
|
102
102
|
|
|
103
103
|
- **Quality gates** (enforced automatically): Tests, typecheck, lint, and format run via hooks at write-time, commit-time, and push-time. These are prerequisites, not verification.
|
|
104
|
-
- **Local verification** (part of the Implement flow): After quality gates pass, empirically verify the change by running the actual system in a local or preview environment — make HTTP requests, interact with the UI, execute CLI commands, query the database. This proves the change works before shipping. After local verification succeeds, encode it as
|
|
104
|
+
- **Local verification** (part of the Implement flow): After quality gates pass, empirically verify the change by running the actual system in a local or preview environment — make HTTP requests, interact with the UI, execute CLI commands, query the database. This proves the change works before shipping. After local verification succeeds, invoke `codify-verification` to encode it as a regression test (Playwright for UI, integration test for API/DB/auth, benchmark for performance, etc.) and commit the test in the same PR.
|
|
105
105
|
- **Remote verification** (part of the Verify flow): After the PR is merged and deployed, repeat the same empirical verification against the target environment. This proves the change works in production, not just locally. If remote verification fails, fix and re-deploy.
|
|
106
106
|
|
|
107
107
|
Both levels use the same verification types table above. The difference is the environment, not the rigor.
|