@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.
- package/all/copy-contents/gitignore +5 -0
- package/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.mjs +10 -3
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +4 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +27 -24
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +12 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +7 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +4 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +11 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +4 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +3 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +2 -1
- package/plugins/lisa/agents/architecture-specialist.md +4 -0
- package/plugins/lisa/agents/bug-fixer.md +4 -0
- package/plugins/lisa/agents/builder.md +4 -0
- package/plugins/lisa/agents/debug-specialist.md +4 -0
- package/plugins/lisa/agents/product-specialist.md +4 -0
- package/plugins/lisa/agents/quality-specialist.md +4 -0
- package/plugins/lisa/agents/spec-conformance-specialist.md +4 -0
- package/plugins/lisa/agents/test-specialist.md +4 -0
- package/plugins/lisa/agents/verification-specialist.md +4 -0
- package/plugins/lisa/hooks/worktree-binding-guard.mjs +10 -3
- package/plugins/lisa/skills/lisa-atlassian-access/SKILL.md +12 -0
- package/plugins/lisa/skills/lisa-git-commit/SKILL.md +7 -7
- package/plugins/lisa/skills/lisa-git-submit-pr/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-github-read-issue/SKILL.md +4 -3
- package/plugins/lisa/skills/lisa-implement/SKILL.md +11 -4
- package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-jira-read-ticket/SKILL.md +4 -3
- package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-linear-read-issue/SKILL.md +3 -2
- package/plugins/lisa/skills/lisa-track/SKILL.md +2 -1
- package/plugins/lisa-agy/agents/architecture-specialist.md +4 -0
- package/plugins/lisa-agy/agents/bug-fixer.md +4 -0
- package/plugins/lisa-agy/agents/builder.md +4 -0
- package/plugins/lisa-agy/agents/debug-specialist.md +4 -0
- package/plugins/lisa-agy/agents/product-specialist.md +4 -0
- package/plugins/lisa-agy/agents/quality-specialist.md +4 -0
- package/plugins/lisa-agy/agents/spec-conformance-specialist.md +4 -0
- package/plugins/lisa-agy/agents/test-specialist.md +4 -0
- package/plugins/lisa-agy/agents/verification-specialist.md +4 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-atlassian-access/SKILL.md +12 -0
- package/plugins/lisa-agy/skills/lisa-git-commit/SKILL.md +7 -7
- package/plugins/lisa-agy/skills/lisa-git-submit-pr/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-github-read-issue/SKILL.md +4 -3
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +11 -4
- package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-jira-read-ticket/SKILL.md +4 -3
- package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-linear-read-issue/SKILL.md +3 -2
- package/plugins/lisa-agy/skills/lisa-track/SKILL.md +2 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/agents/architecture-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/agents/bug-fixer.agent.md +4 -0
- package/plugins/lisa-copilot/agents/builder.agent.md +4 -0
- package/plugins/lisa-copilot/agents/debug-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/agents/product-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/agents/quality-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/agents/spec-conformance-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/agents/test-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/agents/verification-specialist.agent.md +4 -0
- package/plugins/lisa-copilot/hooks/worktree-binding-guard.mjs +10 -3
- package/plugins/lisa-copilot/skills/lisa-atlassian-access/SKILL.md +12 -0
- package/plugins/lisa-copilot/skills/lisa-git-commit/SKILL.md +7 -7
- package/plugins/lisa-copilot/skills/lisa-git-submit-pr/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-github-read-issue/SKILL.md +4 -3
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +11 -4
- package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-jira-read-ticket/SKILL.md +4 -3
- package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-linear-read-issue/SKILL.md +3 -2
- package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +2 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/architecture-specialist.md +4 -0
- package/plugins/lisa-cursor/agents/bug-fixer.md +4 -0
- package/plugins/lisa-cursor/agents/builder.md +4 -0
- package/plugins/lisa-cursor/agents/debug-specialist.md +4 -0
- package/plugins/lisa-cursor/agents/product-specialist.md +4 -0
- package/plugins/lisa-cursor/agents/quality-specialist.md +4 -0
- package/plugins/lisa-cursor/agents/spec-conformance-specialist.md +4 -0
- package/plugins/lisa-cursor/agents/test-specialist.md +4 -0
- package/plugins/lisa-cursor/agents/verification-specialist.md +4 -0
- package/plugins/lisa-cursor/hooks/worktree-binding-guard.mjs +10 -3
- package/plugins/lisa-cursor/skills/lisa-atlassian-access/SKILL.md +12 -0
- package/plugins/lisa-cursor/skills/lisa-git-commit/SKILL.md +7 -7
- package/plugins/lisa-cursor/skills/lisa-git-submit-pr/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-read-issue/SKILL.md +4 -3
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +11 -4
- package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-jira-read-ticket/SKILL.md +4 -3
- package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-linear-read-issue/SKILL.md +3 -2
- package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +2 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/architecture-specialist.md +4 -0
- package/plugins/src/base/agents/bug-fixer.md +4 -0
- package/plugins/src/base/agents/builder.md +4 -0
- package/plugins/src/base/agents/debug-specialist.md +4 -0
- package/plugins/src/base/agents/product-specialist.md +4 -0
- package/plugins/src/base/agents/quality-specialist.md +4 -0
- package/plugins/src/base/agents/spec-conformance-specialist.md +4 -0
- package/plugins/src/base/agents/test-specialist.md +4 -0
- package/plugins/src/base/agents/verification-specialist.md +4 -0
- package/plugins/src/base/hooks/worktree-binding-guard.mjs +10 -3
- package/plugins/src/base/skills/lisa-atlassian-access/SKILL.md +12 -0
- package/plugins/src/base/skills/lisa-git-commit/SKILL.md +7 -7
- package/plugins/src/base/skills/lisa-git-submit-pr/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-github-read-issue/SKILL.md +4 -3
- package/plugins/src/base/skills/lisa-implement/SKILL.md +11 -4
- package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-jira-read-ticket/SKILL.md +4 -3
- package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-linear-read-issue/SKILL.md +3 -2
- package/plugins/src/base/skills/lisa-track/SKILL.md +2 -1
- 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,
|
|
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 (<
|
|
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 (<
|
|
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.
|
|
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" ]
|
|
198
|
-
|
|
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 ""
|