Feat v0.2.4: SDK Topbar, Schedules surface, manifest icons, UserMenu cleanup

Shell navigation:
- sw.shell.Topbar — composable nav bar (title + slot + bell + user menu)
- Topbar CSS in sw-shell.css, wired into SDK via dynamic import

Schedules surface (packages/schedules/):
- Wraps kernel /api/v1/schedules CRUD + run + logs
- Table view with cron badge, human-readable preview, enable toggle
- Create/edit dialog with live cron-to-english preview

Manifest icons:
- icon field in manifest.json (emoji string)
- Surfaces API returns icon from package manifest
- UserMenu renders per-surface icons

UserMenu cleanup:
- Removed dead Chat/Notes/Projects hardcoded links
- Menu now driven by /api/v1/surfaces API (installed surfaces only)
- Core surfaces filtered via CORE_IDS set

Bug fixes:
- isAdmin() in can.js now checks surface.admin.access RBAC grant
  instead of deprecated user.role column (v0.2.0 regression)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-27 10:16:37 +00:00
parent 57ccf19efb
commit 22c70034c6
25 changed files with 2212 additions and 37 deletions

View File

@@ -2,6 +2,40 @@
All notable changes to Switchboard Core are documented here.
## [Unreleased] — v0.2.4
### Added
- **`sw.shell.Topbar`**: Standard navigation bar component for surfaces.
Composes title + extension slot + NotificationBell + UserMenu into a
consistent 44px bar. Surfaces use `<${sw.shell.Topbar} title="...">` with
children rendered in the extension slot. Graceful fallback if unavailable.
- **Schedules surface** (`packages/schedules/`): New package wrapping the
kernel `/api/v1/schedules` API. Table view with cron badge + human-readable
preview, next fire time, enable/disable toggle, manual run, and execution
logs panel. Create/edit dialog with live cron-to-english preview.
- **Manifest `icon` field**: Packages can declare an emoji icon in
`manifest.json` (`"icon": "⏰"`). Served via the surfaces API `icon` field.
Rendered in the UserMenu flyout next to each surface name.
### Changed
- **UserMenu**: Surface list now driven entirely by the `/api/v1/surfaces`
API. Removed hardcoded Chat, Notes, Projects links (gutted in Phase 0).
Core surfaces (Admin, Settings, Team Admin, Workflow) filtered from the
API list and handled as dedicated menu items with RBAC gating.
- **Tasks surface**: Replaced custom `.tasks-header` with `sw.shell.Topbar`.
View tabs and create button rendered in the extension slot.
### Fixed
- **`sw.isAdmin` RBAC regression**: `isAdmin()` in `can.js` was checking the
deprecated `user.role === 'admin'` field instead of the v0.2.0 RBAC grant
`surface.admin.access`. Admin menu item and admin-gated features now appear
correctly for users in the Admins group.
---
## [Unreleased] — v0.2.2
### Added