Notechondria
Version: 0.1.25 Build Date: 2026-04-18T02:30
What's Changed
AGENTS.md submodule bump + project-specific override
-
Submodule
AGENTS.mdpointer bumped from6cfe3bdto6a2c40f. The upstream adds a new \u00a71.7 "Error and info messages (IMPORTANT)" section requiring every error/warning/info/debug message to carry three components: consequence, module/process, and cause. Informal shape:"<consequence>: <module>/<process> \u2014 <cause>". -
New project-specific override at
docs/AGENTS.mddefines the canonical module/process name table for this repo (Editor.Auth,Editor.Sync.Courses,Backend.Creators.Auth, etc.) and lists the substring sentinels that must survive any future rewrite (invalid token,not_registered,No account found,bind, etc.). -
A phased migration plan for bringing all ~230 existing messages
across frontend and backend into \u00a71.7 compliance lives in
docs/TODO.mdunder "\u00a71.7 message-compliance migration". Only the OAuth launch + callback messages in editor_app have been migrated so far; remaining modules are decomposed per-round to keep each diff reviewable.
Splash screen \u2014 particles, morph continuity, backend tag
-
Free-drifting particles. Background molecules now drift across
the whole viewport instead of orbiting around the cycle ring.
_Particlereshaped to cartesian seed + velocity + phase; positions wrap modulo an extended box so particles smoothly re-enter at the opposite edge. Ring-proximity attenuation keeps formula glyphs unobscured. -
Continuous metabolite morph. The previous
sin(stepFraction * pi)alpha curve dipped to zero at each step boundary, producing a visible blank frame on narrow / mobile layouts. New per-step paint sequence: previous formula lingers through the first 35% of the new step, active fades only in the final 35%, and the incoming fades in over the same overlap window. Result: at least one skeletal structure is near-full alpha at every moment of the cycle, with a clear cross-fade between adjacent metabolites. -
Backend domain tag on splash. Bottom-left version line now
reads
v0.1.25 \u00b7 <host>where<host>is derived from the app's configuredapi_base_url. Empty / null / unparseable URLs collapse tooffline.SplashScreentakes a new optionalapiBaseUrlparameter; each app_shell's splash call site threads_localSettings['api_base_url']through.
OAuth callback loading message
-
During OAuth callback handling the splash status line now reads
Completing sign-in via Google/Completing sign-in via GitHub(orLinking Google account/Linking GitHub accountwhenintent=bind) instead of the genericCompleting sign-in. All three apps push the provider-specific status early in_handleOAuthCallbackbefore the/auth/...call fires.
Editor \u2014 offline-first UI behavior
-
Cloud categories hidden while signed out. The
_allCategoriesgetter ineditor_app/lib/app_shell.dartreturns only_localCourseswhen_tokenis null or empty, so cloud rows vanish from the sidebar in offline mode and the app reads as a local-only workspace. Cached remote note content is still addressable by UUID so mid-edit drafts aren't dropped; on re-login the cloud rows reappear and the usual_loadInitialDatapull-then-merge runs. - (No change required for editor starter workspace \u2014 it already seeds only an Inbox plus two welcome drafts.)
Files Changed
New
docs/AGENTS.md\u2014 project-specific agent override with canonical module table and preserved-sentinel list.docs/versions/0.1.25.md(this file).
Modified
AGENTS.md(submodule pointer) \u20146cfe3bd\u21926a2c40f.frontend/notechondria_shared/lib/src/components/splash_screen.dart:SplashScreenaddsapiBaseUrlparameter +_formatBackendTaghelper; bottom-left line rendersv<version> \u00b7 <host>._Particlereplaced with cartesian seed+velocity+phase model;_drawParticlesuses screen-wrapping positions with ring-proximity attenuation.- Active-metabolite paint sequence rewritten to paint previous, active, and next formulas in the same cycle step with overlapping alpha curves, eliminating the step-boundary blank gap.
frontend/editor_app/lib/app_shell.dart:_allCategoriesgated on_tokenso cloud rows hide offline._handleOAuthCallbackpushesCompleting sign-in via <provider>/Linking <provider> accountto_splashStatus.SplashScreen(apiBaseUrl: ...)wired.- OAuth launch + callback error/log messages migrated to
AGENTS.md \u00a71.7 shape (
Editor.Auth/oauth.launch,Editor.Auth/oauth.callback,Editor.Auth/bind).
frontend/planner_app/lib/app_shell.dart:_handleOAuthCallbackpushes provider-specific status.SplashScreen(apiBaseUrl: ...)wired.
frontend/portal_app/lib/app_shell.dart: same wiring as planner.VERSION: 0.1.24 \u2192 0.1.25.docs/TODO.md: migration plan added; completed items removed; follow-up items rescoped.
Verification
notechondria_shared:flutter analyze\u2014 2 pre-existingsurfaceVariantdeprecation infos; no new errors.editor_app/planner_app/portal_app:flutter analyze\u2014 issue count unchanged vs 0.1.24.flutter test test/smoke_test.dart -r compact\u2014 all pass.
Notes / follow-ups
- Task 5a (backend phased bind error) deferred to TODO: requires
catching each phase of
/api/v1/auth/bind/<provider>/(config lookup, token exchange, profile fetch, email match, DB write) and returning structured{"detail": "<consequence>: Backend.Creators.Auth/bind.<phase> \u2014 <cause>"}payloads with test coverage. Separate round once the bind-endpoint surface is touched. - Task 4b extension deferred to TODO: the same offline-hide applied
to editor's
_allCategoriesneeds to be replicated in planner and portal sidebars. - \u00a71.7 migration is ongoing; only editor OAuth sites migrated
so far.
docs/TODO.md\u00a7"\u00a71.7 message-compliance migration" decomposes the remaining ~220 sites into reviewable per-module rounds.