@codyswann/lisa 2.349.0 → 2.349.1
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/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +9 -7
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/scripts/bdd/baseline.mjs +46 -7
- package/expo/copy-overwrite/scripts/bdd/parse.mjs +22 -2
- package/expo/copy-overwrite/scripts/bdd/render.mjs +34 -7
- package/expo/copy-overwrite/scripts/bdd/report.mjs +118 -18
- package/expo/copy-overwrite/scripts/bdd/validate.mjs +95 -22
- package/expo/copy-overwrite/scripts/bdd-matrix.mjs +5 -32
- package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +29 -3
- 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-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
|
@@ -54,6 +54,7 @@ import { loadScenarios } from "./bdd/parse.mjs";
|
|
|
54
54
|
import { buildReport } from "./bdd/report.mjs";
|
|
55
55
|
import { renderBurndown } from "./bdd/render.mjs";
|
|
56
56
|
import {
|
|
57
|
+
unresolvedEvidenceKeys,
|
|
57
58
|
validateMappings,
|
|
58
59
|
validateScenarios,
|
|
59
60
|
validateTrackerTags,
|
|
@@ -235,11 +236,11 @@ export function loadExecutionResults(root, files) {
|
|
|
235
236
|
* @param {object} input - Root, contract, scenarios, platforms, and options.
|
|
236
237
|
* @returns {object[]} Defects found.
|
|
237
238
|
*/
|
|
238
|
-
function validateAll({ root, contract, scenarios, platforms, options }) {
|
|
239
|
+
function validateAll({ root, contract, scenarios, platforms, options, cache }) {
|
|
239
240
|
const defects = [
|
|
240
241
|
...validateScenarios(scenarios, platforms),
|
|
241
242
|
...validateTrackerTags(scenarios, contract.trackers),
|
|
242
|
-
...validateMappings({ root, scenarios, contract }),
|
|
243
|
+
...validateMappings({ root, scenarios, contract, cache }),
|
|
243
244
|
...validateWaivers({ scenarios, contract, today: options.today }),
|
|
244
245
|
];
|
|
245
246
|
if (!options.baseSha) return defects;
|
|
@@ -269,6 +270,25 @@ function validateAll({ root, contract, scenarios, platforms, options }) {
|
|
|
269
270
|
];
|
|
270
271
|
}
|
|
271
272
|
|
|
273
|
+
/**
|
|
274
|
+
* A malformed coverage floor, in EVERY adopted state.
|
|
275
|
+
*
|
|
276
|
+
* This is config integrity, not contract quality, so bootstrap does not
|
|
277
|
+
* downgrade it: a floor written as `"19"` rather than `19` disables the
|
|
278
|
+
* ratchet AND removes the platform from enforcement, in one character, in
|
|
279
|
+
* one file, with no other signal. It is refused rather than ignored.
|
|
280
|
+
* @param {object} report - The built report.
|
|
281
|
+
* @returns {object[]} Defects found.
|
|
282
|
+
*/
|
|
283
|
+
function floorIntegrityDefects(report) {
|
|
284
|
+
return (report.floor.invalid ?? []).map(platform =>
|
|
285
|
+
defect(
|
|
286
|
+
"floor-invalid",
|
|
287
|
+
`coverageFloor.${platform} is not a number between 0 and 100; a non-numeric floor silently disables enforcement, so it is refused rather than ignored`
|
|
288
|
+
)
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
|
|
272
292
|
/**
|
|
273
293
|
* Defects that only exist in enforced mode, where absence must fail.
|
|
274
294
|
* @param {object} input - Contract, scenarios, report, and platforms.
|
|
@@ -342,17 +362,23 @@ export function run(root, options) {
|
|
|
342
362
|
const platforms = declaredPlatforms(contract.runnerPlatforms);
|
|
343
363
|
const scenarios = loadScenarios(root, platforms);
|
|
344
364
|
const execution = loadExecutionResults(root, options.resultFiles ?? []);
|
|
365
|
+
// One file cache serves both the evidence defects and the coverage count,
|
|
366
|
+
// so each mapped file is read once no matter how large the manifest.
|
|
367
|
+
const cache = new Map();
|
|
368
|
+
const unresolved = unresolvedEvidenceKeys({ root, contract, cache });
|
|
345
369
|
const report = buildReport({
|
|
346
370
|
scenarios,
|
|
347
371
|
contract,
|
|
348
372
|
runs: execution.runs,
|
|
349
373
|
platforms,
|
|
374
|
+
unresolved,
|
|
350
375
|
});
|
|
351
376
|
const defects = [
|
|
352
377
|
...(versionDefect ? [versionDefect] : []),
|
|
353
378
|
...validateAdoption(contract, mode, options.today),
|
|
354
379
|
...execution.defects,
|
|
355
|
-
...
|
|
380
|
+
...floorIntegrityDefects(report),
|
|
381
|
+
...validateAll({ root, contract, scenarios, platforms, options, cache }),
|
|
356
382
|
...(mode === "enforced"
|
|
357
383
|
? enforcedDefects({ contract, scenarios, report, platforms })
|
|
358
384
|
: []),
|
package/package.json
CHANGED
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
}
|
|
121
121
|
},
|
|
122
122
|
"name": "@codyswann/lisa",
|
|
123
|
-
"version": "2.349.
|
|
123
|
+
"version": "2.349.1",
|
|
124
124
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
125
125
|
"main": "dist/index.js",
|
|
126
126
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.349.
|
|
3
|
+
"version": "2.349.1",
|
|
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": "2.349.
|
|
3
|
+
"version": "2.349.1",
|
|
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": "2.349.
|
|
3
|
+
"version": "2.349.1",
|
|
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": "2.349.
|
|
3
|
+
"version": "2.349.1",
|
|
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": "2.349.
|
|
3
|
+
"version": "2.349.1",
|
|
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"
|