-
eb4bab0b90
perf(functions): B6b bound the unbounded couple scanners (#10)
null
2026-07-08 00:05:32 -0500
-
d601498e96
build(functions): B6a bump firebase-functions to v7 (latest)
null
2026-07-08 00:03:17 -0500
-
a5af32d3d2
refactor(functions): B4+B5 migrate webhook to v2 + pin onUserDelete on v1
null
2026-07-08 00:00:29 -0500
-
e0c2d67373
refactor(functions): B3 migrate 12 callables to v2 + harden
null
2026-07-07 23:58:32 -0500
-
6681bf1518
refactor(functions): B2 migrate 8 scheduled functions to v2 + harden
null
2026-07-07 23:50:59 -0500
-
4040abbf28
refactor(functions): B1 migrate 13 Firestore triggers to v2 + harden
null
2026-07-07 23:46:17 -0500
-
fbf4e7957c
build(functions): B0 v2 foundation — global options, shared push helper, structured logging
null
2026-07-07 23:36:16 -0500
-
6af9c15833
chore(repo): keep QA fixture docs local-only
null
2026-07-07 23:28:45 -0500
-
694294c2e5
fix(ui): remove duplicate answer back button
null
2026-07-07 23:09:14 -0500
-
5d03fd98be
chore(qa): keep fixture credentials in a gitignored local file, not the repo
null
2026-07-07 22:32:37 -0500
-
3acba138a3
chore(functions): rebuild dist for deployed daily-question + game-copy changes
null
2026-07-07 22:31:02 -0500
-
15e4579410
docs(qa): R30 polish/UX/seed round — reports, coverage, review §5.1
null
2026-07-07 22:06:36 -0500
-
ca67187754
fix(ui): strip internal 'mc' token from the reveal-screen category chip too
null
2026-07-07 22:04:54 -0500
-
f2321d3536
fix(functions): server-authoritative, mode-aware, deterministic daily question
null
2026-07-07 21:57:22 -0500
-
fda53175a9
feat(games): nudge + per-game copy + score a11y batch C4 from UX review
null
2026-07-07 21:50:39 -0500
-
8e8223ca97
+
null
2026-07-07 21:47:20 -0500
-
cf8f82357e
feat(games): game-loop retention batch C3 from UX review
null
2026-07-07 21:42:39 -0500
-
9d0a0c7fdf
fix(onboarding,challenges): funnel + gating batch C2 from P3/UX review
null
2026-07-07 21:24:27 -0500
-
4ab79d34c4
fix(ui,games): defect-polish batch C1 from P3/UX review
null
2026-07-07 21:03:22 -0500
-
d554483ef2
docs(qa): R29 games/mechanics/retention/UI review round
null
2026-07-07 19:54:05 -0500
-
c36a101d38
refactor(cleanup): dead code + hygiene batch from games review
null
2026-07-07 19:48:56 -0500
-
e5868bd6b1
fix(games,daily): correctness batch from games review
null
2026-07-07 19:41:41 -0500
-
5013c2cd09
docs: update standardization review to completed state
null
2026-07-06 22:19:33 -0500
-
0c59000065
refactor(ui): remove raw Firestore listeners from Daily/Partner VMs
null
2026-07-06 22:18:30 -0500
-
cce2687312
refactor(ui): inject AuthRepository instead of FirebaseAuth.getInstance()
null
2026-07-06 22:12:47 -0500
-
89cbd7cb55
refactor(functions): type callable payloads instead of `any`
null
2026-07-06 22:06:45 -0500
-
c71817241c
build: adopt Gradle version catalog (libs.versions.toml)
null
2026-07-06 22:05:10 -0500
-
fcc0d699fb
refactor(data): finish Firebase Tasks→.await() across the data layer
null
2026-07-06 22:00:55 -0500
-
f160f141d6
chore(gitignore): ignore .code-workspace; cleanup Firebase data source dead code
null
2026-07-06 21:41:54 -0500
-
39fbd943ff
docs: standardization & modernization review
null
2026-07-06 21:36:59 -0500
-
7507ca63e4
refactor(data): modernize Firebase Tasks to .await() (safe subset)
null
2026-07-06 21:36:09 -0500
-
61a8609298
refactor(ui): standardize on collectAsStateWithLifecycle
null
2026-07-06 21:30:48 -0500
-
eeac3c9383
build(functions): compile dist for outcome aggregation
null
2026-07-06 21:10:02 -0500
-
a79db9474b
docs(crypto): key-storage migration design (design-only, gated)
null
2026-07-06 21:08:52 -0500
-
943507b72a
feat(functions): privacy-safe outcome-stat aggregation
null
2026-07-06 21:06:57 -0500
-
95c3bc21fa
feat(dates): Firestore-backed date catalog + sponsored ideas
null
2026-07-06 21:02:22 -0500
-
6ecc98eec2
feat(paywall): free-trial/intro pricing, gift framing, one-time SKUs
null
2026-07-06 20:53:15 -0500
-
8464cb9219
feat(analytics): record specific notification type on push-opened
null
2026-07-06 20:48:49 -0500
-
368d8c455f
fix(streak): gentle day-based streak with a grace day + earlier milestones
null
2026-07-06 20:46:14 -0500
-
f0a05f779b
feat(widget): Glance "Today" home-screen widget
null
2026-07-06 20:40:28 -0500
-
55699e17ed
feat: security hardening, CI, analytics, invite deep links, solo mode, weekly recap
null
2026-07-06 20:33:38 -0500
-
f68cab5cf2
feat: signup flow, age gate, user model updates, how well screen, game prompt banner
null
2026-07-02 02:42:55 -0500
-
24823a39f0
feat: question discussion components, conversation VM, wheel session, settings, text input limits
null
2026-07-01 21:39:00 -0500
-
09fea873e2
fix: DateReflectionScreen and FirestoreDateReflectionDataSource updates
null
2026-07-01 20:01:01 -0500
-
896bf26b28
feat: date reflection reveal, UI upgrade plan, seed updates, ime-scan script
null
2026-07-01 04:12:58 -0500
-
222bbd1c57
chore(db): update seed database
null
2026-07-01 02:55:38 -0500
-
b115cd2f66
chore(seed): update daily question content
null
2026-07-01 02:55:34 -0500
-
e1a8528489
docs: restructure README screenshot table to daily-question stages + core screens
null
2026-07-01 02:55:30 -0500
-
d49d67ecbd
docs: add reveal-ready brand art + screenshot
null
2026-07-01 02:55:24 -0500
-
31a2652e48
feat(art): add illustration_daily_reveal_ready (light + dark)
null
2026-07-01 02:55:20 -0500
-
d03e071098
feat(home): escalate daily-question art by state (partner prompt → reveal ready)
null
2026-07-01 02:55:15 -0500
-
6d0a52641c
feat(daily): rename modes to weekday theme names (Mood Check Monday, Tiny Win Tuesday, etc.)
null
2026-07-01 02:55:11 -0500
-
b19394b900
chore(seed): update daily question content to v61 weekly format
null
2026-07-01 02:20:09 -0500
-
a1b77f6786
docs: update README home screenshot alt text
null
2026-07-01 02:20:04 -0500
-
18490f990e
docs: update home screenshots (ready + your-turn states)
null
2026-07-01 02:19:57 -0500
-
611481786f
fix(home): update PairedHomePreview to BOTH_ANSWERED state
null
2026-07-01 02:19:35 -0500
-
cbffaeca9f
test(settings): ChangePasswordViewModelTest — validation + typed exception mapping
null
2026-07-01 02:19:31 -0500
-
e585856228
feat(nav): wire ChangePasswordScreen composable into AppNavigation
null
2026-07-01 02:19:26 -0500
-
06c94f55f4
feat(nav): add CHANGE_PASSWORD route constant
null
2026-07-01 02:19:22 -0500
-
a096ca15d1
feat(settings): add Change password row to SecurityScreen (email/password accounts only)
null
2026-07-01 02:19:18 -0500
-
30000e7150
feat(settings): ChangePasswordScreen + ViewModel with validation and typed error mapping
null
2026-07-01 02:19:14 -0500
-
7fe095ef3b
feat(auth): delegate changePassword in FirebaseAuthRepositoryImpl
null
2026-07-01 02:19:11 -0500
-
54608796e1
feat(auth): add changePassword to AuthRepository interface
null
2026-07-01 02:19:04 -0500
-
d1e23f24ee
feat(auth): wire changePassword with reauth + typed exceptions in FirebaseAuthDataSource
null
2026-07-01 02:19:01 -0500
-
07eaf3c989
feat(auth): ChangePasswordException sealed class with typed failure reasons
null
2026-07-01 02:18:50 -0500
-
2ecff95c12
docs: update home-dark screenshot
null
2026-07-01 01:50:54 -0500
-
7ff405cad6
feat(notifications): remove partner avatar from notifications (privacy)
null
2026-07-01 01:50:50 -0500
-
f47fa3cdbd
test(auth): ForgotPasswordViewModelTest — typed exception + blank-email coverage
null
2026-07-01 01:50:46 -0500
-
1a6cdaa078
feat(auth): enumeration-safe forgot-password confirmation copy
null
2026-07-01 01:50:40 -0500
-
79bfea7cfb
feat(auth): use typed PasswordResetException in ForgotPasswordViewModel
null
2026-07-01 01:50:36 -0500
-
885af0b9e4
feat(auth): wire typed PasswordResetException into FirebaseAuthDataSource
null
2026-07-01 01:50:32 -0500
-
a1d2ea2db8
feat(auth): typed PasswordResetException sealed class
null
2026-07-01 01:50:27 -0500
-
7aa72532b7
docs: update home-dark screenshot
null
2026-07-01 00:21:54 -0500
-
f117da16c8
test(home): 10 unit tests for computeDailyQuestionState
null
2026-07-01 00:21:42 -0500
-
0feb72eaf0
feat(home): reveal-waiting art swap, copy polish, extracted computeDailyQuestionState
null
2026-07-01 00:21:33 -0500
-
b15e696388
docs(questions): v6 — patch_policy and mass_rewrite_policy metadata fields
null
2026-06-30 23:48:23 -0500
-
8897e103b6
docs(questions): v6 — Patch Mode Required, Mass Rewrite Exception
null
2026-06-30 23:48:18 -0500
-
3b49b76b33
docs(questions): v7 — Patch Discipline Checks, Fun But Grounded Checks
null
2026-06-30 23:48:14 -0500
-
1bdbed4fbc
docs(questions): v8 — Daily Patch Discipline, Fun But Grounded
null
2026-06-30 23:48:10 -0500
-
7f20fa8ee7
docs(questions): v6 — Patch Discipline, Fun But Grounded gate
null
2026-06-30 23:48:05 -0500
-
94a7feeb43
docs(questions): add Daily Patch Review Loop Policy v1 and Research Notes v2
null
2026-06-30 23:48:01 -0500
-
fd5fae7444
docs: update README with E2EE chat, backup, and partner-assisted restore
null
2026-06-30 23:46:02 -0500
-
39be5dd238
docs: R25-d entry for pruneDeadTokens implementation
null
2026-06-30 23:45:52 -0500
-
1daf0c2bf5
docs(questions): v5.1 — Research-Informed Fun Rules, Daily Game Mechanics, Daily Content Metadata
null
2026-06-30 23:45:47 -0500
-
d8408a2c44
chore(functions): rebuild dist with pruneDeadTokens wired into all 19 push sites
null
2026-06-30 23:45:42 -0500
-
afd1eab299
feat(users): wire pruneDeadTokens into onUserDelete
null
2026-06-30 23:45:36 -0500
-
2488e18790
feat(notifications): wire pruneDeadTokens into streakReminder
null
2026-06-30 23:45:31 -0500
-
40e4f48131
feat(notifications): wire pruneDeadTokens into dailyQuestionReminder
null
2026-06-30 23:45:26 -0500
-
355edd0887
feat(couples): wire pruneDeadTokens into acceptInviteCallable
null
2026-06-30 23:45:21 -0500
-
f55c49010d
feat(notifications): wire pruneDeadTokens into sendThinkingOfYouCallable
null
2026-06-30 23:36:09 -0500
-
5306d40c72
feat(notifications): wire pruneDeadTokens into sendGentleReminderCallable
null
2026-06-30 23:35:59 -0500
-
e35b8151c6
feat(notifications): wire pruneDeadTokens into reengagement
null
2026-06-30 23:35:49 -0500
-
35eca7d08d
feat(notifications): wire pruneDeadTokens into gameRetention
null
2026-06-30 23:35:42 -0500
-
7b5790da43
feat(billing): wire pruneDeadTokens into onEntitlementChanged
null
2026-06-30 23:35:38 -0500
-
c7181e276f
feat(questions): wire pruneDeadTokens into onMessageWritten
null
2026-06-30 23:35:29 -0500
-
8b3356e60d
feat(questions): wire pruneDeadTokens into onAnswerWritten
null
2026-06-30 23:35:24 -0500
-
9ca9f19c51
feat(questions): wire pruneDeadTokens into onAnswerRevealed
null
2026-06-30 23:35:20 -0500
-
13c0769efb
feat(games): wire pruneDeadTokens into onGameSessionUpdate
null
2026-06-30 23:35:15 -0500
-
ffa038ca56
feat(dates): wire pruneDeadTokens into onDateReflectionWritten
null
2026-06-30 23:35:07 -0500
-
2aa08efd39
feat(dates): wire pruneDeadTokens into onDateHistoryCreated
null
2026-06-30 23:35:00 -0500