@codyswann/lisa 2.176.8 → 2.176.10

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 (102) 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/agents/github-agent.md +11 -9
  5. package/plugins/lisa/agents/jira-agent.md +8 -7
  6. package/plugins/lisa/agents/linear-agent.md +7 -6
  7. package/plugins/lisa/rules/eager/pre-flight-autofill.md +65 -0
  8. package/plugins/lisa/rules/reference/base-rules.md +1 -1
  9. package/plugins/lisa/rules/reference/config-resolution.md +2 -2
  10. package/plugins/lisa/rules/reference/pre-flight-autofill.md +142 -0
  11. package/plugins/lisa/skills/github-build-intake/SKILL.md +25 -3
  12. package/plugins/lisa/skills/jira-build-intake/SKILL.md +25 -3
  13. package/plugins/lisa/skills/linear-build-intake/SKILL.md +25 -3
  14. package/plugins/lisa/skills/repair-intake/SKILL.md +5 -2
  15. package/plugins/lisa-agy/agents/github-agent.md +11 -9
  16. package/plugins/lisa-agy/agents/jira-agent.md +8 -7
  17. package/plugins/lisa-agy/agents/linear-agent.md +7 -6
  18. package/plugins/lisa-agy/plugin.json +1 -1
  19. package/plugins/lisa-agy/skills/github-build-intake/SKILL.md +25 -3
  20. package/plugins/lisa-agy/skills/jira-build-intake/SKILL.md +25 -3
  21. package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +25 -3
  22. package/plugins/lisa-agy/skills/repair-intake/SKILL.md +5 -2
  23. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  26. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-copilot/agents/github-agent.agent.md +11 -9
  30. package/plugins/lisa-copilot/agents/jira-agent.agent.md +8 -7
  31. package/plugins/lisa-copilot/agents/linear-agent.agent.md +7 -6
  32. package/plugins/lisa-copilot/rules/eager/pre-flight-autofill.md +65 -0
  33. package/plugins/lisa-copilot/rules/reference/base-rules.md +1 -1
  34. package/plugins/lisa-copilot/rules/reference/config-resolution.md +2 -2
  35. package/plugins/lisa-copilot/rules/reference/pre-flight-autofill.md +142 -0
  36. package/plugins/lisa-copilot/skills/github-build-intake/SKILL.md +25 -3
  37. package/plugins/lisa-copilot/skills/jira-build-intake/SKILL.md +25 -3
  38. package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +25 -3
  39. package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +5 -2
  40. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-cursor/agents/github-agent.md +11 -9
  42. package/plugins/lisa-cursor/agents/jira-agent.md +8 -7
  43. package/plugins/lisa-cursor/agents/linear-agent.md +7 -6
  44. package/plugins/lisa-cursor/rules/base-rules-reference.mdc +1 -1
  45. package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +2 -2
  46. package/plugins/lisa-cursor/rules/pre-flight-autofill-reference.mdc +147 -0
  47. package/plugins/lisa-cursor/rules/pre-flight-autofill.mdc +70 -0
  48. package/plugins/lisa-cursor/skills/github-build-intake/SKILL.md +25 -3
  49. package/plugins/lisa-cursor/skills/jira-build-intake/SKILL.md +25 -3
  50. package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +25 -3
  51. package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +5 -2
  52. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-expo-agy/plugin.json +1 -1
  55. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  60. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  65. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  70. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  75. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-rails-agy/plugin.json +1 -1
  80. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  85. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  89. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  90. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  92. package/plugins/src/base/agents/github-agent.md +11 -9
  93. package/plugins/src/base/agents/jira-agent.md +8 -7
  94. package/plugins/src/base/agents/linear-agent.md +7 -6
  95. package/plugins/src/base/rules/eager/pre-flight-autofill.md +65 -0
  96. package/plugins/src/base/rules/reference/base-rules.md +1 -1
  97. package/plugins/src/base/rules/reference/config-resolution.md +2 -2
  98. package/plugins/src/base/rules/reference/pre-flight-autofill.md +142 -0
  99. package/plugins/src/base/skills/github-build-intake/SKILL.md +25 -3
  100. package/plugins/src/base/skills/jira-build-intake/SKILL.md +25 -3
  101. package/plugins/src/base/skills/linear-build-intake/SKILL.md +25 -3
  102. package/plugins/src/base/skills/repair-intake/SKILL.md +5 -2
@@ -0,0 +1,147 @@
1
+ ---
2
+ description: "Pre-Flight Spec Autofill (Draft-Then-Block)"
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Pre-Flight Spec Autofill (Draft-Then-Block)
7
+
8
+ When the pre-flight gate (`*-agent` Step 2) returns `FAIL` on **ticket-quality**
9
+ gaps, the agent does **not** bounce a raw "here is everything you must write"
10
+ checklist back to the reporter. Most "missing required spec content" gaps are
11
+ **authorable** from material already on the work item (title, description,
12
+ screenshots, design links, reproduction steps) plus the codebase. The agent
13
+ drafts a best-effort version of every authorable gap, writes it into the work
14
+ item as clearly-labeled **assumptions and recommendations**, and only **then**
15
+ blocks — turning the human ask from *"author all of this from scratch"* into
16
+ *"confirm or correct my draft, then flip it back to Ready."*
17
+
18
+ This is the same shape as the `repo-scope-split` exception: the agent does the
19
+ work it can and reserves the human for what only a human can decide. It does
20
+ **not** widen the gate — every required section must still exist before build;
21
+ autofill just supplies a defensible first draft instead of an empty demand.
22
+
23
+ ## Why this exists
24
+
25
+ The build + screenshot-diff verification pipeline needs **structured,
26
+ machine-readable** sections — Gherkin acceptance criteria, a Validation Journey
27
+ with `[SCREENSHOT:]`/`[EVIDENCE:]` markers, Sign-in Required, Target Backend
28
+ Environment, Repository. A bug report routinely contains all of that
29
+ *information* in prose, screenshots, or a Figma link, but not the *structure*.
30
+ Dumping the checklist straight back produces a ping-pong loop: the item bounces
31
+ `Ready → Blocked → Ready` on every intake cycle because nobody re-types the
32
+ existing information into headings, and the reporter reasonably objects that the
33
+ information is already there. Drafting the structure breaks the loop and
34
+ respects the reporter's time — the human reviews a draft instead of authoring a
35
+ spec.
36
+
37
+ ## Two tiers of gap
38
+
39
+ **Tier A — authorable (always attempt a draft):**
40
+
41
+ - **Technical Approach** — locate the affected component/files in the repo (the
42
+ title and description usually name the surface, e.g. "Player modal"); state
43
+ which files likely change and the expected layout. Flag inferences as
44
+ assumptions.
45
+ - **Out of Scope** — a one-line boundary derived from the fix list.
46
+ - **Acceptance Criteria (Gherkin)** — convert each described fix / expected
47
+ behavior into `Given/When/Then`. One scenario per discrete fix.
48
+ - **Expected-vs-actual + environment** — restate the bug as explicit expected
49
+ vs actual, naming the environment the screenshots/description came from.
50
+ - **Repository** — resolve per `config-resolution` repo scoping and state it.
51
+ - **Relationship Search** — actually **run** the git + tracker search; record
52
+ the queries and results and link anything found. Do not fabricate a
53
+ "none found" note.
54
+ - **Validation Journey (draft)** — run the vendor `*-add-journey` skill to draft
55
+ the click-path, markers, and viewports from the reproduction steps. This is a
56
+ draft for human approval, not the final ratified contract.
57
+ - **Target Backend Environment** — recommend a default from `deploy.branches` /
58
+ config (the backend the FE points at for verification) and state it as a
59
+ recommendation.
60
+
61
+ **Tier B — irreducibly human (cannot invent — but still propose a default):**
62
+
63
+ - **Real credentials / access** that exist nowhere on the item or in the repo's
64
+ known test-user docs. (If credentials are present in prose, that is Tier A —
65
+ lift them into a Sign-in Required section.)
66
+ - **A genuine product / scoping decision** with no defensible default — the
67
+ exact expected behavior when the ticket is internally contradictory or the
68
+ design reference is missing.
69
+
70
+ For Tier B, still propose a **recommended default** wherever one is defensible,
71
+ and ask a **specific question** only where none is. Never reduce a Tier B item
72
+ to a bare demand.
73
+
74
+ ## Procedure
75
+
76
+ 1. **Enumerate the FAIL categories** from `*-verify`.
77
+ 2. **Run `repo-scope-split` first** if S10 (single-repo scope) failed — that is
78
+ a split, not an autofill. Autofill handles the remaining quality gaps.
79
+ 3. **Draft each Tier-A gap** grounded in the work-item material + codebase.
80
+ Every inferred value is explicitly tagged as an assumption/recommendation
81
+ (lead the drafted block with a note: *"Drafted by Claude — assumptions
82
+ flagged inline; please confirm or correct."*). **Never overwrite
83
+ human-authored prose** — add the missing structured sections; if a section
84
+ exists but is thin, augment it without discarding the human's words.
85
+ 4. **Write the draft into the work item** via the vendor write skill
86
+ (`jira-write-ticket` / `github-write-issue` / `linear-write-issue`) so
87
+ relationship and metadata gates stay enforced. Draft the Validation Journey
88
+ via the vendor `*-add-journey` skill.
89
+ 5. **Re-run `*-verify`.** The structural gates should now PASS (the content
90
+ exists, even if assumed). Any gate that still FAILs is Tier B — leave it and
91
+ name it precisely in the comment.
92
+ 6. **Block as usual** — transition/relabel to the configured `blocked` status,
93
+ add the `human_needed` marker, reassign to the **Reporter** — but post the
94
+ **confirmation comment** (below), not a remediation checklist.
95
+ 7. **Idempotency / loop-safety.** If the item already carries the agent's draft
96
+ from a prior cycle, do **not** redraft from scratch — refine only the gaps
97
+ still failing and refresh the confirmation comment. When the reporter flips
98
+ the item back to Ready, the next claim re-runs `*-verify`; if it now PASSes,
99
+ build proceeds on the draft the reporter approved by re-readying it. That is
100
+ what breaks the `Ready ↔ Blocked` loop.
101
+
102
+ ## The confirmation comment (replaces the remediation checklist)
103
+
104
+ - **Disclose**: posted by Claude (AI build agent); identify the content as a
105
+ draft.
106
+ - **Frame it**: the item had the right information but lacked the structured
107
+ sections the pipeline needs, so the agent drafted them — the report's validity
108
+ was never in question.
109
+ - **One line per drafted section**, naming the section and the key assumption
110
+ (e.g. *"Acceptance Criteria — drafted 4 Gherkin scenarios from the fix list;
111
+ assumed 'Search result' restores the prior query terms."*).
112
+ - **Tier-B items still required**, each as a specific question with a
113
+ recommended default where one exists.
114
+ - **Close with the action**: *"Review the drafted sections in the description.
115
+ Correct anything wrong, then flip back to Ready and it builds immediately — or
116
+ reply with corrections and I'll revise."* Keep the `human_needed` marker until
117
+ then.
118
+
119
+ ## When you genuinely cannot autofill (fall back to the plain block)
120
+
121
+ If the item is so underspecified that drafting would be fabrication — no fix or
122
+ expected behavior described, no usable design reference, an uninformative title,
123
+ and the codebase gives no anchor — block as before. Even then, phrase **each gap
124
+ as a specific question** and propose a default wherever one is defensible (the
125
+ "Human-Needed is a last resort" principle). Never bounce a bare checklist when a
126
+ defensible draft is possible.
127
+
128
+ ## Disclosure & safety
129
+
130
+ - Agent-drafted content is **always attributed to Claude and marked as
131
+ assumptions**, so a human never mistakes a guess for their own ratified spec.
132
+ - The agent writes **spec/criteria, never code**, at this gate. Drafting
133
+ acceptance criteria and a validation journey is authoring, not implementation
134
+ — explicitly permitted here. This **supersedes** the older "the build agent
135
+ does not author the missing spec content" stance, which produced the
136
+ bounce-loop.
137
+
138
+ ## Vendor mechanics
139
+
140
+ - **JIRA** — draft sections via `jira-write-ticket`; Validation Journey via
141
+ `jira-add-journey`; block + label + reassign + comment via the `jira-agent`
142
+ Step 2 exception (`transitionJiraIssue`, `editJiraIssue` for the label and
143
+ assignee, `addCommentToJiraIssue`).
144
+ - **GitHub** — `github-write-issue`; `github-add-journey`; relabel + reassign +
145
+ comment via `gh`.
146
+ - **Linear** — `linear-write-issue`; `linear-add-journey`; `save_issue` +
147
+ `save_comment`.
@@ -0,0 +1,70 @@
1
+ ---
2
+ description: "Pre-Flight Spec Autofill — Draft-Then-Block (load-bearing)"
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Pre-Flight Spec Autofill — Draft-Then-Block (load-bearing)
7
+
8
+ When the pre-flight gate (`*-agent` Step 2) returns `FAIL` on **ticket-quality**
9
+ gaps, do **not** bounce a raw checklist back to the reporter. Most "missing
10
+ required spec content" gaps are **authorable** from material already on the work
11
+ item (title, description, screenshots, design links, repro steps) plus the
12
+ codebase. **Draft** a best-effort version of every authorable gap, write it into
13
+ the item as clearly-labeled **assumptions/recommendations**, and only **then**
14
+ block — turning the human ask from *"author all this"* into *"confirm or correct
15
+ my draft, then flip back to Ready."* Same shape as `repo-scope-split`: the agent
16
+ does the work it can; the human decides only what only a human can.
17
+
18
+ This does **not** widen the gate — every required section must still exist
19
+ before build. It replaces an empty demand with a defensible first draft, and it
20
+ breaks the `Ready ↔ Blocked` ping-pong loop that a raw checklist causes (the
21
+ information was already on the ticket; only the structure was missing).
22
+
23
+ ## Two tiers
24
+
25
+ - **Tier A — authorable (always draft):** Technical Approach, Out of Scope,
26
+ Gherkin Acceptance Criteria (one scenario per fix), expected-vs-actual +
27
+ environment, Repository, Relationship Search (actually run the git+tracker
28
+ search — don't fabricate "none found"), Validation Journey **draft** (via the
29
+ vendor `*-add-journey` skill), Target Backend Environment (recommend a default
30
+ from `deploy.branches`/config).
31
+ - **Tier B — irreducibly human:** real credentials/access that exist nowhere on
32
+ the item or in repo test-user docs; a genuine product/scoping decision with no
33
+ defensible default. Still propose a recommended default where one exists; ask
34
+ a specific question only where none does.
35
+
36
+ ## Procedure
37
+
38
+ 1. Enumerate FAIL categories from `*-verify`. If S10 failed, run
39
+ `repo-scope-split` first (split, not autofill).
40
+ 2. Draft each Tier-A gap grounded in item material + codebase; tag every
41
+ inference as an assumption. **Never overwrite human prose** — add/augment
42
+ sections only.
43
+ 3. Write the draft via the vendor write skill (`jira-write-ticket` /
44
+ `github-write-issue` / `linear-write-issue`); draft the Validation Journey
45
+ via `*-add-journey`.
46
+ 4. Re-run `*-verify`. Structural gates should now PASS; anything still failing
47
+ is Tier B — name it in the comment.
48
+ 5. Block as usual (`blocked` status + `human_needed` marker + reassign to
49
+ Reporter) but post the **confirmation comment**, not a checklist: disclose
50
+ it's a Claude draft, one line per drafted section + its key assumption,
51
+ Tier-B items as specific questions with defaults, and close with *"correct
52
+ anything wrong, then flip back to Ready and it builds — or reply with
53
+ corrections."*
54
+ 6. **Loop-safety:** if the item already carries the agent's draft, refine only
55
+ the still-failing gaps; don't redraft. Re-readying after review is the
56
+ human's approval — the next claim's `*-verify` PASSes and build proceeds.
57
+
58
+ ## When you genuinely cannot autofill
59
+
60
+ If drafting would be fabrication (no fix/expected behavior described, no usable
61
+ design ref, uninformative title, no codebase anchor), block as before — but
62
+ phrase each gap as a specific question with a default where defensible. Never a
63
+ bare checklist when a defensible draft is possible.
64
+
65
+ The agent writes **spec/criteria, never code**, at this gate — authoring AC and
66
+ a validation journey is explicitly permitted here (this supersedes the older
67
+ "the build agent does not author the missing spec content" stance).
68
+
69
+ Full procedure, tier detail, confirmation-comment template, and vendor mechanics:
70
+ [reference/pre-flight-autofill.md](pre-flight-autofill-reference.mdc).
@@ -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-expo",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-expo",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-harper-fabric",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-harper-fabric",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-nestjs",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-nestjs",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-openclaw",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-openclaw",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-phaser",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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-rails",
3
- "version": "2.176.8",
3
+ "version": "2.176.10",
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.176.8",
3
+ "version": "2.176.10",
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"