/* Assessment surface — derivative problem, non-MCQ, graph-aware
Mode signaling: dense, evaluative, distinct from concept page. */
const AssessmentSurface = () => {
const [step, setStep] = React.useState(2); // we're partway through
const [showHint, setShowHint] = React.useState(true);
const Tex = ({ tex, display }) => {
const ref = React.useRef(null);
React.useEffect(() => {
if (window.katex && ref.current) {
try { window.katex.render(tex, ref.current, { displayMode: !!display, throwOnError: false }); } catch(e){}
}
}, [tex, display]);
return ;
};
const steps = [
{ n:"i", label:"Identify", status:"done", title:"Recognize the structure" },
{ n:"ii", label:"Decompose",status:"done", title:"Find inner & outer functions" },
{ n:"iii", label:"Apply", status:"current", title:"Differentiate each part" },
{ n:"iv", label:"Combine", status:"locked", title:"Assemble the chain" },
{ n:"v", label:"Verify", status:"locked", title:"Check at a known point" },
];
return (
{/* Mode bar — assessment is evaluative, not exploratory.
Black band signals the mode shift. */}
ASSESSMENT
·
eval.calc.derivative.034
·
Construct · Chain rule application
Time
04:12 / 12:00
Stake
competency · graded
{/* Step rail */}
{/* Problem */}
PROBLEM 03/05
prob.calc.0843
difficulty · Elo 1420
Derive an expression — chain rule
Compute from first principles of the chain rule. Show your decomposition. Construct the answer; do not pattern-match.
{/* Step iii — Apply, current */}
iii
Apply · differentiate inner and outer
{/* outer */}
✓
{/* inner — current focus */}
checking…
Write as a single expression in .
{/* assemble — locked */}
complete previous step
{/* Past attempts trace */}
Trace
step ii · 2 attempts · resolved 02:34
02:01
Attempted ,
inverted
02:34
Corrected: outer = , inner =
ok
{/* Right rail — graph-aware support, surfaces on stumble */}
);
};
window.AssessmentSurface = AssessmentSurface;