@codyswann/lisa 3.12.0 → 3.13.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-hooks/block-no-verify.sh +15 -2
- package/all/create-only/scripts/remote-agent-aws-setup.sh +3 -0
- package/cdk/create-only/.github/workflows/deploy.yml +2 -1
- package/cdk/create-only/vitest.config.local.ts +3 -0
- package/dist/cli/doctor-lisa-owned-artifacts.d.ts +11 -2
- package/dist/cli/doctor-lisa-owned-artifacts.d.ts.map +1 -1
- package/dist/cli/doctor-lisa-owned-artifacts.js +60 -15
- package/dist/cli/doctor-lisa-owned-artifacts.js.map +1 -1
- package/dist/core/config.d.ts +21 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +1 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/guard-capabilities.d.ts +60 -0
- package/dist/core/guard-capabilities.d.ts.map +1 -0
- package/dist/core/guard-capabilities.js +102 -0
- package/dist/core/guard-capabilities.js.map +1 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts +11 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -0
- package/dist/core/lisa-owned-hash-ledger.js +127 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -0
- package/dist/core/lisa-owned-provenance.d.ts +75 -0
- package/dist/core/lisa-owned-provenance.d.ts.map +1 -0
- package/dist/core/lisa-owned-provenance.js +127 -0
- package/dist/core/lisa-owned-provenance.js.map +1 -0
- package/dist/core/lisa.d.ts +18 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +38 -0
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +59 -51
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/strategies/copy-overwrite.d.ts +28 -1
- package/dist/strategies/copy-overwrite.d.ts.map +1 -1
- package/dist/strategies/copy-overwrite.js +53 -3
- package/dist/strategies/copy-overwrite.js.map +1 -1
- package/dist/strategies/strategy.interface.d.ts +13 -0
- package/dist/strategies/strategy.interface.d.ts.map +1 -1
- package/expo/create-only/.github/workflows/ci.yml +3 -0
- package/expo/create-only/.github/workflows/deploy.yml +2 -1
- package/expo/create-only/.github/workflows/maestro-e2e.yml +3 -0
- package/expo/create-only/.github/workflows/nightly-e2e-bypass-reaper.yml +3 -0
- package/expo/create-only/.github/workflows/nightly-e2e-health.yml +3 -0
- package/expo/create-only/.github/workflows/nightly-e2e-report.yml +3 -0
- package/expo/create-only/babel.config.js +3 -0
- package/expo/create-only/jest.config.local.ts +3 -0
- package/expo/create-only/jest.config.react-native-mock.js +3 -0
- package/expo/create-only/jest.setup.local.ts +3 -0
- package/expo/create-only/jest.setup.pre.local.js +3 -0
- package/expo/create-only/scripts/zap-baseline.sh +3 -0
- package/harper-fabric/create-only/.github/workflows/deploy.yml +3 -0
- package/harper-fabric/create-only/.github/workflows/zap-baseline.yml +3 -0
- package/harper-fabric/create-only/scripts/zap-baseline.sh +3 -0
- package/nestjs/create-only/.github/workflows/deploy.yml +3 -0
- package/nestjs/create-only/scripts/zap-baseline.sh +3 -0
- package/nestjs/create-only/vitest.config.local.ts +3 -0
- package/npm-package/create-only/.github/workflows/publish-to-npm.yml +2 -1
- package/package.json +3 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/block-no-verify.sh +15 -2
- 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/block-no-verify.sh +15 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +15 -2
- 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/block-no-verify.sh +15 -2
- package/rails/create-only/.github/workflows/claude-code-review-response.yml +2 -1
- package/rails/create-only/.github/workflows/claude-nightly-code-complexity.yml +2 -1
- package/rails/create-only/.github/workflows/claude-nightly-test-coverage.yml +2 -1
- package/rails/create-only/.github/workflows/claude-nightly-test-improvement.yml +2 -1
- package/rails/create-only/.github/workflows/claude-sync-down-branches.yml +2 -1
- package/rails/create-only/.github/workflows/deploy.yml +2 -1
- package/rails/create-only/.mutant.yml +3 -0
- package/rails/create-only/.reek.yml +3 -0
- package/rails/create-only/.rubocop_todo.yml +3 -0
- package/rails/create-only/mutation.gate.yml +3 -0
- package/rails/create-only/rubocop.thresholds.yml +3 -0
- package/rails/create-only/spec/rails_helper.rb +2 -0
- package/rails/create-only/spec/spec_helper.rb +2 -0
- package/scripts/generate-lisa-owned-hash-ledger.mjs +226 -0
- package/typescript/create-only/.github/workflows/auto-update-pr-branches-dispatch.yml +2 -1
- package/typescript/create-only/.github/workflows/auto-update-pr-branches.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-ci-auto-fix.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-code-review-response.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-deploy-auto-fix.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-nightly-code-complexity.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-nightly-test-coverage.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-nightly-test-improvement.yml +2 -1
- package/typescript/create-only/.github/workflows/claude-sync-down-branches.yml +2 -1
- package/typescript/create-only/.github/workflows/claude.yml +2 -1
- package/typescript/create-only/.github/workflows/required-checks-drift.yml +2 -1
- package/typescript/create-only/eslint.config.local.ts +3 -0
- package/typescript/create-only/jest.config.local.ts +3 -0
- package/typescript/create-only/vitest.config.local.ts +3 -0
|
@@ -5,9 +5,22 @@
|
|
|
5
5
|
# check. See feedback_never_no_verify in user memory.
|
|
6
6
|
#
|
|
7
7
|
# Blocked bypass vectors:
|
|
8
|
-
# 1.
|
|
8
|
+
# 1. --no-verify, and any prefix abbreviation git would accept for it;
|
|
9
9
|
# 2. HUSKY=0 / HUSKY_SKIP_HOOKS=... — disables husky-managed git hooks;
|
|
10
|
-
# 3. core.hooksPath pointed
|
|
10
|
+
# 3. core.hooksPath pointed anywhere but an allowlisted in-repo hooks dir;
|
|
11
|
+
# 4. --config-env=core.hooksPath=VAR, in both the one- and two-token spellings;
|
|
12
|
+
# 5. GIT_CONFIG_KEY_<n>=core.hooksPath env-var-style command-scope config.
|
|
13
|
+
#
|
|
14
|
+
# The line below is what lets `lisa apply` tell a downstream copy of this guard
|
|
15
|
+
# that is BEHIND from one that is AHEAD. Byte comparison cannot: both look like
|
|
16
|
+
# "differs from mine", and guessing "behind" is how a fork's stronger guard gets
|
|
17
|
+
# silently replaced by a weaker upstream one. Refresh compares the two declared
|
|
18
|
+
# sets, and refuses to overwrite a copy declaring anything this one does not.
|
|
19
|
+
#
|
|
20
|
+
# Add a name here in the same commit that closes a vector. A hardening that
|
|
21
|
+
# forgets to is invisible to refresh, and shows up as an unexplained diff at
|
|
22
|
+
# review time instead of a named capability.
|
|
23
|
+
# lisa-guard-capabilities: no-verify-abbrev, husky-env, hookspath-allowlist, config-env, git-config-key
|
|
11
24
|
#
|
|
12
25
|
# Shell-token matching avoids false positives from issue bodies, heredocs, and
|
|
13
26
|
# commit-message prose while still catching quoted real argv values such as
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
# Seeded by Lisa on first setup — this file is YOURS.
|
|
3
|
+
# Lisa will not overwrite it. (copy-overwrite assets ARE replaced each run.)
|
|
4
|
+
|
|
2
5
|
# Installed by Lisa. The authoritative implementation is shipped by the
|
|
3
6
|
# lisa-setup-remote-aws skill and the @codyswann/lisa package.
|
|
4
7
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { HashLedger } from "../core/lisa-owned-provenance.js";
|
|
1
2
|
/** One doctor check result, structurally identical to `DoctorCheck`. */
|
|
2
3
|
interface ArtifactCheck {
|
|
3
4
|
name: string;
|
|
@@ -5,14 +6,22 @@ interface ArtifactCheck {
|
|
|
5
6
|
detail: string;
|
|
6
7
|
}
|
|
7
8
|
/**
|
|
8
|
-
* Report Lisa-owned enforcement artifacts
|
|
9
|
+
* Report Lisa-owned enforcement artifacts that differ from what Lisa ships.
|
|
10
|
+
*
|
|
11
|
+
* Two different findings, deliberately not merged. An *outdated* copy is fixed
|
|
12
|
+
* by running apply. A *modified* copy is one apply will now refuse to touch, so
|
|
13
|
+
* telling the operator to run apply would send them round a loop that never
|
|
14
|
+
* terminates and make the protection look like a bug. Both still warn — a guard
|
|
15
|
+
* nobody can account for is worth a line either way, and staying silent about a
|
|
16
|
+
* downstream edit would let a project quietly swap a guard for a stub.
|
|
9
17
|
*
|
|
10
18
|
* Only artifacts the project already has are considered: a missing one means
|
|
11
19
|
* the stack does not apply here, not that something drifted.
|
|
12
20
|
* @param targetPath - Project path to inspect
|
|
13
21
|
* @param lisaRoot - Installed Lisa package root (injected by tests)
|
|
22
|
+
* @param ledger - Known-good hashes, defaulting to Lisa's shipping history
|
|
14
23
|
* @returns Doctor check result
|
|
15
24
|
*/
|
|
16
|
-
export declare function checkLisaOwnedArtifacts(targetPath: string, lisaRoot?: string): Promise<ArtifactCheck>;
|
|
25
|
+
export declare function checkLisaOwnedArtifacts(targetPath: string, lisaRoot?: string, ledger?: HashLedger): Promise<ArtifactCheck>;
|
|
17
26
|
export {};
|
|
18
27
|
//# sourceMappingURL=doctor-lisa-owned-artifacts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-lisa-owned-artifacts.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor-lisa-owned-artifacts.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAoBnE,wEAAwE;AACxE,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAkHD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAA0B,EACpC,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
|
|
@@ -20,6 +20,7 @@ import * as path from "node:path";
|
|
|
20
20
|
import { fileURLToPath } from "node:url";
|
|
21
21
|
import * as fse from "fs-extra";
|
|
22
22
|
import { PROJECT_TYPE_ORDER } from "../core/config.js";
|
|
23
|
+
import { classifyHostCopy, mayRefreshLisaOwned, } from "../core/lisa-owned-provenance.js";
|
|
23
24
|
import { isLisaOwnedTemplate } from "../core/lisa-owned-templates.js";
|
|
24
25
|
import { isLisaSourceRepo } from "../core/self-apply.js";
|
|
25
26
|
import { listFilesRecursive } from "../utils/file-operations.js";
|
|
@@ -112,15 +113,23 @@ function reExportsShippedTemplate(installed, installedPath, sources) {
|
|
|
112
113
|
return [...installed.toString("utf8").matchAll(RELATIVE_SPECIFIER)].some(match => shipped.has(path.resolve(directory, match[1] ?? "")));
|
|
113
114
|
}
|
|
114
115
|
/**
|
|
115
|
-
* Report Lisa-owned enforcement artifacts
|
|
116
|
+
* Report Lisa-owned enforcement artifacts that differ from what Lisa ships.
|
|
117
|
+
*
|
|
118
|
+
* Two different findings, deliberately not merged. An *outdated* copy is fixed
|
|
119
|
+
* by running apply. A *modified* copy is one apply will now refuse to touch, so
|
|
120
|
+
* telling the operator to run apply would send them round a loop that never
|
|
121
|
+
* terminates and make the protection look like a bug. Both still warn — a guard
|
|
122
|
+
* nobody can account for is worth a line either way, and staying silent about a
|
|
123
|
+
* downstream edit would let a project quietly swap a guard for a stub.
|
|
116
124
|
*
|
|
117
125
|
* Only artifacts the project already has are considered: a missing one means
|
|
118
126
|
* the stack does not apply here, not that something drifted.
|
|
119
127
|
* @param targetPath - Project path to inspect
|
|
120
128
|
* @param lisaRoot - Installed Lisa package root (injected by tests)
|
|
129
|
+
* @param ledger - Known-good hashes, defaulting to Lisa's shipping history
|
|
121
130
|
* @returns Doctor check result
|
|
122
131
|
*/
|
|
123
|
-
export async function checkLisaOwnedArtifacts(targetPath, lisaRoot = defaultLisaRoot()) {
|
|
132
|
+
export async function checkLisaOwnedArtifacts(targetPath, lisaRoot = defaultLisaRoot(), ledger) {
|
|
124
133
|
const shipped = await shippedArtifacts(lisaRoot);
|
|
125
134
|
if (shipped.size === 0) {
|
|
126
135
|
return {
|
|
@@ -145,24 +154,60 @@ export async function checkLisaOwnedArtifacts(targetPath, lisaRoot = defaultLisa
|
|
|
145
154
|
return undefined;
|
|
146
155
|
if (await matchesAnyShipped(installed, sources))
|
|
147
156
|
return undefined;
|
|
148
|
-
|
|
149
|
-
reExportsShippedTemplate(installed, installedPath, sources)
|
|
150
|
-
|
|
151
|
-
|
|
157
|
+
if (selfHost &&
|
|
158
|
+
reExportsShippedTemplate(installed, installedPath, sources))
|
|
159
|
+
return undefined;
|
|
160
|
+
const outdated = await isProvablyStale(installed, destination, sources, ledger);
|
|
161
|
+
return [destination, outdated ? "stale" : "modified"];
|
|
152
162
|
}));
|
|
153
|
-
|
|
154
|
-
|
|
163
|
+
return summarise(results.filter((item) => item !== undefined));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Turn the per-artifact findings into one doctor line.
|
|
167
|
+
* @param findings - Destination paths paired with what was found
|
|
168
|
+
* @returns Doctor check result
|
|
169
|
+
*/
|
|
170
|
+
function summarise(findings) {
|
|
171
|
+
const pick = (wanted) => findings
|
|
172
|
+
.filter(([, finding]) => finding === wanted)
|
|
173
|
+
.map(([destination]) => destination)
|
|
155
174
|
.sort((left, right) => left.localeCompare(right));
|
|
156
|
-
|
|
157
|
-
|
|
175
|
+
const stale = pick("stale");
|
|
176
|
+
const modified = pick("modified");
|
|
177
|
+
if (stale.length === 0 && modified.length === 0) {
|
|
178
|
+
return {
|
|
158
179
|
name: CHECK_NAME,
|
|
159
180
|
status: "ok",
|
|
160
181
|
detail: "Enforcement guards match the installed Lisa version",
|
|
161
|
-
}
|
|
162
|
-
: {
|
|
163
|
-
name: CHECK_NAME,
|
|
164
|
-
status: "warn",
|
|
165
|
-
detail: `Outdated Lisa-owned guards (run \`npx lisa apply .\` to refresh): ${stale.join(", ")}`,
|
|
166
182
|
};
|
|
183
|
+
}
|
|
184
|
+
const parts = [
|
|
185
|
+
stale.length > 0
|
|
186
|
+
? `Outdated Lisa-owned guards (run \`npx lisa apply .\` to refresh): ${stale.join(", ")}`
|
|
187
|
+
: "",
|
|
188
|
+
modified.length > 0
|
|
189
|
+
? `Lisa-owned guards edited in this project, so apply will keep yours rather than overwrite them: ${modified.join(", ")}`
|
|
190
|
+
: "",
|
|
191
|
+
].filter(part => part.length > 0);
|
|
192
|
+
return { name: CHECK_NAME, status: "warn", detail: parts.join(". ") };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Whether a differing installed guard is genuinely behind Lisa's.
|
|
196
|
+
*
|
|
197
|
+
* Doctor and apply have to agree, or the operator gets contradictory
|
|
198
|
+
* instructions: doctor telling somebody to run `lisa apply .` to fix a file
|
|
199
|
+
* apply will then deliberately refuse to touch is a loop with no exit, and it
|
|
200
|
+
* reads as a broken tool rather than as the protection it is. So a copy apply
|
|
201
|
+
* would preserve is not reported here either — it is not outdated, and calling
|
|
202
|
+
* it outdated invites the operator to discard their own hardening.
|
|
203
|
+
* @param installed - Bytes currently installed in the project
|
|
204
|
+
* @param destination - Repo-relative destination path
|
|
205
|
+
* @param sources - Absolute paths of the shipped variants
|
|
206
|
+
* @param ledger - Known-good hashes, defaulting to Lisa's shipping history
|
|
207
|
+
* @returns True when every shipped variant considers the installed copy stale
|
|
208
|
+
*/
|
|
209
|
+
async function isProvablyStale(installed, destination, sources, ledger) {
|
|
210
|
+
const shipped = await Promise.all(sources.map(async (source) => readFile(source)));
|
|
211
|
+
return shipped.every(candidate => mayRefreshLisaOwned(classifyHostCopy(destination, installed, candidate, ledger)));
|
|
167
212
|
}
|
|
168
213
|
//# sourceMappingURL=doctor-lisa-owned-artifacts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-lisa-owned-artifacts.js","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor-lisa-owned-artifacts.js","sourceRoot":"","sources":["../../src/cli/doctor-lisa-owned-artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -158,8 +158,26 @@ export interface FileOperationResult {
|
|
|
158
158
|
* let template changes — including fixes to the enforcement guards —
|
|
159
159
|
* go undelivered while the summary read exactly like a clean no-op.
|
|
160
160
|
*/
|
|
161
|
-
| "stale"
|
|
161
|
+
| "stale"
|
|
162
|
+
/**
|
|
163
|
+
* A Lisa-owned artifact whose installed copy could not be proved to be
|
|
164
|
+
* behind Lisa's, so it was preserved rather than overwritten.
|
|
165
|
+
*
|
|
166
|
+
* Emphatically not "stale" — that word says the file is out of date, and
|
|
167
|
+
* here the likeliest reason it differs is that it is *ahead*. Filing the two
|
|
168
|
+
* under one label would reproduce the original defect in the reporting: an
|
|
169
|
+
* operator reading "out of date" about a guard they deliberately hardened
|
|
170
|
+
* would fix the wrong thing.
|
|
171
|
+
*/
|
|
172
|
+
| "host-ahead" | "overwritten" | "appended" | "merged" | "created";
|
|
162
173
|
readonly linesAdded?: number;
|
|
174
|
+
/**
|
|
175
|
+
* Operator-readable explanation of a non-obvious outcome, shown verbatim.
|
|
176
|
+
*
|
|
177
|
+
* Carries the "why" for `host-ahead`, where the path alone tells an operator
|
|
178
|
+
* nothing actionable and the whole point is to say what would have been lost.
|
|
179
|
+
*/
|
|
180
|
+
readonly note?: string;
|
|
163
181
|
}
|
|
164
182
|
/**
|
|
165
183
|
* Counters for operation summary
|
|
@@ -169,6 +187,8 @@ export interface OperationCounters {
|
|
|
169
187
|
skipped: number;
|
|
170
188
|
/** Managed files left out of date because this apply could not overwrite them. */
|
|
171
189
|
stale: number;
|
|
190
|
+
/** Lisa-owned artifacts preserved because the installed copy may be ahead. */
|
|
191
|
+
hostAhead: number;
|
|
172
192
|
overwritten: number;
|
|
173
193
|
appended: number;
|
|
174
194
|
merged: number;
|
|
@@ -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
CHANGED
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;AAsDjD;;;;;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,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The capability marker a Lisa-owned guard uses to declare what it defends
|
|
3
|
+
* against, so refresh can compare two copies by *what they stop* rather than by
|
|
4
|
+
* bytes.
|
|
5
|
+
*
|
|
6
|
+
* A byte comparison answers "are these the same?" and nothing else. It cannot
|
|
7
|
+
* answer the only question refresh actually needs answered — "is the host's copy
|
|
8
|
+
* behind mine, or ahead of it?" — and guessing "behind" is how a host's stronger
|
|
9
|
+
* guard gets silently replaced by a weaker upstream one.
|
|
10
|
+
*
|
|
11
|
+
* The marker is one comment line in the guard's header:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* # lisa-guard-capabilities: no-verify-abbrev, hookspath-allowlist, config-env
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Deliberately a *set*, not a version number. A monotonic `lisa-guard-version: N`
|
|
18
|
+
* is easier to compare but lies the moment two hosts harden different vectors
|
|
19
|
+
* independently — which is exactly what happened: `propswapllc/frontend` closed
|
|
20
|
+
* the `GIT_CONFIG_KEY_<n>` bypass while `tunnl-infrastructure` closed a different
|
|
21
|
+
* one. Both would have bumped to the same number and one would have silently
|
|
22
|
+
* won. Two sets stay two sets, and set difference names precisely what each copy
|
|
23
|
+
* has that the other does not.
|
|
24
|
+
*
|
|
25
|
+
* Only the header window is scanned. A guard whose *body* greps for the marker
|
|
26
|
+
* string, or a test fixture that quotes one, must not be read as declaring it.
|
|
27
|
+
* @module core/guard-capabilities
|
|
28
|
+
*/
|
|
29
|
+
/** A guard's declared capability set, normalised for comparison. */
|
|
30
|
+
export type CapabilitySet = ReadonlySet<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Read the capabilities a guard's header declares.
|
|
33
|
+
*
|
|
34
|
+
* Absence is not an error and not a failure signal — it means the artifact has
|
|
35
|
+
* not been enrolled, and every caller treats that as "no declaration made"
|
|
36
|
+
* rather than "declares nothing dangerous". That is what lets the marker roll
|
|
37
|
+
* out one guard at a time with no flag day.
|
|
38
|
+
* Scanned line by line with plain string operations rather than a regular
|
|
39
|
+
* expression. A header is untrusted input — it arrives from whatever repository
|
|
40
|
+
* the "host" copy came from — and a linear scan cannot be made to backtrack.
|
|
41
|
+
* @param bytes - Full contents of the guard file
|
|
42
|
+
* @returns The declared capabilities, lower-cased and de-duplicated
|
|
43
|
+
*/
|
|
44
|
+
export declare function readGuardCapabilities(bytes: Buffer): CapabilitySet;
|
|
45
|
+
/**
|
|
46
|
+
* The capabilities the host declares that Lisa's copy does not.
|
|
47
|
+
*
|
|
48
|
+
* A non-empty result is the whole signal: the host copy defends something
|
|
49
|
+
* upstream does not, so overwriting it removes protection. This is set
|
|
50
|
+
* *difference*, not a strict-superset test, on purpose — a host that hardened
|
|
51
|
+
* vector A while upstream hardened vector B is not a superset of upstream, yet
|
|
52
|
+
* overwriting it still deletes A. Asking only "is the host a superset?" would
|
|
53
|
+
* clobber precisely the divergent-hardening case the set representation exists
|
|
54
|
+
* to handle.
|
|
55
|
+
* @param host - Capabilities declared by the installed copy
|
|
56
|
+
* @param lisa - Capabilities declared by the packaged copy
|
|
57
|
+
* @returns Capabilities present on the host and absent upstream, sorted
|
|
58
|
+
*/
|
|
59
|
+
export declare function capabilitiesOnlyOnHost(host: CapabilitySet, lisa: CapabilitySet): readonly string[];
|
|
60
|
+
//# sourceMappingURL=guard-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-capabilities.d.ts","sourceRoot":"","sources":["../../src/core/guard-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAsBH,oEAAoE;AACpE,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAQlE;AAgBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,aAAa,GAClB,SAAS,MAAM,EAAE,CAInB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The capability marker a Lisa-owned guard uses to declare what it defends
|
|
3
|
+
* against, so refresh can compare two copies by *what they stop* rather than by
|
|
4
|
+
* bytes.
|
|
5
|
+
*
|
|
6
|
+
* A byte comparison answers "are these the same?" and nothing else. It cannot
|
|
7
|
+
* answer the only question refresh actually needs answered — "is the host's copy
|
|
8
|
+
* behind mine, or ahead of it?" — and guessing "behind" is how a host's stronger
|
|
9
|
+
* guard gets silently replaced by a weaker upstream one.
|
|
10
|
+
*
|
|
11
|
+
* The marker is one comment line in the guard's header:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* # lisa-guard-capabilities: no-verify-abbrev, hookspath-allowlist, config-env
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Deliberately a *set*, not a version number. A monotonic `lisa-guard-version: N`
|
|
18
|
+
* is easier to compare but lies the moment two hosts harden different vectors
|
|
19
|
+
* independently — which is exactly what happened: `propswapllc/frontend` closed
|
|
20
|
+
* the `GIT_CONFIG_KEY_<n>` bypass while `tunnl-infrastructure` closed a different
|
|
21
|
+
* one. Both would have bumped to the same number and one would have silently
|
|
22
|
+
* won. Two sets stay two sets, and set difference names precisely what each copy
|
|
23
|
+
* has that the other does not.
|
|
24
|
+
*
|
|
25
|
+
* Only the header window is scanned. A guard whose *body* greps for the marker
|
|
26
|
+
* string, or a test fixture that quotes one, must not be read as declaring it.
|
|
27
|
+
* @module core/guard-capabilities
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* How much of a file counts as its header.
|
|
31
|
+
*
|
|
32
|
+
* Generous enough for the long rationale comments Lisa's guards carry, small
|
|
33
|
+
* enough that the marker cannot be smuggled in from a file's body.
|
|
34
|
+
*/
|
|
35
|
+
const HEADER_BYTES = 4096;
|
|
36
|
+
/** The token that introduces a declaration. */
|
|
37
|
+
const MARKER = "lisa-guard-capabilities:";
|
|
38
|
+
/**
|
|
39
|
+
* Characters allowed between the start of a line and the marker.
|
|
40
|
+
*
|
|
41
|
+
* Covers every comment syntax Lisa's owned artifacts use: `#` for shell, `//`
|
|
42
|
+
* and `*` for JS/TS. Requiring the marker to be preceded by nothing else is what
|
|
43
|
+
* makes it a declaration rather than a mention inside prose or a quoted string.
|
|
44
|
+
*/
|
|
45
|
+
const COMMENT_PREFIX = new Set([" ", "\t", "#", "/", "*"]);
|
|
46
|
+
/**
|
|
47
|
+
* Read the capabilities a guard's header declares.
|
|
48
|
+
*
|
|
49
|
+
* Absence is not an error and not a failure signal — it means the artifact has
|
|
50
|
+
* not been enrolled, and every caller treats that as "no declaration made"
|
|
51
|
+
* rather than "declares nothing dangerous". That is what lets the marker roll
|
|
52
|
+
* out one guard at a time with no flag day.
|
|
53
|
+
* Scanned line by line with plain string operations rather than a regular
|
|
54
|
+
* expression. A header is untrusted input — it arrives from whatever repository
|
|
55
|
+
* the "host" copy came from — and a linear scan cannot be made to backtrack.
|
|
56
|
+
* @param bytes - Full contents of the guard file
|
|
57
|
+
* @returns The declared capabilities, lower-cased and de-duplicated
|
|
58
|
+
*/
|
|
59
|
+
export function readGuardCapabilities(bytes) {
|
|
60
|
+
const header = bytes.subarray(0, HEADER_BYTES).toString("utf8");
|
|
61
|
+
const declared = header
|
|
62
|
+
.split("\n")
|
|
63
|
+
.flatMap(line => declarationOn(line))
|
|
64
|
+
.map(entry => entry.trim().toLowerCase())
|
|
65
|
+
.filter(entry => entry.length > 0);
|
|
66
|
+
return new Set(declared);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The capabilities one line declares, if it is a declaration at all.
|
|
70
|
+
* @param line - A single line from the header
|
|
71
|
+
* @returns Raw comma-separated entries, or nothing when the line declares none
|
|
72
|
+
*/
|
|
73
|
+
function declarationOn(line) {
|
|
74
|
+
const at = line.indexOf(MARKER);
|
|
75
|
+
if (at === -1)
|
|
76
|
+
return [];
|
|
77
|
+
for (const character of line.slice(0, at)) {
|
|
78
|
+
if (!COMMENT_PREFIX.has(character))
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
return line.slice(at + MARKER.length).split(",");
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The capabilities the host declares that Lisa's copy does not.
|
|
85
|
+
*
|
|
86
|
+
* A non-empty result is the whole signal: the host copy defends something
|
|
87
|
+
* upstream does not, so overwriting it removes protection. This is set
|
|
88
|
+
* *difference*, not a strict-superset test, on purpose — a host that hardened
|
|
89
|
+
* vector A while upstream hardened vector B is not a superset of upstream, yet
|
|
90
|
+
* overwriting it still deletes A. Asking only "is the host a superset?" would
|
|
91
|
+
* clobber precisely the divergent-hardening case the set representation exists
|
|
92
|
+
* to handle.
|
|
93
|
+
* @param host - Capabilities declared by the installed copy
|
|
94
|
+
* @param lisa - Capabilities declared by the packaged copy
|
|
95
|
+
* @returns Capabilities present on the host and absent upstream, sorted
|
|
96
|
+
*/
|
|
97
|
+
export function capabilitiesOnlyOnHost(host, lisa) {
|
|
98
|
+
return [...host]
|
|
99
|
+
.filter(capability => !lisa.has(capability))
|
|
100
|
+
.sort((left, right) => left.localeCompare(right));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=guard-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-capabilities.js","sourceRoot":"","sources":["../../src/core/guard-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;;GAKG;AACH,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,+CAA+C;AAC/C,MAAM,MAAM,GAAG,0BAA0B,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAK3D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM;SACpB,KAAK,CAAC,IAAI,CAAC;SACX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACpC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACxC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACzB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAmB,EACnB,IAAmB;IAEnB,OAAO,CAAC,GAAG,IAAI,CAAC;SACb,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC3C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Generated by scripts/generate-lisa-owned-hash-ledger.mjs. Do not edit. */
|
|
2
|
+
/**
|
|
3
|
+
* Every content hash Lisa has published at each Lisa-owned destination path.
|
|
4
|
+
*
|
|
5
|
+
* A host copy whose hash appears here is provably an older Lisa artifact and may
|
|
6
|
+
* be refreshed. One that appears nowhere here was edited downstream, and refresh
|
|
7
|
+
* refuses rather than risk deleting a stronger guard. See
|
|
8
|
+
* `src/core/lisa-owned-provenance.ts`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const LISA_OWNED_HASH_LEDGER: Readonly<Record<string, readonly string[]>>;
|
|
11
|
+
//# sourceMappingURL=lisa-owned-hash-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAqHjC,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/** Generated by scripts/generate-lisa-owned-hash-ledger.mjs. Do not edit. */
|
|
2
|
+
/**
|
|
3
|
+
* Every content hash Lisa has published at each Lisa-owned destination path.
|
|
4
|
+
*
|
|
5
|
+
* A host copy whose hash appears here is provably an older Lisa artifact and may
|
|
6
|
+
* be refreshed. One that appears nowhere here was edited downstream, and refresh
|
|
7
|
+
* refuses rather than risk deleting a stronger guard. See
|
|
8
|
+
* `src/core/lisa-owned-provenance.ts`.
|
|
9
|
+
*/
|
|
10
|
+
export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
11
|
+
"scripts/lisa-clean-git-env.sh": Object.freeze([
|
|
12
|
+
"d15af6f13eedbca41046070972380e69fc0af8f7d903aac12b8644389b9a0c91",
|
|
13
|
+
"e7121a0ee9e1bf7c01cd2ab55f563dd6d9ab75990739bb6ddf571a513efa10e9",
|
|
14
|
+
]),
|
|
15
|
+
"scripts/lisa-command-envelope.mjs": Object.freeze([
|
|
16
|
+
"2011331056b1c86bd181649713a395dbfd2768f9fcd7e37b521d6ad2a9318ea9",
|
|
17
|
+
"4f76bb7d466eb153a4e1414d06f12856a1242de2cfa4cb4b1b942cf29d8b7f37",
|
|
18
|
+
"6b198f088cd3cd862d4357fbb069b1ad5d3afeb7be594f2bf1ff603b092a8354",
|
|
19
|
+
"e06cb11f1418fe94564cea527a22b039f53b7ab10c1cd182264a31e52bba9fa8",
|
|
20
|
+
]),
|
|
21
|
+
"scripts/lisa-destructive-guard.mjs": Object.freeze([
|
|
22
|
+
"4fb431a3c58f443e303d613934d023d9e95ddae5c42710bb7009f7c080c82a64",
|
|
23
|
+
]),
|
|
24
|
+
"scripts/lisa-enforcement-fallback.sh": Object.freeze([
|
|
25
|
+
"1bec5f3c284b3febdc471487ee6a23ffb72bd4e7b293f9e26b0188f32318c722",
|
|
26
|
+
"3049c2f1051c7c02dd60b62355964651e1565ebe6bdcb5e37634cd686cf1deb1",
|
|
27
|
+
"8dc942ac4edc2017d6b8277296c8f80542e7c024eef1bb65de609979d0ca9a0e",
|
|
28
|
+
"9cab71562d01421d57c6719318a4d03a6249a45c1aea434db3ff26e3065eeb66",
|
|
29
|
+
"d7d88e44763694bed5eae998cd3663922c957e49f9f9621d9201f0417a4128ad",
|
|
30
|
+
"e17c45f7cadf0fb55dd07270776caf211af99b7d4771a4fde75aafe5919e8dbe",
|
|
31
|
+
]),
|
|
32
|
+
"scripts/lisa-floor-collisions.mjs": Object.freeze([
|
|
33
|
+
"2d11968f6852ab745cba939de03c6d6cb5f413975d2cfc8fc447bdd0b218e91a",
|
|
34
|
+
"3c7a0234b4f5609fce49e44711d2ec86af8cf7fb82b0831e4450e3347ecefe45",
|
|
35
|
+
"a612f172282d13ba9318fe5e03689d7c6ff42a0122d0c9d5d39051e1967b93dc",
|
|
36
|
+
]),
|
|
37
|
+
"scripts/lisa-hooks/block-direct-issue-create.sh": Object.freeze([
|
|
38
|
+
"22184f1dd1b96e818741bd4ae659446299535d7ce594817155edebac4172a7ba",
|
|
39
|
+
"60a4f94ec671b2372f7492680ab327d97aff686588ce85791f54e0fbd098b0ca",
|
|
40
|
+
"73e94b73830d8961026947d99bf4ac5f959b5bca025203b913d8a6363cbe2b9f",
|
|
41
|
+
"847dfca48823a495fc3de47dfdb4b26e49d6808c6570c46d024a99793df1d370",
|
|
42
|
+
]),
|
|
43
|
+
"scripts/lisa-hooks/block-instruction-file-edits.sh": Object.freeze([
|
|
44
|
+
"6f52076e3488821d638b6dd45b5faca527d92b181cc12e6e5033859e0786c8a7",
|
|
45
|
+
"850cfc23852eb752114ae1e938a1c7bcf34bc50c85d3aaca0c02311cc8c0ef70",
|
|
46
|
+
"8996e0bcbf1db085a5d99734e797c91f5025997bd967bc374efff8348dac14c2",
|
|
47
|
+
"be1e77fb0ddb246eddae71ebac25e972c3c9e8079514e0dc78d0b73df919464c",
|
|
48
|
+
"d47314b66d6ce85f77d6e058f861eede4462b2b0a33d54e82ff1c931167ec3f7",
|
|
49
|
+
]),
|
|
50
|
+
"scripts/lisa-hooks/block-no-verify.sh": Object.freeze([
|
|
51
|
+
"031ef7a53fc49cb18665105b834b7b50ad6a43317e0821949809e877e0562ce4",
|
|
52
|
+
"18b7bb8867c5e6f719a9c503a38525f4c05e3d611717c3e1a503cf58dfb2832f",
|
|
53
|
+
"2df476aacebcb2544a12f459a0092e88eb28c0d00e45fd7ed909c75dfe441027",
|
|
54
|
+
"33e2bd341eb992036059b0c4606db35a218adcfeca7e44d174fedf8ebdff29d2",
|
|
55
|
+
"3b93a0affab6413e3c14a6f43de5acb586286ed1819ece0a66b30429b4d00490",
|
|
56
|
+
"3ff7255f395a9552366faaac34d383f4c95fecfb39882cd1d57854356422fe61",
|
|
57
|
+
"7790a560850c9d38709dbaccdaa10733e632c1bd4d975cbec7e3cc5a8650b36a",
|
|
58
|
+
"a6ed91576efebb6ba40cfa4e9d8a3e8566314909210ae8d5860be62a3feb4cff",
|
|
59
|
+
"aa95a84f9f9224914947a09b858535aa8bd052199ff64cb53768cf78fb69b687",
|
|
60
|
+
"b9f299cb9d3ad75b71296376ae2c40eb207a3b2706dafdaa41fc586050a53aad",
|
|
61
|
+
"dd1aea1b9fdd0da023bf704b331b350bc14620f4364afa5001c6690fcbc940cc",
|
|
62
|
+
"e3407d63eae16662923d46b75b6a41e7ca7ab206b428ea2cbb0b4fee226f6516",
|
|
63
|
+
]),
|
|
64
|
+
"scripts/lisa-hooks/block-shell-json-parsing.sh": Object.freeze([
|
|
65
|
+
"1934a15e154fda3c2a40979a5cd6225661b14fe7bc77328a69ce499bea85dba7",
|
|
66
|
+
"3b5f074f3ab5708030af507eea962389f3b067c5dbdc76580bd9e44d3ac6c603",
|
|
67
|
+
"90601e31603c440d8f19d213d63bfef8d18596c60f88cb6e28c93d12453c5c0c",
|
|
68
|
+
]),
|
|
69
|
+
"scripts/lisa-hooks/parity-safety-net.sh": Object.freeze([
|
|
70
|
+
"062c69eea85157f1e941ec3626d8912aa9f182af6ccdbe19687588a6074db5ce",
|
|
71
|
+
"07002535de10d89f6d73e8922517550a02a8974549aaf200c9c314e6f4f83c70",
|
|
72
|
+
"1162ffd16cef3b23282d2f5207abcb88429462a74a9df1035f0df4968f6dd456",
|
|
73
|
+
"14fc5e292aebf83dd24fec12fb32e2beb509a9324f127a24a64d5c5d4d05c576",
|
|
74
|
+
"1bf3512bb94923a6cb25b1e7a619a3fc8e1336bffa16f499b459aaee3eaed66d",
|
|
75
|
+
"388cf8847581d96a1ff8ea98290a33a5f96d67cdd502ea807a0b8d88efe90e19",
|
|
76
|
+
"64546813f168fb446f39e34bc674fd3af85b15bd5e7f4f6bf4503463e701a7b9",
|
|
77
|
+
"772202ddd42d626625ff719666afbbe83445d8bae1bc7c0fb5ffdcb402be83f8",
|
|
78
|
+
"7f55986eb29f8ace8616595da4bbe60d80a96f9f29b24fb72efd66bb96b22464",
|
|
79
|
+
"8e19d5f1ba7abe3d22fbee47ff8e0fad76b965ccca20b8849e3c43ab07d9a4ef",
|
|
80
|
+
"a22fd1b7c483f1a538202353ee85c82be17a8910e03c0a930635ce8cb3595c64",
|
|
81
|
+
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
82
|
+
"caea02a07027fc1c74d47e08b36299d369c5c9f7c4043da8828fbca3c64eb2aa",
|
|
83
|
+
"d12583803e8ff5e4b64e68eafc8d3c377af4c400d8b7ecd1c7fe699d8f92784a",
|
|
84
|
+
"d9ea58150aa27e7f0aa9a4ef155ed446d30bdfc932d01c64e2b8ca211aa0de7b",
|
|
85
|
+
"f740f600b255742a50f28e5c9d09427c5783c4084e84052dca46bc1f0c94a187",
|
|
86
|
+
"fa8f4a6517eacd9266feb7afd62398cdf2075d4824cac24b45bb64ad0cd18c86",
|
|
87
|
+
]),
|
|
88
|
+
"scripts/lisa-hooks/sonar-secrets.sh": Object.freeze([
|
|
89
|
+
"7a408788975a6351d53e14aa32bb9a5d161f33df9dfea59ba32784ae33a62e67",
|
|
90
|
+
"945453fb275a58aa7185e150e6b05e5810739750928ab5bd6edfbf87d1c8aa0d",
|
|
91
|
+
"bf4132e49ba18e2f7e941520c299c15aeeacfd220e489f3d2eb8397f2048157b",
|
|
92
|
+
]),
|
|
93
|
+
"scripts/lisa-mutation.mjs": Object.freeze([
|
|
94
|
+
"7d8d24dea151ef2178807046e97aea7ebfadd9c88eb50347feb7bb4bb190227d",
|
|
95
|
+
"8e0bdb491dfaea04e88be1c1e2c6cc7cd34fa4ca18adddf5fecc43d7de8ffded",
|
|
96
|
+
"a630bde6cddae283776b8d34763a3642edbea8096d583a90ec6d43a9588ca8a6",
|
|
97
|
+
]),
|
|
98
|
+
"scripts/lisa-schema-validate.mjs": Object.freeze([
|
|
99
|
+
"2ace82daacdebbbb00a7eceb09fbe82cabec04330a083ca10417b2ee4e0a63eb",
|
|
100
|
+
"4a05a0ed70a274827fd2f0fd0c98890c66bee2fde70785b8379943ebe6650473",
|
|
101
|
+
"9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
|
|
102
|
+
]),
|
|
103
|
+
"scripts/lisa-work-item.mjs": Object.freeze([
|
|
104
|
+
"238dc2da29938edd92518c2b08192d14c6f2751ed175c07d6e882814829b7b7e",
|
|
105
|
+
"2d9ca0841db9e75ddfd95e3a4d485fd01aa639a512ef648996f565b7991d8e2b",
|
|
106
|
+
"4c263fef48c03b3b6c623ea8a6cd55505bfaf28197e5072226ea35f9f3d26885",
|
|
107
|
+
"5eb31c284e820a51312d4484f0669128007326af55ee515923fec33700d003a1",
|
|
108
|
+
"6a8be8577242588f14ab52b25b2a22b6def53aefa9513b4d3d7c49f4d8027079",
|
|
109
|
+
"9223856be4618fb1e3e731b259ae5bf5328decc322f0b4a0d0fd18d6b12cd45a",
|
|
110
|
+
"96a87c131606b3edd43e52485e68f8ffbf5c528cb4beb7a1185263519a9632ce",
|
|
111
|
+
"ab0dede91c5c8a07984ae13aa48ec70cdcd2fa691b59617bc4b57998dc79a51c",
|
|
112
|
+
"c78df9d5f0f3fc388ff60a7db5898478a2a4d6d7325833f10384b5a8c62bb34a",
|
|
113
|
+
"e30016a49deff1c3cd3ae7951262aeb2ef3d472bce76bbbe2a177db6017c7cad",
|
|
114
|
+
"e41e9534988ce69a836664437a78f3a3f3dc7ebbe396c86cdab0ea63fb7c19da",
|
|
115
|
+
"f12006df4ed9974f65d955718af7dcc8a079799d02c58bd38b2d9c49f271db72",
|
|
116
|
+
"f88f69d44693084428f44e3f2b80afecda08c7ee8747588f40277fdc9396fd8f",
|
|
117
|
+
"fc0d92739e620d8fd70f7aa4a12d3e0b3a8f790d47c4a8322040f32c30b9445a",
|
|
118
|
+
"fe064a2bd11200ed256fb36e203978f858fccbcaf40708496c066383345900ef",
|
|
119
|
+
]),
|
|
120
|
+
"scripts/schemas/lisa-command-envelope.v1.schema.json": Object.freeze([
|
|
121
|
+
"d153b7c2953a30f180e38f09e98240c63327f5196eeba9bdf545e5a1f125a879",
|
|
122
|
+
]),
|
|
123
|
+
"scripts/schemas/lisa-state-contract.v1.schema.json": Object.freeze([
|
|
124
|
+
"6b7afe4ffeba8aaa53871d8855172f7eacde05953b1321145218ec638ff5c1c4",
|
|
125
|
+
]),
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=lisa-owned-hash-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAE/B,MAAM,CAAC,MAAM,CAAC;IAChB,+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;KACnE,CAAC;IACF,oCAAoC,EAAE,MAAM,CAAC,MAAM,CAAC;QAClD,kEAAkE;KACnE,CAAC;IACF,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,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,iDAAiD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/D,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;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;KACnE,CAAC;IACF,gDAAgD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9D,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;KACnE,CAAC;IACF,qCAAqC,EAAE,MAAM,CAAC,MAAM,CAAC;QACnD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,2BAA2B,EAAE,MAAM,CAAC,MAAM,CAAC;QACzC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,kCAAkC,EAAE,MAAM,CAAC,MAAM,CAAC;QAChD,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,sDAAsD,EAAE,MAAM,CAAC,MAAM,CAAC;QACpE,kEAAkE;KACnE,CAAC;IACF,oDAAoD,EAAE,MAAM,CAAC,MAAM,CAAC;QAClE,kEAAkE;KACnE,CAAC;CACH,CAAC,CAAC"}
|