Skip to content
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
24f3165
feat(functions): add emergency sms fanout
claude Apr 28, 2026
abf81d7
test(functions): add phase 7 drill coverage
claude Apr 28, 2026
b65d09f
chore(functions): harden audit health check parsing
claude Apr 28, 2026
4d49074
chore(scripts): add staff totp audit
claude Apr 28, 2026
0be9f8e
docs(phase7): update progress and learnings
claude Apr 28, 2026
8ddc5f8
chore(deps): refresh lockfile
claude Apr 28, 2026
06382cd
docs(phase8b): add signal ingest and observability design
Apr 28, 2026
1626e96
docs(phase8b): refine signal control design
Apr 28, 2026
0c055fc
feat(phase8b): expand hazard signal schemas
Apr 28, 2026
790a245
fix(phase8b): align hazard schema review feedback
Apr 28, 2026
24f5875
feat(phase8b): add hazard signal projection rules
Apr 28, 2026
02cbc96
test(phase8b): improve hazard signal status rules test coverage
Apr 28, 2026
154561f
feat(phase8b): add hazard signal projector\n\nPure projection functio…
Apr 28, 2026
17cd91d
fix(phase8b): compute validUntil from winning signals only
Apr 28, 2026
43dc4a7
refactor(phase8b): harden projector boundary validation and test cove…
Apr 28, 2026
94deec1
feat(phase8b): add hazard signal callables\n\ndeclareHazardSignal and…
Apr 28, 2026
ea25c37
fix(phase8b): guard clear callable with existence and status checks\n…
Apr 28, 2026
f5b4860
feat(phase8b): add hazard signal expiry sweep\n\nScheduled trigger (e…
Apr 28, 2026
4c6e7ca
feat(phase8b): add pagasa signal poller
Apr 28, 2026
b147e20
feat(phase8b): add signal dead-letter replay callable
Apr 28, 2026
c203723
feat(phase8b): add cost snapshot writer
Apr 28, 2026
d790e69
docs(phase8b): record signal control delivery
Apr 28, 2026
8419ed0
Merge branch 'main' into codex/phase7-publish
Exc1D Apr 28, 2026
22d9130
fix(functions): resolve TypeScript errors and regenerate firestore.rules
Apr 28, 2026
27b74f2
fix(test): align expiry sweep tests with conditional replay behavior
Apr 28, 2026
9282df8
fix(phase8b): filter unresolved dead letters to avoid reprocessing
Apr 28, 2026
62023aa
fix(firestore.rules): remove manually added hazard_signal_status bloc…
Apr 28, 2026
2d2b981
fix(phase8b): address PR #80 review comments\n\n- Deduplicate MFA aud…
Apr 28, 2026
cae8f12
fix(phase8b): address remaining PR #80 review comments
Apr 28, 2026
b90ce75
fix: address CodeRabbit comments on PR #80
Apr 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/learnings.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@
- Fail explicitly on missing auth/scope; no permissive fallbacks.
- Normalize fields on both read and write paths.
- Verify Firestore Rules function signatures match call sites.
- Staff MFA audits must inspect `multiFactor.enrolledFactors` directly; `CustomClaims.mfaEnrolled` can record intent, but custom claims are not the source of truth for current TOTP enrollment or factor type.
- Staff MFA audits must inspect `multiFactor.enrolledFactors` directly; custom claims only describe role and access, not whether TOTP is actually enrolled.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

## Testing

- `vi.hoisted()` mocks must be created inside the hoisted callback.
- `requestAnimationFrame` in Vitest: capture callback explicitly, don’t assume timers.
- A passing test is not enough; confirm it exercises the changed path.
- BigQuery summary jobs should keep the core dependency-injected; mocking `query()` directly is simpler than testing the scheduler wrapper.
- Never mix Admin SDK and Client SDK Firestore calls in the same context.
- Callable error handling: use runtime client code (`not-found`), not internal enum names.
- Wrap `waitFor(() => expect(...))` assertion body in braces to avoid `no-confusing-void-expression`.
Expand Down
1 change: 1 addition & 0 deletions docs/progress.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
- **Code quality + security refactor (2026-04-23)** — 14 `catch (err: unknown)` conversions, error logging improvements, 8 new https-error tests.
- **Phase 5 Responder MVP (2026-04-23)** — Decline callable, queue/detail hooks, Playwright smoke (6 pass, 4 skipped). Fixed stale `enforceAppCheck` binary causing E2E `internal` error.
- **3-Step Wizard Wiring (2026-04-23)** — WizardContainer + SubmissionPanel. 101 tests pass.
- **Phase 8B cost snapshot writer (2026-04-28)** — Scheduled BigQuery summarizer now writes `costSnapshot` into `system_health/latest`; focused writer test passes.
- **Citizen PWA Firebase env fallback (2026-04-22)** — Graceful degradation when `VITE_FIREBASE_*` vars missing.
- **Map Tab (2026-04-22)** — Full Leaflet implementation with public incident + own-report layers.
- **PR #56 Review Fixes (2026-04-22)** — 18 fixes across citizen PWA: guard empty report ref, canvas blob preview for CodeQL, offline state fixes, schema alignment.
Expand Down
Loading
Loading