@codyswann/lisa 4.28.5 → 4.29.1

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 (188) hide show
  1. package/all/copy-overwrite/scripts/lisa-gates.mjs +2 -1
  2. package/all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh +3 -2
  3. package/cdk/create-only/vitest.config.local.ts +5 -1
  4. package/cdk/package-lisa/package.lisa.json +14 -7
  5. package/dist/cli/lisa-test-run-bootstrap.d.ts +3 -0
  6. package/dist/cli/lisa-test-run-bootstrap.d.ts.map +1 -0
  7. package/dist/cli/lisa-test-run-bootstrap.js +201 -0
  8. package/dist/cli/lisa-test-run-bootstrap.js.map +1 -0
  9. package/dist/cli/lisa-test-run-ipc.d.ts +42 -0
  10. package/dist/cli/lisa-test-run-ipc.d.ts.map +1 -0
  11. package/dist/cli/lisa-test-run-ipc.js +200 -0
  12. package/dist/cli/lisa-test-run-ipc.js.map +1 -0
  13. package/dist/cli/lisa-test-run-process-group.d.ts +30 -0
  14. package/dist/cli/lisa-test-run-process-group.d.ts.map +1 -0
  15. package/dist/cli/lisa-test-run-process-group.js +123 -0
  16. package/dist/cli/lisa-test-run-process-group.js.map +1 -0
  17. package/dist/cli/lisa-test-run-reaper.d.ts +3 -0
  18. package/dist/cli/lisa-test-run-reaper.d.ts.map +1 -0
  19. package/dist/cli/lisa-test-run-reaper.js +195 -0
  20. package/dist/cli/lisa-test-run-reaper.js.map +1 -0
  21. package/dist/cli/lisa-test-run-runtime.d.ts +46 -0
  22. package/dist/cli/lisa-test-run-runtime.d.ts.map +1 -0
  23. package/dist/cli/lisa-test-run-runtime.js +123 -0
  24. package/dist/cli/lisa-test-run-runtime.js.map +1 -0
  25. package/dist/cli/lisa-test-run-supervisor.d.ts +13 -0
  26. package/dist/cli/lisa-test-run-supervisor.d.ts.map +1 -0
  27. package/dist/cli/lisa-test-run-supervisor.js +268 -0
  28. package/dist/cli/lisa-test-run-supervisor.js.map +1 -0
  29. package/dist/cli/lisa-test-run.d.ts +3 -0
  30. package/dist/cli/lisa-test-run.d.ts.map +1 -0
  31. package/dist/cli/lisa-test-run.js +66 -0
  32. package/dist/cli/lisa-test-run.js.map +1 -0
  33. package/dist/configs/vitest/base.d.ts.map +1 -1
  34. package/dist/configs/vitest/base.js +5 -2
  35. package/dist/configs/vitest/base.js.map +1 -1
  36. package/dist/configs/vitest/cdk.d.ts +4 -0
  37. package/dist/configs/vitest/cdk.d.ts.map +1 -1
  38. package/dist/configs/vitest/cdk.js +5 -0
  39. package/dist/configs/vitest/cdk.js.map +1 -1
  40. package/dist/configs/vitest/harper-fabric.d.ts.map +1 -1
  41. package/dist/configs/vitest/harper-fabric.js +1 -0
  42. package/dist/configs/vitest/harper-fabric.js.map +1 -1
  43. package/dist/configs/vitest/nestjs.d.ts.map +1 -1
  44. package/dist/configs/vitest/nestjs.js +1 -0
  45. package/dist/configs/vitest/nestjs.js.map +1 -1
  46. package/dist/configs/vitest/phaser.d.ts.map +1 -1
  47. package/dist/configs/vitest/phaser.js +1 -0
  48. package/dist/configs/vitest/phaser.js.map +1 -1
  49. package/dist/configs/vitest/scratch-authority.d.ts +25 -0
  50. package/dist/configs/vitest/scratch-authority.d.ts.map +1 -0
  51. package/dist/configs/vitest/scratch-authority.js +107 -0
  52. package/dist/configs/vitest/scratch-authority.js.map +1 -0
  53. package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts +5 -0
  54. package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts.map +1 -0
  55. package/dist/configs/vitest/scratch-bound-cleanup-programs.js +219 -0
  56. package/dist/configs/vitest/scratch-bound-cleanup-programs.js.map +1 -0
  57. package/dist/configs/vitest/scratch-bound-cleanup.d.ts +28 -0
  58. package/dist/configs/vitest/scratch-bound-cleanup.d.ts.map +1 -0
  59. package/dist/configs/vitest/scratch-bound-cleanup.js +155 -0
  60. package/dist/configs/vitest/scratch-bound-cleanup.js.map +1 -0
  61. package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts +17 -0
  62. package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts.map +1 -0
  63. package/dist/configs/vitest/scratch-bound-root-cleanup.js +149 -0
  64. package/dist/configs/vitest/scratch-bound-root-cleanup.js.map +1 -0
  65. package/dist/configs/vitest/scratch-global-setup.d.ts +17 -9
  66. package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -1
  67. package/dist/configs/vitest/scratch-global-setup.js +103 -35
  68. package/dist/configs/vitest/scratch-global-setup.js.map +1 -1
  69. package/dist/configs/vitest/scratch-leak-setup.d.ts +2 -0
  70. package/dist/configs/vitest/scratch-leak-setup.d.ts.map +1 -0
  71. package/dist/configs/vitest/scratch-leak-setup.js +108 -0
  72. package/dist/configs/vitest/scratch-leak-setup.js.map +1 -0
  73. package/dist/configs/vitest/scratch-namespace-authority.d.ts +80 -0
  74. package/dist/configs/vitest/scratch-namespace-authority.d.ts.map +1 -0
  75. package/dist/configs/vitest/scratch-namespace-authority.js +291 -0
  76. package/dist/configs/vitest/scratch-namespace-authority.js.map +1 -0
  77. package/dist/configs/vitest/scratch-owner.d.ts +131 -0
  78. package/dist/configs/vitest/scratch-owner.d.ts.map +1 -0
  79. package/dist/configs/vitest/scratch-owner.js +297 -0
  80. package/dist/configs/vitest/scratch-owner.js.map +1 -0
  81. package/dist/configs/vitest/scratch-route-profile.d.ts +36 -0
  82. package/dist/configs/vitest/scratch-route-profile.d.ts.map +1 -0
  83. package/dist/configs/vitest/scratch-route-profile.js +217 -0
  84. package/dist/configs/vitest/scratch-route-profile.js.map +1 -0
  85. package/dist/configs/vitest/scratch-run-root-compatibility.d.ts +33 -0
  86. package/dist/configs/vitest/scratch-run-root-compatibility.d.ts.map +1 -0
  87. package/dist/configs/vitest/scratch-run-root-compatibility.js +137 -0
  88. package/dist/configs/vitest/scratch-run-root-compatibility.js.map +1 -0
  89. package/dist/configs/vitest/scratch-run-root-intent.d.ts +66 -0
  90. package/dist/configs/vitest/scratch-run-root-intent.d.ts.map +1 -0
  91. package/dist/configs/vitest/scratch-run-root-intent.js +183 -0
  92. package/dist/configs/vitest/scratch-run-root-intent.js.map +1 -0
  93. package/dist/configs/vitest/scratch-setup.d.ts.map +1 -1
  94. package/dist/configs/vitest/scratch-setup.js +45 -15
  95. package/dist/configs/vitest/scratch-setup.js.map +1 -1
  96. package/dist/configs/vitest/scratch-supervision-intent.d.ts +8 -0
  97. package/dist/configs/vitest/scratch-supervision-intent.d.ts.map +1 -0
  98. package/dist/configs/vitest/scratch-supervision-intent.js +125 -0
  99. package/dist/configs/vitest/scratch-supervision-intent.js.map +1 -0
  100. package/dist/configs/vitest/scratch-supervision-protocol.d.ts +12 -0
  101. package/dist/configs/vitest/scratch-supervision-protocol.d.ts.map +1 -0
  102. package/dist/configs/vitest/scratch-supervision-protocol.js +230 -0
  103. package/dist/configs/vitest/scratch-supervision-protocol.js.map +1 -0
  104. package/dist/configs/vitest/scratch-supervision.d.ts +64 -0
  105. package/dist/configs/vitest/scratch-supervision.d.ts.map +1 -0
  106. package/dist/configs/vitest/scratch-supervision.js +209 -0
  107. package/dist/configs/vitest/scratch-supervision.js.map +1 -0
  108. package/dist/configs/vitest/scratch-sweep.d.ts +66 -0
  109. package/dist/configs/vitest/scratch-sweep.d.ts.map +1 -0
  110. package/dist/configs/vitest/scratch-sweep.js +82 -0
  111. package/dist/configs/vitest/scratch-sweep.js.map +1 -0
  112. package/dist/configs/vitest/scratch.d.ts +14 -187
  113. package/dist/configs/vitest/scratch.d.ts.map +1 -1
  114. package/dist/configs/vitest/scratch.js +18 -285
  115. package/dist/configs/vitest/scratch.js.map +1 -1
  116. package/dist/configs/vitest/typescript.d.ts.map +1 -1
  117. package/dist/configs/vitest/typescript.js +1 -0
  118. package/dist/configs/vitest/typescript.js.map +1 -1
  119. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  120. package/dist/core/lisa-owned-hash-ledger.js +4 -0
  121. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  122. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  123. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  124. package/dist/core/upstream-evidence-manifest.js +59 -13
  125. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  126. package/expo/package-lisa/package.lisa.json +14 -14
  127. package/harper-fabric/package-lisa/package.lisa.json +8 -3
  128. package/nestjs/create-only/vitest.config.local.ts +5 -1
  129. package/nestjs/package-lisa/package.lisa.json +14 -8
  130. package/npm-package/package-lisa/package.lisa.json +8 -0
  131. package/package.json +17 -13
  132. package/phaser/package-lisa/package.lisa.json +9 -3
  133. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  135. package/plugins/lisa/hooks/sonar-secrets.sh +3 -2
  136. package/plugins/lisa-agy/plugin.json +1 -1
  137. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  138. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  139. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  140. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  141. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  142. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  143. package/plugins/lisa-copilot/hooks/sonar-secrets.sh +3 -2
  144. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  145. package/plugins/lisa-cursor/hooks/sonar-secrets.sh +3 -2
  146. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  147. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  148. package/plugins/lisa-expo-agy/plugin.json +1 -1
  149. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  150. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  151. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  152. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  153. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  154. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  155. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  156. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  157. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  158. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  159. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  160. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  161. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  162. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  163. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  164. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  165. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  166. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  167. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  168. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  169. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  170. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  171. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  172. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  173. package/plugins/lisa-rails-agy/plugin.json +1 -1
  174. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  175. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  176. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  177. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  178. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  179. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  180. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  181. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  182. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  183. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  184. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  185. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  186. package/plugins/src/base/hooks/sonar-secrets.sh +3 -2
  187. package/typescript/create-only/vitest.config.local.ts +5 -1
  188. package/typescript/package-lisa/package.lisa.json +14 -8
@@ -4,12 +4,12 @@
4
4
  "setup:deploy-key": "setup-deploy-key",
5
5
  "lighthouse:check": "lhci autorun --collect.settings.chromeFlags='--no-sandbox --disable-gpu --headless' --assert.assertions.forced-reflow-insight=off && node scripts/check-lighthouse-details.mjs",
6
6
  "playwright:build": "expo export --platform web",
7
- "playwright:test": "bun run playwright:build && playwright test",
8
- "playwright:test:ui": "bun run playwright:build && playwright test --ui",
9
- "maestro:test": "maestro test .maestro/flows",
10
- "maestro:test:ios": "maestro test -p ios .maestro/flows",
11
- "maestro:test:android": "maestro test -p android .maestro/flows",
12
- "maestro:test:smoke": "maestro test -p ios --include-tags=smoke .maestro/flows",
7
+ "playwright:test": "bun run playwright:build && lisa-test-run --profile expo --adapter direct -- playwright test",
8
+ "playwright:test:ui": "bun run playwright:build && lisa-test-run --profile expo --adapter direct -- playwright test --ui",
9
+ "maestro:test": "lisa-test-run --profile expo --adapter direct -- maestro test .maestro/flows",
10
+ "maestro:test:ios": "lisa-test-run --profile expo --adapter direct -- maestro test -p ios .maestro/flows",
11
+ "maestro:test:android": "lisa-test-run --profile expo --adapter direct -- maestro test -p android .maestro/flows",
12
+ "maestro:test:smoke": "lisa-test-run --profile expo --adapter direct -- maestro test -p ios --include-tags=smoke .maestro/flows",
13
13
  "maestro:studio": "maestro studio",
14
14
  "maestro:classify": "node scripts/classify-maestro-failures.mjs",
15
15
  "bdd:coverage": "node scripts/check-bdd-coverage.mjs",
@@ -51,17 +51,17 @@
51
51
  "eas:publish:staging": "eas update --channel staging --environment preview --non-interactive",
52
52
  "eas:publish:production": "eas update --channel production --environment production --non-interactive",
53
53
  "security:zap": "bash scripts/zap-baseline.sh",
54
- "test": "NODE_ENV=test jest",
55
- "test:unit": "NODE_ENV=test jest --testPathIgnorePatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\"",
56
- "test:integration:lisa": "NODE_ENV=test jest --testPathPatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\"",
57
- "test:cov": "NODE_ENV=test jest --coverage",
58
- "test:cov:unit": "LISA_COVERAGE_SCOPE=unit NODE_ENV=test jest --coverage --testPathIgnorePatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\"",
59
- "test:mutation": "node scripts/lisa-mutation.mjs",
60
- "test:watch": "NODE_ENV=test jest --watch",
54
+ "test": "NODE_ENV=test lisa-test-run --profile expo --adapter direct -- jest",
55
+ "test:unit": "NODE_ENV=test lisa-test-run --profile expo --adapter direct -- jest --testPathIgnorePatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\"",
56
+ "test:integration:lisa": "NODE_ENV=test lisa-test-run --profile expo --adapter direct -- jest --testPathPatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\"",
57
+ "test:cov": "NODE_ENV=test lisa-test-run --profile expo --adapter direct -- jest --coverage",
58
+ "test:cov:unit": "LISA_COVERAGE_SCOPE=unit NODE_ENV=test lisa-test-run --profile expo --adapter direct -- jest --coverage --testPathIgnorePatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\"",
59
+ "test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' lisa-test-run --profile expo --adapter direct -- node scripts/lisa-mutation.mjs",
60
+ "test:watch": "NODE_ENV=test lisa-test-run --profile expo --adapter direct -- jest --watch",
61
61
  "lint:lisa": "oxlint && eslint . --quiet",
62
62
  "lint:fix": "oxlint --fix && eslint . --fix",
63
63
  "start:atlas": "cp .env.development .env.local && STAGE=development EXPO_ATLAS=true expo start",
64
- "test:node": "node scripts/lisa-test-node.mjs"
64
+ "test:node": "LISA_TEST_SCRATCH_PREFIXES='[\"node-\"]' lisa-test-run --profile expo --adapter direct -- node scripts/lisa-test-node.mjs"
65
65
  },
66
66
  "dependencies": {
67
67
  "@apollo/client": "^3.10.8",
@@ -4,8 +4,13 @@
4
4
  "bootstrap": "bash scripts/bootstrap.sh",
5
5
  "setup:deploy-key": "setup-deploy-key",
6
6
  "typecheck:lisa": "tsc --noEmit",
7
- "test": "vitest run",
8
- "test:cov": "vitest run --coverage",
7
+ "test": "lisa-test-run --profile harper-fabric --adapter vitest -- vitest run",
8
+ "test:unit": "lisa-test-run --profile harper-fabric --adapter vitest -- vitest run --exclude='**/integration/**'",
9
+ "test:integration:lisa": "lisa-test-run --profile harper-fabric --adapter vitest -- vitest run '.integration.' 'integration/'",
10
+ "test:cov": "lisa-test-run --profile harper-fabric --adapter vitest -- vitest run --coverage",
11
+ "test:cov:unit": "LISA_COVERAGE_SCOPE=unit lisa-test-run --profile harper-fabric --adapter vitest -- vitest run --coverage --exclude='**/integration/**'",
12
+ "test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' lisa-test-run --profile harper-fabric --adapter direct -- node scripts/lisa-mutation.mjs",
13
+ "test:watch": "lisa-test-run --profile harper-fabric --adapter vitest -- vitest",
9
14
  "lint:lisa": "oxlint && eslint . --quiet",
10
15
  "lint:fix": "oxlint --fix && eslint . --fix",
11
16
  "lint:slow:lisa": "eslint . --config eslint.slow.config.ts --quiet",
@@ -20,7 +25,7 @@
20
25
  "status": "harperdb status",
21
26
  "reset": "harperdb stop || true; [ -n \"$HOME\" ] && rm -rf \"$HOME/.harperdb\" && bun run bootstrap && bun run seed && bun run verify",
22
27
  "prepare": "husky install || true",
23
- "test:node": "node scripts/lisa-test-node.mjs"
28
+ "test:node": "LISA_TEST_SCRATCH_PREFIXES='[\"node-\"]' lisa-test-run --profile harper-fabric --adapter direct -- node scripts/lisa-test-node.mjs"
24
29
  },
25
30
  "dependencies": {
26
31
  "harperdb": "^4.7.29"
@@ -28,7 +28,11 @@
28
28
  import type { ViteUserConfig } from "vitest/config";
29
29
 
30
30
  const config: ViteUserConfig = {
31
- // Add project-specific settings here
31
+ test: {
32
+ // Scratch redirection must install before the leak guard, and the guard's
33
+ // afterAll must run after project hooks so cleanup is attributed correctly.
34
+ sequence: { setupFiles: "list", hooks: "stack" },
35
+ },
32
36
  };
33
37
 
34
38
  export default config;
@@ -41,16 +41,16 @@
41
41
  "deploy:staging": "sls deploy --stage staging",
42
42
  "deploy:production": "sls deploy --stage production",
43
43
  "security:zap": "bash scripts/zap-baseline.sh",
44
- "test": "vitest run",
45
- "test:unit": "vitest run --exclude='**/integration/**'",
46
- "test:integration:lisa": "vitest run '.integration.' 'integration/'",
47
- "test:cov": "vitest run --coverage",
48
- "test:cov:unit": "LISA_COVERAGE_SCOPE=unit vitest run --coverage --exclude='**/integration/**' --exclude='**/*.integration.*'",
49
- "test:mutation": "node scripts/lisa-mutation.mjs",
50
- "test:watch": "vitest",
44
+ "test": "lisa-test-run --profile nestjs --adapter vitest -- vitest run",
45
+ "test:unit": "lisa-test-run --profile nestjs --adapter vitest -- vitest run --exclude='**/integration/**' --exclude='**/*.integration.*'",
46
+ "test:integration:lisa": "lisa-test-run --profile nestjs --adapter vitest -- vitest run '.integration.' 'integration/'",
47
+ "test:cov": "lisa-test-run --profile nestjs --adapter vitest -- vitest run --coverage",
48
+ "test:cov:unit": "LISA_COVERAGE_SCOPE=unit lisa-test-run --profile nestjs --adapter vitest -- vitest run --coverage --exclude='**/integration/**' --exclude='**/*.integration.*'",
49
+ "test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' lisa-test-run --profile nestjs --adapter direct -- node scripts/lisa-mutation.mjs",
50
+ "test:watch": "lisa-test-run --profile nestjs --adapter vitest -- vitest",
51
51
  "lint:lisa": "oxlint && eslint . --quiet",
52
52
  "lint:fix": "oxlint --fix && eslint . --fix",
53
- "test:node": "node scripts/lisa-test-node.mjs"
53
+ "test:node": "LISA_TEST_SCRATCH_PREFIXES='[\"node-\"]' lisa-test-run --profile nestjs --adapter direct -- node scripts/lisa-test-node.mjs"
54
54
  },
55
55
  "dependencies": {
56
56
  "@apollo/server": "^5.4.0",
@@ -110,6 +110,12 @@
110
110
  "adopt": {
111
111
  "scripts": {
112
112
  "test:integration": [
113
+ "lisa-test-run --profile nestjs --adapter vitest -- vitest run '.integration.' 'integration/' --passWithNoTests",
114
+ "lisa-test-run --profile nestjs --adapter vitest -- vitest run '.integration.' 'integration/'",
115
+ "lisa-test-run --profile nestjs -- vitest run '.integration.' 'integration/' --passWithNoTests",
116
+ "lisa-test-run --profile nestjs -- vitest run '.integration.' 'integration/'",
117
+ "lisa-test-run -- vitest run '.integration.' 'integration/' --passWithNoTests",
118
+ "lisa-test-run -- vitest run '.integration.' 'integration/'",
113
119
  "vitest run '.integration.' 'integration/' --passWithNoTests",
114
120
  "vitest run '.integration.' 'integration/'",
115
121
  "vitest run '.integration.'",
@@ -3,6 +3,14 @@
3
3
  "scripts": {
4
4
  "prepublishOnly": "$npm_execpath run build",
5
5
  "setup:deploy-key": "setup-deploy-key",
6
+ "test": "lisa-test-run --profile npm-package --adapter vitest -- vitest run",
7
+ "test:unit": "lisa-test-run --profile npm-package --adapter vitest -- vitest run --exclude='**/integration/**' --exclude='**/*.integration.*'",
8
+ "test:integration:lisa": "lisa-test-run --profile npm-package --adapter vitest -- vitest run '.integration.' 'integration/'",
9
+ "test:cov": "lisa-test-run --profile npm-package --adapter vitest -- vitest run --coverage",
10
+ "test:cov:unit": "LISA_COVERAGE_SCOPE=unit lisa-test-run --profile npm-package --adapter vitest -- vitest run --coverage --exclude='**/integration/**' --exclude='**/*.integration.*'",
11
+ "test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' lisa-test-run --profile npm-package --adapter direct -- node scripts/lisa-mutation.mjs",
12
+ "test:watch": "lisa-test-run --profile npm-package --adapter vitest -- vitest",
13
+ "test:node": "LISA_TEST_SCRATCH_PREFIXES='[\"node-\"]' lisa-test-run --profile npm-package --adapter direct -- node scripts/lisa-test-node.mjs",
6
14
  "prepare": "$npm_execpath run build && husky install || true"
7
15
  },
8
16
  "devDependencies": {
package/package.json CHANGED
@@ -3,17 +3,18 @@
3
3
  "build": "bun run build:dist && bun run build:plugins",
4
4
  "build:dist": "node scripts/clean-dist.mjs && tsc && node scripts/copy-codex-scripts.mjs && node scripts/copy-opencode-plugin-templates.mjs",
5
5
  "build:dist:in-place": "tsc && node scripts/copy-codex-scripts.mjs && node scripts/copy-opencode-plugin-templates.mjs",
6
- "test:integration": "vitest run tests/integration",
7
- "test:integration:push": "vitest run tests/integration --exclude='**/mutation-gate-bite.test.ts' --exclude='**/mutation-gate-diff-bite.test.ts' --exclude='**/mutation-sigterm-control.test.ts' --exclude='**/mutation-performance-fixture.test.ts' --exclude='**/mutation-performance-packed-apply.test.ts'",
6
+ "lisa-test-run": "([ -d dist/configs ] || bun run build) && node dist/cli/lisa-test-run.js --profile lisa",
7
+ "test:integration": "$npm_execpath run lisa-test-run -- --adapter vitest -- vitest run tests/integration",
8
+ "test:integration:push": "$npm_execpath run lisa-test-run -- --adapter vitest -- vitest run tests/integration --exclude='**/mutation-gate-bite.test.ts' --exclude='**/mutation-gate-diff-bite.test.ts' --exclude='**/mutation-sigterm-control.test.ts' --exclude='**/mutation-performance-fixture.test.ts' --exclude='**/mutation-performance-packed-apply.test.ts'",
8
9
  "postinstall": "bash ./scripts/install-claude-plugins.sh || true; node ./scripts/install-generated-artifact-merge-driver.mjs || true; [ -d dist/configs ] || tsc || true",
9
10
  "pretest": "[ -d dist/configs ] || bun run build",
10
- "test": "vitest run",
11
- "test:unit": "vitest run --exclude='**/integration/**'",
12
- "test:cov": "vitest run --coverage",
13
- "test:cov:unit": "LISA_COVERAGE_SCOPE=unit vitest run --coverage --exclude='**/integration/**'",
11
+ "test": "$npm_execpath run lisa-test-run -- --adapter vitest -- vitest run",
12
+ "test:unit": "$npm_execpath run lisa-test-run -- --adapter vitest -- vitest run --exclude='**/integration/**' --exclude='**/*.integration.*'",
13
+ "test:cov": "$npm_execpath run lisa-test-run -- --adapter vitest -- vitest run --coverage",
14
+ "test:cov:unit": "LISA_COVERAGE_SCOPE=unit $npm_execpath run lisa-test-run -- --adapter vitest -- vitest run --coverage --exclude='**/integration/**' --exclude='**/*.integration.*'",
14
15
  "pretest:mutation": "[ -d dist/configs ] || bun run build",
15
- "test:mutation": "node scripts/lisa-mutation.mjs",
16
- "test:mutation:full": "node scripts/lisa-mutation.mjs --all",
16
+ "test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' $npm_execpath run lisa-test-run -- --adapter direct -- node scripts/lisa-mutation.mjs",
17
+ "test:mutation:full": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' $npm_execpath run lisa-test-run -- --adapter direct -- node scripts/lisa-mutation.mjs --all",
17
18
  "lint": "oxlint --disable-nested-config && eslint . --quiet",
18
19
  "lint:fix": "oxlint --fix --disable-nested-config && eslint . --fix",
19
20
  "lint:slow": "eslint . --config eslint.slow.config.ts --quiet",
@@ -28,7 +29,7 @@
28
29
  "prepare": "node -e \"if (process.env.INIT_CWD?.includes('.serverless')) process.exit(0); process.exit(1);\" || husky install || true",
29
30
  "start": "node dist/index.js",
30
31
  "dev": "tsx src/index.ts",
31
- "test:watch": "vitest",
32
+ "test:watch": "$npm_execpath run lisa-test-run -- --adapter vitest -- vitest",
32
33
  "update-node-version": "tsx scripts/update-node-version.ts",
33
34
  "cleanup:amplify-branches": "bash scripts/cleanup-amplify-branches.sh",
34
35
  "cleanup:github-branches": "bash scripts/cleanup-github-branches.sh",
@@ -58,7 +59,7 @@
58
59
  "check:rules-pairing": "bash scripts/check-rules-pairing.sh",
59
60
  "check:pipeline-status-reads": "node scripts/check-pipeline-status-reads.mjs",
60
61
  "check:whole-output-guards": "node scripts/check-whole-output-guards.mjs",
61
- "check:shell-guard-refusals": "([ -d dist/configs ] || bun run build) && node scripts/check-shell-guard-refusal-coverage.mjs",
62
+ "check:shell-guard-refusals": "([ -d dist/configs ] || bun run build) && $npm_execpath run lisa-test-run -- --adapter direct -- node scripts/check-shell-guard-refusal-coverage.mjs",
62
63
  "check:workflow-inputs": "node scripts/detect-stale-workflow-inputs.mjs --project . --project typescript/create-only --project rails/create-only --json",
63
64
  "check:conflict-markers": "node all/copy-overwrite/scripts/check-conflict-markers.mjs",
64
65
  "check:vacuous-required-checks": "node typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs --vacuity",
@@ -162,7 +163,7 @@
162
163
  "zod-validation-error": "^4.0.0"
163
164
  },
164
165
  "name": "@codyswann/lisa",
165
- "version": "4.28.5",
166
+ "version": "4.29.1",
166
167
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
167
168
  "main": "dist/index.js",
168
169
  "exports": {
@@ -211,6 +212,7 @@
211
212
  },
212
213
  "bin": {
213
214
  "lisa": "dist/index.js",
215
+ "lisa-test-run": "dist/cli/lisa-test-run.js",
214
216
  "setup-deploy-key": "scripts/setup-deploy-key.sh"
215
217
  },
216
218
  "keywords": [
@@ -295,6 +297,8 @@
295
297
  "@stryker-mutator/vitest-runner": "^9.0.0",
296
298
  "@types/js-yaml": "^4.0.9",
297
299
  "@types/semver": "^7.7.1",
300
+ "aws-cdk-lib": "2.260.0",
301
+ "constructs": "^10.5.0",
298
302
  "eslint-plugin-oxlint": "^1.62.0",
299
303
  "fast-check": "^4.9.0",
300
304
  "oxlint": "^1.62.0",
@@ -307,6 +311,6 @@
307
311
  "test": "tests"
308
312
  },
309
313
  "types": "./dist/index.d.ts",
310
- "lisaReleaseCommit": "2af88022a9f354acb80903d57bca5c26155302b7",
311
- "gitHead": "2af88022a9f354acb80903d57bca5c26155302b7"
314
+ "lisaReleaseCommit": "9c8f3675158687abd73d0ffb61aa00fad3b9befb",
315
+ "gitHead": "9c8f3675158687abd73d0ffb61aa00fad3b9befb"
312
316
  }
@@ -3,8 +3,14 @@
3
3
  "scripts": {
4
4
  "setup:deploy-key": "setup-deploy-key",
5
5
  "typecheck:lisa": "tsc --noEmit",
6
- "test": "vitest run",
7
- "test:cov": "vitest run --coverage",
6
+ "test": "lisa-test-run --profile phaser --adapter vitest -- vitest run",
7
+ "test:unit": "lisa-test-run --profile phaser --adapter vitest -- vitest run --exclude='**/integration/**' --exclude='**/*.integration.*'",
8
+ "test:integration:lisa": "lisa-test-run --profile phaser --adapter vitest -- vitest run '.integration.' 'integration/'",
9
+ "test:cov": "lisa-test-run --profile phaser --adapter vitest -- vitest run --coverage",
10
+ "test:cov:unit": "LISA_COVERAGE_SCOPE=unit lisa-test-run --profile phaser --adapter vitest -- vitest run --coverage --exclude='**/integration/**' --exclude='**/*.integration.*'",
11
+ "test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' lisa-test-run --profile phaser --adapter direct -- node scripts/lisa-mutation.mjs",
12
+ "test:watch": "lisa-test-run --profile phaser --adapter vitest -- vitest",
13
+ "test:e2e": "lisa-test-run --profile phaser --adapter direct -- playwright test",
8
14
  "lint:lisa": "oxlint && eslint . --quiet",
9
15
  "lint:fix": "oxlint --fix && eslint . --fix",
10
16
  "lint:slow:lisa": "eslint . --config eslint.slow.config.ts --quiet",
@@ -15,7 +21,7 @@
15
21
  "sg:scan:lisa": "ast-grep scan",
16
22
  "sg:test": "ast-grep test",
17
23
  "prepare": "husky install || true",
18
- "test:node": "node scripts/lisa-test-node.mjs"
24
+ "test:node": "LISA_TEST_SCRATCH_PREFIXES='[\"node-\"]' lisa-test-run --profile phaser --adapter direct -- node scripts/lisa-test-node.mjs"
19
25
  },
20
26
  "devDependencies": {
21
27
  "@ast-grep/cli": "^0.40.4",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -134,10 +134,11 @@ is_inactive() {
134
134
  # The FIFO is a rendezvous, not storage: a named pipe holds no data at rest, so
135
135
  # the value still never lands on disk (CWE-922) and a kill at any point leaves an
136
136
  # empty pipe behind rather than a readable token. The directory is `mktemp -d`,
137
- # which is 0700.
137
+ # which is 0700. Its explicit Lisa prefix makes an interrupted resolver
138
+ # attributable to the owning scratch lifecycle instead of anonymous `tmp.*`.
138
139
  resolve_secret() {
139
140
  local resolver="$1" name="$2" value="" child="" dir="" fifo=""
140
- dir="$(mktemp -d)" || return 0
141
+ dir="$(mktemp -d "${TMPDIR:-/tmp}/lisa-sonar-resolver.XXXXXXXX")" || return 0
141
142
  fifo="$dir/resolver"
142
143
  if ! mkfifo -m 600 "$fifo" 2>/dev/null; then
143
144
  rm -rf "$dir"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -134,10 +134,11 @@ is_inactive() {
134
134
  # The FIFO is a rendezvous, not storage: a named pipe holds no data at rest, so
135
135
  # the value still never lands on disk (CWE-922) and a kill at any point leaves an
136
136
  # empty pipe behind rather than a readable token. The directory is `mktemp -d`,
137
- # which is 0700.
137
+ # which is 0700. Its explicit Lisa prefix makes an interrupted resolver
138
+ # attributable to the owning scratch lifecycle instead of anonymous `tmp.*`.
138
139
  resolve_secret() {
139
140
  local resolver="$1" name="$2" value="" child="" dir="" fifo=""
140
- dir="$(mktemp -d)" || return 0
141
+ dir="$(mktemp -d "${TMPDIR:-/tmp}/lisa-sonar-resolver.XXXXXXXX")" || return 0
141
142
  fifo="$dir/resolver"
142
143
  if ! mkfifo -m 600 "$fifo" 2>/dev/null; then
143
144
  rm -rf "$dir"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -134,10 +134,11 @@ is_inactive() {
134
134
  # The FIFO is a rendezvous, not storage: a named pipe holds no data at rest, so
135
135
  # the value still never lands on disk (CWE-922) and a kill at any point leaves an
136
136
  # empty pipe behind rather than a readable token. The directory is `mktemp -d`,
137
- # which is 0700.
137
+ # which is 0700. Its explicit Lisa prefix makes an interrupted resolver
138
+ # attributable to the owning scratch lifecycle instead of anonymous `tmp.*`.
138
139
  resolve_secret() {
139
140
  local resolver="$1" name="$2" value="" child="" dir="" fifo=""
140
- dir="$(mktemp -d)" || return 0
141
+ dir="$(mktemp -d "${TMPDIR:-/tmp}/lisa-sonar-resolver.XXXXXXXX")" || return 0
141
142
  fifo="$dir/resolver"
142
143
  if ! mkfifo -m 600 "$fifo" 2>/dev/null; then
143
144
  rm -rf "$dir"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.28.5",
3
+ "version": "4.29.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"