This website requires JavaScript.
c7140b1e10
qa(r3): Pass A + Pass B fully re-verified live
null
2026-06-25 11:18:07 -0500
ddecfabcd9
qa(r3): How Well verified (5/5, B-001 holds); log B-004 intermittent guesser-stuck on WaitingForPartner
null
2026-06-25 11:06:02 -0500
185d27b921
qa(r3): re-QA round 3 — nav + premium + Desire Sync/This-or-That fixes re-verified live
null
2026-06-25 10:46:16 -0500
6eeb86320b
qa(fix-phase): all P0-P3 FIXED (P3x4: A-003/B-003/E-002/F-OBS); severity board all clear
null
2026-06-25 10:14:18 -0500
8e08823e83
fix(memorylane): propagate snapshot-listener errors so the screen doesn't hang (F-OBS P3)
null
2026-06-25 10:14:17 -0500
46010508a9
fix(notifications): route partner_left/partner_deleted_account to Home (E-002 P3)
null
2026-06-25 10:14:16 -0500
f63188d97a
fix(desiresync): clearer privacy counts on reveal (B-003 P3)
null
2026-06-25 10:14:15 -0500
f8ae15a41b
fix(play): hide Premium badge on Desire Sync/Memory Lane cards when couple has premium (A-003 P3)
null
2026-06-25 10:14:14 -0500
0c67c505be
qa(fix-phase): mark B-002/C-CC-001/C-DS-001 (P2) FIXED+verified; P0-P2 all clear, P3x4 remain
null
2026-06-25 09:58:27 -0500
a94f44d3ec
fix(home): 'Play now' resumes the waiting game, not the generic hub (B-002 P2)
null
2026-06-25 09:58:26 -0500
1fe4dea9c1
fix(desiresync): theme-aware reveal text for dark mode (C-DS-001 P2)
null
2026-06-25 09:58:25 -0500
edc00d2a5f
fix(nav): drop Connection Challenges from shellBackRoutes (C-CC-001 P2)
null
2026-06-25 09:58:24 -0500
1108a57c4a
qa(fix-phase): mark B-001 + C-NAV-001 (both P1) FIXED+verified; severity P1 0 open/4 fixed
null
2026-06-25 09:37:38 -0500
a82c43ad90
fix(rules): allow completedByUsers on session update so finished games close (B-001 P1)
null
2026-06-25 09:37:37 -0500
ebd3b2ed1f
fix(nav): clear onboarding/auth back stack on entry->Home (C-NAV-001 P1)
null
2026-06-25 09:37:36 -0500
4e49b92be2
qa(round2-B2): Date Match PASS (3 mutual matches + live It's-a-match push + Matches view); PASS B COMPLETE all 7 games; Sam reverted to free
null
2026-06-24 23:31:18 -0500
01feee8321
qa(round2-B2): Spin the Wheel PASS (free partner enters; spin->Date Night->both answer 10->reveal matches both, no crash)
null
2026-06-24 23:22:25 -0500
f79b38c07c
qa(round2-B2): Memory Lane PASS (capsule create+seal, encrypted at rest enc:v1:, cross-device sealed view, no crash); D1 capsule ciphertext verified live
null
2026-06-24 23:15:23 -0500
e76a84f5da
qa(round2-B2): C-NAV-001 P1 CONFIRMED — back from Home resurfaces onboarding/auth (back stack not popped after login); clean cold-start repro
null
2026-06-24 23:07:28 -0500
1303597d4a
qa(round2-B2): Connection Challenges PASS (day-cycle synced both, streak ok, no crash); C-CC-001 P2 (duplicate header + double back)
null
2026-06-24 23:03:15 -0500
c71d858283
qa(round2-B2): Desire Sync PASS (free partner enters via A-001; 3 mutual desires revealed correctly, mismatches hidden, results match); B-003 P3 (confusing counts), C-DS-001 P2 (dark contrast)
null
2026-06-24 22:57:50 -0500
3c9037d8e4
qa(round2-B2): How Well PASS (user-nav, predicted 4/5 w/ deliberate miss + scale, results match both, no crash); B-001 re-corroborated (Back to Play leaves session active)
null
2026-06-24 22:50:59 -0500
f8dc8119cb
qa(round2-B2): This or That PASS (user-nav, 5/5, results match); B-001 escalated P3->P1 (Back to Play doesn't close finished session -> blocks next game); B-002 P2 (Play now lands on hub)
null
2026-06-24 22:42:18 -0500
8fa922fb70
qa(round2): RESTART Pass B from game #1 (play-as-user) — coverage reset, build reinstalled both devices
null
2026-06-24 22:30:09 -0500
21504098c2
qa(plan): Pass B — play-as-the-user mindset; report-first-then-workaround on any broken flow
null
2026-06-24 22:27:40 -0500
f9c6e42d92
qa(round2): Pass B — How Well full two-device playthrough PASS (5/5 predict, results match both)
null
2026-06-24 22:22:48 -0500
60a6ce1dbf
docs(qa): continue across auto-compaction without the user (file-state is authoritative)
null
2026-06-24 22:13:48 -0500
693ecd28ef
qa(round2): Pass B — This or That full two-device playthrough PASS (5/5, results match both, no crash)
null
2026-06-24 22:10:15 -0500
e7073fc5f8
qa(round2): R2-1 done — A-001 re-verified all features + free-gate; D-001 fixed. Pass B next
null
2026-06-24 22:04:54 -0500
b05a72605e
fix(rules): add capsules + challenges member rules (D-001 P1) — Memory Lane/Challenges were broken
null
2026-06-24 22:02:40 -0500
efe0ddbf29
qa: record standing authorization (deploy firestore rules + admin access)
null
2026-06-24 21:51:45 -0500
bbd7ef0806
docs(qa): define per-pass chunk granularity (sub-batch to one context window)
null
2026-06-24 21:47:04 -0500
84dd5f1152
docs(qa): senior-QA review additions — Pass F, env/matrix, migration, iOS-native dims
null
2026-06-24 21:44:02 -0500
e907453f3f
docs(plan): add Part 2 (build iOS to parity) + Part 3 (iOS QA) — ClaudeiOSPlan.md
null
2026-06-24 21:37:26 -0500
16ba464752
docs(qa): autonomous run-to-completion mode — never stop; unblock by fixing; finish to flawless
null
2026-06-24 21:28:45 -0500
99f0ae0c49
docs(qa): Pass C also checks navigation from every entry point + back-stack/double-back
null
2026-06-24 21:26:23 -0500
f121eab67f
docs(qa): require a full one-time playthrough of each game (not just launch)
null
2026-06-24 21:24:08 -0500
6ca65ce7e9
qa(round1): close out — all P0-P2 fixed; P3 + deferred coverage tracked for round 2
null
2026-06-24 21:08:22 -0500
ce12abb1a6
fix(notifications): route daily_question + challenge_day_ready taps (E-001 P2)
null
2026-06-24 21:07:32 -0500
58208fd443
qa(round1): A-001 fixed+verified (couple-shared premium); A-003 P3 logged (static badge)
null
2026-06-24 20:53:39 -0500
e8892a9669
fix(premium): couple-shared premium everywhere (A-001)
null
2026-06-24 20:52:22 -0500
c54ceb16c3
qa(round1): Pass B games launch sweep — no crashes; stale session recovery verified (B-001 P3)
null
2026-06-24 20:04:54 -0500
452aaf787a
qa(round1): Pass A complete — couple-shared premium gap (A-001, P1)
null
2026-06-24 19:59:04 -0500
64f0a7e6c8
docs(qa): save full-app QA playbook (5 passes: premium, games, visual, security, notifications)
null
2026-06-24 19:43:19 -0500
6580299f05
feat(packs): route pack Discuss to the unified conversation
null
2026-06-24 18:55:40 -0500
7a9ff31ae6
feat(chat): couple-shared premium gating for sending media + reactions
null
2026-06-24 18:52:50 -0500
f29d4699ca
feat(chat): typing indicator
null
2026-06-24 18:47:39 -0500
5b9596e042
feat(chat): message reactions + delete (unsend) via long-press menu
null
2026-06-24 18:44:13 -0500
7f1b938aa5
feat(chat): read receipts (Seen) via the conversation reads map
null
2026-06-24 18:38:42 -0500
3aa182a466
feat(chat): voice playback progress bar + 2-min recording cap
null
2026-06-24 18:35:32 -0500
cfea8f0d41
feat(chat): send/upload feedback + message pagination
null
2026-06-24 18:32:01 -0500
3544b7a84a
feat(chat): message timestamps + day separators
null
2026-06-24 18:14:05 -0500
8a68ae3107
feat(chat): compress gallery/camera photos before encryption (EXIF-safe, skip GIFs)
null
2026-06-24 18:10:24 -0500
11a4c7deda
feat(chat): RichContentTextField for keyboard GIF/sticker/Bitmoji insertion, tap-to-enlarge images
null
2026-06-24 17:37:13 -0500
dbf7ae662b
chore(config): coil-gif dependency, RECORD_AUDIO permission, firestore rules allow voice type
null
2026-06-24 16:34:53 -0500
3ad725ca8a
feat(voice+media): voice recording/playback UI, GIF/sticker support, keyboard content receiver
null
2026-06-24 16:34:48 -0500
c20745e82a
feat(voice): data layer — voice message model, sendVoiceMessage, durationMs field
null
2026-06-24 16:34:38 -0500
29beff1702
build(functions): rebuild dist from source — revenueCatWebhook ack-after-process, acceptInvite strict E2EE, onMessageWritten conversations path, onGameSessionUpdate both-partner notify
null
2026-06-24 16:15:30 -0500
060ef69ca5
feat(rules+trigger): conversations Firestore rules, onMessageWritten listens on conversations path, gitignore
null
2026-06-24 16:14:18 -0500
e4cdbac7b1
refactor(notifications): questionId → conversationId across bubble, deep link routing, FCM handling
null
2026-06-24 16:14:07 -0500
c85e55a790
feat(nav): Messages replaces Question Packs in bottom bar, conversation route with deep link, Play Hub hosts Packs
null
2026-06-24 16:13:58 -0500
33baf220e4
feat(conversations): UI — Messages inbox, conversation screen, view models, chat components
null
2026-06-24 16:13:52 -0500
db5b8a5f8a
feat(conversations): data layer — domain model, Firestore data source, repository, DI bindings
null
2026-06-24 16:13:45 -0500
4e2c3fdf0d
fix: rate limiter bump (20/day, 100/week), firestore rules for image messages, storage rules for chat_media, gitignore ClaudeReport
null
2026-06-24 15:20:44 -0500
608ddcfc5b
feat(bubble): drag-to-dismiss zone, no auto-timeout, dismiss on conversation enter
null
2026-06-24 15:20:38 -0500
adb61715fe
feat(home): partner photoUrl loaded and displayed in identity card
null
2026-06-24 15:20:32 -0500
a8fbbaa286
feat(notifications): deep link routing from FCM data extras, onMessageWritten includes author name + photo
null
2026-06-24 15:20:24 -0500
06e4d609f2
feat(chat): image picker (gallery + camera), encrypted image rendering, messenger-style avatars on consecutive bubbles
null
2026-06-24 15:20:18 -0500
c9aa5f1e12
feat(chat): encrypted image messages — Storage upload/download, Firestore send/load, domain model with type+mediaUrl
null
2026-06-24 15:20:11 -0500
609ced4095
feat(notifications): FCM token registration on auth, Android 13 permission request, in-app chat bubble overlay, game results notification copy
null
2026-06-24 11:47:49 -0500
0cb3d44f0d
fix(reveal): partner option labels, release-key read rules, thread status uppercase, session id propagation, notification deep links, and re-open guard
null
2026-06-24 10:02:54 -0500
77208ff1e6
fix(daily-question): deterministic per-day offset replaces RANDOM(); shared DailyQuestionResolver; auth profile fallback
null
2026-06-23 22:55:55 -0500
6d74c6acec
feat(brand): primaryMessage constant + rotator holds flagship slogan 3x longer
null
2026-06-23 22:39:31 -0500
7923835861
docs(brand): update privacy slogan in CloserBrandCopy
null
2026-06-23 22:21:25 -0500
3f22a38e18
docs(readme): update privacy slogan
null
2026-06-23 22:19:39 -0500
9269a769be
docs(readme): update privacy slogan
null
2026-06-23 22:17:42 -0500
6e9cdfe8f6
docs(readme): fix slogan grammar — security → securely
null
2026-06-23 22:15:57 -0500
06e09da596
docs(readme): add privacy slogan to header
null
2026-06-23 22:14:36 -0500
e5c05abe90
fix(settings): partner card visual states — paired vs unpaired colors, border, avatar fallback
null
2026-06-23 19:35:35 -0500
272c8997d0
refactor(ui): celebration overlay polish, activity screen layout, home screen streak dialog, pairing success cleanup
null
2026-06-23 19:26:41 -0500
17d7489dd8
feat(engagement): streak milestones, celebration overlays, Together screen, avatar in notifications
null
2026-06-23 18:23:49 -0500
d4b20a9845
feat(e2ee): encrypt date plan content; live answer observation; own-thread-answer decrypt; strict rules
null
2026-06-23 17:47:07 -0500
039752d691
refactor(e2ee): remove v0/v1 migration paths, fail-closed decrypt, strict-only rules
null
2026-06-23 17:06:23 -0500
17c7ed60b9
fix(nav): tab-switch routing prevents stacking tabs; fix(crash): runCatching around getUser/getCoupleForUser across 6 screens
null
2026-06-23 14:35:01 -0500
fe1808b36c
refactor(theme): full dark mode pass — CloserPalette, Theme, Color, and all surface screens
null
2026-06-23 13:56:27 -0500
7d3b47b3ba
fix(firestore): handle Timestamp type for lastAnsweredAt/createdAt in Android + Cloud Function
null
2026-06-23 12:40:00 -0500
424ef0e4ab
refactor(theme): replace hardcoded colors with Material3 theme-aware composables + adaptive iOS surface color
null
2026-06-23 12:31:59 -0500
e5c13b6b6d
feat(app-check): stable debug token via BuildConfig; feat(firestore): indexes for questions + bucket_list
null
2026-06-23 12:17:17 -0500
6977db7600
fix(wheel-reveal): error state with retry, null-safe uid/couple, close on snapshot error
null
2026-06-23 11:34:46 -0500
acaa8e635c
fix(challenges): null-safe activeChallenge guard; feat(this-or-that): skip question button
null
2026-06-23 11:31:17 -0500
b854c0b391
feat(history): tappable challenge/capsule cards, deep-link to capsule detail, emoji per game type, dedicated error card; feat(nav): MEMORY_LANE_CAPSULE route
null
2026-06-23 11:19:14 -0500
658ead38cd
security: App Check enforcement on all callables, fail-closed device integrity, no raw code in logs; release signing config; iOS RevenueCat log level
null
2026-06-23 10:56:42 -0500
015ac8eefe
feat(challenges): abandon challenge flow; fix(play): premium lock on history; fix(memory-lane): null-safe detail state
null
2026-06-23 10:51:14 -0500
58be8ed021
fix(game-history): disable replay on unsupported game types, clean up session title/route
null
2026-06-23 10:32:49 -0500
755077c7ba
feat(memory-lane): edit/delete capsules, custom unlock date picker, error snackbar
null
2026-06-23 10:11:25 -0500
9710bbc438
fix(challenges): error state snackbar, CTA routing for BOTH_COMPLETED/CHALLENGE_COMPLETE, README prem tiers
null
2026-06-23 10:04:53 -0500
c97371a12e
feat: challenge state machine, game screen updates, state machine tests
null
2026-06-22 22:02:39 -0500
c56dd53edd
feat: capsule/challenge data sources, game screens, wheel history + viewmodel
null
2026-06-22 21:38:18 -0500
17403b1a75
feat: challenges, desire sync, how well, memory lane, this or that screens
null
2026-06-22 21:24:02 -0500
3f5d7a5cc1
feat: nav, capsule data source, challenges, desire sync, question category, wheel history + viewmodel
null
2026-06-22 21:19:19 -0500