DIREKT Android ↔ Web/PWA Functional Parity Matrix¶
Status: W7 cross-client parity/regression closure
Owner: Functional PWA parity workstream
Governing plan: docs/web/FUNCTIONAL_PWA_PARITY_IMPLEMENTATION_PLAN.md
Status legend¶
PASS— implemented against canonical backend authority and supported by exact-head and/or managed evidence.GATED— intentionally unavailable because a separately controlled external, participant, legal, or runtime gate is not approved; must not be simulated as PASS.N/A— not applicable to the browser client or to the current managed synthetic cohort.
A W-stage may close only when every applicable capability is PASS or explicitly GATED with a concrete reason. Core authorization, privacy, session, evidence, enquiry, review and commercial invariants may not be downgraded to GATED to avoid a failing test.
Cross-client foundation¶
| Capability | Android/current product truth | Web/PWA | W7 status |
|---|---|---|---|
| DIREKT product identity/design semantics | Compose/product design | Same semantic design tokens/trust language | PASS |
| Customer destinations | Discover / Saved / Enquiries / Account | Same four destinations | PASS |
| Provider destinations | Overview / Profile / Enquiries / Account | Same destination model with provider labels | PASS |
| Mobile/tablet/desktop adaptation | Native/adaptive client | Bottom nav / navigation rail / desktop side nav | PASS |
| Installable/offline-safe shell | Native app shell | Manifest + service worker + offline shell | PASS |
| Canonical REST/OpenAPI authority | Active backend; Android integration remains programme-controlled | Reviewed BFF to same API | PASS |
| Direct privileged Supabase/database/Storage authority in browser | Prohibited | Prohibited | PASS |
| Backend-authoritative roles/provider scope | Required | Actor-resolved only | PASS |
| Android source/Gradle/release surface changed by PWA workstream | Must remain stable | No Android refactor | PASS |
| Live Android-runtime ↔ web-runtime state mutation synchronization | Android runtime network activation remains separately controlled in current programme | Web uses canonical backend | GATED — W7 proves contract compatibility and zero Android regression; it does not fabricate Android runtime writes that the existing protected Android surface does not expose |
Authentication and account — W3 closed¶
| Capability | Canonical authority | Web/PWA status |
|---|---|---|
| Controlled synthetic auth challenge/session | DIREKT auth service | PASS |
| Firebase-to-DIREKT exchange boundary | /auth/firebase/exchange |
PASS |
| Real Firebase Web phone-possession activation | Firebase + Phase 11 participant/legal controls | GATED — public Firebase Web configuration/real participant admission not authorized by W7 |
| HttpOnly rotating session envelope | DIREKT auth/session + BFF | PASS |
| Session rotation after access expiry | rotating refresh family | PASS |
| CSRF/same-origin mutation protection | BFF | PASS |
| Session list/revoke/logout | auth session routes | PASS |
| Account profile | /account/profile |
PASS |
| Provider mode availability | /provider-workspace/me |
PASS — server-derived; no client provider ID/role |
| Pilot invitation/admission | participant admission controls | GATED — real Phase 11 participant evidence remains open |
Evidence: managed W3 run 29703117963 PASS on exact source 012a7b9c24e93087d823661298d051c08ea34ec0.
Public discovery — W2 closed¶
| Capability | Canonical authority | Web/PWA status |
|---|---|---|
| Categories | /public/categories |
PASS |
| Area/manual location fallback | discovery query/location contract | PASS |
| Provider search/filters | /public/providers/search |
PASS |
| Provider cards/profile | public provider projection | PASS |
| Scoped trust claims | public claim projection | PASS |
| Availability | public availability projection | PASS |
| Public reviews | public review projection | PASS |
| Share-safe profile | public share projection | PASS |
| Private evidence/contact/private coordinates in public response | Prohibited | PASS — privacy scans/contracts |
| Map runtime | Google Maps runtime separately unproven | GATED — list/manual fallback remains first-class |
Evidence: managed W2 run 29694862350 PASS on exact source 4b892b90c42239c81c4f9c6f8c9f5447519dd6f6.
Customer journey — W4 closed¶
| Capability | Canonical authority | Web/PWA status |
|---|---|---|
| Saved-provider shortlist | customer saved-provider domain | PASS |
| Create/list/detail/cancel enquiry | enquiry lifecycle | PASS |
| Enquiry state/history | revisioned enquiry domain | PASS |
| Consent-aware contact handoff | interaction/handoff domain | PASS |
| Handoff list/revoke | interaction/handoff domain | PASS |
| Interaction history | interaction domain | PASS |
| Review eligibility | interaction/review domain | PASS |
| Submit/list/read/appeal/report review | review domain | PASS |
| Interaction complaint/list/detail | complaint domain | PASS |
| Provider-mediated transitions from customer browser | Provider authority | N/A — customer browser cannot fabricate provider authority; canonical lifecycle tests cover protected transitions |
Evidence: managed W4 run 29704996877 PASS on exact source 61a6bce54bffcec545a2009ac353596ee1d69f83, plus exact-head canonical lifecycle/contract tests for provider-mediated states.
Provider journey — W5 closed¶
| Capability | Canonical authority | Web/PWA status |
|---|---|---|
| Actor-resolved workspace/readiness | /provider-workspace/me |
PASS |
| Profile/operating model | provider workspace | PASS |
| Service/category selection/removal | provider/category domain | PASS |
| Availability | provider workspace | PASS |
| Private base/public premises/service area | provider workspace/PostGIS | PASS — private base write-only; public point requires consent |
| Verification/readiness timeline | safe workspace projection | PASS |
| Evidence requirements/status | verification/evidence domain | PASS |
| Recoverable evidence upload/retry/cancel | private upload-intent domain | PASS |
| Provider enquiry inbox/detail/transitions | provider interaction domain | PASS |
| Masked consent-scoped handoff | provider handoff projection | PASS |
| Provider interaction history | interaction domain | PASS |
| Provider reviews/response/appeal | review domain | PASS |
| Fixture-dependent provider enquiry/review mutation in generated W5 cohort | Synthetic fixture availability | N/A where fixture absent — not fabricated; permanent canonical lifecycle suites remain required |
Evidence: trusted-main W5 managed provider canary PASS on exact merged source 79228f4bda96106b929aa6183613cb9d2dc127f6; authoritative bot result on Issue #133 comment 5017630247.
Commercial lifecycle — W6 closed¶
| Capability | Canonical authority | Web/PWA status |
|---|---|---|
| Product catalogue | commercial service | PASS |
| Entitlements | commercial service | PASS — no verification/publication/ranking effects |
| Retry-safe subscription creation | provider commercial routes | PASS — idempotency required |
| Subscription status/cancellation | provider commercial routes | PASS — expected revision |
| Invoice creation/state | commercial service | PASS |
| Synthetic payment-intent lifecycle | commercial payment provider | PASS when backend mode is synthetic |
| Disabled payment-provider behavior | commercial payment provider | PASS — initiation fail-closed |
| Payment-intent cancellation/status | commercial service | PASS |
| Receipt projection | commercial service | PASS |
| Browser payment webhook authority | Prohibited | PASS — not exposed/invoked |
| Commercial state changing verification/publication/ranking | Prohibited | PASS |
| Real MTN/Airtel credentials and money movement | External provider/production authorization | GATED — not configured or authorized by W6/W7 |
Evidence: trusted-main W6 managed commercial canary PASS on exact merged source 1b5753002afcf115f6f47334f6588648eca7501d.
External/runtime gates retained¶
| Integration | Current truth | W7 treatment |
|---|---|---|
| Google Maps | Externally provisioned/runtime unproven | GATED; preserve manual/list fallback |
| Sentry | Externally provisioned/runtime unproven | GATED; no active-runtime claim |
| Resend | Externally provisioned/runtime adapter unproven | GATED; no delivery claim |
| FCM | Planned | GATED; not required for current browser parity |
| WhatsApp Cloud API | Planned/disabled | GATED; domain handoff only |
| Turnstile | Planned/not active | GATED; not assumed in auth architecture |
| MTN MoMo/Airtel Money | Planned/disabled | GATED; no real money movement |
| Real participant admission | Phase 11 evidence incomplete | GATED |
| Formal Phase 12 production release | Requires 11J PROCEED/global gates | GATED |
W7 regression acceptance¶
| Control | Required result |
|---|---|
| Functional web typecheck + W2–W7 contract verifiers + production build | PASS |
| Backend migration + full Jest + build + OpenAPI generation/check | PASS |
| Database Data API/authorization/provider-workspace contract harnesses | PASS |
| Android debug unit tests | PASS |
| Android lint | PASS |
| Android debug assembly | PASS |
| Android debug/release dependency graph resolution | PASS |
| Android protected-path diff | PASS |
| Mobile bottom navigation / tablet rail / desktop side navigation breakpoints | PASS |
| Keyboard focus / skip-link / reduced-motion semantics | PASS |
| Service-worker mutation/private no-cache and network-only rules | PASS |
| No browser-readable DIREKT tokens/private evidence/object keys/service-role credentials | PASS |
| CSRF/origin/provider-scope/direct-API negative contracts | PASS |
| W2–W6 managed exact-source evidence chain reconciled | PASS |
| External/participant/production gates represented honestly | PASS/GATED with reason |
W8 remains blocked until W7 closes¶
W7 closure does not authorize public production release. W8 must separately prove an approved route/domain/runtime-identity cutover, preserve the historical synthetic preview, keep the canonical API IAM-private, and retain Phase 11/Phase 12 gates.