Peregrine · plan · updated 2026-10-04

Skill dashboard v1 — "Where you stand" in Settings / Account

Source: Sarah's direction of 2026-10-03 (journal entry 20261003-191238): the skill log belongs in Settings / Account, the only area that talks about the SAT directly. The player should see where they are strong, what they are not practicing at all, and where they keep making mistakes. They should be able to drill into the specific items they got wrong and generate a gameplay plan (which cases to work, which games to play) aimed at weak and unpracticed areas.

Research for this plan (2026-10-04) covered the app's result data, the corpus skill vocabulary and the Settings screen. The findings that shape it are listed first.

What already exists

Design

1. One skill spine, two grains

2. A skill ledger over every store (no new stored table)

SkillLedger (pure, PeregrineCore) reads the existing stores and produces one SkillAttempt value per item. It holds: code, subskill, game, date, correct, miss reason, seconds (where known), and an item reference for drill-down.

SourceCode fromMiss reason fromItem reference
DrillResultquestion.skill / typeresolution (dodged, called his number, missed…)the Question
VigilanceResult, Target Practicebank skillCodeconID / outcome cellbank id
VigilanceResult, Wager / Lineup / Clear / Casing / Rematchbank skillCode once exported (phase 2); until then section only, shown as "not yet sorted by skill"conID, trap codesbank id
PhoneGameResultmapping tableoutcome (unreflected, false alarm, time up…)bank id or stored prompt
PrimeSuspectRun attemptsphase 5 mappingthe evidence's wrong logcase + evidence id

Computing on read keeps one source of truth. It needs no migration, and it picks up history that already exists. Profile stores are one player's history, so a full fetch is cheap. The code already fetches whole tables everywhere because of a documented SwiftData predicate crash.

3. What the dashboard shows

All of it is derived from the ledger by a pure SkillDashboard model with unit tests.

4. Drill-down

5. Gameplay plan

A rule-based PracticePlanner in PeregrineCore:

  1. Score each code's need. Weakness (1 − smoothed accuracy) is weighted by recency. Neglect rises with days since last practice and is highest at zero attempts. Strengths are excluded.
  2. Pick 3–4 target codes, highest need first. At least one comes from neglect when any code is unpracticed, so the plan doesn't only chase misses.
  3. Pick 1–2 games per target code from a GameSkillCatalog. The catalog is built once from the bundled banks: each game's content is counted by skill code, so the catalog matches what the game actually deals, not a hand-written claim. Games that play the player's own captured questions (The Make, Beat the Shakedown, Forensics) qualify only when the store holds captured questions with that code.
  4. Pick a case when phase 5 has mapped Prime Suspect evidence, choosing the case with the most evidence in the target codes.
  5. Write each line plainly, with its reason and where to find the game. For example: "Red Flag · Standard English Conventions · 6 of your last 10 subject-verb calls missed · Phone › Games." Another example: "Coordinate Drop, Reflect deck · Geometry & Trig · never practiced."

The plan is computed when the screen opens, with a "New plan" button that reshuffles among equally needy options. It is not stored and not graded. A rule-based planner works offline, costs nothing per use and can be unit-tested. A Claude-written plan could replace the wording later without changing the ranking.

6. Where it sits

Phases and tasks

Phase 1 — Skill spine and ledger (PeregrineCore, no UI)

Phase 2 — Skill codes for the Wager / Lineup / Undercover / Red String banks

Phase 3 — Dashboard screens

Phase 4 — Gameplay plan

Phase 5 — Prime Suspect cases in the ledger and the plan

Deferred, recorded so it isn't lost

Decisions (Sarah, 2026-10-04)

  1. Placement: a summary card on YouView plus pushed screens, as designed.
  2. Codes for the generated games:
    • Coordinate Drop → Geometry and Trigonometry
    • Odd One Out → Advanced Math
    • Split Decision's Linear / Exponential deck → Advanced Math
    • Split Decision's Equivalent? deck → Algebra
  3. Plan actions: launching the game is the goal. For v1, each line says where the game lives.
  4. Two separate states:
    • Not practiced: fewer than 10 recorded attempts on a skill, all-time.
    • Needs practice: at least 10 attempts, but none in the last 14 days.
    • "Not practiced" takes precedence. Weakness ("needs work") is a third, separate state.
  5. Exporter edit: undecided. Recommendation: edit the projection code in PressRaven/tools/export-machine.py directly. It is tooling, and the skill codes are already in the corpus entries. /cr-corpus is for staging content changes. This is needed before phase 2, not phase 1.

Final review

Strengths

Weaknesses and edge cases

Adjustments worth considering

Confidence: 78/100. The data path and the honesty rules are solid. The open risks are the cross-repo export in phase 2 and how the planner's ranking feels in practice. Ranking feel can't be settled until real history exists.