@codyswann/lisa 1.42.1 → 1.43.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.
@@ -32,7 +32,7 @@ These directories contain files deployed by Lisa **and** files you create. Do no
32
32
 
33
33
  ## Files and directories with NO local override (do not edit at all)
34
34
 
35
- - `.claude/rules/coding-philosophy.md`, `.claude/rules/verfication.md`
35
+ - `.claude/rules/coding-philosophy.md`, `.claude/rules/verfication.md`, `.claude/rules/expo-verification.md` (Expo)
36
36
  - `CLAUDE.md`, `HUMAN.md`, `.safety-net.json`
37
37
  - `.prettierrc.json`, `.prettierignore`, `.lintstagedrc.json`, `.versionrc`, `.nvmrc`
38
38
  - `.yamllint`, `.gitleaksignore`, `.coderabbit.yml`, `commitlint.config.cjs`, `sgconfig.yml`, `knip.json`
@@ -475,39 +475,55 @@ Preferred artifact locations:
475
475
 
476
476
  ## Quick Commands
477
477
 
478
- Document the canonical commands agents should use here.
479
-
480
- Replace placeholders with real commands.
478
+ These commands are consistent across all Lisa-managed projects. Stack-specific commands (Expo, NestJS, CDK) are documented in their respective `.claude/rules/` files.
481
479
 
482
480
  ### Local
483
481
 
484
- - Install: `REPLACE_ME`
485
- - Run app: `REPLACE_ME`
486
- - Run unit tests: `REPLACE_ME`
487
- - Run integration tests: `REPLACE_ME`
488
- - Lint and format: `REPLACE_ME`
482
+ - Install: `bun install`
483
+ - Run app: `bun run start:local` (Expo: dev server; NestJS: serverless offline)
484
+ - Run unit tests: `bun run test:unit`
485
+ - Run integration tests: `bun run test:integration`
486
+ - Run all tests: `bun run test`
487
+ - Run tests with coverage: `bun run test:cov`
488
+ - Lint: `bun run lint`
489
+ - Format check: `bun run format:check`
490
+ - Format fix: `bun run format`
491
+ - Type check: `bun run typecheck`
489
492
 
490
- ### UI Verification
493
+ ### UI Verification (Expo)
491
494
 
492
- - Playwright tests: `REPLACE_ME`
493
- - Record a flow: `REPLACE_ME`
495
+ - Playwright tests (web): `bun run playwright:test`
496
+ - Playwright interactive: `bun run playwright:test:ui`
497
+ - Maestro tests (native): `bun run maestro:test`
498
+ - Maestro smoke tests: `bun run maestro:test:smoke`
499
+ - Maestro studio: `bun run maestro:studio`
500
+ - Ad-hoc browser verification: Use Playwright MCP tools (`browser_snapshot`, `browser_console_messages`, `browser_network_requests`)
494
501
 
495
- ### API Verification
502
+ ### API Verification (NestJS)
496
503
 
497
- - Example curl: `REPLACE_ME`
498
- - GraphQL query runner: `REPLACE_ME`
504
+ - Start local server: `bun run start:local`
505
+ - GraphQL endpoint (local): `http://localhost:3000/graphql`
506
+ - Health check: `curl -s http://localhost:3000/graphql -H 'Content-Type: application/json' -d '{"query":"{ healthCheck }"}'`
499
507
 
500
508
  ### Deployment
501
509
 
502
- - Deploy to preview: `REPLACE_ME`
503
- - Deploy to staging: `REPLACE_ME`
504
- - Rollback: `REPLACE_ME`
510
+ - Expo OTA update (fast, JS-only): `bun run eas:publish:<env>`
511
+ - Expo full build (native changes): `bun run eas:deploy:<env>`
512
+ - NestJS deploy: `bun run deploy:<env>`
513
+ - NestJS deploy single function: `FUNCTION_NAME=<name> bun run deploy:function:<env>`
514
+ - Environments: `dev`, `staging`, `production`
505
515
 
506
516
  ### Observability
507
517
 
508
- - Tail logs: `REPLACE_ME`
509
- - Query metrics: `REPLACE_ME`
510
- - Trace lookup: `REPLACE_ME`
518
+ - Sentry issues: Use `search_issues` MCP tool (Sentry plugin)
519
+ - Sentry issue details: Use `get_issue_details` MCP tool
520
+ - Sentry root cause analysis: Use `analyze_issue_with_seer` MCP tool
521
+ - Sentry event search: Use `search_events` MCP tool
522
+ - Sentry trace lookup: Use `get_trace_details` MCP tool
523
+ - Browser console logs: Use `browser_console_messages` MCP tool (Playwright plugin)
524
+ - Browser network requests: Use `browser_network_requests` MCP tool (Playwright plugin)
525
+ - Backend logs (local): Check terminal output from `bun run start:local`
526
+ - Backend logs (remote): Check companion backend repo's CLAUDE.md for CloudWatch/log commands
511
527
 
512
528
  ---
513
529
 
@@ -9,7 +9,8 @@
9
9
  "code-simplifier@claude-plugins-official": true,
10
10
  "code-review@claude-plugins-official": true,
11
11
  "playwright@claude-plugins-official": true,
12
- "coderabbit@claude-plugins-official": true
12
+ "coderabbit@claude-plugins-official": true,
13
+ "sentry@claude-plugins-official": true
13
14
  },
14
15
  "env": {
15
16
  "BASH_DEFAULT_TIMEOUT_MS": "1800000",
@@ -0,0 +1,261 @@
1
+ # Expo Verification Capabilities
2
+
3
+ This rule documents the native and web verification surfaces available in Expo projects. Agents must use these tools when verifying UI changes, features, and bugs.
4
+
5
+ ---
6
+
7
+ ## Environment Strategy
8
+
9
+ Frontend changes are typically verified against the **remote dev backend**, not a local backend. The backend is generally deployed before the frontend, so the dev environment is the default target for verification.
10
+
11
+ Use `:local` variants only when explicitly running the companion backend repo locally. Use `:dev` for most verification work.
12
+
13
+ ---
14
+
15
+ ## Native Simulator Testing
16
+
17
+ Expo manages simulator and emulator lifecycle directly. Never use `xcrun simctl` or manual emulator commands.
18
+
19
+ ### Start Dev Server with Simulator
20
+
21
+ These commands copy the target environment file, launch the Expo dev server, and open the app in the simulator automatically:
22
+
23
+ ```bash
24
+ # iOS Simulator
25
+ bun run start:simulator:ios:local # Against local backend
26
+ bun run start:simulator:ios:dev # Against dev backend (default for verification)
27
+ bun run start:simulator:ios:staging # Against staging backend
28
+ bun run start:simulator:ios:production # Against production backend
29
+
30
+ # Android Emulator
31
+ bun run start:simulator:android:local # Against local backend
32
+ bun run start:simulator:android:dev # Against dev backend (default for verification)
33
+ bun run start:simulator:android:staging # Against staging backend
34
+ bun run start:simulator:android:production # Against production backend
35
+ ```
36
+
37
+ ### Build Native Binary and Run on Simulator
38
+
39
+ These commands compile a full native binary and install it on the simulator. Slower than dev server but closer to production:
40
+
41
+ ```bash
42
+ # iOS Simulator
43
+ bun run build-and-run:simulator:ios:local # Against local backend
44
+ bun run build-and-run:simulator:ios:dev # Against dev backend
45
+ bun run build-and-run:simulator:ios:staging # Against staging backend
46
+ bun run build-and-run:simulator:ios:production # Against production backend
47
+
48
+ # Android Emulator
49
+ bun run build-and-run:simulator:android:local # Against local backend
50
+ bun run build-and-run:simulator:android:dev # Against dev backend
51
+ bun run build-and-run:simulator:android:staging # Against staging backend
52
+ bun run build-and-run:simulator:android:production # Against production backend
53
+ ```
54
+
55
+ Use `build-and-run` when testing native modules, push notifications, deep linking, or any feature that requires a full native build.
56
+
57
+ ### Dev Server Only (Manual Simulator Selection)
58
+
59
+ ```bash
60
+ bun run start:local # Start dev server, then press 'i' for iOS or 'a' for Android
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Native E2E Testing with Maestro
66
+
67
+ Maestro provides automated native UI testing on simulators and emulators.
68
+
69
+ ### Run All Flows
70
+
71
+ ```bash
72
+ bun run maestro:test
73
+ ```
74
+
75
+ ### Run Smoke Tests Only
76
+
77
+ ```bash
78
+ bun run maestro:test:smoke
79
+ ```
80
+
81
+ ### Interactive Flow Development
82
+
83
+ ```bash
84
+ bun run maestro:studio
85
+ ```
86
+
87
+ Maestro flows live in `.maestro/flows/`. Tag flows with `smoke` for the smoke test subset.
88
+
89
+ ---
90
+
91
+ ## Web Testing with Playwright
92
+
93
+ ### Run Playwright Tests
94
+
95
+ ```bash
96
+ bun run playwright:test # Build and run all tests
97
+ bun run playwright:test:ui # Build and run with interactive UI
98
+ ```
99
+
100
+ ### Ad-Hoc Browser Verification
101
+
102
+ Use the Playwright MCP tools (`browser_snapshot`, `browser_click`, `browser_take_screenshot`, `browser_navigate`, `browser_console_messages`, `browser_network_requests`) for interactive browser verification without writing test files.
103
+
104
+ ---
105
+
106
+ ## Cross-Repo Log Correlation
107
+
108
+ When debugging frontend issues, errors often originate on the server side. Agents must check both client and server logs to diagnose problems.
109
+
110
+ ### Client-Side Logs
111
+
112
+ Use the Playwright MCP tools to capture browser logs during verification:
113
+
114
+ - `browser_console_messages` — Console output (errors, warnings, info, debug)
115
+ - `browser_network_requests` — Failed API calls, status codes, response payloads
116
+
117
+ For native simulators, check the Expo dev server terminal output for Metro bundler errors and React Native logs.
118
+
119
+ ### Server-Side Logs
120
+
121
+ When the frontend is configured as an additional working directory alongside a companion backend repo (or vice versa), agents have access to both codebases. Use this to:
122
+
123
+ 1. **Read the backend's CLAUDE.md and verification rules** to understand how to check server logs
124
+ 2. **Check backend logs locally** if the backend is running via `bun run start:local` in the companion repo
125
+ 3. **Check remote logs** using whatever observability tools the backend documents (CloudWatch, Sentry, etc.)
126
+
127
+ ### Debugging Workflow
128
+
129
+ When a frontend action produces an error:
130
+
131
+ 1. **Capture the client error** — Use `browser_console_messages` and `browser_network_requests` to identify the failing request (URL, status code, error body)
132
+ 2. **Correlate with server logs** — Use the companion backend repo's documented log-checking tools to find the corresponding server-side error
133
+ 3. **Identify the root cause** — Determine whether the issue is a frontend bug (bad request, missing field, wrong query) or a backend bug (server error, schema mismatch, auth failure)
134
+ 4. **Document both sides** — Include client and server log excerpts in proof artifacts
135
+
136
+ This cross-repo correlation is especially valuable for:
137
+
138
+ - GraphQL query errors (client sends bad query vs. server resolver failure)
139
+ - Authentication failures (expired token vs. misconfigured auth)
140
+ - Data inconsistencies (frontend cache staleness vs. backend data issue)
141
+ - Network errors (frontend timeout vs. backend performance)
142
+
143
+ ---
144
+
145
+ ## Deployment
146
+
147
+ ### Authentication
148
+
149
+ Before deploying, ensure you are logged into EAS:
150
+
151
+ ```bash
152
+ bun run eas:whoami # Check current login status
153
+ bun run eas:login # Log in to Expo account (interactive)
154
+ ```
155
+
156
+ ### EAS Build (Full Native Deploy)
157
+
158
+ `eas:deploy` triggers a full native build in the EAS cloud. Use this when native code has changed (new native modules, SDK upgrades, native config changes). Builds take several minutes.
159
+
160
+ ```bash
161
+ bun run eas:deploy:dev # Build for dev environment
162
+ bun run eas:deploy:staging # Build for staging environment
163
+ bun run eas:deploy:production # Build for production environment
164
+ ```
165
+
166
+ Build profiles are defined in `eas.json`. Each profile specifies its channel, environment variables, and distribution settings.
167
+
168
+ ### EAS Update (OTA Publish)
169
+
170
+ `eas:publish` pushes an over-the-air JavaScript bundle update. Use this for JS-only changes (bug fixes, UI tweaks, logic changes) that don't require a new native build. Updates are fast (seconds, not minutes).
171
+
172
+ ```bash
173
+ bun run eas:publish:dev # Publish OTA update to dev channel
174
+ bun run eas:publish:staging # Publish OTA update to staging channel
175
+ bun run eas:publish:production # Publish OTA update to production channel
176
+ ```
177
+
178
+ ### When to Use Build vs Update
179
+
180
+ | Scenario | Command |
181
+ |----------|---------|
182
+ | New native module added | `eas:deploy` (full build required) |
183
+ | SDK version upgrade | `eas:deploy` (full build required) |
184
+ | Native config change (`app.json`, `eas.json`) | `eas:deploy` (full build required) |
185
+ | JS bug fix | `eas:publish` (OTA update) |
186
+ | UI change (styles, layout, text) | `eas:publish` (OTA update) |
187
+ | New screen or feature (JS-only) | `eas:publish` (OTA update) |
188
+
189
+ ### Deployment Verification
190
+
191
+ After deploying, verify the deployment landed:
192
+
193
+ 1. **For OTA updates**: Check the EAS dashboard or run `eas update:list` to confirm the update was published to the correct channel
194
+ 2. **For full builds**: Check the EAS dashboard or run `eas build:list` to confirm the build completed successfully
195
+ 3. **End-to-end**: Open the app on a device/simulator pointed at the target environment and verify the changes are present
196
+
197
+ ---
198
+
199
+ ## Verification Quick Reference
200
+
201
+ | Change Type | Verification Method | Command |
202
+ |-------------|-------------------|---------|
203
+ | UI feature (web) | Playwright MCP tools or tests | `bun run playwright:test` |
204
+ | UI feature (native) | Maestro flows | `bun run maestro:test` |
205
+ | Unit/integration logic | Jest | `bun run test -- path/to/file` |
206
+ | Type safety | TypeScript compiler | `bun run typecheck` |
207
+ | Code quality | ESLint | `bun run lint` |
208
+ | Native module integration | Build and run on simulator | `bun run build-and-run:simulator:ios:dev` |
209
+ | Full native E2E | Maestro smoke suite | `bun run maestro:test:smoke` |
210
+ | Client-side errors | Playwright browser logs | `browser_console_messages` MCP tool |
211
+ | Server-side errors | Companion backend repo logs | Check backend CLAUDE.md for log commands |
212
+ | Deploy (native change) | EAS Build | `bun run eas:deploy:dev` |
213
+ | Deploy (JS-only change) | EAS Update (OTA) | `bun run eas:publish:dev` |
214
+ | Check EAS auth | EAS CLI | `bun run eas:whoami` |
215
+
216
+ ---
217
+
218
+ ## Verification Patterns for Native Changes
219
+
220
+ ### UI Feature on Native
221
+
222
+ End user: human on iOS or Android device.
223
+
224
+ Required proof:
225
+
226
+ - Maestro flow recording or screenshots from simulator
227
+ - Console output showing flow passed
228
+
229
+ ```bash
230
+ # Start the app on iOS simulator against dev backend
231
+ bun run start:simulator:ios:dev
232
+
233
+ # Run Maestro verification
234
+ bun run maestro:test
235
+ ```
236
+
237
+ ### Native Module or Platform-Specific Code
238
+
239
+ End user: application on device.
240
+
241
+ Required proof:
242
+
243
+ - Successful native build (no build errors)
244
+ - App launches and target feature is functional
245
+
246
+ ```bash
247
+ # Build and install native binary against dev backend
248
+ bun run build-and-run:simulator:ios:dev
249
+
250
+ # Verify with Maestro
251
+ bun run maestro:test:smoke
252
+ ```
253
+
254
+ ### Cross-Platform Verification
255
+
256
+ For changes that affect both web and native, agents must verify on both surfaces:
257
+
258
+ 1. **Web**: Playwright MCP tools or `bun run playwright:test`
259
+ 2. **Native**: `bun run start:simulator:ios:dev` + `bun run maestro:test`
260
+
261
+ If only one surface is available, label the result as **PARTIALLY VERIFIED** with explicit gap documentation.
@@ -12,6 +12,22 @@
12
12
  "start:dev": "EXPO_ATLAS=true cp .env.development .env.local && EXPO_ATLAS=true expo start",
13
13
  "start:staging": "cp .env.staging .env.local && EXPO_ATLAS=true expo start",
14
14
  "start:production": "cp .env.production .env.local && EXPO_ATLAS=true expo start",
15
+ "start:simulator:ios:local": "cp .env.localhost .env.local && EXPO_ATLAS=true expo start --ios",
16
+ "start:simulator:ios:dev": "cp .env.development .env.local && EXPO_ATLAS=true expo start --ios",
17
+ "start:simulator:ios:staging": "cp .env.staging .env.local && EXPO_ATLAS=true expo start --ios",
18
+ "start:simulator:ios:production": "cp .env.production .env.local && EXPO_ATLAS=true expo start --ios",
19
+ "start:simulator:android:local": "cp .env.localhost .env.local && EXPO_ATLAS=true expo start --android",
20
+ "start:simulator:android:dev": "cp .env.development .env.local && EXPO_ATLAS=true expo start --android",
21
+ "start:simulator:android:staging": "cp .env.staging .env.local && EXPO_ATLAS=true expo start --android",
22
+ "start:simulator:android:production": "cp .env.production .env.local && EXPO_ATLAS=true expo start --android",
23
+ "build-and-run:simulator:ios:local": "cp .env.localhost .env.local && expo run:ios",
24
+ "build-and-run:simulator:ios:dev": "cp .env.development .env.local && expo run:ios",
25
+ "build-and-run:simulator:ios:staging": "cp .env.staging .env.local && expo run:ios",
26
+ "build-and-run:simulator:ios:production": "cp .env.production .env.local && expo run:ios",
27
+ "build-and-run:simulator:android:local": "cp .env.localhost .env.local && expo run:android",
28
+ "build-and-run:simulator:android:dev": "cp .env.development .env.local && expo run:android",
29
+ "build-and-run:simulator:android:staging": "cp .env.staging .env.local && expo run:android",
30
+ "build-and-run:simulator:android:production": "cp .env.production .env.local && expo run:android",
15
31
  "build-and-run:local:android": "expo run:android",
16
32
  "build-and-run:local:ios": "expo run:ios",
17
33
  "fetch:graphql:schema:dev": "./scripts/fetch-graphql-schema.sh development",
@@ -19,6 +35,14 @@
19
35
  "fetch:graphql:schema:production": "./scripts/fetch-graphql-schema.sh production",
20
36
  "export:web": "expo export --platform web --source-maps",
21
37
  "pre-build:eas": "cat .gitignore > .easignore && cat .easignore.extra >> .easignore",
38
+ "eas:login": "eas login",
39
+ "eas:whoami": "eas whoami",
40
+ "eas:deploy:dev": "eas build --profile dev --non-interactive",
41
+ "eas:deploy:staging": "eas build --profile staging --non-interactive",
42
+ "eas:deploy:production": "eas build --profile production --non-interactive",
43
+ "eas:publish:dev": "eas update --channel dev --non-interactive",
44
+ "eas:publish:staging": "eas update --channel staging --non-interactive",
45
+ "eas:publish:production": "eas update --channel production --non-interactive",
22
46
  "security:zap": "bash scripts/zap-baseline.sh"
23
47
  },
24
48
  "dependencies": {
@@ -81,7 +105,7 @@
81
105
  "react-native-svg": "^15.15.1",
82
106
  "react-native-web": "^0.21.2",
83
107
  "tailwindcss": "^3.4.7",
84
- "tar": "^7.5.7",
108
+ "tar": "^7.5.8",
85
109
  "text-encoding-polyfill": "^0.6.7",
86
110
  "usehooks-ts": "^3.1.1",
87
111
  "zod": "^4.3.5"
@@ -124,13 +148,15 @@
124
148
  "resolutions": {
125
149
  "@isaacs/brace-expansion": "^5.0.1",
126
150
  "eslint-plugin-react-hooks": "^7.0.0",
127
- "tar": "^7.5.7"
151
+ "fast-xml-parser": "^5.3.6",
152
+ "tar": "^7.5.8"
128
153
  },
129
154
  "overrides": {
130
155
  "@isaacs/brace-expansion": "^5.0.1",
131
156
  "eslint-plugin-react-hooks": "^7.0.0",
157
+ "fast-xml-parser": "^5.3.6",
132
158
  "zod-validation-error": "^4.0.0",
133
- "tar": "^7.5.7"
159
+ "tar": "^7.5.8"
134
160
  }
135
161
  }
136
162
  }
package/package.json CHANGED
@@ -91,7 +91,7 @@
91
91
  "axios": ">=1.13.5"
92
92
  },
93
93
  "name": "@codyswann/lisa",
94
- "version": "1.42.1",
94
+ "version": "1.43.1",
95
95
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
96
96
  "main": "dist/index.js",
97
97
  "bin": {