- registerType 'prompt' + skipWaiting/clientsClaim false: new SW waits
instead of silently hijacking running sessions
- main.ts registers via virtual:pwa-register; onNeedRefresh shows
dismissible toast (i18n en/ru/cu) with Update button -> updateSW(true)
- No polling — update check only on navigation, zero extra traffic
- Settings About shows __BUILD_DATE__ build stamp for remote debugging
- DataCache.fetchWithFallback: network-first with IDB write-through under
the same url: keys the preload writes; falls back to precached IDB copy
when offline — closes the preload(IDB) vs read(SW cache) gap that made
the Bible reader (and every other view) fail offline despite precaching
- Convert all 33 raw /data fetches across bible/service/menaion/prayer/
calendar/settings views; in-memory caches and notFound maps preserved
- fetchCommandText: switch to lowercase services/commands/ (already in
preload manifest); tolerate both TEXT/text node casings per migrate-data
- Remove stale duplicate static/data/en/services/Command/ (15 files)
- fetchLives: fix misc fallback to real lives/misc/{N}.json bundles
- OfflineManager.preload accepts bibleTranslations: 'all' and resolves
translation ids internally from versions.json (single source), removing
the fragile settings-side fetch that could throw and abort the whole
download on mobile first launch
- Decouple trigger from '#settings/autopreload' route param via one-shot
requestAutoPreload()/consumeAutoPreload() flag
- Auto-expand + tick Bible variant checkboxes for UI consistency
- Offer modal sets the flag and navigates to plain '#settings'
- Button hidden by default; async isPwaInstalled() check (standalone mode,
ponomar-installed flag, getInstalledRelatedApps) unhides only if installable
- Click hint 'already installed' branch uses same multi-signal detection
- manifest id '/' for getInstalledRelatedApps matching on desktop Chrome
- Circuit breaker: abort preload after 5 consecutive network failures
(success or 404 resets streak) instead of grinding doomed retries
- localStorage diag ring buffer (survives cache wipes): preload-start/
done/abort, manifest-unavailable, version events; shown in Settings
- checkDataVersion: no longer wipes IDB on transient read errors
(DataCache.has tri-state probe); logs old value on real migrations
- loadManifest: null result no longer cached forever (per-session fallback lock-in)
- Install button without beforeinstallprompt now shows inline per-platform
instructions (Firefox/iOS/generic) instead of silent no-op
- Preload: 404s no longer counted as failures nor retried
- PreloadProgress.failedFiles (up to 10) surfaced in completion message
- loadMenaionBundle: ru resolves to cu bundle (no RU liturgical texts by design)
- autoPreload: fetch cu bundle once; keep ru+cu lives for current month
- calendar view: fetch shared commemorations only for mapped feast CIds
- Default calendar type julian -> gregorian (new installs only)
- EN nav 'Sbornik' -> 'Hymnal', section title -> 'Liturgical Hymnal'
- Day header: text-sm on date lines, weekday dropped from Julian line,
order: Julian / day-title / Gregorian