@codyswann/lisa 4.59.2 → 4.59.3
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/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 +15 -5
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/create-only/.github/workflows/deploy.yml +31 -9
- 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/.codex-plugin/skills/lisa-secrets-access/SKILL.md +12 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
- package/plugins/lisa/skills/lisa-secrets-access/SKILL.md +12 -0
- package/plugins/lisa/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-secrets-access/SKILL.md +12 -0
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -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/skills/lisa-secrets-access/SKILL.md +12 -0
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-secrets-access/SKILL.md +12 -0
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -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/skills/lisa-secrets-access/SKILL.md +12 -0
- package/plugins/src/base/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
- package/scripts/check-workflow-package-paths.mjs +37 -3
- package/scripts/lib/workflow-contract-probe.mjs +11 -0
- package/scripts/two-channel-couplings.json +1 -1
|
@@ -111,6 +111,7 @@ import path from "node:path";
|
|
|
111
111
|
import { boundedExecFileSync } from "./lib/bounded-spawn.mjs";
|
|
112
112
|
import { invokedAsScript } from "./lib/invoked-as-script.mjs";
|
|
113
113
|
import {
|
|
114
|
+
compareVersions,
|
|
114
115
|
declarationGaps,
|
|
115
116
|
probeReleases,
|
|
116
117
|
readContractDeclaration,
|
|
@@ -489,10 +490,17 @@ export function releaseContains(entries, candidate) {
|
|
|
489
490
|
* @param {Record<string, readonly string[]>} listings - Version to entry list
|
|
490
491
|
* @returns {readonly string[]} One operator-readable line per failure
|
|
491
492
|
*/
|
|
492
|
-
export function findBreakages(groups, listings) {
|
|
493
|
+
export function findBreakages(groups, listings, contracts = {}) {
|
|
493
494
|
return Object.entries(listings).flatMap(([version, entries]) =>
|
|
494
495
|
groups
|
|
495
|
-
.filter(
|
|
496
|
+
.filter(
|
|
497
|
+
group =>
|
|
498
|
+
!group.paths.some(
|
|
499
|
+
p =>
|
|
500
|
+
releaseContains(entries, p) ||
|
|
501
|
+
introducedLater(version, contracts[p])
|
|
502
|
+
)
|
|
503
|
+
)
|
|
496
504
|
.map(
|
|
497
505
|
group =>
|
|
498
506
|
`${version}: ${group.workflow} step "${group.step}" resolves ${group.paths
|
|
@@ -504,6 +512,17 @@ export function findBreakages(groups, listings) {
|
|
|
504
512
|
);
|
|
505
513
|
}
|
|
506
514
|
|
|
515
|
+
/** A declared optional feature may predate its package artifact only on known older releases. */
|
|
516
|
+
function introducedLater(version, contract) {
|
|
517
|
+
return (
|
|
518
|
+
/^\d+\.\d+\.\d+$/.test(version) &&
|
|
519
|
+
typeof contract?.since === "string" &&
|
|
520
|
+
typeof contract.degradation === "string" &&
|
|
521
|
+
contract.degradation.length >= 40 &&
|
|
522
|
+
compareVersions(version, contract.since) < 0
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
|
|
507
526
|
/**
|
|
508
527
|
* Run the check.
|
|
509
528
|
* @returns {void}
|
|
@@ -567,7 +586,7 @@ function main() {
|
|
|
567
586
|
});
|
|
568
587
|
|
|
569
588
|
const breakages = [
|
|
570
|
-
...findBreakages(claims.groups, listings),
|
|
589
|
+
...findBreakages(claims.groups, listings, declaration.contracts),
|
|
571
590
|
...gaps.undeclared,
|
|
572
591
|
...gaps.stale,
|
|
573
592
|
...contracts.violations,
|
|
@@ -579,6 +598,19 @@ function main() {
|
|
|
579
598
|
releasesExamined: Object.keys(listings),
|
|
580
599
|
contractProbesExecuted: contracts.executed,
|
|
581
600
|
contractProbesDeferred: contracts.deferred,
|
|
601
|
+
packagePathsDeferred: Object.entries(listings).flatMap(
|
|
602
|
+
([version, entries]) =>
|
|
603
|
+
Object.entries(declaration.contracts)
|
|
604
|
+
.filter(
|
|
605
|
+
([where, contract]) =>
|
|
606
|
+
!releaseContains(entries, where) &&
|
|
607
|
+
introducedLater(version, contract)
|
|
608
|
+
)
|
|
609
|
+
.map(
|
|
610
|
+
([where, contract]) =>
|
|
611
|
+
`${version}: ${where} introduced in ${contract.since}; ${contract.degradation}`
|
|
612
|
+
)
|
|
613
|
+
),
|
|
582
614
|
contractProbesRun: contracts.probed,
|
|
583
615
|
unattributed: claims.unattributed,
|
|
584
616
|
breakages,
|
|
@@ -592,6 +624,8 @@ function main() {
|
|
|
592
624
|
);
|
|
593
625
|
for (const line of contracts.deferred)
|
|
594
626
|
process.stdout.write(` · ${line}\n`);
|
|
627
|
+
for (const line of report.packagePathsDeferred)
|
|
628
|
+
process.stdout.write(` · ${line}\n`);
|
|
595
629
|
for (const line of breakages) process.stdout.write(` ✗ ${line}\n`);
|
|
596
630
|
}
|
|
597
631
|
|
|
@@ -151,6 +151,17 @@ export function readContractDeclaration(declared) {
|
|
|
151
151
|
);
|
|
152
152
|
}
|
|
153
153
|
for (const [where, entry] of Object.entries(contracts)) {
|
|
154
|
+
if (
|
|
155
|
+
entry?.since !== undefined &&
|
|
156
|
+
(typeof entry.since !== "string" ||
|
|
157
|
+
!/^\d+\.\d+\.\d+$/.test(entry.since) ||
|
|
158
|
+
typeof entry.degradation !== "string" ||
|
|
159
|
+
entry.degradation.length < 40)
|
|
160
|
+
) {
|
|
161
|
+
throw new Error(
|
|
162
|
+
`contracts["${where}"]: since needs a release version and degradation must explain the older caller's behavior`
|
|
163
|
+
);
|
|
164
|
+
}
|
|
154
165
|
if (!CONTRACT_KINDS.has(entry?.kind)) {
|
|
155
166
|
throw new Error(
|
|
156
167
|
`contracts["${where}"]: kind must be one of ${[...CONTRACT_KINDS].join(", ")}`
|