Skip to content

feat: deterministic sync progress indicator + related housekeeping#160

Open
NateEaton wants to merge 2 commits into
mainfrom
enhancement/progress-indicator-and-doc-cleanup
Open

feat: deterministic sync progress indicator + related housekeeping#160
NateEaton wants to merge 2 commits into
mainfrom
enhancement/progress-indicator-and-doc-cleanup

Conversation

@NateEaton
Copy link
Copy Markdown
Owner

Bookmark list (initial sync):

  • Add BookmarkSyncProgress sealed interface (Idle / Running) to BookmarkRepository; emit Running(page, totalPages) after each page in performFullSync(), reset to Idle in finally block.
  • Fix BookmarkRepositoryImpl binding in AppModule: add @singleton so the Worker and ViewModel share the same instance and progress state is visible across both.
  • Expose syncFraction: StateFlow<Float?> from BookmarkListViewModel, mapped from syncProgress.
  • Replace pull-to-refresh spinner on initial load with a deterministic LinearProgressIndicator below the TopAppBar; PullToRefreshBox spinner is now only shown for user-initiated refreshes.
  • Auto-scroll list to top when initial sync completes via snapshotFlow on isInitialLoading → scrollToTopTrigger.

Highlights (initial sync / pull-to-refresh):

  • Add indeterminate LinearProgressIndicator below TopAppBar for auto-syncs (guarded by isRefreshing && !isUserRefreshing && !isInitialLocalLoad).
  • Add isUserRefreshing tracking to HighlightsViewModel: set on retry(), reset via init observer when sync state leaves Running. Wire into HighlightsUiState and PullToRefreshBox so the circular spinner only shows for user-initiated pulls.
  • Remove inline CircularProgressIndicator from the empty-state body (replaced by top-bar LinearProgressIndicator).

Logging:

  • Revert HttpLoggingInterceptor from BODY back to BASIC; full response bodies were excessive for large libraries and impacted app load time.

Housekeeping:

  • Update CHANGELOG.md with entries for 0.11.0 through 0.13.0.
  • Update docs/WORKFLOW.md: add CHANGELOG.md update step to release prep.
  • Remove _notes/reader-top-bar-scroll-behavior-spec.md from git tracking (_notes/ is local-only per .gitignore).
  • Add docs/specs/deterministic-sync-progress-indicator-spec.md.

NateEaton and others added 2 commits May 20, 2026 11:09
Bookmark list (initial sync):
- Add BookmarkSyncProgress sealed interface (Idle / Running) to
  BookmarkRepository; emit Running(page, totalPages) after each page in
  performFullSync(), reset to Idle in finally block.
- Fix BookmarkRepositoryImpl binding in AppModule: add @singleton so the
  Worker and ViewModel share the same instance and progress state is
  visible across both.
- Expose syncFraction: StateFlow<Float?> from BookmarkListViewModel,
  mapped from syncProgress.
- Replace pull-to-refresh spinner on initial load with a deterministic
  LinearProgressIndicator below the TopAppBar; PullToRefreshBox spinner
  is now only shown for user-initiated refreshes.
- Auto-scroll list to top when initial sync completes via snapshotFlow
  on isInitialLoading → scrollToTopTrigger.

Highlights (initial sync / pull-to-refresh):
- Add indeterminate LinearProgressIndicator below TopAppBar for
  auto-syncs (guarded by isRefreshing && !isUserRefreshing &&
  !isInitialLocalLoad).
- Add isUserRefreshing tracking to HighlightsViewModel: set on retry(),
  reset via init observer when sync state leaves Running. Wire into
  HighlightsUiState and PullToRefreshBox so the circular spinner only
  shows for user-initiated pulls.
- Remove inline CircularProgressIndicator from the empty-state body
  (replaced by top-bar LinearProgressIndicator).

Logging:
- Revert HttpLoggingInterceptor from BODY back to BASIC; full response
  bodies were excessive for large libraries and impacted app load time.

Housekeeping:
- Update CHANGELOG.md with entries for 0.11.0 through 0.13.0.
- Update docs/WORKFLOW.md: add CHANGELOG.md update step to release prep.
- Remove _notes/reader-top-bar-scroll-behavior-spec.md from git
  tracking (_notes/ is local-only per .gitignore).
- Add docs/specs/deterministic-sync-progress-indicator-spec.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Intermittent C2 JIT crashes (Node::uncast SIGSEGV) were occurring on
the verify job. Pin the Temurin patch version for deterministic builds
and upload hs_err/replay/core files as artifacts on failure to enable
diagnosis if the crash recurs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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.

1 participant