@codyswann/lisa 2.15.0 → 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 +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/skills/confluence-to-tracker/SKILL.md +3 -1
- package/plugins/lisa/skills/github-to-tracker/SKILL.md +2 -0
- package/plugins/lisa/skills/github-validate-issue/SKILL.md +6 -4
- package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +5 -3
- package/plugins/lisa/skills/linear-to-tracker/SKILL.md +3 -1
- package/plugins/lisa/skills/linear-validate-issue/SKILL.md +5 -3
- package/plugins/lisa/skills/notion-to-tracker/SKILL.md +3 -1
- package/plugins/lisa/skills/task-decomposition/SKILL.md +26 -3
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/skills/confluence-to-tracker/SKILL.md +3 -1
- package/plugins/src/base/skills/github-to-tracker/SKILL.md +2 -0
- package/plugins/src/base/skills/github-validate-issue/SKILL.md +6 -4
- package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +5 -3
- package/plugins/src/base/skills/linear-to-tracker/SKILL.md +3 -1
- package/plugins/src/base/skills/linear-validate-issue/SKILL.md +5 -3
- package/plugins/src/base/skills/notion-to-tracker/SKILL.md +3 -1
- package/plugins/src/base/skills/task-decomposition/SKILL.md +26 -3
- package/rails/copy-overwrite/.rubocop.yml +5 -0
- package/rails/create-only/.rubocop_todo.yml +8 -0
- package/typescript/copy-overwrite/eslint.ignore.config.json +3 -1
package/package.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"lodash": ">=4.18.1"
|
|
80
80
|
},
|
|
81
81
|
"name": "@codyswann/lisa",
|
|
82
|
-
"version": "2.
|
|
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": {
|
|
@@ -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` |
|
|
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
|
|
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
|
|
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` |
|
|
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
|
|
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
|
|
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` |
|
|
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
|
|
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
|
|
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
|
|
@@ -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` |
|
|
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
|
|
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
|
|
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` |
|
|
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
|
|
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
|
|
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` |
|
|
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
|
|
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
|
|
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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# This is the standard RuboCop "fix later" file.
|
|
2
|
+
# Lisa creates it empty so .rubocop.yml's `inherit_from` resolves cleanly
|
|
3
|
+
# in projects that don't yet have legacy violations to track.
|
|
4
|
+
#
|
|
5
|
+
# Generate or update with:
|
|
6
|
+
# bundle exec rubocop --auto-gen-config
|
|
7
|
+
#
|
|
8
|
+
# This file is create-only — Lisa will not overwrite your TODO list.
|