@codyswann/lisa 4.66.3 → 4.66.5

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 (176) hide show
  1. package/all/copy-contents/gitignore +5 -0
  2. package/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.mjs +10 -3
  3. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  4. package/dist/core/lisa-owned-hash-ledger.js +4 -0
  5. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  6. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  7. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  8. package/dist/core/upstream-evidence-manifest.js +27 -24
  9. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  10. package/package.json +4 -4
  11. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +12 -0
  14. package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +7 -7
  15. package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +1 -1
  16. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +1 -1
  17. package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +4 -3
  18. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +11 -4
  19. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +1 -1
  20. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +4 -3
  21. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +1 -1
  22. package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +3 -2
  23. package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +2 -1
  24. package/plugins/lisa/agents/architecture-specialist.md +4 -0
  25. package/plugins/lisa/agents/bug-fixer.md +4 -0
  26. package/plugins/lisa/agents/builder.md +4 -0
  27. package/plugins/lisa/agents/debug-specialist.md +4 -0
  28. package/plugins/lisa/agents/product-specialist.md +4 -0
  29. package/plugins/lisa/agents/quality-specialist.md +4 -0
  30. package/plugins/lisa/agents/spec-conformance-specialist.md +4 -0
  31. package/plugins/lisa/agents/test-specialist.md +4 -0
  32. package/plugins/lisa/agents/verification-specialist.md +4 -0
  33. package/plugins/lisa/hooks/worktree-binding-guard.mjs +10 -3
  34. package/plugins/lisa/skills/lisa-atlassian-access/SKILL.md +12 -0
  35. package/plugins/lisa/skills/lisa-git-commit/SKILL.md +7 -7
  36. package/plugins/lisa/skills/lisa-git-submit-pr/SKILL.md +1 -1
  37. package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +1 -1
  38. package/plugins/lisa/skills/lisa-github-read-issue/SKILL.md +4 -3
  39. package/plugins/lisa/skills/lisa-implement/SKILL.md +11 -4
  40. package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +1 -1
  41. package/plugins/lisa/skills/lisa-jira-read-ticket/SKILL.md +4 -3
  42. package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +1 -1
  43. package/plugins/lisa/skills/lisa-linear-read-issue/SKILL.md +3 -2
  44. package/plugins/lisa/skills/lisa-track/SKILL.md +2 -1
  45. package/plugins/lisa-agy/agents/architecture-specialist.md +4 -0
  46. package/plugins/lisa-agy/agents/bug-fixer.md +4 -0
  47. package/plugins/lisa-agy/agents/builder.md +4 -0
  48. package/plugins/lisa-agy/agents/debug-specialist.md +4 -0
  49. package/plugins/lisa-agy/agents/product-specialist.md +4 -0
  50. package/plugins/lisa-agy/agents/quality-specialist.md +4 -0
  51. package/plugins/lisa-agy/agents/spec-conformance-specialist.md +4 -0
  52. package/plugins/lisa-agy/agents/test-specialist.md +4 -0
  53. package/plugins/lisa-agy/agents/verification-specialist.md +4 -0
  54. package/plugins/lisa-agy/plugin.json +1 -1
  55. package/plugins/lisa-agy/skills/lisa-atlassian-access/SKILL.md +12 -0
  56. package/plugins/lisa-agy/skills/lisa-git-commit/SKILL.md +7 -7
  57. package/plugins/lisa-agy/skills/lisa-git-submit-pr/SKILL.md +1 -1
  58. package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +1 -1
  59. package/plugins/lisa-agy/skills/lisa-github-read-issue/SKILL.md +4 -3
  60. package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +11 -4
  61. package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +1 -1
  62. package/plugins/lisa-agy/skills/lisa-jira-read-ticket/SKILL.md +4 -3
  63. package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +1 -1
  64. package/plugins/lisa-agy/skills/lisa-linear-read-issue/SKILL.md +3 -2
  65. package/plugins/lisa-agy/skills/lisa-track/SKILL.md +2 -1
  66. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  69. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-copilot/agents/architecture-specialist.agent.md +4 -0
  73. package/plugins/lisa-copilot/agents/bug-fixer.agent.md +4 -0
  74. package/plugins/lisa-copilot/agents/builder.agent.md +4 -0
  75. package/plugins/lisa-copilot/agents/debug-specialist.agent.md +4 -0
  76. package/plugins/lisa-copilot/agents/product-specialist.agent.md +4 -0
  77. package/plugins/lisa-copilot/agents/quality-specialist.agent.md +4 -0
  78. package/plugins/lisa-copilot/agents/spec-conformance-specialist.agent.md +4 -0
  79. package/plugins/lisa-copilot/agents/test-specialist.agent.md +4 -0
  80. package/plugins/lisa-copilot/agents/verification-specialist.agent.md +4 -0
  81. package/plugins/lisa-copilot/hooks/worktree-binding-guard.mjs +10 -3
  82. package/plugins/lisa-copilot/skills/lisa-atlassian-access/SKILL.md +12 -0
  83. package/plugins/lisa-copilot/skills/lisa-git-commit/SKILL.md +7 -7
  84. package/plugins/lisa-copilot/skills/lisa-git-submit-pr/SKILL.md +1 -1
  85. package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +1 -1
  86. package/plugins/lisa-copilot/skills/lisa-github-read-issue/SKILL.md +4 -3
  87. package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +11 -4
  88. package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +1 -1
  89. package/plugins/lisa-copilot/skills/lisa-jira-read-ticket/SKILL.md +4 -3
  90. package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +1 -1
  91. package/plugins/lisa-copilot/skills/lisa-linear-read-issue/SKILL.md +3 -2
  92. package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +2 -1
  93. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-cursor/agents/architecture-specialist.md +4 -0
  95. package/plugins/lisa-cursor/agents/bug-fixer.md +4 -0
  96. package/plugins/lisa-cursor/agents/builder.md +4 -0
  97. package/plugins/lisa-cursor/agents/debug-specialist.md +4 -0
  98. package/plugins/lisa-cursor/agents/product-specialist.md +4 -0
  99. package/plugins/lisa-cursor/agents/quality-specialist.md +4 -0
  100. package/plugins/lisa-cursor/agents/spec-conformance-specialist.md +4 -0
  101. package/plugins/lisa-cursor/agents/test-specialist.md +4 -0
  102. package/plugins/lisa-cursor/agents/verification-specialist.md +4 -0
  103. package/plugins/lisa-cursor/hooks/worktree-binding-guard.mjs +10 -3
  104. package/plugins/lisa-cursor/skills/lisa-atlassian-access/SKILL.md +12 -0
  105. package/plugins/lisa-cursor/skills/lisa-git-commit/SKILL.md +7 -7
  106. package/plugins/lisa-cursor/skills/lisa-git-submit-pr/SKILL.md +1 -1
  107. package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +1 -1
  108. package/plugins/lisa-cursor/skills/lisa-github-read-issue/SKILL.md +4 -3
  109. package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +11 -4
  110. package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +1 -1
  111. package/plugins/lisa-cursor/skills/lisa-jira-read-ticket/SKILL.md +4 -3
  112. package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +1 -1
  113. package/plugins/lisa-cursor/skills/lisa-linear-read-issue/SKILL.md +3 -2
  114. package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +2 -1
  115. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  117. package/plugins/lisa-expo-agy/plugin.json +1 -1
  118. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  122. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  123. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  126. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  127. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  128. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  130. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  131. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  132. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  133. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  135. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  136. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  137. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  138. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  139. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  140. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  141. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  142. package/plugins/lisa-rails-agy/plugin.json +1 -1
  143. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  144. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  145. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  146. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  147. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  148. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  149. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  150. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  151. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  152. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  153. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  154. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  155. package/plugins/src/base/agents/architecture-specialist.md +4 -0
  156. package/plugins/src/base/agents/bug-fixer.md +4 -0
  157. package/plugins/src/base/agents/builder.md +4 -0
  158. package/plugins/src/base/agents/debug-specialist.md +4 -0
  159. package/plugins/src/base/agents/product-specialist.md +4 -0
  160. package/plugins/src/base/agents/quality-specialist.md +4 -0
  161. package/plugins/src/base/agents/spec-conformance-specialist.md +4 -0
  162. package/plugins/src/base/agents/test-specialist.md +4 -0
  163. package/plugins/src/base/agents/verification-specialist.md +4 -0
  164. package/plugins/src/base/hooks/worktree-binding-guard.mjs +10 -3
  165. package/plugins/src/base/skills/lisa-atlassian-access/SKILL.md +12 -0
  166. package/plugins/src/base/skills/lisa-git-commit/SKILL.md +7 -7
  167. package/plugins/src/base/skills/lisa-git-submit-pr/SKILL.md +1 -1
  168. package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +1 -1
  169. package/plugins/src/base/skills/lisa-github-read-issue/SKILL.md +4 -3
  170. package/plugins/src/base/skills/lisa-implement/SKILL.md +11 -4
  171. package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +1 -1
  172. package/plugins/src/base/skills/lisa-jira-read-ticket/SKILL.md +4 -3
  173. package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +1 -1
  174. package/plugins/src/base/skills/lisa-linear-read-issue/SKILL.md +3 -2
  175. package/plugins/src/base/skills/lisa-track/SKILL.md +2 -1
  176. package/typescript/copy-contents/.husky/commit-msg +19 -2
@@ -56,7 +56,7 @@ After download, branch on `mimeType`:
56
56
 
57
57
  ### Comments
58
58
 
59
- Fetch ALL comments in chronological order. Do not truncate. For each:
59
+ Fetch ALL comments in chronological order via `lisa-atlassian-access` `operation: comments key: <TICKET-KEY>`, which pages until every comment is read — the comments embedded in `read-ticket` are only the first page. Do not truncate. If the result reports `comments_complete: false` (a failed page, or an MCP-only read that could not page), say so at the top of the bundle's Comments section with the fetched-versus-total counts, so no downstream agent mistakes a partial set for the whole. For each:
60
60
  - Author, timestamp, body
61
61
  - Flag comments that contain: credentials, reproduction steps, status updates from stakeholders, decisions, or triage headers like `[repo-name]`
62
62
 
@@ -94,7 +94,7 @@ For each linked ticket, invoke `lisa-atlassian-access` with `operation: read-tic
94
94
 
95
95
  If the primary ticket has an epic parent (or IS an epic):
96
96
 
97
- 1. Fetch the epic itself via `lisa-atlassian-access` `operation: read-ticket key: <EPIC-KEY>` — full description, acceptance criteria, all comments, Validation Journey.
97
+ 1. Fetch the epic itself via `lisa-atlassian-access` `operation: read-ticket key: <EPIC-KEY>` — full description, acceptance criteria, Validation Journey — and its comments, all of them, via `lisa-atlassian-access` `operation: comments key: <EPIC-KEY>`.
98
98
  2. Find epic siblings via JQL:
99
99
  ```jql
100
100
  "Epic Link" = <EPIC-KEY> AND key != <TICKET-KEY>
@@ -135,7 +135,8 @@ Produce a single structured output that the caller can pass verbatim to downstre
135
135
  ### Validation Journey
136
136
  <section or "None">
137
137
 
138
- ### Comments (<count>)
138
+ ### Comments (<fetched> of <total>; comments_complete: <true|false>)
139
+ <when incomplete: "INCOMPLETE — <fetched> of <total> comments read via <substrate>">
139
140
  <chronological comments, flagged items called out>
140
141
 
141
142
  ### Attachments
@@ -386,7 +386,7 @@ After the claim succeeds, run the per-Issue lifecycle defined by the `linear-age
386
386
  - `lisa-linear-verify` — pre-flight quality gate, including the draft-then-block procedure on FAIL
387
387
  - `lisa-ticket-triage` — analytical triage gate (a `BLOCKED` verdict stops the cycle with findings posted)
388
388
  - Intent determination from the type label
389
- 2. **Dispatch the flow in-session:** when the gates pass, invoke the lifecycle skill via the Skill tool — `lisa-implement <ISSUE-ID>` for Build / Fix / Improve / Investigate-Only (or `lisa-plan` for an Epic-equivalent) — passing the full context bundle from the read step. **When 3b classified this Issue `rejection-reclaim`, the context bundle passed to `lisa-implement` MUST include the rejection evidence summary** (what was rejected, the defect the QA comment named, the approach named as wrong) — reuse the evidence already read in 3b, do not fetch it twice — so the plan can address it per `rejection-detection`; absence of evidence never blocks. `lisa-implement`'s own orchestration preamble then creates the per-item agent team (input-resolver, Roster Decision, specialist fanout) exactly as a direct invocation would.
389
+ 2. **Dispatch the flow in-session:** when the gates pass, invoke the lifecycle skill via the Skill tool — `lisa-implement <ISSUE-ID>` for Build / Fix / Improve / Investigate-Only (or `lisa-plan` for an Epic-equivalent) — passing the full context bundle from the read step. Hand that bundle over by file, not by text: before invoking `lisa-implement`, run the ignore guard below, then write the bundle verbatim to persist it at the git-ignored `.lisa/work-item-context.md` of this worktree — always overwriting the file with this cycle's bundle, never reusing one an earlier item left behind — and pass only `caller_bundle_path=<absolute path>` in the invocation. `lisa-implement`'s input-resolver keeps that file as the base instead of re-summarizing it, so every comment reaches the agents doing the work. Bundle text, and any credential value in it, never appears in a spawn prompt, task description, or Skill argument — only its path. **Ignore guard before any write.** A host can receive these skills before its shipped `.gitignore` entry, so prove the path is ignored first, from the worktree root: `git check-ignore -q .lisa/work-item-context.md || printf '%s\n' '.lisa/work-item-context.md' >> "$(git rev-parse --git-common-dir)/info/exclude"`, then re-run `git check-ignore -q .lisa/work-item-context.md`. If it is still not ignored, stop and report — do not write the bundle. If an `.easignore` exists and `grep -qxF '.lisa/work-item-context.md' .easignore` fails, stop and report instead of writing: EAS uploads read `.easignore`, which is derived from `.gitignore`, not from `info/exclude`. **When 3b classified this Issue `rejection-reclaim`, the context bundle passed to `lisa-implement` MUST include the rejection evidence summary** (what was rejected, the defect the QA comment named, the approach named as wrong) — reuse the evidence already read in 3b, do not fetch it twice — so the plan can address it per `rejection-detection`; absence of evidence never blocks. `lisa-implement`'s own orchestration preamble then creates the per-item agent team (input-resolver, Roster Decision, specialist fanout) exactly as a direct invocation would.
390
390
  3. **Milestone sync and evidence** (`lisa-linear-sync`, `lisa-linear-evidence`) happen at the milestones the `linear-agent` workflow defines, within the dispatched flow.
391
391
 
392
392
  If you are somehow running this skill as a spawned teammate inside an existing team (nested misrouting — Intake keeps this chain in the lead session), do NOT run the lifecycle inline and do NOT spawn named peers. Return this payload to the lead so the lead session can run this Phase 3c in-session:
@@ -43,7 +43,7 @@ Call `lisa-linear-access operation: get-issue`. Extract and preserve:
43
43
  - Attachment URLs (capture, do not download unless needed)
44
44
 
45
45
  **Comments**
46
- Fetch ALL comments via `lisa-linear-access operation: list-comments({issueId: <id>})` in chronological order. Walk thread parents/children — Linear comments are threaded via `parentId`. Do not truncate. For each comment:
46
+ Fetch ALL comments via `lisa-linear-access operation: list-comments({issueId: <id>})` in chronological order. Page to exhaustion: request the next page while `pageInfo.hasNextPage` is true, passing `endCursor` as `after`, and never stop at the first page. Walk thread parents/children — Linear comments are threaded via `parentId`. Do not truncate. Linear reports no comment total, so `<total>` is the fetched count once `hasNextPage` is false, and `unknown` when a page fails — in which case set `comments_complete: false` and say so at the top of the Comments section. For each comment:
47
47
  - Author, timestamp, body
48
48
  - Flag comments that contain: credentials, reproduction steps, status updates from stakeholders, decisions, or triage headers.
49
49
 
@@ -137,7 +137,8 @@ Produce a single structured output the caller can pass verbatim to downstream ag
137
137
  ### Validation Journey
138
138
  <section or "None">
139
139
 
140
- ### Comments (<count>)
140
+ ### Comments (<fetched> of <total>; comments_complete: <true|false>)
141
+ <when incomplete: "INCOMPLETE — <fetched> of <total> comments read via <substrate>">
141
142
  <chronological comments, flagged items called out>
142
143
 
143
144
  ### Attachments
@@ -105,7 +105,7 @@ Otherwise:
105
105
 
106
106
  3. Read the binding back through `node scripts/lisa-work-item.mjs current` and require it to equal the canonical reference. If binding fails, stop before durable project work.
107
107
  - A detached-HEAD worktree is valid at this stage: the binding records `branch: null` as a pending state. Create the feature branch only after the gate succeeds, then run `node scripts/lisa-work-item.mjs attach-branch`. Commit preparation and validation fail closed until that attachment succeeds.
108
- 4. Return this structured result plus the full resolved work-item context:
108
+ 4. **Ignore guard before any write.** A host can receive these skills before its shipped `.gitignore` entry, so prove the path is ignored first, from the worktree root: `git check-ignore -q .lisa/work-item-context.md || printf '%s\n' '.lisa/work-item-context.md' >> "$(git rev-parse --git-common-dir)/info/exclude"`, then re-run `git check-ignore -q .lisa/work-item-context.md`. If it is still not ignored, stop and report — do not write the bundle. If an `.easignore` exists and `grep -qxF '.lisa/work-item-context.md' .easignore` fails, stop and report instead of writing: EAS uploads read `.easignore`, which is derived from `.gitignore`, not from `info/exclude`. Then write the full resolved work-item context — the live vendor read bundle, unedited, every comment included — to the worktree-local, git-ignored `<worktree root>/.lisa/work-item-context.md`, then return this structured result (the file is the context; a summary in the reply never substitutes for it). When a `caller_bundle_path` was forwarded for this work item and the file already exists, do not overwrite it — it holds the caller's bundle (or a previous run's) and is left for the resolver step. Otherwise this is the first write; when `lisa-implement` forwarded a `caller_bundle_path`, its resolver step then keeps the bundle at that path as the base and appends only what this live read adds, and in every case finishes it with the `## Comment inventory` section:
109
109
 
110
110
  ```text
111
111
  tracker_provider: jira|github|linear
@@ -116,6 +116,7 @@ Otherwise:
116
116
  gate_reason: <why a human must judge this first>|null
117
117
  claim_outcome: claimed|reused|held-by-gate
118
118
  binding_outcome: verified|skipped-human-gate
119
+ work_item_context: <absolute path to .lisa/work-item-context.md>
119
120
  ```
120
121
 
121
122
  ## Lifecycle
@@ -193,9 +193,26 @@ if [ "$nonfleet_coauthor" -eq 1 ]; then
193
193
  done
194
194
  # The AI-Agent trailer must also NAME one of the listed co-authors —
195
195
  # metadata attesting to nobody in the trailer block is not attribution.
196
+ # Compare against the extracted NAME (the same "strip email" transform the
197
+ # co-author loop above applies), not the raw trailer line: a substring
198
+ # match would let "AI-Agent: Co-authored-by" satisfy the check without
199
+ # naming anyone.
196
200
  ai_agent=$(printf '%s\n' "$ALL_TRAILERS" | grep -iE "^AI-Agent:" | head -1 | sed -E 's/^[^:]+:[[:space:]]*//;s/[[:space:]]*$//')
197
- if [ -n "$ai_agent" ] && ! printf '%s\n' "$COAUTHOR_TRAILERS" | grep -Fqi "$ai_agent"; then
198
- missing_agent_metadata=1
201
+ if [ -n "$ai_agent" ]; then
202
+ ai_agent_lc=$(printf '%s' "$ai_agent" | tr '[:upper:]' '[:lower:]')
203
+ ai_agent_names_someone=0
204
+ while IFS= read -r trailer; do
205
+ [ -z "$trailer" ] && continue
206
+ coauthor_name=$(printf '%s' "${trailer#*:}" | sed -e 's/<[^>]*>//g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | tr '[:upper:]' '[:lower:]')
207
+ if [ "$coauthor_name" = "$ai_agent_lc" ]; then
208
+ ai_agent_names_someone=1
209
+ fi
210
+ done <<LISA_COAUTHOR_NAME_CHECK
211
+ $COAUTHOR_TRAILERS
212
+ LISA_COAUTHOR_NAME_CHECK
213
+ if [ "$ai_agent_names_someone" -eq 0 ]; then
214
+ missing_agent_metadata=1
215
+ fi
199
216
  fi
200
217
  if [ "$missing_agent_metadata" -eq 1 ]; then
201
218
  echo ""