0.1.91 — settings UI parity: MCP skill + GitHub Sync into portal/planner

Round 2 of the multi-app migration started in 0.1.90. Brings the MCP-skill editor and the experimental GitHub-Sync card to portal_app and planner_app so the three apps now offer the same surface.

Shared widget extraction

  • New notechondria_shared/lib/src/components/mcp_skill_section.dart exporting McpSkillSection and GithubSyncExperimentalCard.
  • Editor switched from its private _McpSkillSection to the shared widget; the now-unused private definition was deleted from editor_app/lib/modules/settings_sections.dart.

portal_app

  • _SecuritySection now accepts mcpSkillMd + onSaveMcpSkill and renders McpSkillSection directly under the API-key row when the callback is set.
  • The settings page mounts GithubSyncExperimentalCard immediately below the Security card when authenticated.
  • app_shell.dart provides a portal-flavored onSaveMcpSkill that PATCHes /api/v1/settings/ and merges the response back into _settings.

planner_app

  • _SettingsPage now accepts onSaveMcpSkill; the Login & sync card renders McpSkillSection after ActiveSessionsCard. The experimental GitHub-Sync card is appended below the card when the callback is set.
  • app_shell.dart provides a planner-flavored onSaveMcpSkill with the same _settings merge pattern.

Verification

  • flutter analyze runs cleanly on portal_app, planner_app, and editor_app. Only pre-existing unused-element/unused-import warnings remain; no new errors or warnings introduced by this round.

Carryover (still open)

  • Custom-meta expandable list in planner's learner_note_editor.dart and portal's note_metadata_dialog.dart. Editor's _NoteEditorDialog already covers all three apps via editor_app/lib/modules/note_editor.dart, so this only matters if the planner / portal note dialogs forked their own metadata flow.
  • GitHub Sync — actual push path (JWT signing, repo picker, restore CLI). See docs/TODO.md.