@codyswann/lisa 4.55.33 → 4.56.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/dist/core/learnings-contract.d.ts +4 -3
- package/dist/core/learnings-contract.d.ts.map +1 -1
- package/dist/core/learnings-contract.js +4 -3
- package/dist/core/learnings-contract.js.map +1 -1
- package/dist/core/learnings-merge.d.ts.map +1 -1
- package/dist/core/learnings-merge.js +1 -47
- package/dist/core/learnings-merge.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/nightly-e2e-guard-behavior-certificate.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +3 -1
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/create-only/.github/workflows/ci.yml +3 -0
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-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
|
@@ -21,8 +21,8 @@ export declare const LEGACY_LEARNINGS_MAX_TOKENS = 12000;
|
|
|
21
21
|
export declare const MAX_STABLE_TOKEN_BYTES = 128;
|
|
22
22
|
/**
|
|
23
23
|
* Average per-entry byte allowance used to DERIVE the whole-file byte budget
|
|
24
|
-
* (`maxTokens = maxEntries * PER_ENTRY_BYTE_ALLOWANCE`)
|
|
25
|
-
*
|
|
24
|
+
* (`maxTokens = maxEntries * PER_ENTRY_BYTE_ALLOWANCE`). This scales the byte
|
|
25
|
+
* budget with the entry ceiling. It is the historical v1 average plus the
|
|
26
26
|
* maximum bytes v2 adds when migration persists `fingerprint = id`:
|
|
27
27
|
* `600 + 17 + 128 = 745`. Therefore every accepted 12,000-byte v1 document
|
|
28
28
|
* with at most 20 bounded ids renders as v2 within 14,900 bytes.
|
|
@@ -41,7 +41,8 @@ export declare const MAX_STABLE_TOKEN_BYTES = 128;
|
|
|
41
41
|
* Historically these were two independently hardcoded numbers — a 20-entry cap
|
|
42
42
|
* and a flat 4000-byte cap — that bound the ledger at ~8 entries, stranding
|
|
43
43
|
* valid captures far under the entry ceiling (CodySwannGT/lisa#1959). Deriving
|
|
44
|
-
* the byte cap from the entry cap
|
|
44
|
+
* the byte cap from the entry cap keeps the two proportional; actual entry
|
|
45
|
+
* sizes and document framing still determine whether a given ledger fits.
|
|
45
46
|
*/
|
|
46
47
|
export declare const PER_ENTRY_BYTE_ALLOWANCE: number;
|
|
47
48
|
export declare const LEARNINGS_CONTRACT: Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learnings-contract.d.ts","sourceRoot":"","sources":["../../src/core/learnings-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,0BAA0B,oCAAqC,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAK7E,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,+FAQ9B,CAAC;AAEZ,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAK1C
|
|
1
|
+
{"version":3,"file":"learnings-contract.d.ts","sourceRoot":"","sources":["../../src/core/learnings-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,0BAA0B,oCAAqC,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAK7E,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,+FAQ9B,CAAC;AAEZ,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAK1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,wBAAwB,QAGb,CAAC;AAEzB,eAAO,MAAM,kBAAkB;;;;;;;;;EAkBpB,CAAC;AAEZ,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|
|
@@ -31,8 +31,8 @@ export const MAX_STABLE_TOKEN_BYTES = 128;
|
|
|
31
31
|
const FINGERPRINT_FIELD_BYTE_OVERHEAD = 17;
|
|
32
32
|
/**
|
|
33
33
|
* Average per-entry byte allowance used to DERIVE the whole-file byte budget
|
|
34
|
-
* (`maxTokens = maxEntries * PER_ENTRY_BYTE_ALLOWANCE`)
|
|
35
|
-
*
|
|
34
|
+
* (`maxTokens = maxEntries * PER_ENTRY_BYTE_ALLOWANCE`). This scales the byte
|
|
35
|
+
* budget with the entry ceiling. It is the historical v1 average plus the
|
|
36
36
|
* maximum bytes v2 adds when migration persists `fingerprint = id`:
|
|
37
37
|
* `600 + 17 + 128 = 745`. Therefore every accepted 12,000-byte v1 document
|
|
38
38
|
* with at most 20 bounded ids renders as v2 within 14,900 bytes.
|
|
@@ -51,7 +51,8 @@ const FINGERPRINT_FIELD_BYTE_OVERHEAD = 17;
|
|
|
51
51
|
* Historically these were two independently hardcoded numbers — a 20-entry cap
|
|
52
52
|
* and a flat 4000-byte cap — that bound the ledger at ~8 entries, stranding
|
|
53
53
|
* valid captures far under the entry ceiling (CodySwannGT/lisa#1959). Deriving
|
|
54
|
-
* the byte cap from the entry cap
|
|
54
|
+
* the byte cap from the entry cap keeps the two proportional; actual entry
|
|
55
|
+
* sizes and document framing still determine whether a given ledger fits.
|
|
55
56
|
*/
|
|
56
57
|
export const PER_ENTRY_BYTE_ALLOWANCE = LEGACY_LEARNINGS_MAX_TOKENS / MAX_ENTRIES +
|
|
57
58
|
FINGERPRINT_FIELD_BYTE_OVERHEAD +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learnings-contract.js","sourceRoot":"","sources":["../../src/core/learnings-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAK7E,4DAA4D;AAC5D,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,+EAA+E;AAC/E,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,IAAI;IACJ,MAAM;IACN,KAAK;IACL,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,YAAY;CACJ,CAAC,CAAC;AAEZ,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,0EAA0E;AAC1E,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"learnings-contract.js","sourceRoot":"","sources":["../../src/core/learnings-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAK7E,4DAA4D;AAC5D,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,+EAA+E;AAC/E,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,IAAI;IACJ,MAAM;IACN,KAAK;IACL,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,YAAY;CACJ,CAAC,CAAC;AAEZ,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,0EAA0E;AAC1E,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GACnC,2BAA2B,GAAG,WAAW;IACzC,+BAA+B;IAC/B,sBAAsB,CAAC;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,IAAI;QACJ,aAAa;QACb,MAAM;QACN,KAAK;QACL,YAAY;QACZ,eAAe;QACf,gBAAgB;QAChB,YAAY;KACJ,CAAC;IACX,iBAAiB,EAAE,GAAG;IACtB,YAAY,EAAE,CAAC;IACf,uBAAuB,EAAE,EAAE;IAC3B,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,WAAW,GAAG,wBAAwB;IACjD,WAAW,EAAE,wBAAwB;CAC7B,CAAC,CAAC;AAeZ;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learnings-merge.d.ts","sourceRoot":"","sources":["../../src/core/learnings-merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"learnings-merge.d.ts","sourceRoot":"","sources":["../../src/core/learnings-merge.ts"],"names":[],"mappings":"AAqDA,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0CAA0C;AAC1C,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,sBAAsB,CAAC;AAE3B;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,oBAAoB,CAqCtB"}
|
|
@@ -1,49 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Three-way union-by-id merge for the canonical project-learnings ledger.
|
|
3
|
-
*
|
|
4
|
-
* ## Why this exists
|
|
5
|
-
*
|
|
6
|
-
* The fs-level write lock (`learnings-lock.ts`) serializes writers that share a
|
|
7
|
-
* filesystem path, but every learner pass runs on its own
|
|
8
|
-
* `learning/<fingerprint>` branch in its own worktree. A path-scoped lock
|
|
9
|
-
* provably cannot serialize two worktrees, so N concurrent passes produce N
|
|
10
|
-
* pull requests that each rewrite the same JSONL block, and the collision
|
|
11
|
-
* surfaces at merge time as literal git conflict markers
|
|
12
|
-
* (CodySwannGT/lisa#1995). Git's default line-based merge is the wrong tool for
|
|
13
|
-
* a document whose real unit is an entry keyed by id.
|
|
14
|
-
*
|
|
15
|
-
* ## Why three-way and not a union of the two sides
|
|
16
|
-
*
|
|
17
|
-
* A two-way union cannot tell "the other branch never had this entry" apart
|
|
18
|
-
* from "the other branch deliberately superseded this entry". The writer's
|
|
19
|
-
* whole consolidation mechanism (`persistConsolidatedLearning`'s `supersede`)
|
|
20
|
-
* works by REMOVING entries, so a two-way union would resurrect every
|
|
21
|
-
* consolidated entry and silently undo the consolidation — the exact
|
|
22
|
-
* "lost consolidation target" symptom reported in the issue. Comparing each
|
|
23
|
-
* side against the merge base is what lets a removal survive the merge.
|
|
24
|
-
*
|
|
25
|
-
* ## Conflict policy
|
|
26
|
-
*
|
|
27
|
-
* Per id, against the base: if only one side changed it, that side wins
|
|
28
|
-
* (including a removal). If both sides made the SAME change, it is not a
|
|
29
|
-
* conflict. If both sides changed it differently, the merge FAILS rather than
|
|
30
|
-
* guessing — with two information-preserving exceptions. First, two distinct
|
|
31
|
-
* fingerprint successors of the same base stamp are a concurrent stable-id
|
|
32
|
-
* fork: both survive deterministically, with the lower fingerprint retaining
|
|
33
|
-
* the stable id and the other keyed by its fingerprint. Second, when the only
|
|
34
|
-
* differing field is `last_confirmed`, the later date wins, because that field is a monotonic
|
|
35
|
-
* "this rule demonstrably applied again" stamp and taking the later one loses
|
|
36
|
-
* no information. A confirmation bump never beats a content edit; that is a
|
|
37
|
-
* genuine conflict, because preferring the later timestamp would silently
|
|
38
|
-
* discard the other branch's rewritten rule.
|
|
39
|
-
*
|
|
40
|
-
* The merged document is re-rendered through the canonical serializer and
|
|
41
|
-
* re-checked against the shared budgets, so the driver can never publish a
|
|
42
|
-
* malformed or over-budget ledger — it fails loudly and lets git leave the
|
|
43
|
-
* conflict for a human or agent to recompact.
|
|
44
|
-
* @module core/learnings-merge
|
|
45
|
-
*/
|
|
46
|
-
import { LEARNINGS_CONTRACT, } from "./learnings-contract.js";
|
|
47
1
|
import { assertDocumentBudget, parseLearningsFile, renderLearningsFile, } from "./learnings-document.js";
|
|
48
2
|
import { validateLearningEntry } from "./learnings-entry.js";
|
|
49
3
|
/**
|
|
@@ -316,7 +270,7 @@ function renderWithinBudget(entries) {
|
|
|
316
270
|
const detail = error instanceof Error ? error.message : String(error);
|
|
317
271
|
return {
|
|
318
272
|
kind: "conflict",
|
|
319
|
-
reason:
|
|
273
|
+
reason: detail,
|
|
320
274
|
};
|
|
321
275
|
}
|
|
322
276
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learnings-merge.js","sourceRoot":"","sources":["../../src/core/learnings-merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"learnings-merge.js","sourceRoot":"","sources":["../../src/core/learnings-merge.ts"],"names":[],"mappings":"AA8CA,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAqB7D;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAwB,EACxB,IAAY,EACZ,MAAc;IAEd,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,2EAA2E;IAC3E,4EAA4E;IAC5E,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACpC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CACrE,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAC5B,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,GAAG,EAAE,EAC9B,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,GAAG,EAAE,EAC9B,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,GAAG,EAAE,CAC/B,CAAC;QACF,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,QAAQ,CACf,KAAa,EACb,OAA2B;IAM3B,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK;YACL,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,SAAS,CAChB,OAA2B;IAE3B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,IAAwC,EACxC,IAAwC,EACxC,MAA0C;IAI1C,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAC/B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CACzD,CAAC;IACF,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IAC7E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAC/B,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,UAAU,CACtD,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,kCAAkC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,8DAA8D;SACvJ,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CACvD,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,UAAU;QAClD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,CAAC,UAAU,CAAC,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,wDAAwD,WAAW,+CAA+C;SAC3H,CAAC;IACJ,CAAC;IACD,MAAM,oBAAoB,GAAG,aAAa,CACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CACxC,CAAC;IACF,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,2DAA2D,oBAAoB,wEAAwE;SAChK,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CACnB,IAA+B,EAC/B,IAA+B,EAC/B,MAAiC;IAEjC,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,IAAI,QAAQ,CAAC;IAC1B,CAAC;IACD,wEAAwE;IACxE,sEAAsE;IACtE,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,QAAQ,CAAC;IAC5B,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,IAAI,QAAQ,CAAC;IAC1B,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,IAA+B,EAC/B,IAA+B,EAC/B,MAAiC;IAEjC,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/C,wEAAwE;QACxE,8DAA8D;QAC9D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,4EAA4E;IAC5E,gFAAgF;IAChF,OAAO,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC;QAC1E,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC;QACrC,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,2BAA2B,CAClC,IAA+B,EAC/B,IAAmB,EACnB,MAAqB;IAErB,IACE,IAAI,KAAK,SAAS;QAClB,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;QACnB,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;QACrB,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;QACrC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;QACvC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EACvC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GACrB,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrB,OAAO;QACL,OAAO;QACP,qBAAqB,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,MAAyB;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAC1B,OAAiC;IAEjC,OAAO,OAAO,CAAC,MAAM,CAA2B,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACjE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CACjC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CACnD,CAAC;QACF,OAAO,SAAS,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;YACrB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAC5B,IAAmB,EACnB,MAAqB;IAErB,OAAO,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,SAAS,CAChB,IAA+B,EAC/B,KAAgC;IAEhC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CACzB,OAAiC;IAEjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -41,9 +41,9 @@ export const NIGHTLY_E2E_GUARD_BEHAVIOR_CERTIFICATES = Object.freeze({
|
|
|
41
41
|
}),
|
|
42
42
|
cd02b94b4db5134984c7b69f905af71c96bb5aac09a18fb3c6aef5ab0c22cf17: Object.freeze({
|
|
43
43
|
contractVersion: "1.9.0",
|
|
44
|
-
packageVersions: Object.freeze(["4.
|
|
44
|
+
packageVersions: Object.freeze(["4.56.0"]),
|
|
45
45
|
provenances: Object.freeze([
|
|
46
|
-
"workspace package @codyswann/lisa@4.
|
|
46
|
+
"workspace package @codyswann/lisa@4.56.0 (typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs)",
|
|
47
47
|
]),
|
|
48
48
|
}),
|
|
49
49
|
dfd2fef680de5ef03e63075e8a61c62ca4d95cdfdff6201939b79c748d3397f6: Object.freeze({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nightly-e2e-guard-behavior-certificate.js","sourceRoot":"","sources":["../../src/core/nightly-e2e-guard-behavior-certificate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,4CAA4C,GAAG,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,MAAM,CAAC,MAAM,CAAC;IACnE,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,iHAAiH;SAClH,CAAC;KACH,CAAC;IACJ,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,mHAAmH;SACpH,CAAC;KACH,CAAC;IACJ,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,iHAAiH;SAClH,CAAC;KACH,CAAC;IACJ,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,mHAAmH;SACpH,CAAC;KACH,CAAC;IACJ,gEAAgE,EAC9D,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"nightly-e2e-guard-behavior-certificate.js","sourceRoot":"","sources":["../../src/core/nightly-e2e-guard-behavior-certificate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,4CAA4C,GAAG,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,MAAM,CAAC,MAAM,CAAC;IACnE,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,iHAAiH;SAClH,CAAC;KACH,CAAC;IACJ,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,mHAAmH;SACpH,CAAC;KACH,CAAC;IACJ,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,iHAAiH;SAClH,CAAC;KACH,CAAC;IACJ,kEAAkE,EAChE,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,mHAAmH;SACpH,CAAC;KACH,CAAC;IACJ,gEAAgE,EAC9D,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,2GAA2G;SAC5G,CAAC;KACH,CAAC;IACJ,gEAAgE,EAC9D,MAAM,CAAC,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO;QACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,iHAAiH;SAClH,CAAC;KACH,CAAC;CACL,CAAC,CAAC"}
|
|
@@ -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,CAskFpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,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,CAskFpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAg9QjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -142,7 +142,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
142
142
|
"expo/copy-overwrite/tsconfig.json": "c92e2c2c109e8794ee351f634361ef46297f5a0cd606aaf5c19911da836df307",
|
|
143
143
|
"expo/create-only/.github/nightly-e2e-policy.json": "a6fc52bbaa7943523fba35bd1ab51d8da4b29354bf0133b47aa299b725f51e8c",
|
|
144
144
|
"expo/create-only/.github/required-checks.json": "8d40acc337c42fbdfc55638dc4ab43b541b975270ecae8fffec9897c13a42884",
|
|
145
|
-
"expo/create-only/.github/workflows/ci.yml": "
|
|
145
|
+
"expo/create-only/.github/workflows/ci.yml": "830c60686fef5d1f773812f622a3c40832344a078acf22122c1740ebaa6db18b",
|
|
146
146
|
"expo/create-only/.github/workflows/deploy.yml": "755d98702ae6ce07d3cbdee873975efca5c918610567a2196f2ddeeccfaf69c1",
|
|
147
147
|
"expo/create-only/.github/workflows/maestro-e2e.yml": "8d95742b6aba4ad0d4fdb688548ff0b3933828ab911441d46562fcee9bfa427e",
|
|
148
148
|
"expo/create-only/.github/workflows/nightly-e2e-bypass-reaper.yml": "02c9ddf80eaaec34eae35abf70cc8f39a7c6e43245cd742421acc188ea59b208",
|
|
@@ -8113,6 +8113,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8113
8113
|
"tests/integration/environment-facade-gates.test.ts": true,
|
|
8114
8114
|
"tests/integration/environment-prepare-workflow.test.ts": true,
|
|
8115
8115
|
"tests/integration/expo-host-run-scripts-survive-apply.test.ts": true,
|
|
8116
|
+
"tests/integration/expo-independent-checks.test.ts": true,
|
|
8116
8117
|
"tests/integration/expo-jira-parser-origin.test.ts": true,
|
|
8117
8118
|
"tests/integration/facade-proof-not-step.test.ts": true,
|
|
8118
8119
|
"tests/integration/failure-issue-workflows.test.ts": true,
|
|
@@ -8238,6 +8239,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8238
8239
|
"tests/integration/seeded-gates-preserve-hook-outcomes.test.ts": true,
|
|
8239
8240
|
"tests/integration/self-pin-drift-gate-wiring.test.ts": true,
|
|
8240
8241
|
"tests/integration/sentry-deploy-workflow.test.ts": true,
|
|
8242
|
+
"tests/integration/sentry-release-config.test.ts": true,
|
|
8241
8243
|
"tests/integration/shell-guard-allow-controls.test.ts": true,
|
|
8242
8244
|
"tests/integration/shell-guard-refusals.test.ts": true,
|
|
8243
8245
|
"tests/integration/skipped-required-checks-gate-fail-closed.test.ts": true,
|