Commit Graph

  • 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