Conversation
CLAUDE.md, SETUP.md et agents spécialisés pour le projet : code-reviewer, zeus, rodin-tech, flutter-*, silent-failure-hunter, etc.
WalkthroughThis PR adds a Claude Code workflow and extensive agent/tooling configuration for the repository. New files include Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This PR has been deployed to https://linagora.github.io/twake-on-matrix/2977 |
There was a problem hiding this comment.
Actionable comments posted: 13
🧹 Nitpick comments (2)
.claude/agents/code-simplifier.md (1)
55-56: Soften the blanket guidance ontry/catchusage.Line 55 currently discourages
try/catchbroadly; that can push readers away from explicit, structured error handling. Recommend rewording to discourage empty/swallowing catches instead of catch usage itself.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/agents/code-simplifier.md around lines 55 - 56, The guidance currently discourages try/catch broadly; change the wording to discourage empty or swallowing catches rather than avoid try/catch entirely by rephrasing the bullet to recommend using structured error handling and avoiding catch blocks that swallow errors or suppress useful diagnostic info (mention "try/catch" explicitly so readers know the target) and suggest alternatives like propagating errors, using typed error handling, or centralized error handlers where appropriate..claude/agents/flutter-device-orchestrator.md (1)
417-418: Use machine-readable Flutter output for device ID extraction.Line 417 and Line 418 rely on positional
awkfields from human output; this is fragile. Parseflutter devices --machineJSON instead.Proposed fix
-IOS_ID=$(flutter devices | grep "iPhone 15 Pro" | awk '{print $5}' | tr -d '•') -ANDROID_ID=$(flutter devices | grep "Pixel 8" | awk '{print $5}' | tr -d '•') +IOS_ID=$(flutter devices --machine | jq -r '.[] | select(.name=="iPhone 15 Pro") | .id' | head -1) +ANDROID_ID=$(flutter devices --machine | jq -r '.[] | select(.id | startswith("emulator-")) | .id' | head -1)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/agents/flutter-device-orchestrator.md around lines 417 - 418, The current IOS_ID and ANDROID_ID assignment lines (IOS_ID=$(flutter devices | grep "iPhone 15 Pro" | awk '{print $5}' | tr -d '•') and ANDROID_ID=$(flutter devices | grep "Pixel 8" | awk '{print $5}' | tr -d '•')) are fragile; replace them to parse JSON from flutter devices --machine and extract the id where the "name" equals "iPhone 15 Pro" or "Pixel 8". Run flutter devices --machine and filter the JSON array for objects with "name" matching the target device, then read the "id" field (using jq, Python, or another JSON tool) and assign that to IOS_ID/ANDROID_ID so the script uses machine-readable device IDs reliably.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/agents/flutter-architect.md:
- Line 35: Several fenced code blocks in the document use bare triple-backticks
(```) and trigger markdownlint MD040; locate the four occurrences of those bare
fences (the code blocks that start with just ``` and contain plain text or
markdown) and update each opening fence to declare a language (for example
change ``` to ```text or ```markdown as appropriate for the block content) so
that all fenced blocks specify a language and satisfy MD040.
- Around line 1154-1160: Update the agent references in the "Outside this
agent's scope" list: replace the invalid agent name flutter-testing-expert with
the correct flutter-testing, and remove (or replace with a valid existing agent)
the nonexistent flutter-ui-implementer entry; locate the two entries in the
block containing "State management implementation details → Use
`flutter-state-management`" and edit the lines for "UI implementation → Use
`flutter-ui-implementer`" and the testing line to use the corrected token so the
guidance points to real agents.
In @.claude/agents/flutter-device-orchestrator.md:
- Around line 62-64: The simctl create command is using an invalid runtime
string "iOS18.0"; update the runtime argument in the simulated device creation
lines (the xcrun simctl create "iPhone 16 Pro Test" "iPhone 16 Pro" "iOS18.0"
occurrence and any duplicates around lines 542–551) to a valid runtime such as
the hyphenated "iOS-18-0" or the full identifier
"com.apple.CoreSimulator.SimRuntime.iOS-18-0", or simply remove the runtime
parameter to let simctl auto-select the newest compatible runtime.
- Around line 231-235: The multiline emulator command uses backslashes with
trailing spaces which break shell line continuation; edit the emulator command
starting at "emulator -avd Pixel_9_API_35" and remove the trailing whitespace
after the backslashes on the "-no-snapshot-load \", "-no-audio \", and any other
continued lines so the backslash is the last character on the line and the flags
(-no-snapshot-load, -no-audio, -gpu swiftshader_indirect) are passed as
arguments rather than separate commands.
In @.claude/agents/flutter-performance-analyzer.md:
- Line 52: Locate the fenced code block that contains the line "# Press 'v' to
open DevTools in browser" and add an explicit language label to the opening
fence (for example change ``` to ```text or ```console) so the block is no
longer unlabeled; update the opening fence near that content in the
flutter-performance-analyzer markdown to include the chosen language.
In @.claude/agents/flutter-performance-optimizer.md:
- Line 649: The fenced code block at the end of the example-output in
.claude/agents/flutter-performance-optimizer.md is missing a language tag
(triggers MD040); edit the triple-backtick fence around the example-output and
add an explicit language identifier such as "markdown" or "text" (e.g., replace
``` with ```markdown) so the block is properly annotated.
In @.claude/agents/flutter-state-management.md:
- Line 55: Two fenced code blocks are missing language labels (one contains the
text "❌ Requires careful dispose management" and another similar block later),
triggering markdownlint MD040; edit those fenced blocks in
.claude/agents/flutter-state-management.md to add an appropriate fence language
after the opening backticks (for example ```text or ```markdown) so each fenced
block is labeled, ensuring the markdown linter passes.
- Around line 531-549: The code treats authProvider as returning AuthState but
it actually returns AsyncValue<AuthState>; update the watch/listen handling to
unwrap or pattern-match the AsyncValue: use ref.watch(authProvider) to get
AsyncValue<AuthState> (authState), then check authState.isLoading or use
authState.when(...) to show the loading spinner and show LoginForm for
data/error; in ref.listen<AuthState>(authProvider, ...) accept
AsyncValue<AuthState> (e.g., previous/next are AsyncValue<AuthState>) and
inspect next.value (or next.whenData) to detect Authenticated/AuthError and
perform Navigator.pushReplacementNamed or showSnackBar accordingly so you
compare against Authenticated/AuthError/AuthLoading on the unwrapped AuthState.
In @.claude/agents/flutter-testing.md:
- Around line 934-946: The test body uses await (await useCase.call()) but the
callback is not async; change the test declaration to an async callback (e.g.,
test('description', () async { ... })) so the await is valid, and ensure mocked
async methods like when(repository.getData()).thenAnswer(...) return Futures as
shown; update any related closures to async as needed to avoid invalid await
usage with useCase.call and repository.getData.
- Around line 692-703: Replace the direct flutter test/drive examples with
instructions to run the repo’s integration test wrapper so the required env file
is loaded; specifically, direct users to run the existing script named
scripts/integration_test_patrol.sh (which invokes flutter with
--dart-define-from-file pointing at integration_test/.env.local.do-not-commit)
instead of raw flutter test or flutter drive, and mention the fallback only if
the user manually supplies the same --dart-define-from-file flag and path when
invoking flutter test/drive.
In @.claude/agents/zeus.md:
- Around line 54-80: The fenced code blocks in the Zeus Report template (the
blocks that start with ``` and contain the "# Zeus Report — [date] — [context:
file(s) or PR]" and the later "# Zeus Report — [date] — [context]" sections) are
missing language identifiers and trigger markdownlint MD040; fix by adding the
language identifier (e.g., "markdown") after the opening backticks for those
code fences so they become ```markdown, and apply the same change to the other
fenced block(s) referenced (the ones around the template sections) to satisfy
the linter.
In @.claude/SETUP.md:
- Around line 44-45: Add an explicit security warning near the flags
(--enable-vm-service and --disable-service-auth-codes) explaining that using
--disable-service-auth-codes makes the VM service unauthenticated and must only
be used on trusted local-only interfaces (e.g., localhost) or behind strict
firewalls/SSH port forwarding; instruct readers not to expose this to public or
untrusted networks and mention using the default authenticated mode or secure
tunneling instead as safer alternatives.
In @.mcp.json:
- Line 11: The VM service port in the launch args is mismatched with the
documented run command: update the argument value "--dart-vm-port=8181" in
.mcp.json to use the documented VM service port ("--dart-vm-port=8182") so the
VM service and DDS ports align (DDS stays on 8181) and inspector attachment
works; locate the string "--dart-vm-port=8181" in .mcp.json and replace it with
"--dart-vm-port=8182".
---
Nitpick comments:
In @.claude/agents/code-simplifier.md:
- Around line 55-56: The guidance currently discourages try/catch broadly;
change the wording to discourage empty or swallowing catches rather than avoid
try/catch entirely by rephrasing the bullet to recommend using structured error
handling and avoiding catch blocks that swallow errors or suppress useful
diagnostic info (mention "try/catch" explicitly so readers know the target) and
suggest alternatives like propagating errors, using typed error handling, or
centralized error handlers where appropriate.
In @.claude/agents/flutter-device-orchestrator.md:
- Around line 417-418: The current IOS_ID and ANDROID_ID assignment lines
(IOS_ID=$(flutter devices | grep "iPhone 15 Pro" | awk '{print $5}' | tr -d '•')
and ANDROID_ID=$(flutter devices | grep "Pixel 8" | awk '{print $5}' | tr -d
'•')) are fragile; replace them to parse JSON from flutter devices --machine and
extract the id where the "name" equals "iPhone 15 Pro" or "Pixel 8". Run flutter
devices --machine and filter the JSON array for objects with "name" matching the
target device, then read the "id" field (using jq, Python, or another JSON tool)
and assign that to IOS_ID/ANDROID_ID so the script uses machine-readable device
IDs reliably.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 1bca326b-4ebc-40e9-84da-41560a91a419
📒 Files selected for processing (17)
.claude/CLAUDE.md.claude/SETUP.md.claude/agents/code-reviewer.md.claude/agents/code-simplifier.md.claude/agents/comment-analyzer.md.claude/agents/flutter-architect.md.claude/agents/flutter-device-orchestrator.md.claude/agents/flutter-performance-analyzer.md.claude/agents/flutter-performance-optimizer.md.claude/agents/flutter-state-management.md.claude/agents/flutter-testing.md.claude/agents/pr-test-analyzer.md.claude/agents/rodin-tech.md.claude/agents/silent-failure-hunter.md.claude/agents/type-design-analyzer.md.claude/agents/zeus.md.mcp.json
|
hi @9clg6 , very first comment on the metadata of skill CF: https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices
I found maybe your description is too long and too specific. Metadata will be loaded at startup, so dont need too verbose |
- Add .claude/run-patrol launcher script (auto-detects FVM) - Add patrol entry in .mcp.json - Document setup in SETUP.md with pub.dev link and activation instructions
- code-simplifier: rephrase error handling guidance to target swallowing catches rather than discouraging try/catch broadly - flutter-device-orchestrator: replace fragile awk device ID parsing with flutter devices --machine | jq for reliable machine-readable output
Replace verbose descriptions (with inline <example> blocks) with concise third-person descriptions following the what+when pattern. Reduces startup token cost and improves agent routing accuracy.
|
Fixed the two remaining CodeRabbit nitpicks in commit 2eb9e0c:
|
There was a problem hiding this comment.
No application code in the PR — skipped Code Health checks.
See analysis details in CodeScene
Quality Gate Profile: The Bare Minimum
Install CodeScene MCP: safeguard and uplift AI-generated code. Catch issues early with our IDE extension and CLI tool.
There was a problem hiding this comment.
Actionable comments posted: 5
♻️ Duplicate comments (6)
.claude/agents/flutter-state-management.md (2)
1218-1218:⚠️ Potential issue | 🟡 MinorAdd a language label to the fenced block to satisfy MD040.
Line 1218 starts an unlabeled fenced code block; add a label like
text.Suggested patch
-``` +```text ✓ Recommended: BLoC Pattern ✓ Reasoning: Large app, event-driven architecture needed ✓ Files created: auth_bloc.dart, auth_event.dart, auth_state.dart ✓ Performance: Optimized with selective rebuilds ✓ Testing: blocTest examples provided ✓ Next: Implement remaining features following same pattern</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.claude/agents/flutter-state-management.md at line 1218, The unlabeled
fenced code block starting at the opening triple-backticks needs a language
label to satisfy MD040; update the opening fence to include a label such as text
(e.g., changetotext) so the block containing the checklist lines ("✓
Recommended: BLoC Pattern" etc.) is a labeled fenced code block.</details> --- `534-548`: _⚠️ Potential issue_ | _🟠 Major_ **Fix `AsyncNotifierProvider` usage to handle `AsyncValue<AuthState>` correctly.** Line 534 and Line 546 treat `authProvider` as `AuthState`, but `AsyncNotifierProvider<AuthNotifier, AuthState>` yields `AsyncValue<AuthState>`. These checks won’t match as written. <details> <summary>Suggested patch</summary> ```diff - ref.listen<AuthState>(authProvider, (previous, next) { - if (next is Authenticated) { - Navigator.of(context).pushReplacementNamed('/home'); - } else if (next is AuthError) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(next.message)), - ); - } - }); + ref.listen<AsyncValue<AuthState>>(authProvider, (previous, next) { + next.whenData((state) { + if (state is Authenticated) { + Navigator.of(context).pushReplacementNamed('/home'); + } else if (state is AuthError) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(state.message)), + ); + } + }); + }); @@ - body: authState is AuthLoading - ? const Center(child: CircularProgressIndicator()) - : const LoginForm(), + body: authState.when( + loading: () => const Center(child: CircularProgressIndicator()), + error: (_, __) => const LoginForm(), + data: (_) => const LoginForm(), + ), ``` </details> ```web In Riverpod 3, for AsyncNotifierProvider<AuthNotifier, AuthState>, what are the exact types returned by ref.watch(authProvider) and passed to ref.listen(authProvider, ...)? ``` <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/agents/flutter-state-management.md around lines 534 - 548, The code is treating authProvider as AuthState but authProvider is an AsyncNotifierProvider and yields AsyncValue<AuthState>; update usages to handle AsyncValue<AuthState>: change the listener signature to ref.listen<AsyncValue<AuthState>>(authProvider, (previous, next) => { use next.whenData((state) => { if (state is Authenticated) Navigator.of(context).pushReplacementNamed('/home'); else if (state is AuthError) ScaffoldMessenger.of(context).showSnackBar(...); }); }); and update the UI consumer variable (where you call authState) to an AsyncValue<AuthState> and use authState.isLoading / authState.when or authState.whenData to show the loading spinner or return LoginForm accordingly. ``` </details> </blockquote></details> <details> <summary>.claude/agents/flutter-device-orchestrator.md (2)</summary><blockquote> `63-63`: _⚠️ Potential issue_ | _🟠 Major_ **Use valid `simctl` runtime identifiers (`iOS-18-0`), not `iOS18.0`.** `xcrun simctl create` examples on Line 63 and Lines 542–551 use an invalid runtime token. Use the hyphenated runtime or omit runtime to auto-pick a compatible one. <details> <summary>Proposed fix</summary> ```diff -xcrun simctl create "iPhone 16 Pro Test" "iPhone 16 Pro" "iOS18.0" +xcrun simctl create "iPhone 16 Pro Test" "iPhone 16 Pro" "iOS-18-0" ... -xcrun simctl create "iPhone SE Test" "iPhone SE (3rd generation)" "iOS18.0" +xcrun simctl create "iPhone SE Test" "iPhone SE (3rd generation)" "iOS-18-0" ... -xcrun simctl create "iPhone 16 Pro Max Test" "iPhone 16 Pro Max" "iOS18.0" +xcrun simctl create "iPhone 16 Pro Max Test" "iPhone 16 Pro Max" "iOS-18-0" ... -xcrun simctl create "iPad Pro Test" "iPad Pro 13-inch (M4)" "iOS18.0" +xcrun simctl create "iPad Pro Test" "iPad Pro 13-inch (M4)" "iOS-18-0" ``` </details> Also applies to: 542-551 <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/agents/flutter-device-orchestrator.md at line 63, Replace invalid simctl runtime tokens like "iOS18.0" used in xcrun simctl create invocations with the hyphenated runtime form "iOS-18-0" (or remove the runtime argument to let simctl auto-select a compatible runtime); update every occurrence of the command shown (the lines containing the literal command starting with "xcrun simctl create" and referencing "iPhone 16 Pro Test" / "iPhone 16 Pro" and similar samples) so they use "iOS-18-0" instead of "iOS18.0". ``` </details> --- `231-234`: _⚠️ Potential issue_ | _🟠 Major_ **Fix shell line continuations in the emulator command.** On Lines 232–233, backslashes are followed by spaces/comments, which breaks continuation when pasted into shell. Keep `\` as the last character and move comments to separate lines. <details> <summary>Proposed fix</summary> ```diff emulator -avd Pixel_9_API_35 \ - -no-snapshot-load \ # Don't load from snapshot - -no-audio \ # Disable audio - -gpu swiftshader_indirect # Software rendering + # Don't load from snapshot + -no-snapshot-load \ + # Disable audio + -no-audio \ + # Software rendering + -gpu swiftshader_indirect ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/agents/flutter-device-orchestrator.md around lines 231 - 234, The shell command for starting the emulator (the multi-line "emulator -avd Pixel_9_API_35" invocation) has backslashes followed by spaces and inline comments which break line continuation; fix it by placing each backslash as the final character on its line and moving comments to their own separate lines (or above the command lines) so the continuation slashes are not followed by any whitespace or inline text. Update the lines containing "-no-snapshot-load \", "-no-audio \", and "-gpu swiftshader_indirect" accordingly so each trailing "\" is the last character on the line and comments are on separate lines. ``` </details> </blockquote></details> <details> <summary>.claude/agents/flutter-testing.md (2)</summary><blockquote> `934-946`: _⚠️ Potential issue_ | _🟠 Major_ **Fix invalid Dart sample: `await` requires an async callback.** Line 940 uses `await` inside a non-`async` `test(...)` body, so the example is invalid as written. <details> <summary>Proposed fix</summary> ```diff -test('description', () { +test('description', () async { // Arrange: Set up test data and mocks final repository = MockRepository(); when(repository.getData()).thenAnswer((_) async => testData); ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/agents/flutter-testing.md around lines 934 - 946, The sample test uses await inside a non-async test callback; update the test declaration to an async callback so awaits are valid — change the test(...) closure to async (e.g., test('description', () async { ... })) and ensure the call to useCase.call() and the when(repository.getData()).thenAnswer(...) remain awaited as shown; locate the test block referencing test('description', useCase.call(), MockRepository, repository.getData) and make the closure async to fix the invalid Dart sample. ``` </details> --- `692-703`: _⚠️ Potential issue_ | _🟠 Major_ **Use the repo integration wrapper as the primary command path.** Lines 692–703 currently recommend raw `flutter test`/`flutter drive`, but this repo’s integration flow depends on env loading through the wrapper script. Please make `bash scripts/integration_test_patrol.sh` the default instruction and keep raw commands only as fallback with explicit `--dart-define-from-file`. <details> <summary>Proposed fix</summary> ```diff -# Run on connected device -flutter test integration_test/app_test.dart - -# Run on specific device -flutter test integration_test/app_test.dart -d <device-id> - -# Run with driver (for reports) -flutter drive \ - --driver=test_driver/integration_test.dart \ - --target=integration_test/app_test.dart +# Preferred: project wrapper (loads env defines) +bash scripts/integration_test_patrol.sh + +# Manual fallback (must pass env file explicitly) +flutter test integration_test/app_test.dart \ + --dart-define-from-file=integration_test/.env.local.do-not-commit + +flutter test integration_test/app_test.dart -d <device-id> \ + --dart-define-from-file=integration_test/.env.local.do-not-commit + +flutter drive \ + --driver=test_driver/integration_test.dart \ + --target=integration_test/app_test.dart \ + --dart-define-from-file=integration_test/.env.local.do-not-commit ``` </details> Based on learnings, integration tests in this repo load sensitive config from `integration_test/.env.local.do-not-commit` via `--dart-define-from-file` in `scripts/integration_test_patrol.sh`. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/agents/flutter-testing.md around lines 692 - 703, Update the instructions to make the repository wrapper script the primary command: replace the raw example commands with "bash scripts/integration_test_patrol.sh" as the default and retain the raw `flutter test`/`flutter drive` lines only as fallbacks that explicitly include the env file via `--dart-define-from-file=integration_test/.env.local.do-not-commit`; specifically update the examples around the current flutter test/drive snippets so readers are directed to run scripts/integration_test_patrol.sh first and, if using raw commands, append the `--dart-define-from-file` flag to both `flutter test integration_test/app_test.dart` and the `flutter drive` invocation to load the repo’s env. ``` </details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/agents/flutter-device-orchestrator.md:
- Line 596: Add a language identifier to the fenced code block that currently
begins with triple backticks () so the markdown linter rule MD040 is satisfied; locate the fenced block (the openingwith no language) and change
it to include the appropriate language token (for examplebash,sh,
yaml, orjson depending on the content) ensuring the chosen identifier
matches the block's contents.In @.claude/agents/flutter-state-management.md:
- Around line 1200-1202: Replace the invalid agent names: change
flutter-testing-expertto the existingflutter-testing, and for
flutter-ui-implementereither remove that UI implementation line or replace it
withflutter-architectdepending on whether you want a high-level architect
role (useflutter-architect) or no substitute (remove the line); update the
list entries accordingly so all referenced agents exist.In @.claude/agents/flutter-testing.md:
- Line 55: The fenced code block used for the folder-structure example is
missing a language tag (causing MD040); edit the block surrounding the folder
listing in flutter-testing.md and add an appropriate language identifier (e.g.,
text, bash, or console) immediately after the opening triple backticks so the
block is tagged and the linter warning is resolved.- Line 1016: The fenced code block labeled "example-output" is missing a
language tag and triggers MD040; update that fenced block by adding an
appropriate language/format tag (e.g.,text,output, or ```console)
immediately after the opening backticks so the block is properly tagged and the
MD040 warning is resolved.- Line 357: The sample imports 'package:provider/provider.dart' but the widget
test uses BlocProvider (e.g., BlocProvider in the test widget trees at lines
shown), so replace the incorrect import with the flutter_bloc package import:
remove the 'provider' import and add the
'package:flutter_bloc/flutter_bloc.dart' import so BlocProvider and related
classes resolve; ensure any Provider-specific usages are updated to Bloc
equivalents if present.
Duplicate comments:
In @.claude/agents/flutter-device-orchestrator.md:
- Line 63: Replace invalid simctl runtime tokens like "iOS18.0" used in xcrun
simctl create invocations with the hyphenated runtime form "iOS-18-0" (or remove
the runtime argument to let simctl auto-select a compatible runtime); update
every occurrence of the command shown (the lines containing the literal command
starting with "xcrun simctl create" and referencing "iPhone 16 Pro Test" /
"iPhone 16 Pro" and similar samples) so they use "iOS-18-0" instead of
"iOS18.0".- Around line 231-234: The shell command for starting the emulator (the
multi-line "emulator -avd Pixel_9_API_35" invocation) has backslashes followed
by spaces and inline comments which break line continuation; fix it by placing
each backslash as the final character on its line and moving comments to their
own separate lines (or above the command lines) so the continuation slashes are
not followed by any whitespace or inline text. Update the lines containing
"-no-snapshot-load ", "-no-audio ", and "-gpu swiftshader_indirect"
accordingly so each trailing "" is the last character on the line and comments
are on separate lines.In @.claude/agents/flutter-state-management.md:
- Line 1218: The unlabeled fenced code block starting at the opening
triple-backticks needs a language label to satisfy MD040; update the opening
fence to include a label such as text (e.g., changetotext) so the block
containing the checklist lines ("✓ Recommended: BLoC Pattern" etc.) is a labeled
fenced code block.- Around line 534-548: The code is treating authProvider as AuthState but
authProvider is an AsyncNotifierProvider and yields AsyncValue;
update usages to handle AsyncValue: change the listener signature to
ref.listen<AsyncValue>(authProvider, (previous, next) => { use
next.whenData((state) => { if (state is Authenticated)
Navigator.of(context).pushReplacementNamed('/home'); else if (state is
AuthError) ScaffoldMessenger.of(context).showSnackBar(...); }); }); and update
the UI consumer variable (where you call authState) to an AsyncValue
and use authState.isLoading / authState.when or authState.whenData to show the
loading spinner or return LoginForm accordingly.In @.claude/agents/flutter-testing.md:
- Around line 934-946: The sample test uses await inside a non-async test
callback; update the test declaration to an async callback so awaits are valid —
change the test(...) closure to async (e.g., test('description', () async { ...
})) and ensure the call to useCase.call() and the
when(repository.getData()).thenAnswer(...) remain awaited as shown; locate the
test block referencing test('description', useCase.call(), MockRepository,
repository.getData) and make the closure async to fix the invalid Dart sample.- Around line 692-703: Update the instructions to make the repository wrapper
script the primary command: replace the raw example commands with "bash
scripts/integration_test_patrol.sh" as the default and retain the rawflutter test/flutter drivelines only as fallbacks that explicitly include the env
file via--dart-define-from-file=integration_test/.env.local.do-not-commit;
specifically update the examples around the current flutter test/drive snippets
so readers are directed to run scripts/integration_test_patrol.sh first and, if
using raw commands, append the--dart-define-from-fileflag to bothflutter test integration_test/app_test.dartand theflutter driveinvocation to load
the repo’s env.</details> <details> <summary>🪄 Autofix (Beta)</summary> Fix all unresolved CodeRabbit comments on this PR: - [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended) - [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes </details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Organization UI **Review profile**: CHILL **Plan**: Pro **Run ID**: `27deca7b-a214-4a45-b0ed-a23a0aeb9072` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 9cea2a3b9f4471a395876c02c9d553ea43f7aaab and 27a944eb59b6dd8499f054ef4d243358b6dc6b62. </details> <details> <summary>📒 Files selected for processing (8)</summary> * `.claude/SETUP.md` * `.claude/agents/code-simplifier.md` * `.claude/agents/flutter-architect.md` * `.claude/agents/flutter-device-orchestrator.md` * `.claude/agents/flutter-state-management.md` * `.claude/agents/flutter-testing.md` * `.claude/run-patrol` * `.mcp.json` </details> <details> <summary>✅ Files skipped from review due to trivial changes (2)</summary> * .mcp.json * .claude/SETUP.md </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->

Summary
.claude/CLAUDE.md— project-specific instructions for Claude Code (workflow, task management, core principles).claude/SETUP.md— setup guide for the AI tooling.claude/agents/: code-reviewer, zeus, rodin-tech, flutter-architect, flutter-testing, flutter-state-management, flutter-performance-analyzer/optimizer, flutter-device-orchestrator, silent-failure-hunter, pr-test-analyzer, type-design-analyzer, comment-analyzer, code-simplifierTest plan
Summary by CodeRabbit
Documentation
Chores