@codyswann/lisa 2.32.0 → 2.33.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 (25) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/skills/confluence-to-tracker/SKILL.md +6 -0
  5. package/plugins/lisa/skills/linear-to-tracker/SKILL.md +6 -0
  6. package/plugins/lisa/skills/notion-to-tracker/SKILL.md +6 -0
  7. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  8. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  9. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  10. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  11. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  21. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  23. package/plugins/src/base/skills/confluence-to-tracker/SKILL.md +6 -0
  24. package/plugins/src/base/skills/linear-to-tracker/SKILL.md +6 -0
  25. package/plugins/src/base/skills/notion-to-tracker/SKILL.md +6 -0
package/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  "lodash": ">=4.18.1"
83
83
  },
84
84
  "name": "@codyswann/lisa",
85
- "version": "2.32.0",
85
+ "version": "2.33.0",
86
86
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
87
87
  "main": "dist/index.js",
88
88
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -214,6 +214,8 @@ For each PRD epic, **invoke the `lisa:tracker-write` skill** (do not invoke `lis
214
214
  - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub. No filtering at the epic level.
215
215
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
216
216
 
217
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: an Epic is a container, not a leaf work unit. Do NOT mark it build-ready — `lisa:tracker-write` must not be passed `status:ready` for an Epic, and the Epic's lifecycle state rolls up from its children. The build-ready label is applied only in Phase 5.
218
+
217
219
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
218
220
 
219
221
  ### Phase 4: Create Stories
@@ -242,6 +244,8 @@ For each story, **invoke `lisa:tracker-write`** with:
242
244
  | Infrastructure | `ops`, `reference` |
243
245
  | Mixed / setup ("X.0") | All domains |
244
246
 
247
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: a Story is a container (it has child Sub-tasks), not a leaf work unit. Do NOT mark it build-ready — never pass `status:ready` to `lisa:tracker-write` for a Story. Its lifecycle state rolls up from its Sub-tasks. The build-ready label is applied only in Phase 5.
248
+
245
249
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
246
250
 
247
251
  ### Phase 5: Create Sub-tasks
@@ -254,6 +258,8 @@ Each sub-task MUST:
254
258
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
255
259
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
256
260
 
261
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa:tracker-write` applies `status:ready` here so downstream build intake (`lisa:tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa:tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
262
+
257
263
  Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task.
258
264
 
259
265
  ### Phase 5.5: Artifact Preservation Gate (mandatory)
@@ -195,6 +195,8 @@ For each epic identified in Phase 1, **invoke the `lisa:tracker-write` skill** (
195
195
  - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub. No filtering at the epic level.
196
196
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
197
197
 
198
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: an Epic is a container, not a leaf work unit. Do NOT mark it build-ready — `lisa:tracker-write` must not be passed `status:ready` for an Epic, and the Epic's lifecycle state rolls up from its children. The build-ready label is applied only in Phase 5.
199
+
198
200
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
199
201
 
200
202
  ### Phase 4: Create Stories
@@ -223,6 +225,8 @@ For each story, **invoke `lisa:tracker-write`** with:
223
225
  | Infrastructure | `ops`, `reference` |
224
226
  | Mixed / setup ("X.0") | All domains |
225
227
 
228
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: a Story is a container (it has child Sub-tasks), not a leaf work unit. Do NOT mark it build-ready — never pass `status:ready` to `lisa:tracker-write` for a Story. Its lifecycle state rolls up from its Sub-tasks. The build-ready label is applied only in Phase 5.
229
+
226
230
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
227
231
 
228
232
  ### Phase 5: Create Sub-tasks
@@ -235,6 +239,8 @@ Each sub-task MUST:
235
239
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
236
240
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
237
241
 
242
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa:tracker-write` applies `status:ready` here so downstream build intake (`lisa:tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa:tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
243
+
238
244
  Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task.
239
245
 
240
246
  ### Phase 5.5: Artifact Preservation Gate (mandatory)
@@ -186,6 +186,8 @@ For each PRD epic, **invoke the `lisa:tracker-write` skill** (do not call `creat
186
186
  - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub, and anyone working on the epic or its descendants must be able to reach the full set from one place. No filtering at the epic level. `lisa:tracker-write` Phase 4c attaches them as remote links.
187
187
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
188
188
 
189
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: an Epic is a container, not a leaf work unit. Do NOT mark it build-ready — `lisa:tracker-write` must not be passed `status:ready` for an Epic, and the Epic's lifecycle state rolls up from its children. The build-ready label is applied only in Phase 5.
190
+
189
191
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
190
192
 
191
193
  ### Phase 4: Create Stories
@@ -216,6 +218,8 @@ For each story, **invoke `lisa:tracker-write`** with:
216
218
  - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below — `lisa:tracker-write` Phase 4c attaches them as remote links
217
219
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
218
220
 
221
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: a Story is a container (it has child Sub-tasks), not a leaf work unit. Do NOT mark it build-ready — never pass `status:ready` to `lisa:tracker-write` for a Story. Its lifecycle state rolls up from its Sub-tasks. The build-ready label is applied only in Phase 5.
222
+
219
223
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
220
224
 
221
225
  **Inherit domain-matching artifacts as story remote links**. For each story, the artifact set passed to `lisa:tracker-write` should be the Phase 1.5 artifacts whose domain matches the story's scope:
@@ -239,6 +243,8 @@ Each sub-task MUST:
239
243
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`. `lisa:tracker-write` enforces single-repo scope on Sub-task; cross-repo sub-tasks will be rejected and must be split before delegation.
240
244
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
241
245
 
246
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa:tracker-write` applies `status:ready` here so downstream build intake (`lisa:tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa:tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
247
+
242
248
  **Verification plan examples by stack:**
243
249
  - **Backend APIs**: curl GraphQL/REST calls with auth token, database queries, checking audit entries
244
250
  - **Frontend web**: Playwright browser tests (login with test user, navigate, interact, screenshot)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.32.0",
3
+ "version": "2.33.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-cdk",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.32.0",
3
+ "version": "2.33.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-expo",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Expo and 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-harper-fabric",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.32.0",
3
+ "version": "2.33.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-nestjs",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.32.0",
3
+ "version": "2.33.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-rails",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop 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.32.0",
3
+ "version": "2.33.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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.32.0",
3
+ "version": "2.33.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -214,6 +214,8 @@ For each PRD epic, **invoke the `lisa:tracker-write` skill** (do not invoke `lis
214
214
  - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub. No filtering at the epic level.
215
215
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
216
216
 
217
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: an Epic is a container, not a leaf work unit. Do NOT mark it build-ready — `lisa:tracker-write` must not be passed `status:ready` for an Epic, and the Epic's lifecycle state rolls up from its children. The build-ready label is applied only in Phase 5.
218
+
217
219
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
218
220
 
219
221
  ### Phase 4: Create Stories
@@ -242,6 +244,8 @@ For each story, **invoke `lisa:tracker-write`** with:
242
244
  | Infrastructure | `ops`, `reference` |
243
245
  | Mixed / setup ("X.0") | All domains |
244
246
 
247
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: a Story is a container (it has child Sub-tasks), not a leaf work unit. Do NOT mark it build-ready — never pass `status:ready` to `lisa:tracker-write` for a Story. Its lifecycle state rolls up from its Sub-tasks. The build-ready label is applied only in Phase 5.
248
+
245
249
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
246
250
 
247
251
  ### Phase 5: Create Sub-tasks
@@ -254,6 +258,8 @@ Each sub-task MUST:
254
258
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
255
259
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
256
260
 
261
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa:tracker-write` applies `status:ready` here so downstream build intake (`lisa:tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa:tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
262
+
257
263
  Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task.
258
264
 
259
265
  ### Phase 5.5: Artifact Preservation Gate (mandatory)
@@ -195,6 +195,8 @@ For each epic identified in Phase 1, **invoke the `lisa:tracker-write` skill** (
195
195
  - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub. No filtering at the epic level.
196
196
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
197
197
 
198
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: an Epic is a container, not a leaf work unit. Do NOT mark it build-ready — `lisa:tracker-write` must not be passed `status:ready` for an Epic, and the Epic's lifecycle state rolls up from its children. The build-ready label is applied only in Phase 5.
199
+
198
200
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
199
201
 
200
202
  ### Phase 4: Create Stories
@@ -223,6 +225,8 @@ For each story, **invoke `lisa:tracker-write`** with:
223
225
  | Infrastructure | `ops`, `reference` |
224
226
  | Mixed / setup ("X.0") | All domains |
225
227
 
228
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: a Story is a container (it has child Sub-tasks), not a leaf work unit. Do NOT mark it build-ready — never pass `status:ready` to `lisa:tracker-write` for a Story. Its lifecycle state rolls up from its Sub-tasks. The build-ready label is applied only in Phase 5.
229
+
226
230
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
227
231
 
228
232
  ### Phase 5: Create Sub-tasks
@@ -235,6 +239,8 @@ Each sub-task MUST:
235
239
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`
236
240
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
237
241
 
242
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa:tracker-write` applies `status:ready` here so downstream build intake (`lisa:tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa:tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
243
+
238
244
  Sub-tasks inherit their parent story's artifacts by reference (the parent link). Do not pass the same artifact list to every sub-task.
239
245
 
240
246
  ### Phase 5.5: Artifact Preservation Gate (mandatory)
@@ -186,6 +186,8 @@ For each PRD epic, **invoke the `lisa:tracker-write` skill** (do not call `creat
186
186
  - `artifacts`: the full Phase 1.5 artifact list — every artifact, regardless of domain. The epic is the canonical hub, and anyone working on the epic or its descendants must be able to reach the full set from one place. No filtering at the epic level. `lisa:tracker-write` Phase 4c attaches them as remote links.
187
187
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
188
188
 
189
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: an Epic is a container, not a leaf work unit. Do NOT mark it build-ready — `lisa:tracker-write` must not be passed `status:ready` for an Epic, and the Epic's lifecycle state rolls up from its children. The build-ready label is applied only in Phase 5.
190
+
189
191
  Capture the returned epic key — Phase 4 needs it as the parent for stories.
190
192
 
191
193
  ### Phase 4: Create Stories
@@ -216,6 +218,8 @@ For each story, **invoke `lisa:tracker-write`** with:
216
218
  - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below — `lisa:tracker-write` Phase 4c attaches them as remote links
217
219
  - `priority`, `labels`, `components`, `fix_version`: as appropriate
218
220
 
221
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: a Story is a container (it has child Sub-tasks), not a leaf work unit. Do NOT mark it build-ready — never pass `status:ready` to `lisa:tracker-write` for a Story. Its lifecycle state rolls up from its Sub-tasks. The build-ready label is applied only in Phase 5.
222
+
219
223
  Capture each returned story key — Phase 5 needs it as the parent for sub-tasks.
220
224
 
221
225
  **Inherit domain-matching artifacts as story remote links**. For each story, the artifact set passed to `lisa:tracker-write` should be the Phase 1.5 artifacts whose domain matches the story's scope:
@@ -239,6 +243,8 @@ Each sub-task MUST:
239
243
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]`. `lisa:tracker-write` enforces single-repo scope on Sub-task; cross-repo sub-tasks will be rejected and must be split before delegation.
240
244
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
241
245
 
246
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa:tracker-write` applies `status:ready` here so downstream build intake (`lisa:tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa:tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
247
+
242
248
  **Verification plan examples by stack:**
243
249
  - **Backend APIs**: curl GraphQL/REST calls with auth token, database queries, checking audit entries
244
250
  - **Frontend web**: Playwright browser tests (login with test user, navigate, interact, screenshot)