@codyswann/lisa 3.67.0 → 3.69.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/all/copy-overwrite/scripts/lisa-gates.mjs +276 -8
- package/dist/codex/scripts/format-on-edit.sh +28 -0
- package/dist/codex/scripts/lint-on-edit.sh +28 -0
- package/dist/codex/scripts/lisa-edit-gate.sh +152 -0
- package/dist/codex/scripts/rubocop-on-edit.sh +28 -0
- package/dist/codex/scripts/sg-scan-on-edit.sh +28 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +2 -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 +30 -6
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- 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/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/hooks/lisa-edit-gate.sh +152 -0
- 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/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-rails/hooks/rubocop-on-edit.sh +23 -0
- package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +23 -0
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-rails-copilot/hooks/rubocop-on-edit.sh +23 -0
- package/plugins/lisa-rails-copilot/hooks/sg-scan-on-edit.sh +23 -0
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-rails-cursor/hooks/rubocop-on-edit.sh +23 -0
- package/plugins/lisa-rails-cursor/hooks/sg-scan-on-edit.sh +23 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/hooks/format-on-edit.sh +23 -0
- package/plugins/lisa-typescript/hooks/lint-on-edit.sh +23 -0
- package/plugins/lisa-typescript/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-typescript/hooks/sg-scan-on-edit.sh +23 -0
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/hooks/format-on-edit.sh +23 -0
- package/plugins/lisa-typescript-copilot/hooks/lint-on-edit.sh +23 -0
- package/plugins/lisa-typescript-copilot/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-typescript-copilot/hooks/sg-scan-on-edit.sh +23 -0
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/hooks/format-on-edit.sh +23 -0
- package/plugins/lisa-typescript-cursor/hooks/lint-on-edit.sh +23 -0
- package/plugins/lisa-typescript-cursor/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-typescript-cursor/hooks/sg-scan-on-edit.sh +23 -0
- 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/nestjs/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/src/rails/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/src/rails/hooks/rubocop-on-edit.sh +23 -0
- package/plugins/src/rails/hooks/sg-scan-on-edit.sh +23 -0
- package/plugins/src/typescript/hooks/format-on-edit.sh +23 -0
- package/plugins/src/typescript/hooks/lint-on-edit.sh +23 -0
- package/plugins/src/typescript/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/src/typescript/hooks/sg-scan-on-edit.sh +23 -0
|
@@ -1349,14 +1349,20 @@ function onEditInvocation(gate, artifact, command) {
|
|
|
1349
1349
|
job: null,
|
|
1350
1350
|
command,
|
|
1351
1351
|
steps: Object.freeze([]),
|
|
1352
|
-
// Nothing to seed, and the
|
|
1353
|
-
//
|
|
1354
|
-
//
|
|
1355
|
-
//
|
|
1356
|
-
//
|
|
1357
|
-
//
|
|
1352
|
+
// Nothing to seed, and the reason has changed TWICE now, which is why it
|
|
1353
|
+
// is written down rather than implied. It was "no gate lists this moment";
|
|
1354
|
+
// then it was "the scripts read no declaration at all"; it is now neither.
|
|
1355
|
+
// A declaration IS read and IS honoured — what nothing reproduces is the
|
|
1356
|
+
// built-in itself, a per-file tool invocation (`oxlint <edited-file>`) that
|
|
1357
|
+
// no package task ships an equivalent of. Seeding the registry default
|
|
1358
|
+
// would declare a whole-project run in place of a per-file one, which is a
|
|
1359
|
+
// different command wearing the same name.
|
|
1358
1360
|
seedRun: Object.freeze([]),
|
|
1359
|
-
|
|
1361
|
+
// CONSULTS, since the façade landed. These scripts resolve the project's
|
|
1362
|
+
// declaration before touching their own tool, and fall back to it when
|
|
1363
|
+
// nothing is declared — the same shape as the pre-push and workflow
|
|
1364
|
+
// fallbacks, on the surface that had no configurability at all.
|
|
1365
|
+
facade: CONSULTS_THEN_FALLS_BACK,
|
|
1360
1366
|
});
|
|
1361
1367
|
}
|
|
1362
1368
|
|
|
@@ -2569,6 +2575,233 @@ function validateAwaitedContexts(gates) {
|
|
|
2569
2575
|
return problems;
|
|
2570
2576
|
}
|
|
2571
2577
|
|
|
2578
|
+
/**
|
|
2579
|
+
* How a declaration resolves to something able to run it.
|
|
2580
|
+
*
|
|
2581
|
+
* Five answers, and the separations are the whole value. A check that collapsed
|
|
2582
|
+
* them would rediscover "no runner exists for the deploy families" and file it
|
|
2583
|
+
* as an orphan — a different defect with its own issue — or call a property
|
|
2584
|
+
* proved by a step inside another job unenforced, which is worse than silence
|
|
2585
|
+
* because it is confidently wrong.
|
|
2586
|
+
*/
|
|
2587
|
+
const EXECUTABLE = "executable";
|
|
2588
|
+
const ORPHANED = "orphaned";
|
|
2589
|
+
const NO_RUNNER_FOR_MOMENT = "no-runner-for-moment";
|
|
2590
|
+
const OUTSIDE_FACADE = "outside-facade";
|
|
2591
|
+
const VACUOUS_PROVER = "vacuous-prover";
|
|
2592
|
+
|
|
2593
|
+
export const EXECUTOR_VERDICTS = Object.freeze([
|
|
2594
|
+
EXECUTABLE,
|
|
2595
|
+
ORPHANED,
|
|
2596
|
+
NO_RUNNER_FOR_MOMENT,
|
|
2597
|
+
OUTSIDE_FACADE,
|
|
2598
|
+
VACUOUS_PROVER,
|
|
2599
|
+
]);
|
|
2600
|
+
|
|
2601
|
+
/**
|
|
2602
|
+
* Verdicts that make a declaration a configuration ERROR.
|
|
2603
|
+
*
|
|
2604
|
+
* The other two are facts about Lisa, not about the project: a moment family
|
|
2605
|
+
* with no runner yet is a roadmap item with its own issue, and a property
|
|
2606
|
+
* proved outside the façade IS enforced. Refusing either would turn a report
|
|
2607
|
+
* about the project's governance into a report about Lisa's backlog.
|
|
2608
|
+
*/
|
|
2609
|
+
const BLOCKING_VERDICTS = Object.freeze([ORPHANED, VACUOUS_PROVER]);
|
|
2610
|
+
|
|
2611
|
+
/** Moment families whose executor is the generic hook runner. */
|
|
2612
|
+
const HOOK_RUNNER_MOMENTS = Object.freeze([
|
|
2613
|
+
SESSION_START,
|
|
2614
|
+
PRE_TOOL,
|
|
2615
|
+
POST_TOOL,
|
|
2616
|
+
COMMIT,
|
|
2617
|
+
PUSH,
|
|
2618
|
+
]);
|
|
2619
|
+
|
|
2620
|
+
/**
|
|
2621
|
+
* Gates whose only prover reports findings and cannot fail.
|
|
2622
|
+
*
|
|
2623
|
+
* A declaration in front of a prover with a guaranteed-zero exit reads as
|
|
2624
|
+
* governed everywhere that reads the registry while proving nothing — the
|
|
2625
|
+
* vacuous green this whole subsystem exists to refuse. `required` in front of
|
|
2626
|
+
* one is refused outright; `optional` is reported, because "advisory, and we
|
|
2627
|
+
* know" is a coherent position and "required, proved by something that cannot
|
|
2628
|
+
* fail" is not.
|
|
2629
|
+
*
|
|
2630
|
+
* The value is the operator-readable reason, and it names the prover, because a
|
|
2631
|
+
* refusal that does not say WHICH executor is advisory sends the reader to the
|
|
2632
|
+
* gate — which is not the thing that is wrong.
|
|
2633
|
+
*/
|
|
2634
|
+
export const ADVISORY_PROVERS = Object.freeze({
|
|
2635
|
+
"version-duplication":
|
|
2636
|
+
"duplicate-versions.yml runs in advisory mode: it reports duplicates and " +
|
|
2637
|
+
"exits 0 whatever it finds. Nothing it can discover will fail a check, so " +
|
|
2638
|
+
"a required declaration in front of it is a guarantee of nothing. The " +
|
|
2639
|
+
"pairing becomes valid when that workflow runs with --strict.",
|
|
2640
|
+
});
|
|
2641
|
+
|
|
2642
|
+
/**
|
|
2643
|
+
* Gates proved by a step inside a job the façade does not represent.
|
|
2644
|
+
*
|
|
2645
|
+
* A THIRD thing, distinct from both "executable" and "orphaned", and the
|
|
2646
|
+
* distinction is not academic: `conflict-residue` was exactly this case until a
|
|
2647
|
+
* dedicated job was built for it — proved by a step inside a multi-purpose
|
|
2648
|
+
* workflow — and a classifier without this verdict would have called it an
|
|
2649
|
+
* orphan and implied the property was unenforced. It was not.
|
|
2650
|
+
*
|
|
2651
|
+
* The value says where the prover lives, so the report can say "proved
|
|
2652
|
+
* elsewhere" rather than "proved by nothing".
|
|
2653
|
+
*
|
|
2654
|
+
* EMPTY TODAY, deliberately and visibly. The one member it had was retired by
|
|
2655
|
+
* being given a real job. The verdict stays because the shape recurs, and
|
|
2656
|
+
* `tests/unit/scripts/lisa-gates-declared-executors` exercises it against a
|
|
2657
|
+
* synthetic entry rather than leaving a branch nothing reaches.
|
|
2658
|
+
*/
|
|
2659
|
+
export const PROVED_OUTSIDE_FACADE = Object.freeze({});
|
|
2660
|
+
|
|
2661
|
+
/**
|
|
2662
|
+
* The level one moment entry declares.
|
|
2663
|
+
* @param {unknown} entry The value under a moment key.
|
|
2664
|
+
* @returns {string} The level, or the empty string when it declares none.
|
|
2665
|
+
*/
|
|
2666
|
+
function declaredLevel(entry) {
|
|
2667
|
+
if (typeof entry === "string") return entry;
|
|
2668
|
+
if (entry !== null && typeof entry === "object") {
|
|
2669
|
+
const { level } = entry;
|
|
2670
|
+
if (typeof level === "string") return level;
|
|
2671
|
+
}
|
|
2672
|
+
return "";
|
|
2673
|
+
}
|
|
2674
|
+
|
|
2675
|
+
/**
|
|
2676
|
+
* The task one gate resolves to, honouring a `run:` override.
|
|
2677
|
+
* @param {string} gate Gate id.
|
|
2678
|
+
* @param {object} block The gate's own block from the config.
|
|
2679
|
+
* @returns {string|undefined} The task name.
|
|
2680
|
+
*/
|
|
2681
|
+
function declaredTask(gate, block) {
|
|
2682
|
+
const override =
|
|
2683
|
+
block !== null && typeof block === "object" ? block.run : undefined;
|
|
2684
|
+
return typeof override === "string" ? override : REGISTRY[gate]?.task;
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2687
|
+
/**
|
|
2688
|
+
* Classify every declaration by whether anything can execute it.
|
|
2689
|
+
*
|
|
2690
|
+
* MOMENT-AWARE, or it is wrong on its first run. The hook moments have a
|
|
2691
|
+
* generic executor — `lisa-run-gates.mjs` resolves whatever a moment declares
|
|
2692
|
+
* and runs `<runner> <task>` — so a declaration there needs a TASK. The
|
|
2693
|
+
* pull-request moment has no such runner: it has one hand-written block per
|
|
2694
|
+
* gate and `QUALITY_JOB_GATES` is the record of which ones exist, so a
|
|
2695
|
+
* declaration there needs a JOB. A check asking the pull-request question at
|
|
2696
|
+
* every moment flags declarations that work.
|
|
2697
|
+
*
|
|
2698
|
+
* `off` is skipped, and for a sharper reason than tidiness: it is a declaration
|
|
2699
|
+
* NOT to run and the only route that removes the required context along with
|
|
2700
|
+
* the job, which is what makes it the safe alternative to `skip_jobs`.
|
|
2701
|
+
* Demanding an executor for it would argue against the mechanism this check
|
|
2702
|
+
* exists to protect.
|
|
2703
|
+
*
|
|
2704
|
+
* `await` is skipped because it asks for nothing to be run — its prover is an
|
|
2705
|
+
* external app, which is the entire meaning of awaiting. `validateGates`
|
|
2706
|
+
* already refuses a malformed await.
|
|
2707
|
+
*
|
|
2708
|
+
* `scripts` of `null` means UNKNOWN, not empty, and nothing is reported from
|
|
2709
|
+
* it. A manifest this process could not read must never make every hook-moment
|
|
2710
|
+
* declaration look like an orphan.
|
|
2711
|
+
* @param {object} options Inputs.
|
|
2712
|
+
* @param {object} options.gates The gates block.
|
|
2713
|
+
* @param {Record<string, string>|null} [options.scripts] The project's package scripts, or null when unknown.
|
|
2714
|
+
* @param {Record<string, string>} [options.outsideFacade] Gates proved by a step the façade does not represent. A SEAM, not configuration: the shipped table is empty today, and a branch nothing can reach is a branch nothing tests.
|
|
2715
|
+
* @returns {Array<{gate: string, moment: string, level: string, verdict: string, detail: string}>} One finding per declaration that is not plainly executable.
|
|
2716
|
+
*/
|
|
2717
|
+
export function classifyDeclaredExecutors({
|
|
2718
|
+
gates,
|
|
2719
|
+
scripts,
|
|
2720
|
+
outsideFacade = PROVED_OUTSIDE_FACADE,
|
|
2721
|
+
}) {
|
|
2722
|
+
const findings = [];
|
|
2723
|
+
for (const [gate, block] of Object.entries(gates ?? {})) {
|
|
2724
|
+
if (!Object.hasOwn(REGISTRY, gate)) continue;
|
|
2725
|
+
if (block === null || typeof block !== "object") continue;
|
|
2726
|
+
for (const [moment, entry] of Object.entries(block)) {
|
|
2727
|
+
// The deploy families are NOT in `MOMENTS` — `isMoment` alone skips
|
|
2728
|
+
// them, which would silently exempt exactly the declarations the
|
|
2729
|
+
// `no-runner-for-moment` verdict exists to report. The configuration
|
|
2730
|
+
// keys that are not moments at all (`run`, `needs`, `evidence`) fall out
|
|
2731
|
+
// of both checks.
|
|
2732
|
+
if (!isMoment(moment) && !MOMENT_FAMILIES.includes(momentFamily(moment)))
|
|
2733
|
+
continue;
|
|
2734
|
+
const level = declaredLevel(entry);
|
|
2735
|
+
if (level === "off") continue;
|
|
2736
|
+
if (entry !== null && typeof entry === "object" && entry.await) continue;
|
|
2737
|
+
const finding = verdictFor({
|
|
2738
|
+
gate,
|
|
2739
|
+
block,
|
|
2740
|
+
moment,
|
|
2741
|
+
level,
|
|
2742
|
+
scripts,
|
|
2743
|
+
outsideFacade,
|
|
2744
|
+
});
|
|
2745
|
+
if (finding !== null) findings.push(finding);
|
|
2746
|
+
}
|
|
2747
|
+
}
|
|
2748
|
+
return findings;
|
|
2749
|
+
}
|
|
2750
|
+
|
|
2751
|
+
/**
|
|
2752
|
+
* One declaration's verdict, or null when it is plainly executable.
|
|
2753
|
+
* @param {object} options The declaration.
|
|
2754
|
+
* @param {string} options.gate Gate id.
|
|
2755
|
+
* @param {object} options.block The gate's block.
|
|
2756
|
+
* @param {string} options.moment Declared moment.
|
|
2757
|
+
* @param {string} options.level Declared level.
|
|
2758
|
+
* @param {Record<string, string>|null|undefined} options.scripts Project scripts.
|
|
2759
|
+
* @param {Record<string, string>} options.outsideFacade Gates proved outside the façade.
|
|
2760
|
+
* @returns {{gate: string, moment: string, level: string, verdict: string, detail: string}|null} The finding.
|
|
2761
|
+
*/
|
|
2762
|
+
function verdictFor({ gate, block, moment, level, scripts, outsideFacade }) {
|
|
2763
|
+
const make = (verdict, detail) => ({ gate, moment, level, verdict, detail });
|
|
2764
|
+
if (level === "required" && Object.hasOwn(ADVISORY_PROVERS, gate)) {
|
|
2765
|
+
return make(VACUOUS_PROVER, ADVISORY_PROVERS[gate]);
|
|
2766
|
+
}
|
|
2767
|
+
if (Object.hasOwn(outsideFacade, gate)) {
|
|
2768
|
+
return make(
|
|
2769
|
+
OUTSIDE_FACADE,
|
|
2770
|
+
`${gate} is proved by ${outsideFacade[gate]}, which the gate ` +
|
|
2771
|
+
`façade does not represent. The property IS enforced; nothing here ` +
|
|
2772
|
+
`runs it.`
|
|
2773
|
+
);
|
|
2774
|
+
}
|
|
2775
|
+
const family = momentFamily(moment);
|
|
2776
|
+
if (HOOK_RUNNER_MOMENTS.includes(family)) {
|
|
2777
|
+
if (scripts === null || scripts === undefined) return null;
|
|
2778
|
+
const task = declaredTask(gate, block);
|
|
2779
|
+
if (task !== undefined && Object.hasOwn(scripts, task)) return null;
|
|
2780
|
+
return make(
|
|
2781
|
+
ORPHANED,
|
|
2782
|
+
`gates."${gate}"."${moment}" resolves to the task "${task}", and this ` +
|
|
2783
|
+
`project has no such script. The hook runner would find nothing to ` +
|
|
2784
|
+
`run, so the level in front of it describes nothing.`
|
|
2785
|
+
);
|
|
2786
|
+
}
|
|
2787
|
+
if (family === PULL_REQUEST) {
|
|
2788
|
+
if (Object.values(QUALITY_JOB_GATES).includes(gate)) return null;
|
|
2789
|
+
return make(
|
|
2790
|
+
ORPHANED,
|
|
2791
|
+
`gates."${gate}"."${moment}" is declared at a moment whose executor is a ` +
|
|
2792
|
+
`CI job, and no job resolves this gate id. A "required" level here ` +
|
|
2793
|
+
`derives a branch-protection context nothing will ever post, which ` +
|
|
2794
|
+
`holds every pull request at "Expected — Waiting for status to be ` +
|
|
2795
|
+
`reported" indefinitely.`
|
|
2796
|
+
);
|
|
2797
|
+
}
|
|
2798
|
+
return make(
|
|
2799
|
+
NO_RUNNER_FOR_MOMENT,
|
|
2800
|
+
`nothing runs gates at "${moment}" at all yet, so this declaration is ` +
|
|
2801
|
+
`inert rather than wrong. A different defect, tracked separately.`
|
|
2802
|
+
);
|
|
2803
|
+
}
|
|
2804
|
+
|
|
2572
2805
|
/**
|
|
2573
2806
|
* Fail fast when a consumer tries to use an invalid gates block.
|
|
2574
2807
|
*
|
|
@@ -3424,7 +3657,42 @@ function main() {
|
|
|
3424
3657
|
// suppress "configuration is valid" for every project that ever runs this,
|
|
3425
3658
|
// which turns the verdict into noise and trains an operator to ignore both.
|
|
3426
3659
|
reportUngoverned(gates);
|
|
3427
|
-
const
|
|
3660
|
+
const executors = classifyDeclaredExecutors({ gates, scripts });
|
|
3661
|
+
// BLOCKING, and this is the change #2843 called "the substantive work".
|
|
3662
|
+
// The classifier existed as a vitest suite reading THIS repository's own
|
|
3663
|
+
// config — so the check existed for Lisa and did not exist for anyone Lisa
|
|
3664
|
+
// ships to. A consumer could declare a gate no job resolves, run
|
|
3665
|
+
// `validate`, get exit 0, and be told nothing.
|
|
3666
|
+
//
|
|
3667
|
+
// Only two verdicts block. `no-runner-for-moment` is a different defect
|
|
3668
|
+
// with its own issue, and `outside-facade` says the property IS enforced
|
|
3669
|
+
// — refusing either would turn a report about governance into a report
|
|
3670
|
+
// about Lisa's own roadmap.
|
|
3671
|
+
const unrunnable = executors.filter(finding =>
|
|
3672
|
+
BLOCKING_VERDICTS.includes(finding.verdict)
|
|
3673
|
+
);
|
|
3674
|
+
// The two non-blocking verdicts print HERE rather than as advisory
|
|
3675
|
+
// findings. An advisory finding suppresses "configuration is valid", and
|
|
3676
|
+
// both of these are statements about Lisa — a moment family with no runner
|
|
3677
|
+
// yet, and a property proved outside the façade — so letting them withhold
|
|
3678
|
+
// the verdict would make it unreachable for projects that have done
|
|
3679
|
+
// nothing wrong.
|
|
3680
|
+
for (const finding of executors.filter(
|
|
3681
|
+
candidate => !unrunnable.includes(candidate)
|
|
3682
|
+
)) {
|
|
3683
|
+
console.log(
|
|
3684
|
+
` NOTE gates."${finding.gate}"."${finding.moment}": ${finding.detail}`
|
|
3685
|
+
);
|
|
3686
|
+
}
|
|
3687
|
+
const blocking = [
|
|
3688
|
+
...validateGates(gates),
|
|
3689
|
+
...validatePolicy(policy),
|
|
3690
|
+
...unrunnable.map(
|
|
3691
|
+
finding =>
|
|
3692
|
+
`gates."${finding.gate}"."${finding.moment}" is declared ` +
|
|
3693
|
+
`"${finding.level}" and is UNRUNNABLE at that moment: ${finding.detail}`
|
|
3694
|
+
),
|
|
3695
|
+
];
|
|
3428
3696
|
const advisory = [
|
|
3429
3697
|
...auditConfigKeys(config).map(finding => finding.message),
|
|
3430
3698
|
...auditProvers({ gates, runner, scripts }),
|
|
@@ -16,6 +16,34 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
16
16
|
# shellcheck source=/dev/null
|
|
17
17
|
. "${SCRIPT_DIR}/_extract-edit-paths.sh"
|
|
18
18
|
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
# Gate façade. The project's declaration decides BEFORE any tool is resolved.
|
|
21
|
+
# Full contract, and why an undeclared project sees no change at all, in
|
|
22
|
+
# lisa-edit-gate.sh beside this file.
|
|
23
|
+
#
|
|
24
|
+
# This surface differs from the Claude one in shape only: one invocation can
|
|
25
|
+
# carry several edited paths, so the declared task runs once per path with
|
|
26
|
+
# LISA_EDITED_FILE set, and a failure on any path is the script's status.
|
|
27
|
+
#
|
|
28
|
+
# All-or-nothing across the properties this script proves: a single invocation
|
|
29
|
+
# that proves more than one stands down only when EVERY one is declared, or it
|
|
30
|
+
# would silently stop proving the others.
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# shellcheck source=/dev/null
|
|
33
|
+
. "${SCRIPT_DIR}/lisa-edit-gate.sh"
|
|
34
|
+
if LISA_GATE_COMMANDS="$(lisa_edit_gate_tasks post-tool format-conformance)"; then
|
|
35
|
+
LISA_GATE_STATUS=0
|
|
36
|
+
while IFS= read -r LISA_GATE_FILE; do
|
|
37
|
+
[ -n "${LISA_GATE_FILE}" ] || continue
|
|
38
|
+
lisa_edit_gate_run "${LISA_GATE_FILE}" "$LISA_GATE_COMMANDS" ||
|
|
39
|
+
LISA_GATE_STATUS=1
|
|
40
|
+
done <<LISA_GATE_PATHS
|
|
41
|
+
$(lisa_extract_edit_paths "$JSON_INPUT")
|
|
42
|
+
LISA_GATE_PATHS
|
|
43
|
+
exit "$LISA_GATE_STATUS"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
|
|
19
47
|
# Resolve the formatter once, up front.
|
|
20
48
|
if [ -x "./node_modules/.bin/prettier" ]; then
|
|
21
49
|
PRETTIER="./node_modules/.bin/prettier"
|
|
@@ -15,6 +15,34 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
15
15
|
# shellcheck source=/dev/null
|
|
16
16
|
. "${SCRIPT_DIR}/_extract-edit-paths.sh"
|
|
17
17
|
|
|
18
|
+
# ---------------------------------------------------------------------------
|
|
19
|
+
# Gate façade. The project's declaration decides BEFORE any tool is resolved.
|
|
20
|
+
# Full contract, and why an undeclared project sees no change at all, in
|
|
21
|
+
# lisa-edit-gate.sh beside this file.
|
|
22
|
+
#
|
|
23
|
+
# This surface differs from the Claude one in shape only: one invocation can
|
|
24
|
+
# carry several edited paths, so the declared task runs once per path with
|
|
25
|
+
# LISA_EDITED_FILE set, and a failure on any path is the script's status.
|
|
26
|
+
#
|
|
27
|
+
# All-or-nothing across the properties this script proves: a single invocation
|
|
28
|
+
# that proves more than one stands down only when EVERY one is declared, or it
|
|
29
|
+
# would silently stop proving the others.
|
|
30
|
+
# ---------------------------------------------------------------------------
|
|
31
|
+
# shellcheck source=/dev/null
|
|
32
|
+
. "${SCRIPT_DIR}/lisa-edit-gate.sh"
|
|
33
|
+
if LISA_GATE_COMMANDS="$(lisa_edit_gate_tasks post-tool code-style)"; then
|
|
34
|
+
LISA_GATE_STATUS=0
|
|
35
|
+
while IFS= read -r LISA_GATE_FILE; do
|
|
36
|
+
[ -n "${LISA_GATE_FILE}" ] || continue
|
|
37
|
+
lisa_edit_gate_run "${LISA_GATE_FILE}" "$LISA_GATE_COMMANDS" ||
|
|
38
|
+
LISA_GATE_STATUS=1
|
|
39
|
+
done <<LISA_GATE_PATHS
|
|
40
|
+
$(lisa_extract_edit_paths "$JSON_INPUT")
|
|
41
|
+
LISA_GATE_PATHS
|
|
42
|
+
exit "$LISA_GATE_STATUS"
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
|
|
18
46
|
if [ -x "./node_modules/.bin/oxlint" ]; then
|
|
19
47
|
OXLINT="./node_modules/.bin/oxlint"
|
|
20
48
|
elif command -v oxlint >/dev/null 2>&1; then
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# This file is managed by Lisa.
|
|
3
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Edit-time gate façade
|
|
6
|
+
# =============================================================================
|
|
7
|
+
# Sourced by every on-edit hook. Answers one question before the hook runs
|
|
8
|
+
# anything: has the project declared what proves this property at this moment,
|
|
9
|
+
# and if so what should run instead of Lisa's written-in tool?
|
|
10
|
+
#
|
|
11
|
+
# WHY THIS EXISTS. Edit time is the highest-frequency enforcement surface Lisa
|
|
12
|
+
# owns and was the one surface with no configurability at all. The scripts
|
|
13
|
+
# resolved a RUNNER (`./node_modules/.bin/oxlint`, else `bunx`/`npx`) and
|
|
14
|
+
# hardcoded the TOOL, which is the inversion the gate registry exists to fix.
|
|
15
|
+
# Worse, they exit 2 — refusing the edit — when the written-in binary or config
|
|
16
|
+
# filename is absent, so a project that lints correctly with something else had
|
|
17
|
+
# every agent write refused until it installed Lisa's choice.
|
|
18
|
+
#
|
|
19
|
+
# THE CONTRACT, and the two halves that matter equally:
|
|
20
|
+
#
|
|
21
|
+
# declared -> the project's task runs and the hook's written-in tool is
|
|
22
|
+
# never consulted, so a missing binary cannot refuse the edit.
|
|
23
|
+
# undeclared -> NOTHING changes. The resolver is not even invoked when no
|
|
24
|
+
# registry is installed, and the hook falls through to exactly
|
|
25
|
+
# the command it ran before. That is the overwhelming majority
|
|
26
|
+
# of projects, and it is the case a façade silently breaks.
|
|
27
|
+
#
|
|
28
|
+
# ALL OR NOTHING FOR A MULTI-PROPERTY SCRIPT. `lisa_edit_gate_tasks` takes every
|
|
29
|
+
# property its caller proves and resolves only when EVERY one is declared. The
|
|
30
|
+
# Rails hook runs `rubocop -a` and then a second pass for unfixable errors — its
|
|
31
|
+
# own header calls it both formatter and linter — so standing down on `code-style`
|
|
32
|
+
# alone would silently stop proving `format-conformance`. Same shape as
|
|
33
|
+
# `lisa_gate_covers test-correctness coverage-adequacy` in the pre-push hook.
|
|
34
|
+
#
|
|
35
|
+
# HOW THE DECLARED TASK LEARNS WHICH FILE WAS EDITED. It does not take an
|
|
36
|
+
# argument: `<runner> <task>` with no arguments is the invocation every other
|
|
37
|
+
# Lisa façade uses, and adding a positional here would make the declaration
|
|
38
|
+
# mean something different at this moment than at every other one. The path is
|
|
39
|
+
# exported as LISA_EDITED_FILE instead, so a project that wants a per-file run
|
|
40
|
+
# can scope its own task and one that does not gets a whole-project run.
|
|
41
|
+
# =============================================================================
|
|
42
|
+
|
|
43
|
+
# Where the gate registry may be installed, in resolution order.
|
|
44
|
+
lisa_edit_gate_registry() {
|
|
45
|
+
for _lisa_candidate in \
|
|
46
|
+
"node_modules/@codyswann/lisa/all/copy-overwrite/scripts/lisa-gates.mjs" \
|
|
47
|
+
"scripts/lisa-gates.mjs" \
|
|
48
|
+
"all/copy-overwrite/scripts/lisa-gates.mjs"
|
|
49
|
+
do
|
|
50
|
+
if [ -f "$_lisa_candidate" ]; then
|
|
51
|
+
printf '%s' "$_lisa_candidate"
|
|
52
|
+
unset _lisa_candidate
|
|
53
|
+
return 0
|
|
54
|
+
fi
|
|
55
|
+
done
|
|
56
|
+
unset _lisa_candidate
|
|
57
|
+
return 1
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# lisa_edit_gate_tasks <moment> <gate-id>...
|
|
61
|
+
#
|
|
62
|
+
# Prints one `<runner> <task>` line per DISTINCT declared task and returns 0,
|
|
63
|
+
# but only when every named gate resolves to a runnable task at <moment>.
|
|
64
|
+
# Returns 1 and prints nothing otherwise — including when no registry is
|
|
65
|
+
# installed, when node is unavailable, and when the resolver itself fails.
|
|
66
|
+
#
|
|
67
|
+
# Fail-safe in the direction that keeps proving things: any doubt returns 1 and
|
|
68
|
+
# the caller runs its built-in. A resolver that could not answer must never read
|
|
69
|
+
# as "the project has this covered".
|
|
70
|
+
lisa_edit_gate_tasks() {
|
|
71
|
+
_lisa_moment="$1"
|
|
72
|
+
shift
|
|
73
|
+
[ -n "$_lisa_moment" ] || { unset _lisa_moment; return 1; }
|
|
74
|
+
[ "$#" -gt 0 ] || { unset _lisa_moment; return 1; }
|
|
75
|
+
# NO SETTINGS FILE, NO SPAWN. Checked before anything else because this is
|
|
76
|
+
# the path essentially every project is on, and it runs on EVERY agent
|
|
77
|
+
# edit: asking the resolver would cost a node process per keystroke-sized
|
|
78
|
+
# write to answer "nothing is declared", which the absent file already
|
|
79
|
+
# answers. The equivalence control compares which COMMAND runs and would
|
|
80
|
+
# not have caught the cost.
|
|
81
|
+
[ -f .lisa.config.json ] || { unset _lisa_moment; return 1; }
|
|
82
|
+
command -v node >/dev/null 2>&1 || { unset _lisa_moment; return 1; }
|
|
83
|
+
|
|
84
|
+
_lisa_registry="$(lisa_edit_gate_registry)" || {
|
|
85
|
+
unset _lisa_moment _lisa_registry
|
|
86
|
+
return 1
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
# EXPORTED, not prefixed. An assignment prefix reaches only the FIRST
|
|
90
|
+
# command of a pipeline, and the filter that reads it is the second — so
|
|
91
|
+
# the prefixed form resolved an empty want-list and every script fell
|
|
92
|
+
# silently back to its built-in, which is a façade that looks wired and is
|
|
93
|
+
# not.
|
|
94
|
+
LISA_GATE_IDS="$*"
|
|
95
|
+
export LISA_GATE_IDS
|
|
96
|
+
_lisa_out="$(
|
|
97
|
+
node "$_lisa_registry" list \
|
|
98
|
+
--moment="$_lisa_moment" --json 2>/dev/null | node -e '
|
|
99
|
+
let raw = "";
|
|
100
|
+
process.stdin.on("data", chunk => { raw += chunk }).on("end", () => {
|
|
101
|
+
let resolved;
|
|
102
|
+
try { resolved = JSON.parse(raw || "[]"); } catch { process.exit(1); }
|
|
103
|
+
const wanted = (process.env.LISA_GATE_IDS || "").split(" ").filter(Boolean);
|
|
104
|
+
const commands = [];
|
|
105
|
+
for (const id of wanted) {
|
|
106
|
+
const hit = resolved.find(gate => gate.id === id);
|
|
107
|
+
// `run` mode with a task is the only shape that PROVES anything here. An
|
|
108
|
+
// awaited gate proves nothing at edit time and an intercepted one is
|
|
109
|
+
// Lisa running it elsewhere; both must leave the built-in in charge.
|
|
110
|
+
if (!hit || hit.mode !== "run" || !hit.command) process.exit(1);
|
|
111
|
+
if (!commands.includes(hit.command)) commands.push(hit.command);
|
|
112
|
+
}
|
|
113
|
+
if (commands.length === 0) process.exit(1);
|
|
114
|
+
process.stdout.write(commands.join("\n"));
|
|
115
|
+
});
|
|
116
|
+
'
|
|
117
|
+
)" || {
|
|
118
|
+
unset _lisa_moment _lisa_registry _lisa_out
|
|
119
|
+
return 1
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
[ -n "$_lisa_out" ] || {
|
|
123
|
+
unset _lisa_moment _lisa_registry _lisa_out
|
|
124
|
+
return 1
|
|
125
|
+
}
|
|
126
|
+
printf '%s' "$_lisa_out"
|
|
127
|
+
unset _lisa_moment _lisa_registry _lisa_out
|
|
128
|
+
return 0
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
# lisa_edit_gate_run <edited-file> <commands>
|
|
132
|
+
#
|
|
133
|
+
# Runs each resolved command with LISA_EDITED_FILE exported. Exits 2 on the
|
|
134
|
+
# first failure, which is the same refusal the built-in path uses, so a
|
|
135
|
+
# declared task that finds a real problem still stops the agent.
|
|
136
|
+
lisa_edit_gate_run() {
|
|
137
|
+
_lisa_file="$1"
|
|
138
|
+
shift
|
|
139
|
+
LISA_EDITED_FILE="$_lisa_file"
|
|
140
|
+
export LISA_EDITED_FILE
|
|
141
|
+
printf '%s\n' "$*" | while IFS= read -r _lisa_command; do
|
|
142
|
+
[ -n "$_lisa_command" ] || continue
|
|
143
|
+
echo "Running declared gate task: $_lisa_command"
|
|
144
|
+
# Deliberate word split: the resolver validated both halves as plain
|
|
145
|
+
# words, so no shell metacharacter reaches argv.
|
|
146
|
+
# shellcheck disable=SC2086
|
|
147
|
+
$_lisa_command || exit 2
|
|
148
|
+
done
|
|
149
|
+
_lisa_status=$?
|
|
150
|
+
unset _lisa_file _lisa_command
|
|
151
|
+
return $_lisa_status
|
|
152
|
+
}
|
|
@@ -16,6 +16,34 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
16
16
|
# shellcheck source=/dev/null
|
|
17
17
|
. "${SCRIPT_DIR}/_extract-edit-paths.sh"
|
|
18
18
|
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
# Gate façade. The project's declaration decides BEFORE any tool is resolved.
|
|
21
|
+
# Full contract, and why an undeclared project sees no change at all, in
|
|
22
|
+
# lisa-edit-gate.sh beside this file.
|
|
23
|
+
#
|
|
24
|
+
# This surface differs from the Claude one in shape only: one invocation can
|
|
25
|
+
# carry several edited paths, so the declared task runs once per path with
|
|
26
|
+
# LISA_EDITED_FILE set, and a failure on any path is the script's status.
|
|
27
|
+
#
|
|
28
|
+
# All-or-nothing across the properties this script proves: a single invocation
|
|
29
|
+
# that proves more than one stands down only when EVERY one is declared, or it
|
|
30
|
+
# would silently stop proving the others.
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# shellcheck source=/dev/null
|
|
33
|
+
. "${SCRIPT_DIR}/lisa-edit-gate.sh"
|
|
34
|
+
if LISA_GATE_COMMANDS="$(lisa_edit_gate_tasks post-tool code-style format-conformance)"; then
|
|
35
|
+
LISA_GATE_STATUS=0
|
|
36
|
+
while IFS= read -r LISA_GATE_FILE; do
|
|
37
|
+
[ -n "${LISA_GATE_FILE}" ] || continue
|
|
38
|
+
lisa_edit_gate_run "${LISA_GATE_FILE}" "$LISA_GATE_COMMANDS" ||
|
|
39
|
+
LISA_GATE_STATUS=1
|
|
40
|
+
done <<LISA_GATE_PATHS
|
|
41
|
+
$(lisa_extract_edit_paths "$JSON_INPUT")
|
|
42
|
+
LISA_GATE_PATHS
|
|
43
|
+
exit "$LISA_GATE_STATUS"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
|
|
19
47
|
if command -v bundle >/dev/null 2>&1 && [ -f "./Gemfile" ]; then
|
|
20
48
|
RUBOCOP=(bundle exec rubocop)
|
|
21
49
|
elif command -v rubocop >/dev/null 2>&1; then
|
|
@@ -16,6 +16,34 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
16
16
|
# shellcheck source=/dev/null
|
|
17
17
|
. "${SCRIPT_DIR}/_extract-edit-paths.sh"
|
|
18
18
|
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
# Gate façade. The project's declaration decides BEFORE any tool is resolved.
|
|
21
|
+
# Full contract, and why an undeclared project sees no change at all, in
|
|
22
|
+
# lisa-edit-gate.sh beside this file.
|
|
23
|
+
#
|
|
24
|
+
# This surface differs from the Claude one in shape only: one invocation can
|
|
25
|
+
# carry several edited paths, so the declared task runs once per path with
|
|
26
|
+
# LISA_EDITED_FILE set, and a failure on any path is the script's status.
|
|
27
|
+
#
|
|
28
|
+
# All-or-nothing across the properties this script proves: a single invocation
|
|
29
|
+
# that proves more than one stands down only when EVERY one is declared, or it
|
|
30
|
+
# would silently stop proving the others.
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# shellcheck source=/dev/null
|
|
33
|
+
. "${SCRIPT_DIR}/lisa-edit-gate.sh"
|
|
34
|
+
if LISA_GATE_COMMANDS="$(lisa_edit_gate_tasks post-tool structural-rules)"; then
|
|
35
|
+
LISA_GATE_STATUS=0
|
|
36
|
+
while IFS= read -r LISA_GATE_FILE; do
|
|
37
|
+
[ -n "${LISA_GATE_FILE}" ] || continue
|
|
38
|
+
lisa_edit_gate_run "${LISA_GATE_FILE}" "$LISA_GATE_COMMANDS" ||
|
|
39
|
+
LISA_GATE_STATUS=1
|
|
40
|
+
done <<LISA_GATE_PATHS
|
|
41
|
+
$(lisa_extract_edit_paths "$JSON_INPUT")
|
|
42
|
+
LISA_GATE_PATHS
|
|
43
|
+
exit "$LISA_GATE_STATUS"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
|
|
19
47
|
if [ -x "./node_modules/.bin/ast-grep" ]; then
|
|
20
48
|
AST_GREP="./node_modules/.bin/ast-grep"
|
|
21
49
|
elif command -v ast-grep >/dev/null 2>&1; then
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAyhBjC,CAAC"}
|
|
@@ -305,6 +305,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
305
305
|
"5d4099e9c6fe5978fba206a069ae6a68d899ef33a57e110ea65e1d4c39328ee1",
|
|
306
306
|
"5f5eeda36a19fc6b99f621128b192d07ec79e4735b4514c9b20ae94a3e29c4b5",
|
|
307
307
|
"60b961b1bd4a01f17fc0c19dd09b2505958bdeaa5c1030868835ac628e77d97f",
|
|
308
|
+
"6d9bc1c708a7cc585e7f8c4539ec28e4a29cbfd9a0c08b5a96760f8f0865453d",
|
|
308
309
|
"7249cbe9f8fddfa6087331fa7fccd9df9813f5ba764623b747273a0ebbcbb576",
|
|
309
310
|
"75b3bed6034e81ece759b4566291f26be9c6f51ebd3444ae9232964588a71a66",
|
|
310
311
|
"78545c144834f42ffa97174fb5a36edb66c63634f738ac5a0890bae8ccd7f2f6",
|
|
@@ -319,6 +320,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
319
320
|
"a5dad9842c65c0949f5f3890fb61a1c26fb2b5bac8616e9242ae3a144c095787",
|
|
320
321
|
"a755c64ed82aec1e1af096c93e51541548d8ad9eafb361469dbe4fc9b1205a61",
|
|
321
322
|
"a8af7e575c086970a50cb389a159946ce1755318035ca2baecd1486f2c5b7dbc",
|
|
323
|
+
"ac6c1a5852cadbc421e34d74879cca70a668dd4c779e205713a43be75360b79e",
|
|
322
324
|
"b19f334763699490cffdc2819b4848a798fcecbce82d19791cd57ea8bc92ffeb",
|
|
323
325
|
"bba52f26e70e0dc399a8ed8ea9cbd3885a18f08401b28bd18871a1af4fbca375",
|
|
324
326
|
"bbb49c8d803179f7081816144011ed1f3752673eb249ff21dd738412f0302e77",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,6EAA6E;AAE7E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAE/B,MAAM,CAAC,MAAM,CAAC;IAChB,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC;QACtC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC;QACxC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC;QACxC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC;QACxC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC;QACxC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7C,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;QACrC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC;QACtC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC;QACtC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC;QACxC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC;QACvC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,gCAAgC,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,oCAAoC,EAAE,MAAM,CAAC,MAAM,CAAC;QAClD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,gCAAgC,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,2CAA2C,EAAE,MAAM,CAAC,MAAM,CAAC;QACzD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,qCAAqC,EAAE,MAAM,CAAC,MAAM,CAAC;QACnD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,yCAAyC,EAAE,MAAM,CAAC,MAAM,CAAC;QACvD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,uCAAuC,EAAE,MAAM,CAAC,MAAM,CAAC;QACrD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC;QACjD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,oCAAoC,EAAE,MAAM,CAAC,MAAM,CAAC;QAClD,kEAAkE;KACnE,CAAC;IACF,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7C,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC;QACjD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC;QACjD,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,oCAAoC,EAAE,MAAM,CAAC,MAAM,CAAC;QAClD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC;QACjD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC;QACtC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,iDAAiD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/D,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,oDAAoD,EAAE,MAAM,CAAC,MAAM,CAAC;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,gDAAgD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9D,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,uCAAuC,EAAE,MAAM,CAAC,MAAM,CAAC;QACrD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,gDAAgD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9D,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,yCAAyC,EAAE,MAAM,CAAC,MAAM,CAAC;QACvD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,qCAAqC,EAAE,MAAM,CAAC,MAAM,CAAC;QACnD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;KACnE,CAAC;IACF,2BAA2B,EAAE,MAAM,CAAC,MAAM,CAAC;QACzC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,8BAA8B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC5C,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC;QACjD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,kCAAkC,EAAE,MAAM,CAAC,MAAM,CAAC;QAChD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1C,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,sDAAsD,EAAE,MAAM,CAAC,MAAM,CAAC;QACpE,kEAAkE;KACnE,CAAC;IACF,oDAAoD,EAAE,MAAM,CAAC,MAAM,CAAC;QAClE,kEAAkE;KACnE,CAAC;IACF,uCAAuC,EAAE,MAAM,CAAC,MAAM,CAAC;QACrD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;CACH,CAAC,CAAC;AACH,sEAAsE"}
|