From a945a620c40661c3ff026fc3568f708744dc27b2 Mon Sep 17 00:00:00 2001 From: Thomas Hallock Date: Tue, 18 Nov 2025 06:53:29 -0600 Subject: [PATCH] feat: add 'auto' option for scaffolding to defer to mastery progression MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add new 'auto' display rule value that allows users to defer scaffolding decisions to the mastery progression's skill recommendations while still being able to override individual settings. **Changes:** 1. **Type System (config-schemas.ts)** - Add 'auto' to displayRuleValues constant - Update all V4 schemas (Smart, Manual, Mastery) to include 'auto' - Document 'auto' as "defer to mastery progression's skill recommendation" 2. **UI (RuleThermometer.tsx, ScaffoldingTab.tsx)** - Add 'Auto' option to scaffolding thermometer controls - Add 'Auto' preset button (only shown in mastery mode) - Style Auto button with green theme to indicate recommended default 3. **Validation Logic (validation.ts)** - Add mergeDisplayRulesWithAuto() helper function - Resolve 'auto' values to skill's recommendedScaffolding - Support both single-operator and mixed-operator mastery modes - Add debug logging to trace auto resolution **How it works:** - When value is 'auto' → use skill's recommendation - When value is anything else → use user's manual override - When value is undefined → use skill's recommendation (fallback) **Example:** ```typescript // User sets answerBoxes to 'auto', carryBoxes to 'never' userRules = { answerBoxes: 'auto', // → Resolves to skill.recommendedScaffolding.answerBoxes carryBoxes: 'never' // → Manual override, uses 'never' } ``` This resolves the conflict between mastery progression recommendations and manual scaffolding controls, allowing users to defer to skill expertise while retaining the ability to override specific settings. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../config-panel/RuleThermometer.tsx | 1 + .../config-sidebar/ScaffoldingTab.tsx | 42 +++ .../app/create/worksheets/config-schemas.ts | 349 ++++-------------- .../src/app/create/worksheets/validation.ts | 76 +++- 4 files changed, 170 insertions(+), 298 deletions(-) diff --git a/apps/web/src/app/create/worksheets/components/config-panel/RuleThermometer.tsx b/apps/web/src/app/create/worksheets/components/config-panel/RuleThermometer.tsx index c6e68c19..35e6a1fe 100644 --- a/apps/web/src/app/create/worksheets/components/config-panel/RuleThermometer.tsx +++ b/apps/web/src/app/create/worksheets/components/config-panel/RuleThermometer.tsx @@ -12,6 +12,7 @@ export interface RuleThermometerProps { } const RULE_OPTIONS: Array<{ value: RuleMode; label: string; short: string }> = [ + { value: 'auto', label: 'Auto (Use Mastery Progression)', short: 'Auto' }, { value: 'always', label: 'Always', short: 'Always' }, { value: 'whenRegrouping', label: 'When Regrouping', short: 'Regroup' }, { value: 'whenMultipleRegroups', label: 'Multiple Regroups', short: '2+' }, diff --git a/apps/web/src/app/create/worksheets/components/config-sidebar/ScaffoldingTab.tsx b/apps/web/src/app/create/worksheets/components/config-sidebar/ScaffoldingTab.tsx index c41f0fe3..afb9aff0 100644 --- a/apps/web/src/app/create/worksheets/components/config-sidebar/ScaffoldingTab.tsx +++ b/apps/web/src/app/create/worksheets/components/config-sidebar/ScaffoldingTab.tsx @@ -69,6 +69,48 @@ export function ScaffoldingTab() { Quick Presets
+ {/* Auto preset - defer to mastery progression (only show in mastery mode) */} + {formState.mode === 'mastery' && ( + + )}