@codyswann/lisa 2.10.1 → 2.11.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 (117) 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 +1 -1
  4. package/plugins/lisa/agents/github-prd-intake.md +2 -2
  5. package/plugins/lisa/agents/linear-agent.md +128 -0
  6. package/plugins/lisa/agents/linear-build-intake.md +62 -0
  7. package/plugins/lisa/agents/linear-prd-intake.md +2 -2
  8. package/plugins/lisa/agents/notion-prd-intake.md +1 -1
  9. package/plugins/lisa/commands/plan.md +1 -1
  10. package/plugins/lisa/rules/config-resolution.md +187 -0
  11. package/plugins/lisa/rules/intent-routing.md +13 -13
  12. package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +9 -4
  13. package/plugins/lisa/skills/confluence-to-tracker/SKILL.md +23 -16
  14. package/plugins/lisa/skills/github-create/SKILL.md +4 -4
  15. package/plugins/lisa/skills/github-prd-intake/SKILL.md +8 -3
  16. package/plugins/lisa/skills/github-to-tracker/SKILL.md +22 -13
  17. package/plugins/lisa/skills/github-write-issue/SKILL.md +2 -2
  18. package/plugins/lisa/skills/implement/SKILL.md +1 -1
  19. package/plugins/lisa/skills/intake/SKILL.md +3 -3
  20. package/plugins/lisa/skills/jira-build-intake/SKILL.md +6 -3
  21. package/plugins/lisa/skills/jira-create/SKILL.md +4 -4
  22. package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +1 -1
  23. package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
  24. package/plugins/lisa/skills/linear-add-journey/SKILL.md +104 -0
  25. package/plugins/lisa/skills/linear-build-intake/SKILL.md +160 -0
  26. package/plugins/lisa/skills/linear-create/SKILL.md +146 -0
  27. package/plugins/lisa/skills/linear-evidence/SKILL.md +86 -0
  28. package/plugins/lisa/skills/linear-journey/SKILL.md +134 -0
  29. package/plugins/lisa/skills/linear-prd-intake/SKILL.md +11 -6
  30. package/plugins/lisa/skills/linear-read-issue/SKILL.md +200 -0
  31. package/plugins/lisa/skills/linear-sync/SKILL.md +89 -0
  32. package/plugins/lisa/skills/linear-to-tracker/SKILL.md +20 -13
  33. package/plugins/lisa/skills/linear-validate-issue/SKILL.md +270 -0
  34. package/plugins/lisa/skills/linear-verify/SKILL.md +51 -0
  35. package/plugins/lisa/skills/linear-write-issue/SKILL.md +282 -0
  36. package/plugins/lisa/skills/notion-prd-intake/SKILL.md +12 -6
  37. package/plugins/lisa/skills/notion-to-tracker/SKILL.md +21 -15
  38. package/plugins/lisa/skills/plan/SKILL.md +3 -2
  39. package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +1 -1
  40. package/plugins/lisa/skills/product-walkthrough/SKILL.md +2 -2
  41. package/plugins/lisa/skills/spec-conformance/SKILL.md +1 -2
  42. package/plugins/lisa/skills/ticket-triage/SKILL.md +1 -1
  43. package/plugins/lisa/skills/tracker-add-journey/SKILL.md +5 -3
  44. package/plugins/lisa/skills/tracker-build-intake/SKILL.md +5 -3
  45. package/plugins/lisa/skills/tracker-create/SKILL.md +5 -3
  46. package/plugins/lisa/skills/tracker-evidence/SKILL.md +5 -3
  47. package/plugins/lisa/skills/tracker-journey/SKILL.md +5 -3
  48. package/plugins/lisa/skills/tracker-read/SKILL.md +6 -4
  49. package/plugins/lisa/skills/{jira-source-artifacts → tracker-source-artifacts}/SKILL.md +5 -5
  50. package/plugins/lisa/skills/tracker-sync/SKILL.md +6 -4
  51. package/plugins/lisa/skills/tracker-validate/SKILL.md +8 -7
  52. package/plugins/lisa/skills/tracker-verify/SKILL.md +4 -2
  53. package/plugins/lisa/skills/tracker-write/SKILL.md +12 -10
  54. package/plugins/lisa/skills/verify/SKILL.md +1 -1
  55. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-expo/skills/jira-create/SKILL.md +4 -4
  58. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-rails/skills/jira-create/SKILL.md +4 -4
  61. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  62. package/plugins/src/base/agents/confluence-prd-intake.md +1 -1
  63. package/plugins/src/base/agents/github-prd-intake.md +2 -2
  64. package/plugins/src/base/agents/linear-agent.md +128 -0
  65. package/plugins/src/base/agents/linear-build-intake.md +62 -0
  66. package/plugins/src/base/agents/linear-prd-intake.md +2 -2
  67. package/plugins/src/base/agents/notion-prd-intake.md +1 -1
  68. package/plugins/src/base/commands/plan.md +1 -1
  69. package/plugins/src/base/rules/config-resolution.md +187 -0
  70. package/plugins/src/base/rules/intent-routing.md +13 -13
  71. package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +9 -4
  72. package/plugins/src/base/skills/confluence-to-tracker/SKILL.md +23 -16
  73. package/plugins/src/base/skills/github-create/SKILL.md +4 -4
  74. package/plugins/src/base/skills/github-prd-intake/SKILL.md +8 -3
  75. package/plugins/src/base/skills/github-to-tracker/SKILL.md +22 -13
  76. package/plugins/src/base/skills/github-write-issue/SKILL.md +2 -2
  77. package/plugins/src/base/skills/implement/SKILL.md +1 -1
  78. package/plugins/src/base/skills/intake/SKILL.md +3 -3
  79. package/plugins/src/base/skills/jira-build-intake/SKILL.md +6 -3
  80. package/plugins/src/base/skills/jira-create/SKILL.md +4 -4
  81. package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +1 -1
  82. package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
  83. package/plugins/src/base/skills/linear-add-journey/SKILL.md +104 -0
  84. package/plugins/src/base/skills/linear-build-intake/SKILL.md +160 -0
  85. package/plugins/src/base/skills/linear-create/SKILL.md +146 -0
  86. package/plugins/src/base/skills/linear-evidence/SKILL.md +86 -0
  87. package/plugins/src/base/skills/linear-journey/SKILL.md +134 -0
  88. package/plugins/src/base/skills/linear-prd-intake/SKILL.md +11 -6
  89. package/plugins/src/base/skills/linear-read-issue/SKILL.md +200 -0
  90. package/plugins/src/base/skills/linear-sync/SKILL.md +89 -0
  91. package/plugins/src/base/skills/linear-to-tracker/SKILL.md +20 -13
  92. package/plugins/src/base/skills/linear-validate-issue/SKILL.md +270 -0
  93. package/plugins/src/base/skills/linear-verify/SKILL.md +51 -0
  94. package/plugins/src/base/skills/linear-write-issue/SKILL.md +282 -0
  95. package/plugins/src/base/skills/notion-prd-intake/SKILL.md +12 -6
  96. package/plugins/src/base/skills/notion-to-tracker/SKILL.md +21 -15
  97. package/plugins/src/base/skills/plan/SKILL.md +3 -2
  98. package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +1 -1
  99. package/plugins/src/base/skills/product-walkthrough/SKILL.md +2 -2
  100. package/plugins/src/base/skills/spec-conformance/SKILL.md +1 -2
  101. package/plugins/src/base/skills/ticket-triage/SKILL.md +1 -1
  102. package/plugins/src/base/skills/tracker-add-journey/SKILL.md +5 -3
  103. package/plugins/src/base/skills/tracker-build-intake/SKILL.md +5 -3
  104. package/plugins/src/base/skills/tracker-create/SKILL.md +5 -3
  105. package/plugins/src/base/skills/tracker-evidence/SKILL.md +5 -3
  106. package/plugins/src/base/skills/tracker-journey/SKILL.md +5 -3
  107. package/plugins/src/base/skills/tracker-read/SKILL.md +6 -4
  108. package/plugins/src/base/skills/{jira-source-artifacts → tracker-source-artifacts}/SKILL.md +5 -5
  109. package/plugins/src/base/skills/tracker-sync/SKILL.md +6 -4
  110. package/plugins/src/base/skills/tracker-validate/SKILL.md +8 -7
  111. package/plugins/src/base/skills/tracker-verify/SKILL.md +4 -2
  112. package/plugins/src/base/skills/tracker-write/SKILL.md +12 -10
  113. package/plugins/src/base/skills/verify/SKILL.md +1 -1
  114. package/plugins/src/expo/skills/jira-create/SKILL.md +4 -4
  115. package/plugins/src/rails/skills/jira-create/SKILL.md +4 -4
  116. package/plugins/lisa/rules/tracker-resolution.md +0 -76
  117. package/plugins/src/base/rules/tracker-resolution.md +0 -76
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: linear-verify
3
+ description: "Verifies a Linear work item meets organizational standards by fetching the live item and running it through lisa:linear-validate-issue. Catches anything dropped or reformatted on write — same gates as the pre-write check, but applied to what Linear actually stored. Read-only."
4
+ allowed-tools: ["Bash", "Skill", "mcp__linear-server__list_teams", "mcp__linear-server__get_issue", "mcp__linear-server__get_project", "mcp__linear-server__list_issue_labels", "mcp__linear-server__list_project_labels"]
5
+ ---
6
+
7
+ # Verify Linear Work Item: $ARGUMENTS
8
+
9
+ Fetch the live Linear work item and run it through `lisa:linear-validate-issue`. This catches any field that was dropped or reformatted between the pre-write spec and what Linear stored.
10
+
11
+ This skill is the destination of the `lisa:tracker-verify` shim when `tracker = "linear"`. Read-only — never writes.
12
+
13
+ ## Configuration
14
+
15
+ Reads `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.local` override).
16
+
17
+ ## Input
18
+
19
+ `$ARGUMENTS` is a Linear identifier:
20
+ - An Issue identifier (e.g. `ENG-123`)
21
+ - A Project URL or slug (e.g. `https://linear.app/<workspace>/project/<slug>-<id>`)
22
+
23
+ If `$ARGUMENTS` is not parseable, stop and report.
24
+
25
+ ## Phase 1 — Resolve Context
26
+
27
+ 1. Read `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.local` override).
28
+ 2. Resolve team ID via `mcp__linear-server__list_teams({query: <teamKey>})`.
29
+ 3. Determine entity type from the identifier shape:
30
+ - `<TEAM>-<n>` → Issue
31
+ - URL containing `/project/<slug>-<id>` → Project
32
+
33
+ ## Phase 2 — Fetch Live State
34
+
35
+ Call `mcp__linear-server__get_issue` (for Issues) or `mcp__linear-server__get_project` (for Projects). Capture every field, label, relation, comment, milestone, and project membership.
36
+
37
+ ## Phase 3 — Delegate to Validator
38
+
39
+ Pass the fetched item to `lisa:linear-validate-issue` (in identifier mode — let it derive the spec from the live state). The validator runs both Specification AND Feasibility gates against what Linear actually stored.
40
+
41
+ ## Phase 4 — Report
42
+
43
+ Return the validator's report verbatim — same structured format as `lisa:linear-validate-issue`. Callers (especially `lisa:linear-write-issue` Phase 7) parse the verdict to decide whether to declare success.
44
+
45
+ If the verdict is `FAIL`, the caller should fix the item and re-run verify. Never declare success on a `FAIL` verdict.
46
+
47
+ ## Rules
48
+
49
+ - Never write to Linear. Read-only.
50
+ - Never short-circuit the validator. Always run the full gate set.
51
+ - If `get_issue` / `get_project` returns an access error, surface it and exit — don't pretend the item is fine.
@@ -0,0 +1,282 @@
1
+ ---
2
+ name: linear-write-issue
3
+ description: "Creates or updates a Linear work item — Project (Epic), Issue (Story), or sub-Issue (Sub-task) — following organizational best practices. Polymorphic: dispatches internally on issue_type to save_project (Epic) or save_issue (Story / Sub-task). Enforces description quality (three audiences), Gherkin acceptance criteria, project-as-parent for Stories, parentId for Sub-tasks, explicit relationship discovery (blocks / is blocked by / relates to / duplicates), labels, components-as-labels, project milestones for fix versions, native priority and estimate fields, and Validation Journey. Rejects thin items — use this skill any time a Linear work item is created or significantly edited."
4
+ allowed-tools: ["Bash", "Skill", "mcp__linear-server__list_teams", "mcp__linear-server__get_team", "mcp__linear-server__list_projects", "mcp__linear-server__get_project", "mcp__linear-server__save_project", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__save_issue", "mcp__linear-server__list_issue_labels", "mcp__linear-server__create_issue_label", "mcp__linear-server__list_project_labels", "mcp__linear-server__list_comments", "mcp__linear-server__save_comment"]
5
+ ---
6
+
7
+ # Write Linear Work Item: $ARGUMENTS
8
+
9
+ Create or update a Linear work item — Project (for Epics), Issue (for Stories), or sub-Issue (for Sub-tasks) — with all required relationships, metadata, and quality gates. Every section below is mandatory. Thin items are rejected.
10
+
11
+ Repository name for scoped comments: `basename $(git rev-parse --show-toplevel)`.
12
+
13
+ ## Configuration
14
+
15
+ This skill reads configuration from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key). Required keys:
16
+
17
+ - `linear.workspace` — Linear workspace slug
18
+ - `linear.teamKey` — Linear team key (e.g. `ENG`); the team owns the destination items
19
+
20
+ If either is missing, stop and report — never invent values.
21
+
22
+ ## Polymorphic dispatch
23
+
24
+ Linear's data model maps Epic / Story / Sub-task to **different entity types**. This skill dispatches on `issue_type`:
25
+
26
+ | `issue_type` | Linear entity | MCP write tool | Parent field |
27
+ |--------------|---------------|----------------|--------------|
28
+ | `Epic` | **Project** | `mcp__linear-server__save_project` | (none — Projects are top-level within a team) |
29
+ | `Story` / `Task` / `Improvement` | **Issue** | `mcp__linear-server__save_issue` | `projectId` (the Epic Project) |
30
+ | `Sub-task` | **sub-Issue** | `mcp__linear-server__save_issue` | `parentId` (the Story Issue) |
31
+ | `Bug` | **Issue** | `mcp__linear-server__save_issue` | `projectId` if part of an Epic; else top-level |
32
+ | `Spike` | **Issue** | `mcp__linear-server__save_issue` | `projectId` if part of an Epic; else top-level |
33
+
34
+ Status workflow uses **labels** (`status:ready`, `status:in-progress`, `status:on-dev`, `status:done`) for portability across teams — Linear's per-team workflow state names vary, but labels are workspace-scoped and stable. Native Linear `state` is set to the team's default `Todo` state on create.
35
+
36
+ ## Phase 1 — Resolve Intent
37
+
38
+ Determine from `$ARGUMENTS` and context whether this is a CREATE or UPDATE:
39
+
40
+ - **CREATE**: no existing identifier provided.
41
+ - **UPDATE**: identifier provided (`<TEAM>-<n>` for Issue, project slug + short-id for Project) — call `/linear-read-issue <ref>` first to load the full current state. Never overwrite without reading.
42
+
43
+ Resolve the team ID for `linear.teamKey` via `mcp__linear-server__list_teams({query: <teamKey>})`. Cache it.
44
+
45
+ ## Phase 2 — Gather Required Inputs
46
+
47
+ Required fields (stop and ask if missing — never invent values):
48
+
49
+ | Field | Required For | Notes |
50
+ |-------|--------------|-------|
51
+ | `team_key` | CREATE | From `linear.teamKey` config; required for both Project and Issue creation |
52
+ | `issue_type` | CREATE | One of: Epic, Story, Task, Bug, Spike, Sub-task, Improvement |
53
+ | Summary | CREATE, UPDATE | One line, imperative voice, under 100 chars |
54
+ | Description | CREATE, UPDATE | Multi-section markdown — see Phase 3 |
55
+ | Project parent (for Story / Task / Bug / Spike / Improvement when part of an Epic) | non-Epic, non-Sub-task in Epic context | Linear Project ID — the Epic |
56
+ | Sub-task parent | Sub-task | Linear Issue ID — the Story |
57
+ | Priority | CREATE | Native Linear priority: 0=No priority, 1=Urgent, 2=High, 3=Medium, 4=Low |
58
+ | Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin — see Phase 3 |
59
+ | Validation Journey | Runtime-behavior changes | Delegate to `/linear-add-journey` |
60
+ | Target backend environment | Runtime-behavior changes | `dev` / `staging` / `prod`; recorded in description (Phase 3). Skip only for doc/config/type-only items. |
61
+ | Sign-in account / credentials | Items that touch authenticated surfaces | Name the account (or source — 1Password item, env var, seeded fixture) and role; recorded in description. Omit when sign-in is not required. |
62
+ | Single-repo scope | Bug, Task, Sub-task | These types MUST cover one repo only. If the work crosses repos, split it before creating. Epic / Spike / Story may span repos. |
63
+
64
+ Optional but recommended: assignee, estimate (story points), labels, project milestone (fix-version equivalent), cycle.
65
+
66
+ ## Phase 3 — Description Quality
67
+
68
+ Linear descriptions are markdown (NOT Jira wiki markup — no `h2.` headings, use `##` instead). The description MUST address three audiences. Reject and rewrite if any are missing.
69
+
70
+ ```markdown
71
+ ## Context / Business Value
72
+ [Why this matters. Stakeholder-facing. Concrete user impact or business outcome.
73
+ Link to the originating Slack thread, Notion doc, incident, or customer report.]
74
+
75
+ ## Technical Approach
76
+ [Developer-facing. Integration points, impacted modules, data model implications,
77
+ relevant tradeoffs. Not a full design doc — a pointer for someone picking it up.]
78
+
79
+ ## Acceptance Criteria
80
+ 1. Given <precondition>
81
+ When <action>
82
+ Then <observable outcome>
83
+ 2. Given <precondition>
84
+ When <action>
85
+ Then <observable outcome>
86
+
87
+ ## Out of Scope
88
+ [Explicit list of what this item does NOT cover. Forces scope discipline.]
89
+
90
+ ## Target Backend Environment
91
+ [Required when the item changes runtime behavior. One of: dev / staging / prod.
92
+ Skip section entirely for doc-only, config-only, or type-only items.]
93
+
94
+ ## Sign-in Required
95
+ [Include this section ONLY if the work touches authenticated surfaces.
96
+ Specify: the account/role to sign in as, where to get the credentials
97
+ (1Password item name, env var, seeded fixture), and any MFA/SSO notes.
98
+ Omit the section entirely when sign-in is not required.]
99
+
100
+ ## Repository
101
+ [Required for Bug / Task / Sub-task. Name the single repo this item covers.
102
+ If the work spans repos, this issue type is wrong — split into per-repo
103
+ Tasks/Sub-tasks under a parent Story or Epic.]
104
+
105
+ ## Validation Journey
106
+ [Delegate to /linear-add-journey if the item changes runtime behavior.
107
+ Skip only for doc-only, config-only, or type-only items.]
108
+ ```
109
+
110
+ Rules:
111
+ - Every acceptance criterion uses Given/When/Then. No vague "should work" language.
112
+ - Every criterion is independently verifiable (UI, API, data, or performance check).
113
+ - If the item is a Bug, include reproduction steps, expected vs. actual behavior, and environment.
114
+ - If the item is a Spike, include the question being answered and the definition of done (decision doc, prototype, or findings).
115
+ - If sign-in is required, the implementer must be able to sign in from the description alone — never assume they will guess the account or hunt for credentials.
116
+
117
+ ## Phase 4 — Relationship Discovery (Mandatory)
118
+
119
+ Before creating or updating, find candidate relationships. Do NOT skip — this is the step agents most often omit.
120
+
121
+ ### 4a. Project Parent (Epic-equivalent)
122
+
123
+ If the item is **not an Epic** and **not a top-level Bug/Spike**, it MUST have a parent context:
124
+
125
+ - **Story / Task / Improvement** → must have a `projectId` (the Epic Project) set.
126
+ - **Sub-task** → must have a `parentId` (the Story Issue) set.
127
+
128
+ If the parent is explicitly provided, use it. Otherwise:
129
+
130
+ 1. Search active Projects in the team:
131
+ ```text
132
+ mcp__linear-server__list_projects({team: <teamKey>, state: ["backlog", "planned", "started"]})
133
+ ```
134
+ Match on keywords from the summary and description.
135
+ 2. If no matching Project exists, stop and ask the human to create or pick one. Do NOT orphan the item.
136
+
137
+ ### 4b. Related Items
138
+
139
+ Relationship discovery is **mandatory** on every create and every update — never declare "no related work" without doing both searches below and recording their outcomes on the item.
140
+
141
+ **Search 1: local git history** (catches PRs / commits that touched the same area but were never linked):
142
+
143
+ ```bash
144
+ git log --all --oneline --grep="<keyword>"
145
+ git log --all --oneline -- <path-or-glob>
146
+ git log --since=90.days --oneline -- <path-or-glob>
147
+ ```
148
+
149
+ If the git search surfaces a PR or commit that relates to this work, capture the PR URL — it becomes a remote link (Phase 4c) and may also point to a sibling item worth linking.
150
+
151
+ **Search 2: Linear MCP** (catches open and recently-closed items):
152
+
153
+ ```text
154
+ # Open items in the same Project
155
+ mcp__linear-server__list_issues({project: <projectId>, state_type: ["unstarted", "started"]})
156
+
157
+ # Open items with overlapping keywords (workspace-wide)
158
+ mcp__linear-server__list_issues({query: "<keyword>", state_type: ["unstarted", "started"]})
159
+
160
+ # Items with shared labels
161
+ mcp__linear-server__list_issues({label: "<label>", updatedAt: ">-30d"})
162
+
163
+ # Recently closed items in the same Project
164
+ mcp__linear-server__list_issues({project: <projectId>, state_type: ["completed", "canceled"], updatedAt: ">-30d"})
165
+ ```
166
+
167
+ **Record the outcome.** Add a `## Relationship Search` subsection (or a comment if updating) listing the queries you ran and what they returned. If the searches yielded nothing, write that explicitly — "Searched git history for `<keywords>` and Linear for project=`X`, label=`Y`; no related work found." An item with zero relations and no documented search is rejected.
168
+
169
+ For each candidate, classify the relationship:
170
+
171
+ | Relation Type | When to Use |
172
+ |---------------|-------------|
173
+ | `blocks` | This item must ship before the linked item can proceed |
174
+ | `blocked_by` | The linked item must ship before this one can proceed |
175
+ | `relates_to` | Shared context, no ordering constraint |
176
+ | `duplicates` | This item already exists — close one as duplicate |
177
+
178
+ Linear native relations are set on the Issue via `save_issue`'s `relations` field (or via a paired `save_issue_relation` call if available in the MCP). For Project-level (Epic) relationships, capture them in the description under `## Related Projects` since Linear doesn't model relations between Projects natively.
179
+
180
+ ### 4c. Remote Links
181
+
182
+ Identify and attach (Linear stores attachments / links on the Issue or in description body):
183
+
184
+ - GitHub PRs, branches, or commits related to this work
185
+ - Confluence pages (design docs, RFCs, runbooks)
186
+ - Dashboards (Grafana, Datadog, Sentry issue)
187
+ - Incident items (PagerDuty, Statuspage)
188
+ - **Source artifacts from the originating PRD / parent Project**: classify and inherit per the rules in `lisa:tracker-source-artifacts` (invoke that skill if you haven't loaded the rules in this session). Enumerate the parent Project's links and inherit the ones whose domain matches this item's scope (UI → `ui-design` + `ux-flow`; backend → `data`; infra → `ops`; always inherit `reference`). Never assume a developer will walk up to the Project to find design context — attach it here.
189
+
190
+ If the item was generated from a PRD (by `lisa:notion-to-tracker` or similar) and the parent Project has no source artifacts, surface that as a smell and ask whether artifacts were missed during extraction before proceeding.
191
+
192
+ ### 4d. Source Precedence (must appear on the item)
193
+
194
+ Source precedence rules and cross-axis conflict handling are defined in `lisa:tracker-source-artifacts` §3 and §4. When an item carries both design artifacts and a description, record the precedence explicitly in the description (under Technical Approach or a dedicated `## Source Precedence` subsection) so the implementer doesn't silently reconcile conflicts. Cross-axis conflicts go under `## Open Questions` as BLOCKER items.
195
+
196
+ For UI-touching items, include the existing-component reuse expectation per `lisa:tracker-source-artifacts` §7.
197
+
198
+ ### 4e. Live Product Walkthrough Findings (UI-touching items)
199
+
200
+ If the item modifies an existing user-facing surface, a `lisa:product-walkthrough` should already have been run upstream. Inherit its findings under a `## Current Product` subsection in the description so the implementer sees what's shipped today before changing it. If the upstream skill skipped the walkthrough but this item clearly modifies an existing surface, invoke `lisa:product-walkthrough` here before proceeding.
201
+
202
+ ## Phase 5 — Set Metadata
203
+
204
+ Before create/update, verify each field is populated where applicable:
205
+
206
+ - **Labels**: include `status:ready` for new items; component labels (`component:<name>`); status / priority labels are NOT redundant with native fields — labels exist for portability and downstream queries.
207
+ - **Native priority field**: 0–4 per Linear's scale; explicit, not "unset".
208
+ - **Native estimate**: per Linear's team-configured estimate scale (often 0–8 Fibonacci); skip for Epic / Spike.
209
+ - **ProjectMilestone**: when the team uses dated milestones, set the milestone on the Project (Epic) or on the Issue (when an Issue belongs to a milestone).
210
+ - **Cycle**: only if actively in a cycle.
211
+ - **Assignee**: leave unset if unknown rather than auto-assigning.
212
+
213
+ For Bug / Task / Sub-task, ensure the summary is prefixed with `[<repo-name>]`.
214
+
215
+ ## Phase 5.5 — Validate (Pre-write Gate)
216
+
217
+ Before any write, invoke `lisa:linear-validate-issue` with the full proposed spec assembled from Phases 2 / 3 / 4 / 5. Pass it as a YAML block per the `lisa:linear-validate-issue` schema, including `runtime_behavior_change`, `authenticated_surface`, and `artifacts_attached` flags so the right gates run.
218
+
219
+ The validator is the **single source of truth** for what makes a valid Linear work item. The same gates are used by `lisa:linear-to-tracker` dry-run, by `lisa:linear-verify` post-write, and here. Do not re-implement gate logic in this skill.
220
+
221
+ If the validator reports `FAIL`:
222
+ - Surface the failure list and the per-gate remediation to the user.
223
+ - Do NOT proceed to Phase 6. Fix the spec (or stop and ask the human) and re-run validation.
224
+ - Never call `mcp__linear-server__save_project` or `mcp__linear-server__save_issue` while the validator's verdict is FAIL.
225
+
226
+ If the validator reports `PASS`, continue to Phase 6.
227
+
228
+ ## Phase 6 — Create or Update
229
+
230
+ ### CREATE — Epic (Project)
231
+
232
+ 1. Resolve any required Project labels (`prd-ticketed`, etc.) via `mcp__linear-server__list_project_labels` (create via `create_project_label` if missing).
233
+ 2. Call `mcp__linear-server__save_project` with: `name` (summary), `description` (markdown), `teamIds: [<teamId>]`, `labelIds`, `priority` (Linear Project priority is also 0–4), `state` (default `backlog`), milestones if dated.
234
+ 3. Capture the returned Project ID and slug — Phase 4 children need these.
235
+ 4. If the Project is the parent for downstream Stories, record the ID for `lisa:linear-to-tracker` Phase 4 to use.
236
+
237
+ ### CREATE — Story / Task / Bug / Spike / Improvement (Issue with projectId)
238
+
239
+ 1. Resolve any required Issue labels (`status:ready`, `component:<name>`, `prd-intake-feedback` only if this is a sentinel issue, etc.) via `mcp__linear-server__list_issue_labels` (create via `create_issue_label` if missing).
240
+ 2. Call `mcp__linear-server__save_issue` with: `team` (teamId), `title` (summary), `description` (markdown), `projectId` (the Epic Project), `priority` (0–4), `estimate`, `labelIds`, `assignee` if known.
241
+ 3. Capture the returned identifier (e.g. `ENG-123`) — Phase 4 sub-tasks need it as `parentId`.
242
+ 4. Add relationships from Phase 4b via `save_issue` (relations field) or paired relation calls.
243
+ 5. If the item changes runtime behavior, invoke `lisa:linear-add-journey` to append the Validation Journey section.
244
+
245
+ ### CREATE — Sub-task (Issue with parentId)
246
+
247
+ 1. Resolve labels as above.
248
+ 2. Call `mcp__linear-server__save_issue` with: `team` (teamId), `title` (`[<repo>] <summary>` prefix is mandatory), `description` (markdown), `parentId` (the Story Issue ID), `projectId` (inherit from parent), `priority`, `estimate`, `labelIds`.
249
+ 3. Capture identifier.
250
+ 4. Add relationships via Phase 4b.
251
+
252
+ ### UPDATE
253
+
254
+ 1. Call `mcp__linear-server__save_project` or `mcp__linear-server__save_issue` with **only the fields being changed**. Do NOT resend fields that weren't in the change set — Linear treats the call as a full overwrite of the listed fields.
255
+ 2. Preserve description sections you are not editing — re-read via `/linear-read-issue` first.
256
+
257
+ ## Phase 7 — Verify
258
+
259
+ Call the `lisa:linear-verify` skill on the resulting item. `lisa:linear-verify` fetches the live item and runs `lisa:linear-validate-issue` against it — same gates as Phase 5.5, but applied to what Linear actually stored. If it reports failures, fix them before returning. Do not report success on an item that fails verify.
260
+
261
+ ## Phase 8 — Announce
262
+
263
+ Post a creation comment via `mcp__linear-server__save_comment` (on the Issue, or on a sentinel issue under the Project for Epic-level announcements) with:
264
+
265
+ - `[<repo>]` prefix if the item is repo-scoped
266
+ - Who the item is assigned to (if known)
267
+ - The relationships that were set (`blocks`, `blocked_by`, `relates_to`) with Linear identifiers
268
+ - Any remote PRs attached
269
+
270
+ Skip this step only on UPDATE when no material change was made.
271
+
272
+ ## Rules
273
+
274
+ - Never create a non-Epic, non-top-level item without a parent context (Project for Stories, parentId for Sub-tasks).
275
+ - Never skip relationship discovery — both the git history search AND the Linear MCP search must run, and their outcomes must be recorded on the item. "None found" is acceptable only when it's documented.
276
+ - Never create a Bug, Task, or Sub-task that spans multiple repos. Split it before creating.
277
+ - Never include a runtime-behavior item without a target backend environment, and never include an authenticated-surface item without sign-in credentials in the description.
278
+ - Never invent custom field values. If the team requires a field you don't have, stop and ask.
279
+ - Never overwrite a description without reading the current version first.
280
+ - All Linear writes go through this skill so best practices are enforced uniformly. Downstream skills (e.g. `lisa:linear-create`) should delegate here rather than calling the MCP write tools directly.
281
+ - The gate logic (what makes a valid item) lives in `lisa:linear-validate-issue`, NOT in this skill. This skill calls the validator at Phase 5.5 (pre-write) and Phase 7 (via `lisa:linear-verify` post-write). When a gate needs to change, change it in `lisa:linear-validate-issue` — every caller picks it up automatically.
282
+ - This skill is the destination of the `lisa:tracker-write` shim when `tracker = "linear"`. Vendor-neutral callers (`notion-to-tracker`, `confluence-to-tracker`, `linear-to-tracker`, `github-to-tracker`) MUST go through `lisa:tracker-write`, not call this skill directly.
@@ -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-tracker, tracker-validate, 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, tracker-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
 
@@ -27,7 +27,7 @@ Specifically forbidden:
27
27
 
28
28
  The only legitimate reasons to stop early:
29
29
 
30
- - Missing database URL or required configuration (`JIRA_PROJECT`, `JIRA_SERVER`, `E2E_BASE_URL`, etc.). Surface the missing value and exit.
30
+ - Missing database URL or required configuration (`atlassian.cloudId`, `jira.project` or destination-tracker equivalents in `.lisa.config.json`, `E2E_BASE_URL`, etc.). Surface the missing value and exit.
31
31
  - Database misconfigured (Status property missing expected values, data source unreachable). Surface and exit.
32
32
  - Empty `Ready` set. Exit cleanly with `"No PRDs with Status=Ready. Nothing to do."`
33
33
 
@@ -78,7 +78,7 @@ Invoke the `lisa:notion-to-tracker` skill with `dry_run: true` and the PRD's URL
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:tracker-validate`, which `lisa:notion-to-tracker` calls per ticket.
81
+ This call also indirectly invokes `lisa:tracker-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
 
@@ -208,12 +208,18 @@ Print to the agent's output. Do not write this summary to Notion or JIRA — it'
208
208
 
209
209
  ## Configuration
210
210
 
211
- This skill reads project configuration from environment variables (or `$ARGUMENTS` overrides). If any required value is missing, ask the user before proceedingnever invent values.
211
+ This skill reads project configuration from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key) and operational E2E test config from environment variables. See the `config-resolution` rule for the full schema. Destination tracker config (jira / github / linear) is consumed by `lisa:tracker-write` internally this skill does NOT read it.
212
+
213
+ ### From `.lisa.config.json`
214
+
215
+ | Field | Purpose |
216
+ |-------|---------|
217
+ | `notion.prdDatabaseId` | Notion database hosting PRDs (when `$ARGUMENTS` is the literal token `notion`) |
218
+
219
+ ### From environment variables
212
220
 
213
221
  | Variable | Purpose |
214
222
  |----------|---------|
215
- | `JIRA_PROJECT` | JIRA project key for ticket creation (passed to `lisa:notion-to-tracker`) |
216
- | `JIRA_SERVER` | Atlassian instance host |
217
223
  | `E2E_BASE_URL` | Frontend URL for `lisa:product-walkthrough` |
218
224
  | `E2E_TEST_PHONE` / `E2E_TEST_OTP` / `E2E_TEST_ORG` | Test user creds for walkthrough + verification plans |
219
225
  | `E2E_GRAPHQL_URL` | API URL for verification plans |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: notion-to-tracker
3
3
  description: >
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
4
+ Break down a Notion PRD into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA, GitHub Issues, or Linear per .lisa.config.json). Use this skill whenever the user
5
5
  shares a Notion PRD URL and wants it converted into tracker tickets, or asks to "break down a PRD",
6
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:
@@ -11,7 +11,7 @@ description: >
11
11
 
12
12
  # Notion PRD to Tracker Breakdown
13
13
 
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.
14
+ Convert a Notion PRD into a structured ticket hierarchy in the configured destination tracker (JIRA, GitHub Issues, or Linear 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
@@ -84,21 +84,27 @@ A Notion PRD URL. The PRD is expected to have:
84
84
 
85
85
  ## Configuration
86
86
 
87
- This skill reads project-specific configuration from environment variables. If these are not set,
88
- ask the user for the values before proceeding.
87
+ This skill reads project configuration from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key) and operational E2E test config from environment variables. See the `config-resolution` rule for the full schema.
88
+
89
+ ### From `.lisa.config.json`
90
+
91
+ This skill is a **PRD source** (Notion); destination tracker resolution is handled by `lisa:tracker-write` and `lisa:tracker-validate` internally — this skill does NOT read `tracker` directly. The relevant config for the source side:
92
+
93
+ | Field | Purpose | Required when |
94
+ |-------|---------|---------------|
95
+ | `notion.prdDatabaseId` | Notion database hosting PRDs | invoked without an explicit Notion page URL (batch / arg-less mode) |
96
+
97
+ ### From environment variables (E2E test config — operational, not tracker)
89
98
 
90
99
  | Variable | Purpose | Example |
91
100
  |----------|---------|---------|
92
- | `JIRA_PROJECT` | JIRA project key for ticket creation | `SE` |
93
- | `JIRA_SERVER` | Atlassian instance URL (site host) | `mycompany.atlassian.net` |
94
101
  | `E2E_TEST_PHONE` | Test user phone number for verification plans | `0000000099` |
95
102
  | `E2E_TEST_OTP` | Test user OTP code | `555555` |
96
103
  | `E2E_TEST_ORG` | Test organization name | `Arsenal` |
97
104
  | `E2E_BASE_URL` | Frontend base URL for Playwright tests | `https://dev.example.io/` |
98
105
  | `E2E_GRAPHQL_URL` | GraphQL API URL for curl verification | `https://gql.dev.example.io/graphql` |
99
106
 
100
- If env vars are not available, ask the user to provide them explicitly before proceeding.
101
- Do not retrieve credentials from repository files or local agent settings.
107
+ If env vars are not available, ask the user to provide them explicitly before proceeding. Do not retrieve credentials from repository files or local agent settings.
102
108
 
103
109
  ## Workflow
104
110
 
@@ -128,17 +134,17 @@ PRDs typically reference external design, UX, and data artifacts (Figma files, L
128
134
  - Embedded images and file attachments on the page itself
129
135
  - Fenced code blocks with example data (JSON, SQL, GraphQL, cURL request/response)
130
136
 
131
- 2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:jira-source-artifacts` skill. That skill is the single source of truth for: domains (`ui-design` / `ux-flow` / `data` / `ops` / `reference`), per-tool classification rules (Figma `/proto/` vs design, Lovable as `ux-flow`, Loom, screenshots), and coverage smells. Do not restate the rules here — invoke the skill so any drift in the rules propagates uniformly.
137
+ 2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:tracker-source-artifacts` skill. That skill is the single source of truth for: domains (`ui-design` / `ux-flow` / `data` / `ops` / `reference`), per-tool classification rules (Figma `/proto/` vs design, Lovable as `ux-flow`, Loom, screenshots), and coverage smells. Do not restate the rules here — invoke the skill so any drift in the rules propagates uniformly.
132
138
 
133
139
  3. **Build an `artifacts` map** keyed by domain. Each entry: `{ url, title, domain, source_page, source_page_url, classification_reason }`. The `classification_reason` makes disambiguation auditable ("Figma URL contains `/proto/` → ux-flow"). The `source_page` lets you trace each reference back to where it appeared in the PRD.
134
140
 
135
- 4. **Surface coverage smells** as defined in `lisa:jira-source-artifacts` §5 (zero artifacts, prototype-without-mock, mock-without-prototype, Lovable-without-business-rules). Record any detected smells on the epic.
141
+ 4. **Surface coverage smells** as defined in `lisa:tracker-source-artifacts` §5 (zero artifacts, prototype-without-mock, mock-without-prototype, Lovable-without-business-rules). Record any detected smells on the epic.
136
142
 
137
143
  ### Phase 1.6: Source Precedence & Conflict Resolution
138
144
 
139
- Source precedence rules and cross-axis conflict handling are defined in `lisa:jira-source-artifacts` §3 and §4. Apply them during ticket synthesis: every conflict between artifacts must be recorded under `## Open Questions` on the affected ticket, never silently reconciled.
145
+ Source precedence rules and cross-axis conflict handling are defined in `lisa:tracker-source-artifacts` §3 and §4. Apply them during ticket synthesis: every conflict between artifacts must be recorded under `## Open Questions` on the affected ticket, never silently reconciled.
140
146
 
141
- The existing-component reuse expectation (mocks define visual intent, not implementation shortcut) is defined in `lisa:jira-source-artifacts` §7. Encode it on every UI-touching story.
147
+ The existing-component reuse expectation (mocks define visual intent, not implementation shortcut) is defined in `lisa:tracker-source-artifacts` §7. Encode it on every UI-touching story.
142
148
 
143
149
  ### Phase 2: Codebase + Live Product Research
144
150
 
@@ -164,7 +170,7 @@ Walkthrough findings are attached to the originating Notion PRD as a comment ("C
164
170
 
165
171
  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
172
 
167
- - `project_key`: from `JIRA_PROJECT` config
173
+ - `project_key`: resolved by `lisa:tracker-write` from `.lisa.config.json`
168
174
  - `issue_type`: `Epic`
169
175
  - `summary`: epic title from the PRD
170
176
  - `description_body`: a draft of the 3-audience description containing:
@@ -195,7 +201,7 @@ For each Epic, plan two kinds of stories:
195
201
 
196
202
  For each story, **invoke `lisa:tracker-write`** with:
197
203
 
198
- - `project_key`: from `JIRA_PROJECT` config
204
+ - `project_key`: resolved by `lisa:tracker-write` from `.lisa.config.json`
199
205
  - `issue_type`: `Story`
200
206
  - `epic_parent`: the Epic key captured in Phase 3 (mandatory — `lisa:tracker-write` rejects non-bug, non-epic tickets without an epic parent)
201
207
  - `summary`: prefixed per the naming convention above
@@ -242,7 +248,7 @@ Sub-tasks inherit their parent story's artifacts by reference (the parent link).
242
248
 
243
249
  ### Phase 5.5: Artifact Preservation Gate (mandatory)
244
250
 
245
- Run the preservation gate defined in `lisa:jira-source-artifacts` §8 against the artifacts extracted in Phase 1.5 and the tickets just created. Do NOT restate or modify the gate logic here — invoke the rules from `lisa:jira-source-artifacts` so any rule change propagates uniformly.
251
+ Run the preservation gate defined in `lisa:tracker-source-artifacts` §8 against the artifacts extracted in Phase 1.5 and the tickets just created. Do NOT restate or modify the gate logic here — invoke the rules from `lisa:tracker-source-artifacts` so any rule change propagates uniformly.
246
252
 
247
253
  To run the gate, this skill must:
248
254
 
@@ -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, 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."
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, GitHub Issues, or Linear). 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
 
@@ -32,6 +32,7 @@ Detect the input type from `$ARGUMENTS` and route to the appropriate source skil
32
32
  | 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. |
33
33
  | 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. |
34
34
  | A JIRA ticket ID/URL of an Epic (existing epic *is* the spec) | `lisa:jira-agent` (read epic, decompose into stories/sub-tasks) |
35
+ | A Linear Project URL of a Project that *is* the spec, when destination tracker = `linear` | `lisa:linear-agent` (read project, decompose into Issues / sub-Issues). Symmetric counterpart to the JIRA-Epic and GitHub-Epic branches. |
35
36
  | 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`. |
36
37
  | 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. |
37
38
  | 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. |
@@ -46,4 +47,4 @@ Execute the **Plan** flow as defined in the `intent-routing` rule (loaded via th
46
47
 
47
48
  ## Output
48
49
 
49
- 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.
50
+ Work items in the configured tracker (JIRA, GitHub Issues, or Linear, 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,6 +1,6 @@
1
1
  ---
2
2
  name: prd-ticket-coverage
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."
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, GitHub Issues, or Linear) — 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
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
 
@@ -66,8 +66,8 @@ For every walkthrough, record:
66
66
 
67
67
  - **What exists today**: a short prose description of the current flow, the components in use (if you can identify them from the DOM via `browser_snapshot`), and the states observed.
68
68
  - **What the PRD changes**: explicit delta — added screens, removed screens, modified components, new states, removed states.
69
- - **Existing-component reuse candidates**: components in the current product that could absorb the new behavior. The PRD-vs-current-product comparison drives which existing components a developer should reuse instead of building new (see `lisa:jira-source-artifacts` §7).
70
- - **Design-vs-current-product divergence**: places where the mock/prototype materially diverges from what's shipped. Each divergence is a discussion item, not an automatic "rebuild from scratch" — see `lisa:jira-source-artifacts` §3 (mocks define visual intent, not implementation shortcut).
69
+ - **Existing-component reuse candidates**: components in the current product that could absorb the new behavior. The PRD-vs-current-product comparison drives which existing components a developer should reuse instead of building new (see `lisa:tracker-source-artifacts` §7).
70
+ - **Design-vs-current-product divergence**: places where the mock/prototype materially diverges from what's shipped. Each divergence is a discussion item, not an automatic "rebuild from scratch" — see `lisa:tracker-source-artifacts` §3 (mocks define visual intent, not implementation shortcut).
71
71
  - **Coverage smells**: states the PRD doesn't address that exist today (e.g., the mock shows the empty state but ignores the populated state that has 90% of users).
72
72
  - **Behavioral surprises**: anything that doesn't match the PRD's assumptions about current behavior — these are usually the most valuable findings, because they invalidate parts of the PRD.
73
73
 
@@ -24,8 +24,7 @@ Based on the source, load the full spec:
24
24
  | Source | How to Load |
25
25
  |--------|-------------|
26
26
  | Plan file (`.md`) | `Read` the file |
27
- | JIRA key or GitHub issue ref | Invoke `/tracker-read <ref>` (vendor-neutral; dispatches to `/jira-read-ticket` or `/github-read-issue` per `.lisa.config.json` `tracker`) to get the full context bundle (primary ticket + epic / parent + linked tickets) |
28
- | Linear key | Fetch via Linear MCP if available; else `Bash` with Linear CLI; else report "Linear reader unavailable" |
27
+ | JIRA key, GitHub issue ref, or Linear identifier | Invoke `/tracker-read <ref>` (vendor-neutral; dispatches to `/jira-read-ticket`, `/github-read-issue`, or `/linear-read-issue` per `.lisa.config.json` `tracker`) to get the full context bundle (primary item + epic / project / parent + linked items) |
29
28
  | PRD | `Read` the file or fetch via Notion / Confluence MCP, or `gh issue view` for a GitHub PRD |
30
29
 
31
30
  ## Phase 2 — Extract Requirements
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ticket-triage
3
- description: "Analytical triage gate for tickets in the configured destination tracker (JIRA or GitHub Issues). Detects requirement ambiguities, identifies edge cases from codebase analysis, and plans verification methodology. Posts findings to the ticket and produces a verdict (BLOCKED/PASSED_WITH_FINDINGS/PASSED) that gates whether implementation can proceed. Vendor-neutral: the caller (jira-agent or github-agent) is responsible for fetching the ticket via lisa:tracker-read, running the pre-flight gate via lisa:tracker-verify, and posting findings via the matching vendor comment tool."
3
+ description: "Analytical triage gate for tickets in the configured destination tracker (JIRA, GitHub Issues, or Linear). Detects requirement ambiguities, identifies edge cases from codebase analysis, and plans verification methodology. Posts findings to the ticket and produces a verdict (BLOCKED/PASSED_WITH_FINDINGS/PASSED) that gates whether implementation can proceed. Vendor-neutral: the caller (jira-agent or github-agent) is responsible for fetching the ticket via lisa:tracker-read, running the pre-flight gate via lisa:tracker-verify, and posting findings via the matching vendor comment tool."
4
4
  allowed-tools: ["Read", "Glob", "Grep", "Bash"]
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tracker-add-journey
3
- description: "Vendor-neutral wrapper for appending a Validation Journey section to an existing ticket/issue. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-add-journey or lisa:github-add-journey."
3
+ description: "Vendor-neutral wrapper for appending a Validation Journey section to an existing ticket/issue. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-add-journey, lisa:github-add-journey, or lisa:linear-add-journey."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -8,7 +8,7 @@ allowed-tools: ["Skill", "Bash", "Read"]
8
8
 
9
9
  Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor skill.
10
10
 
11
- See the `tracker-resolution` rule for configuration and dispatch table.
11
+ See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
13
  ## Workflow
14
14
 
@@ -16,9 +16,11 @@ See the `tracker-resolution` rule for configuration and dispatch table.
16
16
  2. Dispatch:
17
17
  - `jira` → invoke `lisa:jira-add-journey` with `$ARGUMENTS` verbatim. Arg: a JIRA ticket key.
18
18
  - `github` → invoke `lisa:github-add-journey` with `$ARGUMENTS` verbatim. Arg: `org/repo#<number>` or a GitHub issue URL.
19
+ - `linear` → invoke `lisa:linear-add-journey` with `$ARGUMENTS` verbatim. Arg: a Linear Issue identifier (e.g., `ENG-123`).
20
+ - Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira', 'github', or 'linear'."`
19
21
  3. Pass through the output.
20
22
 
21
23
  ## Rules
22
24
 
23
- - The Validation Journey content format is identical across both vendors (markdown sections with `[EVIDENCE: name]` markers). The only difference is how the section is appended — JIRA via `editJiraIssue`, GitHub via `gh issue edit --body-file`.
25
+ - The Validation Journey content format is identical across all vendors (markdown sections with `[EVIDENCE: name]` markers). The only difference is how the section is appended — JIRA via `editJiraIssue` (Jira wiki markup), GitHub via `gh issue edit --body-file` (markdown), Linear via `save_issue` (markdown).
24
26
  - If the ticket already has a Validation Journey, the vendor skill reports it and stops. This shim does not retry.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tracker-build-intake
3
- description: "Vendor-neutral wrapper for the build-queue batch scanner. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-build-intake (JQL/project-key queue) or lisa:github-build-intake (GitHub repo queue keyed off the `status:ready` label). Counterpart to lisa:intake's PRD-side dispatchers."
3
+ description: "Vendor-neutral wrapper for the build-queue batch scanner. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-build-intake (JQL/project-key queue), lisa:github-build-intake (GitHub repo queue keyed off the `status:ready` label), or lisa:linear-build-intake (Linear team queue keyed off the `status:ready` label). Counterpart to lisa:intake's PRD-side dispatchers."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -8,7 +8,7 @@ allowed-tools: ["Skill", "Bash", "Read"]
8
8
 
9
9
  Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor build-queue scanner.
10
10
 
11
- See the `tracker-resolution` rule for configuration and dispatch table.
11
+ See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
13
  ## Workflow
14
14
 
@@ -16,10 +16,12 @@ See the `tracker-resolution` rule for configuration and dispatch table.
16
16
  2. Dispatch:
17
17
  - `jira` → invoke `lisa:jira-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a JIRA project key (e.g., `SE`) or a JQL filter.
18
18
  - `github` → invoke `lisa:github-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a GitHub `org/repo` token or a full GitHub repo URL.
19
+ - `linear` → invoke `lisa:linear-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a Linear team key (e.g., `ENG`) or the literal token `linear` (which falls back to `linear.teamKey`).
20
+ - Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira', 'github', or 'linear'."`
19
21
  3. Pass through the cycle summary verbatim.
20
22
 
21
23
  ## Rules
22
24
 
23
25
  - Single cycle per invocation — the vendor skill processes the current `Ready` set and exits.
24
- - The vendor skills run their own pre-flight checks (JIRA workflow transitions for the JIRA path; label namespace adoption for the GitHub path) before processing items. Never bypass.
26
+ - The vendor skills run their own pre-flight checks (JIRA workflow transitions for the JIRA path; label namespace adoption for the GitHub and Linear paths) before processing items. Never bypass.
25
27
  - Never run two intake cycles concurrently against overlapping queues — the scheduling layer is responsible for serialization.