Notechondria
Version: 0.1.33 Build Date: 2026-04-18T11:00
What's Changed
§1.7 migration: Editor.LocalStore round
Local-state lifecycle surfaces in editor_app/lib/app_shell.dart
migrated to Editor.LocalStore/<process> sources.
Migrated:
Editor.LocalStore/seed_starter\u2014_ensureStarterWorkspacefirst-run seed log.Editor.LocalStore/clear\u2014_clearLocalDatasuccess log +ActionFeedback.Editor.LocalStore/restore_templates\u2014_restoreTemplateCoursesmissing-session guard, server success (falls back to a default message when the server sends none), and failure.Editor.LocalStore/copy_logs\u2014_copyFrontendLogsSnackBar.Editor.LocalStore/download_config\u2014_downloadConfigFilesuccess SnackBar + structured log, and error catch (SnackBar +_log).Editor.LocalStore/import_zip\u2014 per-entry skip log in the archive-import loop.
§1.7 migration: Editor.UI round
User-visible action messages migrated to Editor.UI/<process> or
(when the action actually kicks off sync work) to the appropriate
Editor.Sync.Notes/<process>.
Migrated:
Editor.UI/open_course\u2014_selectCoursenow emits a single log line distinguishing local from cloud category with a structured source.Editor.UI/open_note\u2014_selectNoteerror path.Editor.UI/note_session.start+Editor.UI/note_session.finish\u2014_startNoteSession/_finishNoteSessionsuccess + failure paths.Editor.Sync.Notes/list\u2014_loadLearnerNotesfailure catch.Editor.Sync.Notes/create\u2014_createNoteoffline-fallback warning + user-visible toast.Editor.Sync.Notes/save\u2014_saveNoteoffline-fallback warning + user-visible toast.Editor.Sync.Notes/delete+Editor.Sync.Notes/delete_local\u2014_deleteNoteToRecycleBincloud + local branches, including the missing-session guard message now in the canonical shape.
No direct _appendUiLog(String) call sites remain
Every direct call site in editor_app/lib/app_shell.dart has been
upgraded to the structured _log({level, source, message}) form.
The legacy _appendUiLog(String) method is kept because it is the
callback signature for widgets that accept onLogEvent (e.g.
_LearnerPage, _SettingsPage). Those part-files will be migrated
separately; calls that flow through the callback still route into
_log with level: info, source: '' so the debug log card shows
them as Info-level entries with an unspecified source.
Files Changed
New
docs/versions/0.1.33.md(this file).
Modified
VERSION: 0.1.32 \u2192 0.1.33.docs/TODO.md: \u00a71.7 migration checklist marksEditor.LocalStoreandEditor.UIrounds done.frontend/editor_app/lib/app_shell.dart: ~14 message sites rewritten across the starter-workspace seed, clear-local, restore templates, copy logs, download config, import-zip, select course, select note, start/finish note session, create/save offline fallbacks, and delete paths. SnackBar text in the user-facing surfaces (_clearLocalData,_downloadConfigFile, offline fallback create/save) now also carries the module/process prefix so an operator pasting the toast into an issue tracker has the source handy.
Verification
editor_app:flutter analyze\u2014 50 issues (up from 46 in 0.1.32). The delta is entirelyprefer_single_quotesinfo-level false-positives on intentional double-quoted strings that contain'around titles (the lint doesn't understand concatenated literals). No errors.editor_app:flutter test test/smoke_test.dart -r compact\u2014 passes.
Notes / follow-ups
- Editor \u00a71.7 migration is complete across all direct call sites
in
app_shell.dart. Remaining frontend rounds:Planner.Sync.*+Planner.UI\u2014 same structure as the editor rounds just landed (_ensureStarterWorkspace, sync entrypoints, user actions).Portal.Sync.*+Portal.UI\u2014 same.- Editor / Planner / Portal module part-files
(
modules/learner.dart,modules/settings.dart, etc.) still route through the legacyonLogEvent: _appendUiLogcallback. Those emit Info-level entries with an empty source in the debug log card; migrate when those module files are next touched.