Files
soroban-abacus-flashcards/apps/web/drizzle/0027_help_system_schema.sql
Thomas Hallock 41c46038d8 feat(help-system): add schema for progressive help and feedback loop
Phase 1 of help system implementation:

Schema changes:
- Add HelpLevel type (0-3) to session-plans.ts
- Extend SlotResult with helpLevelUsed, incorrectAttempts, helpTrigger
- Add REINFORCEMENT_CONFIG constants for mastery credit multipliers
- Add reinforcement tracking columns to player_skill_mastery:
  - needsReinforcement: flag for skills needing extra practice
  - lastHelpLevel: track struggling patterns
  - reinforcementStreak: track progress toward clearing reinforcement
- Add StudentHelpSettings interface and column to players:
  - helpMode: 'auto' | 'manual' | 'teacher-approved'
  - autoEscalationTimingMs: configurable help timing thresholds
  - beginnerFreeHelp: unlimited L1-L2 help without penalty
  - advancedRequiresApproval: require teacher auth for L2+ help

This closes the feedback loop between help usage and session planning:
- Help usage informs skill mastery scoring
- Reinforcement flags guide session planner to include extra practice
- Teacher has visibility into which skills need attention

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 15:16:52 -06:00

13 lines
715 B
SQL

-- Custom SQL migration file, put your code below! --
-- Add reinforcement tracking columns to player_skill_mastery table
ALTER TABLE `player_skill_mastery` ADD `needs_reinforcement` integer DEFAULT 0 NOT NULL;
--> statement-breakpoint
ALTER TABLE `player_skill_mastery` ADD `last_help_level` integer DEFAULT 0 NOT NULL;
--> statement-breakpoint
ALTER TABLE `player_skill_mastery` ADD `reinforcement_streak` integer DEFAULT 0 NOT NULL;
--> statement-breakpoint
-- Add help_settings column to players table
ALTER TABLE `players` ADD `help_settings` text DEFAULT '{"helpMode":"auto","autoEscalationTimingMs":{"level1":30000,"level2":60000,"level3":90000},"beginnerFreeHelp":true,"advancedRequiresApproval":false}';