Advanced Cognitive Metrics — Requirements v3.1
Date: June 2026
Status: Post-alignment, ready for engineering scoping
Platform: Flutter (iOS + Android) + Web
SKU: Platinum-exclusive (with limited free-tier exposure)
1. Feature Summary
Five cognitive metrics surface deeper brain performance insights for Platinum subscribers inside the existing My Brain tab. Users discover their "Cognitive Fingerprint" — a personalized radar shape showing how they respond, stay consistent, focus, filter distractions, and adapt across training.
Primary goal: Drive Platinum conversion and retention.
User value: Users learn what kind of thinker they are — fast or deliberate, steady or burst, adaptable or anchored — through a personalized Cognitive Fingerprint that evolves with training.
Unlock condition: Cognitive Profile is visible once all 5 metrics are unlocked (minimum 6 plays per applicable game). Until then, users see a building state with per-game unlock progress.
2. The Five Metrics
2.1 Responding
- Science formula:
1000 / median_correct_RT(higher = faster = better) - Unit: Inverted ms (higher is better)
- What it measures: How quickly and accurately a user responds on correct trials
- Behavior: Stable identity trait. Shows initial improvement then plateaus.
- Applicable games: All 6 games — Speed Match, Color Match, Lost in Migration, Ebb & Flow, Brain Shift, Disillusion
- Minimum data: 6 plays with ≥20 correct trials each
- Spectrum: Deliberate → Moderate → Rapid
- Short description: Responding quickly and accurately
- Long description: Responding captures how quickly you respond. A deliberate style takes time to weigh each answer. A rapid style responds as fast as possible.
- Post-game measures: Average response time (ms)
2.2 Consistency
- Science formula:
−|slope(RT)|(higher = more stable pacing = better) - Unit: Negated absolute slope (higher is better)
- What it measures: How steady a user's pace is from start to finish. Any drift — speeding up or slowing down — lowers the score.
- Behavior: Trainable. Users tend to become more consistent with practice on some games (Lost in Migration, Ebb & Flow, Speed Match).
- Applicable games: All 6 games — Speed Match, Color Match, Lost in Migration, Ebb & Flow, Brain Shift, Disillusion
- Minimum data: 6 plays with ≥30 correct trials each
- Spectrum: Shifting → Even → Stable
- Short description: Answering at a steady pace without drifting
- Long description: Consistency measures how steady your responses are from start to finish. A higher score means your timing holds even rather than drifting, slowing, or speeding up.
- Post-game measures: Average beginning speed (ms), Average ending speed (ms), Change over time (Slowing down / Speeding up / Staying consistent)
2.3 Focus
- Science formula:
1 − τ/(τ+μ)(higher = more sustained focus = better) - Unit: Inverted tau ratio (higher is better)
- What it measures: How attentively a user responds across a game. Lower scores indicate more attention lapses (responses significantly slower than their own average).
- Behavior: Largely stable identity trait. Data shows some improvement with training (tau ratio drops across plays).
- Applicable games: All 6 games — Speed Match, Color Match, Lost in Migration, Ebb & Flow, Brain Shift, Disillusion
- Minimum data: 6 plays with ≥20 correct trials each
- Spectrum: Shifting → Steady → Sustained
- Short description: Responding attentively without lapses
- Long description: Focus measures how attentively you respond across a game. It can shift and lead to attention lapses or hold continuously from start to finish.
- Post-game measures: Attention lapses (#) — times you responded significantly slower than your average response time
2.4 Filtering
- Science formula:
− congruency_effect(higher = better filtering = better) - Computation:
−(RT_incongruent − RT_congruent) / RT_median - Unit: Negated congruency ratio (higher is better)
- What it measures: How well a user filters out conflicting or misleading information to stay on task.
- Behavior: Trainable. Shows clear improvement with practice, especially on Color Match.
- Applicable games: Color Match, Lost in Migration, Ebb & Flow, Brain Shift, Disillusion (5 games)
- Note: Brain Shift stays in Filtering (confirmed in call — reversal from earlier proposed removal).
- Minimum data: 6 plays with ≥10 congruent AND ≥10 incongruent correct trials each
- Spectrum: Adaptive → Selective → Steady
- Short description: Tuning out conflicting or misleading information to stay on task
- Long description: Filtering captures how well you screen out distracting or conflicting cues. A steady filter holds its course when signals conflict. An adaptive filter takes in more context, and slows down when distractions are present.
- Post-game measures:
- Congruent trials (ms) — E&F: Moving and pointing match · CM: Color and meaning match · LIM: Middle bird matches flock
- Incongruent trials (ms) — E&F: Moving and pointing don't match · CM: Color and meaning don't match · LIM: Middle bird doesn't match flock
- Congruency effect (ms) — How much more you slow down when signals conflict
- LIM-specific insight copy:
- Adaptive: "Tend to slow down for non-matching flocks to focus on accuracy"
- Balanced: "Slow down just a little for non-matching flocks"
- Steady: "Maintain an even pace, whether matching or non-matching"
2.5 Agility
- Science formula:
− switch_cost(higher = smoother switching = better) - Computation:
−(RT_switch − RT_no_switch) / RT_median - Unit: Negated switch cost ratio (higher is better)
- What it measures: How smoothly a user adjusts when the rules or question type change.
- Behavior: Trainable. Cleanest training signal of all five metrics. Clear age stratification.
- Applicable games: Brain Shift, Disillusion, Ebb & Flow (3 games)
- Excluded: Speed Match — its "switch" is between match/no-match stimuli, not a task-rule change (confirmed in call)
- Minimum data: 6 plays with ≥8 switch AND ≥8 non-switch correct trials each
- Spectrum: Anchored → Adaptive → Flexible
- Short description: Smoothly shifting to a new response when the rules change
- Long description: Agility measures how smoothly you adjust when the rules or question type change. A higher score means you stay steady, even when the rules switch.
- Post-game measures:
- Same rules (ms) — E&F: Previous trial was the same rule · Dis: Previous trial was the same rule
- Switching rules (ms) — E&F: Previous trial was a different rule · Dis: Previous trial was a different rule
- Switch cost (ms) — How much more you slow down when the rules change
3. Game Coverage Matrix
Three metrics (Responding, Focus, Consistency) are common across all 6 games. Filtering and Agility apply to subsets.
| Game | Responding | Focus | Consistency | Filtering | Agility |
|---|---|---|---|---|---|
| Speed Match | ✅ | ✅ | ✅ | — | — |
| Color Match | ✅ | ✅ | ✅ | ✅ | — |
| Lost in Migration | ✅ | ✅ | ✅ | ✅ | — |
| Ebb & Flow | ✅ | ✅ | ✅ | ✅ | ✅ |
| Brain Shift | ✅ | ✅ | ✅ | ✅ | ✅ |
| Disillusion | ✅ | ✅ | ✅ | ✅ | ✅ |
4. Scoring & Aggregation
4.1 How the Score Works
At the game level (per metric):
- Compute the raw metric value for the user's play of that game
- Determine the user's combined nth play of that game across all platforms (e.g., 30 web plays + 1 mobile play = play 31)
- Look up the percentile for that raw value against the platform-specific distribution for that game, metric, age bracket, and combined nth play. The nth play determines which cohort slice to compare against; the platform determines which distribution to use.
- That percentile becomes the user's 0–100 score for that game on that metric
At the Cognitive Profile level (per metric):
- Average the per-game scores across all applicable games for that metric (weighted by plays, capped at 20)
- Map the averaged score to a spectrum label (e.g., 78 → "Steady" for Filtering)
- Plot on the radar chart
4.2 Cross-Game Aggregation
Step 1: Per-play, play-count-matched percentile. User's nth play of Game X compared against everyone else's nth play within the same cohort.
Cohort definition:
- Age: ±5 years at time of gameplay
- Play-count matched: exact nth play for plays 1–100; bucketed for 100+
- Engagement filter: only users with ≥20 total plays of that game
- Minimum cohort size: 100 users (widen age range by ±2 incrementally if below)
Step 2: Smooth per-game percentiles via moving average (window size TBD by science, recommend 10+).
Step 3: Weighted average across games, weight capped at 20 plays per game.
Step 4: Map aggregate percentile to identity category (Spectrum label).
4.3 Percentile Lookup Keys
metric + nth_game_play + age (±5 years) + game + platform
- Play numbering is common across platforms (web play 30 + mobile play 1 = play 31 on mobile)
- Lookup is per platform (percentile tables built per platform)
- Tables recomputed monthly in batch
- User profile updates on next game play after monthly recomputation (not automatically pushed)
Play count granularity:
Percentile comparison is play-count-matched — user's nth play is compared against everyone else's nth play. Exact match for early plays, bucketed at high play counts where the comparison pool thins out:
| Plays | Granularity | Example keys |
|---|---|---|
| 1–100 | Exact nth play | p1, p2, p3, ... p100 |
| 101–200 | Groups of 10 | p101-110, p111-120, ... |
| 201–500 | Groups of 50 | p201-250, p251-300, ... |
| 500+ | Single bucket | p500+ |
Science team to confirm where exact-match should stop and bucketing should start. If meaningful improvement still happens at play 100, the cutoff should be higher.
Data shape (mirrors existing LPI game percentile tables):
Each lookup entry is a pair of parallel arrays:
{ scores: number[], percentiles: number[] }
Consumer does binary search / interpolation over scores[] to find matching percentiles[] value — same pattern as existing getPercentileTable in game-score-data/lpi-percentiles.
Estimated table size: ~130 play buckets × 12 age buckets × 6 games × 5 metrics × 3 platforms ≈ 140,000 entries. Each entry is two small arrays. Fits comfortably in JSON files using the same game-score-data/ repo pattern.
Example entries:
Lookup: filtering × ebb_and_flow × ios × age_25-30 × p12 (12th play)
{
scores: [0.02, 0.05, 0.08, 0.11, 0.14, 0.17, 0.20, 0.25, 0.32],
percentiles: [95, 85, 75, 60, 50, 40, 30, 15, 5 ]
}
A user whose congruency effect is 0.11 on their 12th play → binary search lands between 0.11 and 0.14 → interpolate → score ≈ 60.
Lookup: filtering × ebb_and_flow × ios × age_25-30 × p1 (1st play, same everything else)
{
scores: [0.08, 0.14, 0.20, 0.26, 0.32, 0.38, 0.44, 0.52, 0.60],
percentiles: [95, 85, 75, 60, 50, 40, 30, 15, 5 ]
}
Same metric, same user profile, but play 1 instead of play 12. A congruency effect of 0.20 is 75th percentile on play 1 but only 30th percentile by play 12 — the cohort improved with practice, so the bar moved. This is the play-count-matching at work.
Note: For filtering and agility, lower raw scores = better (less interference), so scores runs low→high while percentiles runs high→low. The negation in the science formula (−congruency_effect) flips this before the user sees it — they see 0–100 where higher is better.
4.4 Known Constraints
- LPI mismatch: Users at 99th percentile LPI may see lower scores on advanced metrics. Expected — different comparison methodology. Mitigation: identity labels abstract the percentile.
- Play-to-play noise: Individual percentile data is very noisy (30–40 point swings). Aggressive smoothing required.
- RT floor effect: Some users/games bottom out on RT. Percentile precision degrades at the top.
5. Unlock & Building States
5.1 Minimum Data Requirements
- Per metric: 6 plays of each applicable game with sufficient trial counts (see Section 2)
- Cognitive Profile unlock: All 5 metrics must be individually unlocked
5.2 Building State (pre-unlock)
Profile page: Show locked/blurred Cognitive Fingerprint with progress indicator:
- "Play [X] more games to unlock your Cognitive Profile"
- Per-metric progress bars showing which metrics are unlocked vs pending
Game level: After each game play, show which metrics that game contributes to:
- "This game builds your Filtering and Agility. Play 4 more times to unlock these metrics."
- Functions as an announcement / teaser for the feature
5.3 Partial Unlock
If some metrics are unlocked but not all, the radar chart shows unlocked axes normally and locked axes as dashed lines at center. Users can still tap unlocked metrics to see detail.
6. Page Structure
6.1 Profile Overview Page
Location: My Brain → Profile tab
Header:
- Title: "My Cognitive Profile"
- Subtitle: "Updated [date] · Based on [N] plays across [N] games"
Radar chart ("Your Cognitive Fingerprint"):
- 5 axes: Responding (top), Filtering (upper-right), Consistency (lower-right), Agility (lower-left), Focus (upper-left)
- Filled polygon with dots at vertices
- Axis labels: metric name + current spectrum label
- "Tap a dimension to explore" CTA below radar
- "You're strongest in [X] and [Y]" summary text (dynamic, top 2 metrics)
Interaction: Tapping a radar dimension opens the metric detail in a sidebar (web) or drawer (mobile).
Metric detail panel (per metric):
- Metric name + identity label + score (0–100 index)
- Spectrum bar with dot position
- "What it measures" description (always visible)
- "Strongest game" callout
- "Games that build this" — game thumbnails with per-game identity labels and spectrum bars
6.2 Share Fingerprint
- Button on profile overview
- Generates share card: dark background, radar shape, user's name, 5 spectrum labels, Lumosity watermark
- Actions: Copy Image, Share (native share sheet)
7. Tier Gating & Conversion
| Element | Free / Premium | Platinum |
|---|---|---|
| Radar chart | 🔒 Blurred, or show 1–2 metrics | ✅ Full |
| Metric detail | 🔒 Not accessible | ✅ Full |
| Post-game metric teaser | ✅ Show for first few plays, then gate | ✅ Full |
| Share | 🔒 Not accessible | ✅ Full |
Conversion strategy: Show 1–2 metrics (e.g., Responding + one trainable metric) to free users, blur the rest. When they tap the Cognitive Profile tab, show unlock CTA. Post-game teasers shown a few times before requiring Platinum.
Upgrade CTA: "You're putting in the work — see what it's doing."
8. Post-Game Flow
8.1 "Analyse My Play" (v1)
After a game play, users can tap "Analyse my play" to see:
- LPI graph — existing game LPI trajectory (already built)
- 3 advanced metrics for that game — each showing identity label, score (0–100), and spectrum bar:
- 2 from the common metrics (Responding, Focus, Consistency — present in all 6 games)
- 1 game-specific metric (Filtering or Agility, depending on the game)
- Training tip — game-specific advice
Which 3 metrics per game:
| Game | Common metrics shown (pick 2) | Game-specific metric |
|---|---|---|
| Speed Match | Responding, Consistency | — (no game-specific metric; show Focus as 3rd) |
| Color Match | Responding, Consistency | Filtering |
| Lost in Migration | Responding, Focus | Filtering |
| Ebb & Flow | Responding, Focus | Agility |
| Brain Shift | Responding, Consistency | Filtering |
| Disillusion | Responding, Focus | Agility |
⚠️ NEEDS ALIGNMENT: Games with both Filtering and Agility (E&F, BS, Disillusion) — which one is the "game-specific" metric shown? And which 2 of the 3 common metrics are picked? The table above is a starting proposal — needs validation with science/design on which metrics are most relevant per game.
8.2 Score-over-plays graph at game level
Open question: Do we show a score-over-plays graph (game play count on X-axis, 0–100 score on Y-axis) for each metric within the post-game "Analyse my play" view? This would be per-game, not aggregated across games.
8.3 P2 (after v1 ships)
- Per-metric raw trial data (congruent/incongruent ms, switch cost ms, attention lapses count) — decision on which to surface after v1 is live
9. Data Pipeline Requirements
9.1 Per-Play Computation
- All 5 metrics computed per game per play at gameplay time
- Stored with: user_id, game_id, play_number (cross-platform), metric_values, timestamp, user_age_at_play, platform
9.2 Percentile Pipeline (monthly batch)
- For each
game × metric × age_bucket × play_count × platform: compute percentile distribution - Output: lookup table (given keys → raw_value_at_10th, 25th, 50th, 75th, 90th)
- Recomputed monthly
9.3 Aggregation Pipeline (per user, on next game play)
- For each metric: compute smoothed per-game percentile → weighted cross-game aggregate → identity category
- Store: current aggregate percentile, current identity label
9.4 Cross-Platform Play History
- Play numbering is unified across platforms
- Percentile lookup is per platform
- API must serve unified play count regardless of current device
10. Smoothing Requirements
| Surface | Smoothing |
|---|---|
| Score (0–100) | Moving average on percentile-derived score (window TBD, recommend 10+) |
| Identity label | Hysteresis: label only changes after sustained shift |
| Radar chart axes | Uses current smoothed aggregate |
11. Identity Label Thresholds
| Percentile Range | Label Position |
|---|---|
| 0–33rd | Below Average (left spectrum label) |
| 33rd–66th | Average (middle spectrum label) |
| 66th–100th | Above Average (right spectrum label) |
Default: Equal thirds. Science team (Bob/Sricharan) to validate whether equal thirds produce meaningful, stable categories or whether custom boundaries are needed per metric.
Hysteresis: Labels require sustained percentile shift before changing. Prevents daily oscillation on noisy data.
12. Open Questions
| Question | Owner | Priority |
|---|---|---|
| Extreme play counts (1000th play) — how does percentile lookup work when very few users reach that level? | Science | High |
| Play count bucketing cutoff — at what nth play should we stop exact-match and start grouping? Currently proposed at play 100. Depends on whether meaningful improvement still happens beyond that point. | Science (Bob/Sricharan) | High |
| Game changes / score versioning — if a game's scoring changes, do we need a version construct? How to notify users? | Engineering / Product | Medium |
| Label boundaries — 1/3 splits or custom per metric? | Science (Bob/Sricharan) | High |
| Show metrics for games beyond the core 6? — Could show advanced stats inside any game, even if not part of the Cognitive Profile | Product / Design | Medium |
| Score-over-time graph? — No graph exists currently. Do we show a score-over-plays chart at game level (Section 8.2), profile level, or both? | Product / Design | Medium |
| Which 3 metrics per game in post-game? — Games with both Filtering and Agility need a rule for which to show. See Section 8.1. | Product / Science | High |
| Smoothing window size — Individual play-to-play percentiles swing 30–40 points between consecutive plays (observed in Sricharan's data report). A moving average stabilizes the per-game score before cross-game aggregation. Too small (3–5 plays) and the score still wobbles visibly between sessions. Too large (15–20) and the score barely moves, making the profile feel static. Recommend starting at 10 and validating against the data report's individual plots. Alternatively, if the 6-play minimum already provides enough stability, smoothing may not be needed — science to validate. | Science | High |
| Hysteresis band for label stability — Without hysteresis, a user hovering near a threshold (e.g., 66th percentile boundary between "Selective" and "Steady" for Filtering) would flip labels between sessions as their smoothed score wobbles across the line. Hysteresis means requiring a sustained shift past the threshold before changing the label (e.g., must stay above 70th for 3 consecutive updates to move from "Selective" to "Steady," and must drop below 62nd to move back). Science to define: how wide should the band be (±3 percentile points? ±5?), and how many consecutive readings must confirm the shift? | Science | Medium |
13. Dependencies
| Dependency | Owner | Status |
|---|---|---|
| Percentile pipeline (monthly batch) | Data Eng | Not started |
| Cross-platform play numbering API | Backend Eng | Confirm availability |
| Identity threshold validation (1/3 vs custom) | Science | Not started |
| Smoothing window size | Science | Not started |
| Game metadata spec (full stat availability per game) | Science / Data | Not received |
14. Design Reference
Figma: Cognitron V3
Copy doc: Product Copy Spreadsheet
15. Revision History
| Version | Date | Changes |
|---|---|---|
| 1.0–1.5 | Mar 2026 | Initial spec through game list corrections |
| 2.0 | Jun 2026 | Consolidated requirements doc |
| 3.0 | Jun 2026 | Reconciled with Figma V3 + Kacey's copy doc |
| 3.1 | Jun 2026 | Post-alignment call. Confirmed formulas, game list, min plays, percentile execution, gating. |
| 3.1.1 | Jun 2026 | Removed Layer 2 per-game raw value charts — "Trends over time" now shows score (percentile-derived 0–100) over game plays. Removed snapshot comparison and change indicators. Removed Brain Grade references. |