After the login page first loaded successfully, any subsequent
navigation error (e.g. during credential entry) would silently reload
_loginUrl, discarding user-entered credentials. This was because the
auto-retry block only checked _autoRetryCount, which was reset to 0 by
onPageFinished after every successful load.
Add _hasLoadedOnce that is set true in onPageFinished and only cleared
in _retry() (explicit user action). Gate the silent auto-retry on
!_hasLoadedOnce so it only fires before the login page has been shown
to the user for the first time.
https://claude.ai/code/session_016dhktF2DaoTQeifUaZrxbP
_autoRetryCount was reset to 0 in onPageStarted, which fires after
every loadRequest call including the one inside _retryLoad. This meant
the retry cap (_maxAutoRetries = 1) was never reached, causing an
infinite retry loop on persistent errors.
Move the _autoRetryCount reset to onPageFinished so it only clears
when the page actually loads successfully (or via the user-initiated
_retry which already resets it explicitly).
https://claude.ai/code/session_016dhktF2DaoTQeifUaZrxbP
Add auto-retry logic in KretenLoginWidget so that the first web
resource error silently retries once before showing the error UI.
This prevents the error message from appearing immediately when the
e-KRÉTA server is briefly unreachable (e.g., transient network
issues), resolving the App Store Guideline 2.1(a) rejection.
https://claude.ai/code/session_016dhktF2DaoTQeifUaZrxbP
- Introduced `dev_live_fake_lessons` setting in the database schema.
- Updated `SettingsProvider` to manage the new `devLiveFakeLessons` property.
- Enhanced `LiveCardProvider` to generate fake lessons based on the new setting.
- Added UI toggle for fake lessons in the settings screen with appropriate localization.