V1 Web PWA · Surface walkthrough

Studio · Launch Readiness Governance

A per-surface walkthrough of the V1 Web PWA studio surface: layout, states, interactions, data, and cross-references.

walked
9sections4 minread

On this page

Context. surface studio · domain governance · route /studio/launch-readiness-governance · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/launch-readiness-governance/page.tsx

Last walked. 2026-07-03 real-dev-infra Playwright addendum — focused route journey verified direct admin navigation, live BFF catalog, seeded and edited launch-readiness scoring, waiver/non-blocking gate behavior, blocking pending vetoes, client-only JSON validation, live BFF 400 details, pending-submit lockout, malformed/offline fail-closed paths, catalog loading/error, non-admin fail-closed auth, direct BFF auth/schema gates, quick-action affordances, shared axe, mobile containment, and anonymous redirect. Evidence: WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §263; apps/oshun/web/e2e/studio-launch-readiness-governance.spec.ts. Previous: 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified.

Purpose#

Render the go / no-go launch decision with the real evaluator: the Launch Readiness Lane requires every blocking gate to be passed or waived and every required sign-off granted; advisory gates inform the readiness score but never veto a launch. It is a live admin console wired to /v1/admin/studio/launch-readiness, not an in-page simulation.

Entry points#

  • Direct URL / bookmark/studio/launch-readiness-governance (signed-in + studio entitlement; admin scope required to evaluate)
  • Sibling Studio routes — reached via the quick-action panel on backup-disaster-recovery-ux, data-retention-lifecycle-controls, security-hardening-program, and review-approval-workflows pages

Layout regions#

page.tsx mounts <ShellLayout active="studio"> and renders <StudioLaunchReadinessGovernanceWorkspace /> (re-exported from StudioLaunchReadinessGovernanceDashboard) followed by a single panel of quick-action links.

  • Shell: ShellLayout chrome with the Studio tab active
  • Workspace heading: WorkspaceHeading renders the page <h1> "Studio Launch Readiness Governance", followed by the data-launch-readiness-summary paragraph
  • Launch Readiness Lane: an <h2> data-lr-lane-heading ("Launch Readiness Lane") section with the load states and, when ready, the evaluate form and result
  • Quick-actions panel: data-lr-quick-actions data-lr-quick-action-count="4" wraps 4 sibling quickAction Links: data-lr-quick-action="backup-disaster-recovery-ux", data-retention-lifecycle-controls, security-hardening-program, and review-approval-workflows. No self-link and no Route Map panel.

States#

  • Loadingdata-lr-loading ("Loading launch-readiness evaluator…")
  • Unauthorizeddata-lr-unauthorized ("Access restricted.") on 401/403
  • Errordata-lr-error ("Could not load the launch-readiness evaluator.")
  • Ready / formdata-lr-enums ("N gate statuses · M decisions") plus the data-lr-form evaluate form seeded with DEFAULT_PAYLOAD and data-lr-form-state="idle|pending"
  • Pending submitdata-lr-submit-state="pending", disabled, aria-disabled="true", and aria-busy="true" while the evaluate POST is in flight
  • Resultdata-lr-result headline (data-lr-headline with data-lr-decision, data-lr-score), the data-lr-blockers and data-lr-missing-signoffs lines, and the data-lr-blocker-table of data-lr-blocker-row rows (data-lr-blocker-status)
  • Evaluate errordata-lr-evaluate-error for invalid JSON, a non-200 response, an offline evaluate POST, or a malformed 200 success payload
  • Offline — catalog GET fails closed to the error panel; the evaluate POST surfaces the generic error when the network is unreachable
  • Gated — admin scope denied → data-lr-unauthorized; the route itself is proxy-gated to signed-in + studio
  • Standalone PWA — renders within the shell; no URL-bar dependency

Interactions#

  • Gates & sign-offs (JSON)textarea data-lr-payload, aria-label="launch readiness json", seeded with { gates[{ gateId, category, status, blocking }], signoffs[{ role, granted }] }
  • Evaluate launch readinessbutton data-lr-submit (type="submit"); POSTs the parsed JSON to /v1/admin/studio/launch-readiness/evaluate, setting data-lr-result on a 200 with a valid result, or data-lr-evaluate-error otherwise
  • Quick-action links — each quickAction Link navigates to its sibling Studio route (see Layout regions for the 4 targets)

Data & contracts#

  • Reads: GET /v1/admin/studio/launch-readiness on mount — returns the catalog (statuses[], decisions[])
  • Writes: POST /v1/admin/studio/launch-readiness/evaluate — returns { result: { decision, blockers[], missingSignoffs[], readinessScore, summary{ gateCount, passCount, failCount, pendingCount, waivedCount, blockingCount, signoffCount, grantedSignoffCount } } }
  • Realtime: none
  • Caching: client fetch with cache: 'no-store'; buildBffAuthHeaders() attaches the bearer token
  • Auth/role check: admin-scoped fail-closed — admin:* or admin:studio, 401/403 under the studio workspace gate

E2E coverage#

  • apps/oshun/web/e2e/studio-launch-readiness-governance.spec.ts forwards GET /v1/admin/studio/launch-readiness and POST /v1/admin/studio/launch-readiness/evaluate to the live dev BFF with explicit admin and non-admin dev bearers. It covers direct admin navigation, catalog bearer forwarding, seeded no-go result 60%, blocker filtering (g2 only while non-blocking g4 does not veto), missing sign-off rendering, go decisions with a waived blocking gate and pending advisory gate, pending blocking vetoes, malformed JSON zero-POST rejection, live BFF invalid-payload details, pending-submit lockout, catalog loading/error, malformed catalog, malformed 200 evaluate success, network-unreachable evaluate error, non-admin fail-closed state, direct BFF auth/schema gates, quick-action href/touch targets, shared axe, anonymous redirect, and mobile containment.

Cross-references#

Open questions / known gaps#

  • Confirm whether the page will gain a breadcrumb/Route Map panel like other Studio surfaces, or keep the flat quick-action panel — current page.tsx keeps the flat quick-action panel with no self-link and no Route Map panel as of 2026-07-03.
  • Document the live gate/sign-off feed the evaluator should consume once readiness scoring drives real release gating. Current V1 browser behavior scores caller-supplied JSON through the real deterministic BFF evaluator; automatic release-gate ingestion remains a product data-source gap, not a browser interaction gap.