@codyswann/lisa 4.64.5 → 4.64.7
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/all/copy-overwrite/scripts/lisa-work-item.mjs +39 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +10 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +4 -3
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/scripts/bdd/baseline.mjs +75 -2
- package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +11 -1
- package/package.json +4 -4
- 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
|
@@ -432,8 +432,16 @@ function routeTaken(key, { retired }) {
|
|
|
432
432
|
* @param {object} input - Baseline plus the head contract and scenarios.
|
|
433
433
|
* @returns {object[]} Defects found.
|
|
434
434
|
*/
|
|
435
|
-
export function checkNewObligations({
|
|
436
|
-
|
|
435
|
+
export function checkNewObligations({
|
|
436
|
+
baseline,
|
|
437
|
+
contract,
|
|
438
|
+
scenarios,
|
|
439
|
+
landed = [],
|
|
440
|
+
}) {
|
|
441
|
+
const before = new Set([
|
|
442
|
+
...obligationKeys(baseline.scenarios, baseline.contract),
|
|
443
|
+
...landed,
|
|
444
|
+
]);
|
|
437
445
|
const covered = acceptedKeys(scenarios, contract);
|
|
438
446
|
return [...obligationKeys(scenarios, contract)]
|
|
439
447
|
.filter(key => !before.has(key) && !covered.has(key))
|
|
@@ -447,6 +455,71 @@ export function checkNewObligations({ baseline, contract, scenarios }) {
|
|
|
447
455
|
});
|
|
448
456
|
}
|
|
449
457
|
|
|
458
|
+
/**
|
|
459
|
+
* Find obligations already landed on a configured deployment branch.
|
|
460
|
+
*
|
|
461
|
+
* Read the branch names from the immutable target base, never the proposed
|
|
462
|
+
* config. Use shared ancestry with fetched remote refs, excluding HEAD itself:
|
|
463
|
+
* the commit being checked cannot establish its own historical exemption.
|
|
464
|
+
* Only uncovered source obligations qualify; source mappings cannot be dropped.
|
|
465
|
+
* This affects only whether an obligation is newly authored. Target coverage,
|
|
466
|
+
* deletion, mapping, waiver and floor checks still use their original inputs.
|
|
467
|
+
* Unreadable history grants no exemption, and uncovered history stays a gap.
|
|
468
|
+
* @param {string} root - Repository root.
|
|
469
|
+
* @param {string} base - Immutable target base revision.
|
|
470
|
+
* @param {string[]} platforms - Platforms declared by the current contract.
|
|
471
|
+
* @returns {string[]} Keys of obligations already present in landed history.
|
|
472
|
+
*/
|
|
473
|
+
export function landedObligations(root, base, platforms) {
|
|
474
|
+
const source = showAtRevision(root, base, ".lisa.config.json");
|
|
475
|
+
if (!source) return [];
|
|
476
|
+
try {
|
|
477
|
+
const branches = JSON.parse(source)?.deploy?.branches;
|
|
478
|
+
if (!branches || typeof branches !== "object" || Array.isArray(branches))
|
|
479
|
+
return [];
|
|
480
|
+
const head = git(root, ["rev-parse", "HEAD"]).stdout.trim();
|
|
481
|
+
const revisions = [
|
|
482
|
+
...new Set(
|
|
483
|
+
Object.values(branches).flatMap(branch => {
|
|
484
|
+
if (typeof branch !== "string") return [];
|
|
485
|
+
const ref = `refs/remotes/origin/${branch}`;
|
|
486
|
+
if (!git(root, ["check-ref-format", ref]).ok) return [];
|
|
487
|
+
const shared = git(root, ["merge-base", ref, "HEAD"]);
|
|
488
|
+
const revision = shared.stdout.trim();
|
|
489
|
+
if (
|
|
490
|
+
!shared.ok ||
|
|
491
|
+
revision === head ||
|
|
492
|
+
git(root, ["merge-base", "--is-ancestor", revision, base]).ok
|
|
493
|
+
)
|
|
494
|
+
return [];
|
|
495
|
+
return [revision];
|
|
496
|
+
})
|
|
497
|
+
),
|
|
498
|
+
];
|
|
499
|
+
const priors = revisions.map(revision =>
|
|
500
|
+
loadBaseline(root, revision, platforms)
|
|
501
|
+
);
|
|
502
|
+
if (priors.some(prior => !prior.available)) return [];
|
|
503
|
+
const accepted = new Set(
|
|
504
|
+
priors.flatMap(prior => [
|
|
505
|
+
...acceptedKeys(prior.scenarios, prior.contract),
|
|
506
|
+
...waivedKeys(prior.contract),
|
|
507
|
+
])
|
|
508
|
+
);
|
|
509
|
+
return [
|
|
510
|
+
...new Set(
|
|
511
|
+
priors.flatMap(prior => [
|
|
512
|
+
...obligationKeys(prior.scenarios, prior.contract),
|
|
513
|
+
])
|
|
514
|
+
),
|
|
515
|
+
].filter(key => !accepted.has(key));
|
|
516
|
+
} catch {
|
|
517
|
+
// probe-direction: fail-closed — unreadable history grants no exemption,
|
|
518
|
+
// so the original newly-uncovered obligation remains a gate failure.
|
|
519
|
+
return [];
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
450
523
|
/**
|
|
451
524
|
* Refuse scenario deletion used to shrink the denominator.
|
|
452
525
|
*
|
|
@@ -62,6 +62,7 @@ import {
|
|
|
62
62
|
subjectFor,
|
|
63
63
|
} from "./bdd/envelope.mjs";
|
|
64
64
|
import {
|
|
65
|
+
landedObligations,
|
|
65
66
|
checkCoverageRegression,
|
|
66
67
|
checkDeletions,
|
|
67
68
|
checkNewObligations,
|
|
@@ -264,6 +265,7 @@ function validateAll({
|
|
|
264
265
|
),
|
|
265
266
|
];
|
|
266
267
|
}
|
|
268
|
+
const newObligations = checkNewObligations({ baseline, contract, scenarios });
|
|
267
269
|
return [
|
|
268
270
|
...defects,
|
|
269
271
|
...checkCoverageRegression({
|
|
@@ -271,7 +273,15 @@ function validateAll({
|
|
|
271
273
|
contract,
|
|
272
274
|
scenarios,
|
|
273
275
|
}),
|
|
274
|
-
...checkNewObligations({
|
|
276
|
+
...checkNewObligations({
|
|
277
|
+
baseline,
|
|
278
|
+
contract,
|
|
279
|
+
scenarios,
|
|
280
|
+
landed:
|
|
281
|
+
newObligations.length === 0
|
|
282
|
+
? []
|
|
283
|
+
: landedObligations(root, options.baseSha, platforms),
|
|
284
|
+
}),
|
|
275
285
|
...checkDeletions({
|
|
276
286
|
baseIds: baseline.scenarioIds,
|
|
277
287
|
scenarios,
|
package/package.json
CHANGED
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"zod-validation-error": "^4.0.0"
|
|
188
188
|
},
|
|
189
189
|
"name": "@codyswann/lisa",
|
|
190
|
-
"version": "4.64.
|
|
190
|
+
"version": "4.64.7",
|
|
191
191
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
192
192
|
"main": "dist/index.js",
|
|
193
193
|
"exports": {
|
|
@@ -336,7 +336,7 @@
|
|
|
336
336
|
"test": "tests"
|
|
337
337
|
},
|
|
338
338
|
"types": "./dist/index.d.ts",
|
|
339
|
-
"lisaReleaseCommit": "
|
|
340
|
-
"gitHead": "
|
|
341
|
-
"lisaReleaseTag": "v4.64.
|
|
339
|
+
"lisaReleaseCommit": "f03682fc0d941b32fbe756fc099471ff12347723",
|
|
340
|
+
"gitHead": "f03682fc0d941b32fbe756fc099471ff12347723",
|
|
341
|
+
"lisaReleaseTag": "v4.64.7"
|
|
342
342
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.64.
|
|
3
|
+
"version": "4.64.7",
|
|
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.64.
|
|
3
|
+
"version": "4.64.7",
|
|
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.64.
|
|
3
|
+
"version": "4.64.7",
|
|
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.64.
|
|
3
|
+
"version": "4.64.7",
|
|
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.64.
|
|
3
|
+
"version": "4.64.7",
|
|
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"
|