@codyswann/lisa 4.33.3 → 4.33.5
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/configs/eslint/expo.d.ts.map +1 -1
- package/dist/configs/eslint/expo.js +4 -7
- package/dist/configs/eslint/expo.js.map +1 -1
- package/dist/configs/eslint/view-gate.d.ts +42 -0
- package/dist/configs/eslint/view-gate.d.ts.map +1 -0
- package/dist/configs/eslint/view-gate.js +110 -0
- package/dist/configs/eslint/view-gate.js.map +1 -0
- package/dist/configs/repo-scan.d.ts +25 -0
- package/dist/configs/repo-scan.d.ts.map +1 -0
- package/dist/configs/repo-scan.js +83 -0
- package/dist/configs/repo-scan.js.map +1 -0
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +20 -7
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/eslint-plugin-component-structure/README.md +85 -2
- package/eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js +229 -0
- package/eslint-plugin-component-structure/__tests__/no-return-in-view.test.js +185 -0
- package/eslint-plugin-component-structure/__tests__/plugin-index.test.js +8 -1
- package/eslint-plugin-component-structure/index.js +4 -1
- package/eslint-plugin-component-structure/lib/view-file-scope.js +62 -0
- package/eslint-plugin-component-structure/rules/no-hooks-in-view.js +101 -0
- package/eslint-plugin-component-structure/rules/no-return-in-view.js +133 -62
- package/expo/copy-overwrite/eslint.expo.ts +88 -1
- 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/.codex-plugin/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo-agy/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/scripts/validate_component.py +166 -43
- 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/expo/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py +166 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EAItB,cAAc,EAIf,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EAItB,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,CAAC;AAwCF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAe3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,QAAQ,EAAE,MAAM,CAAC,SAAS,CAInC;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,cAA+B,EAC/B,UAA8B,EAC9B,UAAe,EACf,SAAc,GACf,EAAE;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACtC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,GAAG,OAAO,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CA4QnC"}
|
|
@@ -22,6 +22,7 @@ import path from "path";
|
|
|
22
22
|
import { fileURLToPath } from "url";
|
|
23
23
|
// Import TypeScript config and utilities
|
|
24
24
|
import { codeOrganization, defaultIgnores, defaultThresholds, getBaseConfigs, getBaseLanguageOptions, getJsFilesOverride, getScriptsFilesOverride, getSharedFilesOverride, getSharedRules, getTestFilesOverride, getTsFilesOverride, getTsTestFilesOverride, } from "./typescript.js";
|
|
25
|
+
import { getViewGateConfigs } from "./view-gate.js";
|
|
25
26
|
// Re-export for downstream configs
|
|
26
27
|
export { defaultIgnores, defaultThresholds, getBaseConfigs, getBaseLanguageOptions, getSharedRules, };
|
|
27
28
|
// Custom plugins — loaded via relative path so they are resolved from the Lisa
|
|
@@ -325,13 +326,9 @@ export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores
|
|
|
325
326
|
"component-structure/single-component-per-file": "error",
|
|
326
327
|
},
|
|
327
328
|
},
|
|
328
|
-
// View
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
rules: {
|
|
332
|
-
"component-structure/no-return-in-view": "error",
|
|
333
|
-
},
|
|
334
|
-
},
|
|
329
|
+
// View gate: no statements, no hooks. See `view-gate.ts` for why it is
|
|
330
|
+
// stated as those two properties and not as "Views are pure functions".
|
|
331
|
+
...getViewGateConfigs(sourceRoot),
|
|
335
332
|
// View memo requirement (excluding UI components)
|
|
336
333
|
{
|
|
337
334
|
files: ["**/*View.tsx", "**/*View.jsx"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E;;;;;;;;;;;;;GAaG;AACH,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,yCAAyC;AACzC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The View half of the Container/View pattern: no statements, no hooks.
|
|
3
|
+
*
|
|
4
|
+
* Stated as those two properties rather than as "Views are pure functions",
|
|
5
|
+
* which is a guarantee neither rule delivers — `{Date.now()}` and
|
|
6
|
+
* `{Math.random() > 0.5 ? … : …}` sit happily in an expression body. The skill
|
|
7
|
+
* claiming an enforcement it did not have is what let a hook live in a View for
|
|
8
|
+
* years; the fix must not repeat the shape of the defect.
|
|
9
|
+
*
|
|
10
|
+
* Extracted from `expo.ts` so the factory stays under its own `max-lines`
|
|
11
|
+
* threshold, not because a second stack needs it yet.
|
|
12
|
+
* @module configs/eslint/view-gate
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* React's hook named exports, banned from a View's import list.
|
|
16
|
+
*
|
|
17
|
+
* An enumeration is correct HERE and nowhere else: React's hook set is fixed and
|
|
18
|
+
* published, and this is the import-line axis. The call-site axis
|
|
19
|
+
* (`component-structure/no-hooks-in-view`) matches by shape precisely because a
|
|
20
|
+
* project-local custom hook can never appear on a list like this one.
|
|
21
|
+
*/
|
|
22
|
+
export declare const REACT_HOOK_IMPORT_NAMES: string[];
|
|
23
|
+
/** What a developer is told when a View reaches for a hook. */
|
|
24
|
+
export declare const VIEW_HOOK_IMPORT_MESSAGE = "View components must not use hooks. Move the hook into the corresponding Container and pass its result down as a prop.";
|
|
25
|
+
/**
|
|
26
|
+
* The View-scoped config blocks a stack should append.
|
|
27
|
+
*
|
|
28
|
+
* Two blocks, because they have different scopes: the statement gate applies to
|
|
29
|
+
* every View, while the hook gate skips the directories the Container/View
|
|
30
|
+
* pattern's own applicability table marks as outside it.
|
|
31
|
+
*
|
|
32
|
+
* The hook gate itself is two independent axes. `no-hooks-in-view` matches the
|
|
33
|
+
* CALL by shape (`use` + uppercase), so a project-local custom hook is caught
|
|
34
|
+
* where an enumerated name list would miss it; `no-restricted-imports` catches
|
|
35
|
+
* the IMPORT LINE, before a call site exists. Neither subsumes the other: a
|
|
36
|
+
* hook re-exported through a barrel escapes the import patterns, and an import
|
|
37
|
+
* with no call yet escapes the call matcher.
|
|
38
|
+
* @param sourceRoot - Prefix for source-relative globs, e.g. `"src/"`.
|
|
39
|
+
* @returns Flat-config blocks, in the order they must be appended.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getViewGateConfigs(sourceRoot: string): import("eslint").Linter.Config[];
|
|
42
|
+
//# sourceMappingURL=view-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-gate.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/view-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,UAmBnC,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,2HACqF,CAAC;AAE3H;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,OAAO,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CA+ClC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The View half of the Container/View pattern: no statements, no hooks.
|
|
3
|
+
*
|
|
4
|
+
* Stated as those two properties rather than as "Views are pure functions",
|
|
5
|
+
* which is a guarantee neither rule delivers — `{Date.now()}` and
|
|
6
|
+
* `{Math.random() > 0.5 ? … : …}` sit happily in an expression body. The skill
|
|
7
|
+
* claiming an enforcement it did not have is what let a hook live in a View for
|
|
8
|
+
* years; the fix must not repeat the shape of the defect.
|
|
9
|
+
*
|
|
10
|
+
* Extracted from `expo.ts` so the factory stays under its own `max-lines`
|
|
11
|
+
* threshold, not because a second stack needs it yet.
|
|
12
|
+
* @module configs/eslint/view-gate
|
|
13
|
+
*/
|
|
14
|
+
/** The glob pair every View override is keyed on. */
|
|
15
|
+
const VIEW_FILES = ["**/*View.tsx", "**/*View.jsx"];
|
|
16
|
+
/**
|
|
17
|
+
* React's hook named exports, banned from a View's import list.
|
|
18
|
+
*
|
|
19
|
+
* An enumeration is correct HERE and nowhere else: React's hook set is fixed and
|
|
20
|
+
* published, and this is the import-line axis. The call-site axis
|
|
21
|
+
* (`component-structure/no-hooks-in-view`) matches by shape precisely because a
|
|
22
|
+
* project-local custom hook can never appear on a list like this one.
|
|
23
|
+
*/
|
|
24
|
+
export const REACT_HOOK_IMPORT_NAMES = [
|
|
25
|
+
"useActionState",
|
|
26
|
+
"useCallback",
|
|
27
|
+
"useContext",
|
|
28
|
+
"useDebugValue",
|
|
29
|
+
"useDeferredValue",
|
|
30
|
+
"useEffect",
|
|
31
|
+
"useEffectEvent",
|
|
32
|
+
"useId",
|
|
33
|
+
"useImperativeHandle",
|
|
34
|
+
"useInsertionEffect",
|
|
35
|
+
"useLayoutEffect",
|
|
36
|
+
"useMemo",
|
|
37
|
+
"useOptimistic",
|
|
38
|
+
"useReducer",
|
|
39
|
+
"useRef",
|
|
40
|
+
"useState",
|
|
41
|
+
"useSyncExternalStore",
|
|
42
|
+
"useTransition",
|
|
43
|
+
];
|
|
44
|
+
/** What a developer is told when a View reaches for a hook. */
|
|
45
|
+
export const VIEW_HOOK_IMPORT_MESSAGE = "View components must not use hooks. Move the hook into the corresponding Container and pass its result down as a prop.";
|
|
46
|
+
/**
|
|
47
|
+
* The View-scoped config blocks a stack should append.
|
|
48
|
+
*
|
|
49
|
+
* Two blocks, because they have different scopes: the statement gate applies to
|
|
50
|
+
* every View, while the hook gate skips the directories the Container/View
|
|
51
|
+
* pattern's own applicability table marks as outside it.
|
|
52
|
+
*
|
|
53
|
+
* The hook gate itself is two independent axes. `no-hooks-in-view` matches the
|
|
54
|
+
* CALL by shape (`use` + uppercase), so a project-local custom hook is caught
|
|
55
|
+
* where an enumerated name list would miss it; `no-restricted-imports` catches
|
|
56
|
+
* the IMPORT LINE, before a call site exists. Neither subsumes the other: a
|
|
57
|
+
* hook re-exported through a barrel escapes the import patterns, and an import
|
|
58
|
+
* with no call yet escapes the call matcher.
|
|
59
|
+
* @param sourceRoot - Prefix for source-relative globs, e.g. `"src/"`.
|
|
60
|
+
* @returns Flat-config blocks, in the order they must be appended.
|
|
61
|
+
*/
|
|
62
|
+
export function getViewGateConfigs(sourceRoot) {
|
|
63
|
+
return [
|
|
64
|
+
{
|
|
65
|
+
files: VIEW_FILES,
|
|
66
|
+
rules: {
|
|
67
|
+
"component-structure/no-return-in-view": "error",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
files: VIEW_FILES,
|
|
72
|
+
ignores: [
|
|
73
|
+
`${sourceRoot}components/ui/**`,
|
|
74
|
+
`${sourceRoot}components/shared/**`,
|
|
75
|
+
`${sourceRoot}components/icons/**`,
|
|
76
|
+
],
|
|
77
|
+
rules: {
|
|
78
|
+
"component-structure/no-hooks-in-view": "error",
|
|
79
|
+
"no-restricted-imports": [
|
|
80
|
+
"error",
|
|
81
|
+
{
|
|
82
|
+
paths: [
|
|
83
|
+
{
|
|
84
|
+
name: "react",
|
|
85
|
+
importNames: REACT_HOOK_IMPORT_NAMES,
|
|
86
|
+
message: VIEW_HOOK_IMPORT_MESSAGE,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
patterns: [
|
|
90
|
+
// Objects, not a mix: `no-restricted-imports` accepts an array of
|
|
91
|
+
// strings OR an array of objects, never both, and a mixed array
|
|
92
|
+
// is a schema error that disables the whole override.
|
|
93
|
+
//
|
|
94
|
+
// `@/features/*/*` is the base config's restriction, carried
|
|
95
|
+
// forward because a flat-config override replaces a rule's
|
|
96
|
+
// options wholesale — omitting it would silently delete the
|
|
97
|
+
// shared restriction for every View in the project.
|
|
98
|
+
{ group: ["@/features/*/*"] },
|
|
99
|
+
{
|
|
100
|
+
group: ["**/hooks/**", "@/hooks/**", "~/hooks/**"],
|
|
101
|
+
message: VIEW_HOOK_IMPORT_MESSAGE,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=view-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-gate.js","sourceRoot":"","sources":["../../../src/configs/eslint/view-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,qDAAqD;AACrD,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,WAAW;IACX,gBAAgB;IAChB,OAAO;IACP,qBAAqB;IACrB,oBAAoB;IACpB,iBAAiB;IACjB,SAAS;IACT,eAAe;IACf,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,sBAAsB;IACtB,eAAe;CAChB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GACnC,wHAAwH,CAAC;AAE3H;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB;IAElB,OAAO;QACL;YACE,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE;gBACL,uCAAuC,EAAE,OAAO;aACjD;SACF;QACD;YACE,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE;gBACP,GAAG,UAAU,kBAAkB;gBAC/B,GAAG,UAAU,sBAAsB;gBACnC,GAAG,UAAU,qBAAqB;aACnC;YACD,KAAK,EAAE;gBACL,sCAAsC,EAAE,OAAO;gBAC/C,uBAAuB,EAAE;oBACvB,OAAO;oBACP;wBACE,KAAK,EAAE;4BACL;gCACE,IAAI,EAAE,OAAO;gCACb,WAAW,EAAE,uBAAuB;gCACpC,OAAO,EAAE,wBAAwB;6BAClC;yBACF;wBACD,QAAQ,EAAE;4BACR,kEAAkE;4BAClE,gEAAgE;4BAChE,sDAAsD;4BACtD,EAAE;4BACF,6DAA6D;4BAC7D,2DAA2D;4BAC3D,4DAA4D;4BAC5D,oDAAoD;4BACpD,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE;4BAC7B;gCACE,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;gCAClD,OAAO,EAAE,wBAAwB;6BAClC;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stryker's sandbox root when a project declares no `tempDirName`.
|
|
3
|
+
*
|
|
4
|
+
* Duplicated from `lisa-mutation.mjs`'s `DEFAULT_TEMP_DIR_NAME` rather than
|
|
5
|
+
* imported: that module is an untyped `.mjs` shipped under `typescript/`, and a
|
|
6
|
+
* `src/` config importing a stack template would invert the dependency
|
|
7
|
+
* direction the package is built on. The value is Stryker's own default and is
|
|
8
|
+
* pinned by a test in both places.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_SANDBOX_ROOT = ".stryker-tmp";
|
|
11
|
+
/**
|
|
12
|
+
* Directory names a repository-wide source scan skips.
|
|
13
|
+
*
|
|
14
|
+
* Names, not paths, because these are matched against a single directory entry
|
|
15
|
+
* during a walk. A project that configures a different `tempDirName` should add
|
|
16
|
+
* it alongside these rather than replacing the list.
|
|
17
|
+
*/
|
|
18
|
+
export declare const REPO_SCAN_EXCLUSIONS: readonly string[];
|
|
19
|
+
/**
|
|
20
|
+
* Whether a walk should skip a directory entry by name.
|
|
21
|
+
* @param name - A single directory entry name, never a path.
|
|
22
|
+
* @returns True when the entry is not source and must not be descended into.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isExcludedFromRepoScan(name: string): boolean;
|
|
25
|
+
//# sourceMappingURL=repo-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-scan.d.ts","sourceRoot":"","sources":["../../src/configs/repo-scan.ts"],"names":[],"mappings":"AA4CA;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAajD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory names a repository-wide scan must not descend into.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this is shared rather than hand-rolled per scan
|
|
5
|
+
*
|
|
6
|
+
* A test that walks the repository to assert something about the source — this
|
|
7
|
+
* file is unique by basename, every shipped hook has a companion, no template
|
|
8
|
+
* pins a stale version — is asserting a property of the SOURCE. Several
|
|
9
|
+
* directories under the repository root are not source: they are copies of it,
|
|
10
|
+
* or build output, or another branch entirely.
|
|
11
|
+
*
|
|
12
|
+
* A scratch sandbox is the dangerous one, because it is a **full second copy of
|
|
13
|
+
* the tree**. Measured on this repository: a `stryker` run terminated under
|
|
14
|
+
* fleet saturation left 42 MB at
|
|
15
|
+
* `.stryker-tmp/bite-guard-intact/sandbox-<id>/rails/copy-overwrite/scripts/lisa-scratch-run.sh`,
|
|
16
|
+
* a second copy of a file one scan asserts is unique by basename. That scan
|
|
17
|
+
* failed on the NEXT run, with a clean, specific, entirely plausible message
|
|
18
|
+
* about a duplicate file — and nothing in its output mentioned mutation,
|
|
19
|
+
* saturation, or the run that died minutes earlier
|
|
20
|
+
* (CodySwannGT/lisa#3653, the fourth rendering catalogued in #3630).
|
|
21
|
+
*
|
|
22
|
+
* Measured at the same time: **42 test files walk from the repository root and
|
|
23
|
+
* none of them excluded the sandbox root.** Every one of them is exposed to the
|
|
24
|
+
* same debris; the basename scan is simply the one that happened to trip first.
|
|
25
|
+
* Each had hand-rolled its own skip list, so each could forget a different
|
|
26
|
+
* entry — which is why this list is one importable constant rather than a
|
|
27
|
+
* convention.
|
|
28
|
+
*
|
|
29
|
+
* ## The falsifier, because the obvious reading is wrong
|
|
30
|
+
*
|
|
31
|
+
* `.stryker-tmp/` EXISTING is normal and harmless. The mutation gate recreates
|
|
32
|
+
* it every run and it comes back empty. Only a POPULATED sandbox, left by an
|
|
33
|
+
* interrupted or racing run, is a second copy of the tree. Anyone who reads the
|
|
34
|
+
* directory's presence as the defect will delete it, watch it return empty, and
|
|
35
|
+
* conclude wrongly that the fix did not take.
|
|
36
|
+
*
|
|
37
|
+
* This list is defence in depth, not the cure. The cure is that an interrupted
|
|
38
|
+
* run's sandbox gets reclaimed — see `reclaimAbandonedSandboxes` in
|
|
39
|
+
* `lisa-mutation.mjs`. Both are wanted: reclamation removes the debris, and
|
|
40
|
+
* this stops a scan reading whatever debris reclamation has not reached yet.
|
|
41
|
+
* @module configs/repo-scan
|
|
42
|
+
*/
|
|
43
|
+
import { WORKTREE_ROOTS } from "./worktrees.js";
|
|
44
|
+
/**
|
|
45
|
+
* Stryker's sandbox root when a project declares no `tempDirName`.
|
|
46
|
+
*
|
|
47
|
+
* Duplicated from `lisa-mutation.mjs`'s `DEFAULT_TEMP_DIR_NAME` rather than
|
|
48
|
+
* imported: that module is an untyped `.mjs` shipped under `typescript/`, and a
|
|
49
|
+
* `src/` config importing a stack template would invert the dependency
|
|
50
|
+
* direction the package is built on. The value is Stryker's own default and is
|
|
51
|
+
* pinned by a test in both places.
|
|
52
|
+
*/
|
|
53
|
+
export const DEFAULT_SANDBOX_ROOT = ".stryker-tmp";
|
|
54
|
+
/**
|
|
55
|
+
* Directory names a repository-wide source scan skips.
|
|
56
|
+
*
|
|
57
|
+
* Names, not paths, because these are matched against a single directory entry
|
|
58
|
+
* during a walk. A project that configures a different `tempDirName` should add
|
|
59
|
+
* it alongside these rather than replacing the list.
|
|
60
|
+
*/
|
|
61
|
+
export const REPO_SCAN_EXCLUSIONS = [
|
|
62
|
+
".git",
|
|
63
|
+
"node_modules",
|
|
64
|
+
"dist",
|
|
65
|
+
"coverage",
|
|
66
|
+
".claude",
|
|
67
|
+
"scratchpad",
|
|
68
|
+
// Not source: a full second copy of the tree, and the one that has actually
|
|
69
|
+
// broken a scan on this repository.
|
|
70
|
+
DEFAULT_SANDBOX_ROOT,
|
|
71
|
+
// Not this branch's source: another checkout entirely. One host project
|
|
72
|
+
// measured 13,821 of 14,277 collected files coming from worktrees.
|
|
73
|
+
...WORKTREE_ROOTS.map(root => root.split("/").at(-1)),
|
|
74
|
+
];
|
|
75
|
+
/**
|
|
76
|
+
* Whether a walk should skip a directory entry by name.
|
|
77
|
+
* @param name - A single directory entry name, never a path.
|
|
78
|
+
* @returns True when the entry is not source and must not be descended into.
|
|
79
|
+
*/
|
|
80
|
+
export function isExcludedFromRepoScan(name) {
|
|
81
|
+
return REPO_SCAN_EXCLUSIONS.includes(name);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=repo-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-scan.js","sourceRoot":"","sources":["../../src/configs/repo-scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,MAAM;IACN,cAAc;IACd,MAAM;IACN,UAAU;IACV,SAAS;IACT,YAAY;IACZ,4EAA4E;IAC5E,oCAAoC;IACpC,oBAAoB;IACpB,wEAAwE;IACxE,mEAAmE;IACnE,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC;CAChE,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -20,9 +20,9 @@ export const NIGHTLY_E2E_GUARD_BEHAVIOR_CERTIFICATES = Object.freeze({
|
|
|
20
20
|
}),
|
|
21
21
|
"312e8962e21be2f3c6c6c0235b0c6159b8dc39425508b4965c7df87fb1333380": Object.freeze({
|
|
22
22
|
contractVersion: "1.9.0",
|
|
23
|
-
packageVersions: Object.freeze(["4.33.
|
|
23
|
+
packageVersions: Object.freeze(["4.33.5"]),
|
|
24
24
|
provenances: Object.freeze([
|
|
25
|
-
"workspace package @codyswann/lisa@4.33.
|
|
25
|
+
"workspace package @codyswann/lisa@4.33.5 (typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs)",
|
|
26
26
|
]),
|
|
27
27
|
}),
|
|
28
28
|
"898ee0247806c7aa6e98328662d80bcff22ff067999298865462a58daef8bb22": Object.freeze({
|
|
@@ -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,CA4/EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAklQjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -74,15 +74,19 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
74
74
|
"eslint-plugin-code-organization/index.js": "9be5ecb135bc30cf39a3371825e94f8a379d8339653297bd7e48c07624923c83",
|
|
75
75
|
"eslint-plugin-code-organization/package.json": "98ddbb102c1ab145130b90f8bbc1cf274decf58ff85fa4c0993fdaf2c71bb1eb",
|
|
76
76
|
"eslint-plugin-code-organization/rules/enforce-statement-order.js": "b3b8365818395430bc40fa839e5c7d8d4510bb88109a1a9f48c35d267425ceb6",
|
|
77
|
-
"eslint-plugin-component-structure/README.md": "
|
|
77
|
+
"eslint-plugin-component-structure/README.md": "7c4a6bddb07d36816bcecfa6213d5b55fc2df0169dc54b3370115e6d12c45234",
|
|
78
78
|
"eslint-plugin-component-structure/__tests__/enforce-component-structure.test.js": "f507216be4bf630563e28010a40cb99e6a5756c3b6f5b83647775fd1ab4f33ea",
|
|
79
|
-
"eslint-plugin-component-structure/__tests__/
|
|
79
|
+
"eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js": "f9e955f91821be459c9670037d82abb030009a8fe243d5505a14c5b6d5ccae46",
|
|
80
|
+
"eslint-plugin-component-structure/__tests__/no-return-in-view.test.js": "7776eadc79d2c5b8214f9f6c4e62a215362444ad16f8e9b078ca6dd94c8f0cac",
|
|
81
|
+
"eslint-plugin-component-structure/__tests__/plugin-index.test.js": "26494d453552a49ae1ca720515ff3aa68a1a050c851c190d0052a87f34a41a9a",
|
|
80
82
|
"eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js": "98ea09d5e018989b1bdc8ebc6e13557f46d407209d1d631aa6ee7c034e227c51",
|
|
81
83
|
"eslint-plugin-component-structure/__tests__/single-component-per-file.test.js": "8c6ab28190557284d78175d397238c9e896f40c9e1e3f3e02e5b74a81460df6e",
|
|
82
|
-
"eslint-plugin-component-structure/index.js": "
|
|
84
|
+
"eslint-plugin-component-structure/index.js": "d7a59cd26c6065584dc85a6e3c25f5e1e36c883abdb64083f4f9c40dd6106e2c",
|
|
85
|
+
"eslint-plugin-component-structure/lib/view-file-scope.js": "d24c4477ebba4a815344a655e932657b695ac06489f3f7f742ba2b6c137b15ec",
|
|
83
86
|
"eslint-plugin-component-structure/package.json": "99d0173760de800fd83d4f781f0a7817d148a714b8d34aaff7b3c636490adcdd",
|
|
84
87
|
"eslint-plugin-component-structure/rules/enforce-component-structure.js": "0f2c8118534c5602fda6d8637c3a6e3c2f33cd2a753e84b9d4ac92300997df81",
|
|
85
|
-
"eslint-plugin-component-structure/rules/no-
|
|
88
|
+
"eslint-plugin-component-structure/rules/no-hooks-in-view.js": "ccfb45a61873eff6c2fe112634fc5cb010c54665cd89ff6026405be2dbb90e82",
|
|
89
|
+
"eslint-plugin-component-structure/rules/no-return-in-view.js": "8a8328fe7dca562a4408be11029334bbd93a71a978704fd7a26754d32b0e98d7",
|
|
86
90
|
"eslint-plugin-component-structure/rules/require-memo-in-view.js": "d4e5dff390fbe853c7e24890082bb19008c62959bb3920fc35f728973974a1e6",
|
|
87
91
|
"eslint-plugin-component-structure/rules/single-component-per-file.js": "74e6049fdadc38032828f6aaf0b740ef6d4a730a858e8a5d9c85c15e533d2d18",
|
|
88
92
|
"eslint-plugin-phaser/README.md": "0fbb3bbc73bc7bc1a0e832610b4451dbfad9f8884b223e3b55c394fd38afead8",
|
|
@@ -99,7 +103,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
99
103
|
"eslint-plugin-ui-standards/rules/no-unbound-design-value.js": "838d6a46741d5c47398383a2b0366a62d3b408ffb126b695c110d77041c0e43b",
|
|
100
104
|
"expo/copy-overwrite/.easignore.extra": "1d30dac09405c41e23f6212553abacea478d7759b69c18edac0c0053f00e0d37",
|
|
101
105
|
"expo/copy-overwrite/eslint.config.ts": "bb02718e1a809151c282d5fc54a1b570fe1cc86236dc1e5f2bcb570b06a22baa",
|
|
102
|
-
"expo/copy-overwrite/eslint.expo.ts": "
|
|
106
|
+
"expo/copy-overwrite/eslint.expo.ts": "9fa4e74810370bcb89d833774ebbf6193bb5d3e166c5efd9b7273f9506277137",
|
|
103
107
|
"expo/copy-overwrite/eslint.slow.config.ts": "48d6a35be75450becde07d30d859c970c48a0438e730845272629c8ec677d3eb",
|
|
104
108
|
"expo/copy-overwrite/jest.config.ts": "b58454a9cf55cf5c1449457fe8eae8390471c57787bdee05b5e34710aa89950a",
|
|
105
109
|
"expo/copy-overwrite/jest.expo.ts": "e6d7dffc4c83fccc02e0b2d2a52e10de30c8c00a12de44184e960bd6155edcd6",
|
|
@@ -776,11 +780,11 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
776
780
|
"plugins/src/expo/skills/building-native-ui/references/visual-effects.md": "2c1dfd5438f27e4c15bc09ececc57810a58a13e633dc782caac93f8f52cadadf",
|
|
777
781
|
"plugins/src/expo/skills/building-native-ui/references/webgpu-three.md": "a92110c79f7c2f44513aa157a92f58345336615db3ff5e91a487ec3f2bb2c3cf",
|
|
778
782
|
"plugins/src/expo/skills/building-native-ui/references/zoom-transitions.md": "cacc1665e9f3044762765d2cd55fd1ead9627f06478f12dfa2280c6f9ae88ede",
|
|
779
|
-
"plugins/src/expo/skills/container-view-pattern/SKILL.md": "
|
|
783
|
+
"plugins/src/expo/skills/container-view-pattern/SKILL.md": "859a987f8c4b21106a7de3d35b5cb67837f2f07a84656a153086d6220e4a8ff1",
|
|
780
784
|
"plugins/src/expo/skills/container-view-pattern/references/examples.md": "c413acf59eafb65fc5aced87c209662407861af6b724b0fb51e3a87cf8ca2a68",
|
|
781
785
|
"plugins/src/expo/skills/container-view-pattern/references/patterns.md": "fcc25ea059803ac8d5e32ad805c541723ecd4a3c757adb67e4c0949d21a5b6ed",
|
|
782
786
|
"plugins/src/expo/skills/container-view-pattern/scripts/create_component.py": "8226347d191f0e5e688b7862594c197c7697fa8c70ea50756195d13dde1bcb20",
|
|
783
|
-
"plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py": "
|
|
787
|
+
"plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py": "90974c9292fa104334e5ec724d24171fc22c36c0ced37c72b2026c1febef0656",
|
|
784
788
|
"plugins/src/expo/skills/cross-platform-compatibility/SKILL.md": "0cb7dec9036ff2f092e943223b837086ecbb1440a065334b9d645d5f56c491f9",
|
|
785
789
|
"plugins/src/expo/skills/cross-platform-compatibility/references/common-issues.md": "a9109582351155f3a2415fe77b417cec9e8e12d5d1860e68d87ab80198e01f45",
|
|
786
790
|
"plugins/src/expo/skills/cross-platform-compatibility/references/file-extensions.md": "cc8e5c4fcdbbb1a501272f29e77248d31d5cc6500b34db025551c9d7840dd5ea",
|
|
@@ -1546,12 +1550,16 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
1546
1550
|
"eslint-plugin-code-organization/rules/enforce-statement-order.js": true,
|
|
1547
1551
|
"eslint-plugin-component-structure/README.md": true,
|
|
1548
1552
|
"eslint-plugin-component-structure/__tests__/enforce-component-structure.test.js": true,
|
|
1553
|
+
"eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js": true,
|
|
1554
|
+
"eslint-plugin-component-structure/__tests__/no-return-in-view.test.js": true,
|
|
1549
1555
|
"eslint-plugin-component-structure/__tests__/plugin-index.test.js": true,
|
|
1550
1556
|
"eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js": true,
|
|
1551
1557
|
"eslint-plugin-component-structure/__tests__/single-component-per-file.test.js": true,
|
|
1552
1558
|
"eslint-plugin-component-structure/index.js": true,
|
|
1559
|
+
"eslint-plugin-component-structure/lib/view-file-scope.js": true,
|
|
1553
1560
|
"eslint-plugin-component-structure/package.json": true,
|
|
1554
1561
|
"eslint-plugin-component-structure/rules/enforce-component-structure.js": true,
|
|
1562
|
+
"eslint-plugin-component-structure/rules/no-hooks-in-view.js": true,
|
|
1555
1563
|
"eslint-plugin-component-structure/rules/no-return-in-view.js": true,
|
|
1556
1564
|
"eslint-plugin-component-structure/rules/require-memo-in-view.js": true,
|
|
1557
1565
|
"eslint-plugin-component-structure/rules/single-component-per-file.js": true,
|
|
@@ -7530,12 +7538,14 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7530
7538
|
"src/configs/eslint/phaser.ts": true,
|
|
7531
7539
|
"src/configs/eslint/slow.ts": true,
|
|
7532
7540
|
"src/configs/eslint/typescript.ts": true,
|
|
7541
|
+
"src/configs/eslint/view-gate.ts": true,
|
|
7533
7542
|
"src/configs/jest/base.ts": true,
|
|
7534
7543
|
"src/configs/jest/cdk.ts": true,
|
|
7535
7544
|
"src/configs/jest/expo.ts": true,
|
|
7536
7545
|
"src/configs/jest/index.ts": true,
|
|
7537
7546
|
"src/configs/jest/nestjs.ts": true,
|
|
7538
7547
|
"src/configs/jest/typescript.ts": true,
|
|
7548
|
+
"src/configs/repo-scan.ts": true,
|
|
7539
7549
|
"src/configs/vitest/base.ts": true,
|
|
7540
7550
|
"src/configs/vitest/cdk.ts": true,
|
|
7541
7551
|
"src/configs/vitest/harper-fabric.ts": true,
|
|
@@ -8310,6 +8320,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8310
8320
|
"tests/unit/config/eslint-test-files-override.test.ts": true,
|
|
8311
8321
|
"tests/unit/config/expo-design-value-arming.test.ts": true,
|
|
8312
8322
|
"tests/unit/config/expo-eslint-local-config.test.ts": true,
|
|
8323
|
+
"tests/unit/config/expo-view-purity-gate.test.ts": true,
|
|
8313
8324
|
"tests/unit/config/fast-xml-parser-security-floor.test.ts": true,
|
|
8314
8325
|
"tests/unit/config/gate-default-tasks-resolve.test.ts": true,
|
|
8315
8326
|
"tests/unit/config/gate-task-shipped-to-templates.test.ts": true,
|
|
@@ -8341,6 +8352,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8341
8352
|
"tests/unit/config/rails-template.test.ts": true,
|
|
8342
8353
|
"tests/unit/config/release-package-identity-workflows.test.ts": true,
|
|
8343
8354
|
"tests/unit/config/release-push-retry.test.ts": true,
|
|
8355
|
+
"tests/unit/config/repo-scan-exclusions.test.ts": true,
|
|
8344
8356
|
"tests/unit/config/required-checks-declaration.test.ts": true,
|
|
8345
8357
|
"tests/unit/config/scratch-authority.test.ts": true,
|
|
8346
8358
|
"tests/unit/config/scratch-child-authority.test.ts": true,
|
|
@@ -8599,6 +8611,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8599
8611
|
"tests/unit/opencode/session-bootstrap-jira-gate.test.ts": true,
|
|
8600
8612
|
"tests/unit/opencode/settings-installer.test.ts": true,
|
|
8601
8613
|
"tests/unit/opencode/skills-installer.test.ts": true,
|
|
8614
|
+
"tests/unit/plugins/container-view-pattern-parity.test.ts": true,
|
|
8602
8615
|
"tests/unit/scripts/ast-grep-enforcement.test.ts": true,
|
|
8603
8616
|
"tests/unit/scripts/bdd-adoption.test.ts": true,
|
|
8604
8617
|
"tests/unit/scripts/bdd-discovery.test.ts": true,
|