Files

104 lines
6.2 KiB
Markdown

---
phase: 04-marketplace-portal-navigation
plan: 04
type: execute
wave: 3
depends_on: ["04-02", "04-03"]
files_modified: []
autonomous: false
requirements: [MRKT-01, MRKT-02, MRKT-03, MRKT-04, PRTAL-02, PRTAL-03, PRTAL-05]
must_haves:
truths:
- "A human confirms the marketplace, activation flows, tenant context switching, and sidebar navigation all work end-to-end in a running stack"
artifacts: []
key_links: []
---
<objective>
Human visual + functional verification of the complete Phase 4 experience: marketplace browsing/filtering, module activation/deactivation (admin + Super-Admin tenant context), module detail page, and sidebar navigation with search and live refresh.
Purpose: Phase gate. Confirms the implemented slices satisfy the phase success criteria before the phase is marked complete.
Output: Human sign-off (or a list of issues to feed gap-closure planning).
</objective>
## Phase Goal
**As a** Tessera user, **I want to** browse and activate modules in a marketplace and navigate to them from the sidebar, **so that** the platform's module experience is usable end-to-end.
<execution_context>
@$HOME/.claude/gsd-core/workflows/execute-plan.md
@$HOME/.claude/gsd-core/templates/summary.md
</execution_context>
<context>
@.planning/phases/04-marketplace-portal-navigation/04-UI-SPEC.md
@.planning/phases/04-marketplace-portal-navigation/04-01-SUMMARY.md
@.planning/phases/04-marketplace-portal-navigation/04-02-SUMMARY.md
@.planning/phases/04-marketplace-portal-navigation/04-03-SUMMARY.md
</context>
<tasks>
<task type="auto">
<name>Task 1: Ensure the stack is running and the full test suite is green</name>
<read_first>
- apps/web/package.json (test + dev scripts)
- .planning/phases/04-marketplace-portal-navigation/04-01-SUMMARY.md
- .planning/phases/04-marketplace-portal-navigation/04-02-SUMMARY.md
- .planning/phases/04-marketplace-portal-navigation/04-03-SUMMARY.md
</read_first>
<action>
Run the full web unit suite (`cd apps/web && pnpm vitest run`) and `pnpm type-check`. Ensure the Docker Compose stack (or local dev servers) is up so the portal is reachable for human verification — start it if it is not already running. Confirm the API is serving `/modules`, `/modules/active`, and `/tenants`. Report the portal URL for the human verifier.
</action>
<verify>
<automated>cd apps/web && pnpm vitest run 2>&1 | grep -qiE "passed" && pnpm type-check && echo SUITE_GREEN</automated>
</verify>
<acceptance_criteria>
- `cd apps/web && pnpm vitest run` exits 0
- `cd apps/web && pnpm type-check` exits 0
- Portal is reachable and the marketplace route loads without console errors
</acceptance_criteria>
<done>Full suite green, type-check clean, portal running and reachable.</done>
</task>
<task type="checkpoint:human-verify" gate="blocking">
<what-built>
Phase 4 marketplace + portal navigation: `/marketplace` card grid with search/status/category filters, immediate activation with toast + confirm-dialog deactivation, Super-Admin tenant-context selector, `/marketplace/[slug]` detail page, and an enhanced sidebar (Next.js Link, usePathname active state, per-module links, search, live refresh).
</what-built>
<how-to-verify>
1. Log in as a regular Admin. Visit `/marketplace`. CONFIRM: a responsive card grid of all modules appears, each card shows icon, name, description, a category badge, and a status badge (MRKT-01, MRKT-04).
2. Type part of a module name in the marketplace search. CONFIRM: the grid live-filters (debounced). Clear it with the X button.
3. Click the status tabs "Aktiviert" / "Verfuegbar" and a category chip. CONFIRM: the grid filters correctly and filters compose. With an impossible filter combo, CONFIRM the "Keine Ergebnisse" filtered-empty state appears.
4. On an available module, click "Modul aktivieren". CONFIRM: button becomes "Deaktivieren", status badge turns green "Aktiviert", and a success toast appears bottom-right (MRKT-02).
5. Look at the left sidebar WITHOUT reloading the page. CONFIRM: the just-activated module now appears under its category as a clickable link (MRKT-03, PRTAL-02, live refresh).
6. Click that module link in the sidebar. CONFIRM: it navigates client-side (no full-page flash), opens in the main content area, and the sidebar highlights it as active (PRTAL-03).
7. Type in the sidebar search field. CONFIRM: modules/categories filter; non-matching categories hide; "Keine Module gefunden" shows when nothing matches; clearing the search keeps previously expanded categories open (PRTAL-05).
8. Click "Deaktivieren" on an activated module in the marketplace. CONFIRM: a confirmation dialog appears with the module name; Abbrechen cancels with no change; Deaktivieren removes it (badge + sidebar update) with a toast.
9. Open a module detail page by navigating to `/marketplace/{slug}`. CONFIRM: full (untruncated) description, version, status, and a working activate/deactivate control; the "Zurueck zum Marktplatz" back link works.
10. Log in as a Super-Admin. Visit `/marketplace`. CONFIRM: a "Mandanten-Kontext" dropdown appears above the title. Switch to a different tenant. CONFIRM: card activation states refresh for that tenant; activating a module affects ONLY the selected tenant (verify by switching back).
11. Switch language DE/EN. CONFIRM: all marketplace and sidebar strings translate (no raw keys, no `[object Object]` descriptions).
12. Toggle light/dark theme. CONFIRM: cards, badges, toasts, and dialog all render correctly in both modes.
</how-to-verify>
<resume-signal>Type "approved" if all checks pass, or describe the specific issues observed (these feed `/gsd-plan-phase --gaps`).</resume-signal>
</task>
</tasks>
<artifacts_this_phase_produces>
No new symbols — verification-only plan.
</artifacts_this_phase_produces>
<verification>
- Full web suite green and type-check clean (Task 1)
- Human confirms all 12 verification steps (Task 2)
</verification>
<success_criteria>
- All phase success criteria from ROADMAP Phase 4 confirmed by a human in a running stack
- Any defects captured for gap-closure planning
</success_criteria>
<output>
Create `.planning/phases/04-marketplace-portal-navigation/04-04-SUMMARY.md` when done
</output>