0.1.87 — portal Settings parity + editor bug fixes
Portal: Settings parity with editor
- Added
_ApiKeySectionwidget (masked prefix, rotate/generate with one-time plaintext reveal + copy, MCP endpoint display). - Added
_SecuritySectionwidget grouping API key, password change, and email change into a Card. - Added password-change dialog with identity-code verification gate.
- Added email-change dialog (three-step: identity code → new email → confirmation code).
- Added config-file export/import via
.nchronarchive format. - Implemented 5 new
NotechondriaClientmethods (sendIdentityCode,rotateApiKey,changePassword,changeEmailRequest,changeEmailConfirm). - Extracted
NotechondriaClientabstract interface +HandshakeResultintoclient_base.dartto stay under 1000-line ceiling.
Editor: Bug fixes
-
Bug 1 — local drafts filter not discarding public notes.
_loadInitialDatahardcodedscope: 'personal'when fetching notes, which repopulated_learnerNoteswith cloud data while the user had the filter set to "Local drafts only". Fixed by using the current_learnerSearchScopeand skipping the backend fetch when scope is'local'. -
Bug 2 — horizontal card image height. Capped the cover image to 200 px in the horizontal (≥600 px) layout by replacing
IntrinsicHeight+CrossAxisAlignment.stretchwithCrossAxisAlignment.start+SizedBox(height: 200)on the cover. -
Bug 3 — default Inbox not loaded for local (anonymous) users. Two fixes: (a) the remote-default deduplication in
_loadInitialDatais now gated on authentication so anonymous API responses don't remove the local Inbox from_localCourses; (b)_ensureStarterWorkspaceauto-selects the local Inbox when found from a prior session and the user is not authenticated.
Files
M frontend/editor_app/lib/core/initial_data.dart
M frontend/editor_app/lib/core/local_starter.dart
M frontend/editor_app/lib/modules/learner.dart
M frontend/portal_app/lib/app_shell.dart
M frontend/portal_app/lib/core/client.dart
M frontend/portal_app/lib/main.dart
M frontend/portal_app/lib/modules/settings.dart
A frontend/portal_app/lib/core/client_base.dart
A frontend/portal_app/lib/core/local_archive_io.dart
A frontend/portal_app/lib/modules/settings_dialogs.dart
A frontend/portal_app/lib/modules/settings_sections.dart