feat: USP M2 documentation, SSE improvements & FW team request - #686
Conversation
- Add M2 roadmap with full USP migration gap analysis - Add FW team request document (26 issues across 3 tiers) - Update WiFi TR-181 limitations with SSH verification data - Update SSE manager with reconnect max retries and lifecycle-aware resume - Update SSE subscription registry and bridge client - Update router firmware bugs, subscription notification docs - Update USP test console view - Update feature roadmap and SSE implementation docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Review Summary by QodoComprehensive test modernization, view refactoring, and code quality improvements
WalkthroughsDescription• **Test infrastructure modernization**: Refactored multiple test files (apps_and_gaming_view_test.dart, dashboard_home_view_test.dart, node_detail_view_test.dart, wifi_main_view_test.dart) to use centralized TestHelper class, reducing code duplication and improving maintainability • **Golden file testing**: Introduced visual regression testing with goldenFilename parameter across test suite for consistent UI validation • **View refactoring**: Extracted internet settings view into separate child views (Ipv4ConnectionView, Ipv6ConnectionView, ReleaseAndRenewView) with form provider-based validation, removing 1400+ lines of inline code • **Model improvements**: Enhanced null-safety in wifi_item.dart with sensible defaults; migrated port range triggering rule state to use new PortRangeTriggeringRuleUIModel • **Layout simplification**: Removed spinner overlay logic from root_container.dart and restructured from Stack to Column with SafeArea wrapper • **Route additions**: Added new PnP add nodes route configuration with centered column layout • **Code cleanup**: Removed unused imports, consolidated re-exports, and fixed formatting/indentation issues across multiple files • **Test utilities**: Added Mockito specs for form validity notifiers used in internet settings validation Diagramflowchart LR
TestHelper["TestHelper<br/>Centralized Setup"]
OldTests["Old Mock-Based<br/>Tests"]
NewTests["Modernized Tests<br/>with Golden Files"]
InternetView["Internet Settings<br/>View"]
ChildViews["IPv4/IPv6<br/>Child Views"]
RootContainer["Root Container<br/>Layout"]
SimplifiedLayout["Simplified Column<br/>Layout"]
OldTests -- "Refactor" --> NewTests
TestHelper -- "Powers" --> NewTests
InternetView -- "Extract" --> ChildViews
RootContainer -- "Simplify" --> SimplifiedLayout
File Changes1. test/page/advanced_settings/apps_and_gaming/views/localizations/apps_and_gaming_view_test.dart
|
Code Review by Qodo
1. Dart SDK minimum raised
|
| @@ -153,12 +113,11 @@ class SseSubscriptionRegistry { | |||
| } catch (e) { | |||
| logger.w('[SSE Registry] Failed to re-register ' | |||
| '${record.subscriptionId}: $e'); | |||
| // Non-fatal: continue with remaining subscriptions | |||
| } | |||
| } | |||
There was a problem hiding this comment.
6. Resubscribe map mutation crash 🐞 Bug ⛯ Reliability
SseSubscriptionRegistry.resubscribeAll iterates over _subscriptions.values while awaiting network calls, so concurrent register/unregister can mutate the map mid-iteration and throw ConcurrentModificationError. This is made more likely because SseManager triggers resubscribeAll on connect without awaiting it.
Agent Prompt
### Issue description
`resubscribeAll()` iterates a mutable map view while awaited calls run; concurrent mutations can throw and abort resubscription.
### Issue Context
`SseManager` triggers resubscribe asynchronously on connect, which can overlap with normal subscribe/unsubscribe activity.
### Fix Focus Areas
- lib/usp/services/sse_subscription_registry.dart[32-67]
- lib/usp/services/sse_subscription_registry.dart[95-117]
- lib/usp/services/sse_manager.dart[52-57]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
Summary
Device.LocalAgent.Subscription.{i}, removing the previous 5-step client-side workaround (USP Add + 4x Set)POST /api/v1/subscriptionnow uses string-basedNotifType+ReferenceList(replaced oldtypeint +pathstring)roadmap_m2.md): Comprehensive gap analysis for remaining 27/72 JNAP features — prioritized across 4 phases (M2-A through M2-D) with dependency mapfw-team-request.md): 26 issues across 3 tiers (Bug Fix / bbfdm Plugin / Vendor Extension) for firmware team actionchannel_constants.dartlogicChanged Files
Code (5 files)
lib/usp/models/sse_subscription_record.dart— Model field updateslib/usp/services/sse_manager.dart— Manager wiring fixlib/usp/services/sse_subscription_registry.dart— Bridge-only subscription flowlib/usp/services/usp_bridge_client_web.dart— String-based API contractlib/page/usp_test/test_console/views/usp_test_console_view.dart— Test UI updatesDocumentation (9 files)
doc/usp/integration/roadmap_m2.md— NEW: M2 migration gap analysis (40 items, 10 sections)doc/usp/issues/fw-team-request.md— NEW: FW team request (26 issues, 3 tiers)doc/usp/integration/sse_implementation.md— Updated for bridge-only subscriptiondoc/usp/issues/INDEX.md— Added new doc referencesdoc/usp/issues/wifi-settings-tr181-limitations.md— ISS-1 channel-per-width updateTest plan
_bridge_sub_fixed.img🤖 Generated with Claude Code