@codyswann/lisa 4.55.4 → 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/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +6 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +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 +42 -40
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/scripts/bdd/validate.mjs +84 -8
- package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +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,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
|
|
@@ -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
|
|
@@ -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
|
|
|
@@ -125,10 +125,10 @@ export function extractMarkdownLinks(text) {
|
|
|
125
125
|
return targets;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
/** Extract
|
|
128
|
+
/** Extract bare or backticked `Source: <path>.md` citations that look like wiki paths. */
|
|
129
129
|
export function extractCitations(text) {
|
|
130
130
|
const cites = [];
|
|
131
|
-
const re = /Source:\s
|
|
131
|
+
const re = /Source:\s*`?([^\s)`]+\.md)`?/g;
|
|
132
132
|
let m;
|
|
133
133
|
while ((m = re.exec(text)) !== null) {
|
|
134
134
|
const c = m[1];
|
|
@@ -125,10 +125,10 @@ export function extractMarkdownLinks(text) {
|
|
|
125
125
|
return targets;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
/** Extract
|
|
128
|
+
/** Extract bare or backticked `Source: <path>.md` citations that look like wiki paths. */
|
|
129
129
|
export function extractCitations(text) {
|
|
130
130
|
const cites = [];
|
|
131
|
-
const re = /Source:\s
|
|
131
|
+
const re = /Source:\s*`?([^\s)`]+\.md)`?/g;
|
|
132
132
|
let m;
|
|
133
133
|
while ((m = re.exec(text)) !== null) {
|
|
134
134
|
const c = m[1];
|
|
@@ -125,10 +125,10 @@ export function extractMarkdownLinks(text) {
|
|
|
125
125
|
return targets;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
/** Extract
|
|
128
|
+
/** Extract bare or backticked `Source: <path>.md` citations that look like wiki paths. */
|
|
129
129
|
export function extractCitations(text) {
|
|
130
130
|
const cites = [];
|
|
131
|
-
const re = /Source:\s
|
|
131
|
+
const re = /Source:\s*`?([^\s)`]+\.md)`?/g;
|
|
132
132
|
let m;
|
|
133
133
|
while ((m = re.exec(text)) !== null) {
|
|
134
134
|
const c = m[1];
|
|
@@ -125,10 +125,10 @@ export function extractMarkdownLinks(text) {
|
|
|
125
125
|
return targets;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
/** Extract
|
|
128
|
+
/** Extract bare or backticked `Source: <path>.md` citations that look like wiki paths. */
|
|
129
129
|
export function extractCitations(text) {
|
|
130
130
|
const cites = [];
|
|
131
|
-
const re = /Source:\s
|
|
131
|
+
const re = /Source:\s*`?([^\s)`]+\.md)`?/g;
|
|
132
132
|
let m;
|
|
133
133
|
while ((m = re.exec(text)) !== null) {
|
|
134
134
|
const c = m[1];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Run a first-time-user exploratory QA pass on any product type (DOM web app, HTTP/API backend, canvas game, CLI/library, IaC/CDK): experience the product the way a brand-new end user would by 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 is never mutated by accident, and explores through the project's personas when defined), finding anything confusing, broken, or hard to use, and filing each finding (bug or usability issue) as a tracked work item via lisa-tracker-write. Static scans, HTTP fetches, screenshots alone, or console/network checks alone are not sufficient. The optional ready flag marks tickets build-ready (auto-picked-up by lisa-intake) or leaves them in the backlog for human triage (default). For gaps in the automated test suite, use the e2e-coverage-gaps skill if your stack provides one."
|
|
2
|
+
description: "Run a first-time-user exploratory QA pass on any product type (DOM web app, HTTP/API backend, canvas game, CLI/library, IaC/CDK): experience the product the way a brand-new end user would by 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 is never mutated by accident, and explores through the project's personas when defined), finding anything confusing, broken, or hard to use, and filing each worthwhile finding (bug or usability issue) as a tracked work item via lisa-tracker-write. Static scans, HTTP fetches, screenshots alone, or console/network checks alone are not sufficient. The optional ready flag marks tickets build-ready (auto-picked-up by lisa-intake) or leaves them in the backlog for human triage (default). For gaps in the automated test suite, use the e2e-coverage-gaps skill if your stack provides one."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
4
|
argument-hint: "[target-url | env] [ready=true|false]"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Use the lisa-exploratory-qa skill to experience the product the way a brand-new first-time end user would — driving its real consumer-facing interface via the use-the-product core (product-type detection, per-environment mutation policy, and persona-lensed exploration), finding anything confusing, broken, or hard to use, and filing each finding (bugs, usability/clarity issues) as a tracked work item via lisa-tracker-write, build-ready or in triage per the ready flag (default: triage). Static scans, HTTP fetches, screenshots alone, or console/network checks alone are not enough. For automated test-coverage gaps, use the e2e-coverage-gaps skill if your stack provides one. $ARGUMENTS
|
|
7
|
+
Use the lisa-exploratory-qa skill to experience the product the way a brand-new first-time end user would — driving its real consumer-facing interface via the use-the-product core (product-type detection, per-environment mutation policy, and persona-lensed exploration), finding anything confusing, broken, or hard to use, and filing each worthwhile finding (bugs, usability/clarity issues) as a tracked work item via lisa-tracker-write, build-ready or in triage per the ready flag (default: triage). Static scans, HTTP fetches, screenshots alone, or console/network checks alone are not enough. For automated test-coverage gaps, use the e2e-coverage-gaps skill if your stack provides one. $ARGUMENTS
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Do It Now (load-bearing)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Finish authorized, worthwhile work in this session. Lisa exists to help projects ship dependable software with less effort; more tickets, rules, or checks are not progress by themselves.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Before turning an incidental finding into work, apply `do-it-now`'s **Worth doing** guidance. Act on concrete delivery failures, credible material security or data-loss risks, and recurring friction whose repair is worth its cost. Prefer the smallest sufficient fix, including simplifying or removing redundant machinery while preserving required behavior.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**Decline unnecessary work.** Cosmetic preferences, speculative edge cases, and already adequate behavior need no ticket, new rule, or human approval. Briefly state the reason in the current report or discussion when relevant. A complete specification establishes buildability, not value. Group related small repairs into one bounded maintenance task when worthwhile.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Complete the accepted scope; don't manufacture follow-ups. Human decisions and protected actions still wait at their exterior gate. Do the authorized preparation and explain what remains.
|
|
10
10
|
|
|
11
|
-
Full
|
|
11
|
+
Full guidance: [reference/do-it-now.md](../reference/do-it-now.md).
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Tracked Work
|
|
2
2
|
|
|
3
|
+
Apply `do-it-now` before creating work from incidental findings. Declining an observation needs no new ticket. Related small accepted repairs may share one bounded maintenance leaf; traceability does not require a separate item for every nit.
|
|
4
|
+
|
|
3
5
|
Before the first durable project mutation (code, tests, config, docs, committed research/plans/findings, commits, or PRs), establish exactly one live tracker leaf through `lisa-track`. Read-only discussion and orientation are exempt only while they produce no durable artifact.
|
|
4
6
|
|
|
5
7
|
The mandatory order is: live-validate an explicit ref, or conservatively search and create exactly one valid leaf through `lisa-tracker-write` when no unique match exists; idempotently claim it through `lisa-tracker-claim`; then persist and verify the worktree-local binding with `node scripts/lisa-work-item.mjs link <ref>`. A tracker that answers no, and any claim or binding failure, blocks durable work; a tracker that cannot be reached does not block a commit — the offline checks still run, the skip is loud on stderr, and the required `Work-Item Traceability` check re-runs the live checks with credentials before anything merges.
|
|
@@ -1,25 +1,14 @@
|
|
|
1
1
|
# Upstream To Lisa (load-bearing)
|
|
2
2
|
|
|
3
|
-
When
|
|
3
|
+
When a worthwhile fix belongs to a Lisa-distributed template, rule, skill, agent, hook, or CI workflow, fix its source upstream so other projects benefit. Apply `do-it-now`'s **Worth doing** guidance first: Lisa ownership determines where accepted work belongs, not whether every imperfection deserves a ticket.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
For an accepted defect:
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
1. Apply the smallest safe local stopgap if needed to unblock the current task.
|
|
8
|
+
2. Search open and closed Lisa issues. Reuse a matching open issue. Honor **Not planned** decisions under `rejection-detection` before filing the concrete consequence and smallest durable fix; do not refile an accepted limitation.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
For **copy-overwrite** files, a local fix may be overwritten on the next `lisa apply`. For **create-only** templates, the local fix survives, but new projects still inherit the source defect. Both can justify an upstream fix; neither bypasses the value decision.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
2. **File an upstream issue in the Lisa repository.** Use the `github-write-issue` skill (`lisa-github-write-issue`) to create an issue **in Lisa's source repo `CodySwannGT/lisa`** (pass it as the target repo, e.g. `gh ... --repo CodySwannGT/lisa`) — **not** in this project's own repo. Capture: the root cause, the symptom you hit here, and the proposed durable fix in Lisa's templates/rules/skills.
|
|
12
|
+
Decline low-value observations without filing or escalating them. Group related small worthwhile repairs when appropriate. Do not add permanent machinery merely because an enforcement gap can be described.
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- Do **not** only fix it locally and move on — even when a create-only local fix survives, the broken template keeps shipping to every new repo until it is fixed upstream.
|
|
18
|
-
- Do **not** try to edit Lisa's templates from inside this project — you are not in the Lisa repo; those edits don't exist upstream and get overwritten.
|
|
19
|
-
- Do **not** file the issue in this project's repo — it must land in `CodySwannGT/lisa`.
|
|
20
|
-
|
|
21
|
-
If you lack access to file an issue in `CodySwannGT/lisa`, surface that to the user with the proposed issue contents rather than silently dropping it.
|
|
22
|
-
|
|
23
|
-
> Not applicable when you are already working **inside the Lisa repo itself** — there the fix is local, so just make it directly.
|
|
24
|
-
|
|
25
|
-
Full procedure: [reference/upstream-to-lisa.md](../reference/upstream-to-lisa.md).
|
|
14
|
+
Inside Lisa, repair the shared source and regenerate the equivalent agent surfaces. Full procedure: [reference/upstream-to-lisa.md](../reference/upstream-to-lisa.md).
|
|
@@ -41,6 +41,10 @@ Two guards that run when build-intake claims a ready item. Both come from acmeor
|
|
|
41
41
|
|
|
42
42
|
It is a **single vendor-neutral contract** consumed by all three build-intake skills (`lisa-github-build-intake`, `lisa-jira-build-intake`, `lisa-linear-build-intake`). Each arm cites this slug in its claim step rather than growing its own copy, exactly as the arms cite `leaf-only-lifecycle`, `repo-scope-split`, `rejection-detection`, and `claim-archaeology`. One slug is what keeps a guard that fires on GitHub from being absent on Linear.
|
|
43
43
|
|
|
44
|
+
## Value before claim
|
|
45
|
+
|
|
46
|
+
After respecting human holds and resolving the issue's scope, apply `do-it-now`'s **Worth doing** guidance before claiming agent-proposed incidental work. Read current discussion, linked PRs, and dependencies. Decline low-value work as **Not planned** with a specific reason and remove active lifecycle labels; do not convert it to completed work or manufacture a replacement task. Retain explicit user commitments and meaningful delivery/safety defects. A decline is a processed disposition within the existing cycle limit, not permission to start an extra item.
|
|
47
|
+
|
|
44
48
|
## Sequencing
|
|
45
49
|
|
|
46
50
|
The shared claim phase is `3a.0` repo-scope gate → `3a` leaf-only claim gate → `3b` Claim → `3c` run lifecycle → `3d` transition to done. Inside `3b`, the pre-transition window now runs four passes in a fixed order:
|
|
@@ -1,37 +1,19 @@
|
|
|
1
1
|
# Do It Now
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Lisa helps projects ship dependable software with less effort. Finish authorized, worthwhile work instead of leaving an unowned promise. This instruction does not turn every imperfection into an obligation.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Worth doing
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Read **Worth doing** in the `lisa-track` skill for the shared value decision and preference for less machinery. That existing skill is the portable home: Antigravity does not receive the rule tree, but does receive skills. This rule's eager summary and every incidental filing/intake path point to the same guidance.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Complete the accepted work
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Once scope and value are established, do the permitted work now: fix the defect, update documentation made wrong by the change, remove temporary scaffolding, and verify the result. Do not leave an accepted action as a vague follow-up. If worthwhile work must be deferred because it exceeds scope or depends on another change, track the smallest coherent outcome and give the reason.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Protected deployments, held PRDs, and unresolved product decisions still wait outside the factory. Prepare the authorized portion and explain what remains. Routine decisions to decline low-value incidental work belong to the agent; do not send every nit to a human.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
- Adding the lint rule, ast-grep pattern, or test that prevents the recurrence (`promotion-contract` — and note that promotion is atomic: enable the control, fix the existing violations, ship the diagnostic, delete the superseded prose).
|
|
17
|
-
- Fixing the flaky test rather than re-running it.
|
|
18
|
-
- Updating the doc, comment, or rule your change just made wrong (`stale-state-claims`).
|
|
19
|
-
- Cleaning up the scaffolding you introduced.
|
|
15
|
+
## Existing backlog
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
Read the issue, current discussion, linked PRs, and dependencies before deciding. A ready label or an agent's prior filing is not proof of value. For an incidental improvement that does not clear the bar, close as **Not planned** (the configured equivalent on Jira/Linear), record a short specific reason, and remove active lifecycle labels. Do not mark declined work completed or implemented. Preserve explicit human holds and committed product scope; if cancellation would affect an active PR or a dependent delivery item, resolve that relationship before closing.
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
The exception is narrower than it first appears, because it applies to the **gated step**, not to the whole item. Do everything up to the gate now:
|
|
26
|
-
|
|
27
|
-
1. Do the allowed part — file it, write it, prepare it, get it to the edge of the gate.
|
|
28
|
-
2. Mark the gate explicitly, in the tracker, so it is visible outside your session.
|
|
29
|
-
3. Say plainly, in your update, what is waiting on a human and what will happen once they act.
|
|
30
|
-
|
|
31
|
-
"Waiting on a human" is a state you report, never a place you leave work silently.
|
|
32
|
-
|
|
33
|
-
## Deferring is a decision
|
|
34
|
-
|
|
35
|
-
Sometimes not doing it now is genuinely right: the change is out of scope, it would balloon the diff past reviewability, it depends on a decision not yet made, or it belongs to a different work item. Those are legitimate — and they are **decisions**, which means they get said out loud with a reason, and the deferred item becomes tracked work rather than a sentence.
|
|
36
|
-
|
|
37
|
-
What is never acceptable is the implied deferral: noticing, saying nothing, and moving on. The human cannot act on what you did not tell them, and neither can the next session.
|
|
19
|
+
Before re-filing, consult `rejection-detection`'s **Proposal rejection memory**, including legacy issues without markers. Repeating an accepted limitation is not new evidence that warrants reversing a decline.
|
|
@@ -115,10 +115,10 @@ A manual re-run next week must not duplicate last week's tickets. Mirror the `re
|
|
|
115
115
|
- Gap: the literal `gap:<dimension>:<CURRENT_REPO>` (a dimension is missing-or-not; no hash needed).
|
|
116
116
|
2. **Sentinel in the body.** Embed `<!-- lisa:monitor-finding: <fingerprint> -->` in every filed ticket.
|
|
117
117
|
3. **Search before create** (this IS gate S13). Before filing, search the tracker for the fingerprint string. The search **MUST include closed/resolved tickets** (`gh issue list --search <fp> --state all` for GitHub; JQL with no status filter for JIRA; all states for Linear) — otherwise a just-closed match is invisible and the backoff and decline checks below can't fire. If an **open** ticket carries the fingerprint → skip (optionally link). Otherwise classify a closed match by **how** it closed:
|
|
118
|
-
- **Closed as _not planned_ — a permanent decline** (`rejection-detection` **Proposal rejection memory**). GitHub `stateReason == "not_planned"`; the config-resolved won't-do/canceled equivalent on JIRA/Linear (never a hardcoded lane string). This is a durable human "no", not a time-boxed guard: **suppress the finding regardless of age**, and re-file only with evidence that **postdates the decline
|
|
118
|
+
- **Closed as _not planned_ — a permanent decline** (`rejection-detection` **Proposal rejection memory**). GitHub `stateReason == "not_planned"`; the config-resolved won't-do/canceled equivalent on JIRA/Linear (never a hardcoded lane string). This is a durable human "no", not a time-boxed guard: **suppress the finding regardless of age**, and re-file only with evidence that **postdates the decline** and establishes a materially changed consequence, requirement, or risk addressing the recorded reason. Seeing the same accepted limitation on a later date is insufficient. The new ticket MUST carry BOTH the machine token (`declined <date>; recurred <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>.`). This layers *on top of* the backoff below — a not_planned close outlives any window.
|
|
119
119
|
- **Closed as _completed_ within the recently-resolved backoff window** (`monitor.backoffHours`, default **24h** — matching the 24h Sentry event window; this is **not** the 2h `intake.repair.staleAfterHours`) → skip, to avoid re-filing a just-fixed regression before its signal has drained. A completed close **older** than the window is not a decline — a genuine recurrence is a regression and may file.
|
|
120
120
|
|
|
121
|
-
Only file when no live match
|
|
121
|
+
Only file when no live match or recently-resolved completed match exists, and any prior not_planned decline meets the evidence and acknowledgment requirements above.
|
|
122
122
|
|
|
123
123
|
## The cap
|
|
124
124
|
|