@codyswann/lisa 2.7.0 → 2.8.1
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/dist/core/lisa.d.ts +21 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +40 -1
- package/dist/core/lisa.js.map +1 -1
- package/dist/utils/postinstall-trampoline.d.ts +20 -0
- package/dist/utils/postinstall-trampoline.d.ts.map +1 -1
- package/dist/utils/postinstall-trampoline.js +37 -0
- package/dist/utils/postinstall-trampoline.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/confluence-prd-intake.md +5 -5
- package/plugins/lisa/agents/github-agent.md +141 -0
- package/plugins/lisa/agents/github-build-intake.md +62 -0
- package/plugins/lisa/agents/github-prd-intake.md +64 -0
- package/plugins/lisa/agents/linear-prd-intake.md +5 -5
- package/plugins/lisa/agents/notion-prd-intake.md +5 -5
- package/plugins/lisa/commands/intake.md +2 -2
- package/plugins/lisa/commands/plan.md +2 -2
- package/plugins/lisa/rules/intent-routing.md +16 -11
- package/plugins/lisa/rules/tracker-resolution.md +76 -0
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +11 -11
- package/plugins/{src/base/skills/confluence-to-jira → lisa/skills/confluence-to-tracker}/SKILL.md +31 -31
- package/plugins/lisa/skills/github-add-journey/SKILL.md +114 -0
- package/plugins/lisa/skills/github-build-intake/SKILL.md +188 -0
- package/plugins/lisa/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa/skills/github-evidence/SKILL.md +116 -0
- package/plugins/lisa/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +286 -0
- package/plugins/lisa/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa/skills/github-sync/SKILL.md +73 -0
- package/plugins/lisa/skills/github-to-tracker/SKILL.md +312 -0
- package/plugins/lisa/skills/github-validate-issue/SKILL.md +288 -0
- package/plugins/lisa/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa/skills/github-write-issue/SKILL.md +304 -0
- package/plugins/lisa/skills/implement/SKILL.md +4 -4
- package/plugins/lisa/skills/intake/SKILL.md +14 -4
- package/plugins/lisa/skills/jira-source-artifacts/SKILL.md +1 -1
- package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +3 -3
- package/plugins/lisa/skills/jira-verify/SKILL.md +1 -1
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +10 -10
- package/plugins/lisa/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +11 -11
- package/plugins/{src/base/skills/notion-to-jira → lisa/skills/notion-to-tracker}/SKILL.md +34 -34
- package/plugins/lisa/skills/plan/SKILL.md +8 -6
- package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +22 -12
- package/plugins/lisa/skills/product-walkthrough/SKILL.md +1 -1
- package/plugins/lisa/skills/spec-conformance/SKILL.md +2 -3
- package/plugins/lisa/skills/ticket-triage/SKILL.md +7 -7
- package/plugins/lisa/skills/tracker-add-journey/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +25 -0
- package/plugins/lisa/skills/tracker-create/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-journey/SKILL.md +24 -0
- package/plugins/lisa/skills/tracker-read/SKILL.md +25 -0
- package/plugins/lisa/skills/tracker-sync/SKILL.md +26 -0
- package/plugins/lisa/skills/tracker-validate/SKILL.md +35 -0
- package/plugins/lisa/skills/tracker-verify/SKILL.md +25 -0
- package/plugins/lisa/skills/tracker-write/SKILL.md +43 -0
- package/plugins/lisa/skills/verify/SKILL.md +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/skills/jira-verify/SKILL.md +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/skills/jira-verify/SKILL.md +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/confluence-prd-intake.md +5 -5
- package/plugins/src/base/agents/github-agent.md +141 -0
- package/plugins/src/base/agents/github-build-intake.md +62 -0
- package/plugins/src/base/agents/github-prd-intake.md +64 -0
- package/plugins/src/base/agents/linear-prd-intake.md +5 -5
- package/plugins/src/base/agents/notion-prd-intake.md +5 -5
- package/plugins/src/base/commands/intake.md +2 -2
- package/plugins/src/base/commands/plan.md +2 -2
- package/plugins/src/base/rules/intent-routing.md +16 -11
- package/plugins/src/base/rules/tracker-resolution.md +76 -0
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +11 -11
- package/plugins/{lisa/skills/confluence-to-jira → src/base/skills/confluence-to-tracker}/SKILL.md +31 -31
- package/plugins/src/base/skills/github-add-journey/SKILL.md +114 -0
- package/plugins/src/base/skills/github-build-intake/SKILL.md +188 -0
- package/plugins/src/base/skills/github-create/SKILL.md +101 -0
- package/plugins/src/base/skills/github-evidence/SKILL.md +116 -0
- package/plugins/src/base/skills/github-journey/SKILL.md +121 -0
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +286 -0
- package/plugins/src/base/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/src/base/skills/github-sync/SKILL.md +73 -0
- package/plugins/src/base/skills/github-to-tracker/SKILL.md +312 -0
- package/plugins/src/base/skills/github-validate-issue/SKILL.md +288 -0
- package/plugins/src/base/skills/github-verify/SKILL.md +29 -0
- package/plugins/src/base/skills/github-write-issue/SKILL.md +304 -0
- package/plugins/src/base/skills/implement/SKILL.md +4 -4
- package/plugins/src/base/skills/intake/SKILL.md +14 -4
- package/plugins/src/base/skills/jira-source-artifacts/SKILL.md +1 -1
- package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +3 -3
- package/plugins/src/base/skills/jira-verify/SKILL.md +1 -1
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +10 -10
- package/plugins/src/base/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +11 -11
- package/plugins/{lisa/skills/notion-to-jira → src/base/skills/notion-to-tracker}/SKILL.md +34 -34
- package/plugins/src/base/skills/plan/SKILL.md +8 -6
- package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +22 -12
- package/plugins/src/base/skills/product-walkthrough/SKILL.md +1 -1
- package/plugins/src/base/skills/spec-conformance/SKILL.md +2 -3
- package/plugins/src/base/skills/ticket-triage/SKILL.md +7 -7
- package/plugins/src/base/skills/tracker-add-journey/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +25 -0
- package/plugins/src/base/skills/tracker-create/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-journey/SKILL.md +24 -0
- package/plugins/src/base/skills/tracker-read/SKILL.md +25 -0
- package/plugins/src/base/skills/tracker-sync/SKILL.md +26 -0
- package/plugins/src/base/skills/tracker-validate/SKILL.md +35 -0
- package/plugins/src/base/skills/tracker-verify/SKILL.md +25 -0
- package/plugins/src/base/skills/tracker-write/SKILL.md +43 -0
- package/plugins/src/base/skills/verify/SKILL.md +1 -1
- package/plugins/src/expo/skills/jira-verify/SKILL.md +1 -1
- package/plugins/src/rails/skills/jira-verify/SKILL.md +1 -1
- /package/cdk/{copy-overwrite → merge}/.oxlintrc.json +0 -0
- /package/expo/{copy-overwrite → merge}/.oxlintrc.json +0 -0
- /package/nestjs/{copy-overwrite → merge}/.oxlintrc.json +0 -0
- /package/typescript/{copy-overwrite → merge}/.oxlintrc.json +0 -0
|
@@ -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.
|
|
@@ -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
|
|
@@ -233,16 +233,16 @@ Sequence:
|
|
|
233
233
|
1. `ops-specialist` -- health checks, log inspection, error monitoring, performance analysis
|
|
234
234
|
2. Report findings, escalate if action needed
|
|
235
235
|
|
|
236
|
-
##
|
|
236
|
+
## Tracker Entry Point (JIRA or GitHub Issues)
|
|
237
237
|
|
|
238
|
-
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):
|
|
239
239
|
|
|
240
|
-
1. Hand off to `jira-agent`
|
|
241
|
-
2.
|
|
242
|
-
3.
|
|
243
|
-
4.
|
|
244
|
-
5. If triage finds unresolved ambiguities (`BLOCKED` verdict),
|
|
245
|
-
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:
|
|
246
246
|
|
|
247
247
|
| Ticket Type | Flow | Work Type |
|
|
248
248
|
|-------------|------|-----------|
|
|
@@ -252,11 +252,16 @@ When the request references a JIRA ticket (ticket ID like PROJ-123 or a JIRA URL
|
|
|
252
252
|
| Bug | Implement | Fix |
|
|
253
253
|
| Spike | Implement | Investigate Only |
|
|
254
254
|
| Improvement | Implement | Improve |
|
|
255
|
+
| Sub-task | Implement | (per parent's intent) |
|
|
255
256
|
|
|
256
|
-
|
|
257
|
+
For JIRA, the type comes from the ticket's issue type. For GitHub, the type comes from the `type:<value>` label.
|
|
257
258
|
|
|
258
|
-
|
|
259
|
-
|
|
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.
|
|
260
265
|
|
|
261
266
|
## Flow Chaining
|
|
262
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.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: confluence-prd-intake
|
|
3
|
-
description: "Scans a Confluence space (or a parent page) for PRD pages labelled `prd-ready` and runs each one through the dry-run validation pipeline. PRDs that pass every gate get tickets written and the label flipped to `prd-ticketed`; PRDs that fail get clarifying-question comments and the label flipped to `prd-blocked`. Confluence counterpart of `lisa:notion-prd-intake` — the workflow is identical; only the source-of-truth tools differ. Composes existing skills (confluence-to-
|
|
3
|
+
description: "Scans a Confluence space (or a parent page) for PRD pages labelled `prd-ready` and runs each one through the dry-run validation pipeline. PRDs that pass every gate get tickets written and the label flipped to `prd-ticketed`; PRDs that fail get clarifying-question comments and the label flipped to `prd-blocked`. Confluence counterpart of `lisa:notion-prd-intake` — the workflow is identical; only the source-of-truth tools differ. Composes existing skills (confluence-to-tracker, tracker-validate, jira-source-artifacts, product-walkthrough)."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluenceSpaces", "mcp__atlassian__getPagesInConfluenceSpace", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__searchConfluenceUsingCql", "mcp__atlassian__updateConfluencePage", "mcp__atlassian__createConfluenceFooterComment", "mcp__atlassian__createConfluenceInlineComment", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -99,19 +99,19 @@ The `updateConfluencePage` call must preserve the page body; only the labels cha
|
|
|
99
99
|
|
|
100
100
|
#### 3b. Dry-run validation
|
|
101
101
|
|
|
102
|
-
Invoke the `lisa:confluence-to-
|
|
102
|
+
Invoke the `lisa:confluence-to-tracker` skill with `dry_run: true` and the PRD's URL. The skill returns a structured report containing:
|
|
103
103
|
- The planned ticket hierarchy
|
|
104
104
|
- Per-ticket validation verdicts and remediation
|
|
105
105
|
- An overall PASS / FAIL verdict
|
|
106
106
|
- A failure count
|
|
107
107
|
|
|
108
|
-
This call also indirectly invokes `lisa:jira-source-artifacts` (artifact extraction + classification) and `lisa:product-walkthrough` (when the PRD touches existing user-facing surfaces). All gate logic lives in `lisa:
|
|
108
|
+
This call also indirectly invokes `lisa:jira-source-artifacts` (artifact extraction + classification) and `lisa:product-walkthrough` (when the PRD touches existing user-facing surfaces). All gate logic lives in `lisa:tracker-validate`, which `lisa:confluence-to-tracker` calls per ticket.
|
|
109
109
|
|
|
110
110
|
#### 3c. Branch on the verdict
|
|
111
111
|
|
|
112
112
|
**If `PASS`** (every planned ticket passed every applicable gate):
|
|
113
113
|
|
|
114
|
-
1. Re-invoke `lisa:confluence-to-
|
|
114
|
+
1. Re-invoke `lisa:confluence-to-tracker` with `dry_run: false` to actually write the tickets. This re-runs Phases 1-5 and runs the preservation gate (Phase 5.5).
|
|
115
115
|
2. Capture the created ticket keys from the skill's output.
|
|
116
116
|
3. Post a Confluence **footer comment** on the PRD via `mcp__atlassian__createConfluenceFooterComment` listing the created tickets (epic, stories, sub-tasks) with their JIRA URLs. Lead with: `"Ticketed by Claude. Created N JIRA issues — see below. Add the prd-shipped label after the work is delivered."`
|
|
117
117
|
4. Transition labels: remove `prd-in-review`, add `prd-ticketed` via `updateConfluencePage`.
|
|
@@ -124,7 +124,7 @@ The audience for these comments is the **product team**, not engineers. They are
|
|
|
124
124
|
##### 3c.1 Partition failures
|
|
125
125
|
|
|
126
126
|
1. Drop every failure where `product_relevant = false`. Those are internal data-quality problems — the agent should fix its own spec rather than ask product to clarify a missing core field. Record the dropped failures under `Errors` in the cycle summary so engineers can see them; never surface them on the PRD.
|
|
127
|
-
2. Group the remaining product-relevant failures by `prd_anchor` (the inline-comment anchor from `confluence-to-
|
|
127
|
+
2. Group the remaining product-relevant failures by `prd_anchor` (the inline-comment anchor from `confluence-to-tracker`'s dry-run report). Failures that share an anchor become one comment thread on that block. Failures with `prd_anchor: null` are batched into one footer comment, since they have no source section to attach to.
|
|
128
128
|
|
|
129
129
|
##### 3c.2 Render each comment
|
|
130
130
|
|
|
@@ -173,7 +173,7 @@ Use these exact badge labels — they are the validator's category values transl
|
|
|
173
173
|
|
|
174
174
|
- Gate IDs (`S4`, `F2`, etc.). Never appear in a comment body.
|
|
175
175
|
- JIRA terminology that has no product meaning (e.g. "Gherkin", "epic parent", "issue link", "validation journey", "sub-task hierarchy"). Paraphrase before posting.
|
|
176
|
-
- Internal skill names (`lisa:
|
|
176
|
+
- Internal skill names (`lisa:tracker-validate`, `confluence-to-tracker`).
|
|
177
177
|
- Engineering shorthand (`AC`, `OOS`, `repo`, `env var`).
|
|
178
178
|
- "Clarify this" / "Please specify" without candidate resolutions. The validator is required to provide candidates; if `recommendation` is empty or vague, treat the failure as an Error and surface internally rather than posting a useless comment.
|
|
179
179
|
|
|
@@ -199,7 +199,7 @@ Per-ticket gates prove each ticket is well-formed; they do NOT prove the *set* o
|
|
|
199
199
|
| `GAPS_FOUND` | The created ticket set is incomplete. (a) For each gap, post a comment using the same product-facing template as Phase 3c.3 — inline-anchored when `prd_anchor` is non-null, footer otherwise; category badge from the gap's `category` field; `What's unclear` and `Recommendation` from the audit report's `what` and `recommendation` fields. Apply the same forbidden-language rules from Phase 3c.5. (b) Post one footer summary comment listing the tickets that *were* successfully created (so product knows what to keep vs. what to extend). (c) Transition labels from `prd-ticketed` back to `prd-blocked` via `updateConfluencePage`. |
|
|
200
200
|
| `NO_TICKETS_FOUND` | Should not happen if step 2 succeeded. If it does, log it as an Error in the cycle summary and leave label as `prd-ticketed` with a comment flagging the audit failure for human review. |
|
|
201
201
|
|
|
202
|
-
3. The created tickets remain in
|
|
202
|
+
3. The created tickets remain in the destination tracker regardless of the verdict — they are valid in their own right. The audit only tells us whether *more* are needed.
|
|
203
203
|
|
|
204
204
|
### Phase 4 — Summary report
|
|
205
205
|
|
|
@@ -229,24 +229,24 @@ Print to the agent's output. Do not write this summary to Confluence or JIRA —
|
|
|
229
229
|
## Idempotency & safety
|
|
230
230
|
|
|
231
231
|
- **Single-cycle scope**: this skill processes the `prd-ready` set as it exists at the start of Phase 2. New `prd-ready` PRDs added mid-cycle are picked up next run.
|
|
232
|
-
- **No writes outside the lifecycle**: this skill only ever writes to
|
|
232
|
+
- **No writes outside the lifecycle**: this skill only ever writes to the destination tracker via `lisa:confluence-to-tracker` (which delegates to `lisa:tracker-write`), and only ever changes Confluence labels among `prd-in-review`, `prd-blocked`, `prd-ticketed`. It never edits PRD body content, never touches `prd-draft` or `prd-shipped`, never deletes pages.
|
|
233
233
|
- **Claim-first ordering**: the label flip to `prd-in-review` happens BEFORE validation runs, so a re-entrant call won't double-process.
|
|
234
234
|
- **Failure isolation**: an exception processing one PRD must not stop the cycle. Catch, record under "Errors" in the summary, continue to the next PRD. The PRD that errored is left labelled `prd-in-review` — the human investigates from there.
|
|
235
235
|
- **Single-label invariant**: after every transition, verify exactly one lifecycle label is present on the page. If two are present (rare race), surface as an Error and skip — do NOT auto-resolve, the human decides.
|
|
236
236
|
|
|
237
237
|
## Configuration
|
|
238
238
|
|
|
239
|
-
Same env vars as `lisa:confluence-to-
|
|
239
|
+
Same env vars as `lisa:confluence-to-tracker` — `JIRA_PROJECT`, `JIRA_SERVER`, `CONFLUENCE_HOST`, `E2E_BASE_URL`, `E2E_TEST_PHONE`, `E2E_TEST_OTP`, `E2E_TEST_ORG`, `E2E_GRAPHQL_URL`. If any required value is missing, surface the missing key(s) and exit this cycle — never invent values.
|
|
240
240
|
|
|
241
241
|
## Rules
|
|
242
242
|
|
|
243
|
-
- Never write to
|
|
243
|
+
- Never write to the destination tracker outside of `lisa:confluence-to-tracker` → `lisa:tracker-write`. The validator's verdict gates progress; bypassing it produces broken tickets.
|
|
244
244
|
- Never add or remove a label this skill doesn't own (`prd-in-review`, `prd-blocked`, `prd-ticketed`). Product owns `prd-draft`, `prd-ready`, `prd-shipped`.
|
|
245
245
|
- Never edit the PRD's body. Communication with product happens only through Confluence comments. If `updateConfluencePage` requires a body in the payload, refetch and pass it back unchanged.
|
|
246
246
|
- Never post a single page-level dump of all gate failures. One inline comment per `prd_anchor` group (or one footer summary for unanchored failures only). Comments must be inline-anchored where possible, categorized, plain-language, and contain a concrete recommendation.
|
|
247
247
|
- Never include a gate ID, internal skill name, or engineering shorthand in a comment body.
|
|
248
248
|
- Never run more than one intake cycle concurrently against the same scope. This skill assumes serial execution.
|
|
249
|
-
- If `lisa:confluence-to-
|
|
249
|
+
- If `lisa:confluence-to-tracker` returns errors, treat them as gate failures: comment + `prd-blocked`. Don't silently fail.
|
|
250
250
|
|
|
251
251
|
## Adoption (one-time per project)
|
|
252
252
|
|
package/plugins/{src/base/skills/confluence-to-jira → lisa/skills/confluence-to-tracker}/SKILL.md
RENAMED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: confluence-to-
|
|
2
|
+
name: confluence-to-tracker
|
|
3
3
|
description: >
|
|
4
|
-
Break down a Confluence PRD page into
|
|
5
|
-
user shares a Confluence PRD URL and wants it converted into
|
|
6
|
-
this Confluence spec", "create tickets from a Confluence page", "turn this Confluence doc into
|
|
7
|
-
or similar. This skill mirrors `lisa:notion-to-
|
|
4
|
+
Break down a Confluence PRD page into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json). Use this skill whenever the
|
|
5
|
+
user shares a Confluence PRD URL and wants it converted into tracker tickets, or asks to "break down
|
|
6
|
+
this Confluence spec", "create tickets from a Confluence page", "turn this Confluence doc into tickets",
|
|
7
|
+
or similar. This skill mirrors `lisa:notion-to-tracker` for projects whose PRDs live in Confluence —
|
|
8
8
|
the workflow, gates, dry-run mode, and validation rules are identical; only the source-of-truth tool
|
|
9
9
|
surface differs (Confluence MCP instead of Notion MCP).
|
|
10
|
-
allowed-tools: ["Skill", "Bash", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__searchConfluenceUsingCql", "mcp__atlassian__getAccessibleAtlassianResources"
|
|
10
|
+
allowed-tools: ["Skill", "Bash", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__searchConfluenceUsingCql", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# Confluence PRD to
|
|
13
|
+
# Confluence PRD to Tracker Breakdown
|
|
14
14
|
|
|
15
|
-
Convert a Confluence PRD into a structured JIRA
|
|
15
|
+
Convert a Confluence PRD into a structured ticket hierarchy in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json): Epics > Stories > Sub-tasks.
|
|
16
16
|
Each sub-task is scoped to exactly one repo and includes an empirical verification plan.
|
|
17
17
|
|
|
18
|
-
This skill is the Confluence counterpart of `lisa:notion-to-
|
|
18
|
+
This skill is the Confluence counterpart of `lisa:notion-to-tracker`. The two skills share the same
|
|
19
19
|
phases, gates, dry-run contract, and per-ticket validation logic. Only the PRD-side fetch / comment
|
|
20
20
|
tools differ. When changing workflow logic, change BOTH skills together so the two source vendors
|
|
21
21
|
stay behaviorally identical.
|
|
@@ -24,16 +24,16 @@ stay behaviorally identical.
|
|
|
24
24
|
|
|
25
25
|
This skill supports two modes, controlled by a `dry_run` flag in `$ARGUMENTS`:
|
|
26
26
|
|
|
27
|
-
- **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:
|
|
28
|
-
- **`dry_run: true`** (planning + validation only — no writes): run Phases 1, 1.5, 1.6, 2, 3, 4 to plan the hierarchy and draft each ticket spec, then call `lisa:
|
|
27
|
+
- **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:tracker-write`, run the preservation gate, report.
|
|
28
|
+
- **`dry_run: true`** (planning + validation only — no writes): run Phases 1, 1.5, 1.6, 2, 3, 4 to plan the hierarchy and draft each ticket spec, then call `lisa:tracker-validate` (with `--spec-only`) on every drafted ticket. Aggregate the per-ticket validator reports into a single dry-run report. **Skip Phase 5 (sub-task creation), Phase 5.5 (preservation gate), and Phase 6 (results report)** — none of those make sense without writes. Return the dry-run report so the caller (e.g. `lisa:confluence-prd-intake`) can decide whether to proceed.
|
|
29
29
|
|
|
30
|
-
Dry-run output format is identical to `lisa:notion-to-
|
|
30
|
+
Dry-run output format is identical to `lisa:notion-to-tracker`'s. Reuse the same fields, including
|
|
31
31
|
`prd_anchor` and `prd_section`. The only difference: `prd_anchor` is the inline-comment anchor text
|
|
32
32
|
that `createConfluenceInlineComment` accepts (typically the full selected substring; truncate if it
|
|
33
33
|
exceeds the tool's max anchor length and emit `null` if no resolvable anchor exists).
|
|
34
34
|
|
|
35
35
|
```text
|
|
36
|
-
## confluence-to-
|
|
36
|
+
## confluence-to-tracker dry-run: <PRD title>
|
|
37
37
|
|
|
38
38
|
### Planned hierarchy
|
|
39
39
|
- Epic: <summary>
|
|
@@ -67,11 +67,11 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
|
|
|
67
67
|
modifies the source Confluence page, never adds/removes labels, and never posts comments — that is the
|
|
68
68
|
orchestrating skill's responsibility (`lisa:confluence-prd-intake`).
|
|
69
69
|
|
|
70
|
-
## Hard Rule: All Writes Go Through `lisa:
|
|
70
|
+
## Hard Rule: All Writes Go Through `lisa:tracker-write`
|
|
71
71
|
|
|
72
|
-
**Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:
|
|
72
|
+
**Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:tracker-write` skill. Never call `mcp__atlassian__createJiraIssue`, `mcp__atlassian__editJiraIssue`, `mcp__atlassian__createIssueLink`, or any other Atlassian write tool directly from this skill or from any sub-agent it spawns.**
|
|
73
73
|
|
|
74
|
-
`lisa:
|
|
74
|
+
`lisa:tracker-write` enforces gates this skill does not:
|
|
75
75
|
- 3-audience description (Context / Technical Approach / Acceptance Criteria)
|
|
76
76
|
- Gherkin acceptance criteria
|
|
77
77
|
- Epic parent validation
|
|
@@ -80,7 +80,7 @@ orchestrating skill's responsibility (`lisa:confluence-prd-intake`).
|
|
|
80
80
|
- Sign-in account and target environment recorded in description
|
|
81
81
|
- Post-create verification
|
|
82
82
|
|
|
83
|
-
Bypassing `lisa:
|
|
83
|
+
Bypassing `lisa:tracker-write` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. The Atlassian read tools (`getJiraIssue`, `searchJiraIssuesUsingJql`, `getJiraIssueRemoteIssueLinks`, `getAccessibleAtlassianResources`, `getJiraProjectIssueTypesMetadata`, `getVisibleJiraProjects`, and the Confluence read endpoints listed in `allowed-tools` above) ARE allowed for context gathering and the Phase 5.5 preservation gate.
|
|
84
84
|
|
|
85
85
|
## Input
|
|
86
86
|
|
|
@@ -165,7 +165,7 @@ The existing-component reuse expectation is defined in `lisa:jira-source-artifac
|
|
|
165
165
|
|
|
166
166
|
### Phase 2: Codebase + Live Product Research
|
|
167
167
|
|
|
168
|
-
Identical to `lisa:notion-to-
|
|
168
|
+
Identical to `lisa:notion-to-tracker` Phase 2. Two complementary inputs ground PRD analysis: the **code** (what's there to reuse / extend) and the **live product** (what users see today). Skipping either produces tickets that misjudge the change.
|
|
169
169
|
|
|
170
170
|
**2a. Codebase research.** If the session doesn't already have codebase context, explore the repos to understand what exists. Use Explore agents for repos not yet examined.
|
|
171
171
|
|
|
@@ -177,9 +177,9 @@ Walkthrough findings are attached to the originating Confluence PRD as a **foote
|
|
|
177
177
|
|
|
178
178
|
### Phase 3: Create Epics
|
|
179
179
|
|
|
180
|
-
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:
|
|
180
|
+
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:tracker-write` in this phase. Instead, draft the epic spec (summary, description_body, artifacts) and validate it with `lisa:tracker-validate --spec-only`. Record the drafted spec (including a placeholder epic key like `DRY-RUN-EPIC-1`) for Phase 4 to use as parent references. In `dry_run: false` mode (default), proceed as described below.
|
|
181
181
|
|
|
182
|
-
For each PRD epic, **invoke the `lisa:
|
|
182
|
+
For each PRD epic, **invoke the `lisa:tracker-write` skill** (do not call `createJiraIssue` directly). Pass it everything it needs to enforce its quality gates:
|
|
183
183
|
|
|
184
184
|
- `project_key`: from `JIRA_PROJECT` config
|
|
185
185
|
- `issue_type`: `Epic`
|
|
@@ -199,7 +199,7 @@ Capture the returned epic key — Phase 4 needs it as the parent for stories.
|
|
|
199
199
|
|
|
200
200
|
### Phase 4: Create Stories
|
|
201
201
|
|
|
202
|
-
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:
|
|
202
|
+
> **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:tracker-write` in this phase. Instead, draft each story spec and validate it with `lisa:tracker-validate --spec-only`. Use placeholder keys (e.g. `DRY-RUN-STORY-1.1`) for any downstream references. In `dry_run: false` mode (default), proceed as described below.
|
|
203
203
|
|
|
204
204
|
For each Epic, plan two kinds of stories:
|
|
205
205
|
- **One "X.0 Setup" story** for data model and infrastructure prerequisites
|
|
@@ -207,13 +207,13 @@ For each Epic, plan two kinds of stories:
|
|
|
207
207
|
|
|
208
208
|
**Story naming convention**: Prefix the summary with a short code derived from the PRD title (e.g., `[CU-1.1]` for "Contract Upload").
|
|
209
209
|
|
|
210
|
-
For each story, **invoke `lisa:
|
|
210
|
+
For each story, **invoke `lisa:tracker-write`** with:
|
|
211
211
|
|
|
212
212
|
- `project_key`: from `JIRA_PROJECT` config
|
|
213
213
|
- `issue_type`: `Story`
|
|
214
214
|
- `epic_parent`: the Epic key captured in Phase 3 (mandatory)
|
|
215
215
|
- `summary`: prefixed per the naming convention above
|
|
216
|
-
- `description_body`: 3-audience description as in `lisa:notion-to-
|
|
216
|
+
- `description_body`: 3-audience description as in `lisa:notion-to-tracker` Phase 4
|
|
217
217
|
- `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below
|
|
218
218
|
|
|
219
219
|
| Story type | Inherits domains |
|
|
@@ -227,7 +227,7 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
|
|
|
227
227
|
|
|
228
228
|
### Phase 5: Create Sub-tasks
|
|
229
229
|
|
|
230
|
-
Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:
|
|
230
|
+
Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:tracker-write` for each sub-task — no agent may call `createJiraIssue` directly.**
|
|
231
231
|
|
|
232
232
|
Each sub-task MUST:
|
|
233
233
|
1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
|
|
@@ -241,9 +241,9 @@ Run the preservation gate defined in `lisa:jira-source-artifacts` §8 against th
|
|
|
241
241
|
|
|
242
242
|
To run the gate, this skill must:
|
|
243
243
|
|
|
244
|
-
1. Pull the remote links of every epic and story created in this run via `
|
|
244
|
+
1. Pull the remote links of every epic and story created in this run via `lisa:tracker-read (vendor-neutral; dispatches to jira-read-ticket or github-read-issue)`.
|
|
245
245
|
2. Apply the §8 preservation matrix and verdict rules.
|
|
246
|
-
3. If the gate fails: list each dropped/misrouted artifact and either re-attach via `lisa:
|
|
246
|
+
3. If the gate fails: list each dropped/misrouted artifact and either re-attach via `lisa:tracker-write` (UPDATE mode) or stop and ask the human.
|
|
247
247
|
4. If the gate passes: print the matrix compactly and proceed to Phase 6.
|
|
248
248
|
|
|
249
249
|
This gate is not optional.
|
|
@@ -275,13 +275,13 @@ When delegating to agents, provide this context. **The "MUST invoke jira-write-t
|
|
|
275
275
|
```text
|
|
276
276
|
Create JIRA sub-tasks in the [PROJECT] project at [CLOUD_ID].
|
|
277
277
|
|
|
278
|
-
CRITICAL: For each sub-task, invoke the `lisa:
|
|
279
|
-
Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:
|
|
278
|
+
CRITICAL: For each sub-task, invoke the `lisa:tracker-write` skill via the Skill tool.
|
|
279
|
+
Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:tracker-write` skill
|
|
280
280
|
enforces required quality gates (Gherkin acceptance criteria, 3-audience description,
|
|
281
281
|
single-repo scope, sign-in/environment fields, post-create verification). Bypassing it
|
|
282
282
|
produces broken tickets that downstream skills (triage, journey, evidence) cannot use.
|
|
283
283
|
|
|
284
|
-
For each sub-task, invoke `lisa:
|
|
284
|
+
For each sub-task, invoke `lisa:tracker-write` with:
|
|
285
285
|
- issue_type: "Sub-task"
|
|
286
286
|
- parent: the parent story key
|
|
287
287
|
- project_key: [PROJECT]
|
|
@@ -297,9 +297,9 @@ For each sub-task, invoke `lisa:jira-write-ticket` with:
|
|
|
297
297
|
Each sub-task must:
|
|
298
298
|
1. Be scoped to ONE repo only — repo named in brackets in the summary
|
|
299
299
|
2. Include the Empirical Verification Plan in the description
|
|
300
|
-
3. Be created via `lisa:
|
|
300
|
+
3. Be created via `lisa:tracker-write`, not via direct MCP calls
|
|
301
301
|
|
|
302
|
-
If `lisa:
|
|
302
|
+
If `lisa:tracker-write` rejects a sub-task, fix the input and re-invoke. Do NOT fall back
|
|
303
303
|
to a direct `createJiraIssue` call to bypass the gate.
|
|
304
304
|
|
|
305
305
|
Test user info: [credentials from config]
|