@codyswann/lisa 2.61.1 → 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-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 +60 -0
- package/plugins/lisa/rules/intent-routing.md +4 -3
- 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 +11 -1
- 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 +13 -0
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +15 -1
- package/plugins/lisa/skills/github-write-issue/SKILL.md +13 -4
- 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 +3 -2
- package/plugins/lisa/skills/jira-build-intake/SKILL.md +13 -0
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +8 -0
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +13 -0
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +11 -1
- 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 +11 -1
- 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/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 +4 -0
- 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-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 +60 -0
- package/plugins/src/base/rules/intent-routing.md +4 -3
- 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 +11 -1
- package/plugins/src/base/skills/confluence-write-prd/SKILL.md +103 -0
- package/plugins/src/base/skills/github-build-intake/SKILL.md +13 -0
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +15 -1
- package/plugins/src/base/skills/github-write-issue/SKILL.md +13 -4
- 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 +3 -2
- package/plugins/src/base/skills/jira-build-intake/SKILL.md +13 -0
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +8 -0
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +13 -0
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +11 -1
- 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 +11 -1
- 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/tear-down-automations/SKILL.md +34 -0
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +4 -0
- 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,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.
|
|
@@ -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.
|