Release 1.3.0#1112
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: enable remote assistance support agent icon and improve remote checkDeviceInfo timeout - Uncomment and enable support_agent icon in TopBar for local login - Add retry (1) and increased timeout (10s) for checkDeviceInfo in remote mode - Add explicit text color for session expire counter Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style: format codebase Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: detect active remote session for local login and show alert dialog - Add checkActiveSession in polling for local login users - Add session status listener in DashboardShell with loginType guard - Support passive mode in remote assistance dialog - Fix countdown timer using .abs() instead of * -1 - Prevent dialog from showing in remote login mode Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add comment explaining async stream state update timing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style: format remote assistance code Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: extract magic number 2700 to named const and add unit tests for checkActiveSession - Extract 2700 to kPendingSessionDurationSec constant (45-min PENDING window) - Add unit tests for checkActiveSession (empty/active/error cases) - Add unit tests for countdown .abs() behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: continuously poll session info in active remote assistance dialog Keep polling session info while the active-mode remote assistance dialog is open, auto-request a PIN once a session exists, and avoid opening a second dialog when the session becomes active. - Add nextPollInterval helper (5s before active, 60s once active). - Add pollSessionOnce: clears session info and pin when no session exists, requests a PIN when the session is INITIATE or PENDING and no PIN exists. - Rewrite initiateRemoteAssistance to poll once immediately then keep polling via a cancelable timer until the dialog closes; no longer returns early on empty sessions. Guard against re-entry and keep the loop alive across transient poll errors. - Add an isDialogShown flag to RemoteClientState so the dashboard does not auto-open a passive dialog while a dialog is already shown. - Document the hasInitialized guard and the dashboard's local re-entry guard. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * style: apply dart format to pnp files Apply `dart format` formatting to instant setup (PnP) files and the generated pnp mocks. No logic changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * refactor: address PR review for remote assistance - Move kPendingSessionDurationSec from the view layer to the core model (guardians_remote_assistance.dart) per the 3-layer architecture rule. - Reference kPendingSessionDurationSec in the countdown tests instead of hardcoding 2700, and assert the full pending-window formula. - Replace the bespoke _FakeDeviceManagerNotifier with the existing generated MockDeviceManagerNotifier. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Add a prominent card at the top of the FAQ list linking to the generic Pinnacle router support article (KB #9921). The card includes info and external link icons in primary color. Added translations for all 26 supported languages. Closes #985 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: add simpleModeWifi to wifi test data and fix semanticLabel spacing - Add simpleModeWifi field to all wifi list test state constants - Set isSimpleMode to false for advanced mode tests - Fix semanticLabel spacing issue in WifiNameField and WifiPasswordField when semanticLabel is empty - Add IPTV enabled test state and screenshot test for Advanced settings Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: update test data and mocks for screenshot tests - Add macAddress field to all node detail test states - Update MockServiceHelper with new isSupportHealthCheckManager2 method Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: add screenshot testing guide and update mock file - Add English screenshot testing guide covering commands, mock workflow, common errors, and test data locations - Fix minor formatting in jnap_service_supported_mocks.dart Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: add Auto Master status check in PnP flow to prevent race condition - Add GetAutoMasterStatus JNAP action to detect if Auto Master is running - Implement two defense lines: 1. PnP Admin: check after examineAdminPassword, wait if running 2. PnP Setup: check before save, handle edge case (Idle→Complete) - Add connection error UI with retry when polling fails 3 consecutive times - Add screenshot tests for Auto Master waiting and connection error states Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: add auth flag and timeout handling for Auto Master status check - Add auth: true to getAutoMasterStatus API calls in pnp_provider - Add _checkAutoMasterStatus step in admin view login flow - Add timeout fallback logic when Auto Master polling exceeds max retry - Handle router reconnection check after polling timeout Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: handle unauthorized error in Auto Master status check Add ExceptionAutoMasterUnauthorized to handle 401 errors during Auto Master status check, redirecting users to login page when session expires. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: address code review issues in Auto Master status check - Add missing ExceptionAutoMasterUnauthorized handler in _retryAutoMasterCheck - Add retry limit to prevent infinite recursion in _saveChanges - Use ValueGetter pattern for autoMasterStatusOnEntry in copyWith - Remove unused ExceptionAutoMasterRunning class Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: throw exception on Auto Master polling failure to stop chain Critical fix: When Auto Master polling fails (consecutive failures or timeout with reconnect failure), the previous `return` statement would let the Promise chain continue, causing uncontrolled navigation to pnpConfig and bypassing the Auto Master protection. Changes: - Add ExceptionAutoMasterPollingFailed exception - Replace `return` with `throw ExceptionAutoMasterPollingFailed()` on failure paths - Add catchError handlers in initState chain, Continue button chain, and retry handler The UI correctly stays on the error view with retry button when polling fails. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
The DFS confirmation dialog was showing whenever any WiFi advanced setting was saved, as long as DFS was already enabled. This was confusing when users only changed IPTV or other settings. Now the dialog only appears when DFS is being turned ON (changing from disabled to enabled), not when it's already enabled. Fixes #1004 Related: linksys/LinksysWRT#399 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The AutoParent scenario (false, false, true) had incorrect saveChanges logic - WiFi steps used `? null : null` which always returned null, causing saving to happen at YourNetwork instead of before it. Changes: - AutoParent: save before YourNetwork (like Unconfigured) to ensure smart mode = master before adding nodes - PrePaired fallback: restore original design with no saveChanges, letting onLastStep handle saving - Fix Auto Master tests: use immediate Stream.value to avoid pending timer issues, rename unauthorized test to connection error test Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The initial fix only updated buildSteps but missed the flow control logic that determines what happens after saving completes. Changes: - Update _saveChanges whenComplete to use showYourNetwork instead of isUnconfigured, so AutoParent continues to YourNetwork step - Update reconnect flow to use showYourNetwork for consistent behavior - Update onLastStep to use showYourNetwork to avoid duplicate saving - Improve Auto Master connection error UI with AppCard and maxWidth Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The previous change to onLastStep condition broke the forceLogin scenario where isUnconfigured=false and isPrePaired=false. In this case: - buildSteps returns only PersonalWiFiStep() without saveChanges - onLastStep was set to null due to !isPrePaired condition - Result: WiFi changes were silently dropped Fix: Exclude forceLogin from the !isPrePaired condition so that forceLogin scenarios still use onLastStep for saving. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…FiStep Address code review feedback: - Merge (false, true, _) and (false, false, true) into (false, _, true) since they had identical bodies - prevents future divergence - Add canGoNext(saveChanges == null) to GuestWiFiStep.onInit to prevent potential double-advance when GuestWiFi is the save-carrying step Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 'failed' status to AutoMasterStatus enum for cases where Auto Master exits without configuring the device (e.g., found another Master on network) - When Auto Master status is 'Failed', continue normal PnP flow instead of redirecting to login page, since password is still 'admin' Ref: LinksysWRT#383 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add failed to pollAutoMasterStatus() condition to stop polling - Add failed status handling in pnp_setup_view's polling loop - Use flag to skip timeout handling when Auto Master failed This fixes the issue where users would be stuck on the waiting screen for ~5 minutes when Auto Master reports Failed status. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…d Nodes - Replace AppFilledButton with AppFilledButtonWithLoading for the Next button - Add retry logic (3s interval, 20 retries max = 60s) for ErrorSmartConnectNotReady - Show error snackbar on timeout, allow manual retry - Create AddNodesException sealed class for exception handling - Hide topbar only when entering from PnP flow This fix provides visual feedback while waiting for SmartConnect to be ready. It does not address the root cause (SmartConnect startup time after PnP). Closes #1018 Related: linksys/LinksysWRT#396 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove unused ExceptionSmartConnectNotReady class - Use try-finally to ensure polling resumes on error/timeout - Add async/await and try-catch to _resultView tryAgain button - Add general catch block to prevent spinner freeze on non-timeout errors - Replace showSimpleSnackBar with showFailedSnackBar for error states Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Ensures isLoading is reset to false even if an exception occurs during the auto-onboarding process, preventing the UI from being stuck on the loading spinner. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…heck - Move isLoading: true before retry loop so full-screen spinner shows during the entire retry period (~57s), not just after retry succeeds - Update plugins/widgets submodule with mounted check fix - Remove unused import Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Disable remote assistance for local login Comment out the remote assistance entry points for local login sessions: - Skip the active remote session check during polling in polling_provider, which prevents the passive dialog from being triggered in dashboard shell. - Hide the support agent button that launches the remote assistance dialog from the top bar. * Apply dart format to touched files Reformat files with dart format (line wrapping and indentation only, no logic changes) across pnp setup/admin views, add nodes provider and view, wifi name field, top bar, and the related localization tests and pnp notifier mocks.
Remove unnecessary two decimal places from CPU utilization display. Values now show as "0%" instead of "0.00%" and "18%" instead of "18.00%". Fixes #1095 Related: LinksysWRT#411 Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix: add Auto Master protection to ISP Settings flow and improve error handling - Add Auto Master status check in pnp_isp_save_settings_view before saving ISP settings (Static IP / PPPoE). Shows waiting UI if Auto Master is running, redirects to PnP entry if completed. Handles polling failures and connection errors gracefully. - Handle _ErrorUnauthorized in pnp_setup_view's _saveChanges catchError. When Auto Master completes during save, the 401 error now redirects to login page instead of showing generic error. - Add WiFi settings verification after reconnect in _showNeedReconnect. Checks if SSID was applied correctly after save timeout, supports split mode. Re-saves once if mismatch detected. Fixes QA test failures: Case 3, 4, 6, 7, 9, 10 from issue #1006. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: address code review issues for Auto Master race condition - Change unauthorized error redirect from localLoginPassword to pnp - Reset _waitingForAutoMaster in onRetry to prevent stuck UI state - Fix testConnection to properly await async success callback Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: add mounted checks in whenComplete and WiFi verification - Add mounted check at start of whenComplete to prevent setState on disposed widget - Add mounted check before _saveChanges() in WiFi verification re-save path Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
PeterJhongLinksys
approved these changes
Jul 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 1.3.0
Features
Bug Fixes
Closes #1111