@codyswann/lisa 3.16.0 → 3.17.1
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 +1197 -0
- package/all/copy-overwrite/scripts/lisa-reconcile-policy.mjs +1188 -0
- package/all/copy-overwrite/scripts/lisa-run-gates.mjs +597 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +25 -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 +73 -8
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +6 -2
- package/plugins/lisa/.claude-plugin/plugin.json +10 -1
- package/plugins/lisa/.codex-plugin/hooks.json +9 -0
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +108 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +324 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/surfaces.mjs +55 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/validate-config.mjs +89 -17
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +242 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +14 -32
- package/plugins/lisa/hooks/secrets-preflight.sh +72 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +108 -2
- package/plugins/lisa/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +324 -0
- package/plugins/lisa/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/lisa/skills/lisa-secrets-access/scripts/surfaces.mjs +55 -7
- package/plugins/lisa/skills/lisa-secrets-access/scripts/validate-config.mjs +89 -17
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +242 -0
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +14 -32
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +108 -2
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +324 -0
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/surfaces.mjs +55 -7
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/validate-config.mjs +89 -17
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +242 -0
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +14 -32
- 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 +10 -1
- package/plugins/lisa-copilot/hooks/secrets-preflight.sh +72 -0
- package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +108 -2
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +324 -0
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/surfaces.mjs +55 -7
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/validate-config.mjs +89 -17
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +242 -0
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +14 -32
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/hooks.json +3 -0
- package/plugins/lisa-cursor/hooks/secrets-preflight.sh +72 -0
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +108 -2
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +324 -0
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/surfaces.mjs +55 -7
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/validate-config.mjs +89 -17
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +242 -0
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +14 -32
- 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/.claude-plugin/plugin.json +9 -0
- package/plugins/src/base/hooks/secrets-preflight.sh +72 -0
- package/plugins/src/base/skills/lisa-doctor/SKILL.md +108 -2
- package/plugins/src/base/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +324 -0
- package/plugins/src/base/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/src/base/skills/lisa-secrets-access/scripts/surfaces.mjs +55 -7
- package/plugins/src/base/skills/lisa-secrets-access/scripts/validate-config.mjs +89 -17
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +242 -0
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +14 -32
- package/scripts/generate-lisa-owned-hash-ledger.mjs +10 -1
- package/scripts/lib/per-agent-hook-filter.mjs +18 -0
- package/typescript/copy-contents/.husky/pre-commit +130 -21
- package/typescript/copy-contents/.husky/pre-push +202 -22
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
3
|
+
// Do not edit directly — durable changes belong upstream in Lisa.
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Run the gates declared at one moment, and say exactly what ran.
|
|
7
|
+
*
|
|
8
|
+
* The git hooks used to hardcode both the tool and the list of steps, which
|
|
9
|
+
* meant the answer to "what does this project prove before a commit?" lived in
|
|
10
|
+
* a shell script that only a shell could read. This runner asks the registry
|
|
11
|
+
* instead: the project declares gates in `.lisa.config.json`, `lisa-gates.mjs`
|
|
12
|
+
* resolves which ones apply at a moment, and this file executes them.
|
|
13
|
+
*
|
|
14
|
+
* ## Green is not proof
|
|
15
|
+
*
|
|
16
|
+
* The defect this subsystem exists to prevent is a check reporting satisfied
|
|
17
|
+
* without having proved anything, so three things are non-negotiable here:
|
|
18
|
+
*
|
|
19
|
+
* - An `optional` gate that FAILS prints as FAILED. It does not block, and it
|
|
20
|
+
* is not swallowed. "Optional" governs the response, never the verdict.
|
|
21
|
+
* - When a required gate fails we stop, and every gate after it prints as
|
|
22
|
+
* NOT RUN. Fail-fast is what the hardcoded hooks always did; what would be
|
|
23
|
+
* new — and wrong — is letting an unrun gate look proved.
|
|
24
|
+
* - A gate that resolves to no command is UNPROVABLE, not passing. Nothing
|
|
25
|
+
* executed, so nothing was proved, whatever its level says.
|
|
26
|
+
*
|
|
27
|
+
* ## Exit codes are the hook's control flow
|
|
28
|
+
*
|
|
29
|
+
* The hooks fall back to their hardcoded steps unless this runner positively
|
|
30
|
+
* reports a verdict, so "the runner could not run" must never look like "all
|
|
31
|
+
* gates passed". Hence `NO_GATES` and `RUNNER_FAILED` are distinct from
|
|
32
|
+
* `PROVED`, and the hook routes each one deliberately.
|
|
33
|
+
* @module lisa-run-gates
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { spawnSync } from "node:child_process";
|
|
37
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
38
|
+
import { join } from "node:path";
|
|
39
|
+
|
|
40
|
+
import { invokedAsScript } from "./lib/invoked-as-script.mjs";
|
|
41
|
+
import { readGates, resolveMoment } from "./lisa-gates.mjs";
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* What this process tells its caller. The hooks branch on every value.
|
|
45
|
+
*
|
|
46
|
+
* `NO_GATES` and `RUNNER_FAILED` both mean nothing was proved here, and both
|
|
47
|
+
* send the hook to its hardcoded path. They are separate because one is a
|
|
48
|
+
* project that has not migrated and the other is a broken tool, and an
|
|
49
|
+
* operator reading a hook transcript needs to be able to tell them apart.
|
|
50
|
+
*/
|
|
51
|
+
export const EXIT = Object.freeze({
|
|
52
|
+
/** Every required gate at this moment was proved. */
|
|
53
|
+
PROVED: 0,
|
|
54
|
+
/** At least one required gate failed. Stop the commit or push. */
|
|
55
|
+
BLOCKED: 1,
|
|
56
|
+
/** No gates block in config: this project has not migrated. Fall back. */
|
|
57
|
+
NO_GATES: 78,
|
|
58
|
+
/** The runner itself could not run. Nothing was proved. Fall back. */
|
|
59
|
+
RUNNER_FAILED: 70,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Properties the built-in hook steps prove unconditionally at each moment.
|
|
64
|
+
*
|
|
65
|
+
* This exists because "a gates block exists" turned out to be a bad proxy for
|
|
66
|
+
* "this project has migrated". A block can be half-written — and the first one
|
|
67
|
+
* ever authored was: it declared `code-style` at commit but not
|
|
68
|
+
* `credential-leakage`, so handing that moment to the registry would have
|
|
69
|
+
* removed gitleaks from every commit in the repository, silently, while
|
|
70
|
+
* reporting a clean run. Deleting a guarantee is not something a partial
|
|
71
|
+
* migration should be able to do by omission.
|
|
72
|
+
*
|
|
73
|
+
* Listed here are only the steps the built-in path always attempts. The ones
|
|
74
|
+
* that run only when the project wired them live in `CONDITIONAL_FLOOR`,
|
|
75
|
+
* because "this project has no `lint:slow` script" and "this project has one
|
|
76
|
+
* and the registry is silent about it" are opposite situations.
|
|
77
|
+
*
|
|
78
|
+
* Together the two lists are also the vocabulary of `--coverage`: a hook can
|
|
79
|
+
* only stand a built-in step down against a name that appears here, so a
|
|
80
|
+
* property omitted from these lists is one whose step always runs.
|
|
81
|
+
*
|
|
82
|
+
* `structural-rules` is on the commit list because `.lintstagedrc.json` runs
|
|
83
|
+
* `ast-grep scan` on every staged file unconditionally — the same evidence that
|
|
84
|
+
* made the registry declare the gate commit-legal. Leaving it off meant
|
|
85
|
+
* lint-staged proved a property no list named.
|
|
86
|
+
*/
|
|
87
|
+
export const BUILTIN_FLOOR = Object.freeze({
|
|
88
|
+
commit: Object.freeze([
|
|
89
|
+
"code-style",
|
|
90
|
+
"credential-leakage",
|
|
91
|
+
"format-conformance",
|
|
92
|
+
"structural-rules",
|
|
93
|
+
]),
|
|
94
|
+
push: Object.freeze([
|
|
95
|
+
"coverage-adequacy",
|
|
96
|
+
"dependency-vulnerability",
|
|
97
|
+
"test-correctness",
|
|
98
|
+
"test-integration",
|
|
99
|
+
"type-correctness",
|
|
100
|
+
]),
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Floor properties whose built-in step runs only when the project wired it.
|
|
105
|
+
*
|
|
106
|
+
* The unconditional floor above answers "would the built-in path prove this
|
|
107
|
+
* anywhere". This one answers it for THIS project, which is the question that
|
|
108
|
+
* actually decides whether handing the moment over loses a guarantee. A
|
|
109
|
+
* repository with a `lint:slow` script has slow lint proved on every push; if
|
|
110
|
+
* its gates block is silent about `code-style-slow`, exiting 0 deletes that
|
|
111
|
+
* proof and nothing replaces it. A repository without the script loses
|
|
112
|
+
* nothing, because the built-in step prints "skipping" and moves on.
|
|
113
|
+
*
|
|
114
|
+
* Keyed by what the hook itself tests: a package script for the `$RUNNER`
|
|
115
|
+
* steps, a file on disk for the `node scripts/...` ones. Read the hook, not
|
|
116
|
+
* the intention — these two lists are one contract expressed twice, and the
|
|
117
|
+
* only defence against drift is that each entry names the exact condition the
|
|
118
|
+
* shell branches on.
|
|
119
|
+
*
|
|
120
|
+
* The commit-time threshold ratchet is deliberately absent: it has no registry
|
|
121
|
+
* counterpart that is legal at `commit` (`threshold-monotonicity` is
|
|
122
|
+
* push-onward, and the commit check compares STAGED changes rather than
|
|
123
|
+
* `HEAD^`), so it cannot be handed over at all. The hook runs it outside the
|
|
124
|
+
* handover instead.
|
|
125
|
+
*/
|
|
126
|
+
export const CONDITIONAL_FLOOR = Object.freeze({
|
|
127
|
+
commit: Object.freeze([
|
|
128
|
+
Object.freeze({
|
|
129
|
+
id: "artifact-freshness",
|
|
130
|
+
scripts: Object.freeze([]),
|
|
131
|
+
files: Object.freeze(["scripts/check-derived-artifacts.mjs"]),
|
|
132
|
+
}),
|
|
133
|
+
]),
|
|
134
|
+
push: Object.freeze([
|
|
135
|
+
Object.freeze({
|
|
136
|
+
id: "code-style-slow",
|
|
137
|
+
scripts: Object.freeze(["lint:slow"]),
|
|
138
|
+
files: Object.freeze([]),
|
|
139
|
+
}),
|
|
140
|
+
Object.freeze({
|
|
141
|
+
id: "dead-code",
|
|
142
|
+
scripts: Object.freeze(["knip:check", "knip"]),
|
|
143
|
+
files: Object.freeze([]),
|
|
144
|
+
}),
|
|
145
|
+
Object.freeze({
|
|
146
|
+
id: "test-meaningfulness",
|
|
147
|
+
scripts: Object.freeze(["test:mutation"]),
|
|
148
|
+
files: Object.freeze([]),
|
|
149
|
+
}),
|
|
150
|
+
]),
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* One gate's resolved declaration plus the verdict this runner reached on it.
|
|
155
|
+
* @typedef {object} GateOutcome
|
|
156
|
+
* @property {string} id Gate id, e.g. `credential-leakage`.
|
|
157
|
+
* @property {string} level `required` or `optional`.
|
|
158
|
+
* @property {string} mode `run`, `await`, or `intercept`.
|
|
159
|
+
* @property {string|null} awaits Signal name, for an awaited gate.
|
|
160
|
+
* @property {string|null} task The task naming what proves this property.
|
|
161
|
+
* @property {string|null} command The command line, runner prefix included.
|
|
162
|
+
* @property {string} label The CI job name this gate posts under.
|
|
163
|
+
* @property {string|null} work What a nonzero count would prove.
|
|
164
|
+
* @property {string} state One of `STATE`.
|
|
165
|
+
* @property {string} detail The command, the skip reason, or the failure note.
|
|
166
|
+
* @property {number|null} code Exit code; null when nothing ran or was killed.
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* What running one moment produced.
|
|
171
|
+
* @typedef {object} GateRun
|
|
172
|
+
* @property {string} moment The moment that was run.
|
|
173
|
+
* @property {boolean} blocked Whether a required gate went unproved.
|
|
174
|
+
* @property {number} total Gates declared at this moment.
|
|
175
|
+
* @property {GateOutcome[]} results Every gate, in execution order.
|
|
176
|
+
* @property {GateOutcome[]} passed Gates that ran and exited zero.
|
|
177
|
+
* @property {GateOutcome[]} failed Gates that failed or could not be proved.
|
|
178
|
+
* @property {GateOutcome[]} skipped Gates with nothing to run locally.
|
|
179
|
+
* @property {GateOutcome[]} notRun Gates queued behind a blocking failure.
|
|
180
|
+
*/
|
|
181
|
+
|
|
182
|
+
/** Per-gate outcomes, in the order an operator reads them. */
|
|
183
|
+
export const STATE = Object.freeze({
|
|
184
|
+
PASSED: "passed",
|
|
185
|
+
FAILED: "failed",
|
|
186
|
+
SKIPPED: "skipped",
|
|
187
|
+
UNPROVABLE: "unprovable",
|
|
188
|
+
NOT_RUN: "not-run",
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
/** Column width for the state token, so the gate ids line up. */
|
|
192
|
+
const STATE_WIDTH = 11;
|
|
193
|
+
|
|
194
|
+
/** Column width for the gate id. */
|
|
195
|
+
const ID_WIDTH = 28;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Why a resolved gate has nothing for this runner to execute.
|
|
199
|
+
*
|
|
200
|
+
* Both modes are real enforcement — one intercepts an action before it
|
|
201
|
+
* happens, the other reads a signal posted against a pull request — but
|
|
202
|
+
* neither is a command with an exit code, so neither can run here.
|
|
203
|
+
* @param {GateOutcome} gate A gate from `resolveMoment`.
|
|
204
|
+
* @returns {string|null} The reason, or null when the gate does run here.
|
|
205
|
+
*/
|
|
206
|
+
function skipReason(gate) {
|
|
207
|
+
if (gate.mode === "intercept") {
|
|
208
|
+
return "enforced by interception; no task runs at this moment";
|
|
209
|
+
}
|
|
210
|
+
if (gate.mode === "await") {
|
|
211
|
+
return `awaits "${gate.awaits}"; no signal exists locally`;
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* One aligned line per gate, so a transcript can be read at a glance.
|
|
218
|
+
* @param {string} state A `STATE` value.
|
|
219
|
+
* @param {GateOutcome} gate The resolved gate.
|
|
220
|
+
* @param {string} detail Command, reason, or failure note.
|
|
221
|
+
* @returns {string} The formatted line.
|
|
222
|
+
*/
|
|
223
|
+
function formatLine(state, gate, detail) {
|
|
224
|
+
const token = `${state.toUpperCase()}`.padEnd(STATE_WIDTH);
|
|
225
|
+
const id = gate.id.padEnd(ID_WIDTH);
|
|
226
|
+
return ` ${token}${gate.level.padEnd(9)}${id}${detail}`;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Execute one gate and classify the result.
|
|
231
|
+
*
|
|
232
|
+
* A `null` or `undefined` exit code — which `spawnSync` produces when a child
|
|
233
|
+
* is killed by a signal — is a failure. It is emphatically not a pass: the
|
|
234
|
+
* command was terminated, so whatever it was proving went unproved.
|
|
235
|
+
* @param {GateOutcome} gate The resolved gate.
|
|
236
|
+
* @param {function(string, GateOutcome): (number|null)} exec Command executor.
|
|
237
|
+
* @returns {{state: string, detail: string, code: number|null}} The outcome.
|
|
238
|
+
*/
|
|
239
|
+
function execute(gate, exec) {
|
|
240
|
+
const code = exec(gate.command, gate);
|
|
241
|
+
if (code === 0) {
|
|
242
|
+
return { state: STATE.PASSED, detail: gate.command, code: 0 };
|
|
243
|
+
}
|
|
244
|
+
const shown = typeof code === "number" ? code : "terminated";
|
|
245
|
+
return {
|
|
246
|
+
state: STATE.FAILED,
|
|
247
|
+
detail: `${gate.command} (exit ${shown})`,
|
|
248
|
+
code: typeof code === "number" ? code : null,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Classify a gate without running it, when there is nothing to run.
|
|
254
|
+
* @param {GateOutcome} gate The resolved gate.
|
|
255
|
+
* @returns {{state: string, detail: string, code: null}|null} Outcome or null.
|
|
256
|
+
*/
|
|
257
|
+
function classifyStatic(gate) {
|
|
258
|
+
const skip = skipReason(gate);
|
|
259
|
+
if (skip) return { state: STATE.SKIPPED, detail: skip, code: null };
|
|
260
|
+
if (!gate.command) {
|
|
261
|
+
return {
|
|
262
|
+
state: STATE.UNPROVABLE,
|
|
263
|
+
detail: "resolves to no task, so nothing ran and nothing was proved",
|
|
264
|
+
code: null,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Summarise a completed run in operator-readable lines.
|
|
272
|
+
*
|
|
273
|
+
* Deliberately never emits an unqualified "all gates passed" while an optional
|
|
274
|
+
* gate is failing. A summary that hides a failure under a green headline is
|
|
275
|
+
* the same defect as a check that reports success without running.
|
|
276
|
+
* @param {GateRun} result The result of `runGates`.
|
|
277
|
+
* @returns {string[]} Summary lines.
|
|
278
|
+
*/
|
|
279
|
+
function summarise(result) {
|
|
280
|
+
const lines = [];
|
|
281
|
+
const byLevel = level => result.failed.filter(entry => entry.level === level);
|
|
282
|
+
const failedOptional = byLevel("optional");
|
|
283
|
+
|
|
284
|
+
for (const entry of byLevel("required")) {
|
|
285
|
+
lines.push(`❌ required gate FAILED: ${entry.id} — ${entry.detail}`);
|
|
286
|
+
}
|
|
287
|
+
for (const entry of failedOptional) {
|
|
288
|
+
lines.push(
|
|
289
|
+
`⚠️ optional gate FAILED: ${entry.id} — ${entry.detail} ` +
|
|
290
|
+
`(reported, not blocking)`
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
if (result.notRun.length) {
|
|
294
|
+
lines.push(
|
|
295
|
+
`⏭️ ${result.notRun.length} gate(s) NOT RUN after the blocking failure: ` +
|
|
296
|
+
`${result.notRun.map(entry => entry.id).join(", ")}`
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
if (result.blocked) return lines;
|
|
300
|
+
|
|
301
|
+
// Every count is stated, including the ones that are zero, so the headline
|
|
302
|
+
// can never imply more was proved than actually ran.
|
|
303
|
+
const counts =
|
|
304
|
+
`${result.passed.length} proved, ${failedOptional.length} failed ` +
|
|
305
|
+
`(optional), ${result.skipped.length} not provable here`;
|
|
306
|
+
lines.push(
|
|
307
|
+
`${failedOptional.length ? "⚠️ " : "✅"} ${result.moment}: ${counts}, ` +
|
|
308
|
+
`of ${result.total} gate(s) declared.` +
|
|
309
|
+
(failedOptional.length ? " See the optional failure(s) above." : "")
|
|
310
|
+
);
|
|
311
|
+
return lines;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Run every gate declared at one moment.
|
|
316
|
+
*
|
|
317
|
+
* `exec` is injected rather than imported so tests never spawn a process, and
|
|
318
|
+
* so a caller can substitute a different execution substrate without this
|
|
319
|
+
* file's verdict logic changing.
|
|
320
|
+
* @param {object} options Run inputs.
|
|
321
|
+
* @param {object} options.gates The gates block from `.lisa.config.json`.
|
|
322
|
+
* @param {string} options.moment The moment to run.
|
|
323
|
+
* @param {string} [options.runner] Task-runner prefix, e.g. `bun run`.
|
|
324
|
+
* @param {function(string, GateOutcome): (number|null)} options.exec Executor.
|
|
325
|
+
* @param {function(string): void} [options.out] Line sink; defaults to stdout.
|
|
326
|
+
* @returns {GateRun} What every declared gate at this moment produced.
|
|
327
|
+
*/
|
|
328
|
+
export function runGates({
|
|
329
|
+
gates,
|
|
330
|
+
moment,
|
|
331
|
+
runner = "npm run",
|
|
332
|
+
exec,
|
|
333
|
+
out = line => console.log(line),
|
|
334
|
+
}) {
|
|
335
|
+
const resolved = resolveMoment({ gates, moment, runner });
|
|
336
|
+
const results = [];
|
|
337
|
+
let blocked = false;
|
|
338
|
+
|
|
339
|
+
// Each verdict is printed as it is reached, not batched at the end: a push
|
|
340
|
+
// gate can run for minutes, and an operator watching a hook needs to know
|
|
341
|
+
// which gate is being proved right now, not only what the tally was.
|
|
342
|
+
for (const gate of resolved) {
|
|
343
|
+
const outcome = blocked
|
|
344
|
+
? { state: STATE.NOT_RUN, detail: "not run", code: null }
|
|
345
|
+
: (classifyStatic(gate) ?? execute(gate, exec));
|
|
346
|
+
results.push({ ...gate, ...outcome });
|
|
347
|
+
out(formatLine(outcome.state, gate, outcome.detail));
|
|
348
|
+
const unproved =
|
|
349
|
+
outcome.state === STATE.FAILED || outcome.state === STATE.UNPROVABLE;
|
|
350
|
+
if (unproved && gate.level === "required") blocked = true;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
const bucket = state => results.filter(entry => entry.state === state);
|
|
354
|
+
const result = {
|
|
355
|
+
moment,
|
|
356
|
+
blocked,
|
|
357
|
+
total: resolved.length,
|
|
358
|
+
results,
|
|
359
|
+
passed: bucket(STATE.PASSED),
|
|
360
|
+
failed: [...bucket(STATE.FAILED), ...bucket(STATE.UNPROVABLE)],
|
|
361
|
+
skipped: bucket(STATE.SKIPPED),
|
|
362
|
+
notRun: bucket(STATE.NOT_RUN),
|
|
363
|
+
};
|
|
364
|
+
for (const line of summarise(result)) out(line);
|
|
365
|
+
return result;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Floor properties this moment's gates block says nothing at all about.
|
|
370
|
+
*
|
|
371
|
+
* Presence is what is checked, not level: declaring `"off"` is a decision on
|
|
372
|
+
* the record and satisfies the floor. What the floor catches is silence — a
|
|
373
|
+
* property that stops being proved because nobody noticed it was missing.
|
|
374
|
+
* @param {object} options Inputs.
|
|
375
|
+
* @param {object} options.gates The gates block.
|
|
376
|
+
* @param {string} options.moment The moment being run.
|
|
377
|
+
* @param {string[]} [options.wired] Conditional floor ids this project wired,
|
|
378
|
+
* from `wiredConditionalFloor`. Empty by default so the comparison stays
|
|
379
|
+
* pure: what the project has installed is a separate reading of the disk.
|
|
380
|
+
* @returns {string[]} Undeclared floor gate ids.
|
|
381
|
+
*/
|
|
382
|
+
export function undeclaredFloor({ gates, moment, wired = [] }) {
|
|
383
|
+
const floor = [...(BUILTIN_FLOOR[moment] ?? []), ...wired];
|
|
384
|
+
return floor.filter(id => gates?.[id]?.[moment] === undefined);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Floor properties this moment's gates block DOES declare — its exact
|
|
389
|
+
* complement, and the answer `--coverage` writes out.
|
|
390
|
+
*
|
|
391
|
+
* Presence, not level, for the same reason: `"off"` is a decision on the
|
|
392
|
+
* record. A property declared off is one the project has said it does not want
|
|
393
|
+
* proved, and the built-in step standing down is that decision taking effect;
|
|
394
|
+
* silence is the case where nobody decided anything, and there the step runs.
|
|
395
|
+
* @param {object} options Inputs.
|
|
396
|
+
* @param {object} options.gates The gates block.
|
|
397
|
+
* @param {string} options.moment The moment being run.
|
|
398
|
+
* @param {string[]} [options.wired] Conditional floor ids this project wired.
|
|
399
|
+
* @returns {string[]} Declared floor gate ids.
|
|
400
|
+
*/
|
|
401
|
+
export function coveredFloor({ gates, moment, wired = [] }) {
|
|
402
|
+
const floor = [...(BUILTIN_FLOOR[moment] ?? []), ...wired];
|
|
403
|
+
return floor.filter(id => gates?.[id]?.[moment] !== undefined);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Which conditional floor steps this project has actually wired.
|
|
408
|
+
*
|
|
409
|
+
* An unreadable `package.json` counts every scripted entry as wired. The
|
|
410
|
+
* question being answered is "may this moment be handed to the registry", and
|
|
411
|
+
* the answer under uncertainty has to be no — guessing "not wired" would hand
|
|
412
|
+
* over a moment whose built-in steps might have been proving something.
|
|
413
|
+
* @param {object} options Inputs.
|
|
414
|
+
* @param {string} options.moment The moment being run.
|
|
415
|
+
* @param {string} [options.cwd] Project root.
|
|
416
|
+
* @returns {string[]} Conditional floor gate ids in force here.
|
|
417
|
+
*/
|
|
418
|
+
export function wiredConditionalFloor({ moment, cwd = process.cwd() }) {
|
|
419
|
+
const scripts = readPackageScripts(cwd);
|
|
420
|
+
return (CONDITIONAL_FLOOR[moment] ?? [])
|
|
421
|
+
.filter(
|
|
422
|
+
entry =>
|
|
423
|
+
entry.files.some(file => existsSync(join(cwd, file))) ||
|
|
424
|
+
entry.scripts.some(
|
|
425
|
+
name => scripts === null || Object.hasOwn(scripts, name)
|
|
426
|
+
)
|
|
427
|
+
)
|
|
428
|
+
.map(entry => entry.id);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* The `scripts` block of a project's `package.json`.
|
|
433
|
+
* @param {string} cwd Project root.
|
|
434
|
+
* @returns {Record<string, string>|null} The scripts, or null when unreadable.
|
|
435
|
+
*/
|
|
436
|
+
function readPackageScripts(cwd) {
|
|
437
|
+
const path = join(cwd, "package.json");
|
|
438
|
+
if (!existsSync(path)) return {};
|
|
439
|
+
try {
|
|
440
|
+
return JSON.parse(readFileSync(path, "utf8"))?.scripts ?? {};
|
|
441
|
+
} catch {
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* The default executor: run the command in a shell, inheriting stdio.
|
|
448
|
+
*
|
|
449
|
+
* stdio is inherited so a failing gate's own output reaches the operator
|
|
450
|
+
* unaltered. Swallowing it and reprinting a summary is how a failure becomes
|
|
451
|
+
* unactionable.
|
|
452
|
+
* @param {string} command The command line to run.
|
|
453
|
+
* @returns {number|null} Exit code, or null when killed by a signal.
|
|
454
|
+
*/
|
|
455
|
+
function spawnExec(command) {
|
|
456
|
+
const child = spawnSync(command, { shell: true, stdio: "inherit" });
|
|
457
|
+
if (child.error) return null;
|
|
458
|
+
return child.status;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Read a `--name=<value>` flag from the argument list.
|
|
463
|
+
* @param {string[]} argv Arguments after the script name.
|
|
464
|
+
* @param {string} name Flag name, without dashes.
|
|
465
|
+
* @returns {string|null} The value, or null when the flag is absent.
|
|
466
|
+
*/
|
|
467
|
+
function readFlag(argv, name) {
|
|
468
|
+
const hit = argv.find(arg => arg.startsWith(`--${name}=`));
|
|
469
|
+
return hit ? hit.slice(name.length + 3) : null;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Write the covered ids where the calling hook can read them.
|
|
474
|
+
*
|
|
475
|
+
* One id per line and nothing else — no diagnostics, no blank-line padding —
|
|
476
|
+
* because the reader is `grep -Fqx` in a shell, and anything else in this file
|
|
477
|
+
* is something a hook could mistake for a property it may stand down.
|
|
478
|
+
* @param {string} path File to write.
|
|
479
|
+
* @param {string[]} ids Covered gate ids.
|
|
480
|
+
* @returns {boolean} Whether the file was written.
|
|
481
|
+
*/
|
|
482
|
+
function writeCoverage(path, ids) {
|
|
483
|
+
try {
|
|
484
|
+
writeFileSync(path, ids.length ? `${ids.join("\n")}\n` : "");
|
|
485
|
+
return true;
|
|
486
|
+
} catch (err) {
|
|
487
|
+
console.error(`⚠️ Could not record gate coverage: ${err.message}`);
|
|
488
|
+
console.error(" The built-in checks will all run.");
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* CLI entry point. Every exit path is one of `EXIT`.
|
|
495
|
+
* @returns {number} The process exit code.
|
|
496
|
+
*/
|
|
497
|
+
function main() {
|
|
498
|
+
const argv = process.argv.slice(2);
|
|
499
|
+
const moment = readFlag(argv, "moment");
|
|
500
|
+
const coveragePath = readFlag(argv, "coverage");
|
|
501
|
+
if (!moment) {
|
|
502
|
+
console.error(
|
|
503
|
+
"usage: lisa-run-gates.mjs --moment=<moment> [--coverage=<file>]"
|
|
504
|
+
);
|
|
505
|
+
return EXIT.RUNNER_FAILED;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
let config;
|
|
509
|
+
try {
|
|
510
|
+
config = readGates();
|
|
511
|
+
} catch (err) {
|
|
512
|
+
console.error(
|
|
513
|
+
`⚠️ Gate runner could not read configuration: ${err.message}`
|
|
514
|
+
);
|
|
515
|
+
console.error(" Nothing was proved by the gate registry at this moment.");
|
|
516
|
+
return EXIT.RUNNER_FAILED;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// The gates BLOCK is the migration switch. Its absence means this project
|
|
520
|
+
// has not adopted the registry, so the caller must run its hardcoded steps.
|
|
521
|
+
if (!config.gates || Object.keys(config.gates).length === 0) {
|
|
522
|
+
if (coveragePath) writeCoverage(coveragePath, []);
|
|
523
|
+
return EXIT.NO_GATES;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
const wired = wiredConditionalFloor({ moment });
|
|
527
|
+
const missing = undeclaredFloor({ gates: config.gates, moment, wired });
|
|
528
|
+
|
|
529
|
+
// `--coverage` is how a caller says "I skip my built-in steps ONE AT A TIME,
|
|
530
|
+
// against the names in this file". Such a caller does not need the moment
|
|
531
|
+
// withheld from it: a property it never sees named keeps its own step, so a
|
|
532
|
+
// half-written block loses nothing and the project gets the gates it did
|
|
533
|
+
// declare. Without the flag the caller is an older hook whose only lever is
|
|
534
|
+
// all-or-nothing, and for that one the moment is still withheld below.
|
|
535
|
+
if (coveragePath) {
|
|
536
|
+
if (
|
|
537
|
+
!writeCoverage(
|
|
538
|
+
coveragePath,
|
|
539
|
+
coveredFloor({ gates: config.gates, moment, wired })
|
|
540
|
+
)
|
|
541
|
+
) {
|
|
542
|
+
return EXIT.RUNNER_FAILED;
|
|
543
|
+
}
|
|
544
|
+
if (missing.length) {
|
|
545
|
+
console.log(
|
|
546
|
+
`ℹ️ The gates block says nothing about ${missing.join(", ")} at ` +
|
|
547
|
+
`${moment}; the built-in check for ${missing.length === 1 ? "it" : "each of them"} still runs.`
|
|
548
|
+
);
|
|
549
|
+
}
|
|
550
|
+
} else if (missing.length) {
|
|
551
|
+
// A half-written block is an unmigrated project, not a migrated one with
|
|
552
|
+
// fewer guarantees. Fall back rather than let omission delete a property,
|
|
553
|
+
// and name what is missing so finishing the migration is a mechanical edit.
|
|
554
|
+
console.log(
|
|
555
|
+
`ℹ️ The gates block says nothing about ${missing.join(", ")} at ` +
|
|
556
|
+
`${moment}, and the built-in checks prove ${missing.length === 1 ? "it" : "them"}.`
|
|
557
|
+
);
|
|
558
|
+
console.log(
|
|
559
|
+
` Running the built-in checks so nothing stops being proved. Declare ` +
|
|
560
|
+
`${missing.length === 1 ? "that gate" : "those gates"} at "${moment}" ` +
|
|
561
|
+
`(a level of "off" counts as a decision) to hand this moment to the ` +
|
|
562
|
+
`registry.`
|
|
563
|
+
);
|
|
564
|
+
return EXIT.NO_GATES;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
console.log(`🚦 Gates at ${moment}:`);
|
|
568
|
+
const result = runGates({
|
|
569
|
+
gates: config.gates,
|
|
570
|
+
moment,
|
|
571
|
+
runner: config.runner,
|
|
572
|
+
exec: spawnExec,
|
|
573
|
+
});
|
|
574
|
+
// A gates block that declares nothing at this moment is a deliberate
|
|
575
|
+
// statement, not an unmigrated project: the registry governs the moment and
|
|
576
|
+
// says there is nothing to prove. Say so rather than silently passing.
|
|
577
|
+
if (result.total === 0) {
|
|
578
|
+
console.log(` (the gates block declares nothing at ${moment})`);
|
|
579
|
+
}
|
|
580
|
+
return result.blocked ? EXIT.BLOCKED : EXIT.PROVED;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
// Through the shared helper, not a hand-rolled comparison: a guard that
|
|
584
|
+
// answers "no" for an entry point reached through a symlink — which is every
|
|
585
|
+
// git worktree, and every /tmp path on macOS — makes this module load, run
|
|
586
|
+
// nothing, and exit 0, which the hooks read as "every required gate was
|
|
587
|
+
// proved" and skip every built-in check on. The most dangerous shape of the
|
|
588
|
+
// defect this subsystem exists to stop, in the file that decides whether the
|
|
589
|
+
// others run.
|
|
590
|
+
if (invokedAsScript(import.meta.url)) {
|
|
591
|
+
try {
|
|
592
|
+
process.exit(main());
|
|
593
|
+
} catch (err) {
|
|
594
|
+
console.error(`⚠️ Gate runner crashed: ${err.message}`);
|
|
595
|
+
process.exit(EXIT.RUNNER_FAILED);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"
|
|
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,CAsTjC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable max-lines -- generated append-only hash ledger */
|
|
1
2
|
/** Generated by scripts/generate-lisa-owned-hash-ledger.mjs. Do not edit. */
|
|
2
3
|
/**
|
|
3
4
|
* Every content hash Lisa has published at each Lisa-owned destination path.
|
|
@@ -179,6 +180,18 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
179
180
|
"3c7a0234b4f5609fce49e44711d2ec86af8cf7fb82b0831e4450e3347ecefe45",
|
|
180
181
|
"a612f172282d13ba9318fe5e03689d7c6ff42a0122d0c9d5d39051e1967b93dc",
|
|
181
182
|
]),
|
|
183
|
+
"scripts/lisa-gates.mjs": Object.freeze([
|
|
184
|
+
"13ac69bf2bbae76bc702506bcef5c8fb2b26befaf1358627f4726c1a8ac5905a",
|
|
185
|
+
"4907989922ad86f5c162413e1b4c8560b6e7bb9417ab4d109f8dbfc676d4921e",
|
|
186
|
+
"7249cbe9f8fddfa6087331fa7fccd9df9813f5ba764623b747273a0ebbcbb576",
|
|
187
|
+
"79b646d543b541c096d79526fa09dbda3408667ba1a99ee833f94668b181433b",
|
|
188
|
+
"7d89a49da89895a3e377702d0049e1dbcc7ea666dcfa3749874f0986db31ee1a",
|
|
189
|
+
"9195c267d98f2fa8071fc0bd2d5623a7ab82f82d136bdb23061f89a2c1db6efe",
|
|
190
|
+
"cc4270e365f53c60a5eefb58a8ac8e22be184c0821fcdcc8fe67bcfc1df5e3dd",
|
|
191
|
+
"dbca450e5a17133841ab015e71808feb028996f8297fda362dbeca4f07af2352",
|
|
192
|
+
"e7d928c3b2d878c7a9ec9589894dfc3feaba54b8913c87be0550c34a1431ed9f",
|
|
193
|
+
"fbd68cf571985d7cfccf0f280cfe8112955849126e44d27d55ad619f9abb79ef",
|
|
194
|
+
]),
|
|
182
195
|
"scripts/lisa-hooks/block-direct-issue-create.sh": Object.freeze([
|
|
183
196
|
"22184f1dd1b96e818741bd4ae659446299535d7ce594817155edebac4172a7ba",
|
|
184
197
|
"60a4f94ec671b2372f7492680ab327d97aff686588ce85791f54e0fbd098b0ca",
|
|
@@ -246,6 +259,17 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
246
259
|
"8e0bdb491dfaea04e88be1c1e2c6cc7cd34fa4ca18adddf5fecc43d7de8ffded",
|
|
247
260
|
"a630bde6cddae283776b8d34763a3642edbea8096d583a90ec6d43a9588ca8a6",
|
|
248
261
|
]),
|
|
262
|
+
"scripts/lisa-reconcile-policy.mjs": Object.freeze([
|
|
263
|
+
"3c062d0b79961a9a93a822507e893dcdaa71d65d735557727d20464c2489d812",
|
|
264
|
+
"4b383ff960d7da53e0dd46e37632ef55c5a38b004fb4aabfe91a25a9fe02d88f",
|
|
265
|
+
"9b613888c4c1cc6cc2b1fb6e162a4c766012eab0ec4f8b7f2ac1bc3da6622c97",
|
|
266
|
+
]),
|
|
267
|
+
"scripts/lisa-run-gates.mjs": Object.freeze([
|
|
268
|
+
"235c541534fc0eca510135ac39b9fbd196965fbeb54d42a09fbf052da1c925cd",
|
|
269
|
+
"c705d400f51a3a08ada085fc1107c3dce558f9a717528fc1fe9315aa6b97a5e6",
|
|
270
|
+
"e00f16cdc399c8ee61c7a3972469fbb4b662e0fff00bd9d3d6910f3f27a5f04c",
|
|
271
|
+
"e429308896cf0450b2e5dfae9a580dde1a8da351503998c07ca3506e8b2ffdce",
|
|
272
|
+
]),
|
|
249
273
|
"scripts/lisa-schema-validate.mjs": Object.freeze([
|
|
250
274
|
"2ace82daacdebbbb00a7eceb09fbe82cabec04330a083ca10417b2ee4e0a63eb",
|
|
251
275
|
"4a05a0ed70a274827fd2f0fd0c98890c66bee2fde70785b8379943ebe6650473",
|
|
@@ -294,4 +318,5 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
294
318
|
"fee19c88c89eed5a2949dea42c4a4c794f04aabf0e36c71cdda70ffaaf2b17c9",
|
|
295
319
|
]),
|
|
296
320
|
});
|
|
321
|
+
/* eslint-enable max-lines -- end generated append-only hash ledger */
|
|
297
322
|
//# sourceMappingURL=lisa-owned-hash-ledger.js.map
|
|
@@ -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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAs1EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAwpOjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|