feat(ui): add routed operator workflows

This commit is contained in:
2026-07-31 17:19:08 +02:00
parent 22567c5fb1
commit 9023963bf1
14 changed files with 2846 additions and 275 deletions
+21
View File
@@ -0,0 +1,21 @@
# M16 routed operator UI evidence
- The authenticated operator console now has protected, URL-addressable routes for the existing Dashboard, Sources, Repositories, Jobs, Executions, Backups, Security, Notifications, and Audit views. `/` and authenticated unknown routes redirect to `/dashboard` without adding a dead Back-history entry.
- Authentication discovery happens before the route shell renders, so an unauthenticated deep link is retained through sign-in rather than prematurely redirected.
- Route components load through `React.lazy` with an announced `Suspense` state and an in-shell error boundary. `OperatorPages.tsx` splits the existing resource pages into a separate production chunk.
- Navigation uses semantic `NavLink` anchors with current-page semantics. The shell provides one main landmark, a functional skip link, route-based document titles, and focus restoration after route navigation.
- Route-level tests cover direct `/sources` navigation, title/current-link state, focus restoration, authenticated unknown-route redirect, and the skip link. Existing workflow tests were adapted to the semantic navigation links.
## Green M16 checks
```text
npm --prefix frontend run api:check # generated client current
npm --prefix frontend run typecheck # passed
npm --prefix frontend run build # passed; emitted OperatorPages and M13Workflows chunks
npm --prefix frontend test -- --run # 11 passed
npx --prefix frontend playwright test --config frontend/playwright.config.ts # 1 passed
.venv/bin/python tools/export_openapi.py --check openapi/v2.json # current
make check # passed
```
Known boundary: this evidence covers delivery slice 1's routed shell over the pre-existing read/workflow views. The create/edit/administration workflows in later slices of `docs/plans/full-operator-ui.md` remain unimplemented.
@@ -0,0 +1,27 @@
# M17 operator workflow evidence
## Delivered workflows
- Routed shell: protected, lazy, URL-addressable dashboard, resource, operation, notification, security, audit, and administration views.
- Resources: repository create/inspect; local and SSH source create, probe, typed archive; job create/enable/disable; schedule create/update/delete; manual enqueue.
- Operations: named execution SSE events, reconnect status, polling fallback, state-gated retry/cancel; backup verification/deletion impact preview; restore dry-run and exact-destination overwrite confirmation.
- Notifications: subscription creation, selected-only test, signing-key rotation input, delivery attempts/retry; webhook signing secrets are write-only.
- Administration: write-only secret creation, one-time token rendering, and user-state update.
## Deliberate boundaries and remaining API gaps
- Backup deletion has no v2 delete endpoint, so the UI stops at its impact preview and directs the operator to the CLI.
- Recovery bundles, passphrases, and recovery imports/exports remain CLI-only.
- User/token metadata list endpoints and generated response ETags are not available. Therefore user/token discovery and ETag-required subscription edit/disable/archive controls are not exposed rather than implemented unsafely.
- Audit filtering and cursor navigation await their corresponding authenticated API query parameters.
## Verification
```text
npm --prefix frontend test -- --run # 8 passed
npm --prefix frontend run typecheck # passed
.venv/bin/python -m pytest tests/integration/test_sources_jobs.py -q # 4 passed
make check # passed
```
The expected generated artifacts (`openapi/v2.json` and `frontend/src/api/generated/client.ts`) are staged so `make check` can verify API generation drift without staging unrelated workspace changes.