Notechondria

Version: 0.1.34 Build Date: 2026-04-18T12:00

What's Changed

§1.7 migration: Planner rounds complete

Every direct _appendUiLog(String) call site in frontend/planner_app/lib/app_shell.dart now emits the canonical "<consequence>: <module>/<process> \u2014 <cause>" shape via the structured _log({level, source, message}) helper.

Migrated sources (grouped):

  • Planner.LocalStore/{seed_starter, clear, clear_cache, copy_logs, restore_templates} \u2014 first-run seed, clear-local-data, clear-cache, frontend-logs-copy, admin template restore.
  • Planner.Sync.Settings/{save, avatar.upload} \u2014 settings save (no-change / offline-save / cloud success / remote-fail fallback) and avatar upload (missing session, cancellation reasons, success, error).
  • Planner.Sync.Courses/{push, create_local, load, subscribe, unsubscribe} \u2014 local-course push (missing-session + success), local-course creation log, course-load failure, subscribe/unsubscribe missing-session guards.
  • Planner.Sync.Notes/{pull, push, create, save, save_local, delete, delete_local, restore, empty_trash, push_all, list} \u2014 the full draft + cloud-note sync surface, including offline-fallback toasts in _createNote / _saveNote.
  • Planner.Sync.Events/{create, create_local, toggle, toggle_local} \u2014 planner event creation (both cloud and local) and the is-completed toggle (both cloud and local).
  • Planner.Sync.Calendar/{refresh, import, subscribe, toggle, delete} \u2014 the five calendar-feed operations.
  • Planner.Sync.Activity/load_week \u2014 heatmap week load success + failure.
  • Planner.UI/{open_course, open_note, open_note_viewer, note_session.start, note_session.finish} \u2014 user-visible navigation actions and the note-session lifecycle.

No direct _appendUiLog(String) call sites remain

As with the editor in 0.1.33, the wrapper _appendUiLog stays only as the callback signature for widgets consuming onLogEvent (e.g. _LearnerPage, _SettingsPage). Calls routed through it still flow into _log with level: info, source: ''; those will be migrated when the module part-files are next touched.

Files Changed

New

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

Modified

  • VERSION: 0.1.33 \u2192 0.1.34.
  • docs/TODO.md: \u00a71.7 migration checklist marks Planner round done; only Portal round remains.
  • frontend/planner_app/lib/app_shell.dart: ~45 message sites rewritten to \u00a71.7 shape via _log(...). SnackBar text in the user-facing surfaces (_updateSettings, _uploadAvatar, offline-fallback create/save, _syncAllLocalData, _restoreTemplateCourses, _clearLocalCache, _clearLocalData, _copyFrontendLogs) also now carries the module/process prefix so an operator pasting the toast has the source. One renamed variable (message \u2192 cause) consistency fix in the _saveNote catch block was caught by the analyzer during the pass and corrected in the same commit.

Verification

  • planner_app: flutter analyze \u2014 68 issues (up from 53 in 0.1.27). The delta is entirely prefer_single_quotes info-level false-positives on intentional double-quoted strings that contain ' around titles (same category of lint misfire documented in 0.1.31/0.1.32/0.1.33). No errors; no new warnings.
  • planner_app: flutter test test/smoke_test.dart -r compact \u2014 passes.

Notes / follow-ups

  • Portal.* round (frontend/portal_app/lib/app_shell.dart) remains the last frontend \u00a71.7 round. Its structure mirrors the editor/planner paths; the migration should be mechanical with the same module-name conventions (Portal.LocalStore/*, Portal.Sync.*, Portal.UI/*).
  • Module part-files (modules/learner.dart, modules/settings.dart, modules/course.dart, modules/activity.dart) in all three apps still route through onLogEvent: _appendUiLog; those will be migrated as their files are next touched.