fix: respect operator-specific scaffolding in mastery+mixed mode
Fix bug where scaffolding settings (answer boxes, carry boxes, etc.) weren't being respected in mastery+mixed mode (addition+subtraction). **Root cause:** validation.ts was reading from formState.displayRules (general field) instead of formState.additionDisplayRules and formState.subtractionDisplayRules (operator-specific fields). Additionally, it only allowed overriding problemNumbers and cellBorders, ignoring all other scaffolding settings. **Fix:** - Read from operator-specific display rules (additionDisplayRules, subtractionDisplayRules) when they exist - Fall back to general displayRules if operator-specific rules aren't set - Allow ALL display rule fields to override skill's recommendedScaffolding - Add debug logging to trace which rules are being used **Testing:** 1. Set mode to "mastery" with operator "mixed" (addition+subtraction) 2. Change scaffolding setting (e.g., answer boxes from "always" to "never") 3. Verify the preview now respects the custom scaffolding setting Fixes validation.ts:288-318 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -48,7 +48,5 @@
|
|||||||
"ask": []
|
"ask": []
|
||||||
},
|
},
|
||||||
"enableAllProjectMcpServers": true,
|
"enableAllProjectMcpServers": true,
|
||||||
"enabledMcpjsonServers": [
|
"enabledMcpjsonServers": ["sqlite"]
|
||||||
"sqlite"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,10 @@ export function useWorksheetState(
|
|||||||
|
|
||||||
if (affectsProblems) {
|
if (affectsProblems) {
|
||||||
newState.seed = Date.now() % 2147483647
|
newState.seed = Date.now() % 2147483647
|
||||||
console.log('[useWorksheetState] Problem settings changed - generated new seed:', newState.seed)
|
console.log(
|
||||||
|
'[useWorksheetState] Problem settings changed - generated new seed:',
|
||||||
|
newState.seed
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('[useWorksheetState] New formState:', {
|
console.log('[useWorksheetState] New formState:', {
|
||||||
|
|||||||
@@ -286,29 +286,36 @@ export function validateWorksheetConfig(formState: WorksheetFormState): Validati
|
|||||||
const subSkill = getSkillById(subSkillId as any)
|
const subSkill = getSkillById(subSkillId as any)
|
||||||
|
|
||||||
if (addSkill?.recommendedScaffolding && subSkill?.recommendedScaffolding) {
|
if (addSkill?.recommendedScaffolding && subSkill?.recommendedScaffolding) {
|
||||||
// Merge user's displayRules with skill's recommended scaffolding
|
// Merge user's operator-specific displayRules with skill's recommended scaffolding
|
||||||
// User's displayRules take precedence for problemNumbers and cellBorders (layout options)
|
// User's rules (if set) take precedence over skill's recommendations
|
||||||
const userDisplayRules: Partial<DisplayRules> = formState.displayRules || {}
|
// Fall back to general displayRules if operator-specific rules don't exist
|
||||||
|
const userAdditionRules: Partial<DisplayRules> =
|
||||||
|
(formState as any).additionDisplayRules || formState.displayRules || {}
|
||||||
|
const userSubtractionRules: Partial<DisplayRules> =
|
||||||
|
(formState as any).subtractionDisplayRules || formState.displayRules || {}
|
||||||
|
|
||||||
|
console.log('[MIXED MODE SCAFFOLDING] User rules:', {
|
||||||
|
additionRules: userAdditionRules,
|
||||||
|
subtractionRules: userSubtractionRules,
|
||||||
|
generalRules: formState.displayRules,
|
||||||
|
})
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
...baseConfig,
|
...baseConfig,
|
||||||
additionDisplayRules: {
|
additionDisplayRules: {
|
||||||
...addSkill.recommendedScaffolding,
|
...addSkill.recommendedScaffolding,
|
||||||
// Override layout options with user's choices
|
...userAdditionRules, // User's custom rules override skill's recommendations
|
||||||
problemNumbers:
|
|
||||||
userDisplayRules.problemNumbers ?? addSkill.recommendedScaffolding.problemNumbers,
|
|
||||||
cellBorders:
|
|
||||||
userDisplayRules.cellBorders ?? addSkill.recommendedScaffolding.cellBorders,
|
|
||||||
},
|
},
|
||||||
subtractionDisplayRules: {
|
subtractionDisplayRules: {
|
||||||
...subSkill.recommendedScaffolding,
|
...subSkill.recommendedScaffolding,
|
||||||
// Override layout options with user's choices
|
...userSubtractionRules, // User's custom rules override skill's recommendations
|
||||||
problemNumbers:
|
|
||||||
userDisplayRules.problemNumbers ?? subSkill.recommendedScaffolding.problemNumbers,
|
|
||||||
cellBorders:
|
|
||||||
userDisplayRules.cellBorders ?? subSkill.recommendedScaffolding.cellBorders,
|
|
||||||
},
|
},
|
||||||
} as any
|
} as any
|
||||||
|
|
||||||
|
console.log('[MIXED MODE SCAFFOLDING] Final config:', {
|
||||||
|
additionDisplayRules: config.additionDisplayRules,
|
||||||
|
subtractionDisplayRules: config.subtractionDisplayRules,
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
console.log('[MIXED MODE SCAFFOLDING] Missing recommendedScaffolding', {
|
console.log('[MIXED MODE SCAFFOLDING] Missing recommendedScaffolding', {
|
||||||
addSkill: addSkill?.name,
|
addSkill: addSkill?.name,
|
||||||
|
|||||||
Reference in New Issue
Block a user