Notechondria
Version: 0.1.35 Build Date: 2026-04-18T13:00
What's Changed
§1.7 migration: Portal round complete
Every direct _appendUiLog(String) call site in
frontend/portal_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):
Portal.LocalStore/{seed_starter, clear, clear_cache, copy_logs, restore_templates}\u2014 first-run shell seed, clear-local-data, clear-cache, frontend-logs-copy, admin template restore.Portal.Sync.FrontPage/{bootstrap, pull}\u2014 initial data bootstrap and front-page refresh success/failure.Portal.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).Portal.Sync.Courses/{push, create_local, load, subscribe, unsubscribe}\u2014 local-course push, local-course creation log, course-load failure, subscribe/unsubscribe guards.Portal.Sync.Notes/{pull, push, create, save, save_local, delete, delete_local, restore, restore_version, empty_trash, push_all, list}\u2014 the full draft + cloud-note sync surface. Therestore_versionsource covers the note-history restore path (distinct from the recycle-binrestore).Portal.Sync.Events/{create, toggle}\u2014 planner event creation and is-completed toggle; portal does not have a local-only planner event path like planner.Portal.Sync.Calendar/{refresh, import, subscribe, toggle, delete}\u2014 the five calendar-feed operations.Portal.Sync.Activity/load_week\u2014 heatmap week load success- failure.
Portal.UI/{open_course, open_note, open_note_viewer, note_session.start, note_session.finish}\u2014 user-visible navigation actions and the note-session lifecycle.
Milestone: every app_shell.dart is \u00a71.7-compliant
With this round, all three Flutter apps' app_shell.dart files have
zero direct _appendUiLog(String) call sites. The wrapper method
stays only as the callback signature for widgets that accept
onLogEvent (e.g. _LearnerPage, _SettingsPage). Entries routed
through the callback 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.35.md(this file).
Modified
VERSION: 0.1.34 \u2192 0.1.35.docs/TODO.md: \u00a71.7 migration checklist marks Portal round done; frontendapp_shell.dartmigration is complete.frontend/portal_app/lib/app_shell.dart: ~45 message sites rewritten to \u00a71.7 shape via_log(...). SnackBar text in user-facing surfaces (_updateSettings,_uploadAvatar, offline-fallback create/save,_syncAllLocalData,_restoreTemplateCourses,_clearLocalCache,_clearLocalData,_copyFrontendLogs) now carries the module/process prefix so an operator pasting the toast has the source. Also removed a duplicate_showMessagecall in the_saveNotecatch block that was left over from the initial edit pass.
Verification
portal_app:flutter analyze\u2014 66 issues (up from 53 in 0.1.27). The delta is entirelyprefer_single_quotesinfo-level false-positives on intentional double-quoted strings that contain'around titles (same category of lint misfire documented in 0.1.31\u20130.1.34). No errors.portal_app:flutter test test/smoke_test.dart -r compact\u2014 passes.
Notes / follow-ups
- Frontend \u00a71.7 migration is complete across all direct
_appendUiLog(String)call sites in all three Flutter apps'app_shell.dartfiles. Remaining sub-work:- Module part-files (
modules/learner.dart,modules/settings.dart,modules/course.dart,modules/activity.dart) across all three apps still route throughonLogEvent: _appendUiLog. Those emit Info-level entries with empty source in the debug log card; they'll be migrated when the module files are next touched.
- Module part-files (
- Backend \u00a71.7 migration is already complete (0.1.28\u20130.1.30).