Skip to main content

Peak POS iOS QA Checklist

Prerequisites

  • Local QA smoke passes.
  • PeakPosSdk.xcframework is built.
  • Local Firebase emulator or approved local Firebase config is selected, with tenant ID, auth domain, and App Check/debug-provider mode recorded.
  • Local iOS SDK transport profile points at the QA reverse proxy and terminal mTLS proxy; merchant API base, terminal API base, and proxy host/port are recorded before any backend PASS.
  • macOS/Xcode/simulator prerequisites are available, or this checklist is marked skipped with reason.
  • Simulator/device skip taxonomy is explicit: host-unavailable, simulator-unavailable, device-unavailable, credential-gated, backend-unavailable, or platform-exception.
  • XCTest/simulator battery records Xcode version, simulator model/runtime, derived-data path, test plan/scheme, local QA proxy URL, terminal mTLS proxy URL, Firebase tenant, SDK artifact SHA, and backend report path before PASS.
  • Test data starts from seeded org/store/register/terminal IDs, or the run records the seed creation path and cleanup owner.

Manual Local Checks

  • Build structural/lane tests.
  • Primary SDK workflow matrix is proved by //apps/ios:peak_pos_client_lane_test: checkout, catalog, customer, and receipt each record a peakpos:// route, the shared SDK contract version, workflow-specific PeakPosSdk contract names, and local backend request-ID correlation requirements.
  • Denied, stale-session, offline, and duplicate-retry recovery states are proved by //apps/ios:peak_pos_client_lane_test: denied auth, stale session, offline invoice, offline inventory, and duplicate receipt retry each record recoverable operator UI text, backend mutation/no-mutation expectations, duplicate side-effect prevention evidence, route/request or idempotency evidence, and observable simulator/device skip taxonomy.
  • Run the XCTest/simulator battery for launch, auth, wrong tenant, SDK transport profile, catalog sync, checkout/receipt, refund/void where implemented, offline/session-expiry, app restart, and backend ID reconciliation.
  • XCTest negative cases cover backend unavailable, wrong proxy base URL, missing Firebase tenant, expired token, wrong store/register, missing terminal cert, stale SDK transport profile, duplicate submit, and local mTLS rejection.
  • Start simulator and verify Firebase/local auth profile, local tenant, token propagation, and wrong-tenant rejection.
  • Verify the SDK transport profile uses the local QA proxy/mTLS proxy instead of staging or production URLs.
  • Verify tenant/store selection.
  • Catalog sync and image URL rendering.
  • Checkout/cash drawer/receipt flows using local backend.
  • Verify customer lookup, invoice/payment-link, and inventory adjustment surfaces route through the SDK/local backend profile where implemented.
  • Refund/void state where implemented.
  • Local cert enrollment/renewal state where implemented.
  • Notification registration either captures APNs/FCM token metadata locally or is marked with a credential-gated/provider-delivery skip.
  • Offline/session-expiry behavior.

Source Surface Coverage Inventory

Every item below must have automated lane evidence, simulator evidence, manual evidence, or an open finding explaining why it cannot yet be proved locally.

  • pos: SDK host launches, API client wiring, local proxy base URL, happy-path transaction surfaces, empty data, invalid data, and API failure handling.
  • pos local backend: Firebase local config, SDK transport profile, merchant API proxy base, terminal mTLS proxy base, seeded org/store/register IDs, and backend request correlation are recorded before PASS.
  • pos primary SDK workflows: checkout, catalog, customer, and receipt keep validator-backed contract proof tied to PeakPosClientSurface and require the local-backend-xctest-evidence.md PASS gate before executable simulator/device evidence may be promoted.
  • pos denied/offline/retry: denied auth, stale session, offline invoice, offline inventory, and duplicate retry evidence must prove recoverable UI, exact backend mutation/no-mutation effect, idempotency or request-ID correlation, and no duplicate side effects before any PASS promotion.
  • pos auth: sign-in, session restore, session expiry, wrong tenant, revoked user, missing token, and local token propagation.
  • pos register: register view launch, tenant/store/register selection, unavailable register, permission denial, and empty register list.
  • pos terminal: terminal setup, terminal client requests, terminal enrollment, terminal identity, revoked/duplicate terminal, and terminal API failure.
  • pos terminal mtls: local mTLS material loading, missing certificate, expired certificate, renewal handoff, and failed mTLS connection evidence.
  • pos terminal onboarding: onboarding client success, invalid token, expired token, repeated enrollment, and local onboarding stub evidence.
  • pos notifications: notification authorization, token registration capture, invalid/missing token handling, duplicate registration behavior, local capture evidence, and APNs/FCM provider skip classification.

Manual Staging Checks

  • Verify TestFlight/staging app config.
  • Verify APNs/FCM, DeviceCheck/App Attest, keychain behavior, and real device constraints.
  • Verify Gateway iOS runtime only with approved staging setup.

Expected Evidence

  • Build/test output.
  • Simulator/device screenshots.
  • Local Firebase config identifier, tenant ID, SDK transport profile, API proxy base URLs, and .dev-logs/qa/reports path.
  • Backend request IDs plus org/store/register, transaction, customer, invoice, payment-link, inventory, receipt, or terminal IDs used for each PASS row.
  • Primary workflow evidence includes SDK contract version, route/deep-link identifier, contract names, backend request correlation, and whether evidence came from the Bazel lane validator or the local-backend XCTest PASS file.
  • Denied/offline/retry evidence includes the route, user-visible recovery copy, backend state effect, duplicate side-effect prevention, idempotency key or request ID, and the exact skip taxonomy if simulator/device replay is gated.
  • Skipped platform prerequisite notes using the simulator/device skip taxonomy.
  • XCTest artifact fields: Xcode version, simulator model/runtime, scheme/test plan, SDK artifact SHA, derived-data path, proxy URLs, org/store/register/ terminal IDs, transaction/refund/receipt IDs, request correlation IDs, XCTest result bundle path, screenshots/video path, tester, and timestamp.