"Load public notes" button added to _LearnerPage in all three apps
(editor, planner, portal). When offlineMode is true and the notes list is
empty, an OutlinedButton.icon appears that triggers an explicit fetch via
_loadLearnerNotes() (which bypasses the offline gate by calling
widget.client.listNotes() directly).
Category auto-sync guard in _loadInitialData for all three apps: when
offlineMode is true AND the user is authenticated, the early-return now
still fetches courses via widget.client.getCourses() before returning, so
the sidebar category list stays current even when notes/page fetches are
skipped.
New core/local_archive_io.dart modeled on the portal app's version,
adding planner-specific buckets: plannerEvents, calendarFeeds,
activityWeek. Wired through _SettingsPage as "Download local data" and
"Restore from local archive" buttons.
Three new tests covering planner→editor, editor→planner, and
portal→planner round-trips, verifying shared buckets survive and
app-specific buckets parse cleanly with empty defaults.
M VERSION (0.1.88 → 0.1.89)
M docs/TODO.md (marked items done)
A docs/versions/0.1.89.md (this file)
M frontend/editor_app/lib/core/build_helpers.dart (wire offlineMode)
M frontend/editor_app/lib/core/initial_data.dart (category auto-sync)
M frontend/editor_app/lib/modules/learner.dart (offline-mode button)
M frontend/planner_app/lib/app_shell.dart (wire offlineMode + export/import)
M frontend/planner_app/lib/core/initial_data.dart (category auto-sync)
A frontend/planner_app/lib/core/local_archive_io.dart (new export/import)
M frontend/planner_app/lib/main.dart (+local_archive_io part)
M frontend/planner_app/lib/modules/learner.dart (offline-mode button)
M frontend/planner_app/lib/modules/settings.dart (+export/import callbacks)
M frontend/portal_app/lib/app_shell.dart (wire offlineMode)
M frontend/portal_app/lib/core/initial_data.dart (category auto-sync)
M frontend/portal_app/lib/modules/learner.dart (offline-mode button)
M frontend/notechondria_shared/test/local_archive_test.dart (cross-app tests)