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 inRegistrationWizard._submitInvitationValidation.Shared.AuthDialog/register.validate_form\u2014 client-side required-field + password-complexity + password-match checks inRegistrationWizard._validateEmailForm.Shared.AuthDialog/verify.resend\u2014 empty-email check inEmailCodeDialog._resend.Shared.AuthDialog/password.reset.confirm\u2014 new/confirm password mismatch in the reset-confirm action ofPasswordResetDialog.
§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. UsesSnackBar+_logso 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 marksShared.AuthDialogandEditor.Sync.Coursesdone; remaining editor rounds (Settings, Notes, LocalStore, UI) itemized for follow-up.frontend/notechondria_shared/lib/src/components/auth_dialogs.dart: 4ActionFeedbackerror-string sites + 4_validateEmailFormreturn-string sites rewritten.frontend/editor_app/lib/app_shell.dart: ~16_appendUiLogandActionFeedbackstrings 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-existingsurfaceVariantdeprecation infos; no new errors.editor_app:flutter analyze\u2014 43 issues (was 33 in 0.1.30); the +10 are all info-levelunnecessary_string_escapeshints 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.UIrounds remain indocs/TODO.md. Each is decomposed into a focused per-module sweep so the diffs stay reviewable.- Planner and Portal still need their
Sync.*+UIrounds; Auth is already done (0.1.27). - The
prefer_single_quoteslint 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.