Skip to content
79%
Epic complete 1 pts since last snapshot
47 shipped23 done, unverified2 staged2 in review
M3 · BOUN-11291Tonyfieldwork-processing, local-queue

F3.1 — Platform Foundation (fieldwork-api)

DoneMedium confidence

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.

100%
Unchanged since last snapshot
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 rulesno ticket or code
  • A request without a valid Firebase JWT or scope is rejected with 401/403 at the gatewayno ticket or code
  • The cell registry returns identical cell/brand data to today's hardcoded constants; refresh requires wpp:adminno 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.