Closer/firestore-tests
null 943507b72a feat(functions): privacy-safe outcome-stat aggregation
aggregateOutcomeStats (scheduled) rolls up per-couple check-in deltas
(couples/{id}/outcomes/day_30|60|90) into the "X% feel closer in N weeks" stat
WITHOUT reading any E2EE content — only the self-reported deltas.

Privacy: counts/percentages only (no couple id or individual scores);
minimum-cohort suppression (N<50 → window omitted, no percentages); EXPORT-ONLY
via the top-level aggregate_stats collection, now explicitly deny-all in
firestore.rules (owner reads via console).

Pure aggregate()/extractCoupleOutcome() unit-tested incl. below-threshold
suppression + a no-PII assertion (6 tests); rules deny client read/write of
aggregate_stats (2 tests). Full functions 53/53, rules 121/121.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:06:57 -05:00
..
jest.globalSetup.ts fix: Firestore rules hardening, recovery phrase strength, test cleanup (batch v0.2.12) 2026-06-19 21:08:55 -05:00
jest.globalTeardown.ts feat: update PrivacyScreen, add Firestore test scripts, gitleaks audit artifacts 2026-06-19 03:45:53 -05:00
package-lock.json fix: Firestore rules hardening, recovery phrase strength, test cleanup (batch v0.2.12) 2026-06-19 21:08:55 -05:00
package.json fix: Firestore rules hardening, recovery phrase strength, test cleanup (batch v0.2.12) 2026-06-19 21:08:55 -05:00
rules.test.ts feat(functions): privacy-safe outcome-stat aggregation 2026-07-06 21:06:57 -05:00
tsconfig.json feat: strict E2EE — encryption migration, Firestore rules enforcement, version 2 protocol (batch v0.2.11) 2026-06-19 20:53:52 -05:00