V27 · Firebase emulator ready

Chạy Firebase emulator như một vùng kiểm chứng bắt buộc.

V27 biến các bước seed, rules, API smoke và audit boundary thành runbook local rõ ràng trước khi chạm môi trường thật.

Nguyên tắc

V27 không xem Firebase emulator là phụ lục kỹ thuật; emulator là vùng kiểm chứng bắt buộc trước khi dữ liệu Exixt chạm môi trường development/staging/production.

5 bước · npm run firebase:emulator:start:v27

Mọi luồng local phải giữ auth → route guard → consent gate → adapter → audit append. Emulator không được là đường tắt ghi thẳng dữ liệu.

install

Cài dependency và Firebase CLI

npm install && npx firebase --version

Có firebase CLI và package @firebase/rules-unit-testing/firebase-admin trong node_modules.

Guardrail: Không dùng production service account cho local emulator.

start-emulator

Khởi động Auth + Firestore emulator

npm run firebase:emulator:start:v27

Auth emulator ở 127.0.0.1:9099, Firestore emulator ở 127.0.0.1:8080, UI ở 127.0.0.1:4000.

Guardrail: Luôn dùng FIRESTORE_EMULATOR_HOST khi chạy seed/write test.

seed

Seed dữ liệu demo có boundary

EXIXT_FIRESTORE_EMULATOR_WRITE=1 FIRESTORE_EMULATOR_HOST=127.0.0.1:8080 npm run firestore:seed:admin:live:v27

Tạo participant demo, consent, submission, report, aggregate snapshot và audit event demo.

Guardrail: Script dừng nếu thiếu FIRESTORE_EMULATOR_HOST hoặc thiếu explicit write flag.

rules

Chạy rules unit test

npm run firestore:rules:test:live:v27

Các case allow/deny của participant, facilitator, organization, admin và anonymous đều đúng.

Guardrail: Rules fail thì không được coi emulator là hợp lệ.

api-smoke

Chạy API smoke test

npm run firebase:e2e:smoke:v27

Submit R4 demo và audit viewer demo trả metadata đúng boundary.

Guardrail: Smoke test không được đọc raw answers từ audit viewer.