@codyswann/lisa 2.223.0 → 2.223.2
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-github-add-journey/SKILL.md +12 -11
- package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +11 -9
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +10 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +2 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +2 -0
- package/plugins/lisa/rules/eager/verification.md +1 -1
- package/plugins/lisa/rules/reference/verification.md +14 -8
- package/plugins/lisa/skills/lisa-github-add-journey/SKILL.md +12 -11
- package/plugins/lisa/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-github-journey/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-jira-add-journey/SKILL.md +11 -9
- package/plugins/lisa/skills/lisa-jira-create/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
- package/plugins/lisa/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-linear-add-journey/SKILL.md +10 -10
- package/plugins/lisa/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-tracker-add-journey/SKILL.md +2 -1
- package/plugins/lisa/skills/lisa-tracker-evidence/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +2 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-github-add-journey/SKILL.md +12 -11
- package/plugins/lisa-agy/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-github-journey/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-jira-add-journey/SKILL.md +11 -9
- package/plugins/lisa-agy/skills/lisa-jira-create/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
- package/plugins/lisa-agy/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-linear-add-journey/SKILL.md +10 -10
- package/plugins/lisa-agy/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-tracker-add-journey/SKILL.md +2 -1
- package/plugins/lisa-agy/skills/lisa-tracker-evidence/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +2 -0
- 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/verification.md +1 -1
- package/plugins/lisa-copilot/rules/reference/verification.md +14 -8
- package/plugins/lisa-copilot/skills/lisa-github-add-journey/SKILL.md +12 -11
- package/plugins/lisa-copilot/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-github-journey/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-jira-add-journey/SKILL.md +11 -9
- package/plugins/lisa-copilot/skills/lisa-jira-create/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
- package/plugins/lisa-copilot/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-linear-add-journey/SKILL.md +10 -10
- package/plugins/lisa-copilot/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-tracker-add-journey/SKILL.md +2 -1
- package/plugins/lisa-copilot/skills/lisa-tracker-evidence/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +2 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/verification-reference.mdc +14 -8
- package/plugins/lisa-cursor/rules/verification.mdc +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-add-journey/SKILL.md +12 -11
- package/plugins/lisa-cursor/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-github-journey/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-jira-add-journey/SKILL.md +11 -9
- package/plugins/lisa-cursor/skills/lisa-jira-create/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
- package/plugins/lisa-cursor/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-linear-add-journey/SKILL.md +10 -10
- package/plugins/lisa-cursor/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-tracker-add-journey/SKILL.md +2 -1
- package/plugins/lisa-cursor/skills/lisa-tracker-evidence/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +2 -0
- 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-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +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/verification.md +1 -1
- package/plugins/src/base/rules/reference/verification.md +14 -8
- package/plugins/src/base/skills/lisa-github-add-journey/SKILL.md +12 -11
- package/plugins/src/base/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-github-journey/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-jira-add-journey/SKILL.md +11 -9
- package/plugins/src/base/skills/lisa-jira-create/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
- package/plugins/src/base/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-linear-add-journey/SKILL.md +10 -10
- package/plugins/src/base/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-tracker-add-journey/SKILL.md +2 -1
- package/plugins/src/base/skills/lisa-tracker-evidence/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +2 -0
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"form-data": ">=4.0.6"
|
|
103
103
|
},
|
|
104
104
|
"name": "@codyswann/lisa",
|
|
105
|
-
"version": "2.223.
|
|
105
|
+
"version": "2.223.2",
|
|
106
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
107
107
|
"main": "dist/index.js",
|
|
108
108
|
"exports": {
|
|
@@ -30,7 +30,7 @@ Extract: title, body, type (from `type:` label), components (from `component:` l
|
|
|
30
30
|
|
|
31
31
|
### Step 2: Check for Existing Journey
|
|
32
32
|
|
|
33
|
-
Parse the body for an existing `## Validation Journey` heading.
|
|
33
|
+
Parse the body for an existing `## Validation Journey` heading. It counts as complete only when the section contains at least one local typed `[EVIDENCE: <artifact-type>: <name>]` marker. An `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is a non-claiming pointer and does not count; if references are present without a local claiming marker, continue drafting the missing local journey evidence instead of stopping.
|
|
34
34
|
|
|
35
35
|
### Step 3: Analyze the Change Type
|
|
36
36
|
|
|
@@ -82,31 +82,32 @@ Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at
|
|
|
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. **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
|
-
5. **
|
|
87
|
-
6. **
|
|
88
|
-
7. **
|
|
89
|
-
8. **
|
|
85
|
+
4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-case-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
|
+
5. **Assertions are measurable** — `Returns 200 with {status: ok}` not "API works correctly".
|
|
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 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
|
+
8. **Reference sibling evidence without claiming it** — Use only `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` when prose points to an artifact declared by another issue. Never paste, quote, or code-format the sibling's `[EVIDENCE: ...]` marker: that exact prefix creates a local obligation. `EVIDENCE-REF` never satisfies this issue's S14 minimum, uniqueness check, capture list, or completion gate; a runtime-changing leaf still needs at least one local `[EVIDENCE: ...]` marker.
|
|
90
90
|
|
|
91
91
|
### Step 6: Present to User for Approval
|
|
92
92
|
|
|
93
|
-
Display the drafted Validation Journey and ask for confirmation before
|
|
93
|
+
Display the drafted Validation Journey change and ask for confirmation before updating the issue body. (If invoked from a parent skill running unattended — e.g., `lisa-github-write-issue` Phase 6 step 5 — proceed without the prompt.)
|
|
94
94
|
|
|
95
|
-
### Step 7:
|
|
95
|
+
### Step 7: Merge into Issue Body
|
|
96
96
|
|
|
97
97
|
After approval:
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
current_body=$(gh issue view <number> --repo <org>/<repo> --json body --jq '.body')
|
|
101
|
-
#
|
|
101
|
+
# If no journey exists, append one section. If one exists without a local marker,
|
|
102
|
+
# merge the missing local steps/markers inside that section.
|
|
102
103
|
gh issue edit <number> --repo <org>/<repo> --body-file /tmp/updated-body.md
|
|
103
104
|
```
|
|
104
105
|
|
|
105
|
-
Preserve every other section verbatim — never re-render the body from parsed fields, since the issue may carry `extra_sections` we don't recognize.
|
|
106
|
+
When repairing a reference-only journey, preserve all of its existing prose and `EVIDENCE-REF` pointers and append only the missing local steps/markers inside the existing section. Never create a second `## Validation Journey` heading. Preserve every other section verbatim — never re-render the body from parsed fields, since the issue may carry `extra_sections` we don't recognize.
|
|
106
107
|
|
|
107
108
|
### Step 8: Verify
|
|
108
109
|
|
|
109
|
-
Re-read the issue and confirm the `## Validation Journey` section is present and includes at least one `[EVIDENCE: <name>]` marker.
|
|
110
|
+
Re-read the issue and confirm the `## Validation Journey` section is present and includes at least one local `[EVIDENCE: <artifact-type>: <name>]` marker. An `EVIDENCE-REF` alone does not count.
|
|
110
111
|
|
|
111
112
|
## When to Use This Skill
|
|
112
113
|
|
|
@@ -36,6 +36,8 @@ Analyze the provided file(s) and plan a GitHub Issue hierarchy. **This skill pla
|
|
|
36
36
|
|
|
37
37
|
Issues that change runtime behavior should include a `## Validation Journey` section. This section is consumed by `lisa-github-journey` to automate verification. Use `lisa-github-add-journey` to draft + append the section after creation.
|
|
38
38
|
|
|
39
|
+
When the issue needs to point at evidence owned by another work item, pass the exact non-claiming form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` to the writer. Never quote the sibling's `[EVIDENCE: ...]` marker. A reference is informational only and does not replace the runtime-changing leaf's own S14 evidence marker.
|
|
40
|
+
|
|
39
41
|
## Source Artifacts
|
|
40
42
|
|
|
41
43
|
If `$ARGUMENTS` references any external artifact — PRD, design doc, Figma URL, Lovable prototype, Loom walkthrough, screenshot, example payload — those references MUST be preserved as `## Links` and `## Source Artifacts` sections on the created issues. Silent artifact loss is the single most common quality failure in this pipeline.
|
|
@@ -6,7 +6,7 @@ allowed-tools: ["Bash", "Read", "Glob", "Grep", "Skill"]
|
|
|
6
6
|
|
|
7
7
|
# GitHub Validation Journey
|
|
8
8
|
|
|
9
|
-
Parse a GitHub 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 the issue + GitHub PR.
|
|
9
|
+
Parse a GitHub Issue's Validation Journey, execute the verification steps using the appropriate tools for the change type, capture evidence at each canonical `[EVIDENCE: <artifact-type>: <name>]` marker (while still accepting the documented legacy untyped form), and post to the issue + GitHub PR.
|
|
10
10
|
|
|
11
11
|
## Arguments
|
|
12
12
|
|
|
@@ -64,6 +64,8 @@ At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact
|
|
|
64
64
|
|
|
65
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:
|
|
66
66
|
|
|
67
|
+
Treat only exact `[EVIDENCE: ...]` markers (plus the legacy local `[SCREENSHOT: ...]` form) as capture instructions. Both the canonical `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` and the Lisa 2.223.0 legacy alias `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` point to another work item's artifact: preserve either as explanatory text, but do not capture it, assign it a sequence number, include it in duplicate-name checks, or count it as a local manifest entry. If a runtime-changing leaf has references but no local claiming marker, stop because S14 is unsatisfied.
|
|
68
|
+
|
|
67
69
|
#### Evidence Naming Convention
|
|
68
70
|
|
|
69
71
|
`{NN}-{evidence-name}.txt` (or `.json` for structured data):
|
|
@@ -205,12 +205,12 @@ Each marker must satisfy ALL of:
|
|
|
205
205
|
- `<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`.)
|
|
206
206
|
- `<name>` is kebab-case and unique within the issue.
|
|
207
207
|
|
|
208
|
-
Non-binding cross-references use `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <name>]`, where `<tracker-ref>` is the owning issue (`#123`, `owner/repo#123`, or a GitHub issue URL). S14 MUST ignore `EVIDENCE-REF` markers when deriving this issue's manifest, and a valid `EVIDENCE-REF` does not satisfy the "at least one marker" requirement. Agents must use `EVIDENCE-REF` instead of quoting a sibling issue's `[EVIDENCE: ...]` marker in prose.
|
|
209
|
-
|
|
210
208
|
**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
209
|
|
|
212
210
|
FAIL when the Validation Journey is present but declares zero binding `[EVIDENCE: ...]` markers, when any binding marker is untyped or uses a type outside the taxonomy, or when any binding 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 binding marker passes but the remediation should recommend adding the error/edge case.
|
|
213
211
|
|
|
212
|
+
Parse claiming markers by the exact `[EVIDENCE:` prefix. A cross-work-item pointer in the canonical form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is non-claiming. The Lisa 2.223.0 form `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` is also accepted as a legacy non-claiming alias; parse it from the right so the final two fields are type/name and a tracker URL may contain `:`. Exclude both forms from the manifest, S14's minimum-marker count, local marker type/name validation, and duplicate-name checks. Independently validate every `EVIDENCE-REF`: the native work-item reference must be non-empty and unambiguous, the artifact type must use the fixed taxonomy, and the name must be non-empty kebab-case. A malformed reference FAILs S14 as an invalid pointer but never becomes a local evidence obligation. A valid canonical or legacy reference may point to a sibling's artifact, but it never satisfies S14 for this issue. Therefore a runtime-changing leaf whose journey contains only `EVIDENCE-REF` entries FAILs S14 for zero local claiming markers, not because a valid legacy reference is malformed. Quoting or code-formatting another issue's `[EVIDENCE: ...]` marker does not make it a reference; writers must convert it to the canonical pipe form.
|
|
213
|
+
|
|
214
214
|
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`.
|
|
215
215
|
|
|
216
216
|
#### S15 — Leaf-only build-ready
|
|
@@ -126,7 +126,9 @@ Scenario: <name>
|
|
|
126
126
|
|
|
127
127
|
## Validation Journey
|
|
128
128
|
[Delegate to /github-add-journey if the issue changes runtime behavior.
|
|
129
|
-
Skip only for doc-only, config-only, or type-only issues.
|
|
129
|
+
Skip only for doc-only, config-only, or type-only issues. Cross-work-item
|
|
130
|
+
evidence pointers use `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`;
|
|
131
|
+
they never replace this issue's local S14 marker.]
|
|
130
132
|
```
|
|
131
133
|
|
|
132
134
|
Rules:
|
|
@@ -38,7 +38,7 @@ Run the parser to see if a Validation Journey already exists:
|
|
|
38
38
|
python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID> 2>&1
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
If the parser succeeds and returns steps, the
|
|
41
|
+
If the parser succeeds and returns steps, inspect the journey source for at least one local typed `[EVIDENCE: <artifact-type>: <name>]` marker. Stop only when that local marker exists. An `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is a non-claiming pointer and does not count; if the journey has references but no local claiming marker, continue drafting the missing local journey evidence.
|
|
42
42
|
|
|
43
43
|
### Step 3: Analyze the Change Type
|
|
44
44
|
|
|
@@ -92,19 +92,19 @@ 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. **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
|
-
5. **
|
|
97
|
-
6. **
|
|
98
|
-
7. **
|
|
99
|
-
8. **
|
|
95
|
+
4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-case-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
|
+
5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly"
|
|
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 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
|
+
8. **Reference sibling evidence without claiming it** — Use only `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` when prose points to an artifact declared by another ticket. Never paste, quote, or code-format the sibling's `[EVIDENCE: ...]` marker: that exact prefix creates a local obligation. `EVIDENCE-REF` never satisfies this ticket's S14 minimum, uniqueness check, capture list, or completion gate; a runtime-changing leaf still needs at least one local `[EVIDENCE: ...]` marker.
|
|
100
100
|
|
|
101
101
|
### Step 6: Present to User for Approval
|
|
102
102
|
|
|
103
|
-
Display the drafted Validation Journey to the user and ask for confirmation before
|
|
103
|
+
Display the drafted Validation Journey change to the user and ask for confirmation before updating the ticket.
|
|
104
104
|
|
|
105
|
-
### Step 7:
|
|
105
|
+
### Step 7: Merge into Ticket Description
|
|
106
106
|
|
|
107
|
-
After user approval, use the JIRA REST API to append the Validation Journey
|
|
107
|
+
After user approval, use the JIRA REST API to update the ticket description. If no journey exists, append one section. If a reference-only journey exists, preserve all existing prose and `EVIDENCE-REF` pointers and append only the missing local steps/markers inside that existing section. Never create a second `Validation Journey` heading; the parser selects the existing section and duplicate headings make S14 evaluation ambiguous.
|
|
108
108
|
|
|
109
109
|
### Step 8: Verify
|
|
110
110
|
|
|
@@ -114,6 +114,8 @@ Run the parser again to confirm the journey was added correctly:
|
|
|
114
114
|
python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID>
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
+
Confirm the journey has at least one local `[EVIDENCE: <artifact-type>: <name>]` marker. An `EVIDENCE-REF` alone does not count.
|
|
118
|
+
|
|
117
119
|
## When to Use This Skill
|
|
118
120
|
|
|
119
121
|
- Ticket was created before the Validation Journey convention was established
|
|
@@ -83,6 +83,7 @@ h3. Assertions
|
|
|
83
83
|
|
|
84
84
|
1. **Steps must be concrete and verifiable** — "Run `curl -s localhost:3000/health`" not "Check the API"
|
|
85
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
|
+
- To point at evidence owned by another work item, use exactly `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. It is non-claiming and cannot satisfy S14; never paste or quote the sibling's `[EVIDENCE: ...]` marker into this ticket.
|
|
86
87
|
3. **Include 2-5 evidence markers** — Enough to prove the change works across happy path and error cases
|
|
87
88
|
4. **Assertions are testable statements** — "Health check returns 200 with status ok" not "API works"
|
|
88
89
|
5. **Prerequisites include environment setup** — Database connection, env vars, running services
|
|
@@ -70,6 +70,8 @@ At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact
|
|
|
70
70
|
|
|
71
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:
|
|
72
72
|
|
|
73
|
+
Treat only exact `[EVIDENCE: ...]` markers (plus the legacy local `[SCREENSHOT: ...]` form) as capture instructions. Both the canonical `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` and the Lisa 2.223.0 legacy alias `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` point to another work item's artifact: preserve either as explanatory text, but do not capture it, assign it a sequence number, include it in duplicate-name checks, or count it as a local manifest entry. If a runtime-changing leaf has references but no local claiming marker, stop because S14 is unsatisfied.
|
|
74
|
+
|
|
73
75
|
#### Evidence Naming Convention
|
|
74
76
|
|
|
75
77
|
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)
|
|
@@ -21,6 +21,12 @@ import sys
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
# Strip local capture claims from rendered step prose. EVIDENCE-REF is a
|
|
25
|
+
# cross-work-item pointer, so it must remain visible in both JIRA and GitHub
|
|
26
|
+
# evidence comments.
|
|
27
|
+
LOCAL_EVIDENCE_PATTERN = re.compile(r'\s*\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]')
|
|
28
|
+
|
|
29
|
+
|
|
24
30
|
def get_jira_server():
|
|
25
31
|
"""Read JIRA server URL from jira-cli config."""
|
|
26
32
|
config_path = Path.home() / ".config" / ".jira" / ".config.yml"
|
|
@@ -115,7 +121,7 @@ def generate_jira_wiki(ticket_id, pr_number, branch, evidence_files, journey, gh
|
|
|
115
121
|
lines.append("")
|
|
116
122
|
for step in journey["steps"]:
|
|
117
123
|
text = step["text"]
|
|
118
|
-
clean_text =
|
|
124
|
+
clean_text = LOCAL_EVIDENCE_PATTERN.sub('', text).strip()
|
|
119
125
|
lines.append(f"# {clean_text}")
|
|
120
126
|
lines.append("")
|
|
121
127
|
|
|
@@ -175,7 +181,7 @@ def generate_github_md(ticket_id, pr_number, branch, evidence_files, journey, gh
|
|
|
175
181
|
lines.append("")
|
|
176
182
|
for step in journey["steps"]:
|
|
177
183
|
text = step["text"]
|
|
178
|
-
clean_text =
|
|
184
|
+
clean_text = LOCAL_EVIDENCE_PATTERN.sub('', text).strip()
|
|
179
185
|
lines.append(f"{step['number']}. {clean_text}")
|
|
180
186
|
lines.append("")
|
|
181
187
|
|
|
@@ -35,6 +35,12 @@ from base64 import b64encode
|
|
|
35
35
|
from pathlib import Path
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
# Intentionally matches the exact local-claim prefixes only. EVIDENCE-REF is a
|
|
39
|
+
# cross-work-item pointer and must remain visible in step prose without becoming
|
|
40
|
+
# a capture obligation.
|
|
41
|
+
LOCAL_EVIDENCE_PATTERN = re.compile(r'\[(SCREENSHOT|EVIDENCE):\s*([^\]]+)\]')
|
|
42
|
+
|
|
43
|
+
|
|
38
44
|
def get_jira_config():
|
|
39
45
|
"""Read JIRA server and login from jira-cli config."""
|
|
40
46
|
config_path = Path.home() / ".config" / ".jira" / ".config.yml"
|
|
@@ -153,7 +159,7 @@ def parse_prerequisites(nodes):
|
|
|
153
159
|
def clean_step_text(text, screenshot_name):
|
|
154
160
|
"""Remove [SCREENSHOT: ...] or [EVIDENCE: ...] marker from step text and deduplicate."""
|
|
155
161
|
# Remove the marker itself
|
|
156
|
-
cleaned =
|
|
162
|
+
cleaned = LOCAL_EVIDENCE_PATTERN.sub('', text).strip()
|
|
157
163
|
|
|
158
164
|
# Deduplicate: if the same phrase appears twice consecutively, keep one
|
|
159
165
|
# This handles ADF text node concatenation artifacts
|
|
@@ -177,7 +183,7 @@ def parse_steps(nodes):
|
|
|
177
183
|
text = extract_text_from_adf(item).strip()
|
|
178
184
|
|
|
179
185
|
screenshot = None
|
|
180
|
-
match =
|
|
186
|
+
match = LOCAL_EVIDENCE_PATTERN.search(text)
|
|
181
187
|
if match:
|
|
182
188
|
screenshot = match.group(2).strip()
|
|
183
189
|
|
|
@@ -193,7 +199,7 @@ def parse_steps(nodes):
|
|
|
193
199
|
if text and re.match(r'^\d+\.?\s', text):
|
|
194
200
|
step_number += 1
|
|
195
201
|
screenshot = None
|
|
196
|
-
match =
|
|
202
|
+
match = LOCAL_EVIDENCE_PATTERN.search(text)
|
|
197
203
|
if match:
|
|
198
204
|
screenshot = match.group(2).strip()
|
|
199
205
|
|
|
@@ -206,12 +206,12 @@ Each marker must satisfy ALL of:
|
|
|
206
206
|
- `<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`.)
|
|
207
207
|
- `<name>` is kebab-case and unique within the ticket.
|
|
208
208
|
|
|
209
|
-
Non-binding cross-references use `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <name>]`, where `<tracker-ref>` is the owning ticket or issue (`PROJ-123`, `#123`, `owner/repo#123`, or a tracker URL). S14 MUST ignore `EVIDENCE-REF` markers when deriving this ticket's manifest, and a valid `EVIDENCE-REF` does not satisfy the "at least one marker" requirement. Agents must use `EVIDENCE-REF` instead of quoting a sibling ticket's `[EVIDENCE: ...]` marker in prose.
|
|
210
|
-
|
|
211
209
|
**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]`).
|
|
212
210
|
|
|
213
211
|
FAIL when the Validation Journey is present but declares zero binding `[EVIDENCE: ...]` markers, when any binding marker is untyped or uses a type outside the taxonomy, or when any binding 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 binding marker passes but the remediation should recommend adding the error/edge case.
|
|
214
212
|
|
|
213
|
+
Parse claiming markers by the exact `[EVIDENCE:` prefix. A cross-work-item pointer in the canonical form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is non-claiming. The Lisa 2.223.0 form `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` is also accepted as a legacy non-claiming alias; parse it from the right so the final two fields are type/name and a tracker URL may contain `:`. Exclude both forms from the manifest, S14's minimum-marker count, local marker type/name validation, and duplicate-name checks. Independently validate every `EVIDENCE-REF`: the native work-item reference must be non-empty and unambiguous, the artifact type must use the fixed taxonomy, and the name must be non-empty kebab-case. A malformed reference FAILs S14 as an invalid pointer but never becomes a local evidence obligation. A valid canonical or legacy reference may point to a sibling's artifact, but it never satisfies S14 for this ticket. Therefore a runtime-changing leaf whose journey contains only `EVIDENCE-REF` entries FAILs S14 for zero local claiming markers, not because a valid legacy reference is malformed. Quoting or code-formatting another ticket's `[EVIDENCE: ...]` marker does not make it a reference; writers must convert it to the canonical pipe form.
|
|
214
|
+
|
|
215
215
|
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`.
|
|
216
216
|
|
|
217
217
|
#### S15 — Leaf-only build-ready
|
|
@@ -104,7 +104,9 @@ list multiple repos.]
|
|
|
104
104
|
|
|
105
105
|
h2. Validation Journey
|
|
106
106
|
[Delegate to /jira-add-journey if the ticket changes runtime behavior.
|
|
107
|
-
Skip only for doc-only, config-only, or type-only tickets.
|
|
107
|
+
Skip only for doc-only, config-only, or type-only tickets. Cross-work-item
|
|
108
|
+
evidence pointers use `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`;
|
|
109
|
+
they never replace this ticket's local S14 marker.]
|
|
108
110
|
```
|
|
109
111
|
|
|
110
112
|
Rules:
|
|
@@ -26,7 +26,7 @@ Fetch via `lisa-linear-access operation: get-issue` and extract: title, descript
|
|
|
26
26
|
|
|
27
27
|
### Step 2: Check for Existing Journey
|
|
28
28
|
|
|
29
|
-
If the description
|
|
29
|
+
If the description contains a `## Validation Journey` section, inspect that section for at least one local typed `[EVIDENCE: <artifact-type>: <name>]` marker. Stop only when that local marker exists. An `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is a non-claiming pointer and does not count; if the journey has references but no local claiming marker, continue drafting the missing local journey evidence. Preserve the existing journey prose and references when appending the local evidence rather than overwriting them.
|
|
30
30
|
|
|
31
31
|
### Step 3: Analyze the Change Type
|
|
32
32
|
|
|
@@ -82,23 +82,23 @@ Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at
|
|
|
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. **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
|
-
5. **
|
|
87
|
-
6. **
|
|
88
|
-
7. **
|
|
89
|
-
8. **
|
|
85
|
+
4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-case-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
|
+
5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly".
|
|
87
|
+
6. **Cover happy path and error path** — At minimum, one success and one failure evidence marker.
|
|
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.
|
|
89
|
+
8. **Reference sibling evidence without claiming it** — Use only `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` when prose points to an artifact declared by another item. Never paste, quote, or code-format the sibling's `[EVIDENCE: ...]` marker: that exact prefix creates a local obligation. `EVIDENCE-REF` never satisfies this item's S14 minimum, uniqueness check, capture list, or completion gate; a runtime-changing leaf still needs at least one local `[EVIDENCE: ...]` marker.
|
|
90
90
|
|
|
91
91
|
### Step 6: Present to User for Approval
|
|
92
92
|
|
|
93
|
-
Display the drafted journey and ask for confirmation before
|
|
93
|
+
Display the drafted journey change and ask for confirmation before updating the issue.
|
|
94
94
|
|
|
95
|
-
### Step 7:
|
|
95
|
+
### Step 7: Merge into Issue Description
|
|
96
96
|
|
|
97
|
-
After approval, fetch the current description
|
|
97
|
+
After approval, fetch the current description and update via `lisa-linear-access operation: save-issue({id, description: <new-description>})`. If no journey exists, append one section. If a reference-only journey exists, preserve all existing prose and `EVIDENCE-REF` pointers and append only the missing local steps/markers inside that existing section. Never create a second `## Validation Journey` heading. Preserve all other description content — never overwrite or re-render it.
|
|
98
98
|
|
|
99
99
|
### Step 8: Verify
|
|
100
100
|
|
|
101
|
-
Re-fetch the issue and confirm the section is present.
|
|
101
|
+
Re-fetch the issue and confirm the section is present with at least one local `[EVIDENCE: <artifact-type>: <name>]` marker. An `EVIDENCE-REF` alone does not count.
|
|
102
102
|
|
|
103
103
|
## When to Use This Skill
|
|
104
104
|
|
|
@@ -60,6 +60,8 @@ Items that change runtime behavior should include a `## Validation Journey` sect
|
|
|
60
60
|
|
|
61
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
|
+
To point at evidence owned by another work item, use exactly `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. It is non-claiming and cannot satisfy S14; never paste or quote the sibling's `[EVIDENCE: ...]` marker into this item.
|
|
64
|
+
|
|
63
65
|
```markdown
|
|
64
66
|
## Validation Journey
|
|
65
67
|
|
|
@@ -74,6 +74,8 @@ At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact
|
|
|
74
74
|
|
|
75
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:
|
|
76
76
|
|
|
77
|
+
Treat only exact `[EVIDENCE: ...]` markers (plus the legacy local `[SCREENSHOT: ...]` form) as capture instructions. Both the canonical `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` and the Lisa 2.223.0 legacy alias `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` point to another work item's artifact: preserve either as explanatory text, but do not capture it, assign it a sequence number, include it in duplicate-name checks, or count it as a local manifest entry. If a runtime-changing leaf has references but no local claiming marker, stop because S14 is unsatisfied.
|
|
78
|
+
|
|
77
79
|
#### Evidence Naming Convention
|
|
78
80
|
|
|
79
81
|
`{NN}-{evidence-name}.{ext}`
|
|
@@ -209,12 +209,12 @@ Each marker must satisfy ALL of:
|
|
|
209
209
|
- `<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`.)
|
|
210
210
|
- `<name>` is kebab-case and unique within the item.
|
|
211
211
|
|
|
212
|
-
Non-binding cross-references use `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <name>]`, where `<tracker-ref>` is the owning item or issue (`ENG-123`, `PROJ-123`, `#123`, `owner/repo#123`, or a tracker URL). S14 MUST ignore `EVIDENCE-REF` markers when deriving this item's manifest, and a valid `EVIDENCE-REF` does not satisfy the "at least one marker" requirement. Agents must use `EVIDENCE-REF` instead of quoting a sibling item's `[EVIDENCE: ...]` marker in prose.
|
|
213
|
-
|
|
214
212
|
**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]`).
|
|
215
213
|
|
|
216
214
|
FAIL when the Validation Journey is present but declares zero binding `[EVIDENCE: ...]` markers, when any binding marker is untyped or uses a type outside the taxonomy, or when any binding 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 binding marker passes but the remediation should recommend adding the error/edge case.
|
|
217
215
|
|
|
216
|
+
Parse claiming markers by the exact `[EVIDENCE:` prefix. A cross-work-item pointer in the canonical form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is non-claiming. The Lisa 2.223.0 form `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` is also accepted as a legacy non-claiming alias; parse it from the right so the final two fields are type/name and a tracker URL may contain `:`. Exclude both forms from the manifest, S14's minimum-marker count, local marker type/name validation, and duplicate-name checks. Independently validate every `EVIDENCE-REF`: the native work-item reference must be non-empty and unambiguous, the artifact type must use the fixed taxonomy, and the name must be non-empty kebab-case. A malformed reference FAILs S14 as an invalid pointer but never becomes a local evidence obligation. A valid canonical or legacy reference may point to a sibling's artifact, but it never satisfies S14 for this item. Therefore a runtime-changing leaf whose journey contains only `EVIDENCE-REF` entries FAILs S14 for zero local claiming markers, not because a valid legacy reference is malformed. Quoting or code-formatting another item's `[EVIDENCE: ...]` marker does not make it a reference; writers must convert it to the canonical pipe form.
|
|
217
|
+
|
|
218
218
|
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`.
|
|
219
219
|
|
|
220
220
|
#### S15 — Leaf-only build-ready
|
|
@@ -119,7 +119,9 @@ Linear descriptions are markdown (NOT Jira wiki markup — no `h2.` headings, us
|
|
|
119
119
|
|
|
120
120
|
## Validation Journey
|
|
121
121
|
[Delegate to /linear-add-journey if the item changes runtime behavior.
|
|
122
|
-
Skip only for doc-only, config-only, or type-only items.
|
|
122
|
+
Skip only for doc-only, config-only, or type-only items. Cross-work-item
|
|
123
|
+
evidence pointers use `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`;
|
|
124
|
+
they never replace this item's local S14 marker.]
|
|
123
125
|
```
|
|
124
126
|
|
|
125
127
|
Rules:
|
|
@@ -24,4 +24,5 @@ See the `config-resolution` rule for configuration and dispatch table.
|
|
|
24
24
|
## Rules
|
|
25
25
|
|
|
26
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
|
+
- A cross-work-item pointer uses `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. It is non-claiming and never replaces a runtime-changing leaf's local S14 marker.
|
|
28
|
+
- If the ticket already has a Validation Journey with at least one local typed `[EVIDENCE: ...]` marker, the vendor skill reports it and stops. A reference-only journey is incomplete; the vendor skill preserves its prose and appends the missing local evidence. This shim does not retry.
|
|
@@ -28,6 +28,7 @@ See the `config-resolution` rule for configuration and dispatch table.
|
|
|
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
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
|
+
- **Evidence references are not manifest entries.** Extract obligations using the exact `[EVIDENCE:` prefix (and the legacy local `[SCREENSHOT:` form). Exclude both the canonical `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` and the Lisa 2.223.0 legacy alias `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` from artifact lookup, missing-artifact reporting, and duplicate-name checks: either belongs to another work item and cannot satisfy this item's S14 gate. A runtime-changing leaf with references but no local claiming marker must be rejected before dispatch.
|
|
31
32
|
|
|
32
33
|
## UI Evidence Checklist (when work is UI-visible)
|
|
33
34
|
|
|
@@ -253,6 +253,7 @@ Agents must follow this sequence unless explicitly instructed otherwise:
|
|
|
253
253
|
4. **If verification blocked** (missing tools, services, etc.): Mark as blocked, not complete
|
|
254
254
|
5. **Must not be dependent on CI/CD** if necessary, you may use local deploy methods found in the project manifest, but the verification methods must be listed in the pull request and therefore cannot be dependent on CI/CD completing
|
|
255
255
|
6. **Evidence manifest satisfied (leaf work units)**: For a leaf work unit (Bug / Task / Sub-task / Improvement) whose ticket carries a Validation Journey, do not mark the ticket complete or transition it out of in-progress until every typed `[EVIDENCE: <artifact-type>: <name>]` marker declared on the ticket has a corresponding captured, non-empty artifact **of the declared type** attached to the ticket (an image for `screenshot`, request + response for `http-transcript`, measured output for `perf-trace`, …). A missing, empty, or wrong-type artifact for any declared marker blocks completion exactly like a failed verification — fix and re-capture, or escalate; never close with an unsatisfied manifest. Epics / Stories / Spikes are exempt (coordination containers, not work units).
|
|
256
|
+
- Extract local obligations using the exact `[EVIDENCE:` prefix (plus legacy local `[SCREENSHOT:`). Both the canonical `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` and the Lisa 2.223.0 legacy alias `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` are non-claiming pointers to another work item: never capture either, match it to a local artifact, include it in duplicates, or count it toward S14. A reference-only runtime-changing leaf remains incomplete.
|
|
256
257
|
7. **No artifact-only completion for required runtime verification**: If empirical verification is required and cannot run because credentials are missing, do not mark the item done on artifact-only evidence. Exhaust the credential lookup order first; if still blocked, post the blocker comment, move the item to the configured blocked state, and apply the configured `needs-human` / `human-review` label.
|
|
257
258
|
|
|
258
259
|
---
|
|
@@ -360,6 +361,7 @@ A task is done only when:
|
|
|
360
361
|
- Proof artifacts are captured
|
|
361
362
|
- Every passing empirical verification is codified as a regression test (or has an explicit, documented skip reason from the allowed set)
|
|
362
363
|
- For a leaf work unit, every typed `[EVIDENCE: <artifact-type>: <name>]` marker declared in its Validation Journey has a captured, non-empty artifact of the declared type attached to the ticket (the evidence manifest is fully satisfied)
|
|
364
|
+
- Cross-work-item `EVIDENCE-REF` pointers were excluded from the local manifest and did not satisfy S14 or completion; a runtime-changing leaf has at least one local claiming marker
|
|
363
365
|
- Spec conformance verdict is `CONFORMS` (not `PARTIAL`, not `DIVERGES`)
|
|
364
366
|
- Verification level is declared
|
|
365
367
|
- Risks and gaps are documented
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
- **After verifying empirically, codify it as a regression test** via the `codify-verification` skill — Playwright for UI, integration test for API/DB/auth, benchmark for performance. Codification is mandatory for every verification type except PR/Documentation/Deploy and Investigate-Only spikes. For **frontend work**, codification is dual-runner: a Playwright spec in the project's Playwright test runner AND a Maestro flow in the Maestro test runner whenever the project supports Maestro (`.maestro/` directory, `maestro:test` script, or Maestro CI workflow) — both encoding the same verified journey, neither a substitute for the other.
|
|
16
16
|
- **The codified proof re-runs in CI.** Codified runtime verification lives where the project's e2e/Playwright tests live (`tests/e2e/**`) and runs as a required CI check for types with verification enforced — so the proof re-runs on every PR, not once by hand.
|
|
17
17
|
- **Commit the evidence.** Write a durable artifact to `evidence/<ticket>/` — the acceptance criteria with per-criterion pass/fail + note, the observed state, screenshots/recording, and a `verdict.json`. The transient `.lisa/verification-status.json` is the session gate; `evidence/<ticket>/` is the committed proof.
|
|
18
|
-
- **Evidence markers are typed artifacts, not assertion labels.** A Validation Journey marker is `[EVIDENCE: <artifact-type>: <name>]` where the type (screenshot, recording, http-transcript, cli-output, log-snippet, db-query-output, perf-trace, test-run-log, deploy-log, state-dump) says HOW the proof is captured and the name says WHAT it proves. `[EVIDENCE: works-gracefully]` is a claim, not evidence — write `[EVIDENCE: screenshot: load-failure-error-state]`. Completion requires a captured artifact **of the declared type** per marker. To cite another
|
|
18
|
+
- **Evidence markers are typed artifacts, not assertion labels.** A Validation Journey marker is `[EVIDENCE: <artifact-type>: <name>]` where the type (screenshot, recording, http-transcript, cli-output, log-snippet, db-query-output, perf-trace, test-run-log, deploy-log, state-dump) says HOW the proof is captured and the name says WHAT it proves. `[EVIDENCE: works-gracefully]` is a claim, not evidence — write `[EVIDENCE: screenshot: load-failure-error-state]`. Completion requires a captured artifact **of the declared type** per marker. To cite another work item's artifact without claiming it, write `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. The Lisa 2.223.0 colon form `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` remains accepted as a legacy non-claiming alias but must not be newly authored. A reference never enters or satisfies the local S14 manifest; malformed references fail S14, and agents must not quote sibling `[EVIDENCE: ...]` markers directly.
|
|
19
19
|
- **Per-change verification is mandatory.** Every `feat`/`fix` adds or extends a verification (e2e) spec mapped to its acceptance criteria. The only exception is a genuinely non-behavioral change explicitly marked with the **logged** `verification-exempt` label — never a silent skip.
|
|
20
20
|
- **Drive the playthrough with `/lisa:product-walkthrough`** (it walks the live product through a real browser); each project type plugs in its own drive mechanism (e.g. a Phaser game is driven through Playwright + an in-game verification test bridge that seeds RNG, reads state, injects input, and steps frames).
|
|
21
21
|
- **Every PR must include reviewer replay steps** — the exact human steps to use the software and confirm the change works. Not test commands. If a reviewer can't reproduce from the PR description alone, the PR is incomplete.
|
|
@@ -122,14 +122,6 @@ The declaration is not a separate field — it is the set of `[EVIDENCE: <artifa
|
|
|
122
122
|
- `<artifact-type>` — HOW the proof is captured, from the fixed taxonomy below.
|
|
123
123
|
- `<kebab-case-name>` — WHAT it proves, unique within the ticket.
|
|
124
124
|
|
|
125
|
-
To reference a sibling or parent artifact without adding it to the current work unit's manifest, use the non-binding cross-reference form:
|
|
126
|
-
|
|
127
|
-
```text
|
|
128
|
-
[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
`<tracker-ref>` is the owning ticket or issue (`#123`, `PROJ-123`, `ENG-123`, `owner/repo#123`, or a tracker URL). Validators and journey runners MUST ignore `EVIDENCE-REF` markers when building the current work unit's evidence manifest. Never quote a sibling's `[EVIDENCE: ...]` marker directly in prose; that syntax always belongs to the current work unit.
|
|
132
|
-
|
|
133
125
|
Example transformation (the failure mode this grammar exists to prevent):
|
|
134
126
|
|
|
135
127
|
| Assertion label (invalid) | Typed artifact (valid) |
|
|
@@ -157,6 +149,20 @@ Do not invent types inline; if none fits, propose extending this table. The lega
|
|
|
157
149
|
|
|
158
150
|
The manifest is the single source of truth for "what evidence is required": authored once in the Validation Journey, enforced at write time, replayed during `tracker-journey` (which captures each artifact **in its declared type**), and checked again before the ticket closes. There is no second list to keep in sync.
|
|
159
151
|
|
|
152
|
+
### Cross-work-item evidence references are non-claiming
|
|
153
|
+
|
|
154
|
+
When prose needs to point at evidence declared by another work item, use the dedicated reference form:
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
For example, `[EVIDENCE-REF: CodySwannGT/lisa#1548 | test-run-log: plugin-parity]` or `[EVIDENCE-REF: ENG-123 | screenshot: empty-state]`. The work-item reference must be a native, unambiguous tracker reference; the artifact type and name use the same taxonomy and kebab-case grammar as a manifest marker.
|
|
161
|
+
|
|
162
|
+
For compatibility with Lisa 2.223.0, validators and consumers also accept the legacy form `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` as a non-claiming pointer. Parse that legacy payload from the right: the final two colon-delimited fields are the fixed artifact type and kebab-case name, and everything before them is the non-empty tracker reference (which may itself contain `:` as part of a URL). Writers must never emit the legacy form; normalize it to the pipe form whenever editing the journey.
|
|
163
|
+
|
|
164
|
+
`EVIDENCE-REF` is a pointer only. It never adds an artifact to the current work item's manifest, never satisfies S14, never participates in marker-name uniqueness or duplicate checks, and is never captured or checked by journey, evidence-posting, or completion flows. Only the exact claiming prefix `[EVIDENCE: ...]` declares an obligation on the current work item (with the legacy `[SCREENSHOT: name]` form still treated as a local screenshot obligation). A runtime-changing leaf whose journey contains references but no local claiming marker still fails S14. Writers must use `EVIDENCE-REF` rather than quoting a sibling's `[EVIDENCE: ...]` marker, because quoted or code-formatted claiming markers still belong to the current work item.
|
|
165
|
+
|
|
160
166
|
---
|
|
161
167
|
|
|
162
168
|
## Local vs Remote Verification
|