Peak POS iOS QA Checklist
Prerequisites
- Local QA smoke passes.
PeakPosSdk.xcframeworkis 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, orplatform-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 apeakpos://route, the shared SDK contract version, workflow-specificPeakPosSdkcontract 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 toPeakPosClientSurfaceand require thelocal-backend-xctest-evidence.mdPASS 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/reportspath. - 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.