@codyswann/lisa 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/agents/confluence-prd-intake.md +5 -5
  4. package/plugins/lisa/agents/github-agent.md +141 -0
  5. package/plugins/lisa/agents/github-build-intake.md +62 -0
  6. package/plugins/lisa/agents/github-prd-intake.md +64 -0
  7. package/plugins/lisa/agents/linear-prd-intake.md +5 -5
  8. package/plugins/lisa/agents/notion-prd-intake.md +5 -5
  9. package/plugins/lisa/commands/intake.md +2 -2
  10. package/plugins/lisa/commands/plan.md +2 -2
  11. package/plugins/lisa/rules/intent-routing.md +16 -11
  12. package/plugins/lisa/rules/tracker-resolution.md +76 -0
  13. package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +11 -11
  14. package/plugins/lisa/skills/{confluence-to-jira → confluence-to-tracker}/SKILL.md +31 -31
  15. package/plugins/lisa/skills/github-add-journey/SKILL.md +114 -0
  16. package/plugins/lisa/skills/github-build-intake/SKILL.md +188 -0
  17. package/plugins/lisa/skills/github-create/SKILL.md +101 -0
  18. package/plugins/lisa/skills/github-evidence/SKILL.md +116 -0
  19. package/plugins/lisa/skills/github-journey/SKILL.md +121 -0
  20. package/plugins/lisa/skills/github-prd-intake/SKILL.md +286 -0
  21. package/plugins/lisa/skills/github-read-issue/SKILL.md +248 -0
  22. package/plugins/lisa/skills/github-sync/SKILL.md +73 -0
  23. package/plugins/lisa/skills/github-to-tracker/SKILL.md +312 -0
  24. package/plugins/lisa/skills/github-validate-issue/SKILL.md +288 -0
  25. package/plugins/lisa/skills/github-verify/SKILL.md +29 -0
  26. package/plugins/lisa/skills/github-write-issue/SKILL.md +304 -0
  27. package/plugins/lisa/skills/implement/SKILL.md +4 -4
  28. package/plugins/lisa/skills/intake/SKILL.md +14 -4
  29. package/plugins/lisa/skills/jira-source-artifacts/SKILL.md +1 -1
  30. package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +3 -3
  31. package/plugins/lisa/skills/jira-verify/SKILL.md +1 -1
  32. package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
  33. package/plugins/lisa/skills/linear-prd-intake/SKILL.md +10 -10
  34. package/plugins/lisa/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
  35. package/plugins/lisa/skills/notion-prd-intake/SKILL.md +11 -11
  36. package/plugins/{src/base/skills/notion-to-jira → lisa/skills/notion-to-tracker}/SKILL.md +34 -34
  37. package/plugins/lisa/skills/plan/SKILL.md +8 -6
  38. package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +22 -12
  39. package/plugins/lisa/skills/product-walkthrough/SKILL.md +1 -1
  40. package/plugins/lisa/skills/spec-conformance/SKILL.md +2 -3
  41. package/plugins/lisa/skills/ticket-triage/SKILL.md +7 -7
  42. package/plugins/lisa/skills/tracker-add-journey/SKILL.md +24 -0
  43. package/plugins/lisa/skills/tracker-build-intake/SKILL.md +25 -0
  44. package/plugins/lisa/skills/tracker-create/SKILL.md +24 -0
  45. package/plugins/lisa/skills/tracker-evidence/SKILL.md +24 -0
  46. package/plugins/lisa/skills/tracker-journey/SKILL.md +24 -0
  47. package/plugins/lisa/skills/tracker-read/SKILL.md +25 -0
  48. package/plugins/lisa/skills/tracker-sync/SKILL.md +26 -0
  49. package/plugins/lisa/skills/tracker-validate/SKILL.md +35 -0
  50. package/plugins/lisa/skills/tracker-verify/SKILL.md +25 -0
  51. package/plugins/lisa/skills/tracker-write/SKILL.md +43 -0
  52. package/plugins/lisa/skills/verify/SKILL.md +1 -1
  53. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-expo/skills/jira-verify/SKILL.md +1 -1
  56. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-rails/skills/jira-verify/SKILL.md +1 -1
  59. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  60. package/plugins/src/base/agents/confluence-prd-intake.md +5 -5
  61. package/plugins/src/base/agents/github-agent.md +141 -0
  62. package/plugins/src/base/agents/github-build-intake.md +62 -0
  63. package/plugins/src/base/agents/github-prd-intake.md +64 -0
  64. package/plugins/src/base/agents/linear-prd-intake.md +5 -5
  65. package/plugins/src/base/agents/notion-prd-intake.md +5 -5
  66. package/plugins/src/base/commands/intake.md +2 -2
  67. package/plugins/src/base/commands/plan.md +2 -2
  68. package/plugins/src/base/rules/intent-routing.md +16 -11
  69. package/plugins/src/base/rules/tracker-resolution.md +76 -0
  70. package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +11 -11
  71. package/plugins/src/base/skills/{confluence-to-jira → confluence-to-tracker}/SKILL.md +31 -31
  72. package/plugins/src/base/skills/github-add-journey/SKILL.md +114 -0
  73. package/plugins/src/base/skills/github-build-intake/SKILL.md +188 -0
  74. package/plugins/src/base/skills/github-create/SKILL.md +101 -0
  75. package/plugins/src/base/skills/github-evidence/SKILL.md +116 -0
  76. package/plugins/src/base/skills/github-journey/SKILL.md +121 -0
  77. package/plugins/src/base/skills/github-prd-intake/SKILL.md +286 -0
  78. package/plugins/src/base/skills/github-read-issue/SKILL.md +248 -0
  79. package/plugins/src/base/skills/github-sync/SKILL.md +73 -0
  80. package/plugins/src/base/skills/github-to-tracker/SKILL.md +312 -0
  81. package/plugins/src/base/skills/github-validate-issue/SKILL.md +288 -0
  82. package/plugins/src/base/skills/github-verify/SKILL.md +29 -0
  83. package/plugins/src/base/skills/github-write-issue/SKILL.md +304 -0
  84. package/plugins/src/base/skills/implement/SKILL.md +4 -4
  85. package/plugins/src/base/skills/intake/SKILL.md +14 -4
  86. package/plugins/src/base/skills/jira-source-artifacts/SKILL.md +1 -1
  87. package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +3 -3
  88. package/plugins/src/base/skills/jira-verify/SKILL.md +1 -1
  89. package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
  90. package/plugins/src/base/skills/linear-prd-intake/SKILL.md +10 -10
  91. package/plugins/src/base/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
  92. package/plugins/src/base/skills/notion-prd-intake/SKILL.md +11 -11
  93. package/plugins/{lisa/skills/notion-to-jira → src/base/skills/notion-to-tracker}/SKILL.md +34 -34
  94. package/plugins/src/base/skills/plan/SKILL.md +8 -6
  95. package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +22 -12
  96. package/plugins/src/base/skills/product-walkthrough/SKILL.md +1 -1
  97. package/plugins/src/base/skills/spec-conformance/SKILL.md +2 -3
  98. package/plugins/src/base/skills/ticket-triage/SKILL.md +7 -7
  99. package/plugins/src/base/skills/tracker-add-journey/SKILL.md +24 -0
  100. package/plugins/src/base/skills/tracker-build-intake/SKILL.md +25 -0
  101. package/plugins/src/base/skills/tracker-create/SKILL.md +24 -0
  102. package/plugins/src/base/skills/tracker-evidence/SKILL.md +24 -0
  103. package/plugins/src/base/skills/tracker-journey/SKILL.md +24 -0
  104. package/plugins/src/base/skills/tracker-read/SKILL.md +25 -0
  105. package/plugins/src/base/skills/tracker-sync/SKILL.md +26 -0
  106. package/plugins/src/base/skills/tracker-validate/SKILL.md +35 -0
  107. package/plugins/src/base/skills/tracker-verify/SKILL.md +25 -0
  108. package/plugins/src/base/skills/tracker-write/SKILL.md +43 -0
  109. package/plugins/src/base/skills/verify/SKILL.md +1 -1
  110. package/plugins/src/expo/skills/jira-verify/SKILL.md +1 -1
  111. package/plugins/src/rails/skills/jira-verify/SKILL.md +1 -1
@@ -1,21 +1,20 @@
1
1
  ---
2
- name: linear-to-jira
2
+ name: linear-to-tracker
3
3
  description: >
4
- Break down a Linear PRD (a Linear Project) into JIRA epics, stories, and sub-tasks. Use this skill
5
- whenever the user shares a Linear project URL and wants it converted into JIRA tickets, or asks to
6
- "break down this Linear project", "create tickets from a Linear project", "turn this Linear PRD into
7
- JIRA", or similar. This skill mirrors `lisa:notion-to-jira` and `lisa:confluence-to-jira` for projects
4
+ Break down a Linear PRD (a Linear Project) into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json). Use this skill
5
+ whenever the user shares a Linear project URL and wants it converted into tracker tickets, or asks to
6
+ "break down this Linear project", "create tickets from a Linear project", "turn this Linear PRD into tickets", or similar. This skill mirrors `lisa:notion-to-tracker` and `lisa:confluence-to-tracker` for projects
8
7
  whose PRDs live in Linear — the workflow, gates, dry-run mode, and validation rules are identical;
9
8
  only the source-of-truth tool surface differs (Linear MCP instead of Notion / Confluence MCP).
10
- allowed-tools: ["Skill", "Bash", "mcp__linear-server__get_project", "mcp__linear-server__list_projects", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__list_comments", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_project_labels", "mcp__linear-server__list_teams", "mcp__atlassian__getJiraIssueRemoteIssueLinks"]
9
+ allowed-tools: ["Skill", "Bash", "mcp__linear-server__get_project", "mcp__linear-server__list_projects", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__list_comments", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_project_labels", "mcp__linear-server__list_teams"]
11
10
  ---
12
11
 
13
- # Linear PRD to JIRA Breakdown
12
+ # Linear PRD to Tracker Breakdown
14
13
 
15
- Convert a Linear PRD (a Linear **Project**) into a structured JIRA ticket hierarchy: Epics > Stories > Sub-tasks.
14
+ Convert a Linear PRD (a Linear **Project**) into a structured ticket hierarchy in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json): Epics > Stories > Sub-tasks.
16
15
  Each sub-task is scoped to exactly one repo and includes an empirical verification plan.
17
16
 
18
- This skill is the Linear counterpart of `lisa:notion-to-jira` and `lisa:confluence-to-jira`. The three skills share the same phases, gates, dry-run contract, and per-ticket validation logic. Only the PRD-side fetch tools differ. When changing workflow logic, change ALL THREE skills together so the source vendors stay behaviorally identical.
17
+ This skill is the Linear counterpart of `lisa:notion-to-tracker` and `lisa:confluence-to-tracker`. The three skills share the same phases, gates, dry-run contract, and per-ticket validation logic. Only the PRD-side fetch tools differ. When changing workflow logic, change ALL THREE skills together so the source vendors stay behaviorally identical.
19
18
 
20
19
  ## What "PRD" means in Linear
21
20
 
@@ -30,13 +29,13 @@ Linear has no native "PRD" entity. This skill treats a **Linear Project** as the
30
29
 
31
30
  This skill supports two modes, controlled by a `dry_run` flag in `$ARGUMENTS`:
32
31
 
33
- - **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:jira-write-ticket`, run the preservation gate, report.
34
- - **`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:jira-validate-ticket` (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:linear-prd-intake`) can decide whether to proceed.
32
+ - **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:tracker-write`, run the preservation gate, report.
33
+ - **`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:linear-prd-intake`) can decide whether to proceed.
35
34
 
36
- Dry-run output format is identical to `lisa:notion-to-jira`'s and `lisa:confluence-to-jira`'s. Reuse the same fields, including `prd_anchor` and `prd_section`. The only difference: Linear has no inline-comment selection-anchor primitive at the project level — `prd_anchor` is the anchor a downstream caller would use to *post a comment on the related sub-issue* (typically the issue identifier, e.g. `LIN-123`, scoped to a section heading). When the failure does not map to any single sub-issue, set `prd_anchor: null` and the caller falls back to its sentinel feedback channel.
35
+ Dry-run output format is identical to `lisa:notion-to-tracker`'s and `lisa:confluence-to-tracker`'s. Reuse the same fields, including `prd_anchor` and `prd_section`. The only difference: Linear has no inline-comment selection-anchor primitive at the project level — `prd_anchor` is the anchor a downstream caller would use to *post a comment on the related sub-issue* (typically the issue identifier, e.g. `LIN-123`, scoped to a section heading). When the failure does not map to any single sub-issue, set `prd_anchor: null` and the caller falls back to its sentinel feedback channel.
37
36
 
38
37
  ```text
39
- ## linear-to-jira dry-run: <PRD title>
38
+ ## linear-to-tracker dry-run: <PRD title>
40
39
 
41
40
  ### Planned hierarchy
42
41
  - Epic: <summary>
@@ -68,11 +67,11 @@ Dry-run output format is identical to `lisa:notion-to-jira`'s and `lisa:confluen
68
67
 
69
68
  The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJiraIssue`. It also never modifies the source Linear project, never adds/removes labels, never edits sub-issues, and never posts comments — that is the orchestrating skill's responsibility (`lisa:linear-prd-intake`).
70
69
 
71
- ## Hard Rule: All Writes Go Through `lisa:jira-write-ticket`
70
+ ## Hard Rule: All Writes Go Through `lisa:tracker-write`
72
71
 
73
- **Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:jira-write-ticket` 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.**
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.**
74
73
 
75
- `lisa:jira-write-ticket` enforces gates this skill does not:
74
+ `lisa:tracker-write` enforces gates this skill does not:
76
75
  - 3-audience description (Context / Technical Approach / Acceptance Criteria)
77
76
  - Gherkin acceptance criteria
78
77
  - Epic parent validation
@@ -81,7 +80,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
81
80
  - Sign-in account and target environment recorded in description
82
81
  - Post-create verification
83
82
 
84
- Bypassing `lisa:jira-write-ticket` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. Atlassian reads in this skill are limited to the tools listed in `allowed-tools` (currently `getJiraIssueRemoteIssueLinks`) for the Phase 5.5 preservation gate. The Linear read tools listed in `allowed-tools` above are PRD-side only and never write.
83
+ Bypassing `lisa:tracker-write` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. Atlassian reads in this skill are limited to the tools listed in `allowed-tools` (currently `getJiraIssueRemoteIssueLinks`) for the Phase 5.5 preservation gate. The Linear read tools listed in `allowed-tools` above are PRD-side only and never write.
85
84
 
86
85
  ## Input
87
86
 
@@ -159,7 +158,7 @@ The existing-component reuse expectation is defined in `lisa:jira-source-artifac
159
158
 
160
159
  ### Phase 2: Codebase + Live Product Research
161
160
 
162
- Identical to `lisa:notion-to-jira` Phase 2 and `lisa:confluence-to-jira` 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.
161
+ Identical to `lisa:notion-to-tracker` Phase 2 and `lisa:confluence-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.
163
162
 
164
163
  **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.
165
164
 
@@ -171,9 +170,9 @@ Walkthrough findings are surfaced back to product via the orchestrating intake s
171
170
 
172
171
  ### Phase 3: Create Epics
173
172
 
174
- > **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:jira-write-ticket` in this phase. Instead, draft the epic spec (summary, description_body, artifacts) and validate it with `lisa:jira-validate-ticket --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.
173
+ > **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.
175
174
 
176
- For each epic identified in Phase 1, **invoke the `lisa:jira-write-ticket` skill** (do not call `createJiraIssue` directly). Pass it everything it needs to enforce its quality gates:
175
+ For each epic identified in Phase 1, **invoke the `lisa:tracker-write` skill** (do not call `createJiraIssue` directly). Pass it everything it needs to enforce its quality gates:
177
176
 
178
177
  - `project_key`: from `JIRA_PROJECT` config
179
178
  - `issue_type`: `Epic`
@@ -193,7 +192,7 @@ Capture the returned epic key — Phase 4 needs it as the parent for stories.
193
192
 
194
193
  ### Phase 4: Create Stories
195
194
 
196
- > **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:jira-write-ticket` in this phase. Instead, draft each story spec and validate it with `lisa:jira-validate-ticket --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.
195
+ > **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.
197
196
 
198
197
  For each Epic, plan two kinds of stories:
199
198
  - **One "X.0 Setup" story** for data model and infrastructure prerequisites
@@ -201,13 +200,13 @@ For each Epic, plan two kinds of stories:
201
200
 
202
201
  **Story naming convention**: Prefix the summary with a short code derived from the PRD title (e.g., `[CU-1.1]` for "Contract Upload").
203
202
 
204
- For each story, **invoke `lisa:jira-write-ticket`** with:
203
+ For each story, **invoke `lisa:tracker-write`** with:
205
204
 
206
205
  - `project_key`: from `JIRA_PROJECT` config
207
206
  - `issue_type`: `Story`
208
207
  - `epic_parent`: the Epic key captured in Phase 3 (mandatory)
209
208
  - `summary`: prefixed per the naming convention above
210
- - `description_body`: 3-audience description as in `lisa:notion-to-jira` Phase 4
209
+ - `description_body`: 3-audience description as in `lisa:notion-to-tracker` Phase 4
211
210
  - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below
212
211
 
213
212
  | Story type | Inherits domains |
@@ -221,7 +220,7 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
221
220
 
222
221
  ### Phase 5: Create Sub-tasks
223
222
 
224
- Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:jira-write-ticket` for each sub-task — no agent may call `createJiraIssue` directly.**
223
+ 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.**
225
224
 
226
225
  Each sub-task MUST:
227
226
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
@@ -235,9 +234,9 @@ Run the preservation gate defined in `lisa:jira-source-artifacts` §8 against th
235
234
 
236
235
  To run the gate, this skill must:
237
236
 
238
- 1. Pull the remote links of every epic and story created in this run via `mcp__atlassian__getJiraIssueRemoteIssueLinks`.
237
+ 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)`.
239
238
  2. Apply the §8 preservation matrix and verdict rules.
240
- 3. If the gate fails: list each dropped/misrouted artifact and either re-attach via `lisa:jira-write-ticket` (UPDATE mode) or stop and ask the human.
239
+ 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.
241
240
  4. If the gate passes: print the matrix compactly and proceed to Phase 6.
242
241
 
243
242
  This gate is not optional.
@@ -269,13 +268,13 @@ When delegating to agents, provide this context. **The "MUST invoke jira-write-t
269
268
  ```text
270
269
  Create JIRA sub-tasks in the [PROJECT] project at [CLOUD_ID].
271
270
 
272
- CRITICAL: For each sub-task, invoke the `lisa:jira-write-ticket` skill via the Skill tool.
273
- Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:jira-write-ticket` skill
271
+ CRITICAL: For each sub-task, invoke the `lisa:tracker-write` skill via the Skill tool.
272
+ Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:tracker-write` skill
274
273
  enforces required quality gates (Gherkin acceptance criteria, 3-audience description,
275
274
  single-repo scope, sign-in/environment fields, post-create verification). Bypassing it
276
275
  produces broken tickets that downstream skills (triage, journey, evidence) cannot use.
277
276
 
278
- For each sub-task, invoke `lisa:jira-write-ticket` with:
277
+ For each sub-task, invoke `lisa:tracker-write` with:
279
278
  - issue_type: "Sub-task"
280
279
  - parent: the parent story key
281
280
  - project_key: [PROJECT]
@@ -291,9 +290,9 @@ For each sub-task, invoke `lisa:jira-write-ticket` with:
291
290
  Each sub-task must:
292
291
  1. Be scoped to ONE repo only — repo named in brackets in the summary
293
292
  2. Include the Empirical Verification Plan in the description
294
- 3. Be created via `lisa:jira-write-ticket`, not via direct MCP calls
293
+ 3. Be created via `lisa:tracker-write`, not via direct MCP calls
295
294
 
296
- If `lisa:jira-write-ticket` rejects a sub-task, fix the input and re-invoke. Do NOT fall back
295
+ If `lisa:tracker-write` rejects a sub-task, fix the input and re-invoke. Do NOT fall back
297
296
  to a direct `createJiraIssue` call to bypass the gate.
298
297
 
299
298
  Test user info: [credentials from config]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: notion-prd-intake
3
- description: "Scans a Notion PRD database for pages with Status=Ready and runs each one through the dry-run validation pipeline. PRDs that pass every gate get tickets written and Status=Ticketed; PRDs that fail get clarifying-question comments and Status=Blocked. The skill is the runtime for the Ready → In Review → Blocked|Ticketed lifecycle. Composes existing skills (notion-to-jira, jira-validate-ticket, jira-source-artifacts, product-walkthrough); does not reimplement their logic."
3
+ description: "Scans a Notion PRD database for pages with Status=Ready and runs each one through the dry-run validation pipeline. PRDs that pass every gate get tickets written and Status=Ticketed; PRDs that fail get clarifying-question comments and Status=Blocked. The skill is the runtime for the Ready → In Review → Blocked|Ticketed lifecycle. Composes existing skills (notion-to-tracker, tracker-validate, jira-source-artifacts, product-walkthrough); does not reimplement their logic."
4
4
  allowed-tools: ["Skill", "Bash", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-search", "mcp__claude_ai_Notion__notion-update-page", "mcp__claude_ai_Notion__notion-create-comment", "mcp__atlassian__getAccessibleAtlassianResources"]
5
5
  ---
6
6
 
@@ -72,19 +72,19 @@ If the update fails (permission error, race), log it and skip this PRD. Do not p
72
72
 
73
73
  #### 3b. Dry-run validation
74
74
 
75
- Invoke the `lisa:notion-to-jira` skill with `dry_run: true` and the PRD's URL. The skill returns a structured report containing:
75
+ Invoke the `lisa:notion-to-tracker` skill with `dry_run: true` and the PRD's URL. The skill returns a structured report containing:
76
76
  - The planned ticket hierarchy
77
77
  - Per-ticket validation verdicts and remediation
78
78
  - An overall PASS / FAIL verdict
79
79
  - A failure count
80
80
 
81
- 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:jira-validate-ticket`, which `lisa:notion-to-jira` calls per ticket.
81
+ 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:notion-to-tracker` calls per ticket.
82
82
 
83
83
  #### 3c. Branch on the verdict
84
84
 
85
85
  **If `PASS`** (every planned ticket passed every applicable gate):
86
86
 
87
- 1. Re-invoke `lisa:notion-to-jira` with `dry_run: false` to actually write the tickets. This re-runs Phases 1-5 and runs the preservation gate (Phase 5.5).
87
+ 1. Re-invoke `lisa:notion-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).
88
88
  2. Capture the created ticket keys from the skill's output.
89
89
  3. Post a Notion comment on the PRD via `mcp__claude_ai_Notion__notion-create-comment` listing the created tickets (epic, stories, sub-tasks) with their JIRA URLs. Lead with: `"Ticketed by Claude. Created N JIRA issues — see below. Move Status to Shipped after the work is delivered."`
90
90
  4. Set `Status = Ticketed` via `notion-update-page`.
@@ -104,7 +104,7 @@ Per-ticket gates prove each ticket is well-formed; they do NOT prove the *set* o
104
104
  | `GAPS_FOUND` | The created ticket set is incomplete. (a) For each gap, post a Notion comment using the same product-facing template as Phase 3c.3 — block-anchored via `selection_with_ellipsis` when `prd_anchor` is non-null, page-level 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 summary comment listing the tickets that *were* successfully created (so product knows what to keep vs. what to extend). (c) Transition `Status` from `Ticketed` back to `Blocked` via `notion-update-page`. |
105
105
  | `NO_TICKETS_FOUND` | Should not happen if step 2 succeeded. If it does, log it as an Error in the cycle summary and leave `Status = Ticketed` with a comment flagging the audit failure for human review. |
106
106
 
107
- 3. The created tickets remain in JIRA regardless of the verdict — they are valid in their own right (they passed `lisa:jira-validate-ticket`). The audit only tells us whether *more* are needed.
107
+ 3. The created tickets remain in the destination tracker regardless of the verdict — they are valid in their own right (they passed `lisa:tracker-validate`). The audit only tells us whether *more* are needed.
108
108
 
109
109
  The audit's report should be summarized in the cycle summary alongside the per-PRD outcome (e.g., `Ticketed (coverage: COMPLETE)` or `Blocked (coverage gaps: 3)`).
110
110
 
@@ -115,7 +115,7 @@ The audience for these comments is the **product team**, not engineers. They are
115
115
  ##### 3c.1 Partition failures
116
116
 
117
117
  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.
118
- 2. Group the remaining product-relevant failures by `prd_anchor` (the snippet from `notion-to-jira`'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 page-level summary comment, since they have no source section to attach to.
118
+ 2. Group the remaining product-relevant failures by `prd_anchor` (the snippet from `notion-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 page-level summary comment, since they have no source section to attach to.
119
119
 
120
120
  ##### 3c.2 Render each comment
121
121
 
@@ -162,7 +162,7 @@ Use these exact badge labels — they are the validator's category values transl
162
162
 
163
163
  - Gate IDs (`S4`, `F2`, etc.). Never appear in a comment body.
164
164
  - JIRA terminology that has no product meaning (e.g. "Gherkin", "epic parent", "issue link", "validation journey", "sub-task hierarchy"). If the validator's `what` field uses one of these terms, paraphrase before posting; do not pass through verbatim.
165
- - Internal skill names (`lisa:jira-validate-ticket`, `notion-to-jira`).
165
+ - Internal skill names (`lisa:tracker-validate`, `notion-to-tracker`).
166
166
  - Engineering shorthand (`AC`, `OOS`, `repo`, `env var`).
167
167
  - "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.
168
168
 
@@ -202,7 +202,7 @@ Print to the agent's output. Do not write this summary to Notion or JIRA — it'
202
202
  ## Idempotency & safety
203
203
 
204
204
  - **Single-cycle scope**: this skill processes the Ready set as it exists at the start of Phase 2. New `Ready` PRDs added mid-cycle are picked up next run.
205
- - **No writes outside the lifecycle**: this skill only ever writes to JIRA via `lisa:notion-to-jira` (which delegates to `lisa:jira-write-ticket`), and only ever changes Notion `Status` to `In Review`, `Blocked`, or `Ticketed`. It never edits PRD content, never touches `Draft` or `Shipped`, never deletes pages.
205
+ - **No writes outside the lifecycle**: this skill only ever writes to the destination tracker via `lisa:notion-to-tracker` (which delegates to `lisa:tracker-write`), and only ever changes Notion `Status` to `In Review`, `Blocked`, or `Ticketed`. It never edits PRD content, never touches `Draft` or `Shipped`, never deletes pages.
206
206
  - **Claim-first ordering**: `Status = In Review` is set BEFORE validation runs, so a re-entrant call won't double-process.
207
207
  - **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 in `In Review` — the human investigates from there.
208
208
 
@@ -212,7 +212,7 @@ This skill reads project configuration from environment variables (or `$ARGUMENT
212
212
 
213
213
  | Variable | Purpose |
214
214
  |----------|---------|
215
- | `JIRA_PROJECT` | JIRA project key for ticket creation (passed to `lisa:notion-to-jira`) |
215
+ | `JIRA_PROJECT` | JIRA project key for ticket creation (passed to `lisa:notion-to-tracker`) |
216
216
  | `JIRA_SERVER` | Atlassian instance host |
217
217
  | `E2E_BASE_URL` | Frontend URL for `lisa:product-walkthrough` |
218
218
  | `E2E_TEST_PHONE` / `E2E_TEST_OTP` / `E2E_TEST_ORG` | Test user creds for walkthrough + verification plans |
@@ -220,10 +220,10 @@ This skill reads project configuration from environment variables (or `$ARGUMENT
220
220
 
221
221
  ## Rules
222
222
 
223
- - Never write to JIRA outside of `lisa:notion-to-jira` → `lisa:jira-write-ticket`. The validator's verdict gates progress; bypassing it produces broken tickets.
223
+ - Never write to the destination tracker outside of `lisa:notion-to-tracker` → `lisa:tracker-write`. The validator's verdict gates progress; bypassing it produces broken tickets.
224
224
  - Never set Notion `Status` to a value this skill doesn't own (`In Review`, `Blocked`, `Ticketed`). Product owns `Draft`, `Ready`, `Shipped`.
225
225
  - Never edit the PRD's body. Communication with product happens only through Notion comments.
226
226
  - Never post a single page-level dump of all gate failures. One comment per `prd_anchor` group (or one page-level summary for unanchored failures only). The audience is product, not engineers — comments must be block-anchored, categorized, plain-language, and contain a concrete recommendation. See Phase 3c.3 for the required template and Phase 3c.5 for forbidden language.
227
227
  - Never include a gate ID, internal skill name, or engineering shorthand in a Notion comment body. If the validator's `what` or `recommendation` field uses one, paraphrase before posting.
228
228
  - Never run more than one intake cycle concurrently against the same database. This skill assumes serial execution. (Scheduling is a separate concern; the runtime should not start a new cycle if a previous one is still in flight.)
229
- - If `lisa:notion-to-jira` returns errors (e.g. unreachable artifact, malformed PRD structure), treat them as gate failures: comment + Blocked. Don't silently fail.
229
+ - If `lisa:notion-to-tracker` returns errors (e.g. unreachable artifact, malformed PRD structure), treat them as gate failures: comment + Blocked. Don't silently fail.
@@ -1,30 +1,30 @@
1
1
  ---
2
- name: notion-to-jira
2
+ name: notion-to-tracker
3
3
  description: >
4
- Break down a Notion PRD into JIRA epics, stories, and sub-tasks. Use this skill whenever the user
5
- shares a Notion PRD URL and wants it converted into JIRA tickets, or asks to "break down a PRD",
6
- "create tickets from a PRD", "turn this PRD into JIRA", or similar. Also trigger when the user
4
+ Break down a Notion PRD into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json). Use this skill whenever the user
5
+ shares a Notion PRD URL and wants it converted into tracker tickets, or asks to "break down a PRD",
6
+ "create tickets from a PRD", "turn this PRD into tickets", or similar. Also trigger when the user
7
7
  mentions creating epics/stories/tasks from a Notion document. This skill handles the full pipeline:
8
8
  fetching the PRD, analyzing comments, researching the codebase, identifying blockers, and creating
9
9
  all tickets with empirical verification plans.
10
10
  ---
11
11
 
12
- # Notion PRD to JIRA Breakdown
12
+ # Notion PRD to Tracker Breakdown
13
13
 
14
- Convert a Notion PRD into a structured JIRA ticket hierarchy: Epics > Stories > Sub-tasks.
14
+ Convert a Notion PRD into a structured ticket hierarchy in the configured destination tracker (JIRA or GitHub Issues per .lisa.config.json): Epics > Stories > Sub-tasks.
15
15
  Each sub-task is scoped to exactly one repo and includes an empirical verification plan.
16
16
 
17
17
  ## Modes
18
18
 
19
19
  This skill supports two modes, controlled by a `dry_run` flag in `$ARGUMENTS`:
20
20
 
21
- - **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:jira-write-ticket`, run the preservation gate, report.
22
- - **`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:jira-validate-ticket` (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:notion-prd-intake`) can decide whether to proceed.
21
+ - **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa:tracker-write`, run the preservation gate, report.
22
+ - **`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:notion-prd-intake`) can decide whether to proceed.
23
23
 
24
24
  Dry-run output format:
25
25
 
26
26
  ```text
27
- ## notion-to-jira dry-run: <PRD title>
27
+ ## notion-to-tracker dry-run: <PRD title>
28
28
 
29
29
  ### Planned hierarchy
30
30
  - Epic: <summary>
@@ -60,11 +60,11 @@ The `failures` array passes the validator's `Failure details` block through verb
60
60
 
61
61
  The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJiraIssue`. It also never sets a Notion status — that is the orchestrating skill's responsibility.
62
62
 
63
- ## Hard Rule: All Writes Go Through `lisa:jira-write-ticket`
63
+ ## Hard Rule: All Writes Go Through `lisa:tracker-write`
64
64
 
65
- **Every JIRA ticket created by this skill — every epic, story, and sub-task — MUST be created by invoking the `lisa:jira-write-ticket` 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.**
65
+ **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.**
66
66
 
67
- `lisa:jira-write-ticket` enforces gates this skill does not:
67
+ `lisa:tracker-write` enforces gates this skill does not:
68
68
  - 3-audience description (Context / Technical Approach / Acceptance Criteria)
69
69
  - Gherkin acceptance criteria
70
70
  - Epic parent validation
@@ -73,7 +73,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
73
73
  - Sign-in account and target environment recorded in description
74
74
  - Post-create verification
75
75
 
76
- Bypassing `lisa:jira-write-ticket` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. This is the most common failure mode this skill has had — calling `createJiraIssue` directly is a regression, not an optimization. The Atlassian read tools (`getJiraIssue`, `searchJiraIssuesUsingJql`, `getJiraIssueRemoteIssueLinks`, `getAccessibleAtlassianResources`, `getJiraProjectIssueTypesMetadata`, `getVisibleJiraProjects`) ARE allowed for context gathering and the Phase 5.5 preservation gate.
76
+ Bypassing `lisa:tracker-write` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. This is the most common failure mode this skill has had — calling `createJiraIssue` directly is a regression, not an optimization. The Atlassian read tools (`getJiraIssue`, `searchJiraIssuesUsingJql`, `getJiraIssueRemoteIssueLinks`, `getAccessibleAtlassianResources`, `getJiraProjectIssueTypesMetadata`, `getVisibleJiraProjects`) ARE allowed for context gathering and the Phase 5.5 preservation gate.
77
77
 
78
78
  ## Input
79
79
 
@@ -160,9 +160,9 @@ Walkthrough findings are attached to the originating Notion PRD as a comment ("C
160
160
 
161
161
  ### Phase 3: Create Epics
162
162
 
163
- > **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:jira-write-ticket` in this phase. Instead, draft the epic spec (summary, description_body, artifacts) and validate it with `lisa:jira-validate-ticket --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.
163
+ > **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.
164
164
 
165
- For each PRD epic, **invoke the `lisa:jira-write-ticket` skill** (do not call `createJiraIssue` directly). Pass it everything it needs to enforce its quality gates:
165
+ 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:
166
166
 
167
167
  - `project_key`: from `JIRA_PROJECT` config
168
168
  - `issue_type`: `Epic`
@@ -175,14 +175,14 @@ For each PRD epic, **invoke the `lisa:jira-write-ticket` skill** (do not call `c
175
175
  - Blockers and open questions
176
176
  - Dependencies on other epics or PRDs
177
177
  - A **Source Artifacts** section listing every artifact extracted in Phase 1.5 (grouped by domain)
178
- - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub, and anyone working on the epic or its descendants must be able to reach the full set from one place. No filtering at the epic level. `lisa:jira-write-ticket` Phase 4c attaches them as remote links.
178
+ - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub, and anyone working on the epic or its descendants must be able to reach the full set from one place. No filtering at the epic level. `lisa:tracker-write` Phase 4c attaches them as remote links.
179
179
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
180
180
 
181
181
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
182
182
 
183
183
  ### Phase 4: Create Stories
184
184
 
185
- > **Mode guard**: In `dry_run: true` mode, do not invoke `lisa:jira-write-ticket` in this phase. Instead, draft each story spec and validate it with `lisa:jira-validate-ticket --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.
185
+ > **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.
186
186
 
187
187
  For each Epic, plan two kinds of stories:
188
188
  - **One "X.0 Setup" story** for data model and infrastructure prerequisites (new entities, migrations, new fields, infrastructure like S3 buckets or SQS queues)
@@ -193,24 +193,24 @@ For each Epic, plan two kinds of stories:
193
193
  - "Squad Planning" -> `[SP-1.1]`
194
194
  - Use your judgment for other PRDs
195
195
 
196
- For each story, **invoke `lisa:jira-write-ticket`** with:
196
+ For each story, **invoke `lisa:tracker-write`** with:
197
197
 
198
198
  - `project_key`: from `JIRA_PROJECT` config
199
199
  - `issue_type`: `Story`
200
- - `epic_parent`: the Epic key captured in Phase 3 (mandatory — `lisa:jira-write-ticket` rejects non-bug, non-epic tickets without an epic parent)
200
+ - `epic_parent`: the Epic key captured in Phase 3 (mandatory — `lisa:tracker-write` rejects non-bug, non-epic tickets without an epic parent)
201
201
  - `summary`: prefixed per the naming convention above
202
202
  - `description_body`: a draft of the 3-audience description containing:
203
203
  - **Context / Business Value**: the user story statement from the PRD
204
204
  - **Technical Approach**: notes from engineering comments and Phase 2 codebase research
205
- - **Acceptance Criteria** (Gherkin) derived from the functional requirements — `lisa:jira-write-ticket` will reject prose-only acceptance criteria
205
+ - **Acceptance Criteria** (Gherkin) derived from the functional requirements — `lisa:tracker-write` will reject prose-only acceptance criteria
206
206
  - Blockers with recommendation + alternatives (if any), under `## Open Questions`
207
207
  - A **Source Artifacts** section listing the artifacts inherited from the epic that match this story's scope (see propagation rules below)
208
- - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below — `lisa:jira-write-ticket` Phase 4c attaches them as remote links
208
+ - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below — `lisa:tracker-write` Phase 4c attaches them as remote links
209
209
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
210
210
 
211
211
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
212
212
 
213
- **Inherit domain-matching artifacts as story remote links**. For each story, the artifact set passed to `lisa:jira-write-ticket` should be the Phase 1.5 artifacts whose domain matches the story's scope:
213
+ **Inherit domain-matching artifacts as story remote links**. For each story, the artifact set passed to `lisa:tracker-write` should be the Phase 1.5 artifacts whose domain matches the story's scope:
214
214
 
215
215
  | Story type | Inherits domains |
216
216
  |------------|------------------|
@@ -223,10 +223,10 @@ When classification is ambiguous, err on the side of inclusion — a developer c
223
223
 
224
224
  ### Phase 5: Create Sub-tasks
225
225
 
226
- Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:jira-write-ticket` for each sub-task — no agent may call `createJiraIssue` directly.** This is non-negotiable; see the Agent Prompt Template at the bottom of this skill for the exact instructions to pass.
226
+ 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.** This is non-negotiable; see the Agent Prompt Template at the bottom of this skill for the exact instructions to pass.
227
227
 
228
228
  Each sub-task MUST:
229
- 1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`. `lisa:jira-write-ticket` enforces single-repo scope on Sub-task; cross-repo sub-tasks will be rejected and must be split before delegation.
229
+ 1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`. `lisa:tracker-write` enforces single-repo scope on Sub-task; cross-repo sub-tasks will be rejected and must be split before delegation.
230
230
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
231
231
 
232
232
  **Verification plan examples by stack:**
@@ -234,11 +234,11 @@ Each sub-task MUST:
234
234
  - **Frontend web**: Playwright browser tests (login with test user, navigate, interact, screenshot)
235
235
  - **Infrastructure**: `cdk synth` / `terraform plan` verification, CLI checks after deploy
236
236
 
237
- Use the test user credentials from config for all verification plans. The credentials are passed to `lisa:jira-write-ticket` as the sign-in account so it can record them in the description per its own rules.
237
+ Use the test user credentials from config for all verification plans. The credentials are passed to `lisa:tracker-write` as the sign-in account so it can record them in the description per its own rules.
238
238
 
239
- For each sub-task, the spawned agent invokes `lisa:jira-write-ticket` with `issue_type: "Sub-task"` and `parent` set to the Story key. The Story key is the parent — the epic relationship is inherited transitively.
239
+ For each sub-task, the spawned agent invokes `lisa:tracker-write` with `issue_type: "Sub-task"` and `parent` set to the Story key. The Story key is the parent — the epic relationship is inherited transitively.
240
240
 
241
- Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task — that creates noise. The only exception is when a sub-task depends on an artifact that the parent story doesn't (e.g., a sub-task spec'd from a specific Figma frame that the broader story doesn't cite) — in that case, pass the specific artifact in the `artifacts` parameter to `lisa:jira-write-ticket`.
241
+ Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task — that creates noise. The only exception is when a sub-task depends on an artifact that the parent story doesn't (e.g., a sub-task spec'd from a specific Figma frame that the broader story doesn't cite) — in that case, pass the specific artifact in the `artifacts` parameter to `lisa:tracker-write`.
242
242
 
243
243
  ### Phase 5.5: Artifact Preservation Gate (mandatory)
244
244
 
@@ -246,9 +246,9 @@ Run the preservation gate defined in `lisa:jira-source-artifacts` §8 against th
246
246
 
247
247
  To run the gate, this skill must:
248
248
 
249
- 1. Pull the remote links of every epic and story created in this run via `mcp__atlassian__getJiraIssueRemoteIssueLinks`.
249
+ 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)`.
250
250
  2. Apply the §8 preservation matrix and verdict rules.
251
- 3. If the gate fails: list each dropped/misrouted artifact (domain, title, source page, why it was dropped) and either re-attach via `lisa:jira-write-ticket` (UPDATE mode) or stop and ask the human. Never silently proceed past a gate failure.
251
+ 3. If the gate fails: list each dropped/misrouted artifact (domain, title, source page, why it was dropped) and either re-attach via `lisa:tracker-write` (UPDATE mode) or stop and ask the human. Never silently proceed past a gate failure.
252
252
  4. If the gate passes: print the matrix compactly and proceed to Phase 6.
253
253
 
254
254
  This gate is not optional. Skipping it is the failure mode the architecture exists to prevent.
@@ -287,13 +287,13 @@ When delegating to agents, provide this context. **The "MUST invoke jira-write-t
287
287
  ```text
288
288
  Create JIRA sub-tasks in the [PROJECT] project at [CLOUD_ID].
289
289
 
290
- CRITICAL: For each sub-task, invoke the `lisa:jira-write-ticket` skill via the Skill tool.
291
- Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:jira-write-ticket` skill
290
+ CRITICAL: For each sub-task, invoke the `lisa:tracker-write` skill via the Skill tool.
291
+ Do NOT call `mcp__atlassian__createJiraIssue` directly. The `lisa:tracker-write` skill
292
292
  enforces required quality gates (Gherkin acceptance criteria, 3-audience description,
293
293
  single-repo scope, sign-in/environment fields, post-create verification). Bypassing it
294
294
  produces broken tickets that downstream skills (triage, journey, evidence) cannot use.
295
295
 
296
- For each sub-task, invoke `lisa:jira-write-ticket` with:
296
+ For each sub-task, invoke `lisa:tracker-write` with:
297
297
  - issue_type: "Sub-task"
298
298
  - parent: the parent story key
299
299
  - project_key: [PROJECT]
@@ -309,9 +309,9 @@ For each sub-task, invoke `lisa:jira-write-ticket` with:
309
309
  Each sub-task must:
310
310
  1. Be scoped to ONE repo only — repo named in brackets in the summary
311
311
  2. Include the Empirical Verification Plan in the description
312
- 3. Be created via `lisa:jira-write-ticket`, not via direct MCP calls
312
+ 3. Be created via `lisa:tracker-write`, not via direct MCP calls
313
313
 
314
- If `lisa:jira-write-ticket` rejects a sub-task (cross-repo scope, missing Gherkin, missing
314
+ If `lisa:tracker-write` rejects a sub-task (cross-repo scope, missing Gherkin, missing
315
315
  sign-in, etc.), fix the input and re-invoke. Do NOT fall back to a direct
316
316
  `createJiraIssue` call to bypass the gate.
317
317
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: plan
3
- description: "Decompose a single PRD or specification into ordered work items in the configured tracker. Vendor-agnostic — the source can be a Notion PRD URL, a Confluence PRD URL, a Linear project URL, an existing JIRA epic key, a markdown file, or a free-form description; the destination tracker is whatever the project is configured to use (JIRA today; GitHub Issues is pluggable). Single-PRD mode only — for batch scanning of all Ready PRDs in a queue, use the lisa:intake skill."
3
+ description: "Decompose a single PRD or specification into ordered work items in the configured tracker. Vendor-agnostic — the source can be a Notion PRD URL, a Confluence PRD URL, a Linear project URL, a GitHub Issue URL, an existing JIRA epic key, a markdown file, or a free-form description; the destination tracker is whatever the project is configured to use via `.lisa.config.json` `tracker` (JIRA or GitHub Issues). Single-PRD mode only — for batch scanning of all Ready PRDs in a queue, use the lisa:intake skill."
4
4
  allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
5
5
  ---
6
6
 
@@ -20,14 +20,16 @@ Detect the input type from `$ARGUMENTS` and route to the appropriate source skil
20
20
 
21
21
  | If `$ARGUMENTS` is... | Hand off to |
22
22
  |------------------------|-------------|
23
- | A Notion **page** URL or page ID (single PRD) | `lisa:notion-to-jira` (with the PRD URL; runs the full pipeline: extract artifacts → walk live product → validate → write tickets → coverage audit) |
23
+ | A Notion **page** URL or page ID (single PRD) | `lisa:notion-to-tracker` (with the PRD URL; runs the full pipeline: extract artifacts → walk live product → validate → write tickets → coverage audit) |
24
24
  | A Notion **database** URL or database ID | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a database. |
25
- | A Confluence **page** URL containing `/wiki/spaces/<KEY>/pages/<ID>/...` (single PRD) | `lisa:confluence-to-jira` (with the PRD URL; same full pipeline as the Notion path) |
25
+ | A Confluence **page** URL containing `/wiki/spaces/<KEY>/pages/<ID>/...` (single PRD) | `lisa:confluence-to-tracker` (with the PRD URL; same full pipeline as the Notion path) |
26
26
  | A Confluence **space** URL (`/wiki/spaces/<KEY>` with no `/pages/...`) | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a space. |
27
- | A Linear **project** URL (`https://linear.app/<workspace>/project/<slug>-<id>`) | `lisa:linear-to-jira` (with the project URL; same full pipeline as the Notion / Confluence paths). The Linear project's description, attached documents, and sub-issues form the PRD body. |
27
+ | A Linear **project** URL (`https://linear.app/<workspace>/project/<slug>-<id>`) | `lisa:linear-to-tracker` (with the project URL; same full pipeline as the Notion / Confluence paths). The Linear project's description, attached documents, and sub-issues form the PRD body. |
28
28
  | A Linear **workspace** URL (`https://linear.app/<workspace>` with no `/project/...`) or **team** URL | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a workspace or team. |
29
29
  | A JIRA ticket ID/URL of an Epic (existing epic *is* the spec) | `lisa:jira-agent` (read epic, decompose into stories/sub-tasks) |
30
- | A GitHub Issues URL or key | Not yet implemented. Stop and tell the user the adapter doesn't exist yet the architecture supports it, but no `github-prd-source` skill has been built. Don't fall back. |
30
+ | A GitHub **issue** URL (`https://github.com/<org>/<repo>/issues/<number>`) or `<org>/<repo>#<number>` token (single PRD) | `lisa:github-to-tracker` (with the issue ref; runs the full pipeline: extract artifacts walk live product validate write tickets coverage audit). The destination tracker is read from `.lisa.config.json` `tracker`. |
31
+ | A GitHub **repository** URL or `<org>/<repo>` token (no issue number) | Stop and report — single-PRD mode only. Direct the caller to `lisa:intake` for batch scanning of a GitHub repo. |
32
+ | A GitHub Issue URL of a build-side ticket (`type:Epic` / `type:Story` / etc., not `prd-*`-labelled) when `tracker = github` | `lisa:github-agent` (read issue, decompose into Sub-tasks). Symmetric counterpart to the JIRA-Epic branch above. |
31
33
  | A file path (`@plan.md`, `./spec.md`) | Read the file as the spec; run the Plan flow's core decomposition with the file content as input. |
32
34
  | A plain-text description | Use the description as the spec; run the Plan flow's core decomposition. |
33
35
 
@@ -39,4 +41,4 @@ Execute the **Plan** flow as defined in the `intent-routing` rule (loaded via th
39
41
 
40
42
  ## Output
41
43
 
42
- Work items in the configured tracker (JIRA today; GitHub Issues when the adapter exists) with acceptance criteria, dependencies, and recommended skills/agents per item. Ordered by dependency. If the specification cannot be decomposed without further clarification, stop and report what is missing.
44
+ Work items in the configured tracker (JIRA or GitHub Issues, per `.lisa.config.json` `tracker`) with acceptance criteria, dependencies, and recommended skills/agents per item. Ordered by dependency. If the specification cannot be decomposed without further clarification, stop and report what is missing.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: prd-ticket-coverage
3
- description: "Verifies that every requirement in a PRD (Notion, Confluence, or Linear) is covered by at least one created JIRA ticket — no silent drops. Parses the PRD into atomic items (goals, user stories, functional/non-functional requirements, acceptance criteria, important notes), maps each to the created tickets, and produces a coverage matrix and verdict (COMPLETE / COMPLETE_WITH_SCOPE_CREEP / GAPS_FOUND / NO_TICKETS_FOUND). Used by notion-prd-intake / confluence-prd-intake / linear-prd-intake post-write to gate the Ticketed transition; can also be invoked standalone for after-the-fact audits."
4
- allowed-tools: ["Skill", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources", "mcp__linear-server__get_project", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__list_comments"]
3
+ description: "Verifies that every requirement in a PRD (Notion, Confluence, Linear, or GitHub Issues) is covered by at least one created destination ticket (JIRA or GitHub Issues) — no silent drops. Parses the PRD into atomic items (goals, user stories, functional/non-functional requirements, acceptance criteria, important notes), maps each to the created tickets, and produces a coverage matrix and verdict (COMPLETE / COMPLETE_WITH_SCOPE_CREEP / GAPS_FOUND / NO_TICKETS_FOUND). Used by notion-prd-intake / confluence-prd-intake / linear-prd-intake / github-prd-intake post-write to gate the Ticketed transition; can also be invoked standalone for after-the-fact audits."
4
+ allowed-tools: ["Skill", "Bash", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources", "mcp__linear-server__get_project", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__list_comments"]
5
5
  ---
6
6
 
7
7
  # PRD Ticket Coverage Audit: $ARGUMENTS
@@ -11,15 +11,21 @@ allowed-tools: ["Skill", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_
11
11
  1. A PRD URL alone — auto-discover created tickets via the PRD's epic remote link.
12
12
  2. A PRD URL plus an explicit list of ticket keys — `<PRD URL> tickets=[KEY-1,KEY-2,...]`. Use this when called from `lisa:notion-prd-intake` or `lisa:confluence-prd-intake` (which know the keys they just created).
13
13
 
14
- The PRD URL can be a **Notion page URL**, a **Confluence page URL**, or a **Linear project URL**. Detect the vendor from the host:
14
+ The PRD URL can be a **Notion page URL**, a **Confluence page URL**, a **Linear project URL**, or a **GitHub issue URL**. Detect the vendor from the host:
15
15
 
16
16
  - `notion.so` / `notion.site` → Notion. Fetch with `mcp__claude_ai_Notion__notion-fetch` (`include_discussions: true`) and `mcp__claude_ai_Notion__notion-get-comments`.
17
17
  - Atlassian Confluence host (e.g. `*.atlassian.net/wiki/...`) → Confluence. Fetch with `mcp__atlassian__getConfluencePage`, `mcp__atlassian__getConfluencePageDescendants` (for child epic pages), `mcp__atlassian__getConfluencePageFooterComments`, `mcp__atlassian__getConfluencePageInlineComments`, and `mcp__atlassian__getConfluenceCommentChildren` for nested replies.
18
18
  - `linear.app` host → Linear. Fetch with `mcp__linear-server__get_project` (capture description, labels, state, attached resources), `mcp__linear-server__list_documents({projectId})` + `mcp__linear-server__get_document` per attached document, `mcp__linear-server__list_issues({project})` for sub-issues that act as child epics / user stories, and `mcp__linear-server__list_comments({issueId})` per sub-issue for decisions and engineering notes. Comments do not exist on the project itself in the MCP surface — sub-issue comments are the substitute.
19
+ - `github.com` host → GitHub Issues. Fetch with the `gh` CLI (no GitHub MCP — Lisa uses the CLI exclusively for GitHub):
20
+ - `gh issue view <number> --repo <org>/<repo> --json number,title,body,labels,milestone,assignees,author,createdAt,comments,url` for the PRD body and comments.
21
+ - `gh api graphql` with the `subIssues` field for native sub-issue children (these stand in for child epic pages — see `lisa:github-read-issue` Phase 3 for the exact query).
22
+ - `gh issue view <child-num> --repo <org>/<repo> --json body,comments` per child sub-issue, recursively to depth 3.
19
23
 
20
- All three vendors produce the same downstream artifact-extraction and coverage-matrix logic — only the fetch surface differs. The rest of this skill is vendor-agnostic.
24
+ All four vendors produce the same downstream artifact-extraction and coverage-matrix logic — only the fetch surface differs. The rest of this skill is vendor-agnostic.
21
25
 
22
- Verify that every atomic item in the PRD is covered by at least one of the listed/discovered JIRA tickets. The output gates whether the PRD's lifecycle should remain at `Ticketed` (Notion `Status = Ticketed`, Confluence `prd-ticketed` label, Linear `prd-ticketed` project label) or revert to `Blocked`.
26
+ Verify that every atomic item in the PRD is covered by at least one of the listed/discovered destination tickets. The output gates whether the PRD's lifecycle should remain at `Ticketed` (Notion `Status = Ticketed`, Confluence / Linear / GitHub `prd-ticketed` label) or revert to `Blocked`.
27
+
28
+ The destination tickets are read via `lisa:tracker-read` (which dispatches to `lisa:jira-read-ticket` or `lisa:github-read-issue` per `.lisa.config.json` `tracker`) so this skill itself stays agnostic of which tracker hosts the work.
23
29
 
24
30
  ## Why this exists
25
31
 
@@ -36,16 +42,20 @@ Per-ticket gates (`lisa:jira-validate-ticket`) prove each created ticket is well
36
42
  - **Notion**: `notion-fetch` with `include_discussions: true`. Capture: title, body, child Epic pages, all comment threads.
37
43
  - **Confluence**: `getConfluencePage` (capture title, body, labels), `getConfluencePageFooterComments` + `getConfluencePageInlineComments` (capture all comments; walk replies via `getConfluenceCommentChildren` for any thread with children).
38
44
  - **Linear**: `get_project` (capture name, description, labels, state, attached resources). Capture sub-issues via `list_issues({project})` and per-issue comments via `list_comments({issueId})`.
39
- 3. If the PRD has child Epic sub-pages (a multi-epic PRD), fetch each in parallel:
45
+ - **GitHub**: `gh issue view --json` for the source PRD issue (title, body, labels, comments). Capture sub-issues via the GraphQL `subIssues` traversal.
46
+ 3. If the PRD has child Epic sub-pages / sub-issues (a multi-epic PRD), fetch each in parallel:
40
47
  - **Notion**: `notion-fetch` per child page with `include_discussions: true`.
41
48
  - **Confluence**: enumerate descendants via `getConfluencePageDescendants`, then `getConfluencePage` per child plus its comment streams.
42
49
  - **Linear**: enumerate attached documents via `list_documents({projectId})` and fetch each via `get_document`. Treat each document as an extra body source. Sub-issues themselves stand in for "child epic pages" — their descriptions and comments are already captured in step 2.
50
+ - **GitHub**: enumerate native sub-issues via `gh api graphql` (`subIssues` field), then `gh issue view <child-num> --json body,comments` per child. Recurse to depth 3.
43
51
  The audit walks the full PRD tree.
44
- 4. If `tickets=[...]` not provided, locate the JIRA epic by:
45
- - Looking for a JIRA URL in the PRD body, comments, or the PRD's most recent "Ticketed by Claude" comment posted by `lisa:notion-prd-intake` / `lisa:confluence-prd-intake` / `lisa:linear-prd-intake` (for Linear, this comment lives on the project's sentinel feedback issue).
46
- - Searching JIRA via `searchJiraIssuesUsingJql` for an epic whose summary or description references the PRD title or project ID.
52
+ 4. If `tickets=[...]` not provided, locate the destination Epic by:
53
+ - Looking for a destination URL in the PRD body, comments, or the PRD's most recent "Ticketed by Claude" comment posted by `lisa:notion-prd-intake` / `lisa:confluence-prd-intake` / `lisa:linear-prd-intake` / `lisa:github-prd-intake` (for Linear, this comment lives on the project's sentinel feedback issue; for the others, it lives on the PRD page / issue itself).
54
+ - Searching the destination tracker via `lisa:tracker-read` (or directly via `searchJiraIssuesUsingJql` / `gh issue list --search`) for an epic whose summary or description references the PRD title or project ID.
47
55
  - If no epic found, return verdict `NO_TICKETS_FOUND` with a clear remediation — coverage cannot be assessed without the ticket set.
48
- 5. Once the epic is known, fetch all child stories and sub-tasks via JQL: `"Epic Link" = <EPIC-KEY>` and recursively for sub-tasks.
56
+ 5. Once the epic is known, fetch all child stories and sub-tasks:
57
+ - **JIRA destination**: JQL `"Epic Link" = <EPIC-KEY>` and recursively for sub-tasks.
58
+ - **GitHub destination**: `gh api graphql` `subIssues` traversal of the Epic, recursively for sub-tasks.
49
59
 
50
60
  ### Phase 2 — Extract atomic PRD items
51
61
 
@@ -147,7 +157,7 @@ Atomic PRD items extracted: <n>
147
157
  ### Scope-creep count: <n>
148
158
  ```
149
159
 
150
- `prd_anchor` and `prd_section` are built the same way as in `lisa:notion-to-jira` / `lisa:confluence-to-jira` / `lisa:linear-to-jira`. For Notion, `prd_anchor` is the `selection_with_ellipsis` start/end snippet; for Confluence, it's the inline-comment selection text accepted by `createConfluenceInlineComment`; for Linear, it's a sub-issue identifier (e.g. `LIN-123`) when the gap maps to a specific issue, otherwise `null` (the caller posts unanchored Linear gaps on the project's sentinel feedback issue). The downstream caller knows which vendor it's writing to and uses the right API; this skill just emits the anchor that vendor expects.
160
+ `prd_anchor` and `prd_section` are built the same way as in `lisa:notion-to-tracker` / `lisa:confluence-to-tracker` / `lisa:linear-to-tracker` / `lisa:github-to-tracker`. For Notion, `prd_anchor` is the `selection_with_ellipsis` start/end snippet; for Confluence, it's the inline-comment selection text accepted by `createConfluenceInlineComment`; for Linear, it's a sub-issue identifier (e.g. `LIN-123`) when the gap maps to a specific issue, otherwise `null` (the caller posts unanchored Linear gaps on the project's sentinel feedback issue); for GitHub, it's the section heading from the PRD issue body when the gap traces to a specific section, otherwise `null` (the caller approximates inline anchoring by quoting a body excerpt at the top of the comment). The downstream caller knows which vendor it's writing to and uses the right API; this skill just emits the anchor that vendor expects.
151
161
 
152
162
  `category` is drawn from the same fixed taxonomy used by `lisa:jira-validate-ticket` so downstream callers can apply one consistent comment-formatting policy. Most coverage gaps map to `scope` (item not represented in any ticket) or `product-clarity` (item too vague to map). Use `acceptance-criteria` for missing pass/fail conditions and `design-ux` for missing visuals.
153
163
 
@@ -157,4 +167,4 @@ Atomic PRD items extracted: <n>
157
167
  - Never silently drop a PRD item from extraction. If an item is ambiguous about whether it's scope, include it in extraction with type `ambiguous` and let the matching phase resolve it. The point of the audit is to catch silent drops; the audit can't have its own.
158
168
  - Be explicit about confidence in matches — the matrix is for humans to skim; vague matches help no one. If a match is rule-3 ("scope inheritance"), say so.
159
169
  - Scope creep is INFORMATIONAL. It is normal for an agent to add infra tickets (`X.0 Setup`) the PRD doesn't explicitly enumerate. Only flag scope creep when the ticket genuinely doesn't trace to PRD content AND isn't standard scaffolding.
160
- - The `GAPS_FOUND` verdict is the gate. The caller (e.g. `lisa:notion-prd-intake`, `lisa:confluence-prd-intake`, `lisa:linear-prd-intake`) uses it to decide whether to revert the lifecycle from `Ticketed` to `Blocked`.
170
+ - The `GAPS_FOUND` verdict is the gate. The caller (e.g. `lisa:notion-prd-intake`, `lisa:confluence-prd-intake`, `lisa:linear-prd-intake`, `lisa:github-prd-intake`) uses it to decide whether to revert the lifecycle from `Ticketed` to `Blocked`.