docs: add 12 PRD cross-reference gaps + platform dependency blockers to V2 review

New findings from systematic PRD ↔ roadmap comparison:
- X-01: Windows/Tauri in PRD but missing from roadmap entirely
- X-02: Event countdown timer type never scheduled in any phase
- X-03: Cascade preset names don't match (PRD vs roadmap)
- X-04: Phase 3 timeline differs (PRD 3wks vs roadmap 4wks)
- X-05: Success metrics contradict between documents
- X-06: Open-source stated in PRD, never discussed in roadmap
- X-07: AI suggestions feature in PRD, absent from roadmap
- X-08: Neurodivergent mode toggle vs default contradicts PRD decision
- X-09: ChronoMind design tokens (--cm-*) conflict with ByteLyst
- X-10: Typography differs (Inter/JetBrains vs DM Sans/IBM Plex)
- X-11: Timer engine architecture unclear (SW vs requestAnimationFrame)
- X-12: Extraction service unused for NL parsing upgrade path

Platform dependency blockers identified from PLATFORM_COMPONENTS_ROADMAP:
- Email/Push Delivery, Password Reset, Event Bus, Scheduled Jobs
- Mitigation: Phase 1-3 unblocked, Phase 4+ has fallbacks

Added @bytelyst/extraction to reusable packages table
Added 4 new decisions to Appendix B (open-source, Windows, AKV, fonts)
Total findings: 7 bugs + 7 arch gaps + 10 missing features + 12 PRD gaps + 5 blockers
This commit is contained in:
saravanakumardb1 2026-02-27 20:18:33 -08:00
parent c6bef6a717
commit c20bdc9b20

View File

@ -18,7 +18,9 @@
7. [Testing & Quality Gaps](#7-testing--quality-gaps)
8. [Design System Gap](#8-design-system-gap)
9. [DevOps & Infrastructure Gaps](#9-devops--infrastructure-gaps)
10. [Recommendations Summary](#10-recommendations-summary)
10. [PRD ↔ Roadmap Cross-Reference Gaps](#10-prd--roadmap-cross-reference-gaps)
11. [Platform Dependencies & Blockers](#11-platform-dependencies--blockers)
12. [Recommendations Summary](#12-recommendations-summary)
---
@ -40,6 +42,7 @@ The `learning_ai_common_plat` repo contains **13 shared packages** and a **platf
| **@bytelyst/design-tokens** | JSON → CSS/TS/Kotlin/Swift token generator | Shared design system across web + native | 1-3 |
| **@bytelyst/monitoring** | Health-check utilities | Sync API health endpoint | 5 |
| **@bytelyst/blob** | Azure Blob Storage + SAS tokens | Custom alarm sound uploads (Pro feature) | 5 |
| **@bytelyst/extraction** | `createExtractionClient()`, shared extraction types | Advanced NL parsing via extraction-service (LLM-powered entity extraction as upgrade path from chrono-node) | 2+ |
| **@bytelyst/testing** | Shared test mocks, Fastify inject helpers | Backend test infrastructure | 4-5 |
| **@bytelyst/fastify-core** | `createServiceApp()` + `startService()` | If sync API is Fastify (not Cloudflare Workers) | 5 |
@ -427,7 +430,143 @@ The `learning_ai_common_plat` repo contains **13 shared packages** and a **platf
---
## 10. Recommendations Summary
## 10. PRD ↔ Roadmap Cross-Reference Gaps
Systematic comparison of `PRD.md` (v0.2) against `roadmap.md` (v1) revealed **12 inconsistencies** — several significant.
### X-01: Windows/Tauri Missing from Roadmap Entirely
- **PRD line 59:** `v2.0 | Windows | Tauri` is listed as a target platform.
- **Roadmap v1:** Phase 5 covers Android + Wear OS but never mentions Windows or Tauri.
- **Impact:** Either the PRD overpromises or the roadmap under-delivers. Windows/Tauri is a non-trivial addition.
- **Fix:** Either add a Phase 6 for Windows/Tauri, or remove it from the PRD and label it as "v3 / future" to match the roadmap's scope through v2.
### X-02: Event Countdown Timer Type Never Scheduled
- **PRD feature #26:** "Event countdowns — 132 days until wedding with milestone warnings" is listed as v1.0.
- **Roadmap v1:** No Phase 1 or 2 checklist item implements this timer type. The PRD data model includes `type: 'event'` but no roadmap task builds it.
- **Fix:** Add to Phase 2 Week 4: "Event countdown timer — days/hours until a future date with milestone warnings at configurable intervals (30 days, 7 days, 1 day, etc.)."
### X-03: Cascade Preset Names Don't Match
- **PRD (line 131-138):** Presets are `Aggressive`, `Standard`, `Light`, `Minimal`, `None`, `Custom`
- **Roadmap Phase 1 (line 79):** Presets are `Relaxed`, `Standard`, `Tight`, `Critical`
- **Impact:** Developers won't know which naming is canonical.
- **Fix:** Align on PRD naming (Aggressive → Critical can be added as an alias). The PRD version is more descriptive and covers more use cases (includes `None` and `Custom`).
### X-04: PRD Phase 3 Timeline Differs from Roadmap Phase 3
- **PRD (line 705-711):** Phase 3 is 3 weeks (Weeks 5-7)
- **Roadmap (line 341):** Phase 3 is 4 weeks (Weeks 6-9)
- **PRD summary (line 788):** "iOS + Apple Watch follows in weeks 5-7"
- **Impact:** Confusing for anyone reading both docs.
- **Fix:** Align both to the roadmap's 4-week version (Weeks 6-9), which is already more realistic per T-02. Update PRD phases section to match.
### X-05: Success Metrics Contradict Between PRD and Roadmap
- **PRD Section 12:** MVP targets: 100 PWA installs, 50 DAU, 500+ timers/week
- **Roadmap Success Playbook:** MVP targets: 50 MAU, >40% DAU/MAU ratio
- **Impact:** Two different success criteria for the same phase.
- **Fix:** Reconcile. PRD's are more specific and measurable. Roadmap should adopt PRD's metrics for Phase 1, then layer in the viral/growth metrics for later phases.
### X-06: PRD Says "Open-Source" — Roadmap Never Discusses Licensing
- **PRD line 664:** "ChronoMind is **free and open-source** for personal use."
- **Roadmap:** No mention of licensing, open-source, or repository visibility.
- **Impact:** Open-source has massive implications: competitors can fork, community can contribute, monetization strategy changes.
- **Fix:** Add to Appendix B decisions: "Open-source vs closed-source." If open-source, define license (MIT? AGPL? Business Source License?). If closed-source, remove from PRD. **Recommendation:** Start closed-source, open-source the timer engine library only (good for credibility + community), keep the app itself proprietary.
### X-07: PRD Feature #49 "AI Suggestions" Not in Roadmap
- **PRD line 232:** `AI suggestions — "You have a gap between 2-3pm, want to schedule focus time?"`
- **Roadmap:** Not mentioned in any phase.
- **Fix:** Add to Phase 4 or 5 as a stretch goal. Requires calendar integration (Phase 4) to detect gaps. Label as "v2 stretch" in both docs.
### X-08: Neurodivergent Mode — Toggle vs Default Contradicts
- **PRD Open Question #7 (line 747):** "Decision: design for neurodivergent by default (visual timers, gentle transitions); add 'compact mode' for power users"
- **Roadmap Phase 2 (line 290-299):** Treats neurodivergent mode as a separate toggle in settings ("Gentle mode")
- **Impact:** These are opposite approaches. Default-on vs opt-in toggle.
- **Fix:** Follow the PRD decision — neurodivergent-friendly IS the default UX. The toggle should be "Compact mode" (for power users who want dense UI), not "Gentle mode" (which implies the default is harsh). Update roadmap Phase 2 checklist.
### X-09: PRD Design System (`--cm-*`) Conflicts with ByteLyst Tokens
- **PRD Section 9.1:** Defines a complete ChronoMind-specific color palette with `--cm-*` prefix. Colors are notably different from ByteLyst's:
- ChronoMind bg: `#0A0B0F`, ByteLyst bg: `#06070A`
- ChronoMind accent: `#5B8DEE`, ByteLyst accent: `#5A8CFF`
- ChronoMind has urgency-specific colors: critical `#FF4757`, important `#FF9F43`, standard `#FECA57`, gentle `#2ED573`
- ByteLyst has no urgency-level colors at all
- **V2 review D-01** recommended extending `bytelyst.tokens.json` but didn't address this color conflict.
- **Fix:** ChronoMind needs its **own product section** in the token file (like the `brain` section exists for MindLyst). Add a `chronomind` section with urgency colors, timer-specific tokens, and the `--cm-*` prefix. The base palette (neutral, spacing, typography, motion) can be shared; the semantic/product colors are ChronoMind's own. Update `generate.ts` to produce `chronomind.tokens.css` alongside the existing outputs.
### X-10: PRD Typography Differs from ByteLyst Tokens
- **PRD line 594-596:** Display: Space Grotesk (shared), Body: **Inter**, Mono: **JetBrains Mono**
- **ByteLyst tokens line 80-83:** Display: Space Grotesk (shared), Body: **DM Sans**, Mono: **IBM Plex Mono**
- **Impact:** Different body and mono fonts across ecosystem products.
- **Fix:** Decision needed: match ByteLyst fonts (DM Sans / IBM Plex Mono) for ecosystem consistency, or keep Inter / JetBrains Mono for ChronoMind's identity? **Recommendation:** Keep ChronoMind's fonts — timer/clock apps need excellent tabular numbers, and JetBrains Mono has superior digit rendering for countdown displays. Add `fontFamily.chronomind` section to tokens.
### X-11: PRD Notification Architecture Mentions SW 30s Check — Roadmap Says `requestAnimationFrame`
- **PRD Section 8.3 (line 486-507):** Timer engine runs in Service Worker, scheduler checks every 30 seconds, has fallback to `setInterval` in active tab.
- **Roadmap Phase 1 (line 75):** Timer engine uses `requestAnimationFrame` + `setInterval` dual-loop.
- **Impact:** These are different architectures. `requestAnimationFrame` runs in the main thread (stops when tab is hidden). SW runs in background.
- **Fix:** Both are needed. Clarify in roadmap: `requestAnimationFrame` for UI countdown display (smooth 60fps), `setInterval` in SW for background notification scheduling. The timer engine must work in BOTH contexts.
### X-12: Extraction Service as NL Upgrade Path — Missed Reuse
- **Common-plat:** `@bytelyst/extraction` package + extraction-service (port 4005) provides LLM-powered entity extraction with configurable tasks, examples, and classes.
- **Roadmap Phase 2:** NL parsing uses `chrono-node` only (local regex-based). PRD Open Question #2 says "optional LLM v2."
- **Fix:** Add to Phase 4 as an upgrade path: "Advanced NL parsing via extraction-service — define a `timer-parse` extraction task with classes like `time`, `duration`, `urgency_hint`, `label`, `recurrence`. Falls back to chrono-node if extraction-service is unavailable." This reuses existing infrastructure instead of building a new LLM integration.
---
## 11. Platform Dependencies & Blockers
The common-plat `PLATFORM_COMPONENTS_ROADMAP.md` identifies **25 gap components** that don't exist yet. Several of these are **direct blockers** for ChronoMind features:
### Blockers for ChronoMind
| Gap Component | Priority | ChronoMind Feature Blocked | Status |
|---------------|----------|---------------------------|--------|
| **Email/Push Delivery (2.2)** | P0 | Shared timer notifications, waitlist emails, referral invites | Not built |
| **Password Reset + Email Verification (2.5)** | P0 | User account creation (Phase 4-5) | Not built |
| **Event Bus (2.4)** | P0 | Shared timer real-time sync, webhook delivery | Not built |
| **Data Export (2.9)** | P1 | GDPR compliance, "Export all my data" (M-02) | Not built |
| **Scheduled Jobs (2.1)** | P0 | Calendar sync polling (every 15 min), recurring timer generation | Not built |
### Impact
- **Phase 1-3 (Web + iOS):** No blockers — everything is local/offline.
- **Phase 4 (Accounts + Sync):** Blocked by Email Delivery (2.2) and Password Reset (2.5). Cannot create user accounts without email verification.
- **Phase 5 (Shared timers):** Blocked by Event Bus (2.4) for real-time updates, and Email Delivery (2.2) for household invitations.
### Mitigation
- **Phase 1-3:** Proceed independently — no backend needed.
- **Phase 4 preparation:** Coordinate with common-plat sprint plan. Email Delivery + Password Reset are on the critical path (Sprint 1-2 per PLATFORM_COMPONENTS_ROADMAP). If they aren't built by Phase 4, ChronoMind can:
- Use Apple Sign-In / Google Sign-In only (skip email/password accounts initially)
- Use CloudKit for Apple-only sync (no platform-service dependency)
- **Phase 5:** Event Bus is Sprint 1 priority. If delayed, shared timers can use polling (30s interval) as a degraded experience.
### AKV Secret Mapping Needed
Like `LYSNR_SECRETS` in `@bytelyst/config`, ChronoMind needs `CHRONO_SECRETS`:
```typescript
export const CHRONO_SECRETS = {
COSMOS_KEY: { envVar: 'COSMOS_KEY', akvName: 'chrono-cosmos-key' },
JWT_SECRET: { envVar: 'JWT_SECRET', akvName: 'chrono-jwt-secret' },
STRIPE_SECRET_KEY: { envVar: 'STRIPE_SECRET_KEY', akvName: 'chrono-stripe-secret-key' },
STRIPE_WEBHOOK_SECRET: { envVar: 'STRIPE_WEBHOOK_SECRET', akvName: 'chrono-stripe-webhook-secret' },
} as const;
```
**Or:** Share the same Cosmos DB and JWT secret as LysnrAI (since `productId` partitions data). Decision needed in Appendix B.
---
## 12. Recommendations Summary
### Critical (Must Fix Before Implementation)
@ -436,8 +575,10 @@ The `learning_ai_common_plat` repo contains **13 shared packages** and a **platf
| G-01 | Sync API "TBD" | Use platform-service in common-plat | **P0** |
| B-01 | Sync API decision gap | Fastify on platform-service, not Cloudflare Workers | **P0** |
| G-02 | No productId strategy | Register `chronomind` in products module | **P0** |
| D-01 | No design tokens integration | Use `@bytelyst/design-tokens` | **P0** |
| X-09 | Design tokens conflict (`--cm-*` vs ByteLyst) | Add ChronoMind product section to token file, keep urgency colors | **P0** |
| B-02 | Phase 4/5 cloud sync contradiction | iCloud in Phase 3, REST API in Phase 5 | **P0** |
| X-03 | Cascade preset names don't match PRD ↔ roadmap | Align on PRD naming (Aggressive/Standard/Light/Minimal/None) | **P0** |
| X-06 | Open-source vs closed-source undecided | Start closed-source, open-source timer engine lib only | **P0** |
### High (Should Fix Before Implementation)
@ -448,6 +589,10 @@ The `learning_ai_common_plat` repo contains **13 shared packages** and a **platf
| M-09 | No CI/CD pipeline | GitHub Actions + Vercel auto-deploy | **P1** |
| M-08 | No analytics implementation | Add Plausible/PostHog in Phase 1 | **P1** |
| T-02 | Phase 3 too compressed | Extend to 5-6 weeks or defer macOS | **P1** |
| X-04 | PRD and roadmap Phase 3 timelines differ | Align both to 4 weeks (Weeks 6-9) | **P1** |
| X-05 | Success metrics contradict PRD ↔ roadmap | Adopt PRD's specific metrics (100 PWA installs, 50 DAU) | **P1** |
| X-08 | Neurodivergent mode toggle vs default | Follow PRD: neurodivergent-friendly IS default, add "Compact mode" | **P1** |
| X-11 | Timer engine architecture unclear (SW vs rAF) | Both needed: rAF for UI, setInterval in SW for background | **P1** |
| B-03 | NSUserNotificationCenter deprecated | Use UNUserNotificationCenter | **P1** |
| B-04 | ClockKit deprecated | Use WidgetKit only | **P1** |
| M-01 | No privacy policy | Write before any data collection | **P1** |
@ -464,6 +609,10 @@ The `learning_ai_common_plat` repo contains **13 shared packages** and a **platf
| G-03 | No cloud data model spec | Add data model appendix | **P2** |
| G-06 | No migration strategy | Add "import from local" flow | **P2** |
| G-07 | Shared timer architecture undefined | Define WebSocket vs polling | **P2** |
| X-01 | Windows/Tauri in PRD but not roadmap | Either add Phase 6 or move to v3 in PRD | **P2** |
| X-02 | Event countdown timer type never scheduled | Add to Phase 2 Week 4 | **P2** |
| X-10 | Typography differs (Inter vs DM Sans) | Keep ChronoMind fonts (better for digits) | **P2** |
| X-12 | Extraction service unused for NL | Add as Phase 4 upgrade path from chrono-node | **P2** |
| M-02 | No data export / deletion | Add to Phase 4 (App Store requirement) | **P2** |
| M-04 | No iOS waitlist | Use platform-service waitlist module | **P2** |
| M-06 | No iPad layout | Add to Phase 3 | **P2** |
@ -480,6 +629,7 @@ The `learning_ai_common_plat` repo contains **13 shared packages** and a **platf
|---|---------|-----|----------|
| M-03 | No settings sync | Use platform-service settings module | **P3** |
| M-05 | No routine marketplace | Add community templates in Phase 4 | **P3** |
| X-07 | AI suggestions not in roadmap | Add to Phase 4-5 as stretch | **P3** |
| S-01 | Shared timer link access levels | Define public/auth/private | **P3** |
| S-02 | Shared timer abuse prevention | Rate limiting + content filter | **P3** |
| T-03 | Body doubling ambitious | Defer to v3 | **P3** |
@ -579,3 +729,7 @@ learning_ai_common_plat/ # Shared platform (sibling repo)
| 8 | **Calendar sync direction** | Two-way vs one-way (read-only) | One-way (calendar → ChronoMind) | Two-way is fragile and likely unwanted |
| 9 | **Body doubling** | Phase 5 vs v3 | Defer to v3 | Experimental, requires real-time infrastructure |
| 10 | **Domain name** | chronomind.app vs chronomind.io vs other | Check availability, decide before Phase 1 | Needed for deployment + Universal Links |
| 11 | **Open-source strategy** | Full open-source vs closed-source vs hybrid | Hybrid: open-source timer engine lib, proprietary app | Affects community, competitors, monetization |
| 12 | **Windows/Tauri** | Phase 5 vs Phase 6 vs v3 | Defer to v3 | Not enough market signal yet, focus on mobile |
| 13 | **Shared AKV secrets** | Own CHRONO_SECRETS vs share with LysnrAI | Share Cosmos/JWT (productId partitions), own Stripe keys | Fewer secrets to manage, same infra |
| 14 | **Fonts** | Match ByteLyst (DM Sans, IBM Plex Mono) vs own (Inter, JetBrains Mono) | Own fonts — JetBrains Mono has superior digit rendering | Timer app needs excellent tabular numbers |