Skip to content

Release 1.3.0#1112

Merged
PeterJhongLinksys merged 20 commits into
mainfrom
release-1.3.0
Jul 9, 2026
Merged

Release 1.3.0#1112
PeterJhongLinksys merged 20 commits into
mainfrom
release-1.3.0

Conversation

@AustinChangLinksys

Copy link
Copy Markdown
Collaborator

Release 1.3.0

Features

Bug Fixes

Closes #1111

AustinChangLinksys and others added 20 commits June 18, 2026 13:59
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-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@PeterJhongLinksys
PeterJhongLinksys merged commit 61bef92 into main Jul 9, 2026
@PeterJhongLinksys
PeterJhongLinksys deleted the release-1.3.0 branch July 9, 2026 06:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release 1.3.0

2 participants