Ignore and untrack BMad directories

This commit is contained in:
Max
2026-01-26 15:49:36 +07:00
parent 7b732372e3
commit 6b113e0392
525 changed files with 2 additions and 112645 deletions

View File

@@ -1,48 +0,0 @@
# Code Review Report: Story 3.4 - PWA Install Prompt & Manifest
**Date:** 2026-01-23
**Reviewer:** Antigravity
**Status:** ✅ APPROVED (with minor notes)
## Executive Summary
The implementation for Story 3.4 (PWA Install Prompt & Manifest) is **complete and verifies against all Acceptance Criteria**. The architecture follows the specified "Logic Sandwich" pattern, keeping UI components clean and delegating logic to services and stores. Unit tests are present and passing.
## Acceptance Criteria Verification
| Criteria | Status | Notes |
| ------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------- |
| **Valid `manifest.json`** | ✅ PASS | Implemented in `src/app/manifest.ts` with standalone mode and correct icons. |
| **Install Prompt Logic** | ✅ PASS | `InstallPromptService` correctly handles `beforeinstallprompt` and `appinstalled` events. |
| **Custom UI** | ✅ PASS | `InstallPromptButton` provides a non-intrusive UI element. |
| **Engagement Logic** | ✅ PASS | `EngagementTracker` and `InstallPromptButton` strictly enforce showing the prompt only after engagement (1+ completed session). |
| **Standalone Mode** | ✅ PASS | Correctly configured in manifest and detected by service. |
## Architectural Analysis
### Strengths
- **Logic Sandwich Pattern**: `InstallPromptButton` only relies on `InstallPromptStore` (state) and `EngagementTracker` (data), calling `InstallPromptService` for actions. This is excellent separation of concerns.
- **State Management**: Zustand store (`InstallPromptStore`) effectively manages the ephemeral `beforeinstallprompt` event.
- **Atomic Selectors**: The UI component uses atomic selectors (`s => s.isInstallable`) to minimize re-renders.
### Issues Found
#### Minor / Maintenance
- **Lint Error**: `src/services/install-prompt-service.ts` contains an explicit `any` cast.
```typescript
(window.navigator as any).standalone === true; // iOS Safari
```
*Recommendation*: Extend the `Navigator` interface in a `d.ts` file to include the `standalone` property for better type safety, or disable the lint rule for this specific line if type augmentation is overkill.
## Verification
- **Automated Tests**:
- `src/app/manifest.test.ts`: passed
- `src/services/install-prompt-service.test.ts`: passed
- `src/services/engagement-tracker.test.ts`: passed
- **Linting**: 1 error found (noted above).
## Recommendations
1. **Fix Lint Error**: Add a global type declaration for `navigator.standalone` to remove the `any` cast.
2. **Engagement Optimization**: Currently polling `EngagementTracker` every 5 seconds. Ideally, this should react to DB changes, but polling is acceptable for MVP.
## Conclusion
The story is **READY TO MERGE** / **COMPLETE**. The minor lint issue does not block functionality or stability.