@codyswann/lisa 4.38.7 → 4.39.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/lib/gate-failure-diagnosis.mjs +23 -1
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +23 -0
- package/all/copy-overwrite/scripts/lisa-run-gates.mjs +30 -1
- package/all/deletions.json +136 -1
- package/cdk/deletions.json +8 -1
- package/dist/core/config.d.ts +33 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/deletion-basis.d.ts +107 -0
- package/dist/core/deletion-basis.d.ts.map +1 -0
- package/dist/core/deletion-basis.js +81 -0
- package/dist/core/deletion-basis.js.map +1 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +6 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +18 -0
- package/dist/core/lisa.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 +19 -12
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/opencode/plugin-templates/parity-safety-net.sh +23 -0
- package/expo/deletions.json +37 -1
- package/harper-fabric/deletions.json +6 -1
- package/nestjs/deletions.json +12 -1
- package/package.json +6 -5
- package/phaser/deletions.json +6 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/parity-safety-net.sh +23 -0
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +23 -0
- 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-copilot/hooks/parity-safety-net.sh +23 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +23 -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/hooks/parity-safety-net.sh +23 -0
- package/rails/deletions.json +18 -1
- package/scripts/check-deletion-basis.mjs +126 -0
- package/typescript/deletions.json +48 -0
|
@@ -137,6 +137,28 @@ const NO_TESTS_PATTERN = /^[ \t]*No test files found/m;
|
|
|
137
137
|
*/
|
|
138
138
|
const SUMMARY_PATTERN = /^[ \t]*Test Files[ \t]+/m;
|
|
139
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Did this transcript come from a run that executed no test files at all?
|
|
142
|
+
*
|
|
143
|
+
* Exported because the caller needs it on the path this module cannot see.
|
|
144
|
+
* Everything else here runs only once a command has already failed, which is
|
|
145
|
+
* exactly the wrong side for the defect in CodySwannGT/lisa#3715: a runner
|
|
146
|
+
* invoked with `--passWithNoTests` collects nothing and exits **0**, so the
|
|
147
|
+
* runner reports success and the diagnosis below is never reached. The gate
|
|
148
|
+
* then records PASSED for a suite that ran nothing.
|
|
149
|
+
*
|
|
150
|
+
* Both halves are load-bearing, and the second one is why this is a shared
|
|
151
|
+
* predicate rather than a bare `includes`. A transcript that captures a nested
|
|
152
|
+
* runner can carry a child's `No test files found` while its own 826 files ran
|
|
153
|
+
* perfectly well; requiring the summary line to be ABSENT is what stops this
|
|
154
|
+
* being the same non-measurement defect in mirror image.
|
|
155
|
+
* @param {string} output The command's combined output.
|
|
156
|
+
* @returns {boolean} True when the transcript states it ran nothing and reached no verdict.
|
|
157
|
+
*/
|
|
158
|
+
export function ranNoTests(output) {
|
|
159
|
+
return NO_TESTS_PATTERN.test(output) && !SUMMARY_PATTERN.test(output);
|
|
160
|
+
}
|
|
161
|
+
|
|
140
162
|
/**
|
|
141
163
|
* Prefixes a tool uses to say why it stopped, rather than what it measured.
|
|
142
164
|
*
|
|
@@ -711,7 +733,7 @@ function classify(output, code, load, read) {
|
|
|
711
733
|
// Directly below interference and above every measurement signature: a run
|
|
712
734
|
// that executed no test files measured nothing, so its timeouts, its FAIL
|
|
713
735
|
// lines and above all its coverage numbers are artefacts of not having run.
|
|
714
|
-
if (
|
|
736
|
+
if (ranNoTests(output)) {
|
|
715
737
|
return noTestsVerdict(output);
|
|
716
738
|
}
|
|
717
739
|
|
|
@@ -904,6 +904,7 @@ follow_scan() {
|
|
|
904
904
|
redirected=""
|
|
905
905
|
heredoc=0
|
|
906
906
|
stdin_mode=0
|
|
907
|
+
noexec=0
|
|
907
908
|
j=$((i + 1))
|
|
908
909
|
while [ "$j" -lt "$n" ]; do
|
|
909
910
|
follow_unwrap "${toks[j]}"
|
|
@@ -934,13 +935,35 @@ follow_scan() {
|
|
|
934
935
|
*) j=$((j + 1)) ;;
|
|
935
936
|
esac
|
|
936
937
|
;;
|
|
938
|
+
# `-n` is NOEXEC: the shell reads and parses its operand, then exits
|
|
939
|
+
# without running a line of it. So a syntax check is the one shape
|
|
940
|
+
# that puts a path at a command position while provably executing
|
|
941
|
+
# nothing, and following it reads a file the command never runs.
|
|
942
|
+
#
|
|
943
|
+
# This guard hit that on ITSELF: its pattern list is destructive
|
|
944
|
+
# command literals living inside the guard, so `bash -n` on its own
|
|
945
|
+
# source was refused by its own patterns — and the same held for any
|
|
946
|
+
# file documenting destructive commands. See CodySwannGT/lisa#3803.
|
|
947
|
+
#
|
|
948
|
+
# `bash <file>` still executes and is still followed. Noexec is the
|
|
949
|
+
# distinction, not the program: this is not a read-only exemption.
|
|
950
|
+
--noexec) noexec=1; break ;;
|
|
937
951
|
--*) j=$((j + 1)) ;;
|
|
938
952
|
-*c*) inline=1; j=$((j + 1)) ;;
|
|
953
|
+
-*n*) noexec=1; break ;;
|
|
939
954
|
-s | -[a-zA-Z]*s[a-zA-Z]*) stdin_mode=1; j=$((j + 1)) ;;
|
|
940
955
|
-*) j=$((j + 1)) ;;
|
|
941
956
|
*) break ;;
|
|
942
957
|
esac
|
|
943
958
|
done
|
|
959
|
+
if [ "$noexec" -eq 1 ]; then
|
|
960
|
+
# Nothing runs, so there is no script to follow and nothing to fail
|
|
961
|
+
# closed about. Checked before the heredoc and dispatcher arms: those
|
|
962
|
+
# decide WHICH text to read, and here there is no execution at all.
|
|
963
|
+
cmd_pos=0
|
|
964
|
+
i=$((j + 1))
|
|
965
|
+
continue
|
|
966
|
+
fi
|
|
944
967
|
if [ "$heredoc" -eq 1 ] && [ "$inline" -eq 0 ]; then
|
|
945
968
|
cmd_pos=0
|
|
946
969
|
i=$((j + 1))
|
|
@@ -53,7 +53,11 @@ import { tmpdir } from "node:os";
|
|
|
53
53
|
import { dirname, join, relative } from "node:path";
|
|
54
54
|
import { fileURLToPath } from "node:url";
|
|
55
55
|
|
|
56
|
-
import {
|
|
56
|
+
import {
|
|
57
|
+
DIAGNOSIS,
|
|
58
|
+
diagnoseFailure,
|
|
59
|
+
ranNoTests,
|
|
60
|
+
} from "./lib/gate-failure-diagnosis.mjs";
|
|
57
61
|
import {
|
|
58
62
|
killMarkNote,
|
|
59
63
|
recentKillMarks,
|
|
@@ -422,6 +426,31 @@ function stateFor(kind) {
|
|
|
422
426
|
function execute(gate, exec) {
|
|
423
427
|
const { code, output } = normaliseExec(exec(gate.command, gate));
|
|
424
428
|
if (code === 0) {
|
|
429
|
+
// A zero exit is not by itself a measurement. A runner invoked with
|
|
430
|
+
// `--passWithNoTests` — still shipped in the integration scripts of three
|
|
431
|
+
// package templates — collects nothing and exits 0, so the whole diagnosis
|
|
432
|
+
// below is unreachable on the one path that needs it and the gate records
|
|
433
|
+
// PASSED for a suite that ran nothing (CodySwannGT/lisa#3715).
|
|
434
|
+
//
|
|
435
|
+
// Deliberately narrow. This does NOT fire on "collected zero"; it fires
|
|
436
|
+
// only when the runner POSITIVELY SAYS it ran nothing and reached no
|
|
437
|
+
// verdict. A gate whose output carries no such statement — every non-test
|
|
438
|
+
// gate — still passes, which is what keeps the blast radius off them. And
|
|
439
|
+
// an interactive filtered run is not a gate invocation: a project that
|
|
440
|
+
// declared this gate declared that work exists for it.
|
|
441
|
+
if (ranNoTests(output)) {
|
|
442
|
+
return {
|
|
443
|
+
state: STATE.UNPROVABLE,
|
|
444
|
+
detail:
|
|
445
|
+
`${gate.command} (exit 0) — the runner reported it executed ZERO ` +
|
|
446
|
+
`test files, so this run measured nothing. A zero exit here is the ` +
|
|
447
|
+
`runner being told not to mind an empty collection, not evidence ` +
|
|
448
|
+
`the property holds`,
|
|
449
|
+
code: 0,
|
|
450
|
+
diagnosis: DIAGNOSIS.NO_TESTS_RAN,
|
|
451
|
+
evidence: [],
|
|
452
|
+
};
|
|
453
|
+
}
|
|
425
454
|
return {
|
|
426
455
|
state: STATE.PASSED,
|
|
427
456
|
detail: gate.command,
|
package/all/deletions.json
CHANGED
|
@@ -141,5 +141,140 @@
|
|
|
141
141
|
"scripts/setup-deploy-key.sh",
|
|
142
142
|
".coderabbit.yml",
|
|
143
143
|
"HUMAN.md"
|
|
144
|
-
]
|
|
144
|
+
],
|
|
145
|
+
"basis": {
|
|
146
|
+
".claude/commands/project": "needs-review",
|
|
147
|
+
".claude/skills/coding-philosophy": "needs-review",
|
|
148
|
+
".claude/skills/project-add-test-coverage": "needs-review",
|
|
149
|
+
".claude/skills/project-archive": "needs-review",
|
|
150
|
+
".claude/skills/project-bootstrap": "needs-review",
|
|
151
|
+
".claude/skills/project-debrief": "needs-review",
|
|
152
|
+
".claude/skills/project-document": "needs-review",
|
|
153
|
+
".claude/skills/project-execute": "needs-review",
|
|
154
|
+
".claude/skills/project-fix-linter-error": "needs-review",
|
|
155
|
+
".claude/skills/project-implement": "needs-review",
|
|
156
|
+
".claude/skills/project-local-code-review": "needs-review",
|
|
157
|
+
".claude/skills/project-lower-code-complexity": "needs-review",
|
|
158
|
+
".claude/skills/project-plan": "needs-review",
|
|
159
|
+
".claude/skills/project-reduce-max-lines": "needs-review",
|
|
160
|
+
".claude/skills/project-reduce-max-lines-per-function": "needs-review",
|
|
161
|
+
".claude/skills/project-research": "needs-review",
|
|
162
|
+
".claude/skills/project-review": "needs-review",
|
|
163
|
+
".claude/skills/project-setup": "needs-review",
|
|
164
|
+
".claude/skills/project-verify": "needs-review",
|
|
165
|
+
".claude/skills/prompt-complexity-scorer": "needs-review",
|
|
166
|
+
".claude/skills/git:commit": "needs-review",
|
|
167
|
+
".claude/skills/git:commit-and-submit-pr": "needs-review",
|
|
168
|
+
".claude/skills/git:prune": "needs-review",
|
|
169
|
+
".claude/skills/git:submit-pr": "needs-review",
|
|
170
|
+
".claude/skills/jira:create": "needs-review",
|
|
171
|
+
".claude/skills/jira:sync": "needs-review",
|
|
172
|
+
".claude/skills/jira:verify": "needs-review",
|
|
173
|
+
".claude/skills/lisa:review-implementation": "needs-review",
|
|
174
|
+
".claude/skills/plan:add-test-coverage": "needs-review",
|
|
175
|
+
".claude/skills/plan:create": "needs-review",
|
|
176
|
+
".claude/skills/plan:fix-linter-error": "needs-review",
|
|
177
|
+
".claude/skills/plan:implement": "needs-review",
|
|
178
|
+
".claude/skills/plan:local-code-review": "needs-review",
|
|
179
|
+
".claude/skills/plan:lower-code-complexity": "needs-review",
|
|
180
|
+
".claude/skills/plan:reduce-max-lines": "needs-review",
|
|
181
|
+
".claude/skills/plan:reduce-max-lines-per-function": "needs-review",
|
|
182
|
+
".claude/skills/pull-request:review": "needs-review",
|
|
183
|
+
".claude/skills/security:zap-scan": "needs-review",
|
|
184
|
+
".claude/skills/sonarqube:check": "needs-review",
|
|
185
|
+
".claude/skills/sonarqube:fix": "needs-review",
|
|
186
|
+
".claude/skills/tasks:load": "needs-review",
|
|
187
|
+
".claude/skills/tasks:sync": "needs-review",
|
|
188
|
+
".claude/REFERENCE.md": "needs-review",
|
|
189
|
+
".claude/commands/plan/implement.md": "needs-review",
|
|
190
|
+
".claude/rules/plan-governance.md": "needs-review",
|
|
191
|
+
".claude/rules/plan.md": "needs-review",
|
|
192
|
+
".claude/skills/plan-create": "needs-review",
|
|
193
|
+
".claude/skills/plan-implement": "needs-review",
|
|
194
|
+
".claude/agents/architecture-planner.md": "needs-review",
|
|
195
|
+
".claude/agents/codebase-analyzer.md": "needs-review",
|
|
196
|
+
".claude/agents/codebase-locator.md": "needs-review",
|
|
197
|
+
".claude/agents/codebase-pattern-finder.md": "needs-review",
|
|
198
|
+
".claude/agents/consistency-checker.md": "needs-review",
|
|
199
|
+
".claude/agents/product-planner.md": "needs-review",
|
|
200
|
+
".claude/agents/product-reviewer.md": "needs-review",
|
|
201
|
+
".claude/agents/security-planner.md": "needs-review",
|
|
202
|
+
".claude/agents/spec-analyst.md": "needs-review",
|
|
203
|
+
".claude/agents/tech-reviewer.md": "needs-review",
|
|
204
|
+
".claude/agents/test-coverage-agent.md": "needs-review",
|
|
205
|
+
".claude/agents/test-strategist.md": "needs-review",
|
|
206
|
+
".claude/agents/agent-architect.md": "needs-review",
|
|
207
|
+
".claude/agents/architecture-specialist.md": "needs-review",
|
|
208
|
+
".claude/agents/debug-specialist.md": "needs-review",
|
|
209
|
+
".claude/agents/git-history-analyzer.md": "needs-review",
|
|
210
|
+
".claude/agents/hooks-expert.md": "needs-review",
|
|
211
|
+
".claude/agents/implementer.md": "needs-review",
|
|
212
|
+
".claude/agents/learner.md": "needs-review",
|
|
213
|
+
".claude/agents/performance-specialist.md": "needs-review",
|
|
214
|
+
".claude/agents/product-specialist.md": "needs-review",
|
|
215
|
+
".claude/agents/quality-specialist.md": "needs-review",
|
|
216
|
+
".claude/agents/security-specialist.md": "needs-review",
|
|
217
|
+
".claude/agents/skill-evaluator.md": "needs-review",
|
|
218
|
+
".claude/agents/slash-command-architect.md": "needs-review",
|
|
219
|
+
".claude/agents/test-specialist.md": "needs-review",
|
|
220
|
+
".claude/agents/verification-specialist.md": "needs-review",
|
|
221
|
+
".claude/agents/web-search-researcher.md": "needs-review",
|
|
222
|
+
".claude/commands/git": "needs-review",
|
|
223
|
+
".claude/commands/jira": "needs-review",
|
|
224
|
+
".claude/commands/lisa": "needs-review",
|
|
225
|
+
".claude/commands/plan": "needs-review",
|
|
226
|
+
".claude/commands/plans": "needs-review",
|
|
227
|
+
".claude/commands/pull-request": "needs-review",
|
|
228
|
+
".claude/commands/security": "needs-review",
|
|
229
|
+
".claude/commands/sonarqube": "needs-review",
|
|
230
|
+
".claude/commands/tasks": "needs-review",
|
|
231
|
+
".claude/skills/agent-design-best-practices": "needs-review",
|
|
232
|
+
".claude/skills/git-commit": "needs-review",
|
|
233
|
+
".claude/skills/git-commit-and-submit-pr": "needs-review",
|
|
234
|
+
".claude/skills/git-commit-submit-pr-and-verify": "needs-review",
|
|
235
|
+
".claude/skills/git-commit-submit-pr-deploy-and-verify": "needs-review",
|
|
236
|
+
".claude/skills/git-prune": "needs-review",
|
|
237
|
+
".claude/skills/git-submit-pr": "needs-review",
|
|
238
|
+
".claude/skills/jira-add-journey": "needs-review",
|
|
239
|
+
".claude/skills/jira-create": "needs-review",
|
|
240
|
+
".claude/skills/jira-evidence": "needs-review",
|
|
241
|
+
".claude/skills/jira-fix": "needs-review",
|
|
242
|
+
".claude/skills/jira-implement": "needs-review",
|
|
243
|
+
".claude/skills/jira-journey": "needs-review",
|
|
244
|
+
".claude/skills/jira-sync": "needs-review",
|
|
245
|
+
".claude/skills/jira-verify": "needs-review",
|
|
246
|
+
".claude/skills/lisa-review-implementation": "needs-review",
|
|
247
|
+
".claude/skills/plan-add-test-coverage": "needs-review",
|
|
248
|
+
".claude/skills/plan-execute": "needs-review",
|
|
249
|
+
".claude/skills/plan-fix-linter-error": "needs-review",
|
|
250
|
+
".claude/skills/plan-local-code-review": "needs-review",
|
|
251
|
+
".claude/skills/plan-lower-code-complexity": "needs-review",
|
|
252
|
+
".claude/skills/plan-reduce-max-lines": "needs-review",
|
|
253
|
+
".claude/skills/plan-reduce-max-lines-per-function": "needs-review",
|
|
254
|
+
".claude/skills/pull-request-review": "needs-review",
|
|
255
|
+
".claude/skills/security-zap-scan": "needs-review",
|
|
256
|
+
".claude/skills/skill-creator": "needs-review",
|
|
257
|
+
".claude/skills/sonarqube-check": "needs-review",
|
|
258
|
+
".claude/skills/sonarqube-fix": "needs-review",
|
|
259
|
+
".claude/skills/tasks-load": "needs-review",
|
|
260
|
+
".claude/skills/tasks-sync": "needs-review",
|
|
261
|
+
".claude/hooks/check-tired-boss.sh": "needs-review",
|
|
262
|
+
".claude/hooks/debug-hook.sh": "needs-review",
|
|
263
|
+
".claude/hooks/enforce-plan-rules.sh": "needs-review",
|
|
264
|
+
".claude/hooks/notify-ntfy.sh": "needs-review",
|
|
265
|
+
".claude/hooks/setup-jira-cli.sh": "needs-review",
|
|
266
|
+
".claude/hooks/sync-tasks.sh": "needs-review",
|
|
267
|
+
".claude/hooks/ticket-sync-reminder.sh": "needs-review",
|
|
268
|
+
".claude/hooks/track-plan-sessions.sh": "needs-review",
|
|
269
|
+
".claude/hooks/verify-completion.sh": "needs-review",
|
|
270
|
+
".claude/hooks/README.md": "needs-review",
|
|
271
|
+
".claude/rules/verfication.md": "needs-review",
|
|
272
|
+
".claude/rules/lisa.md": "needs-review",
|
|
273
|
+
".claude/rules/base-rules.md": "needs-review",
|
|
274
|
+
".claude/rules/coding-philosophy.md": "needs-review",
|
|
275
|
+
".claude/rules/intent-routing.md": "needs-review",
|
|
276
|
+
".claude/rules/security-audit-handling.md": "needs-review",
|
|
277
|
+
".claude/rules/verification.md": "needs-review",
|
|
278
|
+
".lisa-manifest": "needs-review"
|
|
279
|
+
}
|
|
145
280
|
}
|
package/cdk/deletions.json
CHANGED
|
@@ -5,5 +5,12 @@
|
|
|
5
5
|
"jest.cdk.ts",
|
|
6
6
|
"jest.base.ts",
|
|
7
7
|
"jest.thresholds.json"
|
|
8
|
-
]
|
|
8
|
+
],
|
|
9
|
+
"basis": {
|
|
10
|
+
"jest.config.ts": "needs-review",
|
|
11
|
+
"jest.config.local.ts": "needs-review",
|
|
12
|
+
"jest.cdk.ts": "needs-review",
|
|
13
|
+
"jest.base.ts": "needs-review",
|
|
14
|
+
"jest.thresholds.json": "needs-review"
|
|
15
|
+
}
|
|
9
16
|
}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -272,6 +272,39 @@ export interface DeletionsConfig {
|
|
|
272
272
|
* to any other path is recorded and unused.
|
|
273
273
|
*/
|
|
274
274
|
readonly force?: Readonly<Record<string, string>>;
|
|
275
|
+
/**
|
|
276
|
+
* Why each declared path may be removed, keyed by that path.
|
|
277
|
+
*
|
|
278
|
+
* `deletions.json` authorises a removal by the path being LISTED, and nothing
|
|
279
|
+
* else — the manifest cannot see whether Lisa put that file in a given
|
|
280
|
+
* consumer's repository, because ownership is a per-consumer fact and this is
|
|
281
|
+
* a repo-side artifact. CodySwannGT/lisa#3656 closed the gap for
|
|
282
|
+
* `.github/workflows/` by reading each workflow's own ownership header, which
|
|
283
|
+
* covers 42 of 255 declared paths.
|
|
284
|
+
*
|
|
285
|
+
* The obvious rule for the other 213 — delete only what Lisa still ships —
|
|
286
|
+
* was measured and fails on 95% of them: 11 are attributable to a lane Lisa
|
|
287
|
+
* ships today and 202 are not, because the 202 ARE the point. They are skill
|
|
288
|
+
* trees Lisa renamed, and stranding them leaves every consumer carrying dead
|
|
289
|
+
* directories forever. So ownership stops being inferred and starts being
|
|
290
|
+
* declared, one of:
|
|
291
|
+
*
|
|
292
|
+
* - `owned` — Lisa installs this path today.
|
|
293
|
+
* - `legacy: <reason>` — Lisa shipped it once and no longer does; the reason
|
|
294
|
+
* names the version or ticket.
|
|
295
|
+
* - `needs-review` — declared before this field existed. Authorises removal
|
|
296
|
+
* exactly as before, so no consumer sees a behaviour change, while staying
|
|
297
|
+
* countable as debt rather than passing as classified.
|
|
298
|
+
*
|
|
299
|
+
* An ABSENT basis means "I cannot tell", which is deliberately distinct from
|
|
300
|
+
* "not owned": the uncertain case keeps the file and says so. A path wrongly
|
|
301
|
+
* kept is visible and fixable; a path wrongly deleted is gone from someone
|
|
302
|
+
* else's repository with no undo.
|
|
303
|
+
*
|
|
304
|
+
* A `force` entry is itself a basis and outranks this map.
|
|
305
|
+
* @see core/deletion-basis
|
|
306
|
+
*/
|
|
307
|
+
readonly basis?: Readonly<Record<string, string>>;
|
|
275
308
|
}
|
|
276
309
|
/**
|
|
277
310
|
* Result of a Lisa operation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAE/B;IACF,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,YAAY;IACpB,GAAG,EAAE,YAAY;IACjB,eAAe,EAAE,YAAY;IAC7B,MAAM,EAAE,YAAY;IACpB,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,SAAS;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,YAAY;IACZ,aAAa;IACb,eAAe;IACf,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,KAAK;IACL,OAAO;CACC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,OAAO;IACP,cAAc;IACd,cAAc;CACN,CAAC;AAyBX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,SAAS;IACT,UAAU;IACV,OAAO;CACC,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsC;IAChE,GAAG,EAAE,OAAO;CACb,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,GAAG,cAAc;IACjB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;CAChC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsC;IACvE,IAAI,EAAE,OAAO;CACd,CAAC;AASF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,KAAgB;IAEhB,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAY,QAAQ,CAAC;AAoFjD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,OAAqC;IAErC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACxC,8EAA8E;IAC9E,0CAA0C;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9D,OAAO,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAChF,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why a declared path may be removed from a consumer's repository.
|
|
3
|
+
*
|
|
4
|
+
* `deletions.json` removes host files BY DESTINATION PATH ONLY. The path being
|
|
5
|
+
* listed is the entire authorisation: nothing between the manifest and
|
|
6
|
+
* `fse.remove` looks at the file's contents, its origin, or whether Lisa ever
|
|
7
|
+
* installed it. CodySwannGT/lisa#3656 closed that for `.github/workflows/` by
|
|
8
|
+
* reading each workflow's own ownership header, which covers 42 of 255 declared
|
|
9
|
+
* paths. This module is about the other 213.
|
|
10
|
+
*
|
|
11
|
+
* ## Why the obvious gate is not the fix
|
|
12
|
+
*
|
|
13
|
+
* The natural rule — "only delete what Lisa currently ships" — was measured
|
|
14
|
+
* against `main` and fails on 95% of the manifest: of the 213 non-workflow
|
|
15
|
+
* paths, 11 are attributable to a lane Lisa still ships and 202 are not. The
|
|
16
|
+
* 202 are not marginal. They are `.claude/skills/project-*`,
|
|
17
|
+
* `.claude/skills/git:*`, `.claude/skills/jira:*` and friends — skill trees Lisa
|
|
18
|
+
* renamed. Stranding them leaves every consumer carrying dead directories
|
|
19
|
+
* forever, which is the harm the manifest exists to prevent. A gate that causes
|
|
20
|
+
* the harm it was written to stop is the wrong gate.
|
|
21
|
+
*
|
|
22
|
+
* The reason it fails is structural rather than incidental: ownership is a
|
|
23
|
+
* per-consumer fact and the manifest is a repo-side artifact. Lisa cannot see,
|
|
24
|
+
* from its own tree, whether it put a given file in someone else's repository.
|
|
25
|
+
* No amount of matching logic closes that gap, so this module stops trying to
|
|
26
|
+
* infer ownership and requires it to be DECLARED.
|
|
27
|
+
*
|
|
28
|
+
* ## The grammar
|
|
29
|
+
*
|
|
30
|
+
* Every declared path carries a basis, and `force` counts as one:
|
|
31
|
+
*
|
|
32
|
+
* - `owned` — Lisa installs this path today; the lane is the evidence.
|
|
33
|
+
* - `legacy: <reason>` — Lisa shipped it in an older version and no longer
|
|
34
|
+
* does. The reason names the version or ticket. The honest home for the 202.
|
|
35
|
+
* - `needs-review` — declared before this field existed. Deletes exactly as it
|
|
36
|
+
* did before, so nothing changes for an existing consumer, but it is
|
|
37
|
+
* countable: debt kept visible rather than laundered as classified.
|
|
38
|
+
* - a `force` entry — a ruling that overrides even the workflow ownership gate.
|
|
39
|
+
* Unchanged by this module; its five existing entries keep working verbatim.
|
|
40
|
+
*
|
|
41
|
+
* ## What an ABSENT basis means, and why it keeps
|
|
42
|
+
*
|
|
43
|
+
* Unclassified is not "not owned" — it is "I cannot tell", and the two must be
|
|
44
|
+
* distinguishable or the uncertain case gets silently resolved as one of them.
|
|
45
|
+
* The cheap error is to keep the file: a path wrongly kept is visible and
|
|
46
|
+
* fixable, a path wrongly deleted is gone from someone else's repository with
|
|
47
|
+
* no undo. So an unclassified path is kept and announced.
|
|
48
|
+
*
|
|
49
|
+
* Two rules this deliberately does NOT implement, both learned in #3656:
|
|
50
|
+
*
|
|
51
|
+
* 1. Ownership is never inferred from a filename. A probe of the form "does
|
|
52
|
+
* Lisa ship a file with this name anywhere?" marks the highest-risk paths
|
|
53
|
+
* SAFE precisely because Lisa knows those names.
|
|
54
|
+
* 2. Ownership never keys on "was it modified". "The host has local work here"
|
|
55
|
+
* and "the host has re-armed the hazard" are the same observation on disk;
|
|
56
|
+
* only a declared reason separates them.
|
|
57
|
+
* @module core/deletion-basis
|
|
58
|
+
*/
|
|
59
|
+
import type { DeletionsConfig } from "./config.js";
|
|
60
|
+
/** How a declared deletion path is authorised. */
|
|
61
|
+
export type DeletionBasisKind = "owned" | "legacy" | "needs-review" | "force" | "unclassified";
|
|
62
|
+
/** The resolved basis for one declared path. */
|
|
63
|
+
export interface DeletionBasis {
|
|
64
|
+
readonly kind: DeletionBasisKind;
|
|
65
|
+
/** Prose accompanying a `legacy` or `force` basis; empty otherwise. */
|
|
66
|
+
readonly reason: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve why one declared path may be removed.
|
|
70
|
+
*
|
|
71
|
+
* `force` is checked first and wins: it is the strongest declaration in the
|
|
72
|
+
* manifest, and a path carrying one is authorised whatever else says.
|
|
73
|
+
* @param config - The parsed manifest.
|
|
74
|
+
* @param relativePath - Declared path, spelled as the manifest spells it.
|
|
75
|
+
* @returns The basis, or `unclassified` when the manifest does not say.
|
|
76
|
+
*/
|
|
77
|
+
export declare function resolveDeletionBasis(config: DeletionsConfig, relativePath: string): DeletionBasis;
|
|
78
|
+
/**
|
|
79
|
+
* Whether a resolved basis authorises removal.
|
|
80
|
+
*
|
|
81
|
+
* `needs-review` authorises: this field lands with every existing path already
|
|
82
|
+
* marked, so an existing consumer sees byte-identical behaviour. The gate binds
|
|
83
|
+
* on paths added AFTER it, which is the whole point of shipping the mechanism
|
|
84
|
+
* before the prose.
|
|
85
|
+
* @param basis - A resolved basis.
|
|
86
|
+
* @returns True when the path may be removed.
|
|
87
|
+
*/
|
|
88
|
+
export declare function basisAuthorisesDeletion(basis: DeletionBasis): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Every declared path in one manifest that carries no basis.
|
|
91
|
+
*
|
|
92
|
+
* This is what the authoring gate refuses on. It is deliberately separate from
|
|
93
|
+
* the runtime keep-decision above: the runtime rule is the fail-safe that
|
|
94
|
+
* protects consumers whatever manifest they have, and this is the check that
|
|
95
|
+
* stops an unclassified path being authored in the first place. A single
|
|
96
|
+
* mechanism doing both would have to choose which to be.
|
|
97
|
+
* @param config - The parsed manifest.
|
|
98
|
+
* @returns Unclassified paths, in declaration order.
|
|
99
|
+
*/
|
|
100
|
+
export declare function unclassifiedDeletionPaths(config: DeletionsConfig): readonly string[];
|
|
101
|
+
/**
|
|
102
|
+
* Count declared paths by basis kind, for reporting the outstanding debt.
|
|
103
|
+
* @param config - The parsed manifest.
|
|
104
|
+
* @returns A count per kind, including zeroes.
|
|
105
|
+
*/
|
|
106
|
+
export declare function countDeletionBases(config: DeletionsConfig): Readonly<Record<DeletionBasisKind, number>>;
|
|
107
|
+
//# sourceMappingURL=deletion-basis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deletion-basis.d.ts","sourceRoot":"","sources":["../../src/core/deletion-basis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GACzB,OAAO,GACP,QAAQ,GACR,cAAc,GACd,OAAO,GACP,cAAc,CAAC;AAEnB,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,MAAM,GACnB,aAAa,CAqBf;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAErE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,GACtB,SAAS,MAAM,EAAE,CAMnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,GACtB,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAc7C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const NEEDS_REVIEW = "needs-review";
|
|
2
|
+
const OWNED = "owned";
|
|
3
|
+
const LEGACY_PREFIX = "legacy:";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve why one declared path may be removed.
|
|
6
|
+
*
|
|
7
|
+
* `force` is checked first and wins: it is the strongest declaration in the
|
|
8
|
+
* manifest, and a path carrying one is authorised whatever else says.
|
|
9
|
+
* @param config - The parsed manifest.
|
|
10
|
+
* @param relativePath - Declared path, spelled as the manifest spells it.
|
|
11
|
+
* @returns The basis, or `unclassified` when the manifest does not say.
|
|
12
|
+
*/
|
|
13
|
+
export function resolveDeletionBasis(config, relativePath) {
|
|
14
|
+
const forced = config.force?.[relativePath];
|
|
15
|
+
if (typeof forced === "string" && forced.trim() !== "")
|
|
16
|
+
return { kind: "force", reason: forced };
|
|
17
|
+
const declared = config.basis?.[relativePath];
|
|
18
|
+
if (typeof declared !== "string" || declared.trim() === "")
|
|
19
|
+
return { kind: "unclassified", reason: "" };
|
|
20
|
+
const value = declared.trim();
|
|
21
|
+
if (value === NEEDS_REVIEW)
|
|
22
|
+
return { kind: NEEDS_REVIEW, reason: "" };
|
|
23
|
+
if (value === OWNED)
|
|
24
|
+
return { kind: OWNED, reason: "" };
|
|
25
|
+
if (value.startsWith(LEGACY_PREFIX)) {
|
|
26
|
+
const reason = value.slice(LEGACY_PREFIX.length).trim();
|
|
27
|
+
// A `legacy` basis with no prose is unclassified in substance: the whole
|
|
28
|
+
// point of the kind is that somebody wrote down WHY, and an empty reason
|
|
29
|
+
// is the debt without the marker that makes it countable.
|
|
30
|
+
if (reason === "")
|
|
31
|
+
return { kind: "unclassified", reason: "" };
|
|
32
|
+
return { kind: "legacy", reason };
|
|
33
|
+
}
|
|
34
|
+
return { kind: "unclassified", reason: "" };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether a resolved basis authorises removal.
|
|
38
|
+
*
|
|
39
|
+
* `needs-review` authorises: this field lands with every existing path already
|
|
40
|
+
* marked, so an existing consumer sees byte-identical behaviour. The gate binds
|
|
41
|
+
* on paths added AFTER it, which is the whole point of shipping the mechanism
|
|
42
|
+
* before the prose.
|
|
43
|
+
* @param basis - A resolved basis.
|
|
44
|
+
* @returns True when the path may be removed.
|
|
45
|
+
*/
|
|
46
|
+
export function basisAuthorisesDeletion(basis) {
|
|
47
|
+
return basis.kind !== "unclassified";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Every declared path in one manifest that carries no basis.
|
|
51
|
+
*
|
|
52
|
+
* This is what the authoring gate refuses on. It is deliberately separate from
|
|
53
|
+
* the runtime keep-decision above: the runtime rule is the fail-safe that
|
|
54
|
+
* protects consumers whatever manifest they have, and this is the check that
|
|
55
|
+
* stops an unclassified path being authored in the first place. A single
|
|
56
|
+
* mechanism doing both would have to choose which to be.
|
|
57
|
+
* @param config - The parsed manifest.
|
|
58
|
+
* @returns Unclassified paths, in declaration order.
|
|
59
|
+
*/
|
|
60
|
+
export function unclassifiedDeletionPaths(config) {
|
|
61
|
+
const keep = new Set(config.keep ?? []);
|
|
62
|
+
return (config.paths ?? []).filter(p => !keep.has(p) && !basisAuthorisesDeletion(resolveDeletionBasis(config, p)));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Count declared paths by basis kind, for reporting the outstanding debt.
|
|
66
|
+
* @param config - The parsed manifest.
|
|
67
|
+
* @returns A count per kind, including zeroes.
|
|
68
|
+
*/
|
|
69
|
+
export function countDeletionBases(config) {
|
|
70
|
+
return (config.paths ?? []).reduce((counts, declaredPath) => {
|
|
71
|
+
const { kind } = resolveDeletionBasis(config, declaredPath);
|
|
72
|
+
return { ...counts, [kind]: counts[kind] + 1 };
|
|
73
|
+
}, {
|
|
74
|
+
owned: 0,
|
|
75
|
+
legacy: 0,
|
|
76
|
+
[NEEDS_REVIEW]: 0,
|
|
77
|
+
force: 0,
|
|
78
|
+
unclassified: 0,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=deletion-basis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deletion-basis.js","sourceRoot":"","sources":["../../src/core/deletion-basis.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,CAigCjC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAo6BjC,CAAC"}
|
|
@@ -350,6 +350,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
350
350
|
"b4a0b1a0df6e944313b4a197925a0003fb9aed517fbd5708deda2a2a67f53faf",
|
|
351
351
|
"b93880769e7ac402879200ce80a32095baa38d1fbc47cf17804bd6df49ce3b8a",
|
|
352
352
|
"bc135e1c130844a2e5daf769104e78a42fd804de06ae79b7b50bf357b3d76795",
|
|
353
|
+
"ca4f5084989115c7fe87ce3b8d895938146af6b1d01e11b9b342519d09832d6a",
|
|
353
354
|
"d0ec5b439c3c5118d95c813322593d68fefc395e687a8e203f776662896621fe",
|
|
354
355
|
"d234617dc907bb563455419957f2f419702fcd1c10b9d39e19d5bab8ca962008",
|
|
355
356
|
"e07bab7dc4c4c296e2007cf26fab694b1238545dc37816e88d849606d8f9e760",
|
|
@@ -719,6 +720,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
719
720
|
"b6fbbda29d897a7c39cf0524c91d5c66a47054df32e036f15cdabefdc34ac72a",
|
|
720
721
|
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
721
722
|
"baf3c78b7c333735142cc1a7bc19369f953a4699f7be517bb4e3c12167d5c60b",
|
|
723
|
+
"c0aa42f5e0a15a5d1938369129d0b7f726a4db1a80389d427e6f9647d7cf97fa",
|
|
722
724
|
"c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
|
|
723
725
|
"c57b70eed03b74e7c8335c40b0c2b1102e217e507337b71fcf3d2bec5a450bf8",
|
|
724
726
|
"caea02a07027fc1c74d47e08b36299d369c5c9f7c4043da8828fbca3c64eb2aa",
|
|
@@ -843,6 +845,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
843
845
|
"c8f5c6d9fb3bb341feac51e64fbc14e83233b376eb0a047795cb72d302b771b4",
|
|
844
846
|
"cd79864ea6ccfbf33341d537a08436aefbb9eff55a78bb3ff5002f8b3b9cfe55",
|
|
845
847
|
"d078570b2a7964eb481cd05e118e2a6559968020392c6e570d90cec8f20c5487",
|
|
848
|
+
"daf2f7b54950869632c7ecc02201a0c3fd482195594ae641075dd9718cfdfebd",
|
|
846
849
|
"e00f16cdc399c8ee61c7a3972469fbb4b662e0fff00bd9d3d6910f3f27a5f04c",
|
|
847
850
|
"e429308896cf0450b2e5dfae9a580dde1a8da351503998c07ca3506e8b2ffdce",
|
|
848
851
|
"ed643bb28356e9c3f7e351227e690763d6b5e275a78d232cd9dba2d1fc55cffe",
|
|
@@ -1366,6 +1369,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1366
1369
|
"b4a0b1a0df6e944313b4a197925a0003fb9aed517fbd5708deda2a2a67f53faf",
|
|
1367
1370
|
"b93880769e7ac402879200ce80a32095baa38d1fbc47cf17804bd6df49ce3b8a",
|
|
1368
1371
|
"bc135e1c130844a2e5daf769104e78a42fd804de06ae79b7b50bf357b3d76795",
|
|
1372
|
+
"ca4f5084989115c7fe87ce3b8d895938146af6b1d01e11b9b342519d09832d6a",
|
|
1369
1373
|
"d0ec5b439c3c5118d95c813322593d68fefc395e687a8e203f776662896621fe",
|
|
1370
1374
|
"d234617dc907bb563455419957f2f419702fcd1c10b9d39e19d5bab8ca962008",
|
|
1371
1375
|
"e07bab7dc4c4c296e2007cf26fab694b1238545dc37816e88d849606d8f9e760",
|
|
@@ -1688,6 +1692,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1688
1692
|
"b5505f55a5092f1d451ae5a01ada85a031e5b063d08fc0ce5527d94b67191a60",
|
|
1689
1693
|
"b6fbbda29d897a7c39cf0524c91d5c66a47054df32e036f15cdabefdc34ac72a",
|
|
1690
1694
|
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
1695
|
+
"c0aa42f5e0a15a5d1938369129d0b7f726a4db1a80389d427e6f9647d7cf97fa",
|
|
1691
1696
|
"c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
|
|
1692
1697
|
"c57b70eed03b74e7c8335c40b0c2b1102e217e507337b71fcf3d2bec5a450bf8",
|
|
1693
1698
|
"caea02a07027fc1c74d47e08b36299d369c5c9f7c4043da8828fbca3c64eb2aa",
|
|
@@ -1794,6 +1799,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1794
1799
|
"c8f5c6d9fb3bb341feac51e64fbc14e83233b376eb0a047795cb72d302b771b4",
|
|
1795
1800
|
"cd79864ea6ccfbf33341d537a08436aefbb9eff55a78bb3ff5002f8b3b9cfe55",
|
|
1796
1801
|
"d078570b2a7964eb481cd05e118e2a6559968020392c6e570d90cec8f20c5487",
|
|
1802
|
+
"daf2f7b54950869632c7ecc02201a0c3fd482195594ae641075dd9718cfdfebd",
|
|
1797
1803
|
"e00f16cdc399c8ee61c7a3972469fbb4b662e0fff00bd9d3d6910f3f27a5f04c",
|
|
1798
1804
|
"ed643bb28356e9c3f7e351227e690763d6b5e275a78d232cd9dba2d1fc55cffe",
|
|
1799
1805
|
]),
|