Phase 6 provider workspace testing

Permanent test matrix

Boundary Test evidence
Actor-resolved provider ownership provider-workspace.e2e.spec.ts
Revocation and cross-provider denial provider-workspace.e2e.spec.ts, provider-workspace-uploads.e2e.spec.ts
Profile/service/location/availability independence provider-workspace-mutations.e2e.spec.ts
Coordinate and audit non-disclosure provider-workspace-mutations.e2e.spec.ts
Upload logical-intent idempotency provider-workspace-uploads.e2e.spec.ts
Interrupted retry with a fresh session provider-workspace-uploads.e2e.spec.ts
One immutable evidence version provider-workspace-uploads.e2e.spec.ts
Direct confirmation case/session scope evidence-confirmation-scope.e2e.spec.ts
Provider-safe timeline provider-workspace-uploads.e2e.spec.ts
Read-only Phase 8/9 endpoints provider-workspace-deferred.e2e.spec.ts
Operations aggregate privacy provider-workspace-operations.e2e.spec.ts
Authorization audit typing authorization.service.spec.ts
Android readiness and deferred boundaries ProviderWorkspaceModelsTest.kt
Android persistence and retry state ProviderUploadRecoveryStoreTest.kt
Android activity recreation ProviderWorkspaceRecoveryTest.kt
Operations portal privacy provider-workspaces.spec.tsx
Operations navigation permission navigation.spec.ts

Backend and database assertions

The backend suites prove:

  • provider IDs and roles supplied by clients do not select workspace ownership;
  • no assignment is denied and multiple active assignments are rejected;
  • revoked membership is effective on the next request;
  • profile, service, location and availability updates do not create claims or publications;
  • location responses and audit events contain no coordinate values;
  • an identical client upload key returns one logical intent;
  • retry increments the attempt count and creates a different upload session;
  • an interrupted session is cancelled;
  • confirmation creates one version and one case link;
  • a mismatched case requirement returns a domain error and leaves session, evidence and version state unchanged;
  • another provider cannot list, read or cancel an intent;
  • provider timeline serialization contains no storage or reviewer fields;
  • deferred endpoints expose no mutation route;
  • operations output contains aggregate counts only.

Android assertions

Unit tests prove:

  • readiness counts use independent controls;
  • safe location summaries contain no coordinates;
  • Phase 8/9 surfaces are read-only;
  • upload encoding/decoding falls back safely when corrupt;
  • interruption survives store recreation;
  • retry preserves logical intent and changes session ID;
  • repeated start while active is idempotent;
  • submitted state is terminal.

Compose instrumentation proves:

  • the Phase 6 shell is visible;
  • provider dashboard, profile and privacy boundary are accessible;
  • upload attempt one can be interrupted;
  • activity recreation restores interruption;
  • retry appears as attempt two;
  • later-phase boundary copy remains visible and non-interactive.

Operations portal assertions

Server-rendered tests prove the portal:

  • labels records synthetic;
  • displays readiness and interrupted/retryable counts;
  • states that coordinates and evidence identifiers are excluded;
  • exposes no evidence-review or provider-publication action;
  • appears only when server permissions include operations.providers.read.

Required release commands

Backend/PostGIS

cd backend/direkt-api
npm ci --ignore-scripts
npm run format:check
npm run lint
npm run typecheck
npm run migration:check
npm run test
npm run build
npm run openapi:check

Android

cd android/direkt-app
./gradlew --no-daemon clean testDebugUnitTest lintDebug assembleDebug assembleDebugAndroidTest

Operations portal

cd admin/direkt-operations-portal
npm ci --ignore-scripts
npm run format:check
npm run lint
npm run typecheck
npm run test
npm run build

Documentation

python scripts/validate_docs.py
python scripts/package_planning_docs.py
python scripts/build_pages_source.py
mkdocs build --strict

All four permanent workflows must pass on one exact reviewed head. Thresholds may not be reduced to obtain a green result.