Skip to content

Therapy-Pack Catalog Expansion — Research & Proposal

Date: 2026-07-21 Status: Research spike / proposal. Decisions deferred — "which packs ship" is an open item for Jared + a clinician-advisor (see §7). This document captures grounded options, not a committed build. Scope: New prebuilt packs and pack-generation capabilities. Independent of the seeding-variability spec (2026-07-21-therapy-pack-seeding-variability-design.md), which is the concurrent "meat and potatoes" work. Sources: two research memos (2026-07-21) — a demand mine of the sibling Reddit-SLP corpus and a literature review of target-selection frameworks. Citations inline.

1. Why now

7.x is done; there's breathing room to revisit "what packs should exist." PhonoLex ships 6 demand-sourced packs today (Initial /ɹ/, Final /s/, k-vs-t/fronting, Stopping, Vocalic /ɹ/, Gliding). Those sit on the two biggest sound targets but leave clean, evidence-backed gaps. Two independent evidence bases now agree on where to go next: real clinician demand (Reddit corpus) and published clinical standards (target-selection literature).

2. Evidence base

2.1 Demand (Reddit SLP corpus)

Corpus lives in the sibling repo ~/Repos/speech-community-analysis — 92,842 thread-context units, 575 labeled clusters. Key artifacts: data/reports/{codebook_v0.1.md, phase1_memo.md, HANDOFF.md, peek_phonolex_clusters.csv}, scripts/peek_phonolex.py:154-171. The SBIR survey (phonolex_slp_survey_v01.md) is not yet fielded — all demand evidence here is corpus-derived, not survey-confirmed.

Phoneme-mention totals (HANDOFF.md §9.1): /r/ 3,489 · /s/ 1,479 · "minimal pair" 510 · "stopping" 486 · vocalic /r/ 460. Phonology clusters sit in a narrow, mildly-positive, low-"pain" band — these are problem-solving posts (materials-gap signal), not venting.

Top phonology-addressable clusters by size (threads): c459 /r/ articulation (173), c451 CAS (137+28), c481 Lisp diagnosis/correction (126), c473 Lateral Lisp (57), c491 Velar articulation (63), c480 /s/ (41), c494 phonological-disorder Tx / minimal-pairs-maxopp-cycles (33), c428 /l/ (15), c461 Sibilant & Affricate strategies (15).

Out of scope (noted so we know what we drop): dysphagia (largest cluster overall, c378 918), AAC-device, aphasia/adult-cognitive, fluency/stuttering, voice/resonance (c390 nasal resonance 178 is borderline structural, not phoneme-addressable), language/social, literacy/phonological-awareness (adjacent, different task), and CAS (high-demand but movement-based — see §5). Accent modification (c344 130 + others) is phoneme-addressable and a distinct adult self-pay market — flagged as a separate opportunity, not core.

2.2 Literature (target-selection frameworks)

  • Developmental norm spine: Crowe & McLeod (2020), AJSLP 29(4):2155–2169 — US consonant acquisition, 90% criterion, 15 studies / 18,907 children. The current field-standard, defensible successor to Sander (1972) and Iowa–Nebraska (Smit 1990). Ordering (early→late): /p b m n w h d/ → /t k g ŋ f j/ → /l ʃ tʃ dʒ v/ → /s z/ → /ɹ/ → /θ ð ʒ/. Clusters need Smit (1990) — Crowe & McLeod is singletons only.
  • Frameworks: Traditional/developmental (early-first); Complexity (Gierut; Storkel 2018, LSHSS 49(3):463–481 — later-acquired, non-stimulable, marked, small-sonority-difference clusters, for system-wide change); Cycles (Hodson — pattern-cycling for highly unintelligible kids); Contrast family (minimal pairs Weiner 1981 / maximal opposition Gierut 1989 / empty set Gierut 1990 / multiple oppositions Williams 2000); Stimulability-based (Miccio 2005).
  • Two standing copy cautions: present AoA as ranges/bands, not hard cutoffs (Sander's variability point); label norms mainstream US English, not dialect-neutral — the same clinical-fitness bar that retired the TalkBank age data.

3. Candidate new packs (demand × clean-fit)

"Clean fit" = expressible in the current constraint system (single sound × position / minimal-pair contrast / named process / CV-shape). Ranked ship order:

# Pack Constraint mapping Evidence Fit
P1 Sibilants / lisp — /s/ & /z/ all positions + s↔θ, z↔ð contrasts sound packs (/s/,/z/) + minimal-pair contrasts c481 126 + c473 57 + c245 17 + c461 15 + c480 41 ≈ 250+ threads; /s/ 1,479 mentions; #1 patient-voice theme after /r/ ✅ clean. Lateral lisp shares the same /s,z/ word list (distortion, not a phoneme) — one pack serves both; PhonoLex supplies stimuli, can't represent the lateral distortion
P2 Cluster reduction — s-/r-/l-clusters CV-shape (CCVC/CCV) + phoneme-position anchors (sp,st,sk,sl,sn,sw; pr,tr,br,gr; pl,bl,kl,fl) c489 69, c494 33; "cluster reduction" tracked ✅ clean via CV-shape (already used in rarity scoring)
P3 Velars — /k/,/g/ initial & final (elicitation) single sound × position c491 63; velar-fronting tracked ✅ clean. Distinct from the k-vs-t contrast — this is straight placement drill
P4 "th" — /θ/ and /ð/ sound packs tracked /θ ð/; overlaps lisp ✅ clean. Pairs with P1's s↔th
P5 sh / ch / j — /ʃ/,/tʃ/,/dʒ/ + deaffrication & palatal-fronting contrasts sound packs + /tʃ/–/ʃ/, /ʃ/–/s/ contrasts c461 15; tracked ✅ clean
P6 /l/ — initial & final + l↔w, l↔j sound × position + contrasts c428 15 ✅ clean. Distinct from Pack 6 (gliding process over ɹ+l)
P7 Final consonant deletion (process) named process → CVC vs CV c489 69; FCD tracked ✅ clean (same shape as existing named processes)
P8 Cycles / multiple-oppositions bundle packaging over existing Contrast Sets c494 33; "minimal pair" 510 ✅ preset over existing engine, not new machinery

Common minimal-pair contrasts to seed (§3.1 lit memo): k/t & g/d (fronting), s/t & f/p (stopping), ʃ/s (palatal), voiced/voiceless (b/p,d/t,g/k,z/s), l/w & r/w (gliding), CV/CVC (FCD), cluster/singleton (reduction), maximal-distance pairs (max-opp/empty-set).

Process suppression-age reference (Bowen synthesis; approximate ranges) is captured in the literature memo — useful for a future "processes a X-year-old should have suppressed" preset.

4. Capability audit — most "gaps" are already built (verified against live code, 2026-07-21)

A code audit corrected the earlier draft, which overstated the gaps. The contrast-family engine and the AoA / CV-shape filters already ship. Most literature-driven packs are pure preset additions over existing engines, not new capability. Evidence cited inline.

Already supported today — a new pack/preset is the ONLY work: - Multiple oppositions — FULLY BUILT (backend + UI). /api/contrastive/multiple-opposition/{targets,sets} does greedy max-min target selection + minimal-set (triplet–quintuplet) generation (contrastive.ts:263,328), and the frontend has a first-class "Multiple Opposition" mode (ContrastiveInterventionTool.tsx:55,266-323; apiClient.ts:383,394). Only a prebuilt pack preset is missing (= P8) — trivial packaging, no engine work. (Supersedes the earlier draft's incorrect "needs new one-to-many generation" claim.) - Maximal opposition — LIVE MODE. /api/contrastive/maximal-opposition/{pairs,word-lists} already sorts descending by feature_distance with a major-class-crossing filter (contrastive.ts:145-198). The earlier "feature_distance sort-direction toggle" is not a gap — it ships. - Minimal pairs — baseline, live (contrastive.ts:79-143). - AoA filtering / sorting — ALREADY WIRED. aoa is a filterable + sortable property (properties.ts:174-187, words.ts:26-29), so min_aoa/max_aoa bounds compile today through compileWordFilter. The only missing piece is a curated UI band control ("targets for a 4-year-old") — a small frontend affordance, not backend plumbing. Keep word-AoA (Kuperman/Glasgow) distinct in copy from sound-AoA (Crowe & McLeod). - CV-shape constraints — live (wordFilter.ts:177-187), drives cluster-reduction packs directly.

Genuinely new capability (own scoped spec if adopted), by value ÷ lift: 1. Complexity sorthighest differentiation. Synthesize from data on hand: invert AoA + markedness tier (stop<fric<affricate<cluster<3-cluster) + sonority-difference within a cluster from the learned feature vectors (sonority is a feature dimension). This operationalization is the real moat; not currently computed. WCM (already stored) ranks words within a target, not targets — don't conflate. 2. Sequence/bundle preset — a named, ordered group of packs (Developmental ladder, Cycles program). A grouping construct the pack model doesn't have yet. 3. Clinician stimulability + known/unknown toggles — the one irreducibly child-specific input (not derivable from lexicon). Small per-target toggle; makes complexity/empty-set honest rather than faked. 4. More named processes — final-consonant-deletion, (de)voicing, weak-syllable-deletion, deaffrication. Note: processPreset today is unconstrained descriptive metadata (only stopping / vocalic-r / gliding are defined; fronting is a contrast pack) and does not drive backend behavior — so "adding a process" is a prebuilt pack with the right phones + a label, i.e. effectively another preset, not engine work.

5. Needs new machinery — flag, don't build

  • CAS (childhood apraxia) — c451 165 threads, high demand, but movement-based (multisyllabic sequencing, varied vowel contexts, syllable-shape progression). Not expressible as sound/contrast/process. Route to the Curriculum Recommender workstream, not the pack MVP; PhonoLex could later contribute CV-shape-graded multisyllabic lists.
  • (The earlier draft also listed "Multiple oppositions" here — removed; §4 confirms it is already fully built.)

6. Format signals (orthogonal to which sound — inform deliverable, not target)

From the demand memo, all strong and already aligned with the Therapy Pack MVP thesis: no-prep / print-and-go (c412 Materials 747 threads, 2nd-largest cluster overall), IEP-goal-tagged (compliance__iep 3,990 hits; c427 Goal Writing 387), teletherapy / digital-deck (c492 585; Boom Cards 453 mentions), take-home / homework sheets, data-collection sheets. Competitor benchmarks: TPT 1,804 mentions, Lessonpix 142 (direct picture-symbol competitor), SLP Now 275. The gap clinicians name is phonological precision — PhonoLex's wedge.

7. Open decisions (for Jared + clinician-advisor)

  1. Which packs ship, and in what order? Recommended first cut: P1 sibilants/lisp → P2 cluster reduction → P3 velars, all clean-fit. Advisor confirms clinical framing/labels.
  2. Do we add any genuinely-new capability now, or ship preset-only? Per the §4 audit, the whole contrast family (minimal / maximal / multiple opposition) already ships as live modes, and AoA filtering already works — so those packs cost zero engine work. The only new capability worth weighing early is the complexity sort (§4-new #1), the real differentiator; everything else is presets.
  3. Norm-source sign-off: adopt Crowe & McLeod (2020) as the cited consonant-norm spine; confirm the mainstream-US-English + ranges-not-cutoffs disclaimers satisfy the clinical-fitness bar.
  4. Accent-modification / adult self-pay — separate market study or drop?
  5. CAS — confirm routing to Curriculum Recommender rather than packs.

Take P1–P3 to a clinician-advisor for label/framing sign-off, then a small implementation plan to add them to PREBUILT_PACKS (pure constraint additions — no schema, no reseed). Per the §4 audit, the reachable-today set is larger than the earlier draft implied: any minimal-pair / maximal-opposition / multiple-opposition contrast pack, plus AoA-scoped and CV-shape packs, are all preset-only (the engines already ship). So P1–P8 plus the contrast-family and developmental-scoped packs can go out with zero capability work — only the complexity sort and sequence/bundle constructs are genuinely new and warrant their own scoped specs. This proposal stays a proposal until §7 is answered.