Notechondria

Version: 0.1.31 Build Date: 2026-04-18T09:00

What's Changed

§1.7 migration: Shared.AuthDialog round

Every error-surface string in frontend/notechondria_shared/lib/src/components/auth_dialogs.dart now follows the canonical "<consequence>: <module>/<process> \u2014 <cause>" shape documented in docs/AGENTS.md.

Migrated surfaces:

  • Shared.AuthDialog/register.validate_invitation \u2014 invitation code invalid/expired + catch-all network error in RegistrationWizard._submitInvitationValidation.
  • Shared.AuthDialog/register.validate_form \u2014 client-side required-field + password-complexity + password-match checks in RegistrationWizard._validateEmailForm.
  • Shared.AuthDialog/verify.resend \u2014 empty-email check in EmailCodeDialog._resend.
  • Shared.AuthDialog/password.reset.confirm \u2014 new/confirm password mismatch in the reset-confirm action of PasswordResetDialog.

§1.7 migration: Editor.Sync.Courses round

All category CRUD surfaces in editor_app/lib/app_shell.dart migrated to Editor.Sync.Courses/<process> sources:

  • Editor.Sync.Courses/create \u2014 empty title, success (cloud vs local), remote failure paths in _createCategory.
  • Editor.Sync.Courses/update \u2014 empty title, default-category protection, missing session, success, remote failure paths in _updateCategory.
  • Editor.Sync.Courses/delete \u2014 default-category protection, missing session, success, remote failure paths in _deleteCategory.
  • Editor.Sync.Courses/reorder \u2014 local-only path, remote success, remote failure paths in _reorderCategories. Uses SnackBar + _log so the user and the debug log see the same line.
  • Editor.Sync.Courses/push \u2014 missing-session guard and post-create success log in _syncLocalCourse.

All migrated sites now emit their entries through the structured _log({level, source, message}) path (added in 0.1.23), so they show up in the debug log card with the proper Editor.Sync.Courses/* source in the filter row.

Files Changed

New

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

Modified

  • VERSION: 0.1.30 \u2192 0.1.31.
  • docs/TODO.md: \u00a71.7 migration checklist marks Shared.AuthDialog and Editor.Sync.Courses done; remaining editor rounds (Settings, Notes, LocalStore, UI) itemized for follow-up.
  • frontend/notechondria_shared/lib/src/components/auth_dialogs.dart: 4 ActionFeedback error-string sites + 4 _validateEmailForm return-string sites rewritten.
  • frontend/editor_app/lib/app_shell.dart: ~16 _appendUiLog and ActionFeedback strings in the category CRUD methods rewritten; legacy _appendUiLog(String) calls converted to structured _log(...) so sources show up in the debug log card.

Verification

  • notechondria_shared: flutter analyze \u2014 2 pre-existing surfaceVariant deprecation infos; no new errors.
  • editor_app: flutter analyze \u2014 43 issues (was 33 in 0.1.30); the +10 are all info-level unnecessary_string_escapes hints on intentional double-quoted strings that contain ' around category titles (the Dart lint misfires here). No errors; no new warnings.
  • editor_app: flutter test test/smoke_test.dart -r compact \u2014 passes.

Notes / follow-ups

  • Editor.Sync.Settings / Editor.Sync.Notes / Editor.LocalStore / Editor.UI rounds remain in docs/TODO.md. Each is decomposed into a focused per-module sweep so the diffs stay reviewable.
  • Planner and Portal still need their Sync.* + UI rounds; Auth is already done (0.1.27).
  • The prefer_single_quotes lint hits on Dart string literals that embed '<title>' tokens are intentional; the lint doesn't account for concatenated literals and flags a false positive. Rather than escape the quotes or add per-line ignores, left as info-level noise.