Notechondria

Version: 0.1.36 Build Date: 2026-04-18T14:00

What's Changed

§1.7 migration: module part-files round

Every direct widget.onLogEvent(...) emission across the three apps' module part-files now follows the canonical "<consequence>: <module>/<process> \u2014 <cause>" shape.

Migrated sites (same message patterns across editor, planner, portal with only the Editor|Planner|Portal prefix differing):

  • <App>.UI/open_editor \u2014 editor dialog opens on a selected note.
  • <App>.UI/create_note \u2014 new note shell created before the editor opens.
  • <App>.UI/editor.save \u2014 note saved from inside the editor (autosave, manual save, etc.).
  • <App>.UI/editor.metadata \u2014 user opened the metadata dialog from the editor toolbar.
  • <App>.UI/editor.mode \u2014 user switched editor modes (P/G/B/M/T).
  • <App>.UI/editor.attachment \u2014 attachment uploaded while the editor is open (editor_app only).
  • <App>.UI/editor.close \u2014 editor dialog dismissed.

Host wrapper still routes these

_appendUiLog(String) in each app's app_shell.dart is still the callback registered on widget onLogEvent params. It forwards the string into the debug log controller as an Info-level entry with an empty structured source. The source field in the structured log stays empty for these entries (the structured source slot belongs to the \u00a71.7 host-side _log({source: ...}) path, not the callback route). The string itself now carries the module/process prefix, so grepping the persisted log text for Editor.UI/editor.save or equivalent still works and operators reading the SnackBar / copied log see the canonical shape.

Files Changed

New

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

Modified

  • VERSION: 0.1.35 \u2192 0.1.36.
  • docs/TODO.md: \u00a71.7 migration checklist marks the module part-files round done.
  • frontend/editor_app/lib/modules/learner.dart: 2 onLogEvent call sites rewritten to Editor.UI/{open_editor,create_note}.
  • frontend/editor_app/lib/modules/note_editor.dart: 5 onLogEvent call sites rewritten to Editor.UI/editor.{save,metadata,mode, attachment,close}.
  • frontend/planner_app/lib/modules/learner.dart: 7 onLogEvent call sites rewritten to Planner.UI/{open_editor,create_note,editor.save, editor.metadata,editor.mode,editor.close} (the editor widget is inlined into this file for the planner app; the attachment path is not wired yet).
  • frontend/portal_app/lib/modules/learner.dart: 7 onLogEvent call sites rewritten to Portal.UI/{open_editor,create_note,editor.save, editor.metadata,editor.mode,editor.close} (same inlined layout as planner; no attachment path).

Verification

  • flutter analyze on editor / planner / portal \u2014 52 / 70 / 68 issues respectively (was 50 / 68 / 66 in 0.1.35 modulo the prefer_single_quotes info-level false-positives on intentional double-quoted strings with embedded '). No errors.
  • flutter test test/smoke_test.dart -r compact on all three apps \u2014 passes.

Notes / follow-ups

  • \u00a71.7 migration is now complete across every call site that emits to the debug log, UI SnackBars, or ActionFeedback surfaces in this repo (backend + frontend). Future commits should adopt the shape from the start and use the canonical module/process names documented in docs/AGENTS.md.
  • The remaining onLogEvent/ _appendUiLog plumbing is structural: the callback is how widget tree children report events to the host state. Migrating those entries to have a structured source slot (rather than the "" empty source that _appendUiLog currently emits) would require threading a richer callback type through the part-files; defer that until a reason appears to surface source in the debug log filter chip row for these entries.