Notechondria

Version: 0.1.58 Build Date: 2026-04-22T18:05

What's Changed

Cross-app dedup — portal_app onto the shared mixins (step 5 of 8)

  • Third and final app joins the party. portal_app's _AppShellState now mixes in AppShellLogMixin, AppShellAuthActionsMixin, AppShellOAuthMixin. 363 lines of duplicate method bodies dropped (same 10 methods + showMessage helper that editor and planner already migrated).

  • 128 private call sites renamed. portal's NotechondriaClient now implements AuthClient with a new checkSession declaration + HttpNotechondriaClient implementation. portal also gets the {bool showMessage}{bool announce} rename.

  • portal's app_shell.dart shrinks 3760 → 3414 lines. Still over cap; the next round splits per-concern.

Summary of cross-app sharing so far (0.1.54 – 0.1.58)

All three apps now share one implementation of:

  • log / appendUiLog / timed<T> / showMessage / refreshState
  • register / verify / resendVerification / login / requestPasswordReset / confirmPasswordReset
  • launchOAuth / handleOAuthCallback

Approximately 700 lines of inter-app duplication removed across the five rounds. All three smoke tests pass.

Files Changed

  • frontend/portal_app/lib/app_shell.dart — same migration pattern as planner.
  • frontend/portal_app/lib/core/client.dartimplements AuthClient + checkSession.
  • frontend/portal_app/lib/core/local_trash.dart_trashRefresh rename.
  • frontend/portal_app/lib/modules/{course,settings}.dart{bool announce} rename.