@codyswann/lisa 2.61.0 → 2.62.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/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/confluence-prd-intake.md +1 -1
- package/plugins/lisa/agents/github-agent.md +4 -5
- package/plugins/lisa/agents/github-build-intake.md +1 -1
- package/plugins/lisa/agents/github-prd-intake.md +1 -1
- package/plugins/lisa/agents/linear-prd-intake.md +1 -1
- package/plugins/lisa/agents/notion-prd-intake.md +1 -1
- package/plugins/lisa/commands/intake.md +1 -1
- package/plugins/lisa/commands/project-ideation.md +3 -3
- package/plugins/lisa/commands/repair-intake.md +6 -0
- package/plugins/lisa/commands/research.md +3 -3
- package/plugins/lisa/commands/setup-automations.md +6 -0
- package/plugins/lisa/commands/tear-down-automations.md +6 -0
- package/plugins/lisa/commands/verify-prd.md +2 -2
- package/plugins/lisa/rules/config-resolution.md +63 -4
- package/plugins/lisa/rules/intent-routing.md +4 -3
- package/plugins/lisa/rules/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/rules/prd-lifecycle-rollup.md +10 -2
- package/plugins/lisa/rules/repo-scope-split.md +18 -1
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +24 -14
- package/plugins/lisa/skills/confluence-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/confluence-write-prd/SKILL.md +103 -0
- package/plugins/lisa/skills/confluence-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-build-intake/SKILL.md +32 -21
- package/plugins/lisa/skills/github-evidence/SKILL.md +3 -26
- package/plugins/lisa/skills/github-evidence/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/github-journey/SKILL.md +2 -2
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +25 -11
- package/plugins/lisa/skills/github-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/github-sync/SKILL.md +5 -5
- package/plugins/lisa/skills/github-write-issue/SKILL.md +15 -6
- package/plugins/lisa/skills/github-write-prd/SKILL.md +100 -0
- package/plugins/lisa/skills/github-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/implement/SKILL.md +13 -6
- package/plugins/lisa/skills/intake/SKILL.md +13 -12
- package/plugins/lisa/skills/intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/jira-build-intake/SKILL.md +24 -11
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +8 -0
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +22 -9
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +23 -13
- package/plugins/lisa/skills/linear-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/linear-write-issue/SKILL.md +10 -2
- package/plugins/lisa/skills/linear-write-prd/SKILL.md +90 -0
- package/plugins/lisa/skills/linear-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/notion-access/SKILL.md +2 -0
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +22 -12
- package/plugins/lisa/skills/notion-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/notion-write-prd/SKILL.md +107 -0
- package/plugins/lisa/skills/notion-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/prd-source-write/SKILL.md +80 -0
- package/plugins/lisa/skills/prd-source-write/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/project-ideation/SKILL.md +183 -80
- package/plugins/lisa/skills/repair-intake/SKILL.md +403 -0
- package/plugins/lisa/skills/repair-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/research/SKILL.md +19 -3
- package/plugins/lisa/skills/research/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/setup-automations/SKILL.md +78 -0
- package/plugins/lisa/skills/setup-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-github/SKILL.md +0 -1
- package/plugins/lisa/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa/skills/tear-down-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +6 -2
- package/plugins/lisa/skills/tracker-build-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +2 -2
- package/plugins/lisa/skills/tracker-sync/SKILL.md +1 -1
- package/plugins/lisa/skills/verify-prd/SKILL.md +41 -38
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -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/commands/exploratory-qa.md +3 -3
- package/plugins/lisa-expo/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/lisa-expo/skills/exploratory-qa/agents/openai.yaml +2 -2
- 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/commands/exploratory-qa.md +3 -3
- package/plugins/lisa-harper-fabric/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/lisa-harper-fabric/skills/exploratory-qa/agents/openai.yaml +2 -2
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-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-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/commands/exploratory-qa.md +3 -3
- package/plugins/lisa-rails/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/lisa-rails/skills/exploratory-qa/agents/openai.yaml +2 -2
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-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/skills/lisa-wiki-ingest/SKILL.md +30 -1
- package/plugins/src/base/agents/confluence-prd-intake.md +1 -1
- package/plugins/src/base/agents/github-agent.md +4 -5
- package/plugins/src/base/agents/github-build-intake.md +1 -1
- package/plugins/src/base/agents/github-prd-intake.md +1 -1
- package/plugins/src/base/agents/linear-prd-intake.md +1 -1
- package/plugins/src/base/agents/notion-prd-intake.md +1 -1
- package/plugins/src/base/commands/intake.md +1 -1
- package/plugins/src/base/commands/project-ideation.md +3 -3
- package/plugins/src/base/commands/repair-intake.md +6 -0
- package/plugins/src/base/commands/research.md +3 -3
- package/plugins/src/base/commands/setup-automations.md +6 -0
- package/plugins/src/base/commands/tear-down-automations.md +6 -0
- package/plugins/src/base/commands/verify-prd.md +2 -2
- package/plugins/src/base/rules/config-resolution.md +63 -4
- package/plugins/src/base/rules/intent-routing.md +4 -3
- package/plugins/src/base/rules/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/rules/prd-lifecycle-rollup.md +10 -2
- package/plugins/src/base/rules/repo-scope-split.md +18 -1
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +24 -14
- package/plugins/src/base/skills/confluence-write-prd/SKILL.md +103 -0
- package/plugins/src/base/skills/github-build-intake/SKILL.md +32 -21
- package/plugins/src/base/skills/github-evidence/SKILL.md +3 -26
- package/plugins/src/base/skills/github-journey/SKILL.md +2 -2
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +25 -11
- package/plugins/src/base/skills/github-sync/SKILL.md +5 -5
- package/plugins/src/base/skills/github-write-issue/SKILL.md +15 -6
- package/plugins/src/base/skills/github-write-prd/SKILL.md +100 -0
- package/plugins/src/base/skills/implement/SKILL.md +13 -6
- package/plugins/src/base/skills/intake/SKILL.md +13 -12
- package/plugins/src/base/skills/jira-build-intake/SKILL.md +24 -11
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +8 -0
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +22 -9
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +23 -13
- package/plugins/src/base/skills/linear-write-issue/SKILL.md +10 -2
- package/plugins/src/base/skills/linear-write-prd/SKILL.md +90 -0
- package/plugins/src/base/skills/notion-access/SKILL.md +2 -0
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +22 -12
- package/plugins/src/base/skills/notion-write-prd/SKILL.md +107 -0
- package/plugins/src/base/skills/prd-source-write/SKILL.md +80 -0
- package/plugins/src/base/skills/project-ideation/SKILL.md +183 -80
- package/plugins/src/base/skills/repair-intake/SKILL.md +403 -0
- package/plugins/src/base/skills/research/SKILL.md +19 -3
- package/plugins/src/base/skills/setup-automations/SKILL.md +78 -0
- package/plugins/src/base/skills/setup-github/SKILL.md +0 -1
- package/plugins/src/base/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +6 -2
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +2 -2
- package/plugins/src/base/skills/tracker-sync/SKILL.md +1 -1
- package/plugins/src/base/skills/verify-prd/SKILL.md +41 -38
- package/plugins/src/expo/commands/exploratory-qa.md +3 -3
- package/plugins/src/expo/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/src/harper-fabric/commands/exploratory-qa.md +3 -3
- package/plugins/src/harper-fabric/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/src/rails/commands/exploratory-qa.md +3 -3
- package/plugins/src/rails/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/src/wiki/skills/lisa-wiki-ingest/SKILL.md +30 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
display_name: "Exploratory QA"
|
|
2
|
-
short_description: "Playwright-backed exploratory QA workflow for web apps"
|
|
2
|
+
short_description: "Playwright-backed exploratory QA workflow for web apps that FEEDS THE LIFECYCLE"
|
|
3
3
|
default_prompt:
|
|
4
|
-
- "Use $exploratory-qa: Playwright-backed exploratory QA workflow for web apps."
|
|
4
|
+
- "Use $exploratory-qa: Playwright-backed exploratory QA workflow for web apps that FEEDS THE LIFECYCLE."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.62.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.62.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Run a Playwright-backed exploratory QA pass: audit the app like a human, find user-noticeable bugs and gaps in automated test coverage, and
|
|
2
|
+
description: "Run a Playwright-backed exploratory QA pass: audit the app like a human, find user-noticeable bugs, usability issues, and gaps in automated test coverage, and file each finding as a tracked work item via lisa:tracker-write. The optional ready flag marks bug/suggestion tickets build-ready (auto-picked-up by lisa:intake) or leaves them in the backlog for human triage (default); missing-test tickets are always build-ready."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
|
-
argument-hint: "[target-url | env] [
|
|
4
|
+
argument-hint: "[target-url | env] [ready=true|false]"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Use the /lisa-rails:exploratory-qa skill to run a human-style exploratory QA pass informed by the existing Playwright suite, then
|
|
7
|
+
Use the /lisa-rails:exploratory-qa skill to run a human-style exploratory QA pass informed by the existing Playwright suite, then file every finding (bugs, usability issues, missing Playwright tests) as a tracked work item via lisa:tracker-write — bug/suggestion tickets build-ready or in triage per the ready flag (default: triage), missing-test tickets always build-ready. $ARGUMENTS
|
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: exploratory-qa
|
|
3
|
-
description: Playwright-backed exploratory QA workflow for web apps. Use when asked to audit an app
|
|
3
|
+
description: Playwright-backed exploratory QA workflow for web apps that FEEDS THE LIFECYCLE. Use when asked to audit an app with Playwright/e2e tests, find human-noticeable bugs and usability issues, identify gaps in automated test coverage, test responsive breakpoints, observe slow or unclear load states, or exercise mutable workflows with cleanup. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs, usability suggestions, and missing Playwright tests). A `ready` parameter controls whether bug and suggestion tickets are created build-ready (auto-picked-up by lisa:intake) or in the backlog for human triage (default); missing-test tickets are always created build-ready.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Exploratory QA
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Run a human-style exploratory QA pass informed by the existing Playwright suite. The goal is to find issues users notice and machines often miss,
|
|
10
|
+
Run a human-style exploratory QA pass informed by the existing Playwright suite, then **file every finding as a tracked work item** in the project's configured tracker so it enters the Lisa lifecycle. The goal is to find issues users notice and machines often miss — bugs, usability friction, and coverage gaps — and turn each into actionable, automatable work, not a static report.
|
|
11
|
+
|
|
12
|
+
## Parameters
|
|
13
|
+
|
|
14
|
+
- **`target-url | env`** (first positional) — what to audit.
|
|
15
|
+
- **`ready=true|false`** — the build-ready state for the **bug** and **usability/suggestion** tickets this pass creates.
|
|
16
|
+
- `ready=true` → created build-ready, so `lisa:intake` / the build-intake scanner auto-picks them up.
|
|
17
|
+
- `ready=false` (**default**) → created in the backlog (not build-ready) for a human to review and promote into the queue.
|
|
18
|
+
- **Missing Playwright test tickets are ALWAYS created build-ready, regardless of this flag** — adding missing coverage is always safe to queue.
|
|
19
|
+
|
|
20
|
+
`ready` maps directly to the `build_ready` write-control input on `lisa:tracker-write`.
|
|
11
21
|
|
|
12
22
|
## Core Workflow
|
|
13
23
|
|
|
14
24
|
### 1. Establish Scope
|
|
15
25
|
|
|
16
|
-
- Identify the target environment, account type, browser requirement, and
|
|
26
|
+
- Identify the target environment, account type, browser requirement, and the `ready` flag value (default `false`).
|
|
27
|
+
- **Confirm the tracker is configured.** Findings are filed as tickets, so read `tracker` from `.lisa.config.json` (local overrides global). If it is unset, stop and report that the tracker must be configured (via `/lisa:setup:jira` / `:github` / `:linear`) before exploratory QA can file findings — do not silently fall back to a report file.
|
|
17
28
|
- If credentials, tenant, seed data, or mutation boundaries are missing and cannot be discovered safely, ask a concise clarifying question.
|
|
18
29
|
- Treat production-like environments conservatively. Do not mutate production data unless the user explicitly approves it.
|
|
19
30
|
- Prefer a test user, dev/staging environment, or isolated seeded account for mutation testing.
|
|
@@ -57,7 +68,7 @@ Exploratory QA should exercise mutable workflows when the environment is safe.
|
|
|
57
68
|
- Prefer high-value user workflows: create/edit/delete records, lists, boards, tags, notes, comments, scenarios, uploads, messages, settings, invitations, or assignments.
|
|
58
69
|
- Use unique names with a clear prefix such as `qa-`, `pw-`, or `codex-`.
|
|
59
70
|
- Before mutating, identify the cleanup path. After mutating, make a best effort to clean up through the UI, then verify cleanup.
|
|
60
|
-
- If UI cleanup is unavailable,
|
|
71
|
+
- If UI cleanup is unavailable, file that as a product/test gap (a finding — see below). Use documented API cleanup only if appropriate for the project and account.
|
|
61
72
|
- Record all mutations performed, cleanup attempts, and residue left behind.
|
|
62
73
|
- Avoid destructive bulk actions unless the user explicitly asks or the test account is clearly disposable.
|
|
63
74
|
|
|
@@ -83,26 +94,45 @@ Measure perceived latency, not just eventual success.
|
|
|
83
94
|
- Treat long waits without clear progress, error, retry, or cancellation as bugs or test gaps.
|
|
84
95
|
- Do not overfit exact milliseconds unless the project has defined budgets. Use practical labels such as noticeable, slow, or unacceptable and include observed durations when available.
|
|
85
96
|
|
|
86
|
-
##
|
|
97
|
+
## Filing findings as tracked work
|
|
98
|
+
|
|
99
|
+
This skill does **not** write a report file. Every finding becomes a **leaf work item** created via `lisa:tracker-write` (the vendor-neutral writer — it dispatches to the configured tracker and runs the validation gate; never call a vendor `*-write-*` skill directly). Map each finding to a type and a build-ready state:
|
|
100
|
+
|
|
101
|
+
| Finding | `issue_type` | `build_ready` |
|
|
102
|
+
|---------|--------------|---------------|
|
|
103
|
+
| User-visible **bug** | `Bug` | the `ready` flag (default `false`) |
|
|
104
|
+
| **Usability / UX issue** (suggestion) | `Improvement` | the `ready` flag (default `false`) |
|
|
105
|
+
| **Missing Playwright test** (coverage gap) | `Task` | **`true` (always)** |
|
|
106
|
+
|
|
107
|
+
Each finding is a flat leaf (no children), so `build_ready` applies directly. Pass it explicitly on every create — `build_ready: <ready flag>` for bugs and suggestions, `build_ready: true` for missing tests.
|
|
108
|
+
|
|
109
|
+
Each ticket MUST be a complete spec (`lisa:tracker-write` runs the validator and rejects thin tickets):
|
|
110
|
+
|
|
111
|
+
- **Three-audience description** (context / business value, technical approach, stakeholder impact).
|
|
112
|
+
- **For a bug:** exact reproduction steps, observed-vs-expected, the env / account / breakpoint it occurred at, and console/network evidence.
|
|
113
|
+
- **For a usability issue:** the observed friction, who it affects, and the proposed improvement.
|
|
114
|
+
- **For a missing test:** the user behavior the test must assert and the stable selector/flow to use — concrete and automatable.
|
|
115
|
+
- **Gherkin acceptance criteria** describing the fixed (bug / usability) or added (test) behavior.
|
|
116
|
+
|
|
117
|
+
### Idempotency — don't spam duplicates
|
|
118
|
+
|
|
119
|
+
Re-running a QA pass must not refile the same finding. Before creating a ticket, search the tracker for an **open** ticket carrying a stable marker `[lisa-exploratory-qa] <finding-key>` in its body (the `<finding-key>` is a stable slug of surface + symptom, e.g. `settings-modal/horizontal-overflow@tablet`). If one exists, reference/update it instead of creating a duplicate; only create when none exists. **Match by the marker, never by title** (titles get edited). A *closed* prior ticket does not suppress a new one — a recurrence after a fix is a genuine regression.
|
|
87
120
|
|
|
88
|
-
|
|
121
|
+
## Output
|
|
89
122
|
|
|
90
|
-
|
|
123
|
+
No report file. Emit a concise in-session summary:
|
|
91
124
|
|
|
92
|
-
- Scope
|
|
93
|
-
- Existing Playwright coverage
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
- Load-state findings: observed delays, blank/spinner/connecting states, suggested budgets/tests.
|
|
97
|
-
- Mutation findings: data created, behavior observed, cleanup attempt, cleanup result, residue.
|
|
98
|
-
- Missing Playwright tests to add: prioritized, concrete, and automatable.
|
|
99
|
-
- Maintenance notes: selector scoping, fixture cleanup, flaky/stale-state risks.
|
|
125
|
+
- **Scope:** target URL/env, browser/tool, account type, build/version if visible, date.
|
|
126
|
+
- **Existing Playwright coverage:** strengths and thin areas observed during research.
|
|
127
|
+
- **Findings filed**, bucketed by type — bugs, usability suggestions, missing tests — each with its **created or referenced ticket ref** and its **build-ready state** (`ready` vs `triage/backlog`).
|
|
128
|
+
- **Observed but not filed:** anything noticed but intentionally not ticketed, with why.
|
|
100
129
|
|
|
101
130
|
## Quality Bar
|
|
102
131
|
|
|
103
132
|
- Be honest about what was and was not tested.
|
|
104
|
-
- Distinguish user-visible bugs from missing automated coverage.
|
|
105
|
-
- Prefer concrete
|
|
133
|
+
- Distinguish user-visible bugs from missing automated coverage — they map to different issue types (`Bug` vs `Task`).
|
|
134
|
+
- Prefer concrete, reproducible findings. Every ticket must stand alone for an implementer who was not in the session.
|
|
106
135
|
- Do not claim cleanup succeeded unless verified.
|
|
107
136
|
- Do not let broad locators pass against hidden/inactive content.
|
|
108
|
-
-
|
|
137
|
+
- File missing-test tickets build-ready; file bug and usability tickets per the `ready` flag (default: backlog for human triage).
|
|
138
|
+
- Preserve unrelated repo changes.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
display_name: "Exploratory QA"
|
|
2
|
-
short_description: "Playwright-backed exploratory QA workflow for web apps"
|
|
2
|
+
short_description: "Playwright-backed exploratory QA workflow for web apps that FEEDS THE LIFECYCLE"
|
|
3
3
|
default_prompt:
|
|
4
|
-
- "Use $exploratory-qa: Playwright-backed exploratory QA workflow for web apps."
|
|
4
|
+
- "Use $exploratory-qa: Playwright-backed exploratory QA workflow for web apps that FEEDS THE LIFECYCLE."
|
|
@@ -19,6 +19,24 @@ performs the shared, ordered pipeline.
|
|
|
19
19
|
run includes explicit external-write intent**.
|
|
20
20
|
- **Dry run:** `/ingest --dry-run` — list the sources a full ingest would run; perform no writes.
|
|
21
21
|
|
|
22
|
+
## Before ingesting — sync the branch (once per run)
|
|
23
|
+
|
|
24
|
+
Run this **once per ingest invocation, before any source is processed** (skip for `--dry-run`, which
|
|
25
|
+
writes nothing). The point is to ingest on top of fresh state, never stale state.
|
|
26
|
+
|
|
27
|
+
1. **Resolve the default remote branch** — `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`,
|
|
28
|
+
or `git remote show origin | sed -n 's/.*HEAD branch: //p'`, or the `origin/HEAD` symbolic ref. If
|
|
29
|
+
the repo has no remote, note "no remote — skipping branch sync" and proceed.
|
|
30
|
+
2. **Fetch** — `git fetch <remote>` to update remote-tracking refs.
|
|
31
|
+
3. **Bring the working branch up to date with the default remote branch** so the ingest lands on
|
|
32
|
+
current state:
|
|
33
|
+
- On the default branch → fast-forward to `<remote>/<default>` (`git pull --ff-only`).
|
|
34
|
+
- On a non-default branch → merge or rebase `<remote>/<default>` in (per the project's convention)
|
|
35
|
+
so the branch is not behind the default.
|
|
36
|
+
4. If the sync cannot complete cleanly (merge conflict, diverged history, or a dirty tree that would
|
|
37
|
+
conflict), **stop and surface it** rather than ingesting on top of stale or conflicted state — the
|
|
38
|
+
human resolves and re-runs. **Never discard unrelated working-tree changes** to force a sync.
|
|
39
|
+
|
|
22
40
|
## The ordered pipeline (per source) — never reorder
|
|
23
41
|
1. **Connector** validates (tenant guard + auth), reads its state cursor (first-run vs incremental),
|
|
24
42
|
fetches read-only, and writes a sanitized **source note** under `wiki/sources/<system>/` plus run
|
|
@@ -29,9 +47,20 @@ performs the shared, ordered pipeline.
|
|
|
29
47
|
4. **Log**: append a `wiki/log.md` entry (fixed operation vocabulary).
|
|
30
48
|
5. **Verify**: `git diff --check`, secret/tenant/contamination scans, touched-file guard.
|
|
31
49
|
6. **State**: advance the connector's `wiki/state/<system>/*.json` cursor — only now, after 1–5 pass.
|
|
32
|
-
7. **Commit/PR**: per `config.git` policy.
|
|
50
|
+
7. **Commit/PR**: commit only the ingestion changes per `config.git` policy. If the ingest started on
|
|
51
|
+
the default branch, create a dedicated ingestion branch first — never commit ingestion straight to
|
|
52
|
+
the default. Push the branch and **open a PR targeting the default remote branch** (via the host's
|
|
53
|
+
PR mechanism — e.g. `gh pr create --base <default>`), then **enable auto-merge when possible**
|
|
54
|
+
(`gh pr merge --auto`, or the host's equivalent). `external-write` runs and sensitive content are
|
|
55
|
+
the exception — open the PR **without** auto-merge so a human reviews them before it lands. If
|
|
56
|
+
auto-merge cannot be enabled (the host doesn't support it, or branch protection forbids it), leave
|
|
57
|
+
the PR open and note that a human must merge.
|
|
33
58
|
|
|
34
59
|
## Rules
|
|
60
|
+
- **Bookend every ingest with git hygiene:** sync the branch with the default remote branch *before*
|
|
61
|
+
writing (see "Before ingesting"), and *after* a successful ingest open a PR to the default remote
|
|
62
|
+
branch with auto-merge enabled when possible — never auto-merging `external-write`/sensitive runs.
|
|
63
|
+
`--dry-run` does neither (it writes nothing).
|
|
35
64
|
- Source-note-before-synthesis; state advanced **only** after verification.
|
|
36
65
|
- Project-scoped only; memory ingestion never touches global/Codex-global stores.
|
|
37
66
|
- Respect `sourceRetention` and `sensitivity`; do not invent facts.
|
|
@@ -53,7 +53,7 @@ After a successful cycle, if any PRDs ended in the `blocked` label, mention to t
|
|
|
53
53
|
|
|
54
54
|
When reporting `blocked` outcomes, distinguish the cause: **pre-write gate failure** (per-ticket validator caught a problem before any tickets were created) vs **post-write coverage gap** (tickets were created and remain in the destination tracker, but the PRD has uncovered requirements that the next intake cycle will address). Both result in the `blocked` label, but the implication for product is different — coverage gaps mean some tickets are already real and product should not re-author the PRD from scratch.
|
|
55
55
|
|
|
56
|
-
If all PRDs ended in the `ticketed` label with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the configured `shipped` label after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or
|
|
56
|
+
If all PRDs ended in the `ticketed` label with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the configured `shipped` label after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or, on failure, re-open it to `ticketed` with build-ready fix tickets that auto-build and re-verify — never `blocked`). If any are `COMPLETE_WITH_SCOPE_CREEP`, point that out so product can review the flagged tickets.
|
|
57
57
|
|
|
58
58
|
## Rules
|
|
59
59
|
|
|
@@ -49,7 +49,7 @@ Use the `github-verify` skill to check the issue against organizational standard
|
|
|
49
49
|
|
|
50
50
|
**Gating behavior — this is the one place auto-relabeling is allowed:**
|
|
51
51
|
|
|
52
|
-
Resolve build labels from `.lisa.config.json` `github.labels.build.*` (defaults: `status:ready` / `status:in-progress` /
|
|
52
|
+
Resolve build labels from `.lisa.config.json` `github.labels.build.*` (defaults: `status:ready` / `status:in-progress` / env-keyed `status:on-*`); resolve the `blocked` label from the same section (`github.labels.build.blocked`, default `status:blocked`).
|
|
53
53
|
|
|
54
54
|
If `github-verify` returns `FAIL` on any of the above, do NOT continue:
|
|
55
55
|
|
|
@@ -126,7 +126,6 @@ Use the `github-evidence` skill to:
|
|
|
126
126
|
- Upload verification evidence to the GitHub `pr-assets` release (in the implementation repo)
|
|
127
127
|
- Update the PR description's `## Evidence` section
|
|
128
128
|
- Post a comment on the originating issue with the evidence summary
|
|
129
|
-
- Relabel the issue from the `claimed` label to the `review` label (configured via `github.labels.build.{claimed,review}`)
|
|
130
129
|
|
|
131
130
|
### 8. Suggest Status Transition
|
|
132
131
|
|
|
@@ -135,14 +134,14 @@ Based on the milestone, suggest (but don't auto-relabel beyond the explicit Step
|
|
|
135
134
|
| Milestone | Suggested role | Default label |
|
|
136
135
|
|-----------|----------------|---------------|
|
|
137
136
|
| Plan created | `claimed` | `status:in-progress` |
|
|
138
|
-
| PR ready | `
|
|
139
|
-
| PR merged |
|
|
137
|
+
| PR ready | `done` (env-aware; build-intake sets this after success) | env-keyed variant per `github.labels.build.done` |
|
|
138
|
+
| PR merged | no additional build-label transition | already at configured `done` |
|
|
140
139
|
|
|
141
140
|
Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`). When suggesting the PR-merged transition, the env is implied by the PR's base branch via `deploy.branches` — surface the resolved label name; do not auto-transition.
|
|
142
141
|
|
|
143
142
|
## Rules
|
|
144
143
|
|
|
145
|
-
- Never auto-relabel build labels, with
|
|
144
|
+
- Never auto-relabel build labels, with one explicit exception: when `github-verify` returns FAIL for the pre-flight gate (Step 2), relabel to the configured `blocked` label and reassign to the original author. The build-intake owner transitions a successful issue from `claimed` directly to the configured `done` label after PR evidence is posted.
|
|
146
145
|
- Always read the full issue graph via `github-read-issue` before determining intent — don't rely on the `type:` label alone.
|
|
147
146
|
- Never create or materially edit an issue by calling `gh issue create` / `gh issue edit` directly — always delegate to `github-write-issue` (or, from a vendor-neutral caller, `tracker-write`) so relationships, Gherkin criteria, and metadata gates are enforced.
|
|
148
147
|
- If sign-in credentials are in the issue body, extract and pass them to the flow. If the issue touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
@@ -17,7 +17,7 @@ skills:
|
|
|
17
17
|
|
|
18
18
|
You are a GitHub build-intake agent. Your single job is to run one cycle against a GitHub repo — find issues carrying the configured `ready` build label, dispatch each through the build flow, relabel successful builds to the configured (env-aware) `done` label — then report what happened.
|
|
19
19
|
|
|
20
|
-
Build-label role names (`ready`, `claimed`, `
|
|
20
|
+
Build-label role names (`ready`, `claimed`, `done`) are resolved from `.lisa.config.json` `github.labels.build.*` by the `github-build-intake` skill. The defaults are `status:ready`, `status:in-progress`, and env-keyed `{ dev: status:on-dev, staging: status:on-stg, production: status:done }`.
|
|
21
21
|
|
|
22
22
|
## Confirmation policy
|
|
23
23
|
|
|
@@ -53,7 +53,7 @@ After a successful cycle, if any PRDs ended in the `blocked` label, mention to t
|
|
|
53
53
|
|
|
54
54
|
When reporting `blocked` outcomes, distinguish the cause: **pre-write gate failure** (per-ticket validator caught a problem before any tickets were created) vs **post-write coverage gap** (tickets were created and remain in the destination tracker, but the PRD has uncovered requirements that the next intake cycle will address). Both result in the `blocked` label, but the implication for product is different — coverage gaps mean some tickets are already real and product should not re-author the PRD from scratch.
|
|
55
55
|
|
|
56
|
-
If all PRDs ended in the `ticketed` label with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the configured `shipped` label after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or
|
|
56
|
+
If all PRDs ended in the `ticketed` label with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the configured `shipped` label after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or, on failure, re-open it to `ticketed` with build-ready fix tickets that auto-build and re-verify — never `blocked`). If any are `COMPLETE_WITH_SCOPE_CREEP`, point that out so product can review the flagged tickets.
|
|
57
57
|
|
|
58
58
|
## Rules
|
|
59
59
|
|
|
@@ -53,7 +53,7 @@ After a successful cycle, if any PRDs ended in the `blocked` label, mention to t
|
|
|
53
53
|
|
|
54
54
|
When reporting `blocked` outcomes, distinguish the cause: **pre-write gate failure** (per-ticket validator caught a problem before any tickets were created) vs **post-write coverage gap** (tickets were created and remain in the destination tracker, but the PRD has uncovered requirements that the next intake cycle will address). Both result in the `blocked` label, but the implication for product is different — coverage gaps mean some tickets are already real and product should not re-author the PRD from scratch.
|
|
55
55
|
|
|
56
|
-
If all PRDs ended in the `ticketed` label with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the configured `shipped` label after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or
|
|
56
|
+
If all PRDs ended in the `ticketed` label with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and apply the configured `shipped` label after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or, on failure, re-open it to `ticketed` with build-ready fix tickets that auto-build and re-verify — never `blocked`). If any are `COMPLETE_WITH_SCOPE_CREEP`, point that out so product can review the flagged tickets.
|
|
57
57
|
|
|
58
58
|
## Rules
|
|
59
59
|
|
|
@@ -51,7 +51,7 @@ After a successful cycle, if any PRDs ended in the `blocked` status, mention to
|
|
|
51
51
|
|
|
52
52
|
When reporting `blocked` outcomes, distinguish the cause: **pre-write gate failure** (per-ticket validator caught a problem before any tickets were created) vs **post-write coverage gap** (tickets were created and remain in the destination tracker, but the PRD has uncovered requirements that the next intake cycle will address). Both result in the `blocked` status, but the implication for product is different — coverage gaps mean some tickets are already real and product should not re-author the PRD from scratch.
|
|
53
53
|
|
|
54
|
-
If all PRDs ended in the `ticketed` status with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and flip the PRDs to the configured `shipped` status after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or
|
|
54
|
+
If all PRDs ended in the `ticketed` status with coverage `COMPLETE`, mention that the next step is for product to monitor the created tickets and flip the PRDs to the configured `shipped` status after delivery, then run `/lisa:verify-prd` to empirically verify the shipped product against the PRD and move it to `verified` (or, on failure, re-open it to `ticketed` with build-ready fix tickets that auto-build and re-verify — never `blocked`). If any are `COMPLETE_WITH_SCOPE_CREEP`, point that out so product can review the flagged tickets.
|
|
55
55
|
|
|
56
56
|
## Rules
|
|
57
57
|
|
|
@@ -3,4 +3,4 @@ description: "Vendor-agnostic batch scanner for Ready queues. Notion PRD databas
|
|
|
3
3
|
argument-hint: "<Notion-PRD-database-URL | Confluence-space-URL | Confluence-parent-page-URL | Linear-workspace-URL | Linear-team-URL | GitHub-repo-URL | org/repo | JIRA-project-key | JQL-filter>"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Use the /lisa:intake skill to scan the queue for Ready items and dispatch
|
|
6
|
+
Use the /lisa:intake skill to scan the queue for Ready items and dispatch one eligible Ready item per invocation through the appropriate single-item lifecycle skill — and, on the PRD side, close the loop by dispatching /lisa:verify-prd for one shipped PRD per cycle (shipped → verified on pass, or re-opened to ticketed with build-ready fix tickets that auto-build and re-verify on fail — never blocked). $ARGUMENTS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Generate
|
|
3
|
-
argument-hint: "[target
|
|
2
|
+
description: "Generate persona-grounded, verifiable product ideas for the host project, then create PRDs for the selected build-ready ideas via lisa:research. First derives the personas the project actually serves (from its docs, code, data model, and releases — never invented), ideates per persona, and gates each idea on an obtainable data/source path and an empirical verification plan. Creates one PRD by default (top-ranked idea); max_prds widens the batch. prd_ready=true creates them prd-ready for auto-pickup by lisa:intake; default is draft for human review."
|
|
3
|
+
argument-hint: "[target path | external product] [prd_ready=true|false] [max_prds=<n>|all]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Use the /lisa:project-ideation skill to
|
|
6
|
+
Use the /lisa:project-ideation skill to derive evidence-grounded personas, ideate per persona, gate the ideas, and create PRDs for the selected build-ready ideas via lisa:research — in draft state by default, or prd-ready when prd_ready=true; one PRD by default, more with max_prds. $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Repair counterpart to /lisa:intake. Vendor-agnostic batch scanner that finds stuck work — items left in `blocked` or stalled in an in-progress role (build `claimed`, PRD `in_review`) — across the same queues /lisa:intake serves (Notion / Confluence / Linear / GitHub PRDs; JIRA / GitHub / Linear build issues), and attempts to repair the first materially actionable one per cycle: resumes stalled in-progress work in place, re-validates blocked PRDs, and re-dispatches blocked build items whose blockers have cleared. One actionable repair per invocation; cron-safe. Designed as a /schedule target alongside /lisa:intake."
|
|
3
|
+
argument-hint: "<Notion-PRD-database-URL | Confluence-space-URL | Confluence-parent-page-URL | Linear-workspace-URL | Linear-team-URL | GitHub-repo-URL | org/repo | JIRA-project-key | JQL-filter> [intake_mode=prd|build|both] [stale_after=24h] [max_candidates=100] [force=true]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa:repair-intake skill to scan the queue for stuck items (blocked, or stalled in an in-progress role) and repair the first materially actionable one. $ARGUMENTS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Research a problem space and
|
|
3
|
-
argument-hint: "<problem-statement-or-feature-idea>"
|
|
2
|
+
description: "Research a problem space and create a PRD in the configured PRD source. Investigates the codebase, defines user flows, assesses technical feasibility, synthesizes the spec, then creates it in the source (Notion / Confluence / GitHub / Linear) via lisa:prd-source-write — no loose document. prd_ready=true creates it prd-ready for auto-pickup by lisa:intake; default is draft for the Plan flow / human review."
|
|
3
|
+
argument-hint: "<problem-statement-or-feature-idea> [prd_ready=true|false]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Use the /lisa:research skill to research the problem and
|
|
6
|
+
Use the /lisa:research skill to research the problem and create a PRD in the configured source — in draft state by default, or prd-ready when prd_ready=true. $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Set up the recurring Lisa automations on the local workstation using the runtime's native scheduler (Codex automations / Claude /schedule): intake-repair (60 min), intake PRD (60 min), intake tickets (10 min), exploratory-bugs (daily), exploratory-prds (daily). A declarative spec — it states what to schedule and how often; the runtime's native automation mechanism does the creating. auto-start-prds / auto-start-tickets control whether ideated PRDs / filed bug tickets are created auto-pickup-ready (default: left for human review)."
|
|
3
|
+
argument-hint: "[auto-start-prds=true|false] [auto-start-tickets=true|false]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa:setup-automations skill to create the five recurring Lisa automations via this runtime's native scheduler (Codex automations / Claude /schedule), passing the auto-start-prds / auto-start-tickets flags through to the exploratory automations. $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Remove the recurring Lisa automations /setup-automations created for this project (the lisa-auto-<project>-* set) using the runtime's native scheduler (Codex automations / Claude /schedule). A declarative spec — it states which automations to remove; the runtime's native mechanism does the removing. Removes only this project's Lisa automations, never others."
|
|
3
|
+
argument-hint: ""
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa:tear-down-automations skill to remove this project's lisa-auto-<project>-* automations via this runtime's native scheduler (Codex automations / Claude /schedule), leaving other projects' and non-Lisa automations untouched. $ARGUMENTS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Initiative-level PRD acceptance gate. Reads a shipped PRD and its generated child work, confirms all generated top-level work is terminal, then runs spec-conformance against the PRD plus empirical verification of the shipped surface
|
|
2
|
+
description: "Initiative-level PRD acceptance gate. Reads a shipped PRD and its generated child work, confirms all generated top-level work is terminal, then runs spec-conformance against the PRD plus empirical verification of the shipped surface. On a CONFORMS verdict with all checks passing it transitions the PRD shipped → verified with evidence; on a conformance miss (PARTIAL/DIVERGES) or any failing empirical check it re-opens the PRD shipped → ticketed (never blocked), creates build-ready fix tickets for the gaps, and posts a failure report — the fix tickets auto-build, the PRD re-ships, and it re-verifies (a self-healing loop). Idempotent across re-runs."
|
|
3
3
|
argument-hint: "<prd>"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Use the /lisa:verify-prd skill to read the PRD, confirm its generated top-level work is terminal, run spec-conformance against the PRD and empirical verification of the shipped surface,
|
|
6
|
+
Use the /lisa:verify-prd skill to read the PRD, confirm its generated top-level work is terminal, run spec-conformance against the PRD and empirical verification of the shipped surface, then transition the PRD shipped → verified with evidence on a pass, or — on a fail — re-open it shipped → ticketed (never blocked) and create build-ready fix tickets that auto-build and trigger a re-verify. $ARGUMENTS
|
|
@@ -68,7 +68,6 @@ fi
|
|
|
68
68
|
"build": {
|
|
69
69
|
"ready": "status:ready",
|
|
70
70
|
"claimed": "status:in-progress",
|
|
71
|
-
"review": "status:code-review",
|
|
72
71
|
"blocked": "status:blocked",
|
|
73
72
|
"done": { "dev": "status:on-dev", "staging": "status:on-stg", "production": "status:done" }
|
|
74
73
|
},
|
|
@@ -121,6 +120,13 @@ fi
|
|
|
121
120
|
"staging": "staging",
|
|
122
121
|
"production": "main"
|
|
123
122
|
}
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
"intake": {
|
|
126
|
+
"repair": {
|
|
127
|
+
"staleAfterHours": 24,
|
|
128
|
+
"maxCandidates": 100
|
|
129
|
+
}
|
|
124
130
|
}
|
|
125
131
|
}
|
|
126
132
|
```
|
|
@@ -194,11 +200,11 @@ Every lifecycle skill operates on a fixed set of **roles** (`ready`, `claimed`,
|
|
|
194
200
|
|---|---|---|---|
|
|
195
201
|
| `ready` | Human signal "this is buildable; agent may claim" | `Ready` (status) | `status:ready` (label) |
|
|
196
202
|
| `claimed` | Agent has picked the item up | `In Progress` (status) | `status:in-progress` (label) |
|
|
197
|
-
| `review` |
|
|
203
|
+
| `review` | Optional post-build review hold, when a tracker/project still uses one | `Code Review` (status) | Linear default: `status:code-review`; GitHub has no default review label |
|
|
198
204
|
| `blocked` | Agent stopped on triage ambiguities or external blocker | `Blocked` (status) | `status:blocked` (label) |
|
|
199
205
|
| `done` | Terminal state for this work, **env-keyed** | map of env → status | map of env → label |
|
|
200
206
|
|
|
201
|
-
`review` is
|
|
207
|
+
`review` is optional. GitHub build intake skips it by default and moves successful builds directly from `claimed` to the configured `done` label. Linear and JIRA projects that still use a post-build review hold can configure `review`; projects that keep the ticket in `claimed` until terminal can omit it and lifecycle skills will skip the intermediate transition.
|
|
202
208
|
|
|
203
209
|
`blocked` is what every vendor agent flips to when triage finds unresolved ambiguities or the build path is blocked by something the agent can't resolve. Different from `claimed` because it explicitly signals "human attention required."
|
|
204
210
|
|
|
@@ -227,6 +233,22 @@ The `rollup` object lives in each PRD-source vendor section (`github.labels.prd.
|
|
|
227
233
|
|
|
228
234
|
Like every other vocabulary key, `prd.rollup` is **optional** — a missing block inherits `closeOnShipped: false`. The `shipped` transition itself is unconditional on the all-terminal condition; only the close/archive step is gated by this flag.
|
|
229
235
|
|
|
236
|
+
### Repair intake config (`intake.repair`)
|
|
237
|
+
|
|
238
|
+
`lisa:repair-intake` (the recovery counterpart to `lisa:intake`) reads two optional tuning keys
|
|
239
|
+
from the top-level `intake.repair` block. Both are **optional** — a missing block inherits the
|
|
240
|
+
documented defaults, so existing projects need no config change.
|
|
241
|
+
|
|
242
|
+
| Key | Required | Default | Notes |
|
|
243
|
+
|-----|----------|---------|-------|
|
|
244
|
+
| `intake.repair.staleAfterHours` | no | `24` | How long an in-progress item (build `claimed`, PRD `in_review`) may show no observable activity before repair-intake treats it as stalled and resumes it. `blocked` items are judged on blocker/answer state, not this threshold. Overridable per-run via `stale_after=<dur>` in `$ARGUMENTS` (which always wins). The same value is the default backoff window for loop-prevention notes. |
|
|
245
|
+
| `intake.repair.maxCandidates` | no | `100` | Upper bound on how many stuck items repair-intake enumerates while searching for the first actionable one. Bounds scan cost. Overridable per-run via `max_candidates=<n>`. |
|
|
246
|
+
|
|
247
|
+
Resolution order matches every other key: `$ARGUMENTS` override → `.lisa.config.local.json` →
|
|
248
|
+
`.lisa.config.json` → built-in default. The role SEMANTICS repair-intake operates on (which
|
|
249
|
+
roles count as "stuck", what each repair does) are fixed like every other lifecycle transition;
|
|
250
|
+
only these thresholds are tunable.
|
|
251
|
+
|
|
230
252
|
### Env-keyed `done`
|
|
231
253
|
|
|
232
254
|
The `done` role is special: the terminal status/label depends on which environment a PR was merged into. A hotfix to staging ends at `On Stg`; a production hotfix ends at `Done`. So `done` is a **map** keyed by env name (`dev`, `staging`, `production`).
|
|
@@ -239,6 +261,16 @@ Skills that transition to `done` MUST resolve the env first:
|
|
|
239
261
|
|
|
240
262
|
If a project's terminal state is the same regardless of env, set `done` to a string instead of a map (lifecycle skills accept either shape).
|
|
241
263
|
|
|
264
|
+
### Env → base branch (forward: the build base and PR base)
|
|
265
|
+
|
|
266
|
+
`deploy.branches` is also read in the **forward** direction by the build flow (`lisa:implement`): the environment a work item targets determines the branch the work is built on and the branch the PR opens against.
|
|
267
|
+
|
|
268
|
+
1. **Resolve the work item's target environment** — its `## Target Backend Environment` field. If the item names no environment, use the **remote default branch** (`gh repo view --json defaultBranchRef`, or `origin/HEAD`).
|
|
269
|
+
2. **Map env → base branch** via `deploy.branches` (e.g. `staging → staging`, `production → main`). Absent env or missing branch → stop and report; never guess.
|
|
270
|
+
3. **Before any code is written**, `lisa:implement` fetches and **rebases the working branch onto `origin/<base>`, resolving conflicts**, so implementation builds on the latest target-environment code. **The PR then opens against that same base branch** (`target_branch=<base>` to `lisa:git-submit-pr`).
|
|
271
|
+
|
|
272
|
+
This is the exact inverse of the env-keyed `done` "Branch inference" above: `done` derives the env *from* the PR base branch (reverse); the build flow derives the base branch *from* the env (forward). Both use the one `deploy.branches` map, so the branch a PR targets and the `done` status it earns always agree.
|
|
273
|
+
|
|
242
274
|
The true terminal `done` value is also the only value that triggers provider-native closure / resolution per `leaf-only-lifecycle`:
|
|
243
275
|
|
|
244
276
|
- If `done` is a string, that value is terminal.
|
|
@@ -328,7 +360,7 @@ Initiatives (Linear's cross-Project rollup) are NOT used — they're intended fo
|
|
|
328
360
|
When `github-to-tracker` is invoked AND `tracker = "github"`, both reads and writes hit the same GitHub repo. Label namespaces are kept separate so the two flows don't collide:
|
|
329
361
|
|
|
330
362
|
- PRD-source labels: `prd-draft`, `prd-ready`, `prd-in-review`, `prd-blocked`, `prd-ticketed`, `prd-shipped`, `prd-verified` — owned by `github-prd-intake`, `verify-prd`, and the human PM.
|
|
331
|
-
- Build-queue labels: `status:ready`, `status:in-progress`, `status:
|
|
363
|
+
- Build-queue labels: `status:ready`, `status:in-progress`, `status:on-dev`, `status:done` — owned by `github-build-intake` and `github-agent`.
|
|
332
364
|
- Sentinel issue label: `prd-intake-feedback` — owned by `github-prd-intake`.
|
|
333
365
|
|
|
334
366
|
Never overload one label across both lifecycles.
|
|
@@ -438,6 +470,33 @@ GitHub and Linear PRD lifecycles use labels (`prd-ready` / `prd-in-review` / etc
|
|
|
438
470
|
|
|
439
471
|
**Why curl is still needed**: acli's Confluence surface only covers `space` and `page view`. v1 page-write endpoints accept scoped tokens but return 410 Gone (deprecated); v2 endpoints require granular OAuth scopes acli doesn't request. API tokens via Basic auth bypass this with full user scope, so curl is the headless-friendly path for ops neither acli nor MCP can do.
|
|
440
472
|
|
|
473
|
+
## Repo scoping (multi-repo trackers)
|
|
474
|
+
|
|
475
|
+
A ticketing system can oversee **multiple repos** — e.g. one JIRA project (or Linear team) for `frontend`, `backend`, and `infrastructure`. When build-intake runs inside one repo, it must claim only the tickets that belong to **that** repo and skip the rest. Two pieces make this work; the claim-time enforcement lives in the `repo-scope-split` rule.
|
|
476
|
+
|
|
477
|
+
### The `repo:<name>` label (the repo marker)
|
|
478
|
+
|
|
479
|
+
A work item's target repo is recorded as a **label** `repo:<name>`, where `<name>` is the repo's short name (e.g. `repo:frontend`). The convention is uniform across trackers (JIRA / GitHub / Linear), consistent with the other namespaced labels (`status:`, `type:`, `component:`). On JIRA a **component** equal to the repo name is accepted as an alias (matches the legacy `component = "frontend"` JQL pattern). A leaf work unit carries **exactly one** `repo:<name>` (leaves are single-repo per `repo-scope-split`); a container (Epic/Story/Spike) may carry several or none.
|
|
480
|
+
|
|
481
|
+
The label is not required to exist up front: build-intake **determines** the target repo from the ticket's content + code surfaces when the label is absent and **stamps** `repo:<name>` so later cycles filter cheaply (see `repo-scope-split` "claim-time repo scoping").
|
|
482
|
+
|
|
483
|
+
### Current-repo resolution (which repo am I?)
|
|
484
|
+
|
|
485
|
+
Resolve the name of the repo intake is running in, highest priority first:
|
|
486
|
+
|
|
487
|
+
1. `.lisa.config.local.json` then `.lisa.config.json` `repo` (an explicit override, e.g. `"repo": "frontend"`).
|
|
488
|
+
2. `.lisa.config.json` `github.repo` when set (the repo's own identity).
|
|
489
|
+
3. The git remote basename: `basename -s .git "$(git remote get-url origin)"` (e.g. `git@github.com:acme/frontend.git` → `frontend`).
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
read_g() { local lv gv; lv=$(jq -r "$1 // empty" .lisa.config.local.json 2>/dev/null); gv=$(jq -r "$1 // empty" .lisa.config.json 2>/dev/null); echo "${lv:-${gv}}"; }
|
|
493
|
+
CURRENT_REPO=$(read_g '.repo')
|
|
494
|
+
[ -z "$CURRENT_REPO" ] && CURRENT_REPO=$(read_g '.github.repo')
|
|
495
|
+
[ -z "$CURRENT_REPO" ] && CURRENT_REPO=$(basename -s .git "$(git remote get-url origin 2>/dev/null)" 2>/dev/null)
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
If the current repo cannot be resolved by any tier, build-intake stops with a clear error rather than claiming tickets it cannot scope. The match is by repo short name (`repo:<CURRENT_REPO>`), case-insensitive.
|
|
499
|
+
|
|
441
500
|
## Invariants
|
|
442
501
|
|
|
443
502
|
- Project tracker selection is **persistent** within a project — always read from config, never infer from the shape of `$ARGUMENTS`. If a developer wants a different destination for one run, they edit `.lisa.config.local.json`.
|
|
@@ -67,11 +67,12 @@ Sequence:
|
|
|
67
67
|
2. `product-specialist` -- define user goals, user flows (Gherkin), acceptance criteria, error states, UX concerns, and out-of-scope items
|
|
68
68
|
3. **Edge Case Brainstorm sub-flow** -- run the PRD candidate through the edge-case checklist; fold accepted cases into acceptance criteria, out-of-scope, or open questions
|
|
69
69
|
4. `architecture-specialist` -- assess technical feasibility, identify constraints, map existing system boundaries
|
|
70
|
-
5. Synthesize findings into a PRD
|
|
70
|
+
5. Synthesize findings into a PRD containing: problem statement, user stories, acceptance criteria, technical constraints, open questions, and proposed scope
|
|
71
71
|
6. **Plan Phase Tooling** -- review all available skills and agents (project-defined, plugin-provided, and built-in) and determine which ones the Plan phase will need. For each recommended skill or agent, state why it is needed. If no skills or agents beyond the defaults are identified, explicitly justify why the standard set is sufficient. Include this as a "Recommended Tooling for Plan Phase" section in the PRD.
|
|
72
|
-
7. `
|
|
72
|
+
7. **Create the PRD in the configured source** -- invoke `lisa:prd-source-write` with the synthesized PRD (`title`, `body`, `initial_role` resolved from the caller's `prd_ready` flag — `draft` by default, `ready` when `prd_ready=true`, plus any `dedupe_key`/`marker`/`source_ref` the caller passed). The PRD **lives in the source** (Notion page / Confluence page / GitHub issue / Linear project per `.lisa.config.json` `source`); there is no separate document artifact. A `source` must be configured — if it is not, stop and report it. `prd-source-write` dedupes by marker, so re-running against the same idea references the existing PRD instead of creating a duplicate.
|
|
73
|
+
8. `learner` -- capture discoveries for future sessions
|
|
73
74
|
|
|
74
|
-
Output: A PRD
|
|
75
|
+
Output: A PRD created in the configured source, carrying a "Recommended Tooling for Plan Phase" section, in the `draft` role by default (or `ready` when `prd_ready=true`, so `lisa:intake` auto-claims it). If there is not enough context to produce a complete PRD, stop and report what is missing rather than creating an incomplete one. If no `source` is configured, stop and report it rather than emitting a loose document.
|
|
75
76
|
|
|
76
77
|
### Plan
|
|
77
78
|
|