diff --git a/ai_docs/agent/backend/task_list.json b/ai_docs/agent/backend/task_list.json index 4f3f770..353ffce 100644 --- a/ai_docs/agent/backend/task_list.json +++ b/ai_docs/agent/backend/task_list.json @@ -4,239 +4,5 @@ "version": "1.0", "generated_at": "2025-11-21T01:00:13.845013+00:00", "generated_by": "planning_agent", - "tasks": [ - { - "id": "BACKEND-001", - "title": "Implement Subscriptions Plans Endpoint", - "priority": "high", - "status": "in_progress", - "estimated_hours": 2.0, - "description": "Implement GET /api/v2/subscriptions/plans endpoint to return available subscription plans. Use SubscriptionManager.getAllSubscriptionPlans() or getSubscriptionDto() to fetch plans and return them in proper format.", - "acceptance_criteria": [ - "GET /api/v2/subscriptions/plans returns 200 with list of plans", - "Plans are properly formatted as JSON", - "Endpoint handles authentication correctly", - "Returns empty array if no plans available", - "Unit test passes for getPlans endpoint" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/lib/api/v2/subscriptions_api_v2.dart", - "mnemo_cards_backend/test/api/v2/subscriptions_api_v2_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-002", - "title": "Implement Subscription Status Endpoint", - "priority": "high", - "status": "in_progress", - "estimated_hours": 2.0, - "description": "Implement GET /api/v2/subscriptions/status endpoint to return current user's subscription status. Use SubscriptionManager.getSubscriptionDto() to get subscription info and return active status, start/finish dates.", - "acceptance_criteria": [ - "GET /api/v2/subscriptions/status returns 200 with subscription status", - "Returns active: true/false correctly", - "Returns start and finish dates when subscription is active", - "Endpoint requires authentication", - "Returns 401 for unauthenticated requests", - "Unit test passes for getStatus endpoint" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/lib/api/v2/subscriptions_api_v2.dart", - "mnemo_cards_backend/test/api/v2/subscriptions_api_v2_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-003", - "title": "Implement Subscription Purchase Endpoint", - "priority": "high", - "status": "pending", - "estimated_hours": 3.0, - "description": "Implement POST /api/v2/subscriptions/purchase endpoint to handle subscription purchases. Accept planId in request body, validate plan exists, create payment via PaymentManager, and activate subscription for user.", - "acceptance_criteria": [ - "POST /api/v2/subscriptions/purchase accepts planId in request body", - "Validates planId exists and is valid", - "Creates payment record via PaymentManager", - "Activates subscription for user", - "Returns 200 with purchase confirmation", - "Returns 400 for invalid planId", - "Returns 401 for unauthenticated requests", - "Unit test passes for purchase endpoint" - ], - "dependencies": [ - "BACKEND-001" - ], - "files_to_modify": [ - "mnemo_cards_backend/lib/api/v2/subscriptions_api_v2.dart", - "mnemo_cards_backend/test/api/v2/subscriptions_api_v2_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-004", - "title": "Implement Subscription Cancel Endpoint", - "priority": "high", - "status": "pending", - "estimated_hours": 2.0, - "description": "Implement POST /api/v2/subscriptions/cancel endpoint to cancel user's active subscription. Update UserSubscriptionModel to mark subscription as cancelled, set cancellation date, and prevent auto-renewal.", - "acceptance_criteria": [ - "POST /api/v2/subscriptions/cancel cancels active subscription", - "Returns 200 with cancellation confirmation", - "Returns 400 if user has no active subscription", - "Returns 401 for unauthenticated requests", - "Subscription is marked as cancelled in database", - "Unit test passes for cancel endpoint" - ], - "dependencies": [ - "BACKEND-002" - ], - "files_to_modify": [ - "mnemo_cards_backend/lib/api/v2/subscriptions_api_v2.dart", - "mnemo_cards_backend/test/api/v2/subscriptions_api_v2_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-005", - "title": "Add Promocodes List Endpoint", - "priority": "medium", - "status": "pending", - "estimated_hours": 2.0, - "description": "Implement GET /api/v2/promocodes endpoint to list available promocodes for current user. Return active campaigns with their promocodes that user can apply. Filter by active status and date range.", - "acceptance_criteria": [ - "GET /api/v2/promocodes returns 200 with list of available promocodes", - "Only returns active campaigns within date range", - "Filters promocodes user hasn't already activated", - "Returns 401 for unauthenticated requests", - "Proper JSON format with campaign and code information", - "Unit test passes for listPromocodes endpoint" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/lib/api/v2/promocodes_api_v2.dart", - "mnemo_cards_backend/lib/promo_codes/promo_codes_manager.dart", - "mnemo_cards_backend/test/api/v2/promocodes_api_v2_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-006", - "title": "Add Promocode Validation Endpoint", - "priority": "medium", - "status": "pending", - "estimated_hours": 2.0, - "description": "Implement GET /api/v2/promocodes/{code}/validate endpoint to validate a promocode without applying it. Check if code exists, is active, hasn't exceeded activation limits, and user is eligible.", - "acceptance_criteria": [ - "GET /api/v2/promocodes/{code}/validate returns validation result", - "Returns 200 with valid: true/false and message", - "Checks code existence, status, and activation limits", - "Checks user eligibility (tags, previous activations)", - "Returns 401 for unauthenticated requests", - "Returns 404 for non-existent codes", - "Unit test passes for validatePromocode endpoint" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/lib/api/v2/promocodes_api_v2.dart", - "mnemo_cards_backend/lib/promo_codes/promo_codes_manager.dart", - "mnemo_cards_backend/test/api/v2/promocodes_api_v2_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-007", - "title": "Write Unit Tests for Statistics Models", - "priority": "medium", - "status": "pending", - "estimated_hours": 3.0, - "description": "Write comprehensive unit tests for all statistics-related models (PackProgressModel, AchievementModel, StudySessionModel) including toDto/fromDto conversions, serialization, and edge cases.", - "acceptance_criteria": [ - "Unit tests created for PackProgressModel", - "Unit tests created for AchievementModel", - "Unit tests created for StudySessionModel", - "All toDto/fromDto conversions tested", - "Serialization/deserialization tested", - "Edge cases covered (null values, empty lists, etc.)", - "15+ unit tests pass with >80% coverage" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/test/models/pack_progress_model_test.dart", - "mnemo_cards_backend/test/models/achievement_model_test.dart", - "mnemo_cards_backend/test/models/study_session_model_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-008", - "title": "Update OpenAPI Specification for Statistics Endpoints", - "priority": "medium", - "status": "pending", - "estimated_hours": 2.0, - "description": "Update public/open_api.yaml to include all statistics endpoints (detailed, packs, words, timeline, sessions, achievements) with proper request/response schemas, query parameters, and examples.", - "acceptance_criteria": [ - "All 6 statistics endpoints documented in OpenAPI spec", - "Request schemas defined with query parameters", - "Response schemas defined with proper types", - "Examples provided for each endpoint", - "Error responses documented (400, 401, 404)", - "OpenAPI spec validates without errors" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/public/open_api.yaml" - ], - "component": "backend" - }, - { - "id": "BACKEND-009", - "title": "Complete Statistics Integration Tests", - "priority": "medium", - "status": "pending", - "estimated_hours": 4.0, - "description": "Complete integration tests for all statistics endpoints, ensuring end-to-end flow works correctly. Test pagination, filtering, error handling, and edge cases for all statistics endpoints.", - "acceptance_criteria": [ - "Integration tests for getDetailedStatistics endpoint", - "Integration tests for getPacksStatistics with packId filter", - "Integration tests for getWordsStatistics with pagination and filters", - "Integration tests for getTimelineStatistics with period filtering", - "Integration tests for recordStudySession endpoint", - "Integration tests for getAchievements endpoint", - "All integration tests pass", - "Edge cases covered (empty data, invalid filters, etc.)" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_backend/test/api/v2/users_api_v2_statistics_test.dart" - ], - "component": "backend" - }, - { - "id": "BACKEND-010", - "title": "Update Statistics Documentation", - "priority": "low", - "status": "pending", - "estimated_hours": 2.0, - "description": "Create STATISTICS_API.md documentation and update PROGRESS.md and TODO.md with statistics system completion status. Document API endpoints, request/response formats, and usage examples.", - "acceptance_criteria": [ - "STATISTICS_API.md created with comprehensive API documentation", - "All statistics endpoints documented with examples", - "Request/response formats documented", - "PROGRESS.md updated with statistics completion status", - "TODO.md updated with completed tasks", - "Documentation is clear and complete" - ], - "dependencies": [ - "BACKEND-008" - ], - "files_to_modify": [ - "mnemo_cards_backend/STATISTICS_API.md", - "mnemo_cards_backend/PROGRESS.md", - "mnemo_cards_backend/TODO.md" - ], - "component": "backend" - } - ] + "tasks": [ ] } \ No newline at end of file diff --git a/ai_docs/agent/prompts/planning_prompt.md b/ai_docs/agent/prompts/planning_prompt.md index 2b7ac5e..e457db1 100644 --- a/ai_docs/agent/prompts/planning_prompt.md +++ b/ai_docs/agent/prompts/planning_prompt.md @@ -76,6 +76,8 @@ Each task should have: ### Priority Guidelines +**CRITICAL: Tasks from `tasks.md` have the highest priority. Always prioritize tasks defined in `tasks.md` over other tasks.** + **HIGH Priority:** - Critical bugs affecting users - Security vulnerabilities @@ -177,6 +179,7 @@ When a task in one component depends on another: ### 3. Prioritization Phase +- **Prioritize tasks from `tasks.md` first** - These human-defined tasks take precedence - Apply priority guidelines - Consider business value - Factor in dependencies diff --git a/ai_docs/agent/tasks.md b/ai_docs/agent/tasks.md index 0e41252..997b001 100644 --- a/ai_docs/agent/tasks.md +++ b/ai_docs/agent/tasks.md @@ -1,4 +1,6 @@ +общие задачи: +1. Исправь страницу авторизации. Сделай ее более подходящей дизайну приложения. +2. Поработай с целями / задачами (tasks_module.dart). Придумай и реализуй механизм их создания и выполнения. Для этой задачи потребуется подробный план решения и разбиение на много небольших. + +web: 1. Надо постепенно исправлять тесты в mnemo_cards_web_v2.Не все сразу, осторожно. -2. Исправь страницу авторизации. Сделай ее более подходящей дизайну приложения. -3. Исправь tabbar. Сейчас там иконки и текст сливаются с фоном -4. Проверь везде ли поддержана темная тема \ No newline at end of file diff --git a/ai_docs/agent/web_v2/task_list.json b/ai_docs/agent/web_v2/task_list.json index c69dba3..751acba 100644 --- a/ai_docs/agent/web_v2/task_list.json +++ b/ai_docs/agent/web_v2/task_list.json @@ -4,374 +4,5 @@ "version": "1.1", "generated_at": "2025-11-21T11:51:47.671045+00:00", "generated_by": "planning_agent", - "tasks": [ - { - "id": "WEB-001", - "title": "Integrate AdsRewardButton into PackDetailsPage", - "priority": "high", - "status": "in_progress", - "estimated_hours": 2.0, - "description": "Add AdsRewardButton to PackDetailsPage to display 'Watch Ad to Unlock' option when pack has ads reward available. The button should appear in pack controls section alongside Buy button. Service and state manager are already implemented.", - "acceptance_criteria": [ - "AdsRewardButton appears on PackDetailsPage when pack has ad reward offer", - "Button is positioned correctly in pack controls section", - "Button shows all states correctly (loading, ready, claiming, success, error)", - "Successful ad reward refreshes pack access via packsStateManager", - "Pack becomes accessible after successful reward claim", - "Error states show helpful messages with retry option", - "5+ widget tests pass covering button visibility, states, and reward flow" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/pack_details/pack_details_page.dart", - "mnemo_cards_web_v2/test/presentation/pages/pack_details/pack_details_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-002", - "title": "Integrate AdsRewardButton into PurchasePage", - "priority": "high", - "status": "pending", - "estimated_hours": 1.5, - "description": "Add AdsRewardButton to PurchasePage as an alternative to paid purchase. Button should appear above payment options section when pack has ad reward available.", - "acceptance_criteria": [ - "AdsRewardButton appears on PurchasePage when pack has ad reward", - "Button is positioned above payment options with clear separation", - "Button shows all states correctly (loading, ready, claiming, success, error)", - "Successful reward navigates back or shows success confirmation", - "Error handling works with retry functionality", - "4+ widget tests pass covering button integration and flow" - ], - "dependencies": [ - "WEB-001" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/purchase/purchase_page.dart", - "mnemo_cards_web_v2/test/presentation/pages/purchase/purchase_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-003", - "title": "Create SubscriptionPlansWidget", - "priority": "high", - "status": "in_progress", - "estimated_hours": 2.5, - "description": "Create reusable SubscriptionPlansWidget that displays available subscription plans in card layout. Widget should fetch plans from SubscriptionService, show features comparison, highlight current plan, and emit selection events. Backend endpoint GET /api/v2/subscriptions/plans is ready.", - "acceptance_criteria": [ - "Widget displays all available subscription plans in responsive grid/list", - "Each plan card shows: title, price, duration, features list, CTA button", - "Current active plan is highlighted with badge/border", - "Plan comparison shows feature differences clearly", - "Widget handles loading state with skeleton loaders", - "Error state shows with retry option", - "Plan selection emits callback event", - "6+ widget tests pass covering display, selection, and states" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/widgets/subscription_plans_widget.dart", - "mnemo_cards_web_v2/test/presentation/widgets/subscription_plans_widget_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-004", - "title": "Create Subscription State Manager", - "priority": "high", - "status": "pending", - "estimated_hours": 2.0, - "description": "Create SubscriptionStateManager using yx_state to manage subscription plans loading, current status, and purchase flow state. Manager should use SubscriptionService for API calls and provide computed properties for UI.", - "acceptance_criteria": [ - "State manager created with yx_state patterns", - "Manages subscription plans list with loading/loaded/error states", - "Tracks current user subscription status", - "Provides method to refresh subscription data", - "Implements proper error handling", - "Exports computed properties for UI convenience", - "8+ unit tests pass covering all state transitions and API calls" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/domain/state/subscription_state_manager.dart", - "mnemo_cards_web_v2/test/domain/state/subscription_state_manager_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-005", - "title": "Add SubscriptionModule to UserScope", - "priority": "high", - "status": "pending", - "estimated_hours": 1.0, - "description": "Create SubscriptionModule and integrate it into UserScope DI container. Module should provide SubscriptionStateManager and connect it to SubscriptionService. Follow existing module patterns in UserScope.", - "acceptance_criteria": [ - "SubscriptionModule created following UserScope patterns", - "Module provides SubscriptionStateManager instance", - "Module properly wired with SubscriptionService dependency", - "Module registered in UserScope container", - "Module disposal implemented correctly", - "3+ integration tests verify module initialization and disposal" - ], - "dependencies": [ - "WEB-004" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/di/user_scope/subscription_module.dart", - "mnemo_cards_web_v2/lib/di/user_scope/user_scope.dart", - "mnemo_cards_web_v2/test/di/user_scope/subscription_module_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-006", - "title": "Create SubscriptionPage UI", - "priority": "high", - "status": "pending", - "estimated_hours": 3.0, - "description": "Create SubscriptionPage that displays subscription plans using SubscriptionPlansWidget and current subscription status. Include purchase flow initiation (note: backend purchase/cancel endpoints are TODO). Page should be responsive and follow Material Design.", - "acceptance_criteria": [ - "SubscriptionPage displays plans using SubscriptionPlansWidget", - "Current subscription status shown clearly (active/inactive, dates)", - "Purchase button initiates flow (shows TODO message if backend not ready)", - "Cancel/manage subscription options visible for active subscriptions", - "Page is responsive for mobile/tablet/desktop layouts", - "Loading states use skeleton loaders", - "Error states show with retry functionality", - "8+ widget tests pass covering page layout and interactions" - ], - "dependencies": [ - "WEB-003", - "WEB-005" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/subscription/subscription_page.dart", - "mnemo_cards_web_v2/lib/presentation/router/app_router.dart", - "mnemo_cards_web_v2/test/presentation/pages/subscription/subscription_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-007", - "title": "Add Subscription Status to ProfilePage", - "priority": "medium", - "status": "pending", - "estimated_hours": 1.5, - "description": "Display current subscription status on ProfilePage with plan name, expiry date, active badge, and navigation link to SubscriptionPage. Use SubscriptionStateManager from UserScope for data.", - "acceptance_criteria": [ - "Subscription status card added to ProfilePage", - "Shows plan name, active status badge, expiry date", - "Inactive state shows 'No active subscription' message", - "Tapping status card navigates to SubscriptionPage", - "Status updates reactively when subscription changes", - "Loading state shows skeleton loader", - "4+ widget tests pass covering status display and navigation" - ], - "dependencies": [ - "WEB-006" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/profile/profile_page.dart", - "mnemo_cards_web_v2/test/presentation/pages/profile/profile_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-008", - "title": "Create PromocodeInput Widget", - "priority": "medium", - "status": "pending", - "estimated_hours": 2.5, - "description": "Create reusable PromocodeInput widget with text field, apply button, validation feedback (success/error), and discount display. Widget should use PromocodeService (already exists) for validation and application. Backend promocode API is fully implemented.", - "acceptance_criteria": [ - "Widget has text field for promocode entry with validation", - "Apply button validates and applies promocode", - "Success state shows discount amount and green checkmark", - "Error state shows error message in red with retry option", - "Loading state during validation/application", - "Widget can be cleared/reset to initial state", - "Widget properly styled with Material Design", - "7+ widget tests pass covering all states and interactions" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/widgets/promocode_input.dart", - "mnemo_cards_web_v2/test/presentation/widgets/promocode_input_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-009", - "title": "Integrate PromocodeInput into PurchasePage", - "priority": "medium", - "status": "pending", - "estimated_hours": 1.0, - "description": "Add PromocodeInput widget to PurchasePage below pack information and above payment options. Integrate promocode discount into price calculation display.", - "acceptance_criteria": [ - "PromocodeInput widget integrated into PurchasePage layout", - "Widget positioned below pack info, above payment section", - "Applied promocode discount updates displayed price", - "Original price shown with strikethrough when discount applied", - "Discount badge/label shows percentage or amount saved", - "3+ widget tests pass covering promocode integration" - ], - "dependencies": [ - "WEB-008" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/purchase/purchase_page.dart", - "mnemo_cards_web_v2/test/presentation/pages/purchase/purchase_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-010", - "title": "Integrate PromocodeInput into SubscriptionPage", - "priority": "medium", - "status": "pending", - "estimated_hours": 1.0, - "description": "Add PromocodeInput widget to SubscriptionPage in subscription purchase flow. Display promocode discount in plan pricing.", - "acceptance_criteria": [ - "PromocodeInput widget integrated into SubscriptionPage", - "Widget appears in purchase flow section", - "Applied promocode updates subscription price display", - "Discount shown on selected plan card", - "3+ widget tests pass covering promocode integration" - ], - "dependencies": [ - "WEB-008", - "WEB-006" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/subscription/subscription_page.dart", - "mnemo_cards_web_v2/test/presentation/pages/subscription/subscription_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-011", - "title": "Fix Empty Test Files", - "priority": "medium", - "status": "pending", - "estimated_hours": 2.0, - "description": "Fix 24 failing tests caused by empty test files. Identify all empty test files, either implement basic smoke tests or remove empty files. Focus on test_page_test.dart and other critical test files first.", - "acceptance_criteria": [ - "All empty test files identified and documented", - "test_page_test.dart has basic smoke tests implemented", - "Empty test files either have tests or are removed", - "All remaining test files compile without errors", - "Test count increases (no test regressions)", - "Document test coverage gaps for future work" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/test/presentation/pages/test/test_page_test.dart", - "mnemo_cards_web_v2/test/**/*_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-012", - "title": "Create Settings Page Foundation", - "priority": "low", - "status": "pending", - "estimated_hours": 2.5, - "description": "Create SettingsPage with theme toggle (light/dark), language selection, and sound effects toggle. Settings should persist using SharedPreferences. This is foundation for more settings in future.", - "acceptance_criteria": [ - "SettingsPage created with Material Design layout", - "Theme toggle (light/dark) with icon switches theme", - "Language selection dropdown with supported languages", - "Sound effects toggle with on/off state", - "All settings persist using SharedPreferences", - "Settings apply immediately on change", - "Page added to app navigation/router", - "6+ widget tests pass covering settings functionality" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/pages/settings/settings_page.dart", - "mnemo_cards_web_v2/lib/presentation/router/app_router.dart", - "mnemo_cards_web_v2/lib/domain/state/settings_state_manager.dart", - "mnemo_cards_web_v2/test/presentation/pages/settings/settings_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-013", - "title": "Increase Test Coverage for Purchase Flow", - "priority": "medium", - "status": "pending", - "estimated_hours": 3.0, - "description": "Add comprehensive unit and widget tests for purchase flow. Focus on PurchasesService, PurchaseStateManager, and PurchasePage edge cases (network errors, payment failures, success scenarios).", - "acceptance_criteria": [ - "PurchasesService has 10+ unit tests with >80% coverage", - "PurchaseStateManager has 8+ unit tests covering state transitions", - "PurchasePage has 8+ widget tests covering UI interactions", - "Payment verification flow has edge case tests", - "Error handling tested for network failures, timeouts", - "Success flow tested end-to-end", - "All tests pass with zero flaky tests" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/test/domain/services/purchases_service_test.dart", - "mnemo_cards_web_v2/test/domain/state/purchase_state_manager_test.dart", - "mnemo_cards_web_v2/test/presentation/pages/purchase/purchase_page_test.dart" - ], - "component": "web_v2" - }, - { - "id": "WEB-014", - "title": "Verify API v2 Migration Completeness", - "priority": "medium", - "status": "pending", - "estimated_hours": 2.0, - "description": "Audit all services to verify complete migration to HttpRepositoryV2. Search for any remaining v1 API usage, deprecated imports, or old endpoint references. Create migration audit report.", - "acceptance_criteria": [ - "All services verified to use HttpRepositoryV2 exclusively", - "No references to old HttpRepository v1 found", - "All API endpoints use /api/v2/ paths", - "Deprecated v1 code removed or clearly marked", - "Migration audit document created with findings", - "Grep search confirms no v1 API usage remains", - "All functionality tested with v2 API" - ], - "dependencies": [], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/domain/services/**/*.dart", - "mnemo_cards_web_v2/lib/domain/config/api_config.dart", - "mnemo_cards_web_v2/API_V2_MIGRATION_AUDIT.md" - ], - "component": "web_v2" - }, - { - "id": "WEB-015", - "title": "Add Analytics Events for Ads Reward Flow", - "priority": "low", - "status": "pending", - "estimated_hours": 1.5, - "description": "Enhance ads reward flow with comprehensive analytics events tracking: ad impressions, completions, failures, reward claims. Events are already partially implemented in AdsRewardButton, verify coverage and add missing events.", - "acceptance_criteria": [ - "Ad impression event fired when button shown", - "Ad start event fired when user clicks button", - "Ad completion event fired on successful ad view", - "Ad failure event fired with error details", - "Reward claim event fired with success/failure", - "Pack unlock event fired after successful reward", - "All events include relevant parameters (packId, productType)", - "5+ tests verify analytics event emissions" - ], - "dependencies": [ - "WEB-001", - "WEB-002" - ], - "files_to_modify": [ - "mnemo_cards_web_v2/lib/presentation/widgets/ads_reward_button.dart", - "mnemo_cards_web_v2/lib/domain/state/ads_reward_state_manager.dart", - "mnemo_cards_web_v2/test/presentation/widgets/ads_reward_button_test.dart" - ], - "component": "web_v2" - } - ] + "tasks": [] } \ No newline at end of file