@codyswann/lisa 4.25.2 → 4.26.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/cli/check-learnings-budget-cmd.d.ts +2 -0
- package/dist/cli/check-learnings-budget-cmd.d.ts.map +1 -1
- package/dist/cli/check-learnings-budget-cmd.js +17 -6
- package/dist/cli/check-learnings-budget-cmd.js.map +1 -1
- package/dist/cli/gate-commands.d.ts +3 -1
- package/dist/cli/gate-commands.d.ts.map +1 -1
- package/dist/cli/gate-commands.js +5 -2
- package/dist/cli/gate-commands.js.map +1 -1
- package/dist/core/configured-learnings-path.d.ts +16 -0
- package/dist/core/configured-learnings-path.d.ts.map +1 -0
- package/dist/core/configured-learnings-path.js +42 -0
- package/dist/core/configured-learnings-path.js.map +1 -0
- package/dist/core/learnings-budget-check.d.ts +13 -3
- package/dist/core/learnings-budget-check.d.ts.map +1 -1
- package/dist/core/learnings-budget-check.js +41 -10
- package/dist/core/learnings-budget-check.js.map +1 -1
- package/dist/core/learnings-overflow-path.d.ts +11 -0
- package/dist/core/learnings-overflow-path.d.ts.map +1 -0
- package/dist/core/learnings-overflow-path.js +19 -0
- package/dist/core/learnings-overflow-path.js.map +1 -0
- package/dist/core/learnings-overflow.d.ts +1 -11
- package/dist/core/learnings-overflow.d.ts.map +1 -1
- package/dist/core/learnings-overflow.js +2 -17
- package/dist/core/learnings-overflow.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +4 -38
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/safe-relative-markdown-path.d.ts +10 -0
- package/dist/core/safe-relative-markdown-path.d.ts.map +1 -0
- package/dist/core/safe-relative-markdown-path.js +42 -0
- package/dist/core/safe-relative-markdown-path.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +5 -1
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +3 -3
- 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
- package/scripts/check-learnings-budget.ts +96 -22
|
@@ -11,8 +11,10 @@ import * as fse from "fs-extra";
|
|
|
11
11
|
import { readFile, writeFile } from "node:fs/promises";
|
|
12
12
|
import * as path from "node:path";
|
|
13
13
|
import { ACCEPTED_HARNESS_INPUTS, DEFAULT_HARNESS, HARNESS_ALIASES, HARNESS_VALUES, LEGACY_HARNESS_ALIASES, } from "./config.js";
|
|
14
|
-
import { DEFAULT_PROJECT_LEARNINGS_FILE, PROJECT_LEARNINGS_FILENAME,
|
|
14
|
+
import { DEFAULT_PROJECT_LEARNINGS_FILE, PROJECT_LEARNINGS_FILENAME, } from "./learnings-location.js";
|
|
15
|
+
import { validateConfiguredLearningsFile } from "./configured-learnings-path.js";
|
|
15
16
|
import { validateVerificationConfig, } from "./project-config-kane.js";
|
|
17
|
+
import { validateSafeRelativeMarkdownPath } from "./safe-relative-markdown-path.js";
|
|
16
18
|
export { AUTO_LOADED_RULES_DIR_PREFIXES, DEFAULT_PROJECT_LEARNINGS_FILE, PROJECT_LEARNINGS_FILENAME, } from "./learnings-location.js";
|
|
17
19
|
/** Filename of the per-project config, relative to the destination root */
|
|
18
20
|
export const PROJECT_CONFIG_FILENAME = ".lisa.config.json";
|
|
@@ -242,26 +244,6 @@ function validateOptionalHarness(value, configPath) {
|
|
|
242
244
|
* @param field - Config field name used in error messages
|
|
243
245
|
* @returns Validated project-relative path
|
|
244
246
|
*/
|
|
245
|
-
function validateSafeRelativeMarkdownPath(value, source, field) {
|
|
246
|
-
if (typeof value !== "string" ||
|
|
247
|
-
value.length === 0 ||
|
|
248
|
-
value.trim() !== value ||
|
|
249
|
-
value.includes("\\") ||
|
|
250
|
-
containsControlCharacter(value) ||
|
|
251
|
-
/^[a-z]:/iu.test(value) ||
|
|
252
|
-
path.posix.isAbsolute(value) ||
|
|
253
|
-
path.win32.isAbsolute(value)) {
|
|
254
|
-
throw new Error(`Invalid ${field} in ${source}: expected a safe relative POSIX path`);
|
|
255
|
-
}
|
|
256
|
-
const segments = value.split("/");
|
|
257
|
-
if (segments.some(segment => segment === "" || segment === "." || segment === "..")) {
|
|
258
|
-
throw new Error(`Invalid ${field} in ${source}: path traversal is not allowed`);
|
|
259
|
-
}
|
|
260
|
-
if (path.posix.extname(value).toLowerCase() !== ".md") {
|
|
261
|
-
throw new Error(`Invalid ${field} in ${source}: expected a Markdown file`);
|
|
262
|
-
}
|
|
263
|
-
return value;
|
|
264
|
-
}
|
|
265
247
|
/**
|
|
266
248
|
* Validate the configurable rules destination as a safe Markdown path, and
|
|
267
249
|
* reject the reserved learnings filename so a rules file can never collide with
|
|
@@ -288,12 +270,7 @@ function validateProjectRulesFile(value, source) {
|
|
|
288
270
|
* @returns Validated project-relative learnings path
|
|
289
271
|
*/
|
|
290
272
|
function validateLearningsFile(value, source) {
|
|
291
|
-
|
|
292
|
-
const surface = findEagerContextSurface(safe);
|
|
293
|
-
if (surface !== undefined) {
|
|
294
|
-
throw new Error(`Invalid learnings.file in ${source}: ${eagerContextRejection(surface)}`);
|
|
295
|
-
}
|
|
296
|
-
return safe;
|
|
273
|
+
return validateConfiguredLearningsFile(value, source);
|
|
297
274
|
}
|
|
298
275
|
/**
|
|
299
276
|
* Validate the optional `learnings` block, preserving an absent value.
|
|
@@ -314,17 +291,6 @@ function validateLearningsConfig(value, source) {
|
|
|
314
291
|
}
|
|
315
292
|
return { file: validateLearningsFile(file, source) };
|
|
316
293
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Whether a path contains an ASCII control character.
|
|
319
|
-
* @param value - Configured path
|
|
320
|
-
* @returns True when any control character is present
|
|
321
|
-
*/
|
|
322
|
-
function containsControlCharacter(value) {
|
|
323
|
-
return Array.from(value).some(character => {
|
|
324
|
-
const code = character.charCodeAt(0);
|
|
325
|
-
return code <= 31 || code === 127;
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
294
|
/**
|
|
329
295
|
* Narrow an unknown value to the Harness type
|
|
330
296
|
* @param value - Untrusted value to test
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,cAAc,EACd,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate a configurable destination as a safe, relative, non-traversing
|
|
3
|
+
* Markdown path.
|
|
4
|
+
* @param value - Raw configured path
|
|
5
|
+
* @param source - Config source for errors
|
|
6
|
+
* @param field - Config field name used in errors
|
|
7
|
+
* @returns Validated project-relative path
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateSafeRelativeMarkdownPath(value: unknown, source: string, field: string): string;
|
|
10
|
+
//# sourceMappingURL=safe-relative-markdown-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-relative-markdown-path.d.ts","sourceRoot":"","sources":["../../src/core/safe-relative-markdown-path.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CA6BR"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Dependency-free validation for configured project-relative Markdown paths. */
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Validate a configurable destination as a safe, relative, non-traversing
|
|
5
|
+
* Markdown path.
|
|
6
|
+
* @param value - Raw configured path
|
|
7
|
+
* @param source - Config source for errors
|
|
8
|
+
* @param field - Config field name used in errors
|
|
9
|
+
* @returns Validated project-relative path
|
|
10
|
+
*/
|
|
11
|
+
export function validateSafeRelativeMarkdownPath(value, source, field) {
|
|
12
|
+
if (typeof value !== "string" ||
|
|
13
|
+
value.length === 0 ||
|
|
14
|
+
value.trim() !== value ||
|
|
15
|
+
value.includes("\\") ||
|
|
16
|
+
containsControlCharacter(value) ||
|
|
17
|
+
/^[a-z]:/iu.test(value) ||
|
|
18
|
+
path.posix.isAbsolute(value) ||
|
|
19
|
+
path.win32.isAbsolute(value)) {
|
|
20
|
+
throw new Error(`Invalid ${field} in ${source}: expected a safe relative POSIX path`);
|
|
21
|
+
}
|
|
22
|
+
const segments = value.split("/");
|
|
23
|
+
if (segments.some(segment => segment === "" || segment === "." || segment === "..")) {
|
|
24
|
+
throw new Error(`Invalid ${field} in ${source}: path traversal is not allowed`);
|
|
25
|
+
}
|
|
26
|
+
if (path.posix.extname(value).toLowerCase() !== ".md") {
|
|
27
|
+
throw new Error(`Invalid ${field} in ${source}: expected a Markdown file`);
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether a path contains an ASCII control character.
|
|
33
|
+
* @param value - Path candidate to inspect
|
|
34
|
+
* @returns True when the candidate contains an ASCII control character
|
|
35
|
+
*/
|
|
36
|
+
function containsControlCharacter(value) {
|
|
37
|
+
return Array.from(value).some(character => {
|
|
38
|
+
const code = character.charCodeAt(0);
|
|
39
|
+
return code <= 31 || code === 127;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=safe-relative-markdown-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-relative-markdown-path.js","sourceRoot":"","sources":["../../src/core/safe-relative-markdown-path.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,UAAU,gCAAgC,CAC9C,KAAc,EACd,MAAc,EACd,KAAa;IAEb,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK;QACtB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,wBAAwB,CAAC,KAAK,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAC5B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,OAAO,MAAM,uCAAuC,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IACE,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CACjE,EACD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,OAAO,MAAM,iCAAiC,CAC/D,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,MAAM,4BAA4B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,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,CAs8EpE,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,CAs8EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAm3PjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -1088,7 +1088,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
1088
1088
|
"scripts/check-delivery-deletion-conflicts.mjs": "77eed58c9ff076c4438a5fe01c343f25c1a1c8f29a8f5861d1e1081b1739d300",
|
|
1089
1089
|
"scripts/check-derived-artifacts.mjs": "b30c86b6a8f0fabb5e5849e470f80429c97dcaa2619b0ed3d2f9807b89234a06",
|
|
1090
1090
|
"scripts/check-duplicate-versions.mjs": "26b26351dd2735dfd8d9a2436b89e876ce2ed93871d0b264f611215dd03d70ae",
|
|
1091
|
-
"scripts/check-learnings-budget.ts": "
|
|
1091
|
+
"scripts/check-learnings-budget.ts": "6e9a735f090a7f1f73f0a447e6688c3dabe9edf61de5e9ad48b0c22701ee38d0",
|
|
1092
1092
|
"scripts/check-merge-driver-registration.mjs": "7779c47facccaee081651d42abb654edb320873e804e32db38c983f16b992eb4",
|
|
1093
1093
|
"scripts/check-orphan-test-processes.mjs": "123822f43b53a84b619ed97d5c18069feb5964b8216248968a7ab165e345106a",
|
|
1094
1094
|
"scripts/check-pipeline-status-reads.mjs": "a84a24ff386cdb16bf1c05c7728d5266a4b32c4c46abc227303620ca5b49ddfe",
|
|
@@ -7479,6 +7479,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7479
7479
|
"src/core/apply-receipt.ts": true,
|
|
7480
7480
|
"src/core/bootstrap-environment.ts": true,
|
|
7481
7481
|
"src/core/config.ts": true,
|
|
7482
|
+
"src/core/configured-learnings-path.ts": true,
|
|
7482
7483
|
"src/core/downstream-names.ts": true,
|
|
7483
7484
|
"src/core/downstream-references.ts": true,
|
|
7484
7485
|
"src/core/gate-context-owners.ts": true,
|
|
@@ -7511,6 +7512,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7511
7512
|
"src/core/learnings-merge-driver-install.ts": true,
|
|
7512
7513
|
"src/core/learnings-merge-driver.ts": true,
|
|
7513
7514
|
"src/core/learnings-merge.ts": true,
|
|
7515
|
+
"src/core/learnings-overflow-path.ts": true,
|
|
7514
7516
|
"src/core/learnings-overflow.ts": true,
|
|
7515
7517
|
"src/core/learnings-projection.ts": true,
|
|
7516
7518
|
"src/core/learnings-stray-ledger.ts": true,
|
|
@@ -7530,6 +7532,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7530
7532
|
"src/core/project-config-kane.ts": true,
|
|
7531
7533
|
"src/core/project-config.ts": true,
|
|
7532
7534
|
"src/core/reconciliation-report.ts": true,
|
|
7535
|
+
"src/core/safe-relative-markdown-path.ts": true,
|
|
7533
7536
|
"src/core/self-apply.ts": true,
|
|
7534
7537
|
"src/core/sonar-integration.ts": true,
|
|
7535
7538
|
"src/core/template-ownership.ts": true,
|
|
@@ -8236,6 +8239,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8236
8239
|
"tests/unit/core/learnings-merge-driver.test.ts": true,
|
|
8237
8240
|
"tests/unit/core/learnings-merge.test.ts": true,
|
|
8238
8241
|
"tests/unit/core/learnings-migration.test.ts": true,
|
|
8242
|
+
"tests/unit/core/learnings-overflow-budget-check.test.ts": true,
|
|
8239
8243
|
"tests/unit/core/learnings-overflow-identity.test.ts": true,
|
|
8240
8244
|
"tests/unit/core/learnings-overflow.test.ts": true,
|
|
8241
8245
|
"tests/unit/core/learnings-projection.test.ts": true,
|