@codyswann/lisa 4.18.0 → 4.19.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/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +14 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +15 -5
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/scripts/bdd/baseline.mjs +10 -2
- package/expo/copy-overwrite/scripts/bdd/render.mjs +3 -2
- package/expo/copy-overwrite/scripts/bdd-matrix.mjs +3 -3
- package/package.json +7 -2
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +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-cursor/.claude-plugin/plugin.json +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-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/scripts/check-ui-demo-data.mjs +102 -0
- package/ui/README.md +32 -0
- package/ui/index.html +901 -115
|
@@ -184,6 +184,9 @@ function featureFilesAt(root, revision) {
|
|
|
184
184
|
* @returns {{available: boolean, error: string|null, contract: object|null, scenarios: object[], scenarioIds: Set<string>}} Base state.
|
|
185
185
|
*/
|
|
186
186
|
export function loadBaseline(root, revision, headPlatforms = new Set()) {
|
|
187
|
+
const binary = resolveGit();
|
|
188
|
+
const revisionExists =
|
|
189
|
+
binary !== null && git(root, ["cat-file", "-e", `${revision}^{commit}`]).ok;
|
|
187
190
|
const raw = showAtRevision(root, revision, "bdd/coverage-map.json");
|
|
188
191
|
let contract = null;
|
|
189
192
|
let error = null;
|
|
@@ -195,8 +198,10 @@ export function loadBaseline(root, revision, headPlatforms = new Set()) {
|
|
|
195
198
|
error = `bdd/coverage-map.json at that revision is not valid JSON: ${parseError.message}`;
|
|
196
199
|
}
|
|
197
200
|
}
|
|
198
|
-
if (
|
|
201
|
+
if (binary === null) {
|
|
199
202
|
error = "git was not found, so no base revision could be read";
|
|
203
|
+
} else if (!revisionExists) {
|
|
204
|
+
error = "the requested base does not name a readable commit";
|
|
200
205
|
}
|
|
201
206
|
const documents = featureFilesAt(root, revision)
|
|
202
207
|
.map(file => ({ file, source: showAtRevision(root, revision, file) }))
|
|
@@ -206,7 +211,10 @@ export function loadBaseline(root, revision, headPlatforms = new Set()) {
|
|
|
206
211
|
...headPlatforms,
|
|
207
212
|
]);
|
|
208
213
|
return {
|
|
209
|
-
|
|
214
|
+
// A verified commit with no map and no features is the legitimate empty
|
|
215
|
+
// baseline for a repository's first behavior contract. Commit existence is
|
|
216
|
+
// checked independently so an invalid SHA can never masquerade as bootstrap.
|
|
217
|
+
available: error === null && revisionExists,
|
|
210
218
|
error,
|
|
211
219
|
contract,
|
|
212
220
|
scenarios: documents.flatMap(document =>
|
|
@@ -124,7 +124,8 @@ function inventorySection(report) {
|
|
|
124
124
|
`| ${cell(item.runner)} | \`${cell(item.file)}\` | ${item.evidence === null ? "*(file has no title)*" : cell(item.evidence)} |`
|
|
125
125
|
)
|
|
126
126
|
.join("\n") || "| — | — | None |";
|
|
127
|
-
|
|
127
|
+
const carry = inventory.dynamicTitles === 1 ? "carries" : "carry";
|
|
128
|
+
return `${inventory.discovered} tests discovered under ${inventory.roots.map(root => `\`${cell(root)}\``).join(", ")}; ${inventory.disclosed} are named by a mapping or an exclusion. ${inventory.dynamicTitles} ${carry} a computed (template-literal) title, taken verbatim from the source — a runner result cannot be joined to those by title.\n\n| Runner | File | Test not named by the contract |\n|---|---|---|\n${rows}`;
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
/**
|
|
@@ -186,7 +187,7 @@ export function renderBurndown(report) {
|
|
|
186
187
|
return `# BDD behavior contract — coverage burndown
|
|
187
188
|
|
|
188
189
|
Generated from \`bdd/features/*.feature\` and \`bdd/coverage-map.json\` as of ${report.asOf ?? "an unrecorded date"}.
|
|
189
|
-
Regenerated by \`
|
|
190
|
+
Regenerated by \`BDD_BASE_SHA="$(git merge-base HEAD origin/HEAD)" bun run bdd:coverage:write\`; never hand-edited.
|
|
190
191
|
|
|
191
192
|
## What each number means
|
|
192
193
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* the mapped column asserts an aligned test exists and still contains its
|
|
16
16
|
* evidence string — never that it passed.
|
|
17
17
|
*
|
|
18
|
-
* Usage:
|
|
18
|
+
* Usage: BDD_BASE_SHA="$(git merge-base HEAD origin/HEAD)" bun run bdd:matrix [--results <file>]
|
|
19
19
|
*
|
|
20
20
|
* @module scripts/bdd-matrix
|
|
21
21
|
*/
|
|
@@ -205,7 +205,7 @@ function renderFeature({
|
|
|
205
205
|
return `| \`${scenario.id ?? "(no id)"}\` | ${scenario.name} | ${sourceCell(scenario, contract.trackers)} | ${lifecycle} | ${cells.join(" | ")} | ${executionCell(mappings, results, supplied)} |`;
|
|
206
206
|
})
|
|
207
207
|
.join("\n");
|
|
208
|
-
return
|
|
208
|
+
return `## ${feature}\n\n${header}\n${divider}\n${rows}\n`;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
/**
|
|
@@ -219,7 +219,7 @@ function preamble(scenarios, supplied) {
|
|
|
219
219
|
return `# BDD scenario traceability matrix
|
|
220
220
|
|
|
221
221
|
Every declared behavior, where it came from, and what actually proves it.
|
|
222
|
-
Generated by \`
|
|
222
|
+
Generated by \`BDD_BASE_SHA="$(git merge-base HEAD origin/HEAD)" bun run bdd:matrix\`; never hand-edited.
|
|
223
223
|
|
|
224
224
|
- **Mapped** — aligned automation exists in that runner for the platforms the scenario requires, and its evidence string still resolves. This is **traceability**, not a result: a mapped test that fails still shows \`✓\`.
|
|
225
225
|
- **Executed** — what the supplied run evidence returned for those mapped tests. ${supplied ? "Run evidence was supplied for this render." : "**No run evidence was supplied for this render**, so this column reads `not supplied` throughout — nothing here asserts any test ran."}
|
package/package.json
CHANGED
|
@@ -39,6 +39,11 @@
|
|
|
39
39
|
"prepublishOnly": "$npm_execpath run build",
|
|
40
40
|
"check:plugins": "bash scripts/check-plugins-sync.sh",
|
|
41
41
|
"check:learnings-budget": "bun scripts/check-learnings-budget.ts",
|
|
42
|
+
"check:ui-demo-data": "node scripts/check-ui-demo-data.mjs",
|
|
43
|
+
"check:behavior-contract": "BDD_COVERAGE_ROOT=. node expo/copy-overwrite/scripts/check-bdd-coverage.mjs",
|
|
44
|
+
"bdd:coverage": "bun run check:behavior-contract",
|
|
45
|
+
"bdd:coverage:write": "BDD_COVERAGE_ROOT=. node expo/copy-overwrite/scripts/check-bdd-coverage.mjs --write",
|
|
46
|
+
"bdd:matrix": "BDD_COVERAGE_ROOT=. node expo/copy-overwrite/scripts/bdd-matrix.mjs --write",
|
|
42
47
|
"build:upstream-evidence-manifest": "node scripts/generate-upstream-evidence-manifest.mjs",
|
|
43
48
|
"check:upstream-evidence-manifest": "node scripts/generate-upstream-evidence-manifest.mjs --check",
|
|
44
49
|
"build:lisa-owned-hash-ledger": "node scripts/generate-lisa-owned-hash-ledger.mjs",
|
|
@@ -153,7 +158,7 @@
|
|
|
153
158
|
"zod-validation-error": "^4.0.0"
|
|
154
159
|
},
|
|
155
160
|
"name": "@codyswann/lisa",
|
|
156
|
-
"version": "4.
|
|
161
|
+
"version": "4.19.0",
|
|
157
162
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
158
163
|
"main": "dist/index.js",
|
|
159
164
|
"exports": {
|
|
@@ -292,5 +297,5 @@
|
|
|
292
297
|
"vite": "^8.0.16"
|
|
293
298
|
},
|
|
294
299
|
"type": "module",
|
|
295
|
-
"lisaReleaseCommit": "
|
|
300
|
+
"lisaReleaseCommit": "41fe63822ee1b74abcd798e71c25ebd33e12278b"
|
|
296
301
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.19.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.19.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.19.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.19.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.19.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|