Appendix B
SRS Engine Analytics Documentation
Complete guide to the Adaptive SRS Engine: latency-aware grading, scheduling, confusables, and cross-module integration.
System Overview
- Character SRS drives Morse Machine due-first scheduling.
- Word/item SRS drives CW Words and Callsign Training due decks.
- Confusable pairs come from substitution errors across modules.
- Adaptive carrier modes prioritize weakness targets with bounded fallback.
- All SRS state is per-user and derived from session-authenticated username.
Latency-aware Grading
Every attempt is converted into grade 0..5.
Character thresholds
dot_ms = 1200 / exact_wpm
T_fast = max(200, 4 * dot_ms)
T_slow = max(600, 10 * dot_ms)
incorrect => 0
correct && latency <= T_fast => 5
correct && latency <= T_slow => 4
correct && latency > T_slow => 3
Item thresholds
T_fast_item = max(400, 6 * dot_ms)
T_slow_item = max(1200, 18 * dot_ms)
(mapping unchanged)
Scheduling Model (SM-2 inspired)
- Grade < 3: increment lapses, reset reps to 0, set
interval_days=0.25(6h). - Grade 3..5: reps increment with intervals 1d, 3d, then
interval *= ef. - EF updates with classic SM-2 delta and lower clamp at
1.3. due_atis recalculated from interval every scored attempt.
Confusables Engine
- Reads substitution errors from callsign and sentence error tables.
- Aggregates directional errors into symmetric pairs:
A↔B. - Supports timeframe filters:
30d,90d,all. - Exposes top pairs for Morse Machine drills and carrier selection.
API Endpoints
GET /api/srs-due.php- due characters/items and overdue summary.POST /api/srs-attempts.php- batch attempts, server-side grading, schedule updates.POST /api/srs-item-actions.php- hard/suspend/unsuspend/reset/promote actions.GET /api/srs-focus-set.php- due chars + confusable pairs (+ optional items).GET /api/srs-plan.php- daily session recommendations and launch URLs.POST /api/srs-clear.php- full SRS state reset with DELETE confirmation.
Analytics Metrics
- Backlog health: due counts + overdue 7d/30d.
- Retention: relearn rate (grade < 3), average grade, attempts per module.
- Interval distribution: characters and items bucketed by interval length.
- Confusables trends: top pairs over 30d and 90d windows.
- Daily activity: 14-day attempts series for consistency monitoring.