@codyswann/lisa 4.55.5 → 4.55.6
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/cdk/copy-overwrite/tsconfig.eslint.json +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +39 -38
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/tsconfig.eslint.json +1 -1
- package/nestjs/copy-overwrite/tsconfig.eslint.json +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +8 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +3 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +6 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +3 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +6 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +3 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +6 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-persist-learning/SKILL.md +5 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +7 -5
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +2 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +6 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +16 -13
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +24 -6
- package/plugins/lisa/commands/exploratory-qa.md +2 -2
- package/plugins/lisa/rules/eager/do-it-now.md +5 -5
- package/plugins/lisa/rules/eager/tracked-work.md +2 -0
- package/plugins/lisa/rules/eager/upstream-to-lisa.md +7 -18
- package/plugins/lisa/rules/reference/claim-time-guards.md +4 -0
- package/plugins/lisa/rules/reference/do-it-now.md +9 -27
- package/plugins/lisa/rules/reference/observability-audit.md +2 -2
- package/plugins/lisa/rules/reference/ready-role-filing.md +6 -2
- package/plugins/lisa/rules/reference/rejection-detection.md +8 -2
- package/plugins/lisa/rules/reference/tracked-work.md +2 -0
- package/plugins/lisa/rules/reference/upstream-to-lisa.md +14 -43
- package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +9 -7
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +3 -0
- package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +6 -0
- package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +3 -0
- package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +6 -0
- package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +3 -0
- package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +6 -0
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-persist-learning/SKILL.md +5 -1
- package/plugins/lisa/skills/lisa-prd-source-write/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +7 -5
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +2 -3
- package/plugins/lisa/skills/lisa-research/SKILL.md +6 -2
- package/plugins/lisa/skills/lisa-rework-triage/SKILL.md +16 -13
- package/plugins/lisa/skills/lisa-track/SKILL.md +24 -6
- package/plugins/lisa-agy/commands/lisa/exploratory-qa.md +2 -2
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +9 -7
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +3 -0
- package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +6 -0
- package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +3 -0
- package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +6 -0
- package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +3 -0
- package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +6 -0
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-persist-learning/SKILL.md +5 -1
- package/plugins/lisa-agy/skills/lisa-prd-source-write/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +7 -5
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +2 -3
- package/plugins/lisa-agy/skills/lisa-research/SKILL.md +6 -2
- package/plugins/lisa-agy/skills/lisa-rework-triage/SKILL.md +16 -13
- package/plugins/lisa-agy/skills/lisa-track/SKILL.md +24 -6
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/commands/lisa/exploratory-qa.md +2 -2
- package/plugins/lisa-copilot/rules/eager/do-it-now.md +5 -5
- package/plugins/lisa-copilot/rules/eager/tracked-work.md +2 -0
- package/plugins/lisa-copilot/rules/eager/upstream-to-lisa.md +7 -18
- package/plugins/lisa-copilot/rules/reference/claim-time-guards.md +4 -0
- package/plugins/lisa-copilot/rules/reference/do-it-now.md +9 -27
- package/plugins/lisa-copilot/rules/reference/observability-audit.md +2 -2
- package/plugins/lisa-copilot/rules/reference/ready-role-filing.md +6 -2
- package/plugins/lisa-copilot/rules/reference/rejection-detection.md +8 -2
- package/plugins/lisa-copilot/rules/reference/tracked-work.md +2 -0
- package/plugins/lisa-copilot/rules/reference/upstream-to-lisa.md +14 -43
- package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +9 -7
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +3 -0
- package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +6 -0
- package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +3 -0
- package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +6 -0
- package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +3 -0
- package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +6 -0
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-persist-learning/SKILL.md +5 -1
- package/plugins/lisa-copilot/skills/lisa-prd-source-write/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +7 -5
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +2 -3
- package/plugins/lisa-copilot/skills/lisa-research/SKILL.md +6 -2
- package/plugins/lisa-copilot/skills/lisa-rework-triage/SKILL.md +16 -13
- package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +24 -6
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/commands/lisa/exploratory-qa.md +2 -2
- package/plugins/lisa-cursor/rules/claim-time-guards-reference.mdc +4 -0
- package/plugins/lisa-cursor/rules/do-it-now-reference.mdc +9 -27
- package/plugins/lisa-cursor/rules/do-it-now.mdc +5 -5
- package/plugins/lisa-cursor/rules/observability-audit-reference.mdc +2 -2
- package/plugins/lisa-cursor/rules/ready-role-filing-reference.mdc +6 -2
- package/plugins/lisa-cursor/rules/rejection-detection-reference.mdc +8 -2
- package/plugins/lisa-cursor/rules/tracked-work-reference.mdc +2 -0
- package/plugins/lisa-cursor/rules/tracked-work.mdc +2 -0
- package/plugins/lisa-cursor/rules/upstream-to-lisa-reference.mdc +14 -43
- package/plugins/lisa-cursor/rules/upstream-to-lisa.mdc +7 -18
- package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +9 -7
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +3 -0
- package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +6 -0
- package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +3 -0
- package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +6 -0
- package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +3 -0
- package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +6 -0
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-persist-learning/SKILL.md +5 -1
- package/plugins/lisa-cursor/skills/lisa-prd-source-write/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +7 -5
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +2 -3
- package/plugins/lisa-cursor/skills/lisa-research/SKILL.md +6 -2
- package/plugins/lisa-cursor/skills/lisa-rework-triage/SKILL.md +16 -13
- package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +24 -6
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +21 -9
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +1 -1
- package/plugins/lisa-expo/commands/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-expo/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-expo-agy/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-expo-copilot/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-expo-cursor/skills/e2e-coverage-gaps/SKILL.md +22 -10
- 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/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +21 -9
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +1 -1
- package/plugins/lisa-harper-fabric/commands/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-harper-fabric/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-harper-fabric-agy/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-harper-fabric-copilot/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-harper-fabric-cursor/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +21 -9
- package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +1 -1
- package/plugins/lisa-rails/commands/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-rails/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-rails-agy/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-agy/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-rails-copilot/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/commands/lisa/e2e-coverage-gaps.md +2 -2
- package/plugins/lisa-rails-cursor/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/scripts/_wiki-lib.mjs +2 -2
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/scripts/_wiki-lib.mjs +2 -2
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/scripts/_wiki-lib.mjs +2 -2
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/scripts/_wiki-lib.mjs +2 -2
- package/plugins/src/base/commands/exploratory-qa.md +2 -2
- package/plugins/src/base/rules/eager/do-it-now.md +5 -5
- package/plugins/src/base/rules/eager/tracked-work.md +2 -0
- package/plugins/src/base/rules/eager/upstream-to-lisa.md +7 -18
- package/plugins/src/base/rules/reference/claim-time-guards.md +4 -0
- package/plugins/src/base/rules/reference/do-it-now.md +9 -27
- package/plugins/src/base/rules/reference/observability-audit.md +2 -2
- package/plugins/src/base/rules/reference/ready-role-filing.md +6 -2
- package/plugins/src/base/rules/reference/rejection-detection.md +8 -2
- package/plugins/src/base/rules/reference/tracked-work.md +2 -0
- package/plugins/src/base/rules/reference/upstream-to-lisa.md +14 -43
- package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +9 -7
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +3 -0
- package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +6 -0
- package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +3 -0
- package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +6 -0
- package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +3 -0
- package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +6 -0
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-persist-learning/SKILL.md +5 -1
- package/plugins/src/base/skills/lisa-prd-source-write/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +7 -5
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +2 -3
- package/plugins/src/base/skills/lisa-research/SKILL.md +6 -2
- package/plugins/src/base/skills/lisa-rework-triage/SKILL.md +16 -13
- package/plugins/src/base/skills/lisa-track/SKILL.md +24 -6
- package/plugins/src/expo/commands/e2e-coverage-gaps.md +2 -2
- package/plugins/src/expo/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/src/harper-fabric/commands/e2e-coverage-gaps.md +2 -2
- package/plugins/src/harper-fabric/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/src/rails/commands/e2e-coverage-gaps.md +2 -2
- package/plugins/src/rails/skills/e2e-coverage-gaps/SKILL.md +22 -10
- package/plugins/src/wiki/scripts/_wiki-lib.mjs +2 -2
- package/typescript/copy-overwrite/tsconfig.eslint.json +1 -1
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-exploratory-qa
|
|
3
|
-
description: First-time-user exploratory QA pass for ANY product type (DOM web app, HTTP/API backend, canvas game, CLI/library, IaC/CDK) that FEEDS THE LIFECYCLE. Use when asked to experience a product the way a brand-new end user would — driving its real consumer-facing interface via the `use-the-product` core (which detects the product type, resolves the per-environment mutation policy from .lisa.config.json so production data is never mutated by accident, and explores through the project's personas when it defines them) to find anything confusing, broken, or hard to use. Static route scans, HTTP fetches, screenshots alone, or console/network checks alone are not sufficient evidence. Instead of writing a report file, it files
|
|
3
|
+
description: First-time-user exploratory QA pass for ANY product type (DOM web app, HTTP/API backend, canvas game, CLI/library, IaC/CDK) that FEEDS THE LIFECYCLE. Use when asked to experience a product the way a brand-new end user would — driving its real consumer-facing interface via the `use-the-product` core (which detects the product type, resolves the per-environment mutation policy from .lisa.config.json so production data is never mutated by accident, and explores through the project's personas when it defines them) to find anything confusing, broken, or hard to use. Static route scans, HTTP fetches, screenshots alone, or console/network checks alone are not sufficient evidence. Instead of writing a report file, it files worthwhile findings as tracked work items via lisa-tracker-write. A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa-intake) or left in the backlog for human triage (default). For gaps in the automated test suite, use e2e-coverage-gaps instead.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Exploratory QA
|
|
7
7
|
|
|
8
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
9
|
+
|
|
8
10
|
## Overview
|
|
9
11
|
|
|
10
|
-
Experience the product the way a **brand-new end user** would: drive its real consumer-facing interface and actually try to use it, then surface anything **confusing, broken, or hard to understand**. This is a usability/experience pass, **not** a test-coverage audit (for that, use `e2e-coverage-gaps`).
|
|
12
|
+
Experience the product the way a **brand-new end user** would: drive its real consumer-facing interface and actually try to use it, then surface anything **confusing, broken, or hard to understand**. This is a usability/experience pass, **not** a test-coverage audit (for that, use `e2e-coverage-gaps`). Accepted worthwhile findings enter the Lisa lifecycle as bounded tracked work — no static report file.
|
|
11
13
|
|
|
12
14
|
**How you drive the product is owned by the `use-the-product` core skill.** Invoke it first: it detects the product type (web / API / game / CLI / IaC), resolves the target environment and its **mutation policy** (so you never mutate production without an explicit, justified opt-in), and discovers the project's **personas** so you can explore as each one. This skill supplies the **QA lens** — what to look for and how to file it.
|
|
13
15
|
|
|
@@ -61,7 +63,7 @@ Whether you may create/edit/delete — and as which account — is set by the `u
|
|
|
61
63
|
|
|
62
64
|
## 6. File findings as tracked work
|
|
63
65
|
|
|
64
|
-
No report file. Every finding becomes a **leaf work item** 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):
|
|
66
|
+
Apply `do-it-now`'s **Worth doing** guidance first. Decline low-value observations in the run summary without a ticket or human gate; bundle related worthwhile minor findings when appropriate. No report file. Every accepted finding becomes a **leaf work item** 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):
|
|
65
67
|
|
|
66
68
|
Kane never files the work item itself. Even when it marks a failure as a confirmed product bug, run Lisa's marker-based duplicate search, apply the QA lens, and route the finding through `lisa-tracker-write` exactly as for every other controller.
|
|
67
69
|
|
|
@@ -72,7 +74,7 @@ Kane never files the work item itself. Even when it marks a failure as a confirm
|
|
|
72
74
|
|
|
73
75
|
Each finding is a flat leaf, so `build_ready` applies directly — pass it explicitly on every create.
|
|
74
76
|
|
|
75
|
-
**This skill is the named human-gate exception under `ready-role-filing`.**
|
|
77
|
+
**This skill is the named human-gate exception under `ready-role-filing`.** For accepted worthwhile work elsewhere in Lisa, a complete defect found during other work is filed with explicit `build_ready: true` so build-intake claims it next cycle. Exploratory QA is deliberately different, and that difference is ratified rather than drift: its findings are *candidate* defects and usability observations whose **product significance is a human call**, so auto-readying them would push judgment work into the build queue — precisely the failure the gate model exists to prevent. Its default `ready=false` is therefore an **explicit human-gate marker, never a bare omission**: every not-ready create passes `human_gate: "exploratory finding — product significance is a human product call"` alongside `build_ready: false`, and the writer stamps the auditable `[lisa-human-gate]` marker. An operator who wants a pass to feed the queue directly opts in with `ready=true`.
|
|
76
78
|
|
|
77
79
|
(The sibling `e2e-coverage-gaps` skills are the contrast: a missing automated test is not a product question, so they file `build_ready: true` by default.)
|
|
78
80
|
|
|
@@ -80,11 +82,11 @@ Each ticket MUST be a complete spec (the validator rejects thin tickets): a **th
|
|
|
80
82
|
|
|
81
83
|
### Idempotency — don't spam duplicates
|
|
82
84
|
|
|
83
|
-
Re-running a pass must not refile the same finding. Before creating a ticket, search the tracker for a 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`). Per the `rejection-detection` rule's **Proposal rejection memory** section, that marker search MUST cover **open AND closed** tickets (with a body-enumeration fallback on search-index lag), and **match by the marker, never by title.** Then split on how any prior ticket closed:
|
|
85
|
+
Re-running a pass must not refile the same finding. Before creating a ticket, search the tracker for a 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`). Per the `rejection-detection` rule's **Proposal rejection memory** section, that marker search MUST cover **open AND closed** tickets (with a body-enumeration fallback on search-index lag), and **match by the marker, never by title alone; for legacy unmarked issues, read the body and closing discussion to establish the semantic match.** Then split on how any prior ticket closed:
|
|
84
86
|
|
|
85
87
|
- **Open** ticket carrying the marker → reference/update it instead; do not create a second.
|
|
86
88
|
- **Closed as _completed_** → does **not** suppress. A recurrence after a fix is a genuine **regression**, so file the finding.
|
|
87
|
-
- **Closed as _not planned_** (GitHub `stateReason == "not_planned"`; the config-resolved won't-do/canceled equivalent on JIRA/Linear
|
|
89
|
+
- **Closed as _not planned_** (GitHub `stateReason == "not_planned"`; the config-resolved won't-do/canceled equivalent on JIRA/Linear — never infer decline from a hardcoded state name) → a human **declined** this finding, so **suppress it**. Re-file only with evidence that **postdates the decline** and establishes a materially changed consequence, requirement, or risk addressing the recorded reason, carrying BOTH the machine token (`declined <date>; recurred <date> in <ref>`) and a human acknowledgment sentence (`You declined this on <date>. New evidence (<date>, <ref>) changes the consequence, requirement, or risk: <what changed and why the decline no longer applies>.`).
|
|
88
90
|
|
|
89
91
|
Every filed finding ticket MUST end with the `rejection-detection` **operator footer** as a visible prose line so the operator knows which close-reason silences it:
|
|
90
92
|
|
|
@@ -150,7 +152,7 @@ teardown proposal through `lisa-tracker-write` (per `tracked-work` + `integratio
|
|
|
150
152
|
- **Marker** `<!-- [lisa-automation-retire] key=exploratory-bugs -->` plus a visible prose line;
|
|
151
153
|
matched on the marker, never the title; searched **open AND closed** per `rejection-detection`'s
|
|
152
154
|
**Proposal rejection memory**. Treat matches by close state: **open** suppresses another proposal;
|
|
153
|
-
**Not planned** suppresses another proposal unless new evidence postdates the rejection;
|
|
155
|
+
**Not planned** suppresses another proposal unless new evidence postdates the rejection and materially changes the consequence, requirement, or risk that justified the decline;
|
|
154
156
|
**Completed** means the prior approved action happened, so a later recurrence may be re-filed.
|
|
155
157
|
When an existing proposal suppresses filing, **the run still records `policy-obsolete` and files
|
|
156
158
|
nothing** — the outcome describes this run, while the ticket is filed exactly once.
|
|
@@ -467,6 +467,9 @@ A blocker is active if it is open and has no cleared status label. Treat `status
|
|
|
467
467
|
|
|
468
468
|
#### 3b. Claim
|
|
469
469
|
|
|
470
|
+
Before the claim mutation, apply `claim-time-guards` — **Value before claim**, or **Worth doing** in `lisa-track` on runtimes without the rule tree (Antigravity). A ready label establishes neither value nor permission to expand scope. Respect the preceding human-hold gate; a declined incidental item consumes this cycle's one processed disposition.
|
|
471
|
+
|
|
472
|
+
|
|
470
473
|
**Rejection detection runs first — before the relabel below.** Per the vendor-neutral `rejection-detection` rule (cite the slug; do not restate its classification table), classify this item at the **top of 3b, BEFORE** the `$READY → $CLAIMED` relabel — after the relabel the current-lane signal is gone. Read the item's Label-Event History from `lisa-github-read-issue` (chronological `LabeledEvent` / `UnlabeledEvent` on the configured `$READY` label) and classify it `rejection-reclaim | forward-only | never-left-ready | unknown`. Lane names come from `.lisa.config.json` (`github.labels.build.*`), never hardcoded. A failing/absent history yields `unknown` and the claim proceeds — detection never blocks the build. Items carrying a learning marker (`[lisa-learning-drop]` / `[lisa-learning-pr]` / `[lisa-learning-upstream-handoff]`) or the `learning:needs-triage` label are never rejection triggers (no learning-about-learning). Carry the classification into the relabel and lifecycle below.
|
|
471
474
|
|
|
472
475
|
**On `rejection-reclaim`, reflect before re-implementing** (per `rejection-detection`): read the rejection evidence through the access layer — the issue comments posted after the backward transition (the QA rejection comment) and the review threads on the rejected PR via `lisa-github-read-issue` — assemble ONE candidate learning (rule, why, provenance linking the rejection comment + rejected PR, evidence links, scope hint, triggering issue, fingerprint `sll4-sha1(rule\ntriggering_issue)[:12]`), and route it to the `lisa-persist-learning` skill. If that skill is absent, record the candidate as a comment carrying a **visible prose line plus** the marker (a bare marker renders as an empty bubble) — `Recorded a candidate learning from this rejection (queued for the judgment gate): <one-line candidate rule>.` then `<!-- [lisa-rejection-candidate] key=<issue>-<transition-ts> -->` — and proceed. Dedupe on `<issue>-<backward-transition-timestamp>` — a second re-claim produces no duplicate. Unreadable/absent evidence → no candidate, still implement.
|
|
@@ -6,6 +6,12 @@ allowed-tools: ["Bash", "Skill", "Read"]
|
|
|
6
6
|
|
|
7
7
|
# Write GitHub Issue: $ARGUMENTS
|
|
8
8
|
|
|
9
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
10
|
+
|
|
11
|
+
## Before creating incidental work
|
|
12
|
+
|
|
13
|
+
Apply `do-it-now`'s **Worth doing** guidance before drafting a new incidental item. Decline low-value observations without writing a ticket or requesting a human gate; report the reason briefly to the caller. A complete spec is not evidence of value. This does not cancel explicit user requests or accepted requirements. Honor prior Not planned decisions through `rejection-detection`, including legacy issues without markers. Accepted work continues through the existing validation and readiness contract below.
|
|
14
|
+
|
|
9
15
|
## Human-gate release authorization
|
|
10
16
|
|
|
11
17
|
A release requires a trusted human author, not just matching comment text. Follow
|
|
@@ -349,6 +349,9 @@ This gate never blocks a legitimate flat Task/Bug: those have no open children a
|
|
|
349
349
|
|
|
350
350
|
#### 3b. Claim
|
|
351
351
|
|
|
352
|
+
Before the claim mutation, apply `claim-time-guards` — **Value before claim**, or **Worth doing** in `lisa-track` on runtimes without the rule tree (Antigravity). A ready label establishes neither value nor permission to expand scope. Respect the preceding human-hold gate; a declined incidental item consumes this cycle's one processed disposition.
|
|
353
|
+
|
|
354
|
+
|
|
352
355
|
**Rejection detection runs first — before the transition below.** Per the vendor-neutral `rejection-detection` rule (cite the slug; do not restate its classification table), classify this ticket at the **top of 3b, BEFORE** the `$READY → $CLAIMED` transition — after the transition the current-status signal is gone. Read the ticket's status changelog via `lisa-atlassian-access operation: changelog key: <TICKET>` and classify it `rejection-reclaim | forward-only | never-left-ready | unknown` (a `rejection-reclaim` is a changelog entry whose `to` is the configured `$READY` status following an earlier `review`/`done`-ward status). Status names come from `.lisa.config.json`, never hardcoded. A failing/absent changelog yields `unknown` and the claim proceeds — detection never blocks the build. Tickets carrying a learning marker (`[lisa-learning-drop]` / `[lisa-learning-pr]` / `[lisa-learning-upstream-handoff]`) or the `learning:needs-triage` label are never rejection triggers (no learning-about-learning). Carry the classification into the transition and lifecycle below.
|
|
353
356
|
|
|
354
357
|
**On `rejection-reclaim`, reflect before re-implementing** (per `rejection-detection`): read the rejection evidence through the access layer — the ticket comments posted after the backward transition (the QA rejection comment) via `lisa-atlassian-access operation: read-ticket` / `comment` reads and the review threads on the rejected PR — assemble ONE candidate learning (rule, why, provenance linking the rejection comment + rejected PR, evidence links, scope hint, triggering issue, fingerprint `sll4-sha1(rule\ntriggering_issue)[:12]`), and route it to the `lisa-persist-learning` skill. If that skill is absent, record the candidate via `lisa-atlassian-access operation: comment` as a comment carrying a **visible prose line plus** the marker (a bare marker renders as an empty bubble) — `Recorded a candidate learning from this rejection (queued for the judgment gate): <one-line candidate rule>.` then `<!-- [lisa-rejection-candidate] key=<issue>-<transition-ts> -->` — and proceed. Dedupe on `<issue>-<backward-transition-timestamp>` — a second re-claim produces no duplicate. Unreadable/absent evidence → no candidate, still implement.
|
|
@@ -6,6 +6,12 @@ allowed-tools: ["Bash", "Skill"]
|
|
|
6
6
|
|
|
7
7
|
# Write JIRA Ticket: $ARGUMENTS
|
|
8
8
|
|
|
9
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
10
|
+
|
|
11
|
+
## Before creating incidental work
|
|
12
|
+
|
|
13
|
+
Apply `do-it-now`'s **Worth doing** guidance before drafting a new incidental item. Decline low-value observations without writing a ticket or requesting a human gate; report the reason briefly to the caller. A complete spec is not evidence of value. This does not cancel explicit user requests or accepted requirements. Honor prior Not planned decisions through `rejection-detection`, including legacy issues without markers. Accepted work continues through the existing validation and readiness contract below.
|
|
14
|
+
|
|
9
15
|
## Human-gate release authorization
|
|
10
16
|
|
|
11
17
|
A release requires a trusted human author, not just matching comment text. Follow
|
|
@@ -285,7 +285,7 @@ resolved by reading the ticket, never by filing a sibling blind. Then:
|
|
|
285
285
|
- **Closed via merged work** → done; a genuine regression later is new
|
|
286
286
|
evidence and a new ticket.
|
|
287
287
|
- **Closed unmerged / rejected** → the human declined. **Do NOT re-file**
|
|
288
|
-
unless new evidence **postdates the rejection** — and when re-filing, state
|
|
288
|
+
unless new evidence **postdates the rejection** and materially changes the consequence, requirement, or risk that justified the decline — and when re-filing, state
|
|
289
289
|
the postdating evidence explicitly in the ticket ("rejected <date>; recurred
|
|
290
290
|
<date> in <ref>"). Closed-as-rejected tickets ARE the gardener's memory of
|
|
291
291
|
declined recommendations.
|
|
@@ -413,7 +413,7 @@ automation, through `lisa-tracker-write` (per `tracked-work` +
|
|
|
413
413
|
visible prose line; matched on the marker, never the title; searched **open
|
|
414
414
|
AND closed** per `rejection-detection`'s **Proposal rejection memory**. Treat
|
|
415
415
|
matches by close state: **open** suppresses another proposal; **Not planned**
|
|
416
|
-
suppresses another proposal unless new evidence postdates the rejection;
|
|
416
|
+
suppresses another proposal unless new evidence postdates the rejection and materially changes the consequence, requirement, or risk that justified the decline;
|
|
417
417
|
**Completed** means the prior approved action happened, so a later recurrence
|
|
418
418
|
may be re-filed. The `[lisa-gardener]` search above stays what it is — the
|
|
419
419
|
candidate evidence, not the dedupe key. When an existing proposal suppresses
|
|
@@ -344,6 +344,9 @@ This gate never blocks a legitimate flat Task/Bug: those have no open children a
|
|
|
344
344
|
|
|
345
345
|
#### 3b. Claim
|
|
346
346
|
|
|
347
|
+
Before the claim mutation, apply `claim-time-guards` — **Value before claim**, or **Worth doing** in `lisa-track` on runtimes without the rule tree (Antigravity). A ready label establishes neither value nor permission to expand scope. Respect the preceding human-hold gate; a declined incidental item consumes this cycle's one processed disposition.
|
|
348
|
+
|
|
349
|
+
|
|
347
350
|
**Rejection detection runs first — before the transition below.** Per the vendor-neutral `rejection-detection` rule (cite the slug; do not restate its classification table), classify this Issue at the **top of 3b, BEFORE** the `$READY → $CLAIMED` transition — afterwards the current-lane signal is gone. Read the Issue's history via `lisa-linear-access operation: history id: <ISSUE-ID>`, keyed on **workflow-state** history, and classify it `rejection-reclaim | forward-only | never-left-ready | unknown` (a `rejection-reclaim` is a move back into `$READY` from a later lane). State names come from `.lisa.config.json`, never hardcoded.
|
|
348
351
|
|
|
349
352
|
> Reading state history is strictly simpler than the label history this used to key on: `IssueHistory` inlines `fromState.name` / `toState.name` on each node, so the transition is read directly with no label-ID resolution against `list-issue-labels` and no reconstruction from `addedLabelIds`/`removedLabelIds` deltas. That reconstruction was lossy — the deltas carry no prior/next full set — which is one more reason the build lane moved to states. A failing/absent history yields `unknown` and the claim proceeds — detection never blocks the build. Issues carrying a learning marker (`[lisa-learning-drop]` / `[lisa-learning-pr]` / `[lisa-learning-upstream-handoff]`) or the `learning:needs-triage` label are never rejection triggers (no learning-about-learning). Carry the classification into the transition and lifecycle below.
|
|
@@ -6,6 +6,12 @@ allowed-tools: ["Bash", "Skill"]
|
|
|
6
6
|
|
|
7
7
|
# Write Linear Work Item: $ARGUMENTS
|
|
8
8
|
|
|
9
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
10
|
+
|
|
11
|
+
## Before creating incidental work
|
|
12
|
+
|
|
13
|
+
Apply `do-it-now`'s **Worth doing** guidance before drafting a new incidental item. Decline low-value observations without writing a ticket or requesting a human gate; report the reason briefly to the caller. A complete spec is not evidence of value. This does not cancel explicit user requests or accepted requirements. Honor prior Not planned decisions through `rejection-detection`, including legacy issues without markers. Accepted work continues through the existing validation and readiness contract below.
|
|
14
|
+
|
|
9
15
|
## Human-gate release authorization
|
|
10
16
|
|
|
11
17
|
A release requires a trusted human author, not just matching comment text. Follow
|
|
@@ -200,7 +200,7 @@ watching it. Evaluate all three. When all three hold, record `policy-obsolete` a
|
|
|
200
200
|
- **Marker** `<!-- [lisa-automation-retire] key=monitor -->` plus a visible prose line; matched on
|
|
201
201
|
the marker, never the title; searched **open AND closed** per `rejection-detection`'s **Proposal
|
|
202
202
|
rejection memory**. Treat matches by close state: **open** suppresses another proposal;
|
|
203
|
-
**Not planned** suppresses another proposal unless new evidence postdates the rejection;
|
|
203
|
+
**Not planned** suppresses another proposal unless new evidence postdates the rejection and materially changes the consequence, requirement, or risk that justified the decline;
|
|
204
204
|
**Completed** means the prior approved action happened, so a later recurrence may be re-filed.
|
|
205
205
|
When an existing proposal suppresses filing, **the run still records `policy-obsolete` and files
|
|
206
206
|
nothing** — the outcome describes this run, while the ticket is filed exactly once.
|
|
@@ -9,6 +9,8 @@ Route ONE candidate learning through the judgment gate and act on the verdict. C
|
|
|
9
9
|
|
|
10
10
|
Most candidates are dropped — that is the gate working, not a failure. Nothing is ever silent (every drop leaves a visible note), and no learning content ever reaches the learnings surface outside a pull request.
|
|
11
11
|
|
|
12
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
13
|
+
|
|
12
14
|
## Candidate Input
|
|
13
15
|
|
|
14
16
|
Accept the candidate as JSON or `key=value` fields:
|
|
@@ -68,7 +70,9 @@ The note is one line naming the classification (with its fixed plain-language gl
|
|
|
68
70
|
|
|
69
71
|
### `handoff-upstream` (classification `lisa-upstream`)
|
|
70
72
|
|
|
71
|
-
This disposition completes the SLL-5 loop (#1583): on
|
|
73
|
+
This disposition completes the SLL-5 loop (#1583): on an accepted worthwhile Lisa-attributed failure the upstream Lisa ticket is filed **automatically**. Filing lives here — not in `lisa-attribute-failure` — because that skill is deliberately read-only (doctor delegates to it inside its own read-only contract), while this skill already owns exactly the verdict's side effects and the marker-dedupe discipline. Never persist a local rule for a Lisa-attributed failure; the host project's only durable trace is the brief linking note in step 6.
|
|
74
|
+
|
|
75
|
+
First apply `do-it-now`'s **Worth doing** guidance. Attribution establishes ownership, not value. Decline low-value additional hardening in the current summary without filing, persisting a rule, or asking a human; otherwise continue below. Before creating an upstream issue, consult `rejection-detection` for open and closed matches, including legacy unmarked declines.
|
|
72
76
|
|
|
73
77
|
1. **Post the handoff marker** on the triggering issue (same one-comment marker dedupe; the marker key is unchanged). The visible line must not claim a filing that has not happened yet — attribution and filing come after this step:
|
|
74
78
|
|
|
@@ -38,6 +38,7 @@ ideation_ledger_payload: # optional; forwarded unchanged to the ven
|
|
|
38
38
|
selected_idea: "<selected idea title/key>"
|
|
39
39
|
rejected_overlap_candidates: ["<issue refs/titles considered and rejected>"]
|
|
40
40
|
expected_empirical_verification_artifact: "<artifact ref or unavailable>"
|
|
41
|
+
reproposal_context: "<optional dated decline, new evidence, changed consequence, token and acknowledgment already included in the PRD body by research>"
|
|
41
42
|
```
|
|
42
43
|
|
|
43
44
|
`initial_role` semantics are uniform across vendors (the role STRINGS resolve per vendor from
|
|
@@ -207,7 +207,10 @@ For each idea in the creation set, invoke `/lisa:research` with:
|
|
|
207
207
|
- a structured `ideation_ledger_payload` handoff containing the selected marker, automation id and
|
|
208
208
|
memory path when available, persona names, persona evidence references, rejected overlap
|
|
209
209
|
candidates, repo identity, `prd_ready`, selected idea title/key, and the expected empirical
|
|
210
|
-
verification artifact.
|
|
210
|
+
verification artifact. For a justified re-proposal, include `reproposal_context`: the dated
|
|
211
|
+
decline, dated new evidence reference, materially changed consequence, and the exact machine
|
|
212
|
+
token and human acknowledgment paragraph specified below. Research must include that paragraph
|
|
213
|
+
and token in the PRD body. This payload is the only ideation-run metadata channel between
|
|
211
214
|
`project-ideation`, `research`, `prd-source-write`, and the vendor writer; keep GitHub-specific
|
|
212
215
|
rendering out of this skill.
|
|
213
216
|
|
|
@@ -249,10 +252,9 @@ Per the `rejection-detection` rule's **Proposal rejection memory** section, that
|
|
|
249
252
|
cover **open AND closed** PRDs (with a body-enumeration fallback on search-index lag), and a PRD
|
|
250
253
|
**closed as _not planned_** (GitHub `stateReason == "not_planned"`; the config-resolved won't-do/
|
|
251
254
|
canceled equivalent on JIRA/Linear — never a hardcoded lane string) is a **durable human decline**
|
|
252
|
-
that **suppresses** re-proposing that idea. Re-propose only
|
|
255
|
+
that **suppresses** re-proposing that idea. Re-propose only for a materially changed consequence, requirement, or risk addressing the decline, supported by evidence that **postdates the
|
|
253
256
|
decline**, and state it in the new PRD as BOTH the machine token (`declined <date>; recurred <date>
|
|
254
|
-
in <ref>`) and a human acknowledgment sentence (`You declined this on <date>.
|
|
255
|
-
(<date>, <ref>), so we're raising it once more for your review.`). A PRD closed as _completed_ is
|
|
257
|
+
in <ref>`) and a human acknowledgment sentence (`You declined this on <date>. New evidence (<date>, <ref>) changes the consequence, requirement, or risk: <what changed and why the decline no longer applies>.`). A PRD closed as _completed_ is
|
|
256
258
|
not a decline. This is tracker-side memory; the advisory ideation memory ledger stays advisory and
|
|
257
259
|
never overrides it.
|
|
258
260
|
|
|
@@ -350,7 +352,7 @@ marker-deduped teardown proposal through `lisa-tracker-write` (per `tracked-work
|
|
|
350
352
|
- **Marker** `<!-- [lisa-automation-retire] key=exploratory-prds -->` plus a visible prose line;
|
|
351
353
|
matched on the marker, never the title; searched **open AND closed** per `rejection-detection`'s
|
|
352
354
|
**Proposal rejection memory**. Treat matches by close state: **open** suppresses another proposal;
|
|
353
|
-
**Not planned** suppresses another proposal unless new evidence postdates the rejection;
|
|
355
|
+
**Not planned** suppresses another proposal unless new evidence postdates the rejection and materially changes the consequence, requirement, or risk that justified the decline;
|
|
354
356
|
**Completed** means the prior approved action happened, so a later recurrence may be re-filed.
|
|
355
357
|
When an existing proposal suppresses filing, **the run still records `policy-obsolete` and files
|
|
356
358
|
nothing** — the outcome describes this run, while the ticket is filed exactly once.
|
|
@@ -586,10 +586,9 @@ rule's **Proposal rejection memory** section, that marker search MUST cover **op
|
|
|
586
586
|
tickets (body-enumeration fallback on search-index lag): an **open** match → reference it and ensure
|
|
587
587
|
the `is blocked by` link is present rather than creating a duplicate; a match **closed as _not
|
|
588
588
|
planned_** (GitHub `stateReason == "not_planned"`; the config-resolved equivalent on JIRA/Linear) is
|
|
589
|
-
a **human decline** of that fix ticket — do **not** re-file it
|
|
589
|
+
a **human decline** of that fix ticket — do **not** re-file it without a materially changed consequence, requirement, or risk addressing the decline, supported by evidence that **postdates the
|
|
590
590
|
decline**, and the re-filed ticket MUST carry BOTH the machine token (`declined <date>; recurred
|
|
591
|
-
<date> in <ref>`) and the human acknowledgment sentence (`You declined this on <date>.
|
|
592
|
-
recurred (<date>, <ref>), so we're raising it once more for your review.`); a match closed as
|
|
591
|
+
<date> in <ref>`) and the human acknowledgment sentence (`You declined this on <date>. New evidence (<date>, <ref>) changes the consequence, requirement, or risk: <what changed and why the decline no longer applies>.`); a match closed as
|
|
593
592
|
_completed_ is a regression path, not a decline. Honor the backoff window and state fingerprint
|
|
594
593
|
(Loop prevention) so re-runs over the same unchanged blocker are no-ops.
|
|
595
594
|
|
|
@@ -20,8 +20,12 @@ Produce a PRD for the problem in `$ARGUMENTS`, then create it in the configured
|
|
|
20
20
|
structured metadata object to forward unchanged to `lisa-prd-source-write`. It carries the
|
|
21
21
|
selected marker, automation id/path when available, persona names, persona evidence references,
|
|
22
22
|
rejected overlap candidates, repo identity, `prd_ready`, selected idea title/key, and expected
|
|
23
|
-
empirical verification artifact. `
|
|
24
|
-
|
|
23
|
+
empirical verification artifact. When supplied, `reproposal_context` contains the dated decline,
|
|
24
|
+
new evidence, changed consequence, and the required machine token and human acknowledgment.
|
|
25
|
+
Include that token and acknowledgment verbatim in the synthesized PRD body before source routing,
|
|
26
|
+
so the justification survives even when the vendor's metadata renderer does not display this field.
|
|
27
|
+
Other metadata may inform the PRD body; forward the complete payload unchanged without renaming
|
|
28
|
+
or vendor-rendering its fields.
|
|
25
29
|
|
|
26
30
|
## Orchestration: agent team
|
|
27
31
|
|
|
@@ -6,16 +6,14 @@ allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
|
|
|
6
6
|
|
|
7
7
|
# Rework Triage: $ARGUMENTS
|
|
8
8
|
|
|
9
|
-
Classify why
|
|
10
|
-
structural improvement. This is the self-hardening arm of the lifecycle: every classified
|
|
11
|
-
failure either hardens the harness (an upstream Lisa issue), the project (a provisioning or
|
|
12
|
-
environment ticket), or the spec (a PRD defect flag). A rework cycle that fixes the bug but
|
|
13
|
-
never asks *why the agent got it wrong* guarantees the mistake recurs.
|
|
9
|
+
Classify why the previous attempt failed and repair the actual cause. Apply `do-it-now`'s **Worth doing** guidance before proposing additional hardening. Fixing the defect and its relevant regression test can be sufficient; a failure does not automatically justify another rule, hook, or upstream ticket.
|
|
14
10
|
|
|
15
11
|
The caller MUST have run `lisa-tracker-read` first and provided the context bundle (all
|
|
16
12
|
comments chronological, linked PRs with review state, issue links, parent epic). Do not
|
|
17
13
|
classify from a bare summary — evidence-free classification is worse than none.
|
|
18
14
|
|
|
15
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
16
|
+
|
|
19
17
|
## Phase 1 — Rework detection
|
|
20
18
|
|
|
21
19
|
A ticket is **rework** when it was previously implemented by this lifecycle and has returned
|
|
@@ -115,7 +113,12 @@ never one per cycle re-entry.
|
|
|
115
113
|
|
|
116
114
|
## Phase 4 — Route the cause to its hardening destination
|
|
117
115
|
|
|
118
|
-
|
|
116
|
+
For each primary or secondary cause, first decide whether additional work clears
|
|
117
|
+
`do-it-now`'s **Worth doing** bar. If not, report `Hardening action: none required`
|
|
118
|
+
with a brief reason in the existing triage comment. Do not create a replacement
|
|
119
|
+
learning or a human gate merely to retain the declined observation.
|
|
120
|
+
|
|
121
|
+
The table gives destinations for accepted additional work. File through the proper write path — never raw
|
|
119
122
|
ticket creation — so every hardening artifact passes the same quality gates as any other
|
|
120
123
|
Lisa work item.
|
|
121
124
|
|
|
@@ -128,7 +131,7 @@ Lisa work item.
|
|
|
128
131
|
| `prd-defect` | Source PRD | Comment on the PRD (via the `lisa-prd-backlink` lineage) quoting the defective requirement and the QA failure; flag for product review. Do NOT silently edit the PRD — spec changes are a human gate. |
|
|
129
132
|
| `implementation-defect` (no secondary) | None | Normal fix path; the classification comment is the record. Pass the pattern to the `learner` phase — repeated implementation defects of the same shape escalate to `verification-gap`. |
|
|
130
133
|
|
|
131
|
-
**Secondary causes route too.** A
|
|
134
|
+
**Secondary causes route too — when worthwhile.** A worthwhile secondary cause uses its row's
|
|
132
135
|
destination in addition to the primary's: `implementation-defect` with a
|
|
133
136
|
`verification-gap` secondary files the upstream Lisa issue per the `verification-gap`
|
|
134
137
|
row — the code being wrong does not excuse the verification lifecycle for passing it.
|
|
@@ -151,16 +154,16 @@ section differ:
|
|
|
151
154
|
| Defect | `self-hardening` | A Lisa gate/skill/template did something wrong — a harness bug the kernel must fix. | none |
|
|
152
155
|
| Contribution | `template-candidate` | A generalizable pattern discovered downstream that would benefit every host project — not a defect, a proposed improvement to Lisa's templates/rules/skills. | `## Proposed template change` |
|
|
153
156
|
|
|
154
|
-
1. **Dedupe first.** `gh issue list -R <upstream> --state
|
|
157
|
+
1. **Dedupe first.** Search open AND closed items and consult `rejection-detection`'s **Proposal rejection memory**, including legacy issues without markers. `gh issue list -R <upstream> --state all --search "<fingerprint terms>"`
|
|
155
158
|
— if an open issue already covers this failure class or pattern, comment the new
|
|
156
159
|
occurrence on it (evidence compounds; duplicates dilute) and link it instead of filing.
|
|
157
160
|
2. **File with the same bar as any ticket:** a three-audience description (what failed or
|
|
158
161
|
improved for the operator, what the harness did or could do, what to change), the
|
|
159
|
-
|
|
160
|
-
patterns, the
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
public-safe evidence chain (PRD text → ticket AC → QA failure → gate that passed it; for
|
|
163
|
+
patterns, the occurrences proving generality). Invoke `lisa-github-write-issue` against
|
|
164
|
+
`<upstream>` using the existing public-safe attribution/projection procedure from
|
|
165
|
+
`upstream-to-lisa`. Pass `build_ready: true` unless an explicit `human_gate` was declared,
|
|
166
|
+
then pass that reason instead. Use label `self-hardening` for defects or `template-candidate`
|
|
164
167
|
for contributions. A `template-candidate` filing MUST include a
|
|
165
168
|
`## Proposed template change` section naming the Lisa template/rule/skill surface to
|
|
166
169
|
change (e.g. `typescript/package-lisa/package.lisa.json`, a `plugins/src/base` rule)
|
|
@@ -22,7 +22,23 @@ continue through the existing path and never override an independently declared
|
|
|
22
22
|
|
|
23
23
|
Establish the tracked-work invariant before any durable project mutation. Discussion and read-only orientation may proceed without this skill; code, configuration, documentation, research artifacts, plans, investigation findings, tests, commits, and pull requests may not.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
For accepted work this flow must return exactly one canonical `(tracker_provider, work_item_ref)` pair or fail closed. A declined incidental finding returns only its reason and authorizes no durable implementation. It never returns an unvalidated textual guess.
|
|
26
|
+
|
|
27
|
+
## Worth doing
|
|
28
|
+
|
|
29
|
+
Before filing, promoting, or claiming an incidental finding, ask whether the expected benefit justifies implementation, verification, maintenance, CI, and operator attention. Use the evidence already available; no numeric score, new tracking system, or speculative audit is required.
|
|
30
|
+
|
|
31
|
+
- **Act** on concrete delivery failures, incorrect results, credible material security or data-loss risks, and recurring friction whose repair is worth its cost. A small fix can have a large consequence; security need not wait for an incident.
|
|
32
|
+
- **Bundle** related small repairs when one bounded maintenance task is worth doing. Reuse an existing relevant item where possible. Do not expand unrelated work or create one ticket per wording fix.
|
|
33
|
+
- **Decline** cosmetic preferences, speculative edge cases, duplicate controls, or changes whose likely benefit is smaller than their ongoing cost. Acceptable as-is is a valid engineering decision. Say why briefly in the current report, review, or issue; do not create a ticket, ledger entry, new rule, or human gate merely to record a declined observation.
|
|
34
|
+
|
|
35
|
+
A reproducible imperfection proves that something happens, not that it deserves factory capacity. A complete specification establishes buildability, not value. Missing enforcement or test coverage alone does not justify new machinery; name the required behavior or credible consequence at risk. Honor explicit user requests, accepted product requirements, and material safety obligations. This rule cannot silently cancel those commitments or excuse failing required checks.
|
|
36
|
+
|
|
37
|
+
## Prefer less machinery
|
|
38
|
+
|
|
39
|
+
Start with the smallest sufficient correction at the owning component. Consider removing or consolidating redundant machinery before adding a hook, workflow, abstraction, registry, or test framework. Preserve required behavior and protection, and verify the consequence of the change. An isolated failure does not automatically justify a permanent control for every future session.
|
|
40
|
+
|
|
41
|
+
For an existing incidental item, read its discussion, linked PRs and dependencies before declining. Close as **Not planned** (configured Jira/Linear equivalent), give the reason, and remove active lifecycle labels. Preserve human holds and committed scope unless cancellation is authorized; resolve effects on active PRs and dependent delivery first. Before re-filing, search open AND closed issues, read legacy unmarked matches, and require materially changed consequences that address the earlier reason. A later observation of the same accepted limitation is insufficient.
|
|
26
42
|
|
|
27
43
|
## Phase 1 — Resolve tracker and classify input
|
|
28
44
|
|
|
@@ -42,14 +58,16 @@ Invoke `lisa-tracker-read <ref>` and require a live result from the configured p
|
|
|
42
58
|
|
|
43
59
|
### File or plain text
|
|
44
60
|
|
|
61
|
+
For incidental findings, apply `do-it-now` before resolving a new leaf. If the finding is declined, return the reason without creating or claiming anything; durable implementation does not start. Explicit user requests and accepted requirements remain in scope.
|
|
62
|
+
|
|
45
63
|
Search conservatively before creating:
|
|
46
64
|
|
|
47
65
|
1. Normalize the requested outcome and derive a short keyword set; never search with the whole prompt or secrets.
|
|
48
|
-
2. Search
|
|
49
|
-
- GitHub: `gh issue list --repo <org>/<repo> --state
|
|
50
|
-
- Jira: `lisa-atlassian-access operation: search-issues` with project-scoped JQL.
|
|
51
|
-
- Linear: `lisa-linear-access operation: list-issues` scoped to the configured team/workspace.
|
|
52
|
-
3. Treat search results as candidates, never proof. Live-read each plausible candidate through `lisa-tracker-read
|
|
66
|
+
2. Search open AND closed items in the configured project and current repository through the configured provider's documented read surface. Closed items supply decision history, never an active binding:
|
|
67
|
+
- GitHub: `gh issue list --repo <org>/<repo> --state all --search "<keywords> in:title,body"`.
|
|
68
|
+
- Jira: `lisa-atlassian-access operation: search-issues` with project-scoped JQL and no status filter.
|
|
69
|
+
- Linear: `lisa-linear-access operation: list-issues` scoped to the configured team/workspace and including all states.
|
|
70
|
+
3. Treat search results as candidates, never proof. Live-read each plausible candidate and its discussion through `lisa-tracker-read`. Apply `rejection-detection` to prior **Not planned** decisions, including legacy unmarked matches, before creating: suppress the same accepted limitation unless materially changed post-decline evidence addresses its reason, with the required token and acknowledgment in any new item. A completed fix may have a verified regression. For active binding, discard terminal, container, blocked, held-by-gate, cross-repo, and materially different outcomes. A held candidate is never reused: attaching new work to an item a human is holding is how the hold gets spent.
|
|
53
71
|
4. Reuse only when **exactly one** live leaf is a high-confidence semantic match for the same requested outcome and repository. A shared keyword or similar title is not enough. Record the search queries, candidates, and rejection reasons in the returned resolution evidence.
|
|
54
72
|
5. If there is no unique high-confidence match (zero or ambiguous candidates), create **exactly one** item by invoking `lisa-tracker-write` once. Synthesize one complete single-repository leaf (`Bug`, `Task`, `Sub-task`, or `Improvement`, never Epic/container) with the writer's required three-audience body, Gherkin acceptance criteria, repository, target environment, relationship search, and executable Validation Journey. Pass `build_ready: true` unless the caller declared a `human_gate`, in which case pass that `human_gate: "<why>"` reason instead of `build_ready: true` and never alongside it, so the writer leaves the leaf in the tracker's default backlog role — out of the lane build-intake claims from — and stamps the hold on the body as a `[lisa-human-gate]` marker. Discarding a declared gate and filing build-ready anyway is the one outcome this step must never produce. Do not create placeholder/thin tickets, do not create a hierarchy, and do not retry creation by making another item if validation fails; repair the proposed spec and retry the same writer operation only if the vendor contract supports idempotent reuse.
|
|
55
73
|
6. Live-read the writer's canonical returned reference with `lisa-tracker-read`. A create response without a verified live leaf is failure.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Explore gaps in the automated Playwright/e2e suite: inventory the app's routes and existing tests, find routes with no coverage or flows tested only on the happy path (missing error, permission, empty, loading, and edge cases), confirm each in the running app, and file
|
|
2
|
+
description: "Explore gaps in the automated Playwright/e2e suite: inventory the app's routes and existing tests, find routes with no coverage or flows tested only on the happy path (missing error, permission, empty, loading, and edge cases), confirm each in the running app, and file bounded build-ready work for worthwhile test gaps via lisa:tracker-write. The optional ready flag (default true) controls build-ready vs backlog. For human usability issues, use exploratory-qa instead."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
4
|
argument-hint: "[target-url | env] [ready=true|false]"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Use the /lisa-expo:e2e-coverage-gaps skill to inventory the app's routes and the existing Playwright suite, find uncovered and happy-path-only paths, confirm each gap in the running app, and file
|
|
7
|
+
Use the /lisa-expo:e2e-coverage-gaps skill to inventory the app's routes and the existing Playwright suite, find uncovered and happy-path-only paths, confirm each gap in the running app, and file bounded build-ready work for worthwhile test gaps via lisa:tracker-write (build-ready per the ready flag, default true). For human usability/experience findings, use /lisa:exploratory-qa. $ARGUMENTS
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: e2e-coverage-gaps
|
|
3
|
-
description: Playwright/e2e coverage-gap explorer that FEEDS THE LIFECYCLE. Use when asked to find paths the automated end-to-end suite does NOT cover — routes with no test at all, or flows that are only happy-path tested (missing error, validation, permission, empty, loading, and edge states). It inventories the app's routes and the existing Playwright tests, explores the running app to confirm each uncovered or under-covered path is real and reachable, and files
|
|
3
|
+
description: Playwright/e2e coverage-gap explorer that FEEDS THE LIFECYCLE. Use when asked to find paths the automated end-to-end suite does NOT cover — routes with no test at all, or flows that are only happy-path tested (missing error, validation, permission, empty, loading, and edge states). It inventories the app's routes and the existing Playwright tests, explores the running app to confirm each uncovered or under-covered path is real and reachable, and files bounded build-ready work for worthwhile test gaps via lisa-tracker-write. For human usability/experience issues (confusing, cramped, or broken UI), use the lisa-exploratory-qa skill instead.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# E2E Coverage Gaps
|
|
7
7
|
|
|
8
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
9
|
+
|
|
8
10
|
## Overview
|
|
9
11
|
|
|
10
12
|
Find where the automated end-to-end (Playwright) suite is **blind**: routes with no test at all, and
|
|
11
13
|
flows that only assert the **happy path** while ignoring error, permission, empty, loading, and edge
|
|
12
14
|
cases. Inventory the app's routes and the existing tests, explore the running app to confirm each gap
|
|
13
|
-
is real and reachable, then
|
|
15
|
+
is real and reachable, then group worthwhile gaps into **bounded build-ready missing-test work items** so it enters the
|
|
14
16
|
Lisa lifecycle.
|
|
15
17
|
|
|
16
18
|
This skill is purely about **automated-coverage gaps**. It does not judge whether the UI is confusing
|
|
@@ -62,15 +64,18 @@ Map routes/flows against existing coverage and classify each gap:
|
|
|
62
64
|
|
|
63
65
|
### 5. Explore to Confirm
|
|
64
66
|
|
|
67
|
+
- Apply `do-it-now`'s **Worth doing** guidance: missing coverage alone is not a defect. Identify a required behavior or credible material risk; decline low-value gaps without filing and group related accepted gaps.
|
|
65
68
|
- Navigate each candidate gap in the running app to confirm it is real, reachable, and worth a test.
|
|
66
69
|
Discard gaps that aren't actually reachable or are intentionally out of scope.
|
|
67
70
|
|
|
68
|
-
### 6. File
|
|
71
|
+
### 6. File Bounded Work for Accepted Gaps
|
|
69
72
|
|
|
70
|
-
Each
|
|
73
|
+
Each accepted gap or coherent group becomes a leaf **missing-test** work item created via `lisa-tracker-write` (the
|
|
71
74
|
vendor-neutral writer — it dispatches to the configured tracker and runs the validation gate; never
|
|
72
75
|
call a vendor `*-write-*` skill directly), `issue_type: Task`, **build-ready per the `ready` flag
|
|
73
|
-
(default `true`)**.
|
|
76
|
+
(default `true`)**. For `ready=true`, pass `build_ready: true`. For `ready=false`,
|
|
77
|
+
pass `human_gate: "Coverage work explicitly held for operator prioritization"` instead.
|
|
78
|
+
Each ticket MUST specify:
|
|
74
79
|
|
|
75
80
|
- The **route/flow** and the exact **user behavior the test must assert**.
|
|
76
81
|
- **Which scenario is missing** (uncovered vs which non-happy path: error / validation / permission /
|
|
@@ -80,11 +85,18 @@ call a vendor `*-write-*` skill directly), `issue_type: Task`, **build-ready per
|
|
|
80
85
|
|
|
81
86
|
### Idempotency — don't spam duplicates
|
|
82
87
|
|
|
83
|
-
Before creating a ticket,
|
|
84
|
-
|
|
85
|
-
scenario
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
Before creating a ticket, follow `rejection-detection` — **Proposal rejection memory**:
|
|
89
|
+
use `<!-- [lisa-e2e-coverage-gaps] key=<candidate-key> -->` with the normalized route +
|
|
90
|
+
missing scenario hashed deterministically by that rule's existing formula. Search open AND
|
|
91
|
+
closed tickets, including its body-enumeration fallback for search-index lag. Match by the
|
|
92
|
+
marker for any constituent gap, never by title alone. Reuse open matches. For legacy issues
|
|
93
|
+
without a marker or with the older `[lisa-e2e-coverage-gaps] <gap-key>` slug marker, read
|
|
94
|
+
bodies and closing discussions to establish a semantic match; title similarity
|
|
95
|
+
alone is insufficient. A **Not planned** decision suppresses the same accepted
|
|
96
|
+
limitation, even when seen again later. Re-propose only for a materially changed
|
|
97
|
+
consequence, requirement, or risk that addresses the decline. A completed fix may
|
|
98
|
+
have a real regression, which must be verified before filing. Grouped work retains
|
|
99
|
+
the constituent gap markers so a later pass can find it.
|
|
88
100
|
|
|
89
101
|
## Output
|
|
90
102
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Explore gaps in the automated Playwright/e2e suite: inventory the app's routes and existing tests, find routes with no coverage or flows tested only on the happy path (missing error, permission, empty, loading, and edge cases), confirm each in the running app, and file
|
|
2
|
+
description: "Explore gaps in the automated Playwright/e2e suite: inventory the app's routes and existing tests, find routes with no coverage or flows tested only on the happy path (missing error, permission, empty, loading, and edge cases), confirm each in the running app, and file bounded build-ready work for worthwhile test gaps via lisa:tracker-write. The optional ready flag (default true) controls build-ready vs backlog. For human usability issues, use exploratory-qa instead."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
4
|
argument-hint: "[target-url | env] [ready=true|false]"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Use the /lisa-harper-fabric:e2e-coverage-gaps skill to inventory the app's routes and the existing Playwright suite, find uncovered and happy-path-only paths, confirm each gap in the running app, and file
|
|
7
|
+
Use the /lisa-harper-fabric:e2e-coverage-gaps skill to inventory the app's routes and the existing Playwright suite, find uncovered and happy-path-only paths, confirm each gap in the running app, and file bounded build-ready work for worthwhile test gaps via lisa:tracker-write (build-ready per the ready flag, default true). For human usability/experience findings, use /lisa:exploratory-qa. $ARGUMENTS
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: e2e-coverage-gaps
|
|
3
|
-
description: Playwright/e2e coverage-gap explorer that FEEDS THE LIFECYCLE. Use when asked to find paths the automated end-to-end suite does NOT cover — routes with no test at all, or flows that are only happy-path tested (missing error, validation, permission, empty, loading, and edge states). It inventories the app's routes and the existing Playwright tests, explores the running app to confirm each uncovered or under-covered path is real and reachable, and files
|
|
3
|
+
description: Playwright/e2e coverage-gap explorer that FEEDS THE LIFECYCLE. Use when asked to find paths the automated end-to-end suite does NOT cover — routes with no test at all, or flows that are only happy-path tested (missing error, validation, permission, empty, loading, and edge states). It inventories the app's routes and the existing Playwright tests, explores the running app to confirm each uncovered or under-covered path is real and reachable, and files bounded build-ready work for worthwhile test gaps via lisa-tracker-write. For human usability/experience issues (confusing, cramped, or broken UI), use the lisa-exploratory-qa skill instead.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# E2E Coverage Gaps
|
|
7
7
|
|
|
8
|
+
On runtimes without the rule tree (Antigravity), read **Worth doing** in `lisa-track` for the same value and decline policy.
|
|
9
|
+
|
|
8
10
|
## Overview
|
|
9
11
|
|
|
10
12
|
Find where the automated end-to-end (Playwright) suite is **blind**: routes with no test at all, and
|
|
11
13
|
flows that only assert the **happy path** while ignoring error, permission, empty, loading, and edge
|
|
12
14
|
cases. Inventory the app's routes and the existing tests, explore the running app to confirm each gap
|
|
13
|
-
is real and reachable, then
|
|
15
|
+
is real and reachable, then group worthwhile gaps into **bounded build-ready missing-test work items** so it enters the
|
|
14
16
|
Lisa lifecycle.
|
|
15
17
|
|
|
16
18
|
This skill is purely about **automated-coverage gaps**. It does not judge whether the UI is confusing
|
|
@@ -62,15 +64,18 @@ Map routes/flows against existing coverage and classify each gap:
|
|
|
62
64
|
|
|
63
65
|
### 5. Explore to Confirm
|
|
64
66
|
|
|
67
|
+
- Apply `do-it-now`'s **Worth doing** guidance: missing coverage alone is not a defect. Identify a required behavior or credible material risk; decline low-value gaps without filing and group related accepted gaps.
|
|
65
68
|
- Navigate each candidate gap in the running app to confirm it is real, reachable, and worth a test.
|
|
66
69
|
Discard gaps that aren't actually reachable or are intentionally out of scope.
|
|
67
70
|
|
|
68
|
-
### 6. File
|
|
71
|
+
### 6. File Bounded Work for Accepted Gaps
|
|
69
72
|
|
|
70
|
-
Each
|
|
73
|
+
Each accepted gap or coherent group becomes a leaf **missing-test** work item created via `lisa-tracker-write` (the
|
|
71
74
|
vendor-neutral writer — it dispatches to the configured tracker and runs the validation gate; never
|
|
72
75
|
call a vendor `*-write-*` skill directly), `issue_type: Task`, **build-ready per the `ready` flag
|
|
73
|
-
(default `true`)**.
|
|
76
|
+
(default `true`)**. For `ready=true`, pass `build_ready: true`. For `ready=false`,
|
|
77
|
+
pass `human_gate: "Coverage work explicitly held for operator prioritization"` instead.
|
|
78
|
+
Each ticket MUST specify:
|
|
74
79
|
|
|
75
80
|
- The **route/flow** and the exact **user behavior the test must assert**.
|
|
76
81
|
- **Which scenario is missing** (uncovered vs which non-happy path: error / validation / permission /
|
|
@@ -80,11 +85,18 @@ call a vendor `*-write-*` skill directly), `issue_type: Task`, **build-ready per
|
|
|
80
85
|
|
|
81
86
|
### Idempotency — don't spam duplicates
|
|
82
87
|
|
|
83
|
-
Before creating a ticket,
|
|
84
|
-
|
|
85
|
-
scenario
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
Before creating a ticket, follow `rejection-detection` — **Proposal rejection memory**:
|
|
89
|
+
use `<!-- [lisa-e2e-coverage-gaps] key=<candidate-key> -->` with the normalized route +
|
|
90
|
+
missing scenario hashed deterministically by that rule's existing formula. Search open AND
|
|
91
|
+
closed tickets, including its body-enumeration fallback for search-index lag. Match by the
|
|
92
|
+
marker for any constituent gap, never by title alone. Reuse open matches. For legacy issues
|
|
93
|
+
without a marker or with the older `[lisa-e2e-coverage-gaps] <gap-key>` slug marker, read
|
|
94
|
+
bodies and closing discussions to establish a semantic match; title similarity
|
|
95
|
+
alone is insufficient. A **Not planned** decision suppresses the same accepted
|
|
96
|
+
limitation, even when seen again later. Re-propose only for a materially changed
|
|
97
|
+
consequence, requirement, or risk that addresses the decline. A completed fix may
|
|
98
|
+
have a real regression, which must be verified before filing. Grouped work retains
|
|
99
|
+
the constituent gap markers so a later pass can find it.
|
|
88
100
|
|
|
89
101
|
## Output
|
|
90
102
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Explore gaps in the automated Playwright/e2e suite: inventory the app's routes and existing tests, find routes with no coverage or flows tested only on the happy path (missing error, permission, empty, loading, and edge cases), confirm each in the running app, and file
|
|
2
|
+
description: "Explore gaps in the automated Playwright/e2e suite: inventory the app's routes and existing tests, find routes with no coverage or flows tested only on the happy path (missing error, permission, empty, loading, and edge cases), confirm each in the running app, and file bounded build-ready work for worthwhile test gaps via lisa-tracker-write. The optional ready flag (default true) controls build-ready vs backlog. For human usability issues, use exploratory-qa instead."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
4
|
argument-hint: "[target-url | env] [ready=true|false]"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Use the /lisa-rails:e2e-coverage-gaps skill to inventory the app's routes and the existing Playwright suite, find uncovered and happy-path-only paths, confirm each gap in the running app, and file
|
|
7
|
+
Use the /lisa-rails:e2e-coverage-gaps skill to inventory the app's routes and the existing Playwright suite, find uncovered and happy-path-only paths, confirm each gap in the running app, and file bounded build-ready work for worthwhile test gaps via lisa-tracker-write (build-ready per the ready flag, default true). For human usability/experience findings, use /lisa:exploratory-qa. $ARGUMENTS
|