# PRD Quality Review — Wordle Clone ## Overall verdict A lean, decision-ready PRD that a solo builder can act on immediately. Features are well-scoped, FRs are numbered and testable, and the document honestly surfaces its unknowns. Two moderate findings around assumptions-index roundtrip fidelity and a missing persistence FR keep this from being watertight, but neither should block progression to architecture. ## Decision-readiness — strong The document names real open questions (word bank source, solver algorithms, skill formula, cookie/privacy) and draws explicit scope boundaries. Trade-offs are surfaced through the non-goals list and the counter-metric SM-C1 (codebase complexity vs. solver ambition). A builder could start architecture work from this PRD without needing to reverse-engineer intent. ### Findings - **[low] Solver execution context is implicit** (§4.6) — FR-16 says "pre-compute" and "runs offline," but the document never states whether the solver runs as a separate script, a build step, or in-browser via web workers. This is a meaningful architectural fork. *Fix:* Add one sentence to §4.6 clarifying the intended execution boundary (e.g., "Solver runs as a standalone Node script; output is a static JSON file consumed by the game client"). ## Substance over theater — strong No filler detected. The vision is a tight 2-sentence pitch. Every glossary term is used downstream. User journeys include concrete details (persona, entry state, path, climax, resolution, edge case) rather than skeletal one-liners. The success metrics are appropriately humble for a hobby project and anchor back to FRs and UJs. ## Strategic coherence — strong The thesis is clear: a Wordle clone differentiated by a solver engine that ranks words, enabling skill-based Play Again. Features form a coherent arc: Rules, Core Gameplay, Daily Word, Play Again, Results, Solver, Word Bank. No orphan features. The solver engine is ambitious for a hobby project but the counter-metric SM-C1 and the explicit learning-project framing justify it. ## Done-ness clarity — strong All 18 FRs carry "Consequences (testable)" blocks with specific, observable outcomes. The feedback scoring rule (§3 Glossary + FR-7) is particularly well-specified with worked examples. The few vague edges (skill formula, curation threshold) are deliberately deferred to open questions rather than left as ambiguous requirements. ### Findings - **[low] Curation threshold is subjective** (§4.7, FR-18 consequence) — "No obscure/archaic words in the target set" is not directly testable without defining a frequency cutoff or corpus. The open question in §8 ("Frequency data from which corpus?") partially covers this, but the FR consequence should reference that dependency. *Fix:* Append "Threshold depends on corpus selection (see Open Question 1)" to FR-18's consequences. - **[low] Skill weighting is probabilistic, not deterministic** (§4.4, FR-11 consequence) — "Word difficulty correlates with player skill (better players get harder words on average)" is true for a random draw with weights but cannot be verified on a single game. The phrasing is correct but architecture will need to encode that "on average" constraint. *Fix:* No PRD change needed; flag for architecture to preserve probabilistic selection. ## Scope honesty — adequate Non-goals (§5) and out-of-scope items (§6.2) are explicit and reasonably comprehensive. The document correctly signals that freeplay/infinite mode, adaptive difficulty, and social features are post-v1. The assumptions index (§9) exists and is useful, but the roundtrip is slightly broken. ### Findings - **[medium] Assumptions index does not fully roundtrip** (§9 vs. inline tags) — §0 states assumptions are "tagged inline" with [ASSUMPTION] markers. Only §4.4 carries the inline tag. The §9 index claims assumptions at §4.7 (word bank existence/licensing) and §6.2 (Play Again sufficiency), but these are not tagged in their source locations. A downstream reader scanning for inline markers would miss two of the three assumptions. *Fix:* Add `[ASSUMPTION: ...]` tags at §4.7 and §6.2 to match the §9 index, or remove the "tagged inline" claim from §0. ## Downstream usability — strong FR IDs are contiguous (FR-1 through FR-18), user journeys are ID'd (UJ-1 through UJ-5), and success metrics reference FRs/UJs. The glossary is consistent — terms like "Screen 1," "Screen 2," "Screen 3," "Feedback Scoring Rule," and "Play Again" are used uniformly throughout. Cross-references between FRs are accurate. Feature groupings map cleanly to epics. ### Findings - **[medium] Statistics persistence has no explicit FR** (§4.2, §4.5) — FR-8, FR-9, and FR-14 all reference "Statistics updated" or "Stats update," but no FR covers the persistence mechanism (localStorage, cookies, etc.). This is a gap because FR-1 (first-visit cookie) and FR-12 (skill metric) both depend on browser storage, making the persistence layer a cross-cutting concern. Architecture can infer it, but an FR for "statistics storage and retrieval" with a testable consequence would close the loop cleanly. *Fix:* Add an FR (e.g., FR-14a) under §4.5: "The system can persist statistics to browser storage and retrieve them across sessions. Consequence: closing and reopening the browser preserves games played, win rate, histogram, and streaks." ## Shape fit — strong 18 FRs, 5 user journeys, 7 features, 4 open questions, 3 assumptions. Right-sized for a solo learning project. No enterprise ceremony (RACI, stakeholder analysis, phased rollout, SLA targets). The glossary is thorough but not bloated — every term earns its place. Success metrics are appropriately humble (3 primary, 2 secondary, 1 counter-metric). ## Mechanical notes - **Glossary drift:** None detected. All 16 glossary terms are used consistently in the body. "Screen 1," "Screen 2," and "Screen 3" are used in user journeys and FR descriptions without variation. - **ID continuity:** FR-1 through FR-18, contiguous. UJ-1 through UJ-5, contiguous. SM-1 through SM-5 plus SM-C1. No gaps. - **Cross-references:** Accurate. FR-15 correctly references FR-11. FR-6 correctly references the word bank. FR-11 correctly references FR-17 (word ranking). No broken or dangling references found. - **Assumptions index:** 3 entries. As noted above, only 1 has a matching inline tag. - **Feedback scoring example consistency:** The glossary (§3) and FR-7 both use `style`/`hello` as an example — consistent, though it creates mild redundancy.