@codyswann/lisa 2.176.8 → 2.176.9

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 (71) 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/github-build-intake/SKILL.md +25 -3
  5. package/plugins/lisa/skills/jira-build-intake/SKILL.md +25 -3
  6. package/plugins/lisa/skills/linear-build-intake/SKILL.md +25 -3
  7. package/plugins/lisa/skills/repair-intake/SKILL.md +5 -2
  8. package/plugins/lisa-agy/plugin.json +1 -1
  9. package/plugins/lisa-agy/skills/github-build-intake/SKILL.md +25 -3
  10. package/plugins/lisa-agy/skills/jira-build-intake/SKILL.md +25 -3
  11. package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +25 -3
  12. package/plugins/lisa-agy/skills/repair-intake/SKILL.md +5 -2
  13. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  16. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-copilot/skills/github-build-intake/SKILL.md +25 -3
  20. package/plugins/lisa-copilot/skills/jira-build-intake/SKILL.md +25 -3
  21. package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +25 -3
  22. package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +5 -2
  23. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cursor/skills/github-build-intake/SKILL.md +25 -3
  25. package/plugins/lisa-cursor/skills/jira-build-intake/SKILL.md +25 -3
  26. package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +25 -3
  27. package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +5 -2
  28. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-expo-agy/plugin.json +1 -1
  31. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  41. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  51. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails-agy/plugin.json +1 -1
  56. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  61. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  66. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/src/base/skills/github-build-intake/SKILL.md +25 -3
  69. package/plugins/src/base/skills/jira-build-intake/SKILL.md +25 -3
  70. package/plugins/src/base/skills/linear-build-intake/SKILL.md +25 -3
  71. package/plugins/src/base/skills/repair-intake/SKILL.md +5 -2
package/package.json CHANGED
@@ -91,7 +91,7 @@
91
91
  "ws": ">=8.20.1"
92
92
  },
93
93
  "name": "@codyswann/lisa",
94
- "version": "2.176.8",
94
+ "version": "2.176.9",
95
95
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
96
96
  "main": "dist/index.js",
97
97
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.8",
3
+ "version": "2.176.9",
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.176.8",
3
+ "version": "2.176.9",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -256,9 +256,31 @@ This is the idempotency lock — a re-entrant cycle's `--label $READY` filter wi
256
256
 
257
257
  If the relabel fails (permission, race), log under "Errors" in the cycle summary and skip this issue. **Do not invoke the build flow on an issue you didn't successfully claim.**
258
258
 
259
- #### 3c. Run the build flow
259
+ #### 3c. Return or run the build delegation
260
+
261
+ After the claim succeeds, the per-issue build must run under `lisa:github-agent` (the per-issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
262
+
263
+ - If you are the team lead/root agent, spawn or invoke `lisa:github-agent` with the issue ref and wait for its structured result.
264
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `github-agent` as a named peer.
265
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `github-agent` delegation.
266
+
267
+ Return this payload shape to the lead:
268
+
269
+ ```json
270
+ {
271
+ "type": "delegation-request",
272
+ "agent": "github-agent",
273
+ "workItem": "<org>/<repo>#<number>",
274
+ "context": {
275
+ "claimedLabel": "$CLAIMED",
276
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
277
+ },
278
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
279
+ "onBlockedOrError": "Leave the issue where github-agent left it and record the surfaced outcome"
280
+ }
281
+ ```
260
282
 
261
- Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `lisa:github-agent` owns:
283
+ `lisa:github-agent` owns:
262
284
  - Reading the full issue graph (`lisa:github-read-issue`)
263
285
  - Running its own pre-flight quality gate (`lisa:github-verify`)
264
286
  - Running issue triage (`lisa:ticket-triage`)
@@ -266,7 +288,7 @@ Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `
266
288
  - Posting progress comments via `lisa:github-sync`
267
289
  - Posting evidence via `lisa:github-evidence`
268
290
 
269
- Wait for `lisa:github-agent` to return. Capture its outcome:
291
+ The lead waits for `lisa:github-agent` to return, then resumes this scanner with the returned outcome:
270
292
 
271
293
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the issue to a `done` env status.
272
294
  - **Blocked by github-verify pre-flight gate** — `lisa:github-agent` itself relabels the issue to `status:blocked` (or removes `$CLAIMED` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.
@@ -203,9 +203,31 @@ Transition the ticket from `$READY` to `$CLAIMED` by invoking `lisa:atlassian-ac
203
203
 
204
204
  If the transition fails (permission, missing transition, race), log under "Errors" in the cycle summary and skip this ticket. **Do not invoke the build flow on a ticket you didn't successfully claim.**
205
205
 
206
- #### 3c. Run the build flow
206
+ #### 3c. Return or run the build delegation
207
+
208
+ After the claim succeeds, the per-ticket build must run under `lisa:jira-agent` (the per-ticket lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
209
+
210
+ - If you are the team lead/root agent, spawn or invoke `lisa:jira-agent` with the ticket key and wait for its structured result.
211
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `jira-agent` as a named peer.
212
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `jira-agent` delegation.
213
+
214
+ Return this payload shape to the lead:
215
+
216
+ ```json
217
+ {
218
+ "type": "delegation-request",
219
+ "agent": "jira-agent",
220
+ "workItem": "<TICKET>",
221
+ "context": {
222
+ "claimedStatus": "$CLAIMED",
223
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
224
+ },
225
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
226
+ "onBlockedOrError": "Leave the ticket where jira-agent left it and record the surfaced outcome"
227
+ }
228
+ ```
207
229
 
208
- Invoke the `lisa:jira-agent` (existing per-ticket lifecycle agent) with the ticket key. `lisa:jira-agent` owns:
230
+ `lisa:jira-agent` owns:
209
231
  - Reading the full ticket graph (`lisa:jira-read-ticket`)
210
232
  - Running its own pre-flight quality gate (`lisa:jira-verify`)
211
233
  - Running ticket triage (`lisa:ticket-triage`)
@@ -213,7 +235,7 @@ Invoke the `lisa:jira-agent` (existing per-ticket lifecycle agent) with the tick
213
235
  - Posting progress comments via `lisa:jira-sync`
214
236
  - Posting evidence via `lisa:jira-evidence`
215
237
 
216
- Wait for `lisa:jira-agent` to return. Capture its outcome:
238
+ The lead waits for `lisa:jira-agent` to return, then resumes this scanner with the returned outcome:
217
239
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the ticket to a `done` env status.
218
240
  - **Blocked by jira-verify pre-flight gate** — `lisa:jira-agent` itself transitions the ticket to `Blocked` and reassigns to Reporter. This is correct and expected — let it stand. Record the outcome and move on.
219
241
  - **Duplicate already fixed** — `lisa:jira-agent` / `lisa:ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical ticket reference and empirical base-branch evidence. Post the triage finding, ensure the native `duplicates <canonical>` link exists, transition to the terminal `$DONE` status with resolution `Duplicate`, and do not open a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical ticket promotes and that recurrence is tracked by the canonical ticket; do not reopen this duplicate for that recurrence.
@@ -196,9 +196,31 @@ This is the idempotency lock — a re-entrant cycle's `label: $READY` filter wil
196
196
 
197
197
  If the relabel fails (permission, race), record under "Errors" and skip. **Do not invoke the build flow on an Issue you didn't successfully claim.**
198
198
 
199
- #### 3c. Run the build flow
199
+ #### 3c. Return or run the build delegation
200
+
201
+ After the claim succeeds, the per-Issue build must run under `lisa:linear-agent` (the per-Issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
202
+
203
+ - If you are the team lead/root agent, spawn or invoke `lisa:linear-agent` with the Issue identifier and wait for its structured result.
204
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `linear-agent` as a named peer.
205
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `linear-agent` delegation.
206
+
207
+ Return this payload shape to the lead:
208
+
209
+ ```json
210
+ {
211
+ "type": "delegation-request",
212
+ "agent": "linear-agent",
213
+ "workItem": "<ISSUE-ID>",
214
+ "context": {
215
+ "claimedLabel": "$CLAIMED",
216
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
217
+ },
218
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
219
+ "onBlockedOrError": "Leave the Issue where linear-agent left it and record the surfaced outcome"
220
+ }
221
+ ```
200
222
 
201
- Invoke `lisa:linear-agent` (per-Issue lifecycle agent) with the Issue identifier. `lisa:linear-agent` owns:
223
+ `lisa:linear-agent` owns:
202
224
  - Reading the full Issue graph (`lisa:linear-read-issue`)
203
225
  - Running its own pre-flight quality gate (`lisa:linear-verify`)
204
226
  - Running ticket triage (`lisa:ticket-triage`)
@@ -206,7 +228,7 @@ Invoke `lisa:linear-agent` (per-Issue lifecycle agent) with the Issue identifier
206
228
  - Posting progress comments via `lisa:linear-sync`
207
229
  - Posting evidence via `lisa:linear-evidence`
208
230
 
209
- Wait for the agent to return. Capture its outcome:
231
+ The lead waits for `lisa:linear-agent` to return, then resumes this scanner with the returned outcome:
210
232
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the Issue to a `done` env status.
211
233
  - **Blocked by linear-verify pre-flight gate** — `lisa:linear-agent` itself relabels to `status:blocked` and assigns to creator. Let it stand. Record and move on.
212
234
  - **Duplicate already fixed** — `lisa:linear-agent` / `lisa:ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical Issue reference and empirical base-branch evidence. Post the triage finding, ensure the native `duplicates <canonical>` relationship exists when Linear exposes it (otherwise leave an explicit relation/comment reference), apply the terminal `$DONE` label, move the native Issue to the configured canceled-as-duplicate or completed terminal state, and do not open a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical Issue promotes and that recurrence is tracked by the canonical Issue; do not reopen this duplicate for that recurrence.
@@ -334,8 +334,11 @@ If the PR is healthy in-flight and no blocker is found, the work simply died mid
334
334
  the vendor build-intake runs**, skipping the claim transition (the item is already `claimed`):
335
335
 
336
336
  1. Dispatch the item to the vendor agent — `lisa:jira-agent` / `lisa:github-agent` /
337
- `lisa:linear-agent` (matching the queue's tracker) — with the item ref. This resumes the work
338
- in place, preserving its existing branch/PR and prior comments.
337
+ `lisa:linear-agent` (matching the queue's tracker) — with the item ref. If repair-intake is
338
+ running as a teammate rather than the lead/root agent, return a structured `delegation-request`
339
+ to the lead instead of spawning that named peer yourself; only the lead can add named teammates
340
+ in Claude's flat roster. This resumes the work in place, preserving its existing branch/PR and
341
+ prior comments.
339
342
  2. **On agent success**, apply the scanner's post-agent transition yourself: `claimed → done`,
340
343
  where `done` is **env-resolved** exactly as `lisa:<tracker>-build-intake` resolves it (per
341
344
  `config-resolution` env-keyed `done`: explicit `target_env` arg wins; else reverse-lookup the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.8",
3
+ "version": "2.176.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -256,9 +256,31 @@ This is the idempotency lock — a re-entrant cycle's `--label $READY` filter wi
256
256
 
257
257
  If the relabel fails (permission, race), log under "Errors" in the cycle summary and skip this issue. **Do not invoke the build flow on an issue you didn't successfully claim.**
258
258
 
259
- #### 3c. Run the build flow
259
+ #### 3c. Return or run the build delegation
260
+
261
+ After the claim succeeds, the per-issue build must run under `lisa:github-agent` (the per-issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
262
+
263
+ - If you are the team lead/root agent, spawn or invoke `lisa:github-agent` with the issue ref and wait for its structured result.
264
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `github-agent` as a named peer.
265
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `github-agent` delegation.
266
+
267
+ Return this payload shape to the lead:
268
+
269
+ ```json
270
+ {
271
+ "type": "delegation-request",
272
+ "agent": "github-agent",
273
+ "workItem": "<org>/<repo>#<number>",
274
+ "context": {
275
+ "claimedLabel": "$CLAIMED",
276
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
277
+ },
278
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
279
+ "onBlockedOrError": "Leave the issue where github-agent left it and record the surfaced outcome"
280
+ }
281
+ ```
260
282
 
261
- Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `lisa:github-agent` owns:
283
+ `lisa:github-agent` owns:
262
284
  - Reading the full issue graph (`lisa:github-read-issue`)
263
285
  - Running its own pre-flight quality gate (`lisa:github-verify`)
264
286
  - Running issue triage (`lisa:ticket-triage`)
@@ -266,7 +288,7 @@ Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `
266
288
  - Posting progress comments via `lisa:github-sync`
267
289
  - Posting evidence via `lisa:github-evidence`
268
290
 
269
- Wait for `lisa:github-agent` to return. Capture its outcome:
291
+ The lead waits for `lisa:github-agent` to return, then resumes this scanner with the returned outcome:
270
292
 
271
293
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the issue to a `done` env status.
272
294
  - **Blocked by github-verify pre-flight gate** — `lisa:github-agent` itself relabels the issue to `status:blocked` (or removes `$CLAIMED` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.
@@ -203,9 +203,31 @@ Transition the ticket from `$READY` to `$CLAIMED` by invoking `lisa:atlassian-ac
203
203
 
204
204
  If the transition fails (permission, missing transition, race), log under "Errors" in the cycle summary and skip this ticket. **Do not invoke the build flow on a ticket you didn't successfully claim.**
205
205
 
206
- #### 3c. Run the build flow
206
+ #### 3c. Return or run the build delegation
207
+
208
+ After the claim succeeds, the per-ticket build must run under `lisa:jira-agent` (the per-ticket lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
209
+
210
+ - If you are the team lead/root agent, spawn or invoke `lisa:jira-agent` with the ticket key and wait for its structured result.
211
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `jira-agent` as a named peer.
212
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `jira-agent` delegation.
213
+
214
+ Return this payload shape to the lead:
215
+
216
+ ```json
217
+ {
218
+ "type": "delegation-request",
219
+ "agent": "jira-agent",
220
+ "workItem": "<TICKET>",
221
+ "context": {
222
+ "claimedStatus": "$CLAIMED",
223
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
224
+ },
225
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
226
+ "onBlockedOrError": "Leave the ticket where jira-agent left it and record the surfaced outcome"
227
+ }
228
+ ```
207
229
 
208
- Invoke the `lisa:jira-agent` (existing per-ticket lifecycle agent) with the ticket key. `lisa:jira-agent` owns:
230
+ `lisa:jira-agent` owns:
209
231
  - Reading the full ticket graph (`lisa:jira-read-ticket`)
210
232
  - Running its own pre-flight quality gate (`lisa:jira-verify`)
211
233
  - Running ticket triage (`lisa:ticket-triage`)
@@ -213,7 +235,7 @@ Invoke the `lisa:jira-agent` (existing per-ticket lifecycle agent) with the tick
213
235
  - Posting progress comments via `lisa:jira-sync`
214
236
  - Posting evidence via `lisa:jira-evidence`
215
237
 
216
- Wait for `lisa:jira-agent` to return. Capture its outcome:
238
+ The lead waits for `lisa:jira-agent` to return, then resumes this scanner with the returned outcome:
217
239
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the ticket to a `done` env status.
218
240
  - **Blocked by jira-verify pre-flight gate** — `lisa:jira-agent` itself transitions the ticket to `Blocked` and reassigns to Reporter. This is correct and expected — let it stand. Record the outcome and move on.
219
241
  - **Duplicate already fixed** — `lisa:jira-agent` / `lisa:ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical ticket reference and empirical base-branch evidence. Post the triage finding, ensure the native `duplicates <canonical>` link exists, transition to the terminal `$DONE` status with resolution `Duplicate`, and do not open a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical ticket promotes and that recurrence is tracked by the canonical ticket; do not reopen this duplicate for that recurrence.
@@ -196,9 +196,31 @@ This is the idempotency lock — a re-entrant cycle's `label: $READY` filter wil
196
196
 
197
197
  If the relabel fails (permission, race), record under "Errors" and skip. **Do not invoke the build flow on an Issue you didn't successfully claim.**
198
198
 
199
- #### 3c. Run the build flow
199
+ #### 3c. Return or run the build delegation
200
+
201
+ After the claim succeeds, the per-Issue build must run under `lisa:linear-agent` (the per-Issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
202
+
203
+ - If you are the team lead/root agent, spawn or invoke `lisa:linear-agent` with the Issue identifier and wait for its structured result.
204
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `linear-agent` as a named peer.
205
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `linear-agent` delegation.
206
+
207
+ Return this payload shape to the lead:
208
+
209
+ ```json
210
+ {
211
+ "type": "delegation-request",
212
+ "agent": "linear-agent",
213
+ "workItem": "<ISSUE-ID>",
214
+ "context": {
215
+ "claimedLabel": "$CLAIMED",
216
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
217
+ },
218
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
219
+ "onBlockedOrError": "Leave the Issue where linear-agent left it and record the surfaced outcome"
220
+ }
221
+ ```
200
222
 
201
- Invoke `lisa:linear-agent` (per-Issue lifecycle agent) with the Issue identifier. `lisa:linear-agent` owns:
223
+ `lisa:linear-agent` owns:
202
224
  - Reading the full Issue graph (`lisa:linear-read-issue`)
203
225
  - Running its own pre-flight quality gate (`lisa:linear-verify`)
204
226
  - Running ticket triage (`lisa:ticket-triage`)
@@ -206,7 +228,7 @@ Invoke `lisa:linear-agent` (per-Issue lifecycle agent) with the Issue identifier
206
228
  - Posting progress comments via `lisa:linear-sync`
207
229
  - Posting evidence via `lisa:linear-evidence`
208
230
 
209
- Wait for the agent to return. Capture its outcome:
231
+ The lead waits for `lisa:linear-agent` to return, then resumes this scanner with the returned outcome:
210
232
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the Issue to a `done` env status.
211
233
  - **Blocked by linear-verify pre-flight gate** — `lisa:linear-agent` itself relabels to `status:blocked` and assigns to creator. Let it stand. Record and move on.
212
234
  - **Duplicate already fixed** — `lisa:linear-agent` / `lisa:ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical Issue reference and empirical base-branch evidence. Post the triage finding, ensure the native `duplicates <canonical>` relationship exists when Linear exposes it (otherwise leave an explicit relation/comment reference), apply the terminal `$DONE` label, move the native Issue to the configured canceled-as-duplicate or completed terminal state, and do not open a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical Issue promotes and that recurrence is tracked by the canonical Issue; do not reopen this duplicate for that recurrence.
@@ -334,8 +334,11 @@ If the PR is healthy in-flight and no blocker is found, the work simply died mid
334
334
  the vendor build-intake runs**, skipping the claim transition (the item is already `claimed`):
335
335
 
336
336
  1. Dispatch the item to the vendor agent — `lisa:jira-agent` / `lisa:github-agent` /
337
- `lisa:linear-agent` (matching the queue's tracker) — with the item ref. This resumes the work
338
- in place, preserving its existing branch/PR and prior comments.
337
+ `lisa:linear-agent` (matching the queue's tracker) — with the item ref. If repair-intake is
338
+ running as a teammate rather than the lead/root agent, return a structured `delegation-request`
339
+ to the lead instead of spawning that named peer yourself; only the lead can add named teammates
340
+ in Claude's flat roster. This resumes the work in place, preserving its existing branch/PR and
341
+ prior comments.
339
342
  2. **On agent success**, apply the scanner's post-agent transition yourself: `claimed → done`,
340
343
  where `done` is **env-resolved** exactly as `lisa:<tracker>-build-intake` resolves it (per
341
344
  `config-resolution` env-keyed `done`: explicit `target_env` arg wins; else reverse-lookup the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.176.8",
3
+ "version": "2.176.9",
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.176.8",
3
+ "version": "2.176.9",
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-cdk",
3
- "version": "2.176.8",
3
+ "version": "2.176.9",
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.176.8",
3
+ "version": "2.176.9",
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.176.8",
3
+ "version": "2.176.9",
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",
3
- "version": "2.176.8",
3
+ "version": "2.176.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -256,9 +256,31 @@ This is the idempotency lock — a re-entrant cycle's `--label $READY` filter wi
256
256
 
257
257
  If the relabel fails (permission, race), log under "Errors" in the cycle summary and skip this issue. **Do not invoke the build flow on an issue you didn't successfully claim.**
258
258
 
259
- #### 3c. Run the build flow
259
+ #### 3c. Return or run the build delegation
260
+
261
+ After the claim succeeds, the per-issue build must run under `lisa:github-agent` (the per-issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
262
+
263
+ - If you are the team lead/root agent, spawn or invoke `lisa:github-agent` with the issue ref and wait for its structured result.
264
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `github-agent` as a named peer.
265
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `github-agent` delegation.
266
+
267
+ Return this payload shape to the lead:
268
+
269
+ ```json
270
+ {
271
+ "type": "delegation-request",
272
+ "agent": "github-agent",
273
+ "workItem": "<org>/<repo>#<number>",
274
+ "context": {
275
+ "claimedLabel": "$CLAIMED",
276
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
277
+ },
278
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
279
+ "onBlockedOrError": "Leave the issue where github-agent left it and record the surfaced outcome"
280
+ }
281
+ ```
260
282
 
261
- Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `lisa:github-agent` owns:
283
+ `lisa:github-agent` owns:
262
284
  - Reading the full issue graph (`lisa:github-read-issue`)
263
285
  - Running its own pre-flight quality gate (`lisa:github-verify`)
264
286
  - Running issue triage (`lisa:ticket-triage`)
@@ -266,7 +288,7 @@ Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `
266
288
  - Posting progress comments via `lisa:github-sync`
267
289
  - Posting evidence via `lisa:github-evidence`
268
290
 
269
- Wait for `lisa:github-agent` to return. Capture its outcome:
291
+ The lead waits for `lisa:github-agent` to return, then resumes this scanner with the returned outcome:
270
292
 
271
293
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the issue to a `done` env status.
272
294
  - **Blocked by github-verify pre-flight gate** — `lisa:github-agent` itself relabels the issue to `status:blocked` (or removes `$CLAIMED` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.
@@ -203,9 +203,31 @@ Transition the ticket from `$READY` to `$CLAIMED` by invoking `lisa:atlassian-ac
203
203
 
204
204
  If the transition fails (permission, missing transition, race), log under "Errors" in the cycle summary and skip this ticket. **Do not invoke the build flow on a ticket you didn't successfully claim.**
205
205
 
206
- #### 3c. Run the build flow
206
+ #### 3c. Return or run the build delegation
207
+
208
+ After the claim succeeds, the per-ticket build must run under `lisa:jira-agent` (the per-ticket lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
209
+
210
+ - If you are the team lead/root agent, spawn or invoke `lisa:jira-agent` with the ticket key and wait for its structured result.
211
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `jira-agent` as a named peer.
212
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `jira-agent` delegation.
213
+
214
+ Return this payload shape to the lead:
215
+
216
+ ```json
217
+ {
218
+ "type": "delegation-request",
219
+ "agent": "jira-agent",
220
+ "workItem": "<TICKET>",
221
+ "context": {
222
+ "claimedStatus": "$CLAIMED",
223
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
224
+ },
225
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
226
+ "onBlockedOrError": "Leave the ticket where jira-agent left it and record the surfaced outcome"
227
+ }
228
+ ```
207
229
 
208
- Invoke the `lisa:jira-agent` (existing per-ticket lifecycle agent) with the ticket key. `lisa:jira-agent` owns:
230
+ `lisa:jira-agent` owns:
209
231
  - Reading the full ticket graph (`lisa:jira-read-ticket`)
210
232
  - Running its own pre-flight quality gate (`lisa:jira-verify`)
211
233
  - Running ticket triage (`lisa:ticket-triage`)
@@ -213,7 +235,7 @@ Invoke the `lisa:jira-agent` (existing per-ticket lifecycle agent) with the tick
213
235
  - Posting progress comments via `lisa:jira-sync`
214
236
  - Posting evidence via `lisa:jira-evidence`
215
237
 
216
- Wait for `lisa:jira-agent` to return. Capture its outcome:
238
+ The lead waits for `lisa:jira-agent` to return, then resumes this scanner with the returned outcome:
217
239
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the ticket to a `done` env status.
218
240
  - **Blocked by jira-verify pre-flight gate** — `lisa:jira-agent` itself transitions the ticket to `Blocked` and reassigns to Reporter. This is correct and expected — let it stand. Record the outcome and move on.
219
241
  - **Duplicate already fixed** — `lisa:jira-agent` / `lisa:ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical ticket reference and empirical base-branch evidence. Post the triage finding, ensure the native `duplicates <canonical>` link exists, transition to the terminal `$DONE` status with resolution `Duplicate`, and do not open a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical ticket promotes and that recurrence is tracked by the canonical ticket; do not reopen this duplicate for that recurrence.
@@ -196,9 +196,31 @@ This is the idempotency lock — a re-entrant cycle's `label: $READY` filter wil
196
196
 
197
197
  If the relabel fails (permission, race), record under "Errors" and skip. **Do not invoke the build flow on an Issue you didn't successfully claim.**
198
198
 
199
- #### 3c. Run the build flow
199
+ #### 3c. Return or run the build delegation
200
+
201
+ After the claim succeeds, the per-Issue build must run under `lisa:linear-agent` (the per-Issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
202
+
203
+ - If you are the team lead/root agent, spawn or invoke `lisa:linear-agent` with the Issue identifier and wait for its structured result.
204
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `linear-agent` as a named peer.
205
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `linear-agent` delegation.
206
+
207
+ Return this payload shape to the lead:
208
+
209
+ ```json
210
+ {
211
+ "type": "delegation-request",
212
+ "agent": "linear-agent",
213
+ "workItem": "<ISSUE-ID>",
214
+ "context": {
215
+ "claimedLabel": "$CLAIMED",
216
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
217
+ },
218
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
219
+ "onBlockedOrError": "Leave the Issue where linear-agent left it and record the surfaced outcome"
220
+ }
221
+ ```
200
222
 
201
- Invoke `lisa:linear-agent` (per-Issue lifecycle agent) with the Issue identifier. `lisa:linear-agent` owns:
223
+ `lisa:linear-agent` owns:
202
224
  - Reading the full Issue graph (`lisa:linear-read-issue`)
203
225
  - Running its own pre-flight quality gate (`lisa:linear-verify`)
204
226
  - Running ticket triage (`lisa:ticket-triage`)
@@ -206,7 +228,7 @@ Invoke `lisa:linear-agent` (per-Issue lifecycle agent) with the Issue identifier
206
228
  - Posting progress comments via `lisa:linear-sync`
207
229
  - Posting evidence via `lisa:linear-evidence`
208
230
 
209
- Wait for the agent to return. Capture its outcome:
231
+ The lead waits for `lisa:linear-agent` to return, then resumes this scanner with the returned outcome:
210
232
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the Issue to a `done` env status.
211
233
  - **Blocked by linear-verify pre-flight gate** — `lisa:linear-agent` itself relabels to `status:blocked` and assigns to creator. Let it stand. Record and move on.
212
234
  - **Duplicate already fixed** — `lisa:linear-agent` / `lisa:ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical Issue reference and empirical base-branch evidence. Post the triage finding, ensure the native `duplicates <canonical>` relationship exists when Linear exposes it (otherwise leave an explicit relation/comment reference), apply the terminal `$DONE` label, move the native Issue to the configured canceled-as-duplicate or completed terminal state, and do not open a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical Issue promotes and that recurrence is tracked by the canonical Issue; do not reopen this duplicate for that recurrence.
@@ -334,8 +334,11 @@ If the PR is healthy in-flight and no blocker is found, the work simply died mid
334
334
  the vendor build-intake runs**, skipping the claim transition (the item is already `claimed`):
335
335
 
336
336
  1. Dispatch the item to the vendor agent — `lisa:jira-agent` / `lisa:github-agent` /
337
- `lisa:linear-agent` (matching the queue's tracker) — with the item ref. This resumes the work
338
- in place, preserving its existing branch/PR and prior comments.
337
+ `lisa:linear-agent` (matching the queue's tracker) — with the item ref. If repair-intake is
338
+ running as a teammate rather than the lead/root agent, return a structured `delegation-request`
339
+ to the lead instead of spawning that named peer yourself; only the lead can add named teammates
340
+ in Claude's flat roster. This resumes the work in place, preserving its existing branch/PR and
341
+ prior comments.
339
342
  2. **On agent success**, apply the scanner's post-agent transition yourself: `claimed → done`,
340
343
  where `done` is **env-resolved** exactly as `lisa:<tracker>-build-intake` resolves it (per
341
344
  `config-resolution` env-keyed `done`: explicit `target_env` arg wins; else reverse-lookup the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.8",
3
+ "version": "2.176.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -256,9 +256,31 @@ This is the idempotency lock — a re-entrant cycle's `--label $READY` filter wi
256
256
 
257
257
  If the relabel fails (permission, race), log under "Errors" in the cycle summary and skip this issue. **Do not invoke the build flow on an issue you didn't successfully claim.**
258
258
 
259
- #### 3c. Run the build flow
259
+ #### 3c. Return or run the build delegation
260
+
261
+ After the claim succeeds, the per-issue build must run under `lisa:github-agent` (the per-issue lifecycle agent), but a teammate running this skill must not spawn that named peer itself. Claude teams are flat: only the lead can add a named teammate. Therefore:
262
+
263
+ - If you are the team lead/root agent, spawn or invoke `lisa:github-agent` with the issue ref and wait for its structured result.
264
+ - If you are a teammate, stop this skill's direct work and return a structured `delegation-request` to the lead instead of calling `Agent` with `name` or otherwise spawning `github-agent` as a named peer.
265
+ - A private anonymous helper is allowed only when the helper is not a roster peer and the `Agent` call omits `name`; it must not replace this `github-agent` delegation.
266
+
267
+ Return this payload shape to the lead:
268
+
269
+ ```json
270
+ {
271
+ "type": "delegation-request",
272
+ "agent": "github-agent",
273
+ "workItem": "<org>/<repo>#<number>",
274
+ "context": {
275
+ "claimedLabel": "$CLAIMED",
276
+ "doneResolution": "Resolve $DONE from the PR base branch per this skill's Workflow resolution section"
277
+ },
278
+ "onSuccess": "Confirm the returned PR is merged, then apply Phase 3d and Phase 3d.1",
279
+ "onBlockedOrError": "Leave the issue where github-agent left it and record the surfaced outcome"
280
+ }
281
+ ```
260
282
 
261
- Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `lisa:github-agent` owns:
283
+ `lisa:github-agent` owns:
262
284
  - Reading the full issue graph (`lisa:github-read-issue`)
263
285
  - Running its own pre-flight quality gate (`lisa:github-verify`)
264
286
  - Running issue triage (`lisa:ticket-triage`)
@@ -266,7 +288,7 @@ Invoke `lisa:github-agent` (the per-issue lifecycle agent) with the issue ref. `
266
288
  - Posting progress comments via `lisa:github-sync`
267
289
  - Posting evidence via `lisa:github-evidence`
268
290
 
269
- Wait for `lisa:github-agent` to return. Capture its outcome:
291
+ The lead waits for `lisa:github-agent` to return, then resumes this scanner with the returned outcome:
270
292
 
271
293
  - **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the issue to a `done` env status.
272
294
  - **Blocked by github-verify pre-flight gate** — `lisa:github-agent` itself relabels the issue to `status:blocked` (or removes `$CLAIMED` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.