Skip to content

UI-SP1 — Web App Shell + Auth + Tasks (Dashboard/List/Create)#19

Merged
l17728 merged 20 commits into
mainfrom
feat/ui-sp1-shell-tasks
May 19, 2026
Merged

UI-SP1 — Web App Shell + Auth + Tasks (Dashboard/List/Create)#19
l17728 merged 20 commits into
mainfrom
feat/ui-sp1-shell-tasks

Conversation

@l17728
Copy link
Copy Markdown
Owner

@l17728 l17728 commented May 19, 2026

Summary

First of 5 decomposed UI sub-projects. Turns the 3-page read-only scaffold into a usable application:

  • App shell: collapsible sidebar + topbar, tenant/role chip, dark mode, zh/en, command palette (⌘/Ctrl+K).
  • Dashboard (/): KPI cards + 24h sparkline + quota + recent (client-aggregated from the task list).
  • Task List (/tasks): client-side filter/search + view/cancel/delete actions (optimistic).
  • Task Create (/tasks/new): full form + validation + friendly error mapping + service-token preflight guard (blocks the user_id=0 owner-FK 500).
  • Auth: token paste + "Sign in with OIDC" button.
  • Single useLiveResource realtime seam (adaptive polling; SP5 swaps to SSE/WS with zero view change).

Frontend-only — only frontend/** + docs/**; zero backend/API/migration/lint change. Reuses the scaffold conventions (Vue3+Pinia+vue-query+ElementPlus+vue-i18n). No new dependency.

2-opus pre-execution review fixed 5 BLOCKER-class issues in the plan before code (decodePrincipal base64 re-pad + indexed-access; v-model cast; main.ts ownership; vue-query v5 queryKey; mount-after-router-ready). Final opus whole-impl review: MERGE-READY, 0 CRITICAL/HIGH (2 LOWs record-and-accept, scoped-deferred per spec).

Test plan

  • pnpm test:unit — 20 files / 61 tests green
  • pnpm lint (eslint --max-warnings=0), pnpm typecheck (vue-tsc), pnpm build — all green
  • purely additive (only frontend/** + docs/superpowers/** + docs/operator/web-ui.md)

Spec: docs/superpowers/specs/2026-05-19-ui-sp1-shell-tasks-design.md
Plan: docs/superpowers/plans/2026-05-19-ui-sp1-shell-tasks.md

Deferred (own sub-projects, each needs additive backend endpoints): UI-SP2 download-manager Task Detail · UI-SP3 Executors/Quota/Audit/Settings · UI-SP4 AI-Copilot · UI-SP5 realtime upgrade.

🤖 Generated with Claude Code

l17728 and others added 20 commits May 19, 2026 22:36
UI-SP1 = app shell + auth + useLiveResource foundation + Dashboard +
Task List + Task Create. Frontend-only on the existing ~11-endpoint
backend (zero backend/api/migration change). UI-SP2..SP5 (download-
manager Task Detail, infra/governance, AI-Copilot, realtime upgrade)
each need additive backend read-endpoints — deferred to their own
spec/plan cycles. Grounded by 5-agent exploration of the v2.0 design,
the real implemented API surface, the scaffold conventions, AI-Copilot
feasibility, and an industry-leading UX synthesis.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- B-A1/B-B1 (BLOCKER): decodePrincipal binds parts[1] (noUncheckedIndexedAccess)
  + re-pads base64url before atob (JWT is unpadded; atob is length-dependent).
- A-B2/B-I5 (BLOCKER): TaskCreateBody.upgrade_from_revision is ?:string (no
  |null); drop the invalid `v-model="form.x as string"` cast; init ''.
- A-B3 (BLOCKER): Task 1 no longer edits main.ts (i18n move wholly in Task 3;
  partial edit was throwaway/red-gate risk).
- A-I1 (BLOCKER): useLiveResource uses a real QueryKey (refs-in-array, the
  proven scaffold pattern) — vue-query v5.59 rejects a getter queryKey.
- B-I2: main.ts mounts after router.isReady() (no authed login-flash).
- B-M2: mapCreateError maps 403 → errors.forbidden (+test).
- B-M3: added a mounted TaskCreate wiring test (submit/error-map +
  service-token disabled) + defineExpose.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@l17728 l17728 merged commit 8203c58 into main May 19, 2026
12 checks passed
@l17728 l17728 deleted the feat/ui-sp1-shell-tasks branch May 19, 2026 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant