@codyswann/lisa 2.15.1 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -79,7 +79,7 @@
79
79
  "lodash": ">=4.18.1"
80
80
  },
81
81
  "name": "@codyswann/lisa",
82
- "version": "2.15.1",
82
+ "version": "2.16.0",
83
83
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
84
84
  "main": "dist/index.js",
85
85
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -76,7 +76,7 @@ orchestrating skill's responsibility (`lisa:confluence-prd-intake`).
76
76
  - Gherkin acceptance criteria
77
77
  - Epic parent validation
78
78
  - Explicit issue-link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
79
- - Single-repo scope check on Bug / Task / Sub-task
79
+ - Single-repo scope check on Bug / Task / Sub-task / Improvement
80
80
  - Sign-in account and target environment recorded in description
81
81
  - Post-create verification
82
82
 
@@ -234,6 +234,8 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
234
234
 
235
235
  ### Phase 5: Create Sub-tasks
236
236
 
237
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
238
+
237
239
  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.**
238
240
 
239
241
  Each sub-task MUST:
@@ -229,6 +229,8 @@ Capture each returned story ref — Phase 5 needs it.
229
229
 
230
230
  ### Phase 5: Create Sub-tasks
231
231
 
232
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
233
+
232
234
  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 `lisa:jira-write-ticket` / `lisa:github-write-issue` / `gh issue create` directly.**
233
235
 
234
236
  Each sub-task MUST:
@@ -84,7 +84,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
84
84
  | S7 Parent sub-issue declared | `structural` | false |
85
85
  | S8 Target Backend Environment | `technical` | false |
86
86
  | S9 Sign-in Required | `technical` | false |
87
- | S10 Single-repo scope | `scope` | true |
87
+ | S10 Single-repo scope | `scope` | false |
88
88
  | S11 Validation Journey | `acceptance-criteria` | true |
89
89
  | S12 Source Precedence | `design-ux` | true |
90
90
  | S13 Relationship Search | `dependency` | true |
@@ -157,11 +157,13 @@ If the spec doesn't set `authenticated_surface`, infer it: scan the body and AC
157
157
 
158
158
  #### S10 — Repository section, single-repo scope
159
159
 
160
- When `issue_type ∈ {Bug, Task, Sub-task}`, body must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation to split into per-repo issues under a shared Epic.
160
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}`, body must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa:task-decomposition step 1.5)"`.
161
161
 
162
- (GitHub Issues live in one repo by definition, so the `## Repository` section is technically redundant — keep it for parity with the JIRA path so downstream tooling sees the same shape.)
162
+ (GitHub Issues live in one repo by definition, so the `## Repository` section is technically redundant — keep it for parity with the JIRA path so downstream tooling sees the same shape. Cross-repo references in AC are still possible and still fail this gate.)
163
163
 
164
- Story / Epic / Spike / Improvement: skipped (may span repos).
164
+ Story / Epic / Spike: skipped (may span repos — these are coordination containers, not work units).
165
+
166
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa:github-to-tracker`, `lisa:notion-to-tracker`, etc.) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa:task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
165
167
 
166
168
  #### S11 — Validation Journey present
167
169
 
@@ -79,7 +79,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
79
79
  | S7 Epic parent declared | `structural` | false |
80
80
  | S8 Target Backend Environment | `technical` | false |
81
81
  | S9 Sign-in Required | `technical` | false |
82
- | S10 Single-repo scope | `scope` | true |
82
+ | S10 Single-repo scope | `scope` | false |
83
83
  | S11 Validation Journey | `acceptance-criteria` | true |
84
84
  | S12 Source Precedence | `design-ux` | true |
85
85
  | S13 Relationship Search | `dependency` | true |
@@ -156,9 +156,11 @@ If the spec doesn't set `authenticated_surface`, infer it: scan the description
156
156
 
157
157
  #### S10 — Repository section, single-repo scope
158
158
 
159
- When `issue_type ∈ {Bug, Task, Sub-task}`, description must contain `h2. Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation to split.
159
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}`, description must contain `h2. Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa:task-decomposition step 1.5)"`.
160
160
 
161
- Story / Epic / Spike / Improvement: skipped (may span repos).
161
+ Story / Epic / Spike: skipped (may span repos — these are coordination containers, not work units).
162
+
163
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa:notion-to-tracker`, `lisa:confluence-to-tracker`, `lisa:linear-to-tracker`, `lisa:github-to-tracker`) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa:task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
162
164
 
163
165
  #### S11 — Validation Journey present
164
166
 
@@ -76,7 +76,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
76
76
  - Gherkin acceptance criteria
77
77
  - Epic parent validation
78
78
  - Explicit issue-link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
79
- - Single-repo scope check on Bug / Task / Sub-task
79
+ - Single-repo scope check on Bug / Task / Sub-task / Improvement
80
80
  - Sign-in account and target environment recorded in description
81
81
  - Post-create verification
82
82
 
@@ -227,6 +227,8 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
227
227
 
228
228
  ### Phase 5: Create Sub-tasks
229
229
 
230
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
231
+
230
232
  Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:tracker-write` for each sub-task — no agent may call `createJiraIssue` directly.**
231
233
 
232
234
  Each sub-task MUST:
@@ -82,7 +82,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
82
82
  | S7 Project parent declared | `structural` | false |
83
83
  | S8 Target Backend Environment | `technical` | false |
84
84
  | S9 Sign-in Required | `technical` | false |
85
- | S10 Single-repo scope | `scope` | true |
85
+ | S10 Single-repo scope | `scope` | false |
86
86
  | S11 Validation Journey | `acceptance-criteria` | true |
87
87
  | S12 Source Precedence | `design-ux` | true |
88
88
  | S13 Relationship Search | `dependency` | true |
@@ -161,9 +161,11 @@ If the spec doesn't set `authenticated_surface`, infer it: scan the description
161
161
 
162
162
  #### S10 — Repository section, single-repo scope
163
163
 
164
- When `issue_type ∈ {Bug, Task, Sub-task}`, description must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation to split.
164
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}`, description must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa:task-decomposition step 1.5)"`.
165
165
 
166
- Story / Epic / Spike / Improvement: skipped (may span repos).
166
+ Story / Epic / Spike: skipped (may span repos — these are coordination containers, not work units).
167
+
168
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa:linear-to-tracker`, `lisa:notion-to-tracker`, etc.) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa:task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
167
169
 
168
170
  #### S11 — Validation Journey present
169
171
 
@@ -69,7 +69,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
69
69
  - Gherkin acceptance criteria
70
70
  - Epic parent validation
71
71
  - Explicit issue-link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
72
- - Single-repo scope check on Bug / Task / Sub-task
72
+ - Single-repo scope check on Bug / Task / Sub-task / Improvement
73
73
  - Sign-in account and target environment recorded in description
74
74
  - Post-create verification
75
75
 
@@ -229,6 +229,8 @@ When classification is ambiguous, err on the side of inclusion — a developer c
229
229
 
230
230
  ### Phase 5: Create Sub-tasks
231
231
 
232
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
233
+
232
234
  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.
233
235
 
234
236
  Each sub-task MUST:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: task-decomposition
3
- description: "Methodology for breaking work into ordered tasks. Each task gets acceptance criteria, verification type, dependencies, and skills required."
3
+ description: "Methodology for breaking work into ordered tasks. Each task gets a single-repo scope, acceptance criteria, verification type, dependencies, and skills required."
4
4
  ---
5
5
 
6
6
  # Task Decomposition
@@ -16,6 +16,26 @@ Break work into ordered, well-scoped tasks that can be independently implemented
16
16
  - Avoid tasks that are too large to complete in a single session
17
17
  - Avoid tasks that are too small to be meaningful (e.g., "add an import statement")
18
18
 
19
+ ### 1.5. Scope Each Unit to a Single Repository
20
+
21
+ Work units must be implementable inside a single repository. This is a hard invariant — downstream validators (`jira-validate-ticket`, `github-validate-issue`, `linear-validate-issue`) gate writes on it, so a cross-repo task will fail to be created.
22
+
23
+ Apply this rule by issue type:
24
+
25
+ | Issue type | Repo scope |
26
+ |------------|-----------|
27
+ | **Epic, Story, Spike** | MAY span repos — these are coordination containers |
28
+ | **Task, Bug, Sub-task, Improvement** | MUST name exactly one repo — these are work units |
29
+
30
+ If a candidate work unit naturally touches multiple repos (e.g., "add field to backend API and consume it in mobile app"), do not write it as one ticket. Instead:
31
+
32
+ 1. Split it into one work unit per repo (e.g., `[backend-api] Add field to /users endpoint`, `[mobile-app] Display new field on profile screen`).
33
+ 2. Group the per-repo units under a single parent Story (or Epic, if the parent Story already exists). The parent stays cross-repo; the children do not.
34
+ 3. Encode the order via `Dependencies` in step 4 — typically the producing repo (backend) blocks the consuming repo (frontend/mobile).
35
+ 4. Tag each work unit with `[repo-name]` as a summary prefix so the repo is visible in tracker lists at a glance.
36
+
37
+ Reject any work unit whose acceptance criteria reference behavior in a different repo from the one it's scoped to. If you find yourself writing "and the frontend should also...", that's a signal to split.
38
+
19
39
  ### 2. Define Acceptance Criteria
20
40
 
21
41
  For each task, define what "done" looks like:
@@ -61,7 +81,8 @@ Map each task to the skills needed to complete it. This enables delegation to sp
61
81
  ```
62
82
  ## Task Breakdown
63
83
 
64
- ### Task 1: [imperative description]
84
+ ### Task 1: [[repo-name] imperative description]
85
+ - **Repository:** [single repo name, or N/A for Epic/Story/Spike]
65
86
  - **Acceptance criteria:**
66
87
  - [specific, measurable criterion]
67
88
  - [specific, measurable criterion]
@@ -69,7 +90,8 @@ Map each task to the skills needed to complete it. This enables delegation to sp
69
90
  - **Dependencies:** [none | task IDs that must complete first]
70
91
  - **Skills:** [list of skills needed]
71
92
 
72
- ### Task 2: [imperative description]
93
+ ### Task 2: [[repo-name] imperative description]
94
+ - **Repository:** [single repo name, or N/A for Epic/Story/Spike]
73
95
  - **Acceptance criteria:**
74
96
  - [specific, measurable criterion]
75
97
  - **Verification:** [type] -- [how to verify]
@@ -89,6 +111,7 @@ Map each task to the skills needed to complete it. This enables delegation to sp
89
111
 
90
112
  - Every task must have at least one acceptance criterion that can be empirically verified
91
113
  - Do not create tasks that cannot be verified -- if you cannot define how to prove it is done, the task is not well-scoped
114
+ - Every Task / Bug / Sub-task / Improvement is scoped to exactly one repo -- if the work spans repos, split into per-repo work units under a shared parent Story (see step 1.5)
92
115
  - Keep tasks ordered so that no task references work that has not been completed by a prior task
93
116
  - Flag any task that requires access, permissions, or external input not yet available
94
117
  - Prefer more small tasks over fewer large tasks -- smaller tasks are easier to verify and less risky to fail
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -76,7 +76,7 @@ orchestrating skill's responsibility (`lisa:confluence-prd-intake`).
76
76
  - Gherkin acceptance criteria
77
77
  - Epic parent validation
78
78
  - Explicit issue-link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
79
- - Single-repo scope check on Bug / Task / Sub-task
79
+ - Single-repo scope check on Bug / Task / Sub-task / Improvement
80
80
  - Sign-in account and target environment recorded in description
81
81
  - Post-create verification
82
82
 
@@ -234,6 +234,8 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
234
234
 
235
235
  ### Phase 5: Create Sub-tasks
236
236
 
237
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
238
+
237
239
  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.**
238
240
 
239
241
  Each sub-task MUST:
@@ -229,6 +229,8 @@ Capture each returned story ref — Phase 5 needs it.
229
229
 
230
230
  ### Phase 5: Create Sub-tasks
231
231
 
232
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
233
+
232
234
  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 `lisa:jira-write-ticket` / `lisa:github-write-issue` / `gh issue create` directly.**
233
235
 
234
236
  Each sub-task MUST:
@@ -84,7 +84,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
84
84
  | S7 Parent sub-issue declared | `structural` | false |
85
85
  | S8 Target Backend Environment | `technical` | false |
86
86
  | S9 Sign-in Required | `technical` | false |
87
- | S10 Single-repo scope | `scope` | true |
87
+ | S10 Single-repo scope | `scope` | false |
88
88
  | S11 Validation Journey | `acceptance-criteria` | true |
89
89
  | S12 Source Precedence | `design-ux` | true |
90
90
  | S13 Relationship Search | `dependency` | true |
@@ -157,11 +157,13 @@ If the spec doesn't set `authenticated_surface`, infer it: scan the body and AC
157
157
 
158
158
  #### S10 — Repository section, single-repo scope
159
159
 
160
- When `issue_type ∈ {Bug, Task, Sub-task}`, body must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation to split into per-repo issues under a shared Epic.
160
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}`, body must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa:task-decomposition step 1.5)"`.
161
161
 
162
- (GitHub Issues live in one repo by definition, so the `## Repository` section is technically redundant — keep it for parity with the JIRA path so downstream tooling sees the same shape.)
162
+ (GitHub Issues live in one repo by definition, so the `## Repository` section is technically redundant — keep it for parity with the JIRA path so downstream tooling sees the same shape. Cross-repo references in AC are still possible and still fail this gate.)
163
163
 
164
- Story / Epic / Spike / Improvement: skipped (may span repos).
164
+ Story / Epic / Spike: skipped (may span repos — these are coordination containers, not work units).
165
+
166
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa:github-to-tracker`, `lisa:notion-to-tracker`, etc.) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa:task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
165
167
 
166
168
  #### S11 — Validation Journey present
167
169
 
@@ -79,7 +79,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
79
79
  | S7 Epic parent declared | `structural` | false |
80
80
  | S8 Target Backend Environment | `technical` | false |
81
81
  | S9 Sign-in Required | `technical` | false |
82
- | S10 Single-repo scope | `scope` | true |
82
+ | S10 Single-repo scope | `scope` | false |
83
83
  | S11 Validation Journey | `acceptance-criteria` | true |
84
84
  | S12 Source Precedence | `design-ux` | true |
85
85
  | S13 Relationship Search | `dependency` | true |
@@ -156,9 +156,11 @@ If the spec doesn't set `authenticated_surface`, infer it: scan the description
156
156
 
157
157
  #### S10 — Repository section, single-repo scope
158
158
 
159
- When `issue_type ∈ {Bug, Task, Sub-task}`, description must contain `h2. Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation to split.
159
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}`, description must contain `h2. Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa:task-decomposition step 1.5)"`.
160
160
 
161
- Story / Epic / Spike / Improvement: skipped (may span repos).
161
+ Story / Epic / Spike: skipped (may span repos — these are coordination containers, not work units).
162
+
163
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa:notion-to-tracker`, `lisa:confluence-to-tracker`, `lisa:linear-to-tracker`, `lisa:github-to-tracker`) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa:task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
162
164
 
163
165
  #### S11 — Validation Journey present
164
166
 
@@ -76,7 +76,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
76
76
  - Gherkin acceptance criteria
77
77
  - Epic parent validation
78
78
  - Explicit issue-link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
79
- - Single-repo scope check on Bug / Task / Sub-task
79
+ - Single-repo scope check on Bug / Task / Sub-task / Improvement
80
80
  - Sign-in account and target environment recorded in description
81
81
  - Post-create verification
82
82
 
@@ -227,6 +227,8 @@ Capture each returned story key — Phase 5 needs it as the parent for sub-tasks
227
227
 
228
228
  ### Phase 5: Create Sub-tasks
229
229
 
230
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
231
+
230
232
  Delegate sub-task creation to **parallel agents** (one per epic or batch of stories) for efficiency. **Every spawned agent must invoke `lisa:tracker-write` for each sub-task — no agent may call `createJiraIssue` directly.**
231
233
 
232
234
  Each sub-task MUST:
@@ -82,7 +82,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
82
82
  | S7 Project parent declared | `structural` | false |
83
83
  | S8 Target Backend Environment | `technical` | false |
84
84
  | S9 Sign-in Required | `technical` | false |
85
- | S10 Single-repo scope | `scope` | true |
85
+ | S10 Single-repo scope | `scope` | false |
86
86
  | S11 Validation Journey | `acceptance-criteria` | true |
87
87
  | S12 Source Precedence | `design-ux` | true |
88
88
  | S13 Relationship Search | `dependency` | true |
@@ -161,9 +161,11 @@ If the spec doesn't set `authenticated_surface`, infer it: scan the description
161
161
 
162
162
  #### S10 — Repository section, single-repo scope
163
163
 
164
- When `issue_type ∈ {Bug, Task, Sub-task}`, description must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation to split.
164
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}`, description must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa:task-decomposition step 1.5)"`.
165
165
 
166
- Story / Epic / Spike / Improvement: skipped (may span repos).
166
+ Story / Epic / Spike: skipped (may span repos — these are coordination containers, not work units).
167
+
168
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa:linear-to-tracker`, `lisa:notion-to-tracker`, etc.) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa:task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
167
169
 
168
170
  #### S11 — Validation Journey present
169
171
 
@@ -69,7 +69,7 @@ The dry-run mode never writes to JIRA and never calls `mcp__atlassian__createJir
69
69
  - Gherkin acceptance criteria
70
70
  - Epic parent validation
71
71
  - Explicit issue-link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
72
- - Single-repo scope check on Bug / Task / Sub-task
72
+ - Single-repo scope check on Bug / Task / Sub-task / Improvement
73
73
  - Sign-in account and target environment recorded in description
74
74
  - Post-create verification
75
75
 
@@ -229,6 +229,8 @@ When classification is ambiguous, err on the side of inclusion — a developer c
229
229
 
230
230
  ### Phase 5: Create Sub-tasks
231
231
 
232
+ **Auto-split cross-repo work before delegation.** For each candidate sub-task, apply `lisa:task-decomposition` step 1.5: if the work touches more than one repo, split it into one sub-task per repo under the same parent Story (e.g., `[backend-api] Add field` + `[mobile-app] Display field`), and encode the producer-before-consumer ordering via dependencies. Work units that may span repos (Epic, Story, Spike) stay as planned; work units that must be single-repo (Bug, Task, Sub-task, Improvement) are split now. Splitting is this skill's responsibility — the validator's S10 gate is `product_relevant: false` because cross-repo failures are decomposition errors caught here, not product questions sent back to the PRD.
233
+
232
234
  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.
233
235
 
234
236
  Each sub-task MUST:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: task-decomposition
3
- description: "Methodology for breaking work into ordered tasks. Each task gets acceptance criteria, verification type, dependencies, and skills required."
3
+ description: "Methodology for breaking work into ordered tasks. Each task gets a single-repo scope, acceptance criteria, verification type, dependencies, and skills required."
4
4
  ---
5
5
 
6
6
  # Task Decomposition
@@ -16,6 +16,26 @@ Break work into ordered, well-scoped tasks that can be independently implemented
16
16
  - Avoid tasks that are too large to complete in a single session
17
17
  - Avoid tasks that are too small to be meaningful (e.g., "add an import statement")
18
18
 
19
+ ### 1.5. Scope Each Unit to a Single Repository
20
+
21
+ Work units must be implementable inside a single repository. This is a hard invariant — downstream validators (`jira-validate-ticket`, `github-validate-issue`, `linear-validate-issue`) gate writes on it, so a cross-repo task will fail to be created.
22
+
23
+ Apply this rule by issue type:
24
+
25
+ | Issue type | Repo scope |
26
+ |------------|-----------|
27
+ | **Epic, Story, Spike** | MAY span repos — these are coordination containers |
28
+ | **Task, Bug, Sub-task, Improvement** | MUST name exactly one repo — these are work units |
29
+
30
+ If a candidate work unit naturally touches multiple repos (e.g., "add field to backend API and consume it in mobile app"), do not write it as one ticket. Instead:
31
+
32
+ 1. Split it into one work unit per repo (e.g., `[backend-api] Add field to /users endpoint`, `[mobile-app] Display new field on profile screen`).
33
+ 2. Group the per-repo units under a single parent Story (or Epic, if the parent Story already exists). The parent stays cross-repo; the children do not.
34
+ 3. Encode the order via `Dependencies` in step 4 — typically the producing repo (backend) blocks the consuming repo (frontend/mobile).
35
+ 4. Tag each work unit with `[repo-name]` as a summary prefix so the repo is visible in tracker lists at a glance.
36
+
37
+ Reject any work unit whose acceptance criteria reference behavior in a different repo from the one it's scoped to. If you find yourself writing "and the frontend should also...", that's a signal to split.
38
+
19
39
  ### 2. Define Acceptance Criteria
20
40
 
21
41
  For each task, define what "done" looks like:
@@ -61,7 +81,8 @@ Map each task to the skills needed to complete it. This enables delegation to sp
61
81
  ```
62
82
  ## Task Breakdown
63
83
 
64
- ### Task 1: [imperative description]
84
+ ### Task 1: [[repo-name] imperative description]
85
+ - **Repository:** [single repo name, or N/A for Epic/Story/Spike]
65
86
  - **Acceptance criteria:**
66
87
  - [specific, measurable criterion]
67
88
  - [specific, measurable criterion]
@@ -69,7 +90,8 @@ Map each task to the skills needed to complete it. This enables delegation to sp
69
90
  - **Dependencies:** [none | task IDs that must complete first]
70
91
  - **Skills:** [list of skills needed]
71
92
 
72
- ### Task 2: [imperative description]
93
+ ### Task 2: [[repo-name] imperative description]
94
+ - **Repository:** [single repo name, or N/A for Epic/Story/Spike]
73
95
  - **Acceptance criteria:**
74
96
  - [specific, measurable criterion]
75
97
  - **Verification:** [type] -- [how to verify]
@@ -89,6 +111,7 @@ Map each task to the skills needed to complete it. This enables delegation to sp
89
111
 
90
112
  - Every task must have at least one acceptance criterion that can be empirically verified
91
113
  - Do not create tasks that cannot be verified -- if you cannot define how to prove it is done, the task is not well-scoped
114
+ - Every Task / Bug / Sub-task / Improvement is scoped to exactly one repo -- if the work spans repos, split into per-repo work units under a shared parent Story (see step 1.5)
92
115
  - Keep tasks ordered so that no task references work that has not been completed by a prior task
93
116
  - Flag any task that requires access, permissions, or external input not yet available
94
117
  - Prefer more small tasks over fewer large tasks -- smaller tasks are easier to verify and less risky to fail