Files

63 lines
2.5 KiB
Markdown

# Quality Guidelines
> Frontend quality baseline for `apps/**` changes.
---
## Practical Conventions
1. Run Flutter analyzer/tests for touched scope before finalizing changes.
2. Keep error logging explicit at catch sites using project logger (`getLogger(...)`).
3. Prioritize regression tests for high-risk modules: auth/session, home viewport, cache/repository, agent SSE flows.
4. Keep docs/protocol/frontend mappings aligned for API-contract changes.
---
## Real File Path Examples
- Lint/static analysis configuration:
- `apps/analysis_options.yaml`
- `apps/pubspec.yaml` (dev dependencies: `flutter_test`, `bloc_test`, `mocktail`)
- Test suites for high-risk modules:
- `apps/test/app/router/app_router_redirect_test.dart`
- `apps/test/core/chat/ag_ui_service_test.dart`
- `apps/test/data/cache/cached_repository_test.dart`
- Logging usage examples:
- `apps/lib/features/auth/presentation/bloc/auth_bloc.dart`
- `apps/lib/features/auth/presentation/cubits/login_cubit.dart`
- `apps/lib/features/settings/presentation/cubits/automation_jobs_cubit.dart`
---
## Review Checklist
1. **Layering and ownership**
- No feature business logic moved into shared `data/**` infra.
2. **Error handling**
- Exceptions are either propagated or converted to typed user-safe errors.
- Catch branches include context logging where actionable.
3. **Contract alignment**
- If API/error/event contracts changed, protocol docs and mapping updates are in the same change.
4. **Regression coverage**
- Add/adjust tests for changed behavior in critical flows.
---
## Anti-patterns (with evidence)
- Error swallowing branches that silently downgrade behavior.
- Existing examples to avoid extending:
- `apps/lib/app/di/injection.dart` refresh callback catch returns `false`.
- `apps/lib/core/chat/ag_ui_service.dart` malformed SSE payload parse catch ignores payload.
- Feature code bypassing shared feedback/loading primitives.
- Project standard primitives exist in `apps/lib/shared/widgets/toast/`, `apps/lib/shared/widgets/banner/`, `apps/lib/shared/widgets/app_loading_indicator.dart`.
- Protocol changes implemented only in one layer.
- Contract source of truth is under `docs/protocols/**` and must stay synchronized.
---
## Uncertainties / Gaps
- The repository does not currently enforce all frontend rules via CI (for example, no strict automated checker for protocol-mapper parity).
- `analysis_options.yaml` is currently close to Flutter defaults; stricter lint rules may still be introduced incrementally.