@codyswann/lisa 2.177.0 → 2.178.1
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/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/linear-agent.md +3 -3
- package/plugins/lisa/rules/reference/repo-scope-split.md +1 -1
- package/plugins/lisa/skills/analyze-claude-remote/SKILL.md +39 -5
- package/plugins/lisa/skills/generate-claude-remote-build-script/SKILL.md +20 -7
- package/plugins/lisa/skills/intake/SKILL.md +2 -2
- package/plugins/lisa/skills/linear-add-journey/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +11 -11
- package/plugins/lisa/skills/linear-create/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-evidence/SKILL.md +5 -5
- package/plugins/lisa/skills/linear-journey/SKILL.md +2 -2
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +11 -11
- package/plugins/lisa/skills/linear-read-issue/SKILL.md +11 -11
- package/plugins/lisa/skills/linear-sync/SKILL.md +7 -7
- package/plugins/lisa/skills/linear-to-tracker/SKILL.md +7 -7
- package/plugins/lisa/skills/linear-validate-issue/SKILL.md +8 -8
- package/plugins/lisa/skills/linear-verify/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-write-issue/SKILL.md +20 -20
- package/plugins/lisa/skills/linear-write-prd/SKILL.md +6 -6
- package/plugins/lisa/skills/prd-backlink/SKILL.md +5 -5
- package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa/skills/repair-intake/SKILL.md +1 -1
- package/plugins/lisa/skills/setup-linear/SKILL.md +5 -5
- package/plugins/lisa/skills/tracker-journey/SKILL.md +1 -1
- package/plugins/lisa/skills/verify-prd/SKILL.md +2 -2
- package/plugins/lisa-agy/agents/linear-agent.md +3 -3
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/analyze-claude-remote/SKILL.md +39 -5
- package/plugins/lisa-agy/skills/generate-claude-remote-build-script/SKILL.md +20 -7
- package/plugins/lisa-agy/skills/intake/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/linear-add-journey/SKILL.md +3 -3
- package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +11 -11
- package/plugins/lisa-agy/skills/linear-create/SKILL.md +3 -3
- package/plugins/lisa-agy/skills/linear-evidence/SKILL.md +5 -5
- package/plugins/lisa-agy/skills/linear-journey/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/linear-prd-intake/SKILL.md +11 -11
- package/plugins/lisa-agy/skills/linear-read-issue/SKILL.md +11 -11
- package/plugins/lisa-agy/skills/linear-sync/SKILL.md +7 -7
- package/plugins/lisa-agy/skills/linear-to-tracker/SKILL.md +7 -7
- package/plugins/lisa-agy/skills/linear-validate-issue/SKILL.md +8 -8
- package/plugins/lisa-agy/skills/linear-verify/SKILL.md +3 -3
- package/plugins/lisa-agy/skills/linear-write-issue/SKILL.md +20 -20
- package/plugins/lisa-agy/skills/linear-write-prd/SKILL.md +6 -6
- package/plugins/lisa-agy/skills/prd-backlink/SKILL.md +5 -5
- package/plugins/lisa-agy/skills/prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/repair-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/setup-linear/SKILL.md +5 -5
- package/plugins/lisa-agy/skills/tracker-journey/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/verify-prd/SKILL.md +2 -2
- 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/linear-agent.agent.md +3 -3
- package/plugins/lisa-copilot/rules/reference/repo-scope-split.md +1 -1
- package/plugins/lisa-copilot/skills/analyze-claude-remote/SKILL.md +39 -5
- package/plugins/lisa-copilot/skills/generate-claude-remote-build-script/SKILL.md +20 -7
- package/plugins/lisa-copilot/skills/intake/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/linear-add-journey/SKILL.md +3 -3
- package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +11 -11
- package/plugins/lisa-copilot/skills/linear-create/SKILL.md +3 -3
- package/plugins/lisa-copilot/skills/linear-evidence/SKILL.md +5 -5
- package/plugins/lisa-copilot/skills/linear-journey/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/linear-prd-intake/SKILL.md +11 -11
- package/plugins/lisa-copilot/skills/linear-read-issue/SKILL.md +11 -11
- package/plugins/lisa-copilot/skills/linear-sync/SKILL.md +7 -7
- package/plugins/lisa-copilot/skills/linear-to-tracker/SKILL.md +7 -7
- package/plugins/lisa-copilot/skills/linear-validate-issue/SKILL.md +8 -8
- package/plugins/lisa-copilot/skills/linear-verify/SKILL.md +3 -3
- package/plugins/lisa-copilot/skills/linear-write-issue/SKILL.md +20 -20
- package/plugins/lisa-copilot/skills/linear-write-prd/SKILL.md +6 -6
- package/plugins/lisa-copilot/skills/prd-backlink/SKILL.md +5 -5
- package/plugins/lisa-copilot/skills/prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/setup-linear/SKILL.md +5 -5
- package/plugins/lisa-copilot/skills/tracker-journey/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/verify-prd/SKILL.md +2 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/linear-agent.md +3 -3
- package/plugins/lisa-cursor/rules/repo-scope-split-reference.mdc +1 -1
- package/plugins/lisa-cursor/skills/analyze-claude-remote/SKILL.md +39 -5
- package/plugins/lisa-cursor/skills/generate-claude-remote-build-script/SKILL.md +20 -7
- package/plugins/lisa-cursor/skills/intake/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/linear-add-journey/SKILL.md +3 -3
- package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +11 -11
- package/plugins/lisa-cursor/skills/linear-create/SKILL.md +3 -3
- package/plugins/lisa-cursor/skills/linear-evidence/SKILL.md +5 -5
- package/plugins/lisa-cursor/skills/linear-journey/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/linear-prd-intake/SKILL.md +11 -11
- package/plugins/lisa-cursor/skills/linear-read-issue/SKILL.md +11 -11
- package/plugins/lisa-cursor/skills/linear-sync/SKILL.md +7 -7
- package/plugins/lisa-cursor/skills/linear-to-tracker/SKILL.md +7 -7
- package/plugins/lisa-cursor/skills/linear-validate-issue/SKILL.md +8 -8
- package/plugins/lisa-cursor/skills/linear-verify/SKILL.md +3 -3
- package/plugins/lisa-cursor/skills/linear-write-issue/SKILL.md +20 -20
- package/plugins/lisa-cursor/skills/linear-write-prd/SKILL.md +6 -6
- package/plugins/lisa-cursor/skills/prd-backlink/SKILL.md +5 -5
- package/plugins/lisa-cursor/skills/prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/setup-linear/SKILL.md +5 -5
- package/plugins/lisa-cursor/skills/tracker-journey/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/verify-prd/SKILL.md +2 -2
- 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/linear-agent.md +3 -3
- package/plugins/src/base/rules/reference/repo-scope-split.md +1 -1
- package/plugins/src/base/skills/analyze-claude-remote/SKILL.md +39 -5
- package/plugins/src/base/skills/generate-claude-remote-build-script/SKILL.md +20 -7
- package/plugins/src/base/skills/intake/SKILL.md +2 -2
- package/plugins/src/base/skills/linear-add-journey/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +11 -11
- package/plugins/src/base/skills/linear-create/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-evidence/SKILL.md +5 -5
- package/plugins/src/base/skills/linear-journey/SKILL.md +2 -2
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +11 -11
- package/plugins/src/base/skills/linear-read-issue/SKILL.md +11 -11
- package/plugins/src/base/skills/linear-sync/SKILL.md +7 -7
- package/plugins/src/base/skills/linear-to-tracker/SKILL.md +7 -7
- package/plugins/src/base/skills/linear-validate-issue/SKILL.md +8 -8
- package/plugins/src/base/skills/linear-verify/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-write-issue/SKILL.md +20 -20
- package/plugins/src/base/skills/linear-write-prd/SKILL.md +6 -6
- package/plugins/src/base/skills/prd-backlink/SKILL.md +5 -5
- package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/src/base/skills/repair-intake/SKILL.md +1 -1
- package/plugins/src/base/skills/setup-linear/SKILL.md +5 -5
- package/plugins/src/base/skills/tracker-journey/SKILL.md +1 -1
- package/plugins/src/base/skills/verify-prd/SKILL.md +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: linear-write-prd
|
|
3
3
|
description: "Creates or idempotently updates a PRD as a Linear Project carrying exactly one PRD lifecycle project-label (`prd-draft` by default, or `prd-ready` when initial_role is ready so lisa:linear-prd-intake auto-claims it). The Linear PRD-source writer behind lisa:prd-source-write. Dedupes by a stable marker embedded in the Project description (matched by marker, never by name). Uses the Linear MCP."
|
|
4
|
-
allowed-tools: ["Skill", "Bash"
|
|
4
|
+
allowed-tools: ["Skill", "Bash"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Write Linear PRD: $ARGUMENTS
|
|
@@ -37,17 +37,17 @@ PROGRESSED=("$PRD_IN_REVIEW" "$PRD_BLOCKED" "$PRD_TICKETED" "$PRD_SHIPPED" "$PRD
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Resolve the target project-label from `initial_role`: `ready` → `$PRD_READY`, else `$PRD_DRAFT`.
|
|
40
|
-
Resolve its label id via `
|
|
41
|
-
`
|
|
40
|
+
Resolve its label id via `lisa:linear-access operation: list-project-labels` (create via
|
|
41
|
+
`lisa:linear-access operation: create-project-label` if missing).
|
|
42
42
|
|
|
43
43
|
## Phase 2 — Dedupe by marker (search before create)
|
|
44
44
|
|
|
45
45
|
The `marker` is embedded in the Project description. Find an existing Project carrying it — match the
|
|
46
46
|
marker, **never** the project name:
|
|
47
47
|
|
|
48
|
-
1. `
|
|
48
|
+
1. `lisa:linear-access operation: list-projects` scoped to the team/workspace (filtered by the `prd-*` label
|
|
49
49
|
set when supported), then inspect each candidate's description via
|
|
50
|
-
`
|
|
50
|
+
`lisa:linear-access operation: get-project` for the marker. If `source_ref` was passed, target it directly.
|
|
51
51
|
2. If a Project with the marker exists → **update**; else → **create**.
|
|
52
52
|
|
|
53
53
|
## Phase 3 — Create or update
|
|
@@ -59,7 +59,7 @@ dedupe. If the live Project description already contains the canonical managed `
|
|
|
59
59
|
section, preserve it verbatim unless the caller intentionally supplied an updated canonical section;
|
|
60
60
|
use the shared `usage-accounting` serializer/merge path rather than hand-editing ledger rows.
|
|
61
61
|
|
|
62
|
-
**CREATE:** `
|
|
62
|
+
**CREATE:** `lisa:linear-access operation: save-project` with:
|
|
63
63
|
- `name`: `$TITLE`
|
|
64
64
|
- `description`: the marker-normalized full PRD markdown
|
|
65
65
|
- `teamIds`: `[<resolved team id>]`
|
|
@@ -162,7 +162,7 @@ Linear models top-level grouping two ways, and the PRD's own entity type decides
|
|
|
162
162
|
- **PRD is a Linear Project** (the common case — a PRD project groups its generated work). Generated top-level **Issues** are attached to the PRD by setting their `projectId` to the PRD Project's id. The Project *is* the native parent of its Issues; no separate parent-issue link is needed.
|
|
163
163
|
- **PRD is a Linear Issue** (a parent issue, not a project). Generated top-level Issues are attached as native **sub-Issues** of the PRD Issue by setting their `parentId` to the PRD Issue's id.
|
|
164
164
|
|
|
165
|
-
Either way the write surface is `
|
|
165
|
+
Either way the write surface is `lisa:linear-access operation: save-issue` with the single relevant field (`projectId` or `parentId`) — the same primitive `lisa:linear-write-issue` uses to set a Story's `projectId` (Epic Project) and a Sub-task's `parentId` (Story Issue). Send **only** that field on update; Linear treats `save_issue` as a full overwrite of the fields named (`lisa:linear-write-issue` Phase 6 UPDATE), so resending other fields would clobber them.
|
|
166
166
|
|
|
167
167
|
### What gets linked — generated top-level work only
|
|
168
168
|
|
|
@@ -178,14 +178,14 @@ So if the PRD generated `Epic E1 (Project) → Story S1 (Issue) → Sub-task T1
|
|
|
178
178
|
The dedupe key is **child-ref identity** — the Linear issue/project identifier (e.g. `TEAM-123`) or its UUID — per the `prd-lifecycle-rollup` idempotency rule. Before attaching any child, read the PRD's current children and skip any child already attached, so re-running `prd-backlink` never duplicates a relationship and is a no-op when everything is already attached.
|
|
179
179
|
|
|
180
180
|
1. **Read the PRD's existing children** (the same reads `lisa:linear-read-issue` uses for Project members and sub-Issues):
|
|
181
|
-
- PRD-as-Project → `
|
|
182
|
-
- PRD-as-Issue → `
|
|
181
|
+
- PRD-as-Project → `lisa:linear-access operation: list-issues({project: <prd_project_id>})` and collect each member Issue's identifier/UUID.
|
|
182
|
+
- PRD-as-Issue → `lisa:linear-access operation: get-issue({id: <prd_issue_id>})` and collect its sub-Issue identifiers/UUIDs.
|
|
183
183
|
|
|
184
184
|
The resulting identifiers/UUIDs are the existing child-ref set.
|
|
185
185
|
|
|
186
186
|
2. **For each generated top-level item** whose child-ref is **not** already in that set, attach it with a single-field `save_issue`:
|
|
187
|
-
- PRD-as-Project → `
|
|
188
|
-
- PRD-as-Issue → `
|
|
187
|
+
- PRD-as-Project → `lisa:linear-access operation: save-issue({id: <child_id>, projectId: <prd_project_id>})`.
|
|
188
|
+
- PRD-as-Issue → `lisa:linear-access operation: save-issue({id: <child_id>, parentId: <prd_issue_id>})`.
|
|
189
189
|
|
|
190
190
|
A child already in the existing-children set is a no-op — do not issue the `save_issue` call for it. Reading the child's current `projectId`/`parentId` and finding it already equal to the PRD's id is the same no-op (attaching to the value it already holds changes nothing).
|
|
191
191
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prd-ticket-coverage
|
|
3
3
|
description: "Verifies that every requirement in a PRD (Notion, Confluence, Linear, or GitHub Issues) is covered by at least one created destination ticket (JIRA, GitHub Issues, or Linear) — no silent drops. Parses the PRD into atomic items (goals, user stories, functional/non-functional requirements, acceptance criteria, important notes), maps each to the created tickets, and produces a coverage matrix and verdict (COMPLETE / COMPLETE_WITH_SCOPE_CREEP / GAPS_FOUND / NO_TICKETS_FOUND). Used by notion-prd-intake / confluence-prd-intake / linear-prd-intake / github-prd-intake post-write to gate the Ticketed transition; can also be invoked standalone for after-the-fact audits."
|
|
4
|
-
allowed-tools: ["Skill", "Bash", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getConfluencePageFooterComments", "mcp__atlassian__getConfluencePageInlineComments", "mcp__atlassian__getConfluenceCommentChildren", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# PRD Ticket Coverage Audit: $ARGUMENTS
|
|
@@ -15,7 +15,7 @@ The PRD URL can be a **Notion page URL**, a **Confluence page URL**, a **Linear
|
|
|
15
15
|
|
|
16
16
|
- `notion.so` / `notion.site` → Notion. Fetch with `mcp__claude_ai_Notion__notion-fetch` (`include_discussions: true`) and `mcp__claude_ai_Notion__notion-get-comments`.
|
|
17
17
|
- Atlassian Confluence host (e.g. `*.atlassian.net/wiki/...`) → Confluence. Fetch with `mcp__atlassian__getConfluencePage`, `mcp__atlassian__getConfluencePageDescendants` (for child epic pages), `mcp__atlassian__getConfluencePageFooterComments`, `mcp__atlassian__getConfluencePageInlineComments`, and `mcp__atlassian__getConfluenceCommentChildren` for nested replies.
|
|
18
|
-
- `linear.app` host → Linear. Fetch with `
|
|
18
|
+
- `linear.app` host → Linear. Fetch with `lisa:linear-access operation: get-project` (capture description, labels, state, attached resources), `lisa:linear-access operation: list-documents({projectId})` + `lisa:linear-access operation: get-document` per attached document, `lisa:linear-access operation: list-issues({project})` for sub-issues that act as child epics / user stories, and `lisa:linear-access operation: list-comments({issueId})` per sub-issue for decisions and engineering notes. Comments do not exist on the project itself in the MCP surface — sub-issue comments are the substitute.
|
|
19
19
|
- `github.com` host → GitHub Issues. Fetch with the `gh` CLI (no GitHub MCP — Lisa uses the CLI exclusively for GitHub):
|
|
20
20
|
- `gh issue view <number> --repo <org>/<repo> --json number,title,body,labels,milestone,assignees,author,createdAt,comments,url` for the PRD body and comments.
|
|
21
21
|
- `gh api graphql` with the `subIssues` field for native sub-issue children (these stand in for child epic pages — see `lisa:github-read-issue` Phase 3 for the exact query).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: repair-intake
|
|
3
3
|
description: "Vendor-agnostic repair scanner — the recovery counterpart to lisa:intake. Where intake claims `ready` work, repair-intake finds work that got stuck or was left half-closed: items left in `blocked`, stalled in an in-progress role (build `claimed`, PRD `in_review`), terminal-labeled items that are still natively open, and rollup/container items whose children are all terminal but whose parent is not closed out. Scans the same queues lisa:intake serves (Notion / Confluence / Linear / GitHub PRD databases; JIRA / GitHub / Linear build queues), enumerates candidates up to `max_candidates`, and repairs every materially actionable one in that bounded set: resumes stalled in-progress work IN PLACE (build → the vendor agent + the scanner's post-agent transition; PRD → the source `*-to-tracker` dry-run validate→route pipeline) — but for a stalled build it first diagnoses the PR/deploy state: a PR that already merged is recovered by applying the env transition build-intake never got to (no re-dispatch); a PR that is merely behind its base is re-synced in place via `gh pr update-branch` so the already-enabled auto-merge can land (a clean rebase needs no human); and only a PR that cannot merge for a non-mechanical reason (true conflict, failing checks, unaddressed CodeRabbit/changes-requested) or a failed deploy gets a build-ready leaf fix ticket with the item moved to `blocked` (blocked by that ticket) rather than re-dispatching, re-validates blocked PRDs when new clarifying answers exist, re-dispatches blocked build items whose `is blocked by` dependencies have since closed OR whose validation/quality-gate self-block now re-validates PASS (re-running `lisa:tracker-validate` against current content — the build mirror of PRD re-validation), performs terminal native closure for terminal-labeled items, reconciles parent rollups to their derived state per leaf-only-lifecycle — including the intermediate-env case (e.g. all children at `On Stg` → parent `On Stg`) and a container wrongly stuck in `ready` — and closes out rollups whose associated child work is fully terminal. Idempotent, loop-protected via a [lisa-repair-intake] marker + state fingerprint + backoff. Never mutates product-owned states (`draft`, `verified`) and never touches `ready` leaves (a container wrongly carrying `ready` is the one exception — it is rolled up from its children, since `ready` on a parent is an invariant violation, not intake's claim signal). Designed as a /schedule cron target running alongside lisa:intake."
|
|
4
|
-
allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit"
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Repair Intake: $ARGUMENTS
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: setup-linear
|
|
3
3
|
description: "Configure Linear as the destination tracker and/or the PRD source for this project. Verifies Linear access (MCP OAuth or a personal API key in OS keychain), resolves the workspace slug and team key, scaffolds the build-queue issue-label namespace (`status:*`) when Linear is the tracker and/or the PRD-lifecycle project-label namespace (`prd-*` + issue-level sentinel) when Linear is the PRD source, writes the `linear` section into `.lisa.config.json`, and offers to set top-level `tracker: \"linear\"` and/or `source: \"linear\"`. Idempotent — re-running updates the existing section and reuses existing labels. No /lisa:setup:atlassian prerequisite."
|
|
4
|
-
allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill", "AskUserQuestion", "mcp__linear-server__authenticate", "mcp__linear-server__complete_authentication"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill", "AskUserQuestion", "mcp__linear-server__authenticate", "mcp__linear-server__complete_authentication"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Setup Linear: $ARGUMENTS
|
|
@@ -40,7 +40,7 @@ The role answer drives Step 3 (which label namespaces to scaffold) and whether `
|
|
|
40
40
|
Verify the Linear MCP is authenticated to the right workspace by listing teams:
|
|
41
41
|
|
|
42
42
|
```text
|
|
43
|
-
|
|
43
|
+
lisa:linear-access operation: list-teams({})
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
If it errors / returns nothing, run `mcp__linear-server__authenticate` and have the user complete OAuth in the browser, then `mcp__linear-server__complete_authentication`, then re-list. A non-empty team list confirms the MCP is authed to a readable workspace.
|
|
@@ -137,7 +137,7 @@ echo "Linear key validated. Org: $(echo "$VIEWER" | jq -r '.data.organization.ur
|
|
|
137
137
|
### Step 2 — Resolve workspace slug + team key
|
|
138
138
|
|
|
139
139
|
- **Workspace slug**: honor `--workspace=<slug>`. Otherwise derive from the validated identity — the GraphQL `organization.urlKey` (API path) or the team list's workspace (MCP path). Confirm with the user; this slug is the keychain `account` key and the multi-workspace disambiguator.
|
|
140
|
-
- **Team key** (required when Linear is the **tracker**): honor `--team=<KEY>`. Otherwise enumerate teams via `
|
|
140
|
+
- **Team key** (required when Linear is the **tracker**): honor `--team=<KEY>`. Otherwise enumerate teams via `lisa:linear-access operation: list-teams({})` (or the GraphQL `teams` query) and present them via `AskUserQuestion` (label = team key, description = team name) for the user to pick the team that owns lisa's destination Issues. If Linear is source-only, `teamKey` is optional — skip unless the user wants to pin a team scope.
|
|
141
141
|
|
|
142
142
|
### Step 3 — Scaffold the lifecycle label namespaces
|
|
143
143
|
|
|
@@ -154,7 +154,7 @@ read_role() { # $1=namespace (build|prd) $2=role $3=default
|
|
|
154
154
|
|
|
155
155
|
#### 3a. Build-queue labels — ISSUE labels (only if Linear is the tracker)
|
|
156
156
|
|
|
157
|
-
Probe with `
|
|
157
|
+
Probe with `lisa:linear-access operation: list-issue-labels` (scoped to the team). For each role's resolved name, create it via `lisa:linear-access operation: create-issue-label` only if absent. The `done` role is env-keyed — create all three defaults; collapse to a single string in config later if the project's terminal state is env-independent.
|
|
158
158
|
|
|
159
159
|
| Role | Default |
|
|
160
160
|
|------|---------|
|
|
@@ -168,7 +168,7 @@ Probe with `mcp__linear-server__list_issue_labels` (scoped to the team). For eac
|
|
|
168
168
|
|
|
169
169
|
#### 3b. PRD-lifecycle labels — PROJECT labels (only if Linear is the PRD source)
|
|
170
170
|
|
|
171
|
-
Probe with `
|
|
171
|
+
Probe with `lisa:linear-access operation: list-project-labels`. Create missing ones via `lisa:linear-access operation: create-project-label`. This probe-then-create is find-or-create per label: a label already present is reused untouched, so re-running never duplicates `prd-*`. These are a **separate label kind** from issue labels — creating an issue label of the same name will NOT work for the PRD flow.
|
|
172
172
|
|
|
173
173
|
`prd-verified` is the terminal lifecycle state after `prd-shipped` (the `verified` role from config-resolution, #591): `/lisa:verify-prd` transitions a Linear PRD project into it once the shipped product has been empirically verified against the PRD. Scaffold it through the same find-or-create path as every other `prd-*` row.
|
|
174
174
|
|
|
@@ -22,5 +22,5 @@ See the `config-resolution` rule for configuration and dispatch table.
|
|
|
22
22
|
|
|
23
23
|
## Rules
|
|
24
24
|
|
|
25
|
-
- The journey content is identical across vendors; only the parser source differs (the JIRA vendor reads description via Atlassian MCP; the GitHub vendor reads body via `gh issue view --json body`; the Linear vendor reads description via `
|
|
25
|
+
- The journey content is identical across vendors; only the parser source differs (the JIRA vendor reads description via Atlassian MCP; the GitHub vendor reads body via `gh issue view --json body`; the Linear vendor reads description via `lisa:linear-access operation: get-issue`).
|
|
26
26
|
- Evidence posting always goes through `lisa:tracker-evidence` — never bypass.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verify-prd
|
|
3
3
|
description: "Initiative-level PRD acceptance gate. Given a PRD ref/URL (GitHub Issue, Linear project/issue, Notion page, Confluence page, or JIRA issue), resolves the source vendor, reads the PRD body and its generated top-level child work set via the prd-lifecycle-rollup contract (native hierarchy first, machine-readable generated-work section fallback — never reimplementing child enumeration), and confirms every required generated top-level work item is terminal before any verification runs. If any required top-level child is non-terminal, it reports the incomplete child set and STOPS without verifying or transitioning the PRD. When the guard passes, it runs spec-conformance against the original PRD requirements (via the spec-conformance skill) plus empirical verification appropriate to the shipped surface (via verification-lifecycle). On a CONFORMS verdict with all empirical checks passing it runs the PASS path: transitions the PRD shipped → verified and posts verification evidence. On a PARTIAL/DIVERGES conformance verdict or any failing empirical check it runs the self-healing FAIL path: it re-opens the PRD shipped → ticketed (NEVER blocked), creates build-ready fix tickets (via tracker-write with build_ready: true) for each missing/incorrect/divergent behavior — registered as the PRD's generated work — and posts a product-readable failure report (with a verification-round count) naming which requirements/ACs failed with observed-vs-expected evidence. The fix tickets auto-build, rollup re-ships the PRD once they are terminal, and a later intake cycle re-verifies — the loop closes itself and never auto-halts. Re-runs are idempotent: evidence/failure-report comments are regenerated in place via a stable sentinel marker (never appended, round incremented), fix tickets are deduped by a stable PRD-ref + requirement marker (referenced/updated, never duplicated), and the lifecycle transition is a no-op when the PRD already carries the target role (exactly one lifecycle label/status remains) — per the prd-lifecycle-rollup idempotency dedupe key (match by stable ref, never by title)."
|
|
4
|
-
allowed-tools: ["Skill", "Bash", "Read", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read", "mcp__claude_ai_Notion__notion-fetch", "mcp__claude_ai_Notion__notion-get-comments", "mcp__atlassian__getConfluencePage", "mcp__atlassian__getConfluencePageDescendants", "mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# PRD-level Verification: $ARGUMENTS
|
|
@@ -38,7 +38,7 @@ Detect the vendor from `$ARGUMENTS` the same way `prd-ticket-coverage` / `prd-ba
|
|
|
38
38
|
| Input shape | Vendor | Read surface |
|
|
39
39
|
|---|---|---|
|
|
40
40
|
| `github.com/<org>/<repo>/issues/<n>` or `<org>/<repo>#<n>` | **GitHub Issues** | `gh` CLI (Lisa uses the CLI exclusively for GitHub — no GitHub MCP) |
|
|
41
|
-
| `linear.app/...` | **Linear** | `
|
|
41
|
+
| `linear.app/...` | **Linear** | `lisa:linear-access operation: get-project` / `lisa:linear-access operation: get-issue` |
|
|
42
42
|
| `notion.so` / `notion.site` | **Notion** | `mcp__claude_ai_Notion__notion-fetch` (`include_discussions: true`) |
|
|
43
43
|
| `*.atlassian.net/wiki/...` | **Confluence** | `mcp__atlassian__getConfluencePage` (+ descendants) |
|
|
44
44
|
| JIRA issue key (e.g. `PROJ-123`) or `*.atlassian.net/browse/...` | **JIRA** | `mcp__atlassian__getJiraIssue` |
|