@codyswann/lisa 2.266.0 → 2.268.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.
Files changed (92) hide show
  1. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  2. package/dist/core/upstream-evidence-manifest.js +29 -6
  3. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  4. package/package.json +5 -3
  5. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +22 -1
  8. package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/SKILL.md +43 -11
  9. package/plugins/lisa/agents/spec-conformance-specialist.md +5 -2
  10. package/plugins/lisa/agents/verification-specialist.md +1 -1
  11. package/plugins/lisa/hooks/enforce-verification-gate.sh +83 -9
  12. package/plugins/lisa/rules/eager/readiness-rubric.md +58 -0
  13. package/plugins/lisa/rules/reference/readiness-rubric.md +179 -0
  14. package/plugins/lisa/rules/reference/verification.md +2 -0
  15. package/plugins/lisa/skills/lisa-implement/SKILL.md +22 -1
  16. package/plugins/lisa/skills/lisa-spec-conformance/SKILL.md +43 -11
  17. package/plugins/lisa-agy/agents/spec-conformance-specialist.md +5 -2
  18. package/plugins/lisa-agy/agents/verification-specialist.md +1 -1
  19. package/plugins/lisa-agy/plugin.json +1 -1
  20. package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +22 -1
  21. package/plugins/lisa-agy/skills/lisa-spec-conformance/SKILL.md +43 -11
  22. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  25. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-copilot/agents/spec-conformance-specialist.agent.md +5 -2
  29. package/plugins/lisa-copilot/agents/verification-specialist.agent.md +1 -1
  30. package/plugins/lisa-copilot/hooks/enforce-verification-gate.sh +83 -9
  31. package/plugins/lisa-copilot/rules/eager/readiness-rubric.md +58 -0
  32. package/plugins/lisa-copilot/rules/reference/readiness-rubric.md +179 -0
  33. package/plugins/lisa-copilot/rules/reference/verification.md +2 -0
  34. package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +22 -1
  35. package/plugins/lisa-copilot/skills/lisa-spec-conformance/SKILL.md +43 -11
  36. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cursor/agents/spec-conformance-specialist.md +5 -2
  38. package/plugins/lisa-cursor/agents/verification-specialist.md +1 -1
  39. package/plugins/lisa-cursor/hooks/enforce-verification-gate.sh +83 -9
  40. package/plugins/lisa-cursor/rules/readiness-rubric-reference.mdc +184 -0
  41. package/plugins/lisa-cursor/rules/readiness-rubric.mdc +63 -0
  42. package/plugins/lisa-cursor/rules/verification-reference.mdc +2 -0
  43. package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +22 -1
  44. package/plugins/lisa-cursor/skills/lisa-spec-conformance/SKILL.md +43 -11
  45. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-expo-agy/plugin.json +1 -1
  48. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  53. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  58. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  63. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  68. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-rails-agy/plugin.json +1 -1
  73. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  78. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  82. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  83. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  85. package/plugins/src/base/agents/spec-conformance-specialist.md +5 -2
  86. package/plugins/src/base/agents/verification-specialist.md +1 -1
  87. package/plugins/src/base/hooks/enforce-verification-gate.sh +83 -9
  88. package/plugins/src/base/rules/eager/readiness-rubric.md +58 -0
  89. package/plugins/src/base/rules/reference/readiness-rubric.md +179 -0
  90. package/plugins/src/base/rules/reference/verification.md +2 -0
  91. package/plugins/src/base/skills/lisa-implement/SKILL.md +22 -1
  92. package/plugins/src/base/skills/lisa-spec-conformance/SKILL.md +43 -11
@@ -67,11 +67,28 @@ Gather evidence of what was actually shipped:
67
67
  git diff "${BASE_BRANCH}"...HEAD -- '**/*.test.*' '**/*.spec.*'
68
68
  ```
69
69
  4. **Empirical evidence** — output of `verification-specialist` if available (proof artifacts, API captures, UI screenshots, DB queries). If that report isn't in context, ask the caller for it before proceeding — do not substitute reading code for running the system.
70
+ 4a. **The machine-readable verdict** — `Read` `${CLAUDE_PROJECT_DIR:-.}/.lisa/verification-status.json`. Under **schema v2** it is the structured form of the evidence above, and it is what lets you check a claim's *reach* instead of taking "verified" at its word. Load `artifact` (`repository`, `head_sha`, `environment`), `claims[]` (`claim_id`, `statement`, `boundary`, `required_evidence_kinds`, `status`, `evidence_refs`, `not_established`), `evidence[]` (`evidence_id`, `kind`, `locator`, `sha256`, `captured_at`, `artifact_head_sha`), and the `not_established_reviewed` flag.
70
71
  5. **PR description** — `gh pr view --json title,body,files` if a PR exists.
71
72
  6. **Deployed state** — if the verification phase already hit a deployed environment, use those captures.
72
73
 
73
74
  Do NOT run the system yourself — that's the verification-specialist's job. Your job is to map their evidence to the spec.
74
75
 
76
+ ## Phase 3b — Cross-Check Claims Against Their Boundaries
77
+
78
+ The `claim-evidence-mapping` rule is the contract: **every claim declares a boundary, and a claim is established only by evidence of a kind that reaches that boundary.** Conformance is not just "was it built" — it is also "does the proof offered actually reach the thing the requirement asserts." A unit `test-run-log` cited for a requirement about browser-visible behavior is a conformance defect even when the code is perfect.
79
+
80
+ For every v2 claim loaded in Phase 3 step 4a, run three checks:
81
+
82
+ | Check | Rule | Failure |
83
+ |-------|------|---------|
84
+ | **Boundary reach** | Each `evidence_refs` entry resolves to an `evidence[]` row whose `kind` appears in that claim's `required_evidence_kinds` — and those kinds are the ones the `claim-evidence-mapping` taxonomy binds to the claim's `boundary` | `BOUNDARY_MISMATCH` |
85
+ | **Artifact identity** | Every cited evidence row's `artifact_head_sha` equals `artifact.head_sha` — the claim applies only to the artifact the evidence was collected against | `BOUNDARY_MISMATCH`, noting both SHAs |
86
+ | **Not established** | `not_established_reviewed` is present and `true`, and every claim carries a `not_established` list (possibly empty) | `BOUNDARY_MISMATCH` on the verdict as a whole |
87
+
88
+ Then bind the verdict back to the spec: map each `claim_id` to the requirement row it discharges. A requirement whose only supporting claim fails a check is **not** `MATCH`, no matter what the verification report's prose said. A requirement with no claim at all is `MISSING`, not `PARTIAL`.
89
+
90
+ **Degrade, never block.** If `.lisa/verification-status.json` is absent, or carries **v1** (no `schema_version`, or `schema_version: 1` — only `plan` / `status` / `criteria[]` / `updated_at`), the boundary cross-check is not available. Say so explicitly in the report ("v2 verdict not present — boundary reach unverified"), fall back to the prose evidence from Phase 3, and cap the verdict at `PARTIAL` for any requirement whose boundary you cannot confirm. Do not invent a mismatch you could not check, and do not silently upgrade an unchecked claim to `MATCH`.
91
+
75
92
  ## Phase 4 — Build Coverage Matrix
76
93
 
77
94
  For every requirement extracted in Phase 2, produce one row:
@@ -81,8 +98,10 @@ For every requirement extracted in Phase 2, produce one row:
81
98
  | Requirement ID | Stable identifier (e.g. `AC-1`, `OOS-2`, `ASSERT-3`) |
82
99
  | Classification | `acceptance` / `excluded` / `technical` / `assertion` / `deliverable` / `task` / `blocker` |
83
100
  | Requirement Text | Verbatim from spec |
84
- | Evidence | Specific pointer — file:line, test name, verification report section, PR file, screenshot name |
85
- | Status | `MATCH` / `PARTIAL` / `MISSING` / `SCOPE_CREEP_VIOLATION` |
101
+ | Evidence | Specific pointer — file:line, test name, verification report section, PR file, screenshot name. When a v2 verdict exists, also name the `claim_id` and `evidence_id` that discharge it |
102
+ | Boundary | The claim's `boundary` from the v2 verdict (`code-unit` / `browser` / `http-api` / `cli` / `data` / `deploy-health` / `performance` / `standards-compat`), or `—` when no v2 claim maps to this row |
103
+ | Evidence kind | The `kind` of each cited evidence row, so a reader sees the reach without opening the verdict |
104
+ | Status | `MATCH` / `PARTIAL` / `MISSING` / `BOUNDARY_MISMATCH` / `SCOPE_CREEP_VIOLATION` |
86
105
  | Notes | One line — why partial, what's missing, or where evidence is thin |
87
106
 
88
107
  ### Status definitions
@@ -90,6 +109,7 @@ For every requirement extracted in Phase 2, produce one row:
90
109
  - **`MATCH`** — requirement is implemented AND there is empirical evidence it works (test + verification report).
91
110
  - **`PARTIAL`** — implementation exists but evidence is incomplete (e.g. code present, no test; or test present, no run-time verification).
92
111
  - **`MISSING`** — requirement has no corresponding implementation OR no evidence at all.
112
+ - **`BOUNDARY_MISMATCH`** — the requirement was implemented and evidence was cited, but the evidence does not *reach* the claim's boundary (a unit `test-run-log` offered for a `browser` claim), or its `artifact_head_sha` does not match `artifact.head_sha`, or the verdict omits the required Not-established review. This is a distinct failure from a miss: the work may be right and the proof still does not establish it. A `BOUNDARY_MISMATCH` row forces the verdict to `DIVERGES` — it can never render as `CONFORMS` or `PARTIAL`. Name the boundary, the kind cited, and the kind(s) required, citing the `claim-evidence-mapping` taxonomy.
93
113
  - **`SCOPE_CREEP_VIOLATION`** — used for `excluded` classification only. An Out-of-Scope item appears to have been shipped anyway. This is a different failure than a miss — it means the agent exceeded the spec.
94
114
 
95
115
  ### Scope creep detection
@@ -106,9 +126,9 @@ Untraceable changes are not automatic failures. They become findings the human r
106
126
 
107
127
  Produce exactly one verdict:
108
128
 
109
- - **`CONFORMS`** — every requirement is `MATCH`. No `SCOPE_CREEP_VIOLATION`. Untraceable changes, if any, are clearly refactors or test support.
110
- - **`PARTIAL`** — some requirements are `PARTIAL` but none are `MISSING` or `SCOPE_CREEP_VIOLATION`. Work is mostly there but evidence is thin.
111
- - **`DIVERGES`** — at least one requirement is `MISSING`, OR at least one `SCOPE_CREEP_VIOLATION` exists, OR there are substantive untraceable changes that materially alter behavior.
129
+ - **`CONFORMS`** — every requirement is `MATCH`. No `SCOPE_CREEP_VIOLATION`, no `BOUNDARY_MISMATCH`. Untraceable changes, if any, are clearly refactors or test support.
130
+ - **`PARTIAL`** — some requirements are `PARTIAL` but none are `MISSING`, `BOUNDARY_MISMATCH`, or `SCOPE_CREEP_VIOLATION`. Work is mostly there but evidence is thin.
131
+ - **`DIVERGES`** — at least one requirement is `MISSING`, OR at least one `BOUNDARY_MISMATCH` exists, OR at least one `SCOPE_CREEP_VIOLATION` exists, OR there are substantive untraceable changes that materially alter behavior.
112
132
 
113
133
  A verdict of `PARTIAL` or `DIVERGES` blocks task completion. The caller must resolve the gaps (implement the miss, remove the creep, add the missing evidence) before re-running.
114
134
 
@@ -121,15 +141,24 @@ Structure the report so it can be pasted into a PR comment or JIRA ticket:
121
141
 
122
142
  **Spec source:** <plan file / JIRA key / Linear / GitHub issue / PRD>
123
143
  **Shipped scope:** <N commits, M files, K tests on branch <branch> vs <default-branch>>
144
+ **Verdict artifact:** <.lisa/verification-status.json schema v2, artifact.head_sha <sha> — or "v2 verdict not present — boundary reach unverified">
124
145
 
125
146
  ### Coverage Matrix
126
147
 
127
- | ID | Class | Requirement | Evidence | Status | Notes |
128
- |----|-------|-------------|----------|--------|-------|
129
- | AC-1 | acceptance | [text] | [pointer] | MATCH | |
130
- | AC-2 | acceptance | [text] | — | MISSING | No corresponding code or test |
131
- | OOS-1 | excluded | [text] | src/foo.ts:42 | SCOPE_CREEP_VIOLATION | Added anyway |
132
- | ASSERT-1 | assertion | [text] | verification-report §2 | PARTIAL | Asserted in code, not run in verification |
148
+ | ID | Class | Requirement | Evidence | Boundary | Evidence kind | Status | Notes |
149
+ |----|-------|-------------|----------|----------|---------------|--------|-------|
150
+ | AC-1 | acceptance | [text] | [pointer] (AC-1 / EV-1) | browser | screenshot | MATCH | |
151
+ | AC-2 | acceptance | [text] | — | — | — | MISSING | No corresponding code or test |
152
+ | AC-3 | acceptance | [text] | EV-4 | browser | test-run-log | BOUNDARY_MISMATCH | Unit log cannot establish a browser claim — needs screenshot or recording |
153
+ | OOS-1 | excluded | [text] | src/foo.ts:42 | | | SCOPE_CREEP_VIOLATION | Added anyway |
154
+ | ASSERT-1 | assertion | [text] | verification-report §2 | http-api | — | PARTIAL | Asserted in code, not run in verification |
155
+
156
+ ### Not Established
157
+
158
+ Reproduce the verdict's `not_established` entries verbatim, grouped by claim, plus anything the matrix could not confirm. This section is **never omitted and never blank**: with nothing outstanding it renders `None outstanding — reviewed`. State whether `not_established_reviewed` was `true`.
159
+
160
+ - AC-1 — not exercised on mobile viewports; Safari not tested
161
+ - AC-4 — offline behavior consciously out of scope for this ticket
133
162
 
134
163
  ### Untraceable Changes
135
164
  - src/utils/helpers.ts — extracted shared regex constant (refactor, no behavior change)
@@ -140,6 +169,7 @@ Structure the report so it can be pasted into a PR comment or JIRA ticket:
140
169
  **Matches:** N/Total
141
170
  **Partial:** N
142
171
  **Missing:** N
172
+ **Boundary mismatches:** N
143
173
  **Scope creep violations:** N
144
174
  **Untraceable changes flagged for review:** N
145
175
 
@@ -152,6 +182,8 @@ Structure the report so it can be pasted into a PR comment or JIRA ticket:
152
182
 
153
183
  - Never substitute "I read the code and it looks right" for empirical evidence. If verification-specialist hasn't run yet, request its report before producing a verdict.
154
184
  - Never mark a requirement `MATCH` based on the presence of code alone — evidence means test + runtime observation.
185
+ - Never mark a requirement `MATCH` on evidence that does not **reach** its claim's boundary. Per the `claim-evidence-mapping` contract, a unit `test-run-log` establishes only `code-unit` behavior; cited for a `browser`, `http-api`, `deploy-health`, or `standards-compat` claim it is a `BOUNDARY_MISMATCH`, not a match.
186
+ - Always report the Not-established section, even when empty. A report that lists only what passed is unreadable at a gate.
155
187
  - Always surface scope creep separately from misses. They are distinct failures.
156
188
  - Always surface untraceable changes — even benign refactors — so the human can confirm intent.
157
189
  - The Out of Scope section is load-bearing. If the spec has one, every item must appear in the matrix as `excluded`.