F3.1 — Platform Foundation (fieldwork-api)
Stand up the wpp-api repo and its platform layer so business-logic migration can begin: SAM/CircleCI scaffold with lint-enforced layer boundaries, shared config/logging/error handling, Firebase JWT auth with wpp:user/wpp:admin scopes, the full test harness (Firebase emulators + LocalStack + OpenAPI docs), all repository interfaces, and the Firestore-backed cell registry that replaces the hardcoded SURVEY_CELLS/BRAND_NAME constants.
The only tracked story is an end-to-end Playwright test proving the discover/QC/metrics Lambdas and the fieldwork-dashboard agree on a live snapshot object via the Firebase emulator and LocalStack S3; it evidences the integration-suite AC directly, but the JWT-gateway auth, CI lint-boundary, and cell-registry ACs central to "platform foundation" have no PR evidence attached to this ticket specifically.
- Since last activity
- 14d
- Oldest staged work
- —
- Acceptance criteria covered
- 1/4
- PRs open
- 0
Stories
1 tracked · 1 shipped
Acceptance criteria
- CI enforces build/lint/tests and layer-boundary import rulesno signal
- A request without a valid Firebase JWT or scope is rejected with 401/403 at the gatewayno signal
- The cell registry returns identical cell/brand data to today's hardcoded constants; refresh requires wpp:adminno signal
- Every repository implementation is exercised by the integration suite against Firebase emulators / LocalStack S3, including SQS redelivery idempotencyBOUN-11663, fieldwork-processing#53covered
Gaps
- CI enforces build/lint/tests and layer-boundary import rules — no ticket or code
- A request without a valid Firebase JWT or scope is rejected with 401/403 at the gateway — no ticket or code
- The cell registry returns identical cell/brand data to today's hardcoded constants; refresh requires wpp:admin — no ticket or code
Criteria are read from the ticket description on every run. A gap closes on its own once a story or PR matching it appears — nothing here is closed by hand.