@codyswann/lisa 2.10.1 → 2.11.0
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/agents/confluence-prd-intake.md +1 -1
- package/plugins/lisa/agents/github-prd-intake.md +2 -2
- package/plugins/lisa/agents/linear-agent.md +128 -0
- package/plugins/lisa/agents/linear-build-intake.md +62 -0
- package/plugins/lisa/agents/linear-prd-intake.md +2 -2
- package/plugins/lisa/agents/notion-prd-intake.md +1 -1
- package/plugins/lisa/commands/plan.md +1 -1
- package/plugins/lisa/rules/config-resolution.md +187 -0
- package/plugins/lisa/rules/intent-routing.md +13 -13
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +9 -4
- package/plugins/lisa/skills/confluence-to-tracker/SKILL.md +23 -16
- package/plugins/lisa/skills/github-create/SKILL.md +4 -4
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +8 -3
- package/plugins/lisa/skills/github-to-tracker/SKILL.md +22 -13
- package/plugins/lisa/skills/github-write-issue/SKILL.md +2 -2
- package/plugins/lisa/skills/implement/SKILL.md +1 -1
- package/plugins/lisa/skills/intake/SKILL.md +3 -3
- package/plugins/lisa/skills/jira-build-intake/SKILL.md +6 -3
- package/plugins/lisa/skills/jira-create/SKILL.md +4 -4
- package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/lisa/skills/linear-add-journey/SKILL.md +104 -0
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +160 -0
- package/plugins/lisa/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa/skills/linear-evidence/SKILL.md +86 -0
- package/plugins/lisa/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +11 -6
- package/plugins/lisa/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa/skills/linear-sync/SKILL.md +89 -0
- package/plugins/lisa/skills/linear-to-tracker/SKILL.md +20 -13
- package/plugins/lisa/skills/linear-validate-issue/SKILL.md +270 -0
- package/plugins/lisa/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa/skills/linear-write-issue/SKILL.md +282 -0
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +12 -6
- package/plugins/lisa/skills/notion-to-tracker/SKILL.md +21 -15
- package/plugins/lisa/skills/plan/SKILL.md +3 -2
- package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +1 -1
- package/plugins/lisa/skills/product-walkthrough/SKILL.md +2 -2
- package/plugins/lisa/skills/spec-conformance/SKILL.md +1 -2
- package/plugins/lisa/skills/ticket-triage/SKILL.md +1 -1
- package/plugins/lisa/skills/tracker-add-journey/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-create/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-journey/SKILL.md +5 -3
- package/plugins/lisa/skills/tracker-read/SKILL.md +6 -4
- package/plugins/lisa/skills/{jira-source-artifacts → tracker-source-artifacts}/SKILL.md +5 -5
- package/plugins/lisa/skills/tracker-sync/SKILL.md +6 -4
- package/plugins/lisa/skills/tracker-validate/SKILL.md +8 -7
- package/plugins/lisa/skills/tracker-verify/SKILL.md +4 -2
- package/plugins/lisa/skills/tracker-write/SKILL.md +12 -10
- package/plugins/lisa/skills/verify/SKILL.md +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/skills/jira-create/SKILL.md +4 -4
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/skills/jira-create/SKILL.md +4 -4
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/confluence-prd-intake.md +1 -1
- package/plugins/src/base/agents/github-prd-intake.md +2 -2
- package/plugins/src/base/agents/linear-agent.md +128 -0
- package/plugins/src/base/agents/linear-build-intake.md +62 -0
- package/plugins/src/base/agents/linear-prd-intake.md +2 -2
- package/plugins/src/base/agents/notion-prd-intake.md +1 -1
- package/plugins/src/base/commands/plan.md +1 -1
- package/plugins/src/base/rules/config-resolution.md +187 -0
- package/plugins/src/base/rules/intent-routing.md +13 -13
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +9 -4
- package/plugins/src/base/skills/confluence-to-tracker/SKILL.md +23 -16
- package/plugins/src/base/skills/github-create/SKILL.md +4 -4
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +8 -3
- package/plugins/src/base/skills/github-to-tracker/SKILL.md +22 -13
- package/plugins/src/base/skills/github-write-issue/SKILL.md +2 -2
- package/plugins/src/base/skills/implement/SKILL.md +1 -1
- package/plugins/src/base/skills/intake/SKILL.md +3 -3
- package/plugins/src/base/skills/jira-build-intake/SKILL.md +6 -3
- package/plugins/src/base/skills/jira-create/SKILL.md +4 -4
- package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +1 -1
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
- package/plugins/src/base/skills/linear-add-journey/SKILL.md +104 -0
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +160 -0
- package/plugins/src/base/skills/linear-create/SKILL.md +146 -0
- package/plugins/src/base/skills/linear-evidence/SKILL.md +86 -0
- package/plugins/src/base/skills/linear-journey/SKILL.md +134 -0
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +11 -6
- package/plugins/src/base/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/src/base/skills/linear-sync/SKILL.md +89 -0
- package/plugins/src/base/skills/linear-to-tracker/SKILL.md +20 -13
- package/plugins/src/base/skills/linear-validate-issue/SKILL.md +270 -0
- package/plugins/src/base/skills/linear-verify/SKILL.md +51 -0
- package/plugins/src/base/skills/linear-write-issue/SKILL.md +282 -0
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +12 -6
- package/plugins/src/base/skills/notion-to-tracker/SKILL.md +21 -15
- package/plugins/src/base/skills/plan/SKILL.md +3 -2
- package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +1 -1
- package/plugins/src/base/skills/product-walkthrough/SKILL.md +2 -2
- package/plugins/src/base/skills/spec-conformance/SKILL.md +1 -2
- package/plugins/src/base/skills/ticket-triage/SKILL.md +1 -1
- package/plugins/src/base/skills/tracker-add-journey/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-create/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-journey/SKILL.md +5 -3
- package/plugins/src/base/skills/tracker-read/SKILL.md +6 -4
- package/plugins/src/base/skills/{jira-source-artifacts → tracker-source-artifacts}/SKILL.md +5 -5
- package/plugins/src/base/skills/tracker-sync/SKILL.md +6 -4
- package/plugins/src/base/skills/tracker-validate/SKILL.md +8 -7
- package/plugins/src/base/skills/tracker-verify/SKILL.md +4 -2
- package/plugins/src/base/skills/tracker-write/SKILL.md +12 -10
- package/plugins/src/base/skills/verify/SKILL.md +1 -1
- package/plugins/src/expo/skills/jira-create/SKILL.md +4 -4
- package/plugins/src/rails/skills/jira-create/SKILL.md +4 -4
- package/plugins/lisa/rules/tracker-resolution.md +0 -76
- package/plugins/src/base/rules/tracker-resolution.md +0 -76
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear-journey
|
|
3
|
+
description: "Parse a Linear Issue's Validation Journey section, execute the verification steps using appropriate tools (curl, test commands, database queries, Playwright), capture evidence at each [EVIDENCE: name] marker, and post to Linear + GitHub PR using the linear-evidence skill. Linear counterpart of lisa:jira-journey."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Glob", "Grep", "Skill", "mcp__linear-server__list_teams", "mcp__linear-server__get_issue", "mcp__linear-server__save_issue"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Linear Validation Journey
|
|
8
|
+
|
|
9
|
+
Parse a Linear Issue's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each `[EVIDENCE: name]` marker, and post to Linear + GitHub PR.
|
|
10
|
+
|
|
11
|
+
This skill is the destination of the `lisa:tracker-journey` shim when `tracker = "linear"`.
|
|
12
|
+
|
|
13
|
+
## Configuration
|
|
14
|
+
|
|
15
|
+
Reads `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.local` override).
|
|
16
|
+
|
|
17
|
+
## Arguments
|
|
18
|
+
|
|
19
|
+
`$ARGUMENTS`: `<IDENTIFIER> [PR_NUMBER]`
|
|
20
|
+
|
|
21
|
+
- `IDENTIFIER` (required): Linear Issue identifier (e.g. `ENG-123`)
|
|
22
|
+
- `PR_NUMBER` (optional): GitHub PR number to update description
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
- Linear MCP authenticated
|
|
27
|
+
- `gh` CLI authenticated
|
|
28
|
+
- Appropriate services running for the verification type (dev server, database, etc.)
|
|
29
|
+
|
|
30
|
+
## Workflow
|
|
31
|
+
|
|
32
|
+
### Step 1: Parse the Validation Journey
|
|
33
|
+
|
|
34
|
+
Fetch the Issue via `mcp__linear-server__get_issue` and extract the `## Validation Journey` section from the markdown description. Parse:
|
|
35
|
+
|
|
36
|
+
- `### Prerequisites` — list of required services / env / setup
|
|
37
|
+
- `### Steps` — numbered steps, each potentially containing `[EVIDENCE: name]` markers
|
|
38
|
+
- `### Assertions` — what must be true after verification
|
|
39
|
+
|
|
40
|
+
If the section is missing or has no steps, report `"No Validation Journey on <IDENTIFIER>. Run /linear-add-journey first."` and stop.
|
|
41
|
+
|
|
42
|
+
### Step 2: Satisfy Prerequisites
|
|
43
|
+
|
|
44
|
+
Before executing steps, verify each prerequisite:
|
|
45
|
+
|
|
46
|
+
1. Required services running (dev server, database, queue worker)
|
|
47
|
+
2. Database connectivity if needed
|
|
48
|
+
3. Environment variables set
|
|
49
|
+
4. Run any setup commands mentioned in prerequisites
|
|
50
|
+
|
|
51
|
+
Stop and report if any prerequisite is not satisfied.
|
|
52
|
+
|
|
53
|
+
### Step 3: Execute Steps and Capture Evidence
|
|
54
|
+
|
|
55
|
+
Execute each step sequentially. Determine the verification approach based on the step text and change type:
|
|
56
|
+
|
|
57
|
+
- **API endpoints** → Run curl commands, capture HTTP response to `evidence/NN-name.txt` (or `.json` for structured data)
|
|
58
|
+
- **Database changes** → Run psql / migration commands, capture schema output
|
|
59
|
+
- **Background jobs** → Trigger the job, check queue / state, capture logs
|
|
60
|
+
- **Library / utility changes** → Run tests, capture output
|
|
61
|
+
- **Security fixes** → Reproduce exploit attempt, verify fix
|
|
62
|
+
- **UI / frontend** → Playwright browser flow, capture screenshots / DOM state
|
|
63
|
+
|
|
64
|
+
At each `[EVIDENCE: name]` marker, capture stdout / stderr to a numbered file:
|
|
65
|
+
|
|
66
|
+
#### Evidence Naming Convention
|
|
67
|
+
|
|
68
|
+
`{NN}-{evidence-name}.{ext}`
|
|
69
|
+
|
|
70
|
+
- `NN`: zero-padded sequential number (`01`, `02`, `03`...)
|
|
71
|
+
- `evidence-name`: the value from `[EVIDENCE: name]`
|
|
72
|
+
- `ext`: `.txt` for plain output, `.json` for structured data
|
|
73
|
+
|
|
74
|
+
Example:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
evidence/
|
|
78
|
+
01-health-check.json
|
|
79
|
+
02-schema-after-migration.txt
|
|
80
|
+
03-rate-limit-response.txt
|
|
81
|
+
comment.txt
|
|
82
|
+
code-blocks.md
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Step 4: Generate Evidence Comment + Code Blocks
|
|
86
|
+
|
|
87
|
+
After capturing all evidence, build:
|
|
88
|
+
|
|
89
|
+
- `evidence/comment.txt` — human-readable summary of the verification (Linear comment body, markdown-supported)
|
|
90
|
+
- `evidence/code-blocks.md` — fenced code blocks containing the captured evidence outputs (appended below `comment.txt` inside a `<details>` block)
|
|
91
|
+
|
|
92
|
+
### Step 5: Post Evidence
|
|
93
|
+
|
|
94
|
+
Invoke `lisa:linear-evidence` with `<IDENTIFIER> ./evidence` to:
|
|
95
|
+
|
|
96
|
+
1. Upload large evidence files to the GitHub `pr-assets` release (if files present in `evidence/files/`).
|
|
97
|
+
2. Update the GitHub PR description with an Evidence section (when a PR is open).
|
|
98
|
+
3. Post the Linear comment (`comment.txt` + collapsible `code-blocks.md`).
|
|
99
|
+
4. Transition labels: remove `status:in-progress`, add `status:code-review`.
|
|
100
|
+
|
|
101
|
+
### Step 6: Verify
|
|
102
|
+
|
|
103
|
+
Confirm:
|
|
104
|
+
- Evidence appears as a comment on the Linear Issue.
|
|
105
|
+
- The PR description shows the Evidence section.
|
|
106
|
+
- The Issue's `status:*` label transitioned to `code-review`.
|
|
107
|
+
|
|
108
|
+
## Verification Patterns Reference
|
|
109
|
+
|
|
110
|
+
Use patterns from the project's `verification.md`:
|
|
111
|
+
|
|
112
|
+
| Change Type | Verification Method | Evidence Format |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| API endpoint | `curl -s localhost:PORT/endpoint` | JSON response |
|
|
115
|
+
| Database migration | `psql -c "\d table"` or migration output | Schema text |
|
|
116
|
+
| Background job | Trigger + check state | Log output |
|
|
117
|
+
| Library / utility | `bun run test -- path/to/test` | Test output |
|
|
118
|
+
| Security fix | Reproduce + verify fix | Request / response |
|
|
119
|
+
| Auth/authz | Multi-role verification | Status codes per role |
|
|
120
|
+
| UI / frontend | Playwright `browser_*` MCP tools | Screenshot + DOM |
|
|
121
|
+
|
|
122
|
+
## Troubleshooting
|
|
123
|
+
|
|
124
|
+
### Evidence file is empty
|
|
125
|
+
|
|
126
|
+
Ensure the command succeeded and produced output. Use `2>&1` to capture both stdout and stderr.
|
|
127
|
+
|
|
128
|
+
### Parser returns no steps
|
|
129
|
+
|
|
130
|
+
The Issue may not have a Validation Journey section. Run `/linear-add-journey <IDENTIFIER>` to add one.
|
|
131
|
+
|
|
132
|
+
### Label transition fails
|
|
133
|
+
|
|
134
|
+
Ensure `status:in-progress` and `status:code-review` exist on the team. `lisa:linear-evidence` creates them on demand if missing.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: linear-prd-intake
|
|
3
|
-
description: "Scans a Linear workspace (or a specific team) for projects labelled `prd-ready` and runs each one through the dry-run validation pipeline. Projects that pass every gate get tickets written and the label flipped to `prd-ticketed`; projects that fail get clarifying-question comments (on a sentinel feedback issue under the project) and the label flipped to `prd-blocked`. Linear counterpart of `lisa:notion-prd-intake` and `lisa:confluence-prd-intake` — the workflow is identical; only the source-of-truth tools differ. Composes existing skills (linear-to-tracker, tracker-validate,
|
|
3
|
+
description: "Scans a Linear workspace (or a specific team) for projects labelled `prd-ready` and runs each one through the dry-run validation pipeline. Projects that pass every gate get tickets written and the label flipped to `prd-ticketed`; projects that fail get clarifying-question comments (on a sentinel feedback issue under the project) and the label flipped to `prd-blocked`. Linear counterpart of `lisa:notion-prd-intake` and `lisa:confluence-prd-intake` — the workflow is identical; only the source-of-truth tools differ. Composes existing skills (linear-to-tracker, tracker-validate, tracker-source-artifacts, product-walkthrough)."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "mcp__linear-server__list_projects", "mcp__linear-server__get_project", "mcp__linear-server__save_project", "mcp__linear-server__list_project_labels", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__save_issue", "mcp__linear-server__list_comments", "mcp__linear-server__save_comment", "mcp__linear-server__list_issue_labels", "mcp__linear-server__create_issue_label", "mcp__linear-server__list_documents", "mcp__linear-server__get_document", "mcp__linear-server__list_teams"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ allowed-tools: ["Skill", "Bash", "mcp__linear-server__list_projects", "mcp__line
|
|
|
10
10
|
|
|
11
11
|
- A Linear **workspace** URL — scans every project in the workspace whose labels include `prd-ready`. Example: `https://linear.app/acme`.
|
|
12
12
|
- A Linear **team** URL or team key — scans every project on the team whose labels include `prd-ready`. Example: `https://linear.app/acme/team/ENG/projects` or bare `ENG`.
|
|
13
|
-
- The literal token `linear` — equivalent to "the default Linear workspace"; only valid if `
|
|
13
|
+
- The literal token `linear` — equivalent to "the default Linear workspace"; only valid if `linear.workspace` is configured in `.lisa.config.json`.
|
|
14
14
|
|
|
15
15
|
Run one intake cycle against that scope. Each project with the `prd-ready` label is claimed, validated, and routed to either `prd-blocked` (with clarifying comments on a sentinel feedback issue) or `prd-ticketed` (with JIRA tickets created).
|
|
16
16
|
|
|
@@ -29,7 +29,7 @@ Specifically forbidden:
|
|
|
29
29
|
|
|
30
30
|
The only legitimate reasons to stop early:
|
|
31
31
|
|
|
32
|
-
- Missing scope argument or required configuration (`
|
|
32
|
+
- Missing scope argument or required configuration (`linear.workspace` in `.lisa.config.json`, `E2E_BASE_URL`, etc.). Surface the missing key(s) and exit this cycle — never invent values.
|
|
33
33
|
- Workspace/team unreachable, or the labelling convention not yet adopted (no projects carry any of `prd-ready` / `prd-in-review` / `prd-blocked` / `prd-ticketed`). Surface and exit.
|
|
34
34
|
- Empty `prd-ready` set. Exit cleanly with `"No Linear projects labelled prd-ready. Nothing to do."`
|
|
35
35
|
|
|
@@ -63,7 +63,7 @@ If the project does not yet use `prd-*` labels, this skill cannot run. Adopting
|
|
|
63
63
|
- Workspace URL (`https://linear.app/<workspace>`) → extract workspace slug; the scope is the entire workspace.
|
|
64
64
|
- Team URL containing `/team/<KEY>/...` → extract team key; the scope is that team.
|
|
65
65
|
- Bare team key → use as-is; the scope is that team.
|
|
66
|
-
- The literal `linear` → fall back to `
|
|
66
|
+
- The literal `linear` → fall back to `linear.workspace` from `.lisa.config.json`; error if not set.
|
|
67
67
|
2. Verify the scope is reachable:
|
|
68
68
|
- For a workspace: call `mcp__linear-server__list_teams` and confirm at least one team is returned (non-empty workspaces are readable; empty results indicate auth or workspace-mismatch).
|
|
69
69
|
- For a team: call `mcp__linear-server__list_teams({query: <KEY>})` and confirm the team resolves.
|
|
@@ -106,7 +106,7 @@ Invoke the `lisa:linear-to-tracker` skill with `dry_run: true` and the project's
|
|
|
106
106
|
- An overall PASS / FAIL verdict
|
|
107
107
|
- A failure count
|
|
108
108
|
|
|
109
|
-
This call also indirectly invokes `lisa:
|
|
109
|
+
This call also indirectly invokes `lisa:tracker-source-artifacts` (artifact extraction + classification) and `lisa:product-walkthrough` (when the PRD touches existing user-facing surfaces). All gate logic lives in `lisa:tracker-validate`, which `lisa:linear-to-tracker` calls per ticket.
|
|
110
110
|
|
|
111
111
|
#### 3c. Branch on the verdict
|
|
112
112
|
|
|
@@ -250,7 +250,12 @@ Idempotency: the helper finds-or-creates. Re-runs of the cycle reuse the same se
|
|
|
250
250
|
|
|
251
251
|
## Configuration
|
|
252
252
|
|
|
253
|
-
Same
|
|
253
|
+
Same configuration as `lisa:linear-to-tracker`. See that skill for the full table. Key items:
|
|
254
|
+
|
|
255
|
+
- **From `.lisa.config.json`**: `linear.workspace` (required for Linear MCP). When the destination tracker is `linear`, also `linear.teamKey`.
|
|
256
|
+
- **From environment variables**: `E2E_BASE_URL`, `E2E_TEST_PHONE`, `E2E_TEST_OTP`, `E2E_TEST_ORG`, `E2E_GRAPHQL_URL` (operational E2E test config).
|
|
257
|
+
|
|
258
|
+
Destination tracker config (jira / github / linear) is consumed by `lisa:tracker-write` internally — this skill does NOT read it. If any required value is missing, surface the missing key(s) and exit this cycle — never invent values.
|
|
254
259
|
|
|
255
260
|
## Rules
|
|
256
261
|
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear-read-issue
|
|
3
|
+
description: "Fetches the full scope of a Linear work item — Issue or Project — including metadata, description, acceptance criteria, all comments, attachments, native relations (blocks/blocked_by/relates_to/duplicates), Project parent (if any) with siblings, and sub-Issues. Produces a consolidated context bundle that downstream agents consume so they never act on a single item in isolation."
|
|
4
|
+
allowed-tools: ["Bash", "Skill", "mcp__linear-server__list_teams", "mcp__linear-server__get_issue", "mcp__linear-server__get_project", "mcp__linear-server__list_issues", "mcp__linear-server__list_comments", "mcp__linear-server__list_documents", "mcp__linear-server__get_document"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Read Linear Work Item: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Fetch the full scope of the item AND its related graph. Downstream agents must never act on an item in isolation — always call this skill first so they see blockers, project siblings, linked PRs, and historical comments.
|
|
10
|
+
|
|
11
|
+
This skill is the destination of the `lisa:tracker-read` shim when `tracker = "linear"`. Read-only.
|
|
12
|
+
|
|
13
|
+
Repository name for scoped comments and logs: `basename $(git rev-parse --show-toplevel)`.
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
Reads `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.local` override).
|
|
18
|
+
|
|
19
|
+
## Phase 1 — Resolve Context
|
|
20
|
+
|
|
21
|
+
1. If `$ARGUMENTS` matches `<TEAM>-<n>` → Issue mode.
|
|
22
|
+
2. If `$ARGUMENTS` is a URL containing `/project/<slug>-<short-id>` → Project mode (extract `<short-id>`).
|
|
23
|
+
3. Otherwise stop and report. Do NOT guess.
|
|
24
|
+
4. Resolve team ID via `mcp__linear-server__list_teams({query: <teamKey>})`.
|
|
25
|
+
|
|
26
|
+
## Phase 2 — Fetch Primary Item
|
|
27
|
+
|
|
28
|
+
### Issue mode
|
|
29
|
+
|
|
30
|
+
Call `mcp__linear-server__get_issue`. Extract and preserve:
|
|
31
|
+
|
|
32
|
+
**Metadata**
|
|
33
|
+
- Identifier, title, issue type (typically a label or workflow state), state, priority (0–4)
|
|
34
|
+
- Assignee, creator, subscribers
|
|
35
|
+
- Labels (capture full names — `status:*`, `component:*`, `priority:*`, `prd-*`)
|
|
36
|
+
- Project (parent), parent Issue (if Sub-task), cycle, milestone (ProjectMilestone)
|
|
37
|
+
- Estimate, due date
|
|
38
|
+
- Created, updated, completed dates
|
|
39
|
+
|
|
40
|
+
**Body**
|
|
41
|
+
- Full description (preserve markdown)
|
|
42
|
+
- **Validation Journey** section if present (pass verbatim to downstream)
|
|
43
|
+
- Attachment URLs (capture, do not download unless needed)
|
|
44
|
+
|
|
45
|
+
**Comments**
|
|
46
|
+
Fetch ALL comments via `mcp__linear-server__list_comments({issueId: <id>})` in chronological order. Walk thread parents/children — Linear comments are threaded via `parentId`. Do not truncate. For each comment:
|
|
47
|
+
- Author, timestamp, body
|
|
48
|
+
- Flag comments that contain: credentials, reproduction steps, status updates from stakeholders, decisions, or triage headers.
|
|
49
|
+
|
|
50
|
+
### Project mode
|
|
51
|
+
|
|
52
|
+
Call `mcp__linear-server__get_project` with `includeMilestones: true`, `includeResources: true`. Extract:
|
|
53
|
+
|
|
54
|
+
**Metadata**
|
|
55
|
+
- ID, slug, name, state, priority, lead, color
|
|
56
|
+
- Teams, labels, milestones, target date, start date
|
|
57
|
+
- Created, updated dates
|
|
58
|
+
|
|
59
|
+
**Body**
|
|
60
|
+
- Description (markdown)
|
|
61
|
+
- Attached documents — call `mcp__linear-server__list_documents({projectId})` then `get_document` per result. Treat each as additional spec content.
|
|
62
|
+
|
|
63
|
+
**Member Issues**
|
|
64
|
+
- Call `mcp__linear-server__list_issues({project: <id>})` to enumerate the Project's Issues. Capture identifier, title, state, parent Issue (for sub-Issue tree).
|
|
65
|
+
|
|
66
|
+
## Phase 3 — Fetch Attachments / Remote Links
|
|
67
|
+
|
|
68
|
+
Linear stores remote URLs as attachments on the Issue. For each:
|
|
69
|
+
|
|
70
|
+
- **GitHub PR or commit**: run `gh pr view <url> --json title,state,body,mergedAt,reviewDecision,comments,reviews` (PRs) or `gh api repos/<owner>/<repo>/commits/<sha>` (commits). Capture title, state, unresolved review comments, merge status.
|
|
71
|
+
- **Confluence page**: capture title and URL. Do not fetch body unless a downstream task explicitly needs it.
|
|
72
|
+
- **Dashboard / log link / external URL**: capture title and URL only.
|
|
73
|
+
|
|
74
|
+
If `gh` is not authenticated, note "gh auth required" and continue — do not abort.
|
|
75
|
+
|
|
76
|
+
## Phase 4 — Fetch Relations
|
|
77
|
+
|
|
78
|
+
Linear native Issue relations are returned in the `get_issue` response under `relations`. Group by type:
|
|
79
|
+
|
|
80
|
+
- `blocks` / `blocked_by`
|
|
81
|
+
- `relates_to`
|
|
82
|
+
- `duplicates` / `duplicated_by`
|
|
83
|
+
|
|
84
|
+
For each related Issue, call `mcp__linear-server__get_issue` and capture:
|
|
85
|
+
- Identifier, title, state, priority, assignee
|
|
86
|
+
- Description (full, unless cancelled — then summary only)
|
|
87
|
+
- Acceptance Criteria section
|
|
88
|
+
- Last 10 comments (chronological)
|
|
89
|
+
- Attachments (URLs only — skip deep PR fetch unless the relation is `blocks` or `blocked_by`)
|
|
90
|
+
|
|
91
|
+
**Special handling for `blocked_by`:** fetch full PR details via `gh` for each blocker's GitHub attachments so the agent knows whether the blocker is actually shipped.
|
|
92
|
+
|
|
93
|
+
For Project-level relationships (Project ↔ Project), Linear doesn't model native relations — check the Project description and resources for cross-references and capture them as plain links.
|
|
94
|
+
|
|
95
|
+
## Phase 5 — Fetch Project Context
|
|
96
|
+
|
|
97
|
+
If the primary Item is an Issue with a Project parent:
|
|
98
|
+
|
|
99
|
+
1. Fetch the Project via `mcp__linear-server__get_project` — full description, milestones, labels, lead.
|
|
100
|
+
2. Fetch Project documents (Phase 2 procedure).
|
|
101
|
+
3. Find Project siblings via `mcp__linear-server__list_issues({project: <projectId>})` excluding the primary identifier.
|
|
102
|
+
4. For each sibling, capture: identifier, title, state, priority, assignee, summary (first paragraph of description).
|
|
103
|
+
5. If a sibling is `Started` or `In Review` with a different assignee, flag it prominently.
|
|
104
|
+
|
|
105
|
+
If the primary Item IS a Project, Phase 5 is the same as fetching all member Issues (already done in Phase 2 Project mode).
|
|
106
|
+
|
|
107
|
+
## Phase 6 — Fetch Sub-Issues
|
|
108
|
+
|
|
109
|
+
If the primary Issue has children (sub-Issues), fetch each via `mcp__linear-server__get_issue`: identifier, title, state, assignee, description (first paragraph), Acceptance Criteria.
|
|
110
|
+
|
|
111
|
+
## Phase 7 — Assemble Context Bundle
|
|
112
|
+
|
|
113
|
+
Produce a single structured output the caller can pass verbatim to downstream agents.
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
# Linear Work Item Context: <IDENTIFIER>
|
|
117
|
+
|
|
118
|
+
## Primary Item
|
|
119
|
+
- Identifier: <ID>
|
|
120
|
+
- Type: <Issue | Project>
|
|
121
|
+
- State: <state>
|
|
122
|
+
- Priority: <0–4 or named>
|
|
123
|
+
- Assignee: <name or none>
|
|
124
|
+
- Project (parent): <project-slug — name> or none
|
|
125
|
+
- Parent Issue: <ID — title> or none (Sub-task only)
|
|
126
|
+
- Cycle: <name or none>
|
|
127
|
+
- Milestone: <project-milestone or none>
|
|
128
|
+
- Labels: <comma-separated>
|
|
129
|
+
- Estimate: <points>
|
|
130
|
+
|
|
131
|
+
### Description
|
|
132
|
+
<full description>
|
|
133
|
+
|
|
134
|
+
### Acceptance Criteria
|
|
135
|
+
<criteria>
|
|
136
|
+
|
|
137
|
+
### Validation Journey
|
|
138
|
+
<section or "None">
|
|
139
|
+
|
|
140
|
+
### Comments (<count>)
|
|
141
|
+
<chronological comments, flagged items called out>
|
|
142
|
+
|
|
143
|
+
### Attachments
|
|
144
|
+
<list of URLs with titles>
|
|
145
|
+
|
|
146
|
+
## Remote Links
|
|
147
|
+
### Pull Requests (<count>)
|
|
148
|
+
- <url> — <title> — <state> — <reviewDecision>
|
|
149
|
+
<body summary + unresolved review comments>
|
|
150
|
+
|
|
151
|
+
### Confluence
|
|
152
|
+
- <title> — <url>
|
|
153
|
+
|
|
154
|
+
### Other
|
|
155
|
+
- <title> — <url>
|
|
156
|
+
|
|
157
|
+
## Relations
|
|
158
|
+
### Blocks (<count>)
|
|
159
|
+
<per-issue block>
|
|
160
|
+
|
|
161
|
+
### Blocked By (<count>)
|
|
162
|
+
<per-issue block with PR state>
|
|
163
|
+
|
|
164
|
+
### Relates To (<count>)
|
|
165
|
+
<per-issue block>
|
|
166
|
+
|
|
167
|
+
### Duplicates / Duplicated By
|
|
168
|
+
<per-issue block>
|
|
169
|
+
|
|
170
|
+
## Project Context (when primary is an Issue under a Project)
|
|
171
|
+
### Project <slug> — <name>
|
|
172
|
+
- State: <state>
|
|
173
|
+
- Description: <full markdown>
|
|
174
|
+
- Milestones: <list>
|
|
175
|
+
- Documents: <list of doc titles + identifiers>
|
|
176
|
+
|
|
177
|
+
### Siblings In-Flight (<count>)
|
|
178
|
+
- <ID> — <state> — <assignee> — <title> **[FLAG: in progress by other assignee]**
|
|
179
|
+
|
|
180
|
+
### Other Siblings (<count>)
|
|
181
|
+
- <ID> — <state> — <title>
|
|
182
|
+
|
|
183
|
+
## Sub-Issues (<count>)
|
|
184
|
+
- <ID> — <state> — <assignee> — <title>
|
|
185
|
+
|
|
186
|
+
## Summary for Downstream
|
|
187
|
+
- Full item count pulled: <N>
|
|
188
|
+
- Blockers still open: <list>
|
|
189
|
+
- Related in-flight work: <list>
|
|
190
|
+
- Relevant PRs: <list with state>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Rules
|
|
194
|
+
|
|
195
|
+
- Never summarize or truncate the primary item's description or Validation Journey.
|
|
196
|
+
- Never skip a relation type, even if it seems unrelated — the downstream agent decides relevance.
|
|
197
|
+
- If a related item returns an access error, capture the error and continue. Do not abort the read.
|
|
198
|
+
- Flag in-flight sibling work prominently so the caller can avoid duplicate implementation.
|
|
199
|
+
- If the Issue has no Project parent, state this explicitly — do not silently skip Phase 5.
|
|
200
|
+
- Output is pure context. This skill never modifies the item.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear-sync
|
|
3
|
+
description: "Syncs plan progress to a linked Linear Issue. Posts plan contents, progress updates, branch links, and PR links at key milestones. Use this skill throughout the plan lifecycle to keep Linear Issues in sync. The Linear counterpart of lisa:jira-sync and lisa:github-sync."
|
|
4
|
+
allowed-tools: ["Bash", "Skill", "mcp__linear-server__list_teams", "mcp__linear-server__get_issue", "mcp__linear-server__save_comment", "mcp__linear-server__list_issue_labels", "mcp__linear-server__create_issue_label", "mcp__linear-server__save_issue"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Sync Plan to Linear: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Post milestone updates to the linked Linear Issue at key plan-lifecycle moments. This skill is the destination of the `lisa:tracker-sync` shim when `tracker = "linear"`.
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
Reads `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.local` override).
|
|
14
|
+
|
|
15
|
+
## When to invoke
|
|
16
|
+
|
|
17
|
+
Callers (planning skills, lifecycle skills) invoke this skill at:
|
|
18
|
+
|
|
19
|
+
| Milestone | What to post |
|
|
20
|
+
|-----------|--------------|
|
|
21
|
+
| Plan created | Plan contents (sections + ordered tasks) as a comment, suggest transition `Backlog → Todo` (label: `status:ready`) |
|
|
22
|
+
| Implementation in progress | Branch URL + first commit, suggest transition `Todo → In Progress` (label: `status:in-progress`) |
|
|
23
|
+
| PR ready for review | PR URL + summary, the implementation handoff comment, suggest transition `In Progress → In Review` (label: `status:code-review`) |
|
|
24
|
+
| PR merged | Merge SHA + deploy environment (if known), suggest transition `In Review → Done` (label: `status:done`) |
|
|
25
|
+
|
|
26
|
+
This skill **suggests** transitions but does not auto-transition the native Linear `state` field. It DOES update the `status:*` label set when the caller asks (the build queue is keyed off labels). Native state transitions remain a human / triage decision.
|
|
27
|
+
|
|
28
|
+
## Input
|
|
29
|
+
|
|
30
|
+
`$ARGUMENTS` is `<IDENTIFIER> <milestone>` where:
|
|
31
|
+
|
|
32
|
+
- `<IDENTIFIER>` is the Linear Issue identifier (e.g. `ENG-123`). If not provided, the skill searches the active plan file for a linked Linear Issue.
|
|
33
|
+
- `<milestone>` is one of `plan-created`, `implementation-in-progress`, `pr-ready`, `pr-merged`.
|
|
34
|
+
|
|
35
|
+
## Phase 1 — Resolve Issue
|
|
36
|
+
|
|
37
|
+
1. If `$ARGUMENTS` includes an identifier, parse it.
|
|
38
|
+
2. Else search for the active plan file (most recent file under `plans/`) and extract the linked Linear Issue identifier from its frontmatter.
|
|
39
|
+
3. Fetch the Issue via `mcp__linear-server__get_issue` to confirm it exists.
|
|
40
|
+
|
|
41
|
+
## Phase 2 — Compose Milestone Comment
|
|
42
|
+
|
|
43
|
+
Per the milestone, build the comment body. Include:
|
|
44
|
+
|
|
45
|
+
- A milestone header (e.g. `**Plan created** — <plan-file>`)
|
|
46
|
+
- Relevant links (plan file, branch, PR)
|
|
47
|
+
- A short summary (first 5 lines of the plan section / commit message / PR description)
|
|
48
|
+
- The suggested status transition
|
|
49
|
+
|
|
50
|
+
Example for `plan-created`:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
**Plan created** — `plans/feat-X.md`
|
|
54
|
+
|
|
55
|
+
Sections:
|
|
56
|
+
- Phase 1: Schema doc
|
|
57
|
+
- Phase 2: Linear destination skills
|
|
58
|
+
- ...
|
|
59
|
+
|
|
60
|
+
Tasks: 7 ordered items.
|
|
61
|
+
|
|
62
|
+
Next: implementation begins. Suggested status: **Todo** (label: `status:ready`).
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Phase 3 — Post Comment
|
|
66
|
+
|
|
67
|
+
Call `mcp__linear-server__save_comment({issueId: <id>, body: <comment>})`.
|
|
68
|
+
|
|
69
|
+
## Phase 4 — Update Status Label (when caller requests)
|
|
70
|
+
|
|
71
|
+
If the caller passes `--update-label`, update the `status:*` label set via `mcp__linear-server__save_issue`:
|
|
72
|
+
|
|
73
|
+
- `plan-created` → add `status:ready`
|
|
74
|
+
- `implementation-in-progress` → remove `status:ready`, add `status:in-progress`
|
|
75
|
+
- `pr-ready` → remove `status:in-progress`, add `status:code-review`
|
|
76
|
+
- `pr-merged` → remove `status:code-review`, add `status:done`
|
|
77
|
+
|
|
78
|
+
If the requested label doesn't exist on the team, create it via `mcp__linear-server__create_issue_label`.
|
|
79
|
+
|
|
80
|
+
Verify exactly one `status:*` label remains after the update — having two simultaneously breaks the build-queue invariant.
|
|
81
|
+
|
|
82
|
+
Without `--update-label`, this skill posts the comment only and does NOT touch labels.
|
|
83
|
+
|
|
84
|
+
## Rules
|
|
85
|
+
|
|
86
|
+
- Never auto-transition the native Linear `state` — only the label, and only when the caller explicitly asks.
|
|
87
|
+
- Never post empty or minimal comments — if a milestone has no meaningful content, skip the post.
|
|
88
|
+
- Do not delete prior milestone comments. They are the audit trail.
|
|
89
|
+
- If `save_comment` fails, retry once. If it fails again, surface the error.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: linear-to-tracker
|
|
3
3
|
description: >
|
|
4
|
-
Break down a Linear PRD (a Linear Project) into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA
|
|
4
|
+
Break down a Linear PRD (a Linear Project) into Epics, Stories, and Sub-tasks in the configured destination tracker (JIRA, GitHub Issues, or Linear per .lisa.config.json). Use this skill
|
|
5
5
|
whenever the user shares a Linear project URL and wants it converted into tracker tickets, or asks to
|
|
6
6
|
"break down this Linear project", "create tickets from a Linear project", "turn this Linear PRD into tickets", or similar. This skill mirrors `lisa:notion-to-tracker` and `lisa:confluence-to-tracker` for projects
|
|
7
7
|
whose PRDs live in Linear — the workflow, gates, dry-run mode, and validation rules are identical;
|
|
@@ -11,7 +11,7 @@ allowed-tools: ["Skill", "Bash", "mcp__linear-server__get_project", "mcp__linear
|
|
|
11
11
|
|
|
12
12
|
# Linear PRD to Tracker Breakdown
|
|
13
13
|
|
|
14
|
-
Convert a Linear PRD (a Linear **Project**) into a structured ticket hierarchy in the configured destination tracker (JIRA
|
|
14
|
+
Convert a Linear PRD (a Linear **Project**) into a structured ticket hierarchy in the configured destination tracker (JIRA, GitHub Issues, or Linear per .lisa.config.json): Epics > Stories > Sub-tasks.
|
|
15
15
|
Each sub-task is scoped to exactly one repo and includes an empirical verification plan.
|
|
16
16
|
|
|
17
17
|
This skill is the Linear counterpart of `lisa:notion-to-tracker` and `lisa:confluence-to-tracker`. The three skills share the same phases, gates, dry-run contract, and per-ticket validation logic. Only the PRD-side fetch tools differ. When changing workflow logic, change ALL THREE skills together so the source vendors stay behaviorally identical.
|
|
@@ -101,13 +101,20 @@ Extract the trailing `<short-id>` (the alphanumeric segment after the last `-` i
|
|
|
101
101
|
|
|
102
102
|
## Configuration
|
|
103
103
|
|
|
104
|
-
This skill reads project
|
|
104
|
+
This skill reads project configuration from `.lisa.config.json` (with `.lisa.config.local.json` overriding per key) and operational E2E test config from environment variables. See the `config-resolution` rule for the full schema.
|
|
105
|
+
|
|
106
|
+
### From `.lisa.config.json`
|
|
107
|
+
|
|
108
|
+
This skill is a **PRD source** (Linear); destination tracker resolution is handled by `lisa:tracker-write` and `lisa:tracker-validate` internally — this skill does NOT read `tracker` directly. The relevant config for the source side:
|
|
109
|
+
|
|
110
|
+
| Field | Purpose | Required when |
|
|
111
|
+
|-------|---------|---------------|
|
|
112
|
+
| `linear.workspace` | Linear workspace slug (used for URL synthesis on remote links) | always |
|
|
113
|
+
|
|
114
|
+
### From environment variables (E2E test config — operational, not tracker)
|
|
105
115
|
|
|
106
116
|
| Variable | Purpose | Example |
|
|
107
117
|
|----------|---------|---------|
|
|
108
|
-
| `JIRA_PROJECT` | JIRA project key for ticket creation | `SE` |
|
|
109
|
-
| `JIRA_SERVER` | Atlassian instance URL (site host) | `mycompany.atlassian.net` |
|
|
110
|
-
| `LINEAR_WORKSPACE` | Linear workspace slug (used for URL synthesis on JIRA remote links) | `acme` |
|
|
111
118
|
| `E2E_TEST_PHONE` | Test user phone number for verification plans | `0000000099` |
|
|
112
119
|
| `E2E_TEST_OTP` | Test user OTP code | `555555` |
|
|
113
120
|
| `E2E_TEST_ORG` | Test organization name | `Arsenal` |
|
|
@@ -144,17 +151,17 @@ PRDs typically reference external design, UX, and data artifacts (Figma files, L
|
|
|
144
151
|
- Embedded images and file attachments referenced in the project / documents
|
|
145
152
|
- Fenced code blocks with example data (JSON, SQL, GraphQL, cURL request/response)
|
|
146
153
|
|
|
147
|
-
2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:
|
|
154
|
+
2. **Classify each artifact and apply taxonomy rules** by invoking the `lisa:tracker-source-artifacts` skill. That skill is the single source of truth for: domains (`ui-design` / `ux-flow` / `data` / `ops` / `reference`), per-tool classification rules (Figma `/proto/` vs design, Lovable as `ux-flow`, Loom, screenshots), and coverage smells. Do not restate the rules here — invoke the skill so any drift in the rules propagates uniformly.
|
|
148
155
|
|
|
149
156
|
3. **Build an `artifacts` map** keyed by domain. Each entry: `{ url, title, domain, source_page, source_page_url, classification_reason }`. The `classification_reason` makes disambiguation auditable. The `source_page` lets you trace each reference back to where it appeared (project description vs a specific document title vs a specific sub-issue comment).
|
|
150
157
|
|
|
151
|
-
4. **Surface coverage smells** as defined in `lisa:
|
|
158
|
+
4. **Surface coverage smells** as defined in `lisa:tracker-source-artifacts` §5. Record any detected smells on the epic.
|
|
152
159
|
|
|
153
160
|
### Phase 1.6: Source Precedence & Conflict Resolution
|
|
154
161
|
|
|
155
|
-
Source precedence rules and cross-axis conflict handling are defined in `lisa:
|
|
162
|
+
Source precedence rules and cross-axis conflict handling are defined in `lisa:tracker-source-artifacts` §3 and §4. Apply them during ticket synthesis: every conflict between artifacts must be recorded under `## Open Questions` on the affected ticket, never silently reconciled.
|
|
156
163
|
|
|
157
|
-
The existing-component reuse expectation is defined in `lisa:
|
|
164
|
+
The existing-component reuse expectation is defined in `lisa:tracker-source-artifacts` §7. Encode it on every UI-touching story.
|
|
158
165
|
|
|
159
166
|
### Phase 2: Codebase + Live Product Research
|
|
160
167
|
|
|
@@ -174,7 +181,7 @@ Walkthrough findings are surfaced back to product via the orchestrating intake s
|
|
|
174
181
|
|
|
175
182
|
For each epic identified in Phase 1, **invoke the `lisa:tracker-write` skill** (do not call `createJiraIssue` directly). Pass it everything it needs to enforce its quality gates:
|
|
176
183
|
|
|
177
|
-
- `project_key`:
|
|
184
|
+
- `project_key`: resolved by `lisa:tracker-write` from `.lisa.config.json`
|
|
178
185
|
- `issue_type`: `Epic`
|
|
179
186
|
- `summary`: epic title from the PRD
|
|
180
187
|
- `description_body`: a draft of the 3-audience description containing:
|
|
@@ -202,7 +209,7 @@ For each Epic, plan two kinds of stories:
|
|
|
202
209
|
|
|
203
210
|
For each story, **invoke `lisa:tracker-write`** with:
|
|
204
211
|
|
|
205
|
-
- `project_key`:
|
|
212
|
+
- `project_key`: resolved by `lisa:tracker-write` from `.lisa.config.json`
|
|
206
213
|
- `issue_type`: `Story`
|
|
207
214
|
- `epic_parent`: the Epic key captured in Phase 3 (mandatory)
|
|
208
215
|
- `summary`: prefixed per the naming convention above
|
|
@@ -230,7 +237,7 @@ Sub-tasks inherit their parent story's artifacts by reference (the parent link).
|
|
|
230
237
|
|
|
231
238
|
### Phase 5.5: Artifact Preservation Gate (mandatory)
|
|
232
239
|
|
|
233
|
-
Run the preservation gate defined in `lisa:
|
|
240
|
+
Run the preservation gate defined in `lisa:tracker-source-artifacts` §8 against the artifacts extracted in Phase 1.5 and the tickets just created. Do NOT restate or modify the gate logic here — invoke the rules from `lisa:tracker-source-artifacts`.
|
|
234
241
|
|
|
235
242
|
To run the gate, this skill must:
|
|
236
243
|
|