@codyswann/lisa 2.213.0 → 2.215.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +17 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +6 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +13 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +9 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +6 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +5 -5
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +15 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +7 -5
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +4 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +15 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +9 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +4 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa/rules/eager/observability-audit.md +1 -1
- package/plugins/lisa/rules/eager/verification.md +2 -1
- package/plugins/lisa/rules/reference/observability-audit.md +1 -1
- package/plugins/lisa/rules/reference/verification.md +43 -5
- package/plugins/lisa/skills/lisa-codify-verification/SKILL.md +17 -0
- package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
- package/plugins/lisa/skills/lisa-github-add-journey/SKILL.md +6 -6
- package/plugins/lisa/skills/lisa-github-journey/SKILL.md +13 -2
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +9 -2
- package/plugins/lisa/skills/lisa-implement/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-jira-add-journey/SKILL.md +6 -6
- package/plugins/lisa/skills/lisa-jira-create/SKILL.md +5 -5
- package/plugins/lisa/skills/lisa-jira-journey/SKILL.md +15 -4
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
- package/plugins/lisa/skills/lisa-linear-add-journey/SKILL.md +7 -5
- package/plugins/lisa/skills/lisa-linear-create/SKILL.md +4 -4
- package/plugins/lisa/skills/lisa-linear-journey/SKILL.md +16 -5
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +9 -2
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
- package/plugins/lisa/skills/lisa-tracker-add-journey/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-tracker-evidence/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +4 -4
- package/plugins/lisa/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-codify-verification/SKILL.md +17 -0
- package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
- package/plugins/lisa-agy/skills/lisa-github-add-journey/SKILL.md +6 -6
- package/plugins/lisa-agy/skills/lisa-github-journey/SKILL.md +13 -2
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +9 -2
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-jira-add-journey/SKILL.md +6 -6
- package/plugins/lisa-agy/skills/lisa-jira-create/SKILL.md +5 -5
- package/plugins/lisa-agy/skills/lisa-jira-journey/SKILL.md +15 -4
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
- package/plugins/lisa-agy/skills/lisa-linear-add-journey/SKILL.md +7 -5
- package/plugins/lisa-agy/skills/lisa-linear-create/SKILL.md +4 -4
- package/plugins/lisa-agy/skills/lisa-linear-journey/SKILL.md +16 -5
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +9 -2
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
- package/plugins/lisa-agy/skills/lisa-tracker-add-journey/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-tracker-evidence/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +4 -4
- package/plugins/lisa-agy/skills/lisa-verify/SKILL.md +1 -1
- 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/rules/eager/observability-audit.md +1 -1
- package/plugins/lisa-copilot/rules/eager/verification.md +2 -1
- package/plugins/lisa-copilot/rules/reference/observability-audit.md +1 -1
- package/plugins/lisa-copilot/rules/reference/verification.md +43 -5
- package/plugins/lisa-copilot/skills/lisa-codify-verification/SKILL.md +17 -0
- package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
- package/plugins/lisa-copilot/skills/lisa-github-add-journey/SKILL.md +6 -6
- package/plugins/lisa-copilot/skills/lisa-github-journey/SKILL.md +13 -2
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +9 -2
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-jira-add-journey/SKILL.md +6 -6
- package/plugins/lisa-copilot/skills/lisa-jira-create/SKILL.md +5 -5
- package/plugins/lisa-copilot/skills/lisa-jira-journey/SKILL.md +15 -4
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
- package/plugins/lisa-copilot/skills/lisa-linear-add-journey/SKILL.md +7 -5
- package/plugins/lisa-copilot/skills/lisa-linear-create/SKILL.md +4 -4
- package/plugins/lisa-copilot/skills/lisa-linear-journey/SKILL.md +16 -5
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +9 -2
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-tracker-add-journey/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-tracker-evidence/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +4 -4
- package/plugins/lisa-copilot/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/observability-audit-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/observability-audit.mdc +1 -1
- package/plugins/lisa-cursor/rules/verification-reference.mdc +43 -5
- package/plugins/lisa-cursor/rules/verification.mdc +2 -1
- package/plugins/lisa-cursor/skills/lisa-codify-verification/SKILL.md +17 -0
- package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
- package/plugins/lisa-cursor/skills/lisa-github-add-journey/SKILL.md +6 -6
- package/plugins/lisa-cursor/skills/lisa-github-journey/SKILL.md +13 -2
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +9 -2
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-jira-add-journey/SKILL.md +6 -6
- package/plugins/lisa-cursor/skills/lisa-jira-create/SKILL.md +5 -5
- package/plugins/lisa-cursor/skills/lisa-jira-journey/SKILL.md +15 -4
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
- package/plugins/lisa-cursor/skills/lisa-linear-add-journey/SKILL.md +7 -5
- package/plugins/lisa-cursor/skills/lisa-linear-create/SKILL.md +4 -4
- package/plugins/lisa-cursor/skills/lisa-linear-journey/SKILL.md +16 -5
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +9 -2
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-tracker-add-journey/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-tracker-evidence/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +4 -4
- package/plugins/lisa-cursor/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- 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-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- 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/jira-journey/SKILL.md +1 -1
- package/plugins/lisa-rails/skills/jira-journey/SKILL.md +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-agy/skills/jira-journey/SKILL.md +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/skills/jira-journey/SKILL.md +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/skills/jira-journey/SKILL.md +1 -1
- 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-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/rules/eager/observability-audit.md +1 -1
- package/plugins/src/base/rules/eager/verification.md +2 -1
- package/plugins/src/base/rules/reference/observability-audit.md +1 -1
- package/plugins/src/base/rules/reference/verification.md +43 -5
- package/plugins/src/base/skills/lisa-codify-verification/SKILL.md +17 -0
- package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
- package/plugins/src/base/skills/lisa-github-add-journey/SKILL.md +6 -6
- package/plugins/src/base/skills/lisa-github-journey/SKILL.md +13 -2
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +9 -2
- package/plugins/src/base/skills/lisa-implement/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-jira-add-journey/SKILL.md +6 -6
- package/plugins/src/base/skills/lisa-jira-create/SKILL.md +5 -5
- package/plugins/src/base/skills/lisa-jira-journey/SKILL.md +15 -4
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
- package/plugins/src/base/skills/lisa-linear-add-journey/SKILL.md +7 -5
- package/plugins/src/base/skills/lisa-linear-create/SKILL.md +4 -4
- package/plugins/src/base/skills/lisa-linear-journey/SKILL.md +16 -5
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +9 -2
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
- package/plugins/src/base/skills/lisa-tracker-add-journey/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-tracker-evidence/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +4 -4
- package/plugins/src/base/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/src/rails/skills/jira-journey/SKILL.md +1 -1
- package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +7 -3
- package/typescript/create-only/.github/workflows/claude-ci-auto-fix.yml +6 -2
- package/typescript/create-only/.github/workflows/claude-deploy-auto-fix.yml +4 -2
package/package.json
CHANGED
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"ws": ">=8.20.1"
|
|
96
96
|
},
|
|
97
97
|
"name": "@codyswann/lisa",
|
|
98
|
-
"version": "2.
|
|
98
|
+
"version": "2.215.0",
|
|
99
99
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
100
100
|
"main": "dist/index.js",
|
|
101
101
|
"exports": {
|
|
@@ -57,6 +57,7 @@ Do NOT install a new framework if one already exists for the verification type.
|
|
|
57
57
|
|---|---|
|
|
58
58
|
| UI (web) | Playwright > Cypress > Selenium |
|
|
59
59
|
| UI (mobile) | Maestro > Detox > Playwright (mobile emulation) |
|
|
60
|
+
| UI (frontend, project supports multiple runners) | **ALL supported UI runners** — see "Frontend dual-runner codification" below |
|
|
60
61
|
| API | project's integration test runner (Vitest / Jest / RSpec / pytest) with HTTP client (supertest / fetch / faraday) |
|
|
61
62
|
| Database | integration test with real DB + migrations applied |
|
|
62
63
|
| Auth | API or UI test asserting role-gated access (multi-role coverage) |
|
|
@@ -71,6 +72,20 @@ Do NOT install a new framework if one already exists for the verification type.
|
|
|
71
72
|
|
|
72
73
|
If the project lacks the preferred framework AND no acceptable substitute exists, escalate.
|
|
73
74
|
|
|
75
|
+
### 2a. Frontend dual-runner codification (non-demotable)
|
|
76
|
+
|
|
77
|
+
For **frontend work** — any verification whose validation journey exercised a user-facing UI surface — codification is not one-runner-or-the-other. After the validation journey is complete and verified, the verified behavior MUST be codified in **every UI runner the project supports**:
|
|
78
|
+
|
|
79
|
+
1. **A Playwright spec in the project's Playwright test runner** (where its web e2e tests live, e.g. `tests/e2e/**` / `e2e/**`) — required whenever the project has a Playwright (or equivalent web e2e) harness.
|
|
80
|
+
2. **A Maestro flow in the project's Maestro test runner** — required whenever the project supports Maestro. Detect support by any of: a `.maestro/` directory (flows live in `.maestro/flows/`), a `maestro:test` script in `package.json`, or a Maestro CI workflow (e.g. `maestro-native-e2e`). Wire the new flow where the runner picks it up (`maestro test .maestro/flows`), tagging per the project's tier convention (e.g. `smoke`) when one exists.
|
|
81
|
+
|
|
82
|
+
Both artifacts encode the SAME verified journey — the Playwright spec drives the web surface, the Maestro flow drives the native surface. One is not a substitute for the other: they guard different platforms of the same behavior.
|
|
83
|
+
|
|
84
|
+
Permitted exits, mirroring the regression-spec rule in `lisa-implement` (never a silent skip, never "optional"):
|
|
85
|
+
|
|
86
|
+
- The project genuinely has no runner of that kind (no web e2e harness, or no Maestro support by the detection above) → record the checked locations and the absence in the codification evidence; that runner is N/A.
|
|
87
|
+
- A runner is supported but the flow/spec cannot be added or executed in this PR (genuine technical blocker) → create a linked build-ready follow-up ticket before merge, reference it from the PR and work item, and record the blocker — the same follow-up path as the regression-spec blocker.
|
|
88
|
+
|
|
74
89
|
### 3. Generate the test
|
|
75
90
|
|
|
76
91
|
The generated test must:
|
|
@@ -103,6 +118,7 @@ requires a verification-spec delta on every behavioral change. See the
|
|
|
103
118
|
Run only the new test, using whatever per-test invocation the project supports:
|
|
104
119
|
|
|
105
120
|
- Playwright: `npx playwright test path/to/new.spec.ts`
|
|
121
|
+
- Maestro: `maestro test .maestro/flows/new-flow.yaml`
|
|
106
122
|
- Vitest: `npx vitest run path/to/new.spec.ts`
|
|
107
123
|
- Jest: `npx jest path/to/new.test.ts`
|
|
108
124
|
- RSpec: `bundle exec rspec path/to/new_spec.rb`
|
|
@@ -139,6 +155,7 @@ Append to the verification report (or PR description):
|
|
|
139
155
|
| # | Verification | Framework | Test file | Status |
|
|
140
156
|
|---|--------------|-----------|-----------|--------|
|
|
141
157
|
| 1 | <description> | Playwright | `e2e/checkout.spec.ts::displays order confirmation after checkout` | PASS |
|
|
158
|
+
| 2 | <same journey, native surface> | Maestro | `.maestro/flows/checkout-confirmation.yaml` | PASS |
|
|
142
159
|
```
|
|
143
160
|
|
|
144
161
|
This evidence shows the verification is now guarded.
|
|
@@ -36,6 +36,43 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
|
|
|
36
36
|
Resolve `<owner>/<repo>` from `gh repo view --json nameWithOwner` (or the PR URL).
|
|
37
37
|
Use plain `gh` + `git` so Claude and Codex execute identically.
|
|
38
38
|
|
|
39
|
+
## 0. Take the babysitter lease
|
|
40
|
+
|
|
41
|
+
This skill is the branch's owner while it runs. Declare that ownership so the
|
|
42
|
+
CI auto-fix workflow (`reusable-claude-ci-auto-fix.yml`) stands down instead of
|
|
43
|
+
pushing competing fixes to the same branch (the single-writer rule):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
gh label create "lisa:babysitter-on-duty" \
|
|
47
|
+
--description "A drive-pr-to-merge session is actively driving this PR; CI auto-fix must stand down" \
|
|
48
|
+
--color FBCA04 || true # tolerate only already-exists; check the next step
|
|
49
|
+
gh pr edit <pr> --add-label "lisa:babysitter-on-duty"
|
|
50
|
+
gh pr view <pr> --json labels \
|
|
51
|
+
--jq '[.labels[].name] | contains(["lisa:babysitter-on-duty"])'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Verify the final command prints `true` before driving. If the label could not
|
|
55
|
+
be attached (for example, no label-write permission), retry once; if it still
|
|
56
|
+
fails, surface a warning that the branch is unleased — the CI auto-fix
|
|
57
|
+
workflow may engage in parallel — and watch for its `claude-auto-fix-*` PR
|
|
58
|
+
per section 2f while driving.
|
|
59
|
+
|
|
60
|
+
The auto-fix workflow reads freshness from the label's most recent `labeled`
|
|
61
|
+
timeline event and treats stamps older than its TTL (default 90 minutes) as
|
|
62
|
+
stale. **Refresh the lease** whenever more than ~30 minutes have passed since
|
|
63
|
+
the last stamp while the watch loop is still running — a refresh is a
|
|
64
|
+
remove + re-add (re-adding an existing label does not create a new timeline
|
|
65
|
+
event):
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"
|
|
69
|
+
gh pr edit <pr> --add-label "lisa:babysitter-on-duty"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Release the lease** (remove the label) at every terminal state — merged,
|
|
73
|
+
closed, or a hard block handed to a human. A crashed session that never
|
|
74
|
+
releases is why the TTL exists; do not rely on it as the normal release path.
|
|
75
|
+
|
|
39
76
|
## 1. Enable auto-merge
|
|
40
77
|
|
|
41
78
|
Before enabling auto-merge, capture the live PR head and compare it to
|
|
@@ -74,7 +111,8 @@ gh pr view <pr> --json state,mergeStateStatus,mergeable,reviewDecision,statusChe
|
|
|
74
111
|
```
|
|
75
112
|
|
|
76
113
|
Handle every blocker class; after any fix, re-poll and continue. Do not stop while
|
|
77
|
-
the PR is still open and progress is possible.
|
|
114
|
+
the PR is still open and progress is possible. On each iteration, refresh the
|
|
115
|
+
babysitter lease if its last stamp is older than ~30 minutes (section 0).
|
|
78
116
|
|
|
79
117
|
In **`on_blocker=report`** mode, only the mechanical step (a) and auto-merge enabling
|
|
80
118
|
apply; for any of (b)–(e) do not act — classify the blocker and return per the input
|
|
@@ -150,6 +188,16 @@ Some org rulesets allow 0 approvals yet a bot `CHANGES_REQUESTED` still blocks
|
|
|
150
188
|
auto-merge — dismissing the stale review after resolving all threads is what
|
|
151
189
|
unblocks it.
|
|
152
190
|
|
|
191
|
+
### f. Pending auto-fix PR into this branch
|
|
192
|
+
If an open PR from `claude-auto-fix-<headRefName>` targets this PR's head
|
|
193
|
+
branch (the CI auto-fix workflow engaged before this session took the lease),
|
|
194
|
+
adjudicate it: merge it into the head branch if the fix is correct and still
|
|
195
|
+
needed, otherwise close it and delete the side branch. Never leave it dangling
|
|
196
|
+
— it represents a competing writer's pending work. Merging it mutates the
|
|
197
|
+
driven branch, so treat it like any other push: disarm auto-merge first,
|
|
198
|
+
re-read `headRefOid`, reset `verify_commit` to the merged head, wait for that
|
|
199
|
+
head's checks to start, then re-enable auto-merge (section 1).
|
|
200
|
+
|
|
153
201
|
## 3. Merge and verify it actually shipped (ancestry check)
|
|
154
202
|
|
|
155
203
|
Enabling auto-merge + green checks + resolved threads is **not** proof the merge
|
|
@@ -177,3 +225,8 @@ Loop until one of:
|
|
|
177
225
|
needs design input, or genuine unresolved human objection (not a bot gate). Stop
|
|
178
226
|
and report exactly what is blocking and what was already tried — never force the
|
|
179
227
|
merge or weaken a gate to get past it.
|
|
228
|
+
|
|
229
|
+
At every terminal state, release the babysitter lease
|
|
230
|
+
(`gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"`) so the CI
|
|
231
|
+
auto-fix workflow can take over as fixer of last resort if the branch goes
|
|
232
|
+
red later with nobody driving it.
|
|
@@ -58,7 +58,7 @@ Use Explore agents or read the codebase directly to understand which files are a
|
|
|
58
58
|
|
|
59
59
|
### Step 5: Draft the Validation Journey
|
|
60
60
|
|
|
61
|
-
Compose the journey with `[EVIDENCE: name]` markers at key verification points:
|
|
61
|
+
Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at key verification points. The type says HOW the proof is captured (`screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump` — the fixed taxonomy in the `verification` rule); the name says WHAT it proves:
|
|
62
62
|
|
|
63
63
|
```markdown
|
|
64
64
|
## Validation Journey
|
|
@@ -69,9 +69,9 @@ Compose the journey with `[EVIDENCE: name]` markers at key verification points:
|
|
|
69
69
|
### Steps
|
|
70
70
|
1. Verify current state before changes
|
|
71
71
|
2. Apply the change
|
|
72
|
-
3. Verify expected new state [EVIDENCE:
|
|
73
|
-
4. Test error/edge cases [EVIDENCE: error-
|
|
74
|
-
5. Verify rollback if applicable [EVIDENCE: rollback]
|
|
72
|
+
3. Verify expected new state [EVIDENCE: http-transcript: health-endpoint-200]
|
|
73
|
+
4. Test error/edge cases [EVIDENCE: screenshot: invalid-input-error-state]
|
|
74
|
+
5. Verify rollback if applicable [EVIDENCE: db-query-output: rows-restored-after-rollback]
|
|
75
75
|
|
|
76
76
|
### Assertions
|
|
77
77
|
- Describe what must be true after verification
|
|
@@ -82,10 +82,10 @@ Compose the journey with `[EVIDENCE: name]` markers at key verification points:
|
|
|
82
82
|
1. **2–5 evidence markers** — Focus on proving the change works and handles errors.
|
|
83
83
|
2. **Concrete, runnable steps** — `Run \`curl -s localhost:3000/health | jq .status\`` not "Check the endpoint".
|
|
84
84
|
3. **Include environment setup** — Database connection, running services, env vars.
|
|
85
|
-
4. **
|
|
85
|
+
4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
|
|
86
86
|
5. **Assertions are measurable** — `Returns 200 with {status: ok}` not "API works correctly".
|
|
87
87
|
6. **Cover happy path AND error path** — At minimum, one success and one failure marker.
|
|
88
|
-
7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every `[EVIDENCE: name]` here is the issue's evidence manifest: validation gate S14 requires at least one, and the issue cannot be closed until each named artifact is captured and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
|
|
88
|
+
7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every typed `[EVIDENCE: <artifact-type>: <name>]` here is the issue's evidence manifest: validation gate S14 requires at least one, and the issue cannot be closed until each named artifact is captured **in its declared type** and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
|
|
89
89
|
|
|
90
90
|
### Step 6: Present to User for Approval
|
|
91
91
|
|
|
@@ -51,14 +51,25 @@ Execute each step sequentially. Determine the verification approach based on the
|
|
|
51
51
|
- **Library/utility changes** → Run tests, capture output.
|
|
52
52
|
- **Security fixes** → Reproduce exploit attempt, verify fix, capture output.
|
|
53
53
|
|
|
54
|
-
At each `[EVIDENCE: name]` marker, capture
|
|
54
|
+
At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact **of the declared type** — the type is the contract, not a suggestion:
|
|
55
|
+
|
|
56
|
+
- `screenshot` / `recording` → an actual image/video file from the driven UI (Playwright, simulator), never a text description of what was seen
|
|
57
|
+
- `http-transcript` → the exact request (curl command or client call) plus the full response
|
|
58
|
+
- `cli-output` → the command plus stdout/stderr and exit code
|
|
59
|
+
- `log-snippet` → the correlated log lines pulled from the running system
|
|
60
|
+
- `db-query-output` → the query plus returned rows
|
|
61
|
+
- `perf-trace` → the benchmark/frame-timing/profiler output with methodology (device profile, dataset size)
|
|
62
|
+
- `test-run-log` → reporter output naming the spec and showing it ran and passed
|
|
63
|
+
- `deploy-log` / `state-dump` → the deployment/health-check output or observed-state JSON
|
|
64
|
+
|
|
65
|
+
A prose claim ("the error state rendered gracefully") satisfies no marker. Legacy untyped markers: infer the type from the step's action, capture accordingly, and note the inference. Write each artifact to a numbered file:
|
|
55
66
|
|
|
56
67
|
#### Evidence Naming Convention
|
|
57
68
|
|
|
58
69
|
`{NN}-{evidence-name}.txt` (or `.json` for structured data):
|
|
59
70
|
|
|
60
71
|
- `NN`: zero-padded sequential number (01, 02, 03...).
|
|
61
|
-
- `evidence-name`: the
|
|
72
|
+
- `evidence-name`: the `<name>` part of the typed marker (kebab-case).
|
|
62
73
|
|
|
63
74
|
Example:
|
|
64
75
|
|
|
@@ -196,9 +196,16 @@ An issue with zero links and no documented search: FAIL.
|
|
|
196
196
|
|
|
197
197
|
#### S14 — Evidence manifest binding (leaf work units)
|
|
198
198
|
|
|
199
|
-
When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `## Validation Journey` must declare at least one `[EVIDENCE: name]` marker.
|
|
199
|
+
When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `## Validation Journey` must declare at least one **typed** `[EVIDENCE: <artifact-type>: <name>]` marker. These markers are the work unit's **evidence manifest** — the exact, enumerated set of artifacts that must be captured and attached before the issue may be closed (see the "Per-Work-Unit Evidence Contract" section of the `verification` rule, the Definition of Done in `verification-lifecycle`, and the evidence-manifest gate in `tracker-evidence`).
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
Each marker must satisfy ALL of:
|
|
202
|
+
|
|
203
|
+
- `<artifact-type>` is one of the fixed taxonomy: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump`. (The legacy `[SCREENSHOT: name]` form is accepted as `screenshot`.)
|
|
204
|
+
- `<name>` is kebab-case and unique within the issue.
|
|
205
|
+
|
|
206
|
+
**A marker names an artifact, not an assertion.** An untyped marker (`[EVIDENCE: load-failure-handled-gracefully]`) is an assertion label with nothing to capture and must FAIL, with a remediation that shows the typed transformation (e.g. → `[EVIDENCE: screenshot: load-failure-error-state]`, `[EVIDENCE: perf-trace: pipeline-load-tti]`).
|
|
207
|
+
|
|
208
|
+
FAIL when the Validation Journey is present but declares zero markers, when any marker is untyped or uses a type outside the taxonomy, or when any name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one marker passes but the remediation should recommend adding the error/edge case.
|
|
202
209
|
|
|
203
210
|
This gate depends on S11. It is `N/A` for containers — an **Epic**, or any item with open child work (coordination containers, not work units) — and for leaf units with `runtime_behavior_change = false` (doc-only / config-only / type-only). If S11 fails because the Validation Journey is absent, S14 also FAILs (there is no manifest to bind) with remediation pointing back to `lisa-github-add-journey`.
|
|
204
211
|
|
|
@@ -115,7 +115,7 @@ IF it is a Fix (bug), execute the Reproduce sub-flow FIRST:
|
|
|
115
115
|
1. Write a simple API client and call the offending API
|
|
116
116
|
2. Start the server on localhost and use the Playwright CLI or Chrome DevTools
|
|
117
117
|
|
|
118
|
-
For any Fix flow, and for any Build flow that changes user-visible behavior, regression coverage is a required deliverable at the highest practical observation level for the reported surface. If the project has a browser, device, or end-to-end harness for that platform (for example Playwright, Maestro, Detox, Cypress, or an equivalent runtime), the task plan and definition of done MUST include a deterministic regression spec against the reported surface, using mocked or seeded data where needed. This is alongside unit or integration coverage, not a substitute for it.
|
|
118
|
+
For any Fix flow, and for any Build flow that changes user-visible behavior, regression coverage is a required deliverable at the highest practical observation level for the reported surface. If the project has a browser, device, or end-to-end harness for that platform (for example Playwright, Maestro, Detox, Cypress, or an equivalent runtime), the task plan and definition of done MUST include a deterministic regression spec against the reported surface, using mocked or seeded data where needed. This is alongside unit or integration coverage, not a substitute for it. For frontend work this deliverable is **dual-runner** whenever the project supports more than one UI runner: a Playwright spec in the Playwright test runner AND a Maestro flow in the Maestro test runner when the project supports Maestro (`.maestro/` directory, `maestro:test` script, or Maestro CI workflow) — both encoding the same verified journey; neither substitutes for the other (see "Frontend dual-runner codification" in `codify-verification`).
|
|
119
119
|
|
|
120
120
|
The team lead may not waive, defer, demote, or phrase this regression spec as "optional", "if cheap", "nice to have", or equivalent. The only permitted exits are:
|
|
121
121
|
|
|
@@ -203,7 +203,7 @@ Before shutting down the team, execute the Verify flow:
|
|
|
203
203
|
- **Human-only blocker** — an input the agent genuinely cannot obtain or produce no matter what it does: credentials, secrets, or **tool access** it does not have (AWS/CloudWatch, Figma, Jam, Sentry, SonarCloud, a database, a protected deploy target, …), or a product/design decision only a human can make. For missing tool access, follow the `tool-access-gate` rule's break-out protocol: post the "Access Needed" comment naming the exact credential/role/env var to grant and the probe that must pass — never work around the gap by substituting weaker verification, mocking the inaccessible system, or narrowing scope. Record the blocked verdict, mark it `human_needed` (the marker `repair-intake` recognizes, so it won't churn re-dispatching it), and surface or reassign to a human; do **not** fabricate a build-ready ticket, because there is no build-ready work.
|
|
204
204
|
|
|
205
205
|
Other harnesses fall back to this prose obligation.
|
|
206
|
-
3. Write the highest-practical-observation regression test encoding the verification. For user-visible bugs or user-visible Build changes with an available browser/device/e2e harness, this means a deterministic spec on the reported surface
|
|
206
|
+
3. Write the highest-practical-observation regression test encoding the verification. For user-visible bugs or user-visible Build changes with an available browser/device/e2e harness, this means a deterministic spec on the reported surface — and for frontend work, once the validation journey is verified, codification into **every supported UI runner**: a Playwright spec in the Playwright runner AND a Maestro flow when the project supports Maestro, per `codify-verification`. Prove the new spec actually executed and passed in PR CI by recording a named spec log/reporter line or equivalent execution record; green CI without that named evidence does not satisfy this step.
|
|
207
207
|
4. Record Implement usage on the originating work artifact via `lisa-usage-accounting` so the work item (or other implementation-owned artifact) gains a direct `lisa-implement` usage entry in the canonical `## Lisa Usage` section. If the parent / child graph is already known, prefer `record_and_rollup` so ancestor totals refresh in the same write; otherwise still write the direct entry, and if runtime usage is unavailable, use `source: unavailable` with nullable token/cost fields instead of skipping the row.
|
|
208
208
|
5. Commit ALL outstanding changes in logical batches on the branch (minus sensitive data/information) — not just changes made by the agent team. This includes pre-existing uncommitted changes that were on the branch before the plan started. Do NOT filter commits to only "task-related" files. If it shows up in git status, it gets committed (unless it contains secrets).
|
|
209
209
|
6. Push the changes - if any pre-push hook blocks you, create a task for the agent team to fix the error/problem whether it was pre-existing or not
|
|
@@ -68,7 +68,7 @@ Based on the change type, generate verification steps using patterns from `verfi
|
|
|
68
68
|
|
|
69
69
|
### Step 5: Draft the Validation Journey
|
|
70
70
|
|
|
71
|
-
Compose the journey with `[EVIDENCE: name]` markers at key verification points:
|
|
71
|
+
Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at key verification points. The type says HOW the proof is captured (`screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump` — the fixed taxonomy in the `verification` rule); the name says WHAT it proves:
|
|
72
72
|
|
|
73
73
|
```text
|
|
74
74
|
h2. Validation Journey
|
|
@@ -79,9 +79,9 @@ h3. Prerequisites
|
|
|
79
79
|
h3. Steps
|
|
80
80
|
1. Verify current state before changes
|
|
81
81
|
2. Apply the change
|
|
82
|
-
3. Verify expected new state [EVIDENCE:
|
|
83
|
-
4. Test error/edge cases [EVIDENCE: error-
|
|
84
|
-
5. Verify rollback if applicable [EVIDENCE: rollback]
|
|
82
|
+
3. Verify expected new state [EVIDENCE: http-transcript: health-endpoint-200]
|
|
83
|
+
4. Test error/edge cases [EVIDENCE: screenshot: invalid-input-error-state]
|
|
84
|
+
5. Verify rollback if applicable [EVIDENCE: db-query-output: rows-restored-after-rollback]
|
|
85
85
|
|
|
86
86
|
h3. Assertions
|
|
87
87
|
- Describe what must be true after verification
|
|
@@ -92,10 +92,10 @@ h3. Assertions
|
|
|
92
92
|
1. **2-5 evidence markers** — Focus on proving the change works and handles errors
|
|
93
93
|
2. **Concrete, runnable steps** — "Run `curl -s localhost:3000/health | jq .status`" not "Check the endpoint"
|
|
94
94
|
3. **Include environment setup** — Database connection, running services, env vars
|
|
95
|
-
4. **
|
|
95
|
+
4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
|
|
96
96
|
5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly"
|
|
97
97
|
6. **Cover happy path and error path** — At minimum, one success and one failure evidence marker
|
|
98
|
-
7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every `[EVIDENCE: name]` here is the ticket's evidence manifest: validation gate S14 requires at least one, and the ticket cannot be closed until each named artifact is captured and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
|
|
98
|
+
7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every typed `[EVIDENCE: <artifact-type>: <name>]` here is the ticket's evidence manifest: validation gate S14 requires at least one, and the ticket cannot be closed until each named artifact is captured **in its declared type** and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
|
|
99
99
|
|
|
100
100
|
### Step 6: Present to User for Approval
|
|
101
101
|
|
|
@@ -55,7 +55,7 @@ Skip the Validation Journey for:
|
|
|
55
55
|
|
|
56
56
|
### How to Write
|
|
57
57
|
|
|
58
|
-
Design the journey based on the **change type**. The agent executing the journey determines how to verify each step using patterns from the project's `verfication.md`. Place `[EVIDENCE: name]` markers at key verification points.
|
|
58
|
+
Design the journey based on the **change type**. The agent executing the journey determines how to verify each step using patterns from the project's `verfication.md`. Place typed `[EVIDENCE: <artifact-type>: <name>]` markers at key verification points (types: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump` — see the `verification` rule).
|
|
59
59
|
|
|
60
60
|
Add this section to the ticket description:
|
|
61
61
|
|
|
@@ -70,9 +70,9 @@ h3. Prerequisites
|
|
|
70
70
|
h3. Steps
|
|
71
71
|
1. Verify the current state before changes
|
|
72
72
|
2. Apply the change (run migration, deploy, etc.)
|
|
73
|
-
3. Verify the expected new state [EVIDENCE: state-after-change]
|
|
74
|
-
4. Test error/edge cases [EVIDENCE: error-
|
|
75
|
-
5. Verify rollback or cleanup if applicable [EVIDENCE: rollback
|
|
73
|
+
3. Verify the expected new state [EVIDENCE: http-transcript: state-after-change]
|
|
74
|
+
4. Test error/edge cases [EVIDENCE: screenshot: error-state-rendered]
|
|
75
|
+
5. Verify rollback or cleanup if applicable [EVIDENCE: db-query-output: rows-restored-after-rollback]
|
|
76
76
|
|
|
77
77
|
h3. Assertions
|
|
78
78
|
- Describe what must be true after verification
|
|
@@ -82,7 +82,7 @@ h3. Assertions
|
|
|
82
82
|
### Guidelines
|
|
83
83
|
|
|
84
84
|
1. **Steps must be concrete and verifiable** — "Run `curl -s localhost:3000/health`" not "Check the API"
|
|
85
|
-
2. **Evidence markers at verification points** — Place `[EVIDENCE: name]` at states that prove the change works.
|
|
85
|
+
2. **Evidence markers at verification points** — Place typed `[EVIDENCE: <artifact-type>: <name>]` at states that prove the change works. The type names HOW the proof is captured, the kebab-case name WHAT it proves (e.g., `[EVIDENCE: http-transcript: api-response-200]`, `[EVIDENCE: screenshot: error-state-rendered]`). An untyped assertion label like `[EVIDENCE: works-gracefully]` fails validation gate S14
|
|
86
86
|
3. **Include 2-5 evidence markers** — Enough to prove the change works across happy path and error cases
|
|
87
87
|
4. **Assertions are testable statements** — "Health check returns 200 with status ok" not "API works"
|
|
88
88
|
5. **Prerequisites include environment setup** — Database connection, env vars, running services
|
|
@@ -8,7 +8,7 @@ allowed-tools: ["Bash", "Read", "Glob", "Grep", "Skill"]
|
|
|
8
8
|
|
|
9
9
|
All Atlassian operations in this skill go through `lisa-atlassian-access`. Do not call MCP tools or `acli` directly. Note: the helper scripts (`scripts/parse-plan.py`, `scripts/jira-evidence/post-evidence.sh`) currently use direct API calls and are pending migration to route through `atlassian-access`.
|
|
10
10
|
|
|
11
|
-
Parse a JIRA ticket's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each `[EVIDENCE: name]` marker, and post to JIRA + GitHub PR.
|
|
11
|
+
Parse a JIRA ticket's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each typed `[EVIDENCE: <artifact-type>: <name>]` marker, and post to JIRA + GitHub PR.
|
|
12
12
|
|
|
13
13
|
## Arguments
|
|
14
14
|
|
|
@@ -57,14 +57,25 @@ Execute each step sequentially. For each step, determine the verification approa
|
|
|
57
57
|
- **Library/utility changes** → Run tests, capture output to `evidence/NN-name.txt`
|
|
58
58
|
- **Security fixes** → Reproduce exploit attempt, verify fix, capture output to `evidence/NN-name.txt`
|
|
59
59
|
|
|
60
|
-
At each `[EVIDENCE: name]` marker, capture
|
|
60
|
+
At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact **of the declared type** — the type is the contract, not a suggestion:
|
|
61
|
+
|
|
62
|
+
- `screenshot` / `recording` → an actual image/video file from the driven UI (Playwright, simulator), never a text description of what was seen
|
|
63
|
+
- `http-transcript` → the exact request (curl command or client call) plus the full response
|
|
64
|
+
- `cli-output` → the command plus stdout/stderr and exit code
|
|
65
|
+
- `log-snippet` → the correlated log lines pulled from the running system
|
|
66
|
+
- `db-query-output` → the query plus returned rows
|
|
67
|
+
- `perf-trace` → the benchmark/frame-timing/profiler output with methodology (device profile, dataset size)
|
|
68
|
+
- `test-run-log` → reporter output naming the spec and showing it ran and passed
|
|
69
|
+
- `deploy-log` / `state-dump` → the deployment/health-check output or observed-state JSON
|
|
70
|
+
|
|
71
|
+
A prose claim ("the error state rendered gracefully") satisfies no marker. Legacy untyped markers: infer the type from the step's action, capture accordingly, and note the inference. Write each artifact to a numbered file:
|
|
61
72
|
|
|
62
73
|
#### Evidence Naming Convention
|
|
63
74
|
|
|
64
|
-
Evidence files are named: `{NN}-{evidence-name}.
|
|
75
|
+
Evidence files are named: `{NN}-{evidence-name}.{ext}` — extension matches the declared artifact type (`.png`/`.webm` for screenshot/recording, `.txt` for transcripts/logs/output, `.json` for structured state)
|
|
65
76
|
|
|
66
77
|
- `NN`: zero-padded sequential number (01, 02, 03...)
|
|
67
|
-
- `evidence-name`: the
|
|
78
|
+
- `evidence-name`: the `<name>` part of the typed marker in the JIRA step
|
|
68
79
|
|
|
69
80
|
Example:
|
|
70
81
|
|
|
@@ -197,9 +197,16 @@ A ticket with zero links and no documented search: FAIL.
|
|
|
197
197
|
|
|
198
198
|
#### S14 — Evidence manifest binding (leaf work units)
|
|
199
199
|
|
|
200
|
-
When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `h2. Validation Journey` must declare at least one `[EVIDENCE: name]` marker.
|
|
200
|
+
When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `h2. Validation Journey` must declare at least one **typed** `[EVIDENCE: <artifact-type>: <name>]` marker. These markers are the work unit's **evidence manifest** — the exact, enumerated set of artifacts that must be captured and attached before the ticket may be marked complete (see the "Per-Work-Unit Evidence Contract" section of the `verification` rule, the Definition of Done in `verification-lifecycle`, and the evidence-manifest gate in `tracker-evidence`).
|
|
201
201
|
|
|
202
|
-
|
|
202
|
+
Each marker must satisfy ALL of:
|
|
203
|
+
|
|
204
|
+
- `<artifact-type>` is one of the fixed taxonomy: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump`. (The legacy `[SCREENSHOT: name]` form is accepted as `screenshot`.)
|
|
205
|
+
- `<name>` is kebab-case and unique within the ticket.
|
|
206
|
+
|
|
207
|
+
**A marker names an artifact, not an assertion.** An untyped marker (`[EVIDENCE: load-failure-handled-gracefully]`) is an assertion label with nothing to capture and must FAIL, with a remediation that shows the typed transformation (e.g. → `[EVIDENCE: screenshot: load-failure-error-state]`, `[EVIDENCE: perf-trace: pipeline-load-tti]`).
|
|
208
|
+
|
|
209
|
+
FAIL when the Validation Journey is present but declares zero markers, when any marker is untyped or uses a type outside the taxonomy, or when any name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one marker passes but the remediation should recommend adding the error/edge case.
|
|
203
210
|
|
|
204
211
|
This gate depends on S11. It is `N/A` for containers — an **Epic**, or any item with open child work (coordination containers, not work units) — and for leaf units with `runtime_behavior_change = false` (doc-only / config-only / type-only). If S11 fails because the Validation Journey is absent, S14 also FAILs (there is no manifest to bind) with remediation pointing back to `lisa-jira-add-journey`.
|
|
205
212
|
|
|
@@ -58,6 +58,8 @@ Use Explore agents or read the codebase to understand which files are affected a
|
|
|
58
58
|
|
|
59
59
|
Linear descriptions are markdown. Use `##` and `###` headings — not Jira wiki markup.
|
|
60
60
|
|
|
61
|
+
Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at key verification points. The type says HOW the proof is captured (`screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump` — the fixed taxonomy in the `verification` rule); the name says WHAT it proves.
|
|
62
|
+
|
|
61
63
|
```markdown
|
|
62
64
|
## Validation Journey
|
|
63
65
|
|
|
@@ -67,9 +69,9 @@ Linear descriptions are markdown. Use `##` and `###` headings — not Jira wiki
|
|
|
67
69
|
### Steps
|
|
68
70
|
1. Verify current state before changes
|
|
69
71
|
2. Apply the change
|
|
70
|
-
3. Verify expected new state [EVIDENCE:
|
|
71
|
-
4. Test error/edge cases [EVIDENCE: error-
|
|
72
|
-
5. Verify rollback if applicable [EVIDENCE: rollback]
|
|
72
|
+
3. Verify expected new state [EVIDENCE: http-transcript: health-endpoint-200]
|
|
73
|
+
4. Test error/edge cases [EVIDENCE: screenshot: invalid-input-error-state]
|
|
74
|
+
5. Verify rollback if applicable [EVIDENCE: db-query-output: rows-restored-after-rollback]
|
|
73
75
|
|
|
74
76
|
### Assertions
|
|
75
77
|
- Describe what must be true after verification
|
|
@@ -80,10 +82,10 @@ Linear descriptions are markdown. Use `##` and `###` headings — not Jira wiki
|
|
|
80
82
|
1. **2–5 evidence markers** — Focus on proving the change works and handles errors.
|
|
81
83
|
2. **Concrete, runnable steps** — `Run \`curl -s localhost:3000/health | jq .status\`` not "Check the endpoint".
|
|
82
84
|
3. **Include environment setup** — Database connection, running services, env vars.
|
|
83
|
-
4. **
|
|
85
|
+
4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
|
|
84
86
|
5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly".
|
|
85
87
|
6. **Cover happy path and error path** — At minimum, one success and one failure evidence marker.
|
|
86
|
-
7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every `[EVIDENCE: name]` here is the item's evidence manifest: validation gate S14 requires at least one, and the item cannot be closed until each named artifact is captured and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
|
|
88
|
+
7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every typed `[EVIDENCE: <artifact-type>: <name>]` here is the item's evidence manifest: validation gate S14 requires at least one, and the item cannot be closed until each named artifact is captured **in its declared type** and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
|
|
87
89
|
|
|
88
90
|
### Step 6: Present to User for Approval
|
|
89
91
|
|
|
@@ -58,7 +58,7 @@ Items that change runtime behavior should include a `## Validation Journey` sect
|
|
|
58
58
|
|
|
59
59
|
### How to Write
|
|
60
60
|
|
|
61
|
-
Design the journey based on the **change type**. Place `[EVIDENCE: name]` markers at key verification points.
|
|
61
|
+
Design the journey based on the **change type**. Place typed `[EVIDENCE: <artifact-type>: <name>]` markers at key verification points (types: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump` — see the `verification` rule).
|
|
62
62
|
|
|
63
63
|
```markdown
|
|
64
64
|
## Validation Journey
|
|
@@ -71,9 +71,9 @@ Design the journey based on the **change type**. Place `[EVIDENCE: name]` marker
|
|
|
71
71
|
### Steps
|
|
72
72
|
1. Verify the current state before changes
|
|
73
73
|
2. Apply the change (run migration, deploy, etc.)
|
|
74
|
-
3. Verify the expected new state [EVIDENCE: state-after-change]
|
|
75
|
-
4. Test error/edge cases [EVIDENCE: error-
|
|
76
|
-
5. Verify rollback or cleanup if applicable [EVIDENCE: rollback
|
|
74
|
+
3. Verify the expected new state [EVIDENCE: http-transcript: state-after-change]
|
|
75
|
+
4. Test error/edge cases [EVIDENCE: screenshot: error-state-rendered]
|
|
76
|
+
5. Verify rollback or cleanup if applicable [EVIDENCE: db-query-output: rows-restored-after-rollback]
|
|
77
77
|
|
|
78
78
|
### Assertions
|
|
79
79
|
- Describe what must be true after verification
|
|
@@ -6,7 +6,7 @@ allowed-tools: ["Bash", "Read", "Glob", "Grep", "Skill"]
|
|
|
6
6
|
|
|
7
7
|
# Linear Validation Journey
|
|
8
8
|
|
|
9
|
-
Parse a Linear Issue's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each `[EVIDENCE: name]` marker, and post to Linear + GitHub PR.
|
|
9
|
+
Parse a Linear Issue's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each typed `[EVIDENCE: <artifact-type>: <name>]` marker, and post to Linear + GitHub PR.
|
|
10
10
|
|
|
11
11
|
This skill is the destination of the `lisa-tracker-journey` shim when `tracker = "linear"`.
|
|
12
12
|
|
|
@@ -34,7 +34,7 @@ Reads `linear.workspace`, `linear.teamKey` from `.lisa.config.json` (with `.loca
|
|
|
34
34
|
Fetch the Issue via `lisa-linear-access operation: get-issue` and extract the `## Validation Journey` section from the markdown description. Parse:
|
|
35
35
|
|
|
36
36
|
- `### Prerequisites` — list of required services / env / setup
|
|
37
|
-
- `### Steps` — numbered steps, each potentially containing `[EVIDENCE: name]` markers
|
|
37
|
+
- `### Steps` — numbered steps, each potentially containing typed `[EVIDENCE: <artifact-type>: <name>]` markers
|
|
38
38
|
- `### Assertions` — what must be true after verification
|
|
39
39
|
|
|
40
40
|
If the section is missing or has no steps, report `"No Validation Journey on <IDENTIFIER>. Run /linear-add-journey first."` and stop.
|
|
@@ -61,14 +61,25 @@ Execute each step sequentially. Determine the verification approach based on the
|
|
|
61
61
|
- **Security fixes** → Reproduce exploit attempt, verify fix
|
|
62
62
|
- **UI / frontend** → Playwright browser flow, capture screenshots / DOM state
|
|
63
63
|
|
|
64
|
-
At each `[EVIDENCE: name]` marker, capture
|
|
64
|
+
At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact **of the declared type** — the type is the contract, not a suggestion:
|
|
65
|
+
|
|
66
|
+
- `screenshot` / `recording` → an actual image/video file from the driven UI (Playwright, simulator), never a text description of what was seen
|
|
67
|
+
- `http-transcript` → the exact request (curl command or client call) plus the full response
|
|
68
|
+
- `cli-output` → the command plus stdout/stderr and exit code
|
|
69
|
+
- `log-snippet` → the correlated log lines pulled from the running system
|
|
70
|
+
- `db-query-output` → the query plus returned rows
|
|
71
|
+
- `perf-trace` → the benchmark/frame-timing/profiler output with methodology (device profile, dataset size)
|
|
72
|
+
- `test-run-log` → reporter output naming the spec and showing it ran and passed
|
|
73
|
+
- `deploy-log` / `state-dump` → the deployment/health-check output or observed-state JSON
|
|
74
|
+
|
|
75
|
+
A prose claim ("the error state rendered gracefully") satisfies no marker. Legacy untyped markers: infer the type from the step's action, capture accordingly, and note the inference. Write each artifact to a numbered file:
|
|
65
76
|
|
|
66
77
|
#### Evidence Naming Convention
|
|
67
78
|
|
|
68
79
|
`{NN}-{evidence-name}.{ext}`
|
|
69
80
|
|
|
70
81
|
- `NN`: zero-padded sequential number (`01`, `02`, `03`...)
|
|
71
|
-
- `evidence-name`: the
|
|
82
|
+
- `evidence-name`: the `<name>` part of the typed marker
|
|
72
83
|
- `ext`: `.txt` for plain output, `.json` for structured data
|
|
73
84
|
|
|
74
85
|
Example:
|
|
@@ -200,9 +200,16 @@ An item with zero relations and no documented search: FAIL.
|
|
|
200
200
|
|
|
201
201
|
#### S14 — Evidence manifest binding (leaf work units)
|
|
202
202
|
|
|
203
|
-
When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `## Validation Journey` must declare at least one `[EVIDENCE: name]` marker.
|
|
203
|
+
When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `## Validation Journey` must declare at least one **typed** `[EVIDENCE: <artifact-type>: <name>]` marker. These markers are the work unit's **evidence manifest** — the exact, enumerated set of artifacts that must be captured and attached before the item may be closed (see the "Per-Work-Unit Evidence Contract" section of the `verification` rule, the Definition of Done in `verification-lifecycle`, and the evidence-manifest gate in `tracker-evidence`).
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
Each marker must satisfy ALL of:
|
|
206
|
+
|
|
207
|
+
- `<artifact-type>` is one of the fixed taxonomy: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump`. (The legacy `[SCREENSHOT: name]` form is accepted as `screenshot`.)
|
|
208
|
+
- `<name>` is kebab-case and unique within the item.
|
|
209
|
+
|
|
210
|
+
**A marker names an artifact, not an assertion.** An untyped marker (`[EVIDENCE: load-failure-handled-gracefully]`) is an assertion label with nothing to capture and must FAIL, with a remediation that shows the typed transformation (e.g. → `[EVIDENCE: screenshot: load-failure-error-state]`, `[EVIDENCE: perf-trace: pipeline-load-tti]`).
|
|
211
|
+
|
|
212
|
+
FAIL when the Validation Journey is present but declares zero markers, when any marker is untyped or uses a type outside the taxonomy, or when any name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one marker passes but the remediation should recommend adding the error/edge case.
|
|
206
213
|
|
|
207
214
|
This gate depends on S11. It is `N/A` for containers — a **Project** (the Epic equivalent), or any item with open child work (coordination containers, not work units) — and for leaf units with `runtime_behavior_change = false` (doc-only / config-only / type-only). If S11 fails because the Validation Journey is absent, S14 also FAILs (there is no manifest to bind) with remediation pointing back to `lisa-linear-add-journey`.
|
|
208
215
|
|
|
@@ -59,7 +59,7 @@ The **Rails** ops-specialist composes a different subset (`ops-run-local`, `ops-
|
|
|
59
59
|
After report, file what was found — **only when run standalone**, never under `--report-only`/`--dry-run` and never when nested inside `lisa-verify` (which passes `--report-only`):
|
|
60
60
|
|
|
61
61
|
- **Anomalies** (live signals over the conservative bar) → `Bug` leaves. **Gaps** (in-scope MISSING rubric dimensions) → `Task`/`Improvement` leaves.
|
|
62
|
-
- Every ticket is filed via the vendor-neutral `lisa-tracker-write` shim with `build_ready: true` (never a vendor write skill directly), as a **single-repo leaf** stamped `repo:<current>`, with a real three-audience description, Gherkin AC, Target Backend Environment, and a Validation Journey + `EVIDENCE
|
|
62
|
+
- Every ticket is filed via the vendor-neutral `lisa-tracker-write` shim with `build_ready: true` (never a vendor write skill directly), as a **single-repo leaf** stamped `repo:<current>`, with a real three-audience description, Gherkin AC, Target Backend Environment, and a Validation Journey + typed `[EVIDENCE: <artifact-type>: <name>]` marker (e.g. `[EVIDENCE: log-snippet: alert-cleared]`) so it passes the `tracker-validate` gates.
|
|
63
63
|
- **Idempotent:** embed the `<!-- lisa:monitor-finding: <fingerprint> -->` sentinel and search-before-create; never duplicate a live or just-resolved finding.
|
|
64
64
|
- **Capped** at `max_candidates` (default 20), `core`/high-severity first; report how many were filed vs dropped.
|
|
65
65
|
- **`--dry-run`** previews would-file tickets and creates nothing. **`--all-gaps`** widens gap filing to `recommended` tiers.
|
|
@@ -50,8 +50,8 @@ The harness performs the acceptance check in three phases:
|
|
|
50
50
|
|
|
51
51
|
Capture the harness JSON output as:
|
|
52
52
|
|
|
53
|
-
- `[EVIDENCE: marker-count-one]` from the first and second marker-count checks.
|
|
54
|
-
- `[EVIDENCE: memory-recreated-after-rerun]` from the missing-memory variant.
|
|
53
|
+
- `[EVIDENCE: cli-output: marker-count-one]` from the first and second marker-count checks.
|
|
54
|
+
- `[EVIDENCE: cli-output: memory-recreated-after-rerun]` from the missing-memory variant.
|
|
55
55
|
|
|
56
56
|
The run passes only when all reported counts are `1`, the issue URL is the same across phases, and
|
|
57
57
|
`memoryRecreated` and `memoryFieldsRecorded` are `true` when `--memory-file` is supplied.
|
|
@@ -23,5 +23,5 @@ See the `config-resolution` rule for configuration and dispatch table.
|
|
|
23
23
|
|
|
24
24
|
## Rules
|
|
25
25
|
|
|
26
|
-
- The Validation Journey content format is identical across all vendors (markdown sections with `[EVIDENCE: name]` markers). The only difference is how the section is appended — JIRA via `editJiraIssue` (Jira wiki markup), GitHub via `gh issue edit --body-file` (markdown), Linear via `save_issue` (markdown).
|
|
26
|
+
- The Validation Journey content format is identical across all vendors (markdown sections with typed `[EVIDENCE: <artifact-type>: <name>]` markers per the `verification` rule taxonomy). The only difference is how the section is appended — JIRA via `editJiraIssue` (Jira wiki markup), GitHub via `gh issue edit --body-file` (markdown), Linear via `save_issue` (markdown).
|
|
27
27
|
- If the ticket already has a Validation Journey, the vendor skill reports it and stops. This shim does not retry.
|
|
@@ -27,7 +27,7 @@ See the `config-resolution` rule for configuration and dispatch table.
|
|
|
27
27
|
- The GitHub `pr-assets` release lives on the implementation repo (the one with the PR), regardless of which tracker hosts the ticket/issue. All vendor skills upload there.
|
|
28
28
|
- Never post evidence to a different ticket than the one named — `$ARGUMENTS` is the source of truth.
|
|
29
29
|
- Never invent a verify-specific usage footer. Evidence artifact usage must flow through `lisa-usage-accounting`, preserve the canonical `## Lisa Usage` section, and surface `source: unavailable` explicitly when the runtime cannot provide trustworthy numbers.
|
|
30
|
-
- **Evidence-manifest gate (leaf work units).** Before dispatching to a vendor skill that transitions the ticket, confirm `EVIDENCE_DIR` contains a non-empty artifact for every `[EVIDENCE: name]` marker declared in the ticket's Validation Journey. If any declared marker has no captured artifact
|
|
30
|
+
- **Evidence-manifest gate (leaf work units).** Before dispatching to a vendor skill that transitions the ticket, confirm `EVIDENCE_DIR` contains a non-empty artifact **of the declared type** for every typed `[EVIDENCE: <artifact-type>: <name>]` marker declared in the ticket's Validation Journey — a `screenshot` marker needs an actual image, an `http-transcript` marker needs the request + response text, a `perf-trace` marker needs measured numbers; a prose claim satisfies nothing. If any declared marker has no captured artifact, an empty one, or one whose content/extension does not match its declared type, stop and report the offending markers by name instead of posting — a leaf work unit (Bug / Task / Sub-task / Improvement) may not advance to its review/Done state with an unsatisfied manifest (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Epics / Stories / Spikes, and leaf units without a Validation Journey, are exempt.
|
|
31
31
|
|
|
32
32
|
## UI Evidence Checklist (when work is UI-visible)
|
|
33
33
|
|