project-bifrost-platform/tests
Jonathan Hvid 8bbf8568f4 feat(admin): retire old admin, add resource verifier, redirect /admin
The Backstage rebuild is complete. The old single-page /admin (with
seven ?tab= sections backed by six tab partials) is gone. /admin
now redirects to the first registered resource (dispatches), and
every entity is served by the shared /admin/[resource] dynamic
route from steps 4–10.

- tests/admin-resources.test.ts: vitest-based verifier that walks
  every registered resource and asserts:
    - identity fields (key/label/plural/singular/groupKey)
    - list.queryFn, action.handler, ops.* members are functions
    - column kinds are in the registered set (text/pill/relative-date/
      number/tag-list); same for columnsByFilter overrides
    - field kinds are in the registered set (11 kinds)
    - embed.component is in the registered set (pulse-sub-form)
    - resource keys are unique, action keys are unique per resource
    - at most one filter is isDefault
    - groupKey resolves to a real group
    - review-mode resources have at least one action
    - ops.create requires a non-null form
  87 assertions, integrated into pnpm test, fails CI on any drift.
- src/pages/admin/index.astro: thin redirect to /admin/<first-key>.
- src/pages/admin/preview.astro: deleted (step-4 smoke route).
- src/components/admin/*.astro: deleted (6 old tab partials —
  ActivityTab, DispatchesTab, EventsTab, PulsesTab, RoadmapTab,
  UserEditTab — all replaced by the resource configs).

Full suite: 147 tests pass (60 prior + 87 verifier). Typecheck
clean. Build clean. Manual smoke shows every /admin/<resource>
URL resolves through the dynamic route; old /admin?tab=… references
exist only in deleted files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:52:48 +02:00
..
admin-resources.test.ts feat(admin): retire old admin, add resource verifier, redirect /admin 2026-05-12 16:52:48 +02:00
admin-validate.test.ts feat(admin): add Resource type definitions + form validator 2026-05-12 15:56:42 +02:00
dispatches.test.ts feat(component): DispatchesSection + reusable Avatar + tests 2026-05-11 15:57:52 +02:00
focus-tags.test.ts feat(db): dispatches + member-number allocation + focus-tags parser 2026-05-11 15:55:35 +02:00
home-route.test.ts test: vitest suite — pulse status, vote uniqueness, home route 2026-05-11 14:45:55 +02:00
member-number.test.ts feat(db): dispatches + member-number allocation + focus-tags parser 2026-05-11 15:55:35 +02:00
pulse-status.test.ts test: vitest suite — pulse status, vote uniqueness, home route 2026-05-11 14:45:55 +02:00
roadmap-layout.test.ts fix(route): cards grow toward centreline — fixes top/bottom clipping at the source 2026-05-12 14:43:41 +02:00
setup.ts test: vitest suite — pulse status, vote uniqueness, home route 2026-05-11 14:45:55 +02:00
tenure-milestone.test.ts feat(pulse): two-column greeting + tenure-milestone copy 2026-05-12 10:48:50 +02:00
vote-count.test.ts feat(pulse): nav restructure, white surfaces, membership card, dispatches 2026-05-11 16:02:46 +02:00
votes.test.ts test: vitest suite — pulse status, vote uniqueness, home route 2026-05-11 14:45:55 +02:00