@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.
Files changed (87) hide show
  1. package/dist/configs/eslint/expo.d.ts.map +1 -1
  2. package/dist/configs/eslint/expo.js +4 -7
  3. package/dist/configs/eslint/expo.js.map +1 -1
  4. package/dist/configs/eslint/view-gate.d.ts +42 -0
  5. package/dist/configs/eslint/view-gate.d.ts.map +1 -0
  6. package/dist/configs/eslint/view-gate.js +110 -0
  7. package/dist/configs/eslint/view-gate.js.map +1 -0
  8. package/dist/configs/repo-scan.d.ts +25 -0
  9. package/dist/configs/repo-scan.d.ts.map +1 -0
  10. package/dist/configs/repo-scan.js +83 -0
  11. package/dist/configs/repo-scan.js.map +1 -0
  12. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  13. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  14. package/dist/core/upstream-evidence-manifest.js +20 -7
  15. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  16. package/eslint-plugin-component-structure/README.md +85 -2
  17. package/eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js +229 -0
  18. package/eslint-plugin-component-structure/__tests__/no-return-in-view.test.js +185 -0
  19. package/eslint-plugin-component-structure/__tests__/plugin-index.test.js +8 -1
  20. package/eslint-plugin-component-structure/index.js +4 -1
  21. package/eslint-plugin-component-structure/lib/view-file-scope.js +62 -0
  22. package/eslint-plugin-component-structure/rules/no-hooks-in-view.js +101 -0
  23. package/eslint-plugin-component-structure/rules/no-return-in-view.js +133 -62
  24. package/expo/copy-overwrite/eslint.expo.ts +88 -1
  25. package/package.json +4 -4
  26. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  32. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +80 -24
  39. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +166 -43
  40. package/plugins/lisa-expo/skills/container-view-pattern/SKILL.md +80 -24
  41. package/plugins/lisa-expo/skills/container-view-pattern/scripts/validate_component.py +166 -43
  42. package/plugins/lisa-expo-agy/plugin.json +1 -1
  43. package/plugins/lisa-expo-agy/skills/container-view-pattern/SKILL.md +80 -24
  44. package/plugins/lisa-expo-agy/skills/container-view-pattern/scripts/validate_component.py +166 -43
  45. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-expo-copilot/skills/container-view-pattern/SKILL.md +80 -24
  47. package/plugins/lisa-expo-copilot/skills/container-view-pattern/scripts/validate_component.py +166 -43
  48. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-expo-cursor/skills/container-view-pattern/SKILL.md +80 -24
  50. package/plugins/lisa-expo-cursor/skills/container-view-pattern/scripts/validate_component.py +166 -43
  51. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  54. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  59. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  64. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  69. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-rails-agy/plugin.json +1 -1
  74. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  79. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  83. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  84. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  86. package/plugins/src/expo/skills/container-view-pattern/SKILL.md +80 -24
  87. 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;AAGzB,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,CAgRnC"}
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 component rules
329
- {
330
- files: ["**/*View.tsx", "**/*View.jsx"],
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;AAEzB,mCAAmC;AACnC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,CAAC;AAEF,+EAA+E;AAC/E,kFAAkF;AAClF,uFAAuF;AACvF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,kBAAkB,GAAG,OAAO,CAChC,aAAa,CACX,IAAI,GAAG,CACL,qDAAqD,EACrD,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CACF,CACF,CAAC;AACF,MAAM,WAAW,GAAG,OAAO,CACzB,aAAa,CACX,IAAI,GAAG,CAAC,8CAA8C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CACzE,CACF,CAAC;AACF,MAAM,UAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AACtD,MAAM,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkD;SAC3E,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACxE,sEAAsE;QACtE,qEAAqE;QACrE,MAAM,IAAI,SAAS,CACjB,GAAG,IAAI,sEAAsE,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,IAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAA4B;IAE5B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC;QACzB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;QAC1C,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,2BAA2B;IAClC,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE;YACL,GAAG,MAAM,CAAC,KAAK;YACf,yBAAyB,EAAE,KAAK;SACjC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,eAAe,EACf,cAAc,GAAG,cAAc,EAC/B,UAAU,GAAG,iBAAiB,EAC9B,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,GAoBf;IACC,OAAO;QACL,iBAAiB;QACjB;YACE,OAAO,EAAE,cAAc;SACxB;QAED,yCAAyC;QACzC,GAAG,cAAc,EAAE;QAEnB,+BAA+B;QAC/B,GAAG,UAAU;QAEb,uBAAuB;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAEjC,gBAAgB;QAChB,OAAO,CAAC,WAAW,CAAC,MAAM;QAE1B,eAAe;QACf,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAEvC,cAAc;QACd,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;QAElC,mCAAmC;QACnC;YACE,eAAe,EAAE;gBACf,GAAG,sBAAsB,EAAE;gBAC3B,aAAa,EAAE;oBACb,GAAG,sBAAsB,EAAE,CAAC,aAAa;oBACzC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;iBAC5B;aACF;YACD,OAAO,EAAE;gBACP,qBAAqB,EAAE,kBAAkB;gBACzC,mBAAmB,EAAE,gBAAgB;gBACrC,gBAAgB,EAAE,aAAa;gBAC/B,cAAc,EAAE,WAAW;aAC5B;YACD,KAAK,EAAE;gBACL,yBAAyB;gBACzB,GAAG,cAAc,CAAC,UAAU,CAAC;gBAE7B,oBAAoB;gBACpB,2CAA2C,EAAE,OAAO;gBAEpD,oCAAoC;gBACpC,sCAAsC,EAAE,KAAK;gBAC7C,mCAAmC,EAAE,KAAK;gBAC1C,uEAAuE;gBACvE,uEAAuE;gBACvE,mEAAmE;gBACnE,qEAAqE;gBACrE,oEAAoE;gBACpE,wBAAwB;gBACxB,sCAAsC,EACpC,yBAAyB,CAAC,SAAS,CAAC;gBAEtC,WAAW;gBACX,8BAA8B,EAAE;oBAC9B,OAAO;oBACP;wBACE,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;qBAC3D;iBACF;gBAED,eAAe;gBACf,+DAA+D;gBAC/D,6BAA6B;gBAC7B,iBAAiB,EAAE,KAAK;gBACxB,kBAAkB,EAAE,KAAK;gBACzB,mEAAmE;gBACnE,sBAAsB,EAAE,KAAK,EAAE,wFAAwF;gBACvH,8BAA8B,EAAE,KAAK;gBACrC,sBAAsB,EAAE,OAAO;gBAE/B,oBAAoB;gBACpB,sCAAsC,EAAE,OAAO;gBAC/C,qCAAqC,EAAE,OAAO;gBAC9C,wCAAwC,EAAE,OAAO;gBAEjD,cAAc;gBACd,yCAAyC,EAAE,OAAO;gBAClD,sBAAsB,EAAE,KAAK;gBAC7B,0BAA0B,EAAE,KAAK;gBACjC,6BAA6B,EAAE,OAAO;gBACtC,4BAA4B,EAAE,OAAO;gBACrC,iCAAiC,EAAE,OAAO;gBAC1C,yCAAyC,EAAE,OAAO;gBAClD,kBAAkB,EAAE,OAAO;gBAC3B,0BAA0B,EAAE,OAAO;gBACnC,+DAA+D;gBAC/D,6BAA6B;gBAC7B,+BAA+B,EAAE,KAAK;gBACtC,+BAA+B,EAAE,KAAK;gBACtC,mEAAmE;gBACnE,6DAA6D;gBAC7D,+CAA+C;gBAC/C,sBAAsB,EAAE;oBACtB,OAAO;oBACP;wBACE,QAAQ,EACN,8DAA8D;wBAChE,OAAO,EACL,iIAAiI;qBACpI;iBACF;gBAED,4BAA4B;gBAC5B,YAAY,EAAE,MAAM;gBAEpB,oFAAoF;gBACpF,uBAAuB,EAAE,OAAO;gBAEhC,kEAAkE;gBAClE,qBAAqB,EAAE;oBACrB,OAAO;oBACP;wBACE,OAAO,EAAE;4BACP,mBAAmB,EAAE,IAAI;4BACzB,gBAAgB,EAAE,KAAK;4BACvB,gBAAgB,EAAE,KAAK;4BACvB,uBAAuB,EAAE,KAAK;4BAC9B,kBAAkB,EAAE,KAAK;yBAC1B;wBACD,QAAQ,EAAE;4BACR,wBAAwB;4BACxB,wBAAwB;4BACxB,iGAAiG;yBAClG;qBACF;iBACF;aACF;SACF;QAED,4BAA4B;QAC5B,kBAAkB,EAAE;QAEpB,8BAA8B;QAC9B,sBAAsB,EAAE;QAExB,gBAAgB;QAChB;YACE,KAAK,EAAE;gBACL,GAAG,UAAU,wBAAwB;gBACrC,GAAG,UAAU,wBAAwB;gBACrC,GAAG,UAAU,+BAA+B;gBAC5C,GAAG,UAAU,+BAA+B;aAC7C;YACD,KAAK,EAAE;gBACL,sCAAsC,EAAE,KAAK;aAC9C;SACF;QAED,gDAAgD;QAChD,oBAAoB,CAAC;YACnB,eAAe;YACf,eAAe;YACf,cAAc;YACd,cAAc;SACf,CAAC;QAEF,gEAAgE;QAChE;YACE,GAAG,kBAAkB,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC;YAC/D,KAAK,EAAE;gBACL,GAAG,kBAAkB,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK;gBACrE,kBAAkB,EAAE,KAAK;aAC1B;SACF;QAED,qDAAqD;QACrD;YACE,KAAK,EAAE,CAAC,UAAU,CAAC;YACnB,KAAK,EAAE;gBACL,uBAAuB,EAAE,KAAK;aAC/B;SACF;QAED,qFAAqF;QACrF,sBAAsB,CAAC;YACrB,cAAc;YACd,eAAe;YACf,aAAa;YACb,cAAc;SACf,CAAC;QAEF,4BAA4B;QAC5B;YACE,KAAK,EAAE;gBACL,GAAG,UAAU,gCAAgC;gBAC7C,GAAG,UAAU,iCAAiC;gBAC9C,GAAG,UAAU,iCAAiC;gBAC9C,GAAG,UAAU,6BAA6B;gBAC1C,GAAG,UAAU,8BAA8B;gBAC3C,GAAG,UAAU,8BAA8B;gBAC3C,GAAG,UAAU,oBAAoB;gBACjC,GAAG,UAAU,qBAAqB;gBAClC,GAAG,UAAU,qBAAqB;aACnC;YACD,OAAO,EAAE;gBACP,GAAG,UAAU,kBAAkB;gBAC/B,GAAG,UAAU,sBAAsB;gBACnC,GAAG,UAAU,qBAAqB;aACnC;YACD,KAAK,EAAE;gBACL,iDAAiD,EAAE,OAAO;gBAC1D,+CAA+C,EAAE,OAAO;aACzD;SACF;QAED,uBAAuB;QACvB;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;YACvC,KAAK,EAAE;gBACL,uCAAuC,EAAE,OAAO;aACjD;SACF;QAED,kDAAkD;QAClD;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;YACvC,OAAO,EAAE,CAAC,GAAG,UAAU,kBAAkB,CAAC;YAC1C,KAAK,EAAE;gBACL,0CAA0C,EAAE,OAAO;aACpD;SACF;QAED,gEAAgE;QAChE,wEAAwE;QACxE,+CAA+C;QAC/C;YACE,KAAK,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,2BAA2B,CAAC;YACpE,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;QAED,oEAAoE;QACpE,kEAAkE;QAClE;YACE,KAAK,EAAE;gBACL,+BAA+B;gBAC/B,wBAAwB;gBACxB,2BAA2B;aAC5B;YACD,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;QAED,4DAA4D;QAC5D;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,YAAY,CAAC;YACxD,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;QAED,2EAA2E;QAC3E,wEAAwE;QACxE,mCAAmC;QACnC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/B,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QAElC,sEAAsE;QACtE,uEAAuE;QACvE,mEAAmE;QACnE,2BAA2B,EAAE;KACiB,CAAC;AACnD,CAAC;AAED,8EAA8E"}
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.3"]),
23
+ packageVersions: Object.freeze(["4.33.5"]),
24
24
  provenances: Object.freeze([
25
- "workspace package @codyswann/lisa@4.33.3 (typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs)",
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,CAo/EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAykQjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,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": "e81ac58bf90cce80dde07a69cf1418bd1be2130857b83848c9af495da47c5db0",
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__/plugin-index.test.js": "adb5d5968d96d2fbe048cd64830325cdf52faaa243cc602afe6aeeeb7aa46cc8",
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": "815496885f3565489b8cf9493aca39c59796011fca96b8939178f22e93d0c808",
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-return-in-view.js": "1d2b3dd8ea31f9a7e93ce567d330567c1dccfcb0e5307f35eee669103eaad514",
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": "31ec984b1922dbd8c177588d37a8d6c25bc5e91063186cc8d60197c83f6c707f",
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": "5e32ca62658ada94b1db774191c60795b1e5725eeabe7ae1a4a7e7080fe0d962",
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": "211911b521c5d363a6486ce12beac5538e5b76f26c146dcffad22edee1997f59",
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,