@codyswann/lisa 4.71.9 → 4.71.11

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.
Files changed (64) hide show
  1. package/all/copy-overwrite/scripts/lib/github-attestation-recovery.mjs +19 -7
  2. package/all/copy-overwrite/scripts/lib/npm-update-cancel-origin.mjs +14 -8
  3. package/all/copy-overwrite/scripts/lib/npm-update-cancellation-proof.mjs +5 -9
  4. package/all/copy-overwrite/scripts/lisa-work-item.mjs +65 -4
  5. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +5 -4
  6. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  7. package/dist/core/lisa-owned-hash-ledger.js +14 -0
  8. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  9. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  10. package/dist/core/nightly-e2e-guard-behavior-certificate.js.map +1 -1
  11. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  12. package/dist/core/upstream-evidence-manifest.js +6 -5
  13. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  14. package/package.json +4 -4
  15. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-agy/plugin.json +1 -1
  18. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  21. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-expo-agy/plugin.json +1 -1
  28. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  38. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  43. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  48. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-rails-agy/plugin.json +1 -1
  53. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  58. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  63. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
@@ -17,6 +17,20 @@ import {
17
17
  RECOVERY_PREDICATE,
18
18
  } from "./github-attestation-verifier.mjs";
19
19
 
20
+ /** An active run's update is not completion; invalid provider chronology has no usable bounds. */
21
+ export function observedRunChronology(run, now) {
22
+ const start = Date.parse(run.run_started_at);
23
+ const updated = Date.parse(run.updated_at);
24
+ if (
25
+ ![now, start, updated].every(Number.isFinite) ||
26
+ !["in_progress", "completed"].includes(run.status) ||
27
+ start > updated ||
28
+ updated > now + 60_000
29
+ )
30
+ return null;
31
+ return { start, end: run.status === "in_progress" ? now : updated };
32
+ }
33
+
20
34
  /** Historical origin authenticates bytes only within witnessed provider chronology. */
21
35
  export function assertHistoricalAttestation(
22
36
  results,
@@ -35,15 +49,13 @@ export function assertHistoricalAttestation(
35
49
  PROPOSAL_PREDICATE,
36
50
  "descriptor.json"
37
51
  );
38
- const start = Date.parse(run.run_started_at),
39
- updated = Date.parse(run.updated_at),
40
- claimed = Date.parse(claim.created_at);
52
+ const chronology = observedRunChronology(run, now);
53
+ const claimed = Date.parse(claim.created_at);
41
54
  requireProof(
42
- [start, updated, claimed].every(Number.isFinite) &&
43
- start <= updated &&
44
- updated <= now + 60_000,
55
+ chronology && Number.isFinite(claimed),
45
56
  "missing/invalid historical provider chronology"
46
57
  );
58
+ const { start, end } = chronology;
47
59
  // Official signature/timestamp verification already authenticates these times.
48
60
  matchSigningTime(
49
61
  result.verifiedTimestamps,
@@ -55,7 +67,7 @@ export function assertHistoricalAttestation(
55
67
  requireProof(
56
68
  signed >= start - 60_000 &&
57
69
  signed >= claimed - 60_000 &&
58
- signed <= updated + 60_000,
70
+ signed <= end + 60_000,
59
71
  "origin signed outside provider chronology"
60
72
  );
61
73
  }
@@ -27,7 +27,10 @@ import {
27
27
  } from "./npm-update-leaf.mjs";
28
28
  import { sha256 } from "./github-attestation-verifier.mjs";
29
29
  import { verifyStaleOriginProvider } from "./github-attestation-provider.mjs";
30
- import { verifyHistoricalDescriptor } from "./github-attestation-recovery.mjs";
30
+ import {
31
+ observedRunChronology,
32
+ verifyHistoricalDescriptor,
33
+ } from "./github-attestation-recovery.mjs";
31
34
  import {
32
35
  DESCRIPTOR_KEYS,
33
36
  optionalLockFields,
@@ -98,13 +101,16 @@ function originCheckpoint(issue) {
98
101
  }
99
102
 
100
103
  /** Original chunk bytes must be the unedited Bot's posts during its witnessed run, not later copied markers. */
101
- export function assertOriginTransport(comments, digest, policy, run) {
102
- const start = Date.parse(run.run_started_at),
103
- end = Date.parse(run.updated_at);
104
- required(
105
- Number.isFinite(start) && Number.isFinite(end) && start <= end,
106
- "invalid original transport chronology"
107
- );
104
+ export function assertOriginTransport(
105
+ comments,
106
+ digest,
107
+ policy,
108
+ run,
109
+ now = Date.now()
110
+ ) {
111
+ const chronology = observedRunChronology(run, now);
112
+ required(chronology, "invalid original transport chronology");
113
+ const { start, end } = chronology;
108
114
  const selected = comments.filter(comment =>
109
115
  comment.body?.startsWith(`[lisa-npm-checkpoint] v1 ${digest} `)
110
116
  );
@@ -4,6 +4,7 @@
4
4
  /** A manual cancellation is a third fixed signing purpose, never publication or review authority. */
5
5
  import { canonicalJson } from "../lisa-automation-provenance.mjs";
6
6
  import { required, keys, FILES, OBJECT } from "./npm-update-contract.mjs";
7
+ import { observedRunChronology } from "./github-attestation-recovery.mjs";
7
8
  import {
8
9
  verifiedRole,
9
10
  matchSigningTime,
@@ -276,14 +277,9 @@ export function assertRecordedCancellation(
276
277
  CANCELLATION_PREDICATE,
277
278
  "cancellation.json"
278
279
  );
279
- const started = Date.parse(run.run_started_at);
280
- const updated = Date.parse(run.updated_at);
281
- required(
282
- [started, updated].every(Number.isFinite) &&
283
- started <= updated &&
284
- updated <= now + 60_000,
285
- "invalid cancellation provider chronology"
286
- );
280
+ const chronology = observedRunChronology(run, now);
281
+ required(chronology, "invalid cancellation provider chronology");
282
+ const { start, end } = chronology;
287
283
  matchSigningTime(
288
284
  result.verifiedTimestamps,
289
285
  { ...policy, maxAgeSeconds: Number.MAX_SAFE_INTEGER },
@@ -292,7 +288,7 @@ export function assertRecordedCancellation(
292
288
  for (const time of result.verifiedTimestamps) {
293
289
  const signed = Date.parse(time.timestamp);
294
290
  required(
295
- signed >= started - 60_000 && signed <= updated + 60_000,
291
+ signed >= start - 60_000 && signed <= end + 60_000,
296
292
  "cancellation signed outside provider chronology"
297
293
  );
298
294
  }
@@ -3409,7 +3409,7 @@ function parsePushGroups(input, remote) {
3409
3409
  // scoped to branch-authored commits (issue #1956).
3410
3410
  const defaultRef = remoteDefaultRef(remote);
3411
3411
  for (const line of input.trim().split(/\r?\n/).filter(Boolean)) {
3412
- const [localRef, localOid, , remoteOid] = line.trim().split(/\s+/);
3412
+ const [localRef, localOid, remoteRef, remoteOid] = line.trim().split(/\s+/);
3413
3413
  if (!localOid || ZERO_OID.test(localOid)) continue;
3414
3414
  const existing = Boolean(remoteOid) && !ZERO_OID.test(remoteOid);
3415
3415
  const args = existing
@@ -3430,6 +3430,7 @@ function parsePushGroups(input, remote) {
3430
3430
  ? `${localRef} ${abbreviate(remoteOid)}..${abbreviate(localOid)}`
3431
3431
  : `${localRef} (new branch) ${abbreviate(localOid)}`,
3432
3432
  localRef,
3433
+ remoteRef,
3433
3434
  scope: args,
3434
3435
  });
3435
3436
  }
@@ -6094,6 +6095,7 @@ function pushGroups(input, remote) {
6094
6095
  commits: [],
6095
6096
  examinedScope: parsed[0]?.examinedScope ?? HEAD_FALLBACK_SCOPE,
6096
6097
  localRef: parsed[0]?.localRef,
6098
+ remoteRef: parsed[0]?.remoteRef,
6097
6099
  // Empty on purpose: `ancestryUnreachable` asks a question OF A RANGE,
6098
6100
  // and there is no range here. `examinedScope` above is the separate,
6099
6101
  // human-readable answer to "what did this verdict look at".
@@ -6200,6 +6202,11 @@ export function unreachableAncestryRefusal(localRef) {
6200
6202
  */
6201
6203
  function prTargetGroup(groups, pr) {
6202
6204
  if (!pr) return undefined;
6205
+ const destination = groups.find(
6206
+ group =>
6207
+ pr.headRefName && group.remoteRef === `${HEADS_PREFIX}${pr.headRefName}`
6208
+ );
6209
+ if (destination) return destination;
6203
6210
  if (groups.length === 1) return groups[0];
6204
6211
  const branch = activeBranch();
6205
6212
  return groups.find(
@@ -6207,6 +6214,51 @@ function prTargetGroup(groups, pr) {
6207
6214
  );
6208
6215
  }
6209
6216
 
6217
+ /**
6218
+ * Keep a stacked PR's inherited base work out of its body declaration.
6219
+ *
6220
+ * The raw push scope still governs ancestry validation. Only the matching
6221
+ * child destination's declaration scope is intersected with the immutable base
6222
+ * commit GitHub reported; other pushed branches and deploy bases retain their
6223
+ * existing scope. An unavailable base refuses instead of guessing from a
6224
+ * possibly stale local branch name.
6225
+ * @param {object} group Raw pushed ref and its commits.
6226
+ * @param {object|undefined} pr Current branch's pull request.
6227
+ * @param {string} remote Push destination.
6228
+ * @returns {object} The declaration scope for this push.
6229
+ */
6230
+ function stackedPrPushGroup(group, pr, remote) {
6231
+ if (
6232
+ !pr?.baseRefName ||
6233
+ deployBranchNames(remote).has(pr.baseRefName) ||
6234
+ !pr.headRefName ||
6235
+ group.remoteRef !== `${HEADS_PREFIX}${pr.headRefName}` ||
6236
+ group.commits.length === 0
6237
+ )
6238
+ return group;
6239
+ const base = pr.baseRefOid;
6240
+ if (typeof base !== "string" || !/^[a-f0-9]{40}$/i.test(base))
6241
+ throw new TrackingError(
6242
+ "The stacked pull request's base commit could not be read. Refresh its GitHub metadata before pushing."
6243
+ );
6244
+ const available = run("git", ["cat-file", "-e", `${base}^{commit}`], {
6245
+ allowFailure: true,
6246
+ });
6247
+ if (available.status !== 0)
6248
+ throw new TrackingError(
6249
+ "The stacked pull request's base commit is not available locally. Fetch the pull request's base branch, then push again."
6250
+ );
6251
+ // Put the exclusion before any --not toggle in the original argv. This
6252
+ // preserves the existing incremental range and avoids walking the whole PR.
6253
+ const scope = ["rev-list", `^${base}`, ...group.scope.slice(1)];
6254
+ return {
6255
+ ...group,
6256
+ commits: git(scope).split("\n").filter(Boolean),
6257
+ examinedScope: `${group.examinedScope}; excluding PR base ${abbreviate(base)}`,
6258
+ scope,
6259
+ };
6260
+ }
6261
+
6210
6262
  /**
6211
6263
  * What a push could not prove here, named rather than left to CI to reveal.
6212
6264
  *
@@ -6371,7 +6423,11 @@ function validatePush(args) {
6371
6423
  // anything, but so could a `--no-verify`; CI is the enforcing copy.
6372
6424
  const configRef = remoteDefaultRef(remote);
6373
6425
  const groups = pushGroups(input, remote);
6374
- const pr = currentPullRequest();
6426
+ const pr = currentPullRequest(
6427
+ undefined,
6428
+ undefined,
6429
+ "url,body,state,baseRefName,baseRefOid,headRefName"
6430
+ );
6375
6431
  const target = prTargetGroup(groups, pr);
6376
6432
  for (const group of groups) {
6377
6433
  // BEFORE the commits are judged, not after: every verdict below is computed
@@ -6380,12 +6436,17 @@ function validatePush(args) {
6380
6436
  // produced a refusal naming a stranger's closed ticket (#3719).
6381
6437
  if (ancestryUnreachable(group, remote))
6382
6438
  throw unreachableAncestryRefusal(group.localRef);
6383
- const outcome = commitOutcome(group.commits, configRef, remote);
6439
+ const declaration = stackedPrPushGroup(
6440
+ group,
6441
+ group === target ? pr : undefined,
6442
+ remote
6443
+ );
6444
+ const outcome = commitOutcome(declaration.commits, configRef, remote);
6384
6445
  reportPushGroup(
6385
6446
  outcome,
6386
6447
  group === target ? pr : undefined,
6387
6448
  groups.length > 1 ? `${group.localRef ?? "(stdin)"}: ` : "",
6388
- group.examinedScope
6449
+ declaration.examinedScope
6389
6450
  );
6390
6451
  }
6391
6452
  }
@@ -91,7 +91,7 @@
91
91
  "children": []
92
92
  },
93
93
  "lib/github-attestation-recovery.mjs": {
94
- "sha256": "adb3e7bbc8d3986a84c2934181b5518c96a2690e7cfef7d6ff77a405c6a957d7",
94
+ "sha256": "ff89d72300035a2554cf3e406b1054ca3c8a494d6a5768ea4981f4c87c50e981",
95
95
  "staticImports": [
96
96
  "lib/automation-provenance-local.mjs",
97
97
  "lib/bounded-spawn.mjs",
@@ -246,7 +246,7 @@
246
246
  "children": []
247
247
  },
248
248
  "lib/npm-update-cancel-origin.mjs": {
249
- "sha256": "635dd82d23042337d68e441b43cec26c171fef9ac57c7e9c5de14af0587d7e43",
249
+ "sha256": "aff226288a26dcbb53a42cd6555ebe15ef7250d3b2b2c291be702d8ddd3bac3a",
250
250
  "staticImports": [
251
251
  "lib/automation-provenance-contract.mjs",
252
252
  "lib/github-attestation-provider.mjs",
@@ -264,8 +264,9 @@
264
264
  "children": []
265
265
  },
266
266
  "lib/npm-update-cancellation-proof.mjs": {
267
- "sha256": "9262c81836683572d1135112b8cfd0f43abcb050c9f8d84ef7dfb77b8caac59c",
267
+ "sha256": "e40fed4696ee91d8e73f1abd4d307d8ad6aa484ac3d24262120a5e048ba96b7b",
268
268
  "staticImports": [
269
+ "lib/github-attestation-recovery.mjs",
269
270
  "lib/github-attestation-verifier.mjs",
270
271
  "lib/npm-update-contract.mjs",
271
272
  "lisa-automation-provenance.mjs"
@@ -1129,7 +1130,7 @@
1129
1130
  "children": []
1130
1131
  },
1131
1132
  "lisa-work-item.mjs": {
1132
- "sha256": "b396e85f1652e07e8b64e32cb310331156ee1bb61fb1d8a7973b896dd2522004",
1133
+ "sha256": "64f01819287d902ed830285c256dd0a589330bce5be9c7b8b1f2563d811db287",
1133
1134
  "staticImports": [
1134
1135
  "lib/invoked-as-script.mjs",
1135
1136
  "node:child_process",
@@ -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,CA00DjC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA6uDjC,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,CAi1DjC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAovDjC,CAAC"}
@@ -475,6 +475,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
475
475
  "scripts/lib/github-attestation-recovery.mjs": Object.freeze([
476
476
  "60d74d266cfacc582a3d6d6ff8be78e6b4e204370067955c2ec7a843a810f863",
477
477
  "adb3e7bbc8d3986a84c2934181b5518c96a2690e7cfef7d6ff77a405c6a957d7",
478
+ "ff89d72300035a2554cf3e406b1054ca3c8a494d6a5768ea4981f4c87c50e981",
478
479
  ]),
479
480
  "scripts/lib/github-attestation-verifier.mjs": Object.freeze([
480
481
  "68d69315436c7c60870b67f74efce36e979cf0823cdbbbb68b3e0a06ef017a4f",
@@ -541,12 +542,14 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
541
542
  "scripts/lib/npm-update-cancel-origin.mjs": Object.freeze([
542
543
  "331554c8d2201fb6fe6934d158f5f60d7da11bbb1d4aa938ef9437afe724b5ff",
543
544
  "635dd82d23042337d68e441b43cec26c171fef9ac57c7e9c5de14af0587d7e43",
545
+ "aff226288a26dcbb53a42cd6555ebe15ef7250d3b2b2c291be702d8ddd3bac3a",
544
546
  ]),
545
547
  "scripts/lib/npm-update-cancellation-proof.mjs": Object.freeze([
546
548
  "56365dbe20ef540b8a3d59a3ce9e0fa33c9c4efdfb27c2b69e27cbe60b2ba204",
547
549
  "9262c81836683572d1135112b8cfd0f43abcb050c9f8d84ef7dfb77b8caac59c",
548
550
  "afb25ab04fceb925931d62dab568b1633b16601d352ed1763190e344e319d2cd",
549
551
  "c4ca24d4fa152525c10993d563284bf8ea7b7b0799a78a38f8deec059ccaa2cd",
552
+ "e40fed4696ee91d8e73f1abd4d307d8ad6aa484ac3d24262120a5e048ba96b7b",
550
553
  ]),
551
554
  "scripts/lib/npm-update-cancellation.mjs": Object.freeze([
552
555
  "529122fd37117526d97277de116fe0080bce85557062585bd73ce7d8be2f88b9",
@@ -1630,6 +1633,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
1630
1633
  "62f53156d425198609564e996f3844f52ab110e63f99f22e8338fcf7a83f316d",
1631
1634
  "637741a9e5d2904aed24d48efd6bec1326c5573f718a13152807aa0e4b42f0a1",
1632
1635
  "645cbf7c17b14f44f85231495266d63e10272538ca2274dfbae3d3c4e836cfe8",
1636
+ "64f01819287d902ed830285c256dd0a589330bce5be9c7b8b1f2563d811db287",
1633
1637
  "653252b0bbfd19bdffa046a2173c053e566ac6bf605c8d9060f9cf71ad7386de",
1634
1638
  "65fe3ab4e89a617345ccf0ee29c439442ed29d699f8598b28907c2cb8d38c1b3",
1635
1639
  "6714af0434131556203f024b68e0d4c8d50fd3f1e099e8abfeb84d9c93dc4643",
@@ -1789,6 +1793,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
1789
1793
  "2423c7c0f36a14f5aa66258713204d07fe82924d85796e488892d94acd52afc9",
1790
1794
  "29d6986ecf8b659f829517a1e0bac2ef456934633cb8e5842756abc37359d870",
1791
1795
  "322d4edf19711c6ff19d4152172669320bf4806a2190d3b5e2aa420901acebbb",
1796
+ "381611fa7242751ab28617797c257b5137f928c8bff1041eec0821014638fbd5",
1792
1797
  "57d2072ff209a1188bcd89cf3276baadf626201182a672a4e477a96488bd3a0e",
1793
1798
  "5e8881466a13bdfcaefa5ae056c59e9fc869c85f83701ef3d770473aaece3b12",
1794
1799
  "617976fa328bde110f953967490e2cacb22fa3c13963b1ccece71b830feb929f",
@@ -1799,7 +1804,9 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
1799
1804
  "70117ada2fe96b4697f695f860547a0e47eb7d20e864eac929047722cb3e6e2c",
1800
1805
  "702b455a3157565b910904a3acfcdbf4722befc660d60242c649ff020fe96b3b",
1801
1806
  "7b1d6bba391f105b9d53b91773fd207c9a5e9b5bfcd638e1e6b579d507279d7d",
1807
+ "8a3c46d3501797ebb53a081c8b35e78e0ceb2b060503332b48e44ccc30d6d0df",
1802
1808
  "9344207510f0c613088b4c82c9b3962a815ec79d0664886bf01f34b7a6f1f4ab",
1809
+ "a114ac60b0e390ad2518bda5871aa1c9680755f10fe36ebae26de4ad170490d5",
1803
1810
  "a1ca3cd8fb9a9ed969c256bdcee5b4b4e740e58fe1cb43d38b7b4572823532b8",
1804
1811
  "b2f392ac7eb9f645583dfbe357d608ab266c19177230b9b4420baa8975573b2c",
1805
1812
  "b45d7b88eeadaf859ac312398aa49fc7e1f1882d1b5afcf58676178ea0695b58",
@@ -2335,6 +2342,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
2335
2342
  "scripts/lib/github-attestation-recovery.mjs": Object.freeze([
2336
2343
  "60d74d266cfacc582a3d6d6ff8be78e6b4e204370067955c2ec7a843a810f863",
2337
2344
  "adb3e7bbc8d3986a84c2934181b5518c96a2690e7cfef7d6ff77a405c6a957d7",
2345
+ "ff89d72300035a2554cf3e406b1054ca3c8a494d6a5768ea4981f4c87c50e981",
2338
2346
  ]),
2339
2347
  "scripts/lib/github-attestation-verifier.mjs": Object.freeze([
2340
2348
  "68d69315436c7c60870b67f74efce36e979cf0823cdbbbb68b3e0a06ef017a4f",
@@ -2401,12 +2409,14 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
2401
2409
  "scripts/lib/npm-update-cancel-origin.mjs": Object.freeze([
2402
2410
  "331554c8d2201fb6fe6934d158f5f60d7da11bbb1d4aa938ef9437afe724b5ff",
2403
2411
  "635dd82d23042337d68e441b43cec26c171fef9ac57c7e9c5de14af0587d7e43",
2412
+ "aff226288a26dcbb53a42cd6555ebe15ef7250d3b2b2c291be702d8ddd3bac3a",
2404
2413
  ]),
2405
2414
  "scripts/lib/npm-update-cancellation-proof.mjs": Object.freeze([
2406
2415
  "56365dbe20ef540b8a3d59a3ce9e0fa33c9c4efdfb27c2b69e27cbe60b2ba204",
2407
2416
  "9262c81836683572d1135112b8cfd0f43abcb050c9f8d84ef7dfb77b8caac59c",
2408
2417
  "afb25ab04fceb925931d62dab568b1633b16601d352ed1763190e344e319d2cd",
2409
2418
  "c4ca24d4fa152525c10993d563284bf8ea7b7b0799a78a38f8deec059ccaa2cd",
2419
+ "e40fed4696ee91d8e73f1abd4d307d8ad6aa484ac3d24262120a5e048ba96b7b",
2410
2420
  ]),
2411
2421
  "scripts/lib/npm-update-cancellation.mjs": Object.freeze([
2412
2422
  "529122fd37117526d97277de116fe0080bce85557062585bd73ce7d8be2f88b9",
@@ -3421,6 +3431,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
3421
3431
  "60bc3a715e02b5bf57f324f78e6da46dbb6dbb7769177c42139f7b7a2806eea6",
3422
3432
  "62f53156d425198609564e996f3844f52ab110e63f99f22e8338fcf7a83f316d",
3423
3433
  "645cbf7c17b14f44f85231495266d63e10272538ca2274dfbae3d3c4e836cfe8",
3434
+ "64f01819287d902ed830285c256dd0a589330bce5be9c7b8b1f2563d811db287",
3424
3435
  "653252b0bbfd19bdffa046a2173c053e566ac6bf605c8d9060f9cf71ad7386de",
3425
3436
  "65fe3ab4e89a617345ccf0ee29c439442ed29d699f8598b28907c2cb8d38c1b3",
3426
3437
  "6714af0434131556203f024b68e0d4c8d50fd3f1e099e8abfeb84d9c93dc4643",
@@ -3579,6 +3590,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
3579
3590
  "2423c7c0f36a14f5aa66258713204d07fe82924d85796e488892d94acd52afc9",
3580
3591
  "29d6986ecf8b659f829517a1e0bac2ef456934633cb8e5842756abc37359d870",
3581
3592
  "322d4edf19711c6ff19d4152172669320bf4806a2190d3b5e2aa420901acebbb",
3593
+ "381611fa7242751ab28617797c257b5137f928c8bff1041eec0821014638fbd5",
3582
3594
  "57d2072ff209a1188bcd89cf3276baadf626201182a672a4e477a96488bd3a0e",
3583
3595
  "5e8881466a13bdfcaefa5ae056c59e9fc869c85f83701ef3d770473aaece3b12",
3584
3596
  "617976fa328bde110f953967490e2cacb22fa3c13963b1ccece71b830feb929f",
@@ -3589,7 +3601,9 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
3589
3601
  "70117ada2fe96b4697f695f860547a0e47eb7d20e864eac929047722cb3e6e2c",
3590
3602
  "702b455a3157565b910904a3acfcdbf4722befc660d60242c649ff020fe96b3b",
3591
3603
  "7b1d6bba391f105b9d53b91773fd207c9a5e9b5bfcd638e1e6b579d507279d7d",
3604
+ "8a3c46d3501797ebb53a081c8b35e78e0ceb2b060503332b48e44ccc30d6d0df",
3592
3605
  "9344207510f0c613088b4c82c9b3962a815ec79d0664886bf01f34b7a6f1f4ab",
3606
+ "a114ac60b0e390ad2518bda5871aa1c9680755f10fe36ebae26de4ad170490d5",
3593
3607
  "a1ca3cd8fb9a9ed969c256bdcee5b4b4e740e58fe1cb43d38b7b4572823532b8",
3594
3608
  "b2f392ac7eb9f645583dfbe357d608ab266c19177230b9b4420baa8975573b2c",
3595
3609
  "b45d7b88eeadaf859ac312398aa49fc7e1f1882d1b5afcf58676178ea0695b58",