docs(date-memories): update QAPlan, Report, iOS parity plan, and glyph README (batch 8/8)
This commit is contained in:
parent
067155c108
commit
6179a46c96
|
|
@ -891,7 +891,13 @@ open**. No duplicates; rate limiter (20/day, 100/week) doesn't drop legit ones.
|
||||||
`memory_capsule_unlocked`(scheduled → capsule) & `memory_capsule_created` (if present → Memory Lane/locked capsule) ·
|
`memory_capsule_unlocked`(scheduled → capsule) & `memory_capsule_created` (if present → Memory Lane/locked capsule) ·
|
||||||
`challenge_day_ready`(→ Connection Challenges) & `challenge_day_completed` (if present → challenge progress) ·
|
`challenge_day_ready`(→ Connection Challenges) & `challenge_day_completed` (if present → challenge progress) ·
|
||||||
`outcome_reminder`(scheduledOutcomesReminder) · `reengagement`(reengagement/gameRetention) ·
|
`outcome_reminder`(scheduledOutcomesReminder) · `reengagement`(reengagement/gameRetention) ·
|
||||||
`gentle_reminder`(sendGentleReminderCallable) · `spki`(key identity/confirm → security/key screen) ·
|
`gentle_reminder`(sendGentleReminderCallable) ·
|
||||||
|
`thinking_of_you`(**sendThinkingOfYouCallable** ← partner-bubble sheet "💜 Thinking of you" → partner → Home;
|
||||||
|
generic copy, **no name**; rate-limited 10/rolling-24h; **quiet hours suppresses the push but still writes the
|
||||||
|
in-app/Together record**; tapping the push → Home, not a dead-end) ·
|
||||||
|
`date_reflection_partner`/`date_reflection_ready`(**onDateReflectionWritten** → partner → the date reflection;
|
||||||
|
"your turn" when one reflects, "ready to reveal" when both; gated `notifPartnerAnswered`+quiet hours) ·
|
||||||
|
`date_logged`(**onDateHistoryCreated** → partner → reflect on the just-logged date) · `spki`(key identity/confirm → security/key screen) ·
|
||||||
`subscription_entitlement_changed` & `security_recovery` (if present).
|
`subscription_entitlement_changed` & `security_recovery` (if present).
|
||||||
- **Game-notification suite (per game):** A starts from Play hub → B gets the start/join push (if supported) → B taps
|
- **Game-notification suite (per game):** A starts from Play hub → B gets the start/join push (if supported) → B taps
|
||||||
and lands on the correct join/waiting/active screen → B can join from there → A sees B joined/answered → both finish
|
and lands on the correct join/waiting/active screen → B can join from there → A sees B joined/answered → both finish
|
||||||
|
|
@ -1210,6 +1216,26 @@ The non-game interactive surfaces that have no functional home (Pass B is games
|
||||||
- **Relationship check-ins / Your Progress (outcomes):** baseline check-in (gated to show once), 30/60/90-day
|
- **Relationship check-ins / Your Progress (outcomes):** baseline check-in (gated to show once), 30/60/90-day
|
||||||
follow-ups, slider inputs persist (`submitOutcomeCallable`), the progress view renders patterns/milestones,
|
follow-ups, slider inputs persist (`submitOutcomeCallable`), the progress view renders patterns/milestones,
|
||||||
`scheduledOutcomesReminder` fires, "No baseline yet" → check-in dialog (C-DARK-UI-002 area). Submit + Skip both work.
|
`scheduledOutcomesReminder` fires, "No baseline yet" → check-in dialog (C-DARK-UI-002 area). Submit + Skip both work.
|
||||||
|
- **Partner bubble → quick-actions sheet (R22):** tapping the Home partner avatar opens the bottom sheet (NOT the old
|
||||||
|
dead-end into "Together"). Verify the glance (avatar + name + "💜 N nights · together since {Mon yyyy}"; streak clause
|
||||||
|
hidden when 0); **Message** → inbox, **Together** → feed, **Your relationship** → relationship settings, header →
|
||||||
|
partner page; **💜 Thinking of you** sends the nudge (Pass E `thinking_of_you`) → "Sent 💜" + in-flight disable +
|
||||||
|
friendly rate-limit/error message on failure; **unpaired account → the bubble still opens the invite flow** (never an
|
||||||
|
empty sheet); a missing/locked partner name (E2EE key absent) shows **"Your partner"**, never ciphertext/🔒.
|
||||||
|
- **"Together" feed is actionable (R22):** rows deep-link by type (message→inbox, game→Play, capsule→Memory Lane,
|
||||||
|
challenge→Challenges, date→Date Matches, answer/reveal→Today); affection/reminder rows (`thinking_of_you`/
|
||||||
|
`gentle_reminder`/`streak`) have no deeper target and stay non-tappable; opening the feed clears the unread dot;
|
||||||
|
sent `thinking_of_you` nudges show up here.
|
||||||
|
- **Date Memories & Replay (R22) — the private→reveal loop on real dates:** on a mutual match, **"We did this"**
|
||||||
|
→ logs `date_history` (idempotent; admin shows PLAINTEXT title/category + completedAt) → opens the reflection.
|
||||||
|
Both partners answer the 3 prompts privately; **admin read of the partner's `date_reflections/.../secure/payload`
|
||||||
|
is DENIED until both have reflected** (the privacy gate, same proof as the daily question) → then both **reveal
|
||||||
|
side-by-side** (real-time, no refresh). The **Date memories** timeline (entry on Date Matches) lists completed
|
||||||
|
dates newest-first with the reflection chip (Reflect / Waiting / View); empty state shows
|
||||||
|
`illustration_date_memories_empty`. Locked-key → placeholder, never ciphertext. **Home nudge:** while a completed
|
||||||
|
date has no reflection from you, Home surfaces a **"Reflect on your date with [partner] 💭"** card
|
||||||
|
(`glyph_date_replay`) → opens the Replay timeline; it clears once you've reflected. Notifications covered in
|
||||||
|
Pass E (`date_reflection_*` / `date_logged`).
|
||||||
- **Bucket List:** add / check-complete / edit / delete an item; empty state; both-device sync; at rest encrypted (D1);
|
- **Bucket List:** add / check-complete / edit / delete an item; empty state; both-device sync; at rest encrypted (D1);
|
||||||
premium state if applicable (A).
|
premium state if applicable (A).
|
||||||
- **Plan a Date / Date Builder:** build a plan (shape/steps) → save → **persists + the partner sees it**; date plan +
|
- **Plan a Date / Date Builder:** build a plan (shape/steps) → save → **persists + the partner sees it**; date plan +
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -67,6 +67,11 @@ Implement byte-compatible Swift crypto for every Android wire format:
|
||||||
read (tolerant of legacy plaintext; show a 🔒 placeholder when the key is missing) — mirror Android's
|
read (tolerant of legacy plaintext; show a 🔒 placeholder when the key is missing) — mirror Android's
|
||||||
`FirestoreUserDataSource` chokepoint + the pairing/legacy **migration** and **unpair-revert**. Until this ships,
|
`FirestoreUserDataSource` chokepoint + the pairing/legacy **migration** and **unpair-revert**. Until this ships,
|
||||||
iOS shows the locked placeholder for name/gender (acceptable in dev; **not** for release).
|
iOS shows the locked placeholder for name/gender (acceptable in dev; **not** for release).
|
||||||
|
- **⛔ Date reflections (REQUIRED before iOS launch — R22).** The new Date Memories & Replay feature adds an E2EE
|
||||||
|
`couples/{id}/date_reflections/{dateId}/answers/{uid}` collection with the same couple-key + read-gated
|
||||||
|
`secure/payload` reveal as the daily question (`date_history` is plaintext). iOS must implement the matching
|
||||||
|
reflection write/decrypt/reveal (mirror `FirestoreDateReflectionDataSource`) and the `date_reflection_*` /
|
||||||
|
`date_logged` notification types; until then iOS can't participate in date reflections.
|
||||||
|
|
||||||
### 2.4 Screens & features to parity (~48 + new messaging)
|
### 2.4 Screens & features to parity (~48 + new messaging)
|
||||||
All routes from the refreshed audit's screen map, **including the NEW Messages experience** (inbox + conversation
|
All routes from the refreshed audit's screen map, **including the NEW Messages experience** (inbox + conversation
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ handoff and the Android VectorDrawable XML files when wiring them into the app.
|
||||||
- Contact sheet: `docs/brand/generated-art/glyphs/glyph-contact-sheet.png`
|
- Contact sheet: `docs/brand/generated-art/glyphs/glyph-contact-sheet.png`
|
||||||
|
|
||||||
## Inventory
|
## Inventory
|
||||||
Total: 63 glyphs.
|
Total: 64 glyphs.
|
||||||
|
|
||||||
### Closer-specific G-set
|
### Closer-specific G-set
|
||||||
- `glyph_closer_mark`
|
- `glyph_closer_mark`
|
||||||
|
|
@ -21,6 +21,7 @@ Total: 63 glyphs.
|
||||||
- `glyph_sealed_answer`
|
- `glyph_sealed_answer`
|
||||||
- `glyph_memory_capsule`
|
- `glyph_memory_capsule`
|
||||||
- `glyph_date_card_heart`
|
- `glyph_date_card_heart`
|
||||||
|
- `glyph_date_replay`
|
||||||
- `glyph_quiet_hours_moon`
|
- `glyph_quiet_hours_moon`
|
||||||
- `glyph_couple_premium`
|
- `glyph_couple_premium`
|
||||||
- `glyph_export_data`
|
- `glyph_export_data`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue