AL-76 · Selected Studies — Education

Classroom Decision Simulator

Teacher decisions happen in seconds. This simulator replays real classroom situations — a student who won't engage, a lesson falling apart, a conflict between peers — and asks you to choose a response. Each choice shows what the research says about its likely effects, so you build decision-making intuition grounded in pedagogy rather than instinct alone.

📊 Scenarios drawn from practitioner research in classroom management and instructional practice (Marzano 2003, Wong & Wong 2009, Emmer & Evertson 2013)
🔒All inputs are processed locally in your browser. Nothing is transmitted, stored, or logged. Inputs disappear when you close the tab.

Complete at least one scenario to see your debrief here.

edbackText = document.getElementById('feedbackText'); feedbackText.innerHTML = prevChoice.feedback; feedbackArea.style.display = 'block'; document.getElementById('nextBtn').textContent = index < SCENARIOS.length - 1 ? 'Next Scenario →' : 'View Debrief →'; } else { document.getElementById('feedbackArea').style.display = 'none'; } document.getElementById('scenarioActiveArea').style.display = 'block'; document.getElementById('scenarioActiveArea').scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } // ── Make Choice ──────────────────────────────────────────────────────────── function makeChoice(scenarioIndex, letter) { const scenario = SCENARIOS[scenarioIndex]; const choice = scenario.choices.find(c => c.letter === letter); if (!choice) return; simState.choicesMade[scenario.id] = { letter: choice.letter, text: choice.text, feedback: choice.feedback, quality: choice.quality }; // Update choice buttons const buttons = document.querySelectorAll('#choicesGrid .choice-btn'); buttons.forEach((btn, i) => { btn.disabled = true; const c = scenario.choices[i]; if (c.letter === letter) btn.classList.add('chosen'); if (c.quality === 'best') btn.classList.add('best'); if (c.quality === 'risky' && c.letter === letter) btn.classList.add('risky'); }); // Show feedback const feedbackArea = document.getElementById('feedbackArea'); document.getElementById('feedbackText').innerHTML = choice.feedback; feedbackArea.style.display = 'block'; document.getElementById('nextBtn').textContent = scenarioIndex < SCENARIOS.length - 1 ? 'Next Scenario →' : 'View Debrief →'; feedbackArea.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); // Auto-mark complete simState.completed[scenario.id] = true; renderSelector(); } // ── Next ─────────────────────────────────────────────────────────────────── function markCompleteAndNext() { const idx = simState.activeScenarioIndex; if (idx < SCENARIOS.length - 1) { openScenario(idx + 1); } else { switchTab(2); } } // ── Debrief ──────────────────────────────────────────────────────────────── function renderDebrief() { const container = document.getElementById('debriefContent'); const completed = Object.keys(simState.choicesMade); if (!completed.length) { container.innerHTML = '

Complete at least one scenario to see your debrief here.

'; return; } const allDone = completed.length === SCENARIOS.length; let html = ''; if (allDone) { html += `
🎓
All 4 scenarios complete. Review your choices and the research-informed feedback below. Consider what patterns you notice in your decision-making tendencies.
`; } SCENARIOS.forEach(scenario => { const choice = simState.choicesMade[scenario.id]; if (!choice) return; html += `
Scenario ${scenario.id}: "${scenario.title}"
${scenario.setup}
${choice.letter}. ${choice.text}
${choice.feedback}
`; }); container.innerHTML = html; document.getElementById('exportRow').style.display = completed.length ? 'flex' : 'none'; } // ── Policy Mandate Schema ───────────────────────────────────────────────────────────── const AP2Schema = { validMandateTypes: [ 'job_transition_record','compensation_package_record','credential_roi_record','education_cost_record', 'loan_repayment_record','career_break_record','exam_cost_record','scholarship_record', 'workforce_board_record','human_capital_record','freelance_tax_record','equity_compensation_record', 'geo_arbitrage_record','visa_strategy_record','license_reciprocity_record','mba_roi_record', 'test_prep_record','international_student_record','parent_college_record','cpd_tracking_record', 'job_search_record','offer_negotiation_record','separation_package_record','benefits_enrollment_record', 'education_savings_record','apprenticeship_record','ai_skills_record','federal_private_comp_record', 'trade_degree_record','remote_tax_record','noncompete_record','military_civilian_record', 'professional_degree_record','workforce_pell_record','workforce_pell_credential_rank', 'net_worth_trajectory_record','signing_bonus_record','gig_income_record', 'cert_renewal_forecast_record','isa_loan_record','dual_enrollment_record', 'deferred_comp_457b_record','tutor_roi_record','test_retake_record', 'mba_portfolio_record','tuition_reimbursement_record','phd_pivot_record', 'law_school_roi_record','test_choice_record','exec_mba_record','stem_opt_record', 'english_test_choice_record','lsat_tier_record','mba_scholarship_record','consulting_roi_record', 'mba_yield_record','dual_degree_record','online_mba_record','mba_waitlist_record','deferred_mba_record', 'mba_reapplicant_record','mba_format_geo_record','law_ed_record','mim_mba_timing_record', 'lesson_design_record','assessment_item_record','classroom_scenario_record', 'gt_differentiation_record','instructor_toolkit_record', 'cefr_leveling_record','l1_interference_record','error_correction_record','tkt_lesson_record', 'primary_source_record','historiography_record','anachronism_record','counterfactual_record', 'franchise_governance_record','survey_design_record','payroll_efficiency_record','umpire_accuracy_record', 'micro_theory_record','economic_systems_record','economists_panel_record', 'economic_history_record','econ_principles_record' ], validate(payload) { if (!payload || typeof payload !== 'object') return { valid: false, error: 'Payload must be an object.' }; if (!payload.chaingraph_version) return { valid: false, error: 'Missing chaingraph_version.' }; if (!payload.mandate_type) return { valid: false, error: 'Missing mandate_type.' }; if (!payload.ap2_mandate_type || !this.validMandateTypes.includes(payload.ap2_mandate_type)) return { valid: false, error: `Invalid ap2_mandate_type: ${payload.ap2_mandate_type}` }; if (!payload.tool_id) return { valid: false, error: 'Missing tool_id.' }; if (!payload.generated_at) return { valid: false, error: 'Missing generated_at.' }; return { valid: true }; } }; // ── Export ───────────────────────────────────────────────────────────────── function exportMarkdown() { const completed = Object.keys(simState.choicesMade); if (!completed.length) { showToast('No scenarios completed yet.'); return; } let md = `# Classroom Decision Simulator — Session Debrief\n*Generated by ApexLogics Classroom Decision Simulator (AL-76)*\n\n`; SCENARIOS.forEach(scenario => { const choice = simState.choicesMade[scenario.id]; if (!choice) return; md += `## Scenario ${scenario.id}: "${scenario.title}"\n\n`; md += `**Situation:** ${scenario.setup}\n\n`; md += `**Your choice (${choice.letter}):** ${choice.text}\n\n`; // Strip HTML tags from feedback const div = document.createElement('div'); div.innerHTML = choice.feedback; md += `**Research feedback:** ${div.textContent}\n\n---\n\n`; }); const blob = new Blob([md], { type: 'text/markdown' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'classroom-simulator-debrief.md'; a.click(); URL.revokeObjectURL(url); } async function exportAP2() { const completed = Object.keys(simState.choicesMade); if (!completed.length) { showToast('No scenarios completed yet.'); return; } const scenariosCompleted = SCENARIOS .filter(s => simState.choicesMade[s.id]) .map(s => { const choice = simState.choicesMade[s.id]; const div = document.createElement('div'); div.innerHTML = choice.feedback; return { scenario_id: s.id, scenario_title: s.title, choice_made: choice.letter, choice_text: choice.text, choice_quality: choice.quality, received_feedback_summary: div.textContent.slice(0, 300) }; }); const payload = { mandate_type: 'classroom_scenario_record', tool_id: 'AL-76', generated_at: new Date().toISOString(), scenarios_completed: scenariosCompleted, total_scenarios: SCENARIOS.length, completed_count: completed.length, best_practice_choices: scenariosCompleted.filter(s => s.choice_quality === 'best').length }; // ── OpenChainGraph L1 + L2 ── payload.chaingraph_version = "0.1.0"; payload.ap2_mandate_type = payload.mandate_type; payload.mandate_type = "org.apexlogics/research_estimate"; if (!payload.al_id) payload.al_id = payload.tool_id || "AL-76"; payload.chain = { parent_hashes: [], parent_tool_ids: [], chain_depth: 0 }; try { const _cgIn = new URLSearchParams(location.search).get("ap2"); if (_cgIn) { const _cgP = JSON.parse(_cgIn); if (_cgP && _cgP.execution_hash) { payload.chain = { parent_hashes: [_cgP.execution_hash], parent_tool_ids: [_cgP.tool_id || _cgP.al_id || null], chain_depth: ((_cgP.chain && _cgP.chain.chain_depth) || 0) + 1 }; } } } catch (_e) {} const _cgDomain = {}; for (const _k in payload) { if (["chaingraph_version","ap2_mandate_type","mandate_type","tool_id","tool_version","al_id","generated_at","tool_name","chain","policy_parameters","output_payload","compliance_flags","audit_signature","execution_hash"].indexOf(_k) === -1) _cgDomain[_k] = payload[_k]; } payload.policy_parameters = { execution_backend: "js", hash_precision: "monetary_usd:2dp", inputs: _cgDomain }; payload.output_payload = _cgDomain; payload.compliance_flags = []; payload.audit_signature = { client_side_executed: true, zero_pii_verified: true, deterministic_run: true }; payload.execution_hash = await apexHash(payload.policy_parameters, payload.output_payload); // ── OCG v0.4 envelope (post-validate, hash-excluded; CONTRACT additive-only) ── payload.chaingraph_version = "0.4.0"; payload['@context'] = ['https://ainumbers.co/chaingraph/context/v0.3/context.jsonld']; payload.buildType = 'https://ainumbers.co/chaingraph/context/v0.2#WebCryptoSHA256'; payload.compute_mode = 'browser'; if (typeof payload.tool_version === 'undefined') payload.tool_version = '1.0.0'; // ── OCG v0.4 strict envelope: relocate legacy fields into hash-excluded apex_meta ── payload.tool_id = "69-classroom-decision-simulator"; payload.audit_signature = payload.audit_signature || {}; const _cgPreval = Object.assign({}, payload); { const _ALLOWED = new Set(['@context','chaingraph_version','compute_mode','mandate_type','tool_id','tool_version','generated_at','buildType','semantic_profile','dct:conformsTo','execution_hash','chain','policy_parameters','output_payload','supersedes','anchor_bindings','compliance_flags','audit_signature']); const _meta = (payload.audit_signature.apex_meta = payload.audit_signature.apex_meta || {}); for (const _k of Object.keys(payload)) { if (!_ALLOWED.has(_k)) { if (_k !== 'inputs' && _k !== 'outputs') _meta[_k] = payload[_k]; delete payload[_k]; } } } const result = AP2Schema.validate(_cgPreval); if (!result.valid) { showToast('Policy Mandate validation error: ' + result.error); return; } const blob = new Blob([JSON.stringify(payload, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'classroom-simulator-ap2.json'; a.click(); URL.revokeObjectURL(url); } // ── Toast ────────────────────────────────────────────────────────────────── function showToast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 3500); } // ── Init ─────────────────────────────────────────────────────────────────── renderSelector(); const MANIFEST = { "al_id": "AL-76", "version": "1.0.0", "title": "Classroom Decision Simulator", "slug": "69-classroom-decision-simulator", "file_path": "tools/69-classroom-decision-simulator/index.html", "description": "Interactive branching simulator with 4 real classroom scenarios — disengagement, pacing crises, challenge questions, authority tests — each choice revealing research-informed feedback from Marzano, Wong & Wong, and Emmer & Evertson.", "category": "selected_studies_education", "journeys": [ "instruction", "professional_development", "classroom_management" ], "personas": [ "educator", "student_teacher", "new_teacher", "teacher_trainer" ], "tags": [ "classroom-management", "decision-making", "scenarios", "pedagogy", "teacher-training", "marzano", "wong", "emmer" ], "status": "shipped", "maintenance": "very_low", "data_vintage": "Practitioner research: Marzano 2003, Wong & Wong 2009, Emmer & Evertson 2013", "frozen_baseline": false, "ap2_export": true, "ap2_mandate_types": [ "classroom_scenario_record" ], "downstream_handoff_candidates": [ "71-first-time-instructor-toolkit" ], "mcp_tool_definition": { "name": "simulate_classroom_decisions", "description": "Run a teacher through 4 branching classroom management scenarios with research-backed feedback on each choice.", "input_schema": { "type": "object", "properties": {}, "required": [] } }, "execution": { "entry": "index.html", "main_function": "openScenario", "runtime": "browser", "network_calls": "none" }, "sister_suite": "https://ainumbers.co", "consulting_site": "https://apexadvisory.site", "license": "CC-BY-4.0", "regulatory_citations": [] }; /* ── MCP / MANIFEST TOGGLE (standardized, additive) ── */ function toggleMfst(){var b=document.getElementById('mfstBody'),a=document.getElementById('mfstArr');if(b.style.display==='none'||b.style.display===''){b.style.display='block';if(a)a.textContent='▲';document.getElementById('mfstCode').textContent=JSON.stringify(MANIFEST,null,2);}else{b.style.display='none';if(a)a.textContent='▼';}}