Notechondria

Version: 0.1.32 Build Date: 2026-04-18T10:00

What's Changed

§1.7 migration: Editor.Sync.Notes round

All draft + cloud-note sync surfaces in editor_app/lib/app_shell.dart migrated to Editor.Sync.Notes/<process> sources.

Migrated:

  • Editor.Sync.Notes/pull \u2014 _pullCloudNotesToLocal missing-session guard, conflict-dialog cancellation, success log + ActionFeedback (imported/updated/kept counts), and error catch.
  • Editor.Sync.Notes/push \u2014 _syncLocalDraft missing-session guard, cloud-copy update success log, and fresh-create success log (the two code paths through _syncLocalDraft).
  • Editor.Sync.Notes/push_all \u2014 _syncAllLocalData missing-session guard, success, and catch; the SnackBar surfaced to the user also now carries the canonical shape so copy-paste into ops logs yields a greppable module/process.
  • Editor.Sync.Notes/restore \u2014 _restoreDeletedNote missing-session guard + success log.
  • Editor.Sync.Notes/empty_trash \u2014 _emptyDeletedNotes missing-session guard + success log.

§1.7 migration: Editor.Sync.Settings round

Settings save and avatar upload in editor_app/lib/app_shell.dart migrated to Editor.Sync.Settings/<process> sources.

Migrated:

  • Editor.Sync.Settings/save \u2014 _updateSettings:
    • No-change short-circuit (\u201CNo settings changes\u201D).
    • Offline save fallback (\u201CSettings saved locally \u2014 no cloud session\u201D).
    • Cloud success (\u201CSettings saved \u2014 $summary pushed to cloud\u201D), both SnackBar and structured debug-log entry.
    • Cloud-update failure fallback (warning-level log + ActionFeedback that names the failing $summary and the upstream cause).
  • Editor.Sync.Settings/avatar.upload \u2014 _uploadAvatar:
    • Missing-session guard.
    • File-picker-cancelled, unmount, preview-rejected cancellation paths now carry the module/process prefix so the debug log can grep the cancellation reason.
    • Success log + ActionFeedback.
    • Error catch with structured error-level log and corresponding ActionFeedback.

Other

  • Legacy _appendUiLog usages in the migrated sites were replaced with the structured _log({level, source, message}) form so each entry lands with its canonical source in the debug log card's filter chip row.

Files Changed

New

  • docs/versions/0.1.32.md (this file).

Modified

  • VERSION: 0.1.31 \u2192 0.1.32.
  • docs/TODO.md: \u00a71.7 migration checklist marks Editor.Sync.Notes + Editor.Sync.Settings done.
  • frontend/editor_app/lib/app_shell.dart: ~12 message sites in _pullCloudNotesToLocal, _syncLocalDraft, _syncAllLocalData, _restoreDeletedNote, _emptyDeletedNotes, _updateSettings, and _uploadAvatar rewritten to the \u00a71.7 shape. One ActionFeedback(message: message, ...) reference to a renamed local message variable was also corrected (caught by the analyzer); no behavior change.

Verification

  • editor_app: flutter analyze \u2014 46 issues (unchanged vs 0.1.31 modulo the known info-level prefer_single_quotes false-positives on intentional double-quoted strings that contain ' around titles). No errors.
  • editor_app: flutter test test/smoke_test.dart -r compact \u2014 passes.

Notes / follow-ups

  • Editor.LocalStore round still open: starter-workspace seed, _clearLocalData, _restoreTemplateCourses, draft persistence logging.
  • Editor.UI round still open: ~22 remaining legacy _appendUiLog calls covering cosmetic info logs ("Opened category X", etc.).
  • Planner.Sync.*, Planner.UI, Portal.Sync.*, Portal.UI rounds remain.