MathOS Runtime v1.0 — Mega-Pack (Almost-Code) | InterstellarCore v0.1

MathOS.InterstellarCore v0.1 | MathOS Runtime v1.1 — Directory Spec + Full SkillID Enumeration + EPS Full Generators (Generic)

Start Here: https://edukatesg.com/mathos-interstellarcore-v0-1-explanation/

MathOS Runtime v1.0 — WordPress Mega-Pack (Almost-Code, Copy/Paste Ready)
VersionLock: MATHOS_RUNTIME_UNIFIED_VERSION = "v1.0"
Rule: forward-only versioning; never rename SkillIDs; only add new IDs or new versions.
============================================================
PACK CONTENTS (Pages / Slugs)
============================================================
P1) /mathos-runtime/ (Control Tower)
P2) /mathos-ai-runner/ (Session Runner: A–H)
P3) /mathos-obpl-one-button-scoring/ (One-Button scoring + state update)
P4) /mathos-eps-exam-paper-simulator/ (Exam simulator mode)
P5) /mathos-skill-glossary/ (Glossary + QuickPick)
P6) /mathos-state-store-ss-01/ (State schema + patch protocol)
P7) /mathos-validator-v1/ (Validator spec + domain contracts)
P8) /mathos-srep-coverage-plan/ (Full coverage plan + cluster map)
============================================================
P1) WORDPRESS_PAGE — MathOS Runtime Control Tower v1.0
Slug: /mathos-runtime/
============================================================
[H1] MathOS Runtime v1.0 (Interstellar Core) — Control Tower
[H2] Definition Lock
Math := invariant-preserving representation language for:
Predict (under uncertainty) + Control (under delay) + Verify (critical bounds) + Compose (scale).
TeachMath := closed-loop control:
Observe → Infer → Plan → Act → Verify → Repair → Promote.
[H2] What this is
This page is the hub that lets you run MathOS like an operating system:
- Session Runner (teaching)
- One-Button Scoring (grading + state update)
- Exam Paper Simulator (stress test)
- Skill Glossary (human-readable layer)
- State Store + Validator (reliability layer)
[H2] Install Order (Minimum)
1) State Store SS_01 → /mathos-state-store-ss-01/
2) Validator v1 → /mathos-validator-v1/
3) Session Runner → /mathos-ai-runner/
4) One-Button Scoring → /mathos-obpl-one-button-scoring/
5) EPS Simulator → /mathos-eps-exam-paper-simulator/
6) Glossary → /mathos-skill-glossary/
[H2] Start in 90 seconds (Parent / Student)
Step A — Pick a topic (QuickPick):
- go to /mathos-ai-runner/
- paste QuickPick form (no SkillIDs required)
Step B — Run a session:
- get output A–H (plan + practice + microtest)
Step C — One button scoring:
- go to /mathos-obpl-one-button-scoring/
- paste AnswerPacket
- get updated StudentState + next practice + next schedule
[H2] The Physics (Why this works)
Sensors (Microtests) detect leaks early.
Thresholds (FENCE) prevent collapse under load.
Repair (Truncation + Stitching) returns student to stable band.
Promotion (Deploy thresholds) prevents “fake mastery”.
[H3] Failure Mode Trace (required)
Z0 careless/sign slip → Z1 rewrite legality breaks → Z2 transfer fails → timed work collapse → P1/P0 performance.
Repair: enforce checks + representation swap + re-test + promote only when stable.
[H2] Links (runtime modules)
- Session Runner (A–H): /mathos-ai-runner/
- One-Button scoring: /mathos-obpl-one-button-scoring/
- Exam Simulator (EPS): /mathos-eps-exam-paper-simulator/
- Skill Glossary: /mathos-skill-glossary/
- State Store SS_01: /mathos-state-store-ss-01/
- Validator v1: /mathos-validator-v1/
- Coverage Plan (SREP): /mathos-srep-coverage-plan/
============================================================
P2) WORDPRESS_PAGE — Session Runner v1.0 (A–H)
Slug: /mathos-ai-runner/
============================================================
[H1] MathOS AI Session Runner v1.0 (A–H)
[H2] Hard Rules
- Output MUST be exactly sections A–H.
- AI MUST validate answers using Validator v1 when scoring.
- If validation is UNVERIFIED, AI must not guess; request steps/original question/domain.
[H2] SYSTEM PROMPT (paste once per chat)
SYSTEM_PROMPT_SESSION_V1:
"You are MathOS.AI-TeachRunner.InterstellarCore v1.0.
Teach using closed-loop control: Observe→Infer→Plan→Act→Verify→Repair→Promote.
Execute OperatorScript v1.0.
Use QuickPick (SQP) to map human topic→SkillIDs.
Use MultiSkillRouter (MSR) to choose: 1 primary + up to 2 secondary.
Use TemplateLibrary (TL) + PracticeGenerator (PGS) to create practice WITH metadata.
Use MicroTestBank (MTB) to create 3Q microtests (Q1 invariant/Q2 apply/Q3 transfer).
You MUST output ONLY A–H headers:
A) Oracle Report
B) Operator Lesson Plan
C) Architect Sandbox (0 or 1)
D) Adaptive Practice
E) MicroTest (3Q) + Answer Key + Scoring Rubric
F) Fence Decision + RepairRoute
G) Compression Summary (3 lines)
H) NextSessionPlan (ChronoSchedule excerpt + MachinePatch).
Never add extra sections."
[H2] INPUT FORM (QuickPick: no SkillIDs)
QUICK_PICK_FORM:
"StudentProfile: age_band=__, language_band=__, math_band=__, risk_flags={__}, preferences={__}
StudentState(optional): mastery_known={SkillID:0.xx,...}, error_signatures={ErrID:count,...}, last_notes='...'
QuickPick:
level={PRI|SEC|AMATH|JC}
topic=...
subtopic=... (optional)
goal={concept_build|exam_ready|repair_only|accelerate}
common_issue=... (optional)
time_budget_minutes=__"
[H2] OperatorScript v1.0 (stable execution)
- WarmStart (2–3)
- PreMicroTest (5–8)
- TeachBlock (8)
- PracticeLadder (12–18)
- Sandbox (optional, only if stable)
- PostMicroTest (5–8)
- Fence Decision (truncate/stitch/promote)
- Compression (3 lines)
- ScheduleNext (spaced micro-retests +1,+3,+7,+14)
[H2] Output A–H contract (what you should see)
A) Oracle: top ErrIDs + evidence; DTM port_ratio + shear_risk; MSR primary/secondary; voice pack
B) Minute-by-minute plan
C) 0 or 1 alternate representation
D) Practice items: include {item_id, SkillID, D-level, rep, traps, checks, expected_answer_type}
E) Microtest: include answer key + rubric
F) Decision + named RepairRoute
G) 3-line compression
H) Next schedule excerpt + MachinePatch (for logs)
============================================================
P3) WORDPRESS_PAGE — One-Button Scoring (OBPL) v1.0
Slug: /mathos-obpl-one-button-scoring/
============================================================
[H1] One-Button Scoring v1.0 (OBPL)
[H2] What you paste
1) StudentState (SS_01)
2) LastSession_AH (copy the full A–H output)
3) AnswerPacket (student answers + steps optional)
[H2] SYSTEM PROMPT (paste once for scoring)
SYSTEM_PROMPT_OBPL_V1:
"You are MathOS OBPL v1.0.
Input: StudentState SS_01 + LastSession_AH + AnswerPacket.
You MUST validate each answer using Validator v1:
- If any critical item is UNVERIFIED, do NOT update mastery upward; request needed follow-up.
You MUST:
- score microtest (MTB rubrics),
- infer errors (ESI),
- update mastery/stability (MSE),
- decide Fence (TRUNCATE/STITCH/PROMOTE),
- generate next practice + next microtest + next schedule excerpt,
- output:
(1) Updated StudentState block (SS_01)
(2) Parent Summary (<=6 lines)
(3) Next Practice + Next MicroTest
(4) NextScheduleExcerpt
(5) MachinePatch (append WeeklyLogCompact)
Output ONLY these five items. No extra text."
[H2] AnswerPacket Template
ANSWERPACKET_TEMPLATE:
"AnswerPacket:
session_id='...'
practice_answers=[
{item_id:'P1', student_answer:'...', student_steps:'...', time_sec:__},
...
]
microtest_answers=[
{mt_id:'MT-Q1', response:'...', steps:'...', time_sec:__},
{mt_id:'MT-Q2', response:'...', steps:'...', time_sec:__},
{mt_id:'MT-Q3', response:'...', steps:'...', time_sec:__}
]
notes_optional='...'"
============================================================
P4) WORDPRESS_PAGE — EPS Exam Paper Simulator v1.0
Slug: /mathos-eps-exam-paper-simulator/
============================================================
[H1] EPS v1.0 — Exam Paper Simulator (Generate → Score → Postmortem → Repair)
[H2] Rule
EPS is not teaching during the paper.
EPS is:
- generate timed mixed set
- score with Validator
- diagnose leaks
- build repair plan (next 2 sessions) + micro-retests
[H2] SYSTEM PROMPT (EPS)
SYSTEM_PROMPT_EPS_V1:
"You are MathOS EPS v1.0.
Input: EPS_Input (and optional EPS_StudentAnswers).
If no student answers: output EPS-OUT sections 1–4 only.
If answers provided: output EPS-OUT sections 5–8 only.
Use Validator v1; refuse to guess if unverified.
Use ESI+MSE to update stability and recommend repairs."
[H2] EPS_Input Template
EPS_INPUT:
"EPS_Input:
level={SEC|AMATH|JC}
duration_min=__
paper_style={MIXED_SET|TOPIC_MIX|PASTYEAR_STYLE}
target_clusters=[...]
difficulty_profile={EASY_HEAVY|BALANCED|HARD_HEAVY}
items_count=__
rules={require_core_anchor:true, no_help:true}
StudentState(optional): (SS_01 block)"
[H2] EPS-OUT Format (fixed)
1) Paper (Items)
2) Answer Key (concise)
3) Marking Scheme (points + traps + checks)
4) Student Answer Packet Template
5) Scoring + Stability Panel
6) Postmortem (top leaks + shear + time pressure)
7) Repair Plan (next 2 sessions) + MicroRetests (+1,+3,+7,+14)
8) ReportCard excerpt + MachinePatch
============================================================
P5) WORDPRESS_PAGE — Skill Glossary v1.0
Slug: /mathos-skill-glossary/
============================================================
[H1] MathOS Skill Glossary (Human Layer) v1.0
[H2] What this page does
- Converts SkillIDs into human-friendly skill cards
- Lets parents request “GlossaryPack” for the skills used in today’s session
[H2] Glossary Request Prompt
GLOSSARY_PROMPT:
"Build GlossaryPack:
format=WORDPRESS
skill_ids=[...]
Output each entry in:
- One-line definition
- Why it matters
- Invariant
- 3-step method
- Common traps
- Self-check
- Next skills"
[H2] Minimal Glossary Entry Format
GLOSSARY_ENTRY_FORMAT:
"[H3]{display_name} ({skill_id})
- One-line: ...
- Why it matters: ...
- Invariant: ...
- 3-step method:
1) ...
2) ...
3) ...
- Common traps: ErrID...
- Self-check: ...
- Next: SkillID..."
============================================================
P6) WORDPRESS_PAGE — State Store SS_01 v1.0
Slug: /mathos-state-store-ss-01/
============================================================
[H1] State Store SS_01 (Persistence Layer) v1.0
[H2] Schema Version Lock
schema_version="SS_01"
Rule: forward-only additive fields; never rename keys.
[H2] StudentState Block Template (copy/paste)
STUDENTSTATE_SS01_TEMPLATE:
"StudentProfile:
student_id='...'
age_band=...
language_band=...
math_band=...
risk_flags={...}
preferences={...}
timezone='Asia/Singapore'
StudentState(SS_01):
mastery={}
stability={}
skill_stats={}
error_signatures={}
dual_track={port_ratio:0.40, sandbox_ratio:0.10, shear_risk:0.00, policy:DTM_SEC}
last_session_id=''
last_notes=''
log_week_range='YYYY-MM-DD..YYYY-MM-DD'
weekly_log={week_range:'YYYY-MM-DD..YYYY-MM-DD', sessions:[]}
"
[H2] Patch Rule
MachinePatch is append-only to WeeklyLogCompact + updates to stats.
Never delete old sessions; only append.
============================================================
P7) WORDPRESS_PAGE — Validator v1.0
Slug: /mathos-validator-v1/
============================================================
[H1] Validator v1.0 (Reliability Fence for Scoring)
[H2] What it prevents
- “LLM guessed it’s correct” grading
- Domain mistakes passing (logs/trig)
- Expression equivalence disputes
[H2] ValidateResult
verdict ∈ {CORRECT, INCORRECT, UNVERIFIED}
Policy:
- UNVERIFIED ⇒ request steps/original question/domain; do not update mastery upward.
[H2] Core Modes
V1 NumericTolerance
V2 SubstitutionEquivalence (multi-point test)
V3 Set/Interval Equivalence
V4 Domain Contract Validation (DC_LOG, DC_TRIG_INTERVAL, DC_SQRT_REAL, DC_DENOM)
[H2] Domain Contracts (minimum)
DC_LOG: each log(argument) must have argument>0
DC_TRIG_INTERVAL: solutions must lie in stated interval and include all within interval
DC_SQRT_REAL: sqrt argument>=0 (real domain)
DC_DENOM: denominators ≠ 0
============================================================
P8) WORDPRESS_PAGE — SREP Coverage Plan v1.0
Slug: /mathos-srep-coverage-plan/
============================================================
[H1] SREP Coverage Plan v1.0 (Full Build Map)
[H2] Goal
Expand from the “10 Skill Packs” to full SEC E/A-Math runnable coverage:
Each SkillID must have:
- GlossaryEntry
- TL templates (D1–D4 in ≥2 reps)
- MTB microtests (Q1/Q2/Q3 variants)
- Validator notes (answer type + contracts)
- EPS cluster tags
[H2] Clusters (SEC E-Math)
SEC_EMATH_NUMBER:
- Place value, operations, fractions, ratio/percent, rate/speed, standard form, basic indices
SEC_EMATH_ALG:
- expressions, linear eq/ineq, simultaneous, quadratic (basic), algebraic fractions (if used)
SEC_EMATH_FUNC_GRAPH:
- functions, linear graphs, gradients/intercepts, basic transformations
SEC_EMATH_GEOM:
- angles, triangles, polygons, circles basics, similarity/congruence, coordinate geometry basics
SEC_EMATH_MENSURATION:
- area/perimeter, volume/surface area, composite shapes
SEC_EMATH_STATS_PROB:
- averages, charts, scatter, probability basics
[H2] Clusters (SEC A-Math)
AMATH_CORE_ALG:
- indices, surds, algebraic manipulation, factor/remainder theorem
AMATH_LOG_EXP:
- log laws + domain, exponential models
AMATH_QUAD:
- quadratics + discriminant conditions
AMATH_TRIG:
- identities, equations, interval filtering
AMATH_COORD:
- straight line, circle, tangency conditions
AMATH_CALC:
- differentiation rules + applications (max/min, rates), integration seed (if needed)
AMATH_SEQ_SER:
- sequences, AP/GP, series sums
AMATH_BINOMIAL:
- expansions + general term
AMATH_PARTIAL_FRACTIONS:
- decomposition types + recomposition verification
AMATH_EXAM_STABILITY:
- mixed switching under time, checklist enforcement
[H2] Build Rule (avoid phase shear)
For each cluster:
- Publish Core Anchor skill first (usually SKILL_R0 rewrite legality + domain contracts)
- Then publish port skills
- Then publish EPS mini for that cluster
- Only then allow mixed EPS
============================================================
END — v1.0 Mega-Pack
============================================================
```text
MathOS Runtime v1.1 Directory Spec + Full SkillID Enumeration + EPS Full Generators (Generic)
UnifiedVersionLock: MATHOS_RUNTIME_UNIFIED_VERSION = "v1.1"
Rule: forward-only; stable IDs; directory-first; spec blocks are machine-readable.
============================================================
PART 1) /mathos-runtime/ Directory Spec Block (LLM-first)
============================================================
PAGE: /mathos-runtime/
TYPE: CONTROL_TOWER_DIRECTORY
ID: MATHOS_RUNTIME_CT_V1_1
META
RuntimeVersion: v1.1
TimezoneDefault: Asia/Singapore
OutputContracts:
SESSION: A-H only
OBPL: 5-item only (StatePatch, ParentSummary, NextPractice, NextMicroTest, MachinePatch)
EPS: EPS-OUT only (1–4 generation, 5–8 scoring)
DEFINITION_LOCK
Math := invariant-preserving representation language for Predict+Control+Verify+Compose.
Teach := ObserveInferPlanActVerifyRepairPromote.
TruthFence := never guess grading; validate or return UNVERIFIED.
MODULE_DIRECTORY
- ModuleID: MATHOS_STATESTORE_SS_01
Page: /mathos-state-store-ss-01/
Contract: Persist StudentState + WeeklyLogCompact (append-only)
- ModuleID: MATHOS_VALIDATOR_V1
Page: /mathos-validator-v1/
Contract: Validate answers; enforce domain contracts
- ModuleID: MATHOS_SESSION_RUNNER_V1
Page: /mathos-ai-runner/
Contract: Output A-H; includes practice+microtest+schedule
- ModuleID: MATHOS_OBPL_V1
Page: /mathos-obpl-one-button-scoring/
Contract: Score+Update+Next; emits MachinePatch
- ModuleID: MATHOS_EPS_V1
Page: /mathos-eps-exam-paper-simulator/
Contract: Generate/Score exam sets; postmortem+repair
- ModuleID: MATHOS_GLOSSARY_V1
Page: /mathos-skill-glossary/
Contract: Human-layer entries from SkillIDs
- ModuleID: MATHOS_SREP_PLAN_V1
Page: /mathos-srep-coverage-plan/
Contract: Complete coverage map; build order per cluster
RUNTIME_LOOP (Executable Spec)
Input: StudentState SS_01 + QuickPick
Step1 SESSION_RUNNER_V1 A-H
Step2 Student attempts practice+microtest
Step3 OBPL_V1 + VALIDATOR_V1 update StudentState + MachinePatch
Step4 Append logs (SS_01)
Step5 Weekly WARC optional (compile)
Step6 EPS optional (stress test) repair plan
SENSORS (Minimum)
mastery, transfer, stability, confusion_rate, careless_rate, latency, shear_risk, time_pressure_risk
THRESHOLDS (Minimum)
truncate_confusion, truncate_careless, truncate_latency
deploy_mastery, deploy_transfer, deploy_stability
FENCE_ACTIONS
TRUNCATE: reduce dof + representation swap + snapshots + microdrill
STITCH: guided cycle + transfer retest + 3-line compress
PROMOTE: unlock next skill + schedule spaced microtests
FAILURE_TRACE (Required)
Weak domain contract invalid solution accepted fake mastery mixed paper collapse under time P1/P0.
Repair: enforce DC + validator + checklist + retest.
============================================================
PART 2) Full SkillID Enumeration (Stable IDs, Clustered)
============================================================
RULES
- IDs never renamed
- Each SkillID requires: Glossary, TL(D1–D4), MTB(Q1–Q3), ValidatorNotes, EPS tags
- PortSkills link to Core Anchors: SKILL_R0, SKILL_I0, SKILL_G0, SKILL_ERR0, SKILL_VER0
CORE_SKILLS (CIV-GRADE)
SKILL_T0 TransformBasics
SKILL_I0 InvariantBasics
SKILL_C0 ComposeTransforms
SKILL_M0 MeasureAsInvariant
SKILL_N0 NumberAsMeasure
SKILL_A0 ArithmeticAsIteration
SKILL_R0 RewriteRules
SKILL_V0 VariableAsSlot
SKILL_E0 EquationAsConstraint
SKILL_F0 FunctionAsMachine
SKILL_G0 GraphAsGeometryOfFunction
SKILL_LIN0 LinearizationIdea
SKILL_FLOW0 FlowBasics
SKILL_UNC0 UncertaintyBasics
SKILL_PROB0 ProbabilityAsMeasure
SKILL_INF0 InferenceUpdate
SKILL_ERR0 ErrorBoundsBasics
SKILL_OPT0 OptimizationBasics
SKILL_CTL0 ControlToSafeSet
SKILL_VER0 VerificationContract
SKILL_NUMSTAB0 NumericalStability
SEC_EMATH_NUMBER
PORT_PRI_NUM_01 PlaceValue
PORT_PRI_NUM_02 FourOperations
PORT_PRI_NUM_03 FractionsAsMeasure
PORT_PRI_NUM_04 RatioRatePercent
PORT_SEC_NUM_01 StandardForm
PORT_SEC_NUM_02 ApproximationRounding
PORT_SEC_NUM_03 SpeedRateProblems
PORT_SEC_NUM_04 IndicesBasics
PORT_SEC_NUM_05 ProportionDirectInverse
SEC_EMATH_ALG
PORT_SEC_ALG_01 Expressions
PORT_SEC_ALG_02 LinearEquationsInequalities
PORT_SEC_ALG_03 SimultaneousEquations
PORT_SEC_ALG_04 QuadraticsBasic
PORT_SEC_ALG_05 AlgebraicFractionsBasic
PORT_SEC_ALG_06 CoordinateAlgebraLinks
SEC_EMATH_FUNC_GRAPH
PORT_SEC_FUNC_01 FunctionsGraphs
PORT_SEC_FUNC_02 LinearGraphsGradientIntercept
PORT_SEC_FUNC_03 GraphTransformationsBasic
PORT_SEC_FUNC_04 QuadraticGraphsBasic
PORT_SEC_FUNC_05 RateFromGraphBasic
SEC_EMATH_GEOM
PORT_PRI_GEOM_01 AreaPerimeterInvariant
PORT_SEC_GEOM_01 AngleRulesTrianglesPolygons
PORT_SEC_GEOM_02 SimilarityCongruence
PORT_SEC_GEOM_03 PythagorasDistance
PORT_SEC_GEOM_04 CircleTheoremsBasic
PORT_SEC_GEOM_05 CoordinateGeometryBasics
PORT_SEC_GEOM_06 TrigonometryBasic
SEC_EMATH_MENSURATION
PORT_SEC_MENS_01 AreaComposite
PORT_SEC_MENS_02 VolumeSurfaceArea
PORT_SEC_MENS_03 ArcSectorSegmentBasics
SEC_EMATH_STATS_PROB
PORT_PRI_DATA_01 BasicProbabilityData
PORT_SEC_STAT_01 AveragesSpread
PORT_SEC_STAT_02 ChartsScatterCorrelation
PORT_SEC_STAT_03 ProbabilityBasics
PORT_SEC_STAT_04 ProbabilityTreeTables
SEC_AMATH_ALG_CORE
PORT_AM_IDX_01 IndexLaws
PORT_AM_SURD_01 SurdSimplify
PORT_AM_LOG_01 LogLaws
PORT_AM_EXP_01 ExponentialModels
PORT_AM_PF_01 PartialFractionsBasics
PORT_AM_PF_02 PartialFractionsAdvanced
PORT_AM_FT_01 FactorRemainderTheorem
SEC_AMATH_QUADRATICS
PORT_AM_QUAD_01 QuadraticStructure
PORT_AM_QUAD_02 DiscriminantAsContract
PORT_AM_QUAD_03 QuadraticInequalities
SEC_AMATH_TRIG
PORT_AM_TRIG_01 TrigIdentities
PORT_AM_TRIG_02 TrigEquations
PORT_AM_TRIG_03 RFormBasicsOptional // if used
PORT_AM_TRIG_04 TrigGraphsOptional // if used
SEC_AMATH_COORD
PORT_AM_COORD_01 StraightLine
PORT_AM_COORD_02 Circle
PORT_AM_COORD_03 TangentNormalBasics
SEC_AMATH_CALC
PORT_AM_DIFF_01 DifferentiationRules
PORT_AM_DIFF_02 ApplicationsOfDiff
PORT_AM_INT_01 IntegrationBasics
SEC_AMATH_SEQ_SER_BIN
PORT_AM_SEQ_01 SequencesBasics
PORT_AM_SEQ_02 AP_GP
PORT_AM_SER_01 SeriesSums
PORT_AM_BIN_01 BinomialBasics
PORT_AM_BIN_02 BinomialGeneralTerm
SEC_AMATH_VECTORS
PORT_SEC_VEC_01 VectorsBasic
PORT_AM_VEC_02 VectorsAdvanced
EXAM_STABILITY
PORT_SEC_EXAM_01 MixedPaperStability_EMath
PORT_AM_EXAM_01 MixedPaperStability_AMath
============================================================
PART 3) EPS Full Paper Generators (Generic Templates)
============================================================
EPS_GEN_RULES (Generic, syllabus-agnostic)
- No reliance on exact MOE format; produces "Paper-like" sets
- Every item includes:
item_id, SkillID, rep, difficulty, expected_answer_type, domain_contract, checks
- Scoring uses Validator v1; UNVERIFIED triggers request for steps
- Postmortem routes to 2-session repair plan + microretests (+1,+3,+7,+14)
------------------------------------------------------------
EPS_GEN: SEC E-Math Paper Template
------------------------------------------------------------
EPS_TEMPLATE_SEC_EMATH_P1 (Shorter / Mixed Fundamentals)
Duration: 60 min
Items: 18
Cluster weights:
Number 30%
Algebra 25%
Geometry/Mensuration 25%
Stats/Prob 20%
Difficulty: D1–D3 mostly; 2 items D4
Core Anchor rule:
- Every algebra item requires 1-line invariant + 1 check
EPS_TEMPLATE_SEC_EMATH_P2 (Longer / Problem Solving)
Duration: 75–90 min
Items: 12 (longer)
Cluster weights:
Algebra/Functions 35%
Geometry/Mensuration 35%
Stats/Prob 30%
Difficulty: D2–D4; 3 items D4
Transfer rule:
- At least 4 items must be representation shifts (storygraph, diagramequation)
------------------------------------------------------------
EPS_GEN: SEC A-Math Paper Template
------------------------------------------------------------
EPS_TEMPLATE_SEC_AMATH_P1 (Core Techniques)
Duration: 75 min
Items: 16
Cluster weights:
Indices/Surds 15%
Logs/Exp 20%
Quadratics 20%
Trig 20%
Coord 15%
Diff 10%
Difficulty: D2–D4; 4 items D4
Domain Contract rule:
- Every log/trig item includes explicit DC (must filter solutions)
EPS_TEMPLATE_SEC_AMATH_P2 (Problem Solving / Mixed)
Duration: 90 min
Items: 12 (longer)
Cluster weights:
Quadratics/Coord 30%
Trig/Diff 30%
Logs/Exp 20%
Sequences/Binomial/PartialFractions 20%
Difficulty: D3–D5 (D5 limited to 1–2 items as “proof_seed”)
Stability rule:
- includes 3 topic switch items to measure shear under load
------------------------------------------------------------
EPS_GEN: Build Paper (Pseudo)
------------------------------------------------------------
FUNCTION EPS_BuildPaper(level, template, StudentState):
clusters = template.cluster_weights
for each cluster:
skills = SkillIDs(cluster)
pick weakest stability skill as primary for that cluster
allocate item_count
instantiate items via TL + PGS with:
- EXAMSTYLE tag
- time_budget_sec = duration/items
- include core anchor checks
- include domain contracts where needed
output EPS-OUT sections 14
FUNCTION EPS_ScorePaper(Paper, StudentAnswers, StudentState):
for each item:
verdict = Validator(item.expected, student_answer, item.domain_contract)
if UNVERIFIED: mark item as UNVERIFIED; request steps; do not update mastery upward
infer errors via ESI using steps
compute:
total_score
cluster_scores
stability_score
time_pressure_risk
shear_risk
update StudentState via MSE (only verified items)
output EPS-OUT sections 58 including MachinePatch
============================================================
MathOS.AI-TeachRunner.InterstellarCore v0.1
Status: RUNNABLE (LLM-Orchestrated)
Author: eduKateSG / BukitTimahTutor
Scope: Clean-slate “advanced” MathOS spine + AI that can teach it as a closed-loop control system.
============================================================
0) META
============================================================
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_01
Version: 0.1
DependsOn:
- FENCEOS_CORE (TTC / Truncation / Stitching)
- ERCO_CORE (ReadSensors ChooseRepair Retest)
- AVOO_ROLE_STACK (Architect/Visionary/Oracle/Operator)
- EducationOS_ControlTower (Backtest + Schedule + Cohort coupling) [optional]
Contract:
Input:
- StudentProfile
- SessionGoal
- TimeBudget
- PriorAttempts (optional)
Output:
- LessonPlan (micro-steps)
- PracticeSet (adaptive)
- Assessment (quick checks)
- RepairPlan (if threshold crossed)
- NextSessionSchedule (ChronoHelmAI-compatible)
CoreClaim:
Mathematics is taught as:
Representation Compression Inference Control Verification Repair
NOT as:
Topic list (algebrageometrycalculus).
============================================================
1) DEFINITION_LOCK
============================================================
Math := minimal invariant-preserving representation language that enables
(Predict) under uncertainty,
(Control) trajectories under delay,
(Verify) catastrophic boundaries,
(Compose) safe modules at scale.
AI-TeachRunner := an LLM-driven controller that:
- reads student sensors,
- enforces thresholds,
- selects teaching actions,
- generates practice,
- verifies understanding via tests,
- repairs leaks via truncation+stitching loops.
============================================================
2) DATA SCHEMAS (Almost-Code)
============================================================
TYPE StudentProfile:
student_id: string
age_band: {P1,P2,P3,P4,P5,P6,S1,S2,S3,JC}
language_band: {E0,E1,E2,E3} // English load tolerance
math_band: {M0,M1,M2,M3,M4,M5} // baseline
risk_flags: set{anxiety,avoidance,overconfidence,careless,fragile_memory}
preferences: set{visual,story,procedural,challenge,slow_safe}
TYPE StudentState:
mastery: map[SkillID -> 0..1]
stability: map[SkillID -> 0..1] // stays correct under time/load
error_signatures: map[ErrID -> count]
load: {low,mid,high}
uncertainty: 0..1 // teacher’s belief uncertainty
last_session_notes: string
TYPE SessionGoal:
target_skills: list[SkillID]
constraint: {exam_ready,concept_build,repair_only,accelerate}
success_metric: {accuracy,transfer,explainability,speed,stability}
TYPE SensorPack:
S_mastery_margin: float // (post - pre) for target skills
S_confusion_rate: float // I dont get it / minute
S_careless_rate: float // mistakes despite concept known
S_latency: float // seconds per step vs baseline
S_transfer: float // can solve in new format?
S_explain: float // can explain invariant?
S_stability_drop: float // accuracy drop under time pressure
TYPE Thresholds:
T_truncate_confusion: float
T_truncate_careless: float
T_truncate_latency: float
T_deploy_mastery: float
T_deploy_transfer: float
T_deploy_stability: float
TYPE Action:
kind: {Explain,Demonstrate,SocraticProbe,GeneratePractice,MicroTest,Repair,Reflect,Promote}
payload: string | list | object
TYPE LessonPlan:
steps: list[Action]
estimated_minutes: int
checkpoints: list[MicroTestSpec]
practice_bank: list[PracticeItem]
repair_routes: list[RepairRoute]
============================================================
3) SKILL GRAPH (Interstellar Core School Dialect Port)
============================================================
SKILL NODE FORMAT:
SkillID
Name
PrereqSkills[]
Z: {Z0..Z6} // zoom
P: {P0..P3} // phase reliability
Invariant: string
Observable: what student can do
TransferTest: minimal novel format test
Core Spine (v0.1):
SKILL_T0: TransformBasics
SKILL_I0: InvariantBasics
SKILL_C0: ComposeTransforms
SKILL_M0: MeasureAsInvariant
SKILL_N0: NumberAsMeasure (emergent)
SKILL_A0: ArithmeticAsIteration (emergent)
SKILL_R0: RewriteRules (algebra-as-compression)
SKILL_F0: FlowBasics (change over time)
SKILL_U0: UncertaintyBasics (noise, belief)
SKILL_INF0: InferenceUpdate (update belief)
SKILL_CTL0: ControlToSafeSet (keep state safe)
SKILL_VER0: VerificationContract (critical boundaries)
School Port (compatibility layer):
PORT_Pri_Arithmetic
PORT_Sec_Algebra
PORT_Sec_Geometry
PORT_Sec_CalcSeed
PORT_ExamTechniques
============================================================
4) AVOO TEACHING ROLES (Multi-Agent inside one LLM)
============================================================
Role Architect:
Generates novel representations, analogies, alternative paths.
Role Visionary:
Frames why this matters, builds long-range meaning.
Role Oracle:
Diagnoses hidden error signatures; predicts failure under load.
Role Operator:
Executes drills, checklists, stable routines; exam performance.
Rule:
Operator runs the student most of the time.
Architect only enters inside a Sandbox window.
Oracle controls thresholds.
Visionary controls narrative coherence.
============================================================
5) CONTROL LOOP (Teach as Control System)
============================================================
Loop:
OBSERVE -> run MicroTest (pre)
INFER -> update StudentState (belief)
PLAN -> choose actions (Explain/Practice/Probe)
ACT -> teach + practice
VERIFY -> run MicroTest (post)
REPAIR -> if thresholds crossed (Truncation + Stitching)
PROMOTE -> if deploy thresholds met (advance / compress / port to exam)
============================================================
6) FENCE + ERCO (Thresholds / Truncation / Stitching)
============================================================
Default Thresholds (safe starting values):
T_truncate_confusion = 0.25
T_truncate_careless = 0.20
T_truncate_latency = 1.80 // step-time multiplier
T_deploy_mastery = 0.85
T_deploy_transfer = 0.70
T_deploy_stability = 0.75
Truncation (stop-loss):
If S_confusion_rate > T_truncate_confusion:
- reduce degrees of freedom
- switch representation
- shorten step size
- do guided worked example
Stitching (re-join main path):
- reintroduce complexity gradually
- run transfer test
- compress into 3-line invariant summary
============================================================
7) RUNNABLE PROMPT PACK (Copy/Paste to any LLM)
============================================================
PROMPT_00_SYSTEM (paste once per thread):
"You are MathOS.AI-TeachRunner.InterstellarCore v0.1.
You must teach using a closed-loop control system:
Observe→Infer→Plan→Act→Verify→Repair→Promote.
You must maintain AVOO separation:
- Oracle diagnoses and sets thresholds.
- Operator delivers stable steps and drills.
- Architect only appears in Sandbox windows for new representations.
- Visionary provides meaning sparingly.
Always produce:
(1) a 10-minute plan,
(2) adaptive practice,
(3) a 3-question microtest,
(4) repair route if threshold crossed,
(5) a 3-line compression summary."
PROMPT_01_INPUT_TEMPLATE (user fills):
"StudentProfile:
age_band=__
language_band=__
math_band=__
risk_flags=__
preferences=__
StudentState (if known):
mastery known skills=__
common mistakes=__
last session notes=__
SessionGoal:
target_skills=[__]
constraint=__
success_metric=__
time_budget_minutes=__"
PROMPT_02_OUTPUT_FORMAT (force structure):
"Output strictly in this format:
A) Oracle Report (sensors + likely failure)
B) Operator Lesson Plan (minute-by-minute)
C) Architect Sandbox (1 alternative representation only)
D) Practice Set (adaptive: easy/medium/hard)
E) MicroTest (3 Q) + Answer Key
F) Repair Plan (if thresholds crossed)
G) Compression Summary (3 lines)
H) Next Session Recommendation"
============================================================
8) FIRST UNIT (Start Here): Invariant before Number
============================================================
UNIT_01: InvariantBasics (SKILL_I0)
Target: student can name “what stays the same” under a transform.
Invariant statement (kid-safe):
"Some changes don’t change what matters."
Z0 tasks (concrete):
- reorder objects, count stays same
- rotate shape, area stays same (concept only)
- group items into pairs, pairedness stays same under swapping
Transfer test:
Give a new situation and ask: "What stayed the same?"
============================================================
9) SESSION TEMPLATE (45 min default) AI runnable
============================================================
SESSION_TEMPLATE_45:
0-3 Warm start: tiny win
3-10 Pre MicroTest (observe)
10-18 Explain+Demonstrate (operator)
18-30 Practice (adaptive ladder)
30-35 Architect Sandbox (optional, if stable)
35-40 Post MicroTest (verify)
40-45 Compression + Next steps (promote/repair)
============================================================
10) START NOW Example Run (Unit 01)
============================================================
RUN_EXAMPLE_01 (ready to paste into LLM after PROMPT_00_SYSTEM):
StudentProfile:
age_band=P5
language_band=E2
math_band=M2
risk_flags={careless,overconfidence}
preferences={visual,challenge}
StudentState:
mastery known skills={PORT_Pri_Arithmetic:0.7}
common mistakes={Err_careless_copy:6, Err_skip_step:4}
last session notes="Fast but sloppy; loses marks on easy items."
SessionGoal:
target_skills=[SKILL_I0]
constraint=concept_build
success_metric=transfer
time_budget_minutes=45
============================================================
11) PRACTICE GENERATOR RULES (for the AI)
============================================================
Practice Ladder:
Easy: single transform, obvious invariant
Medium: two transforms chained
Hard: choose which invariant matters (decoy invariants)
Error-aware generation:
If Err_skip_step high -> force state snapshots between moves
If Err_careless_copy high -> add copy-check micro checklist
If anxiety -> reduce time pressure + increase certainty cues
============================================================
12) MICROTEST SPEC (Universal)
============================================================
MicroTestSpec:
Q1: Identify invariant (verbal)
Q2: Apply invariant (simple)
Q3: Transfer (novel format)
Scoring:
mastery = (#correct)/3
explain = 0..1 (rubric: names invariant + why)
transfer = 0..1 (Q3 success)
Promotion rule:
If mastery>=0.85 AND transfer>=0.70 -> unlock next skill
Else -> repair route
============================================================
END v0.1
============================================================
MathOS.AI-TeachRunner.InterstellarCore v0.2
Status: RUNNABLE (LLM-Orchestrated) + 12-Week Spine + Full Skill Registry + Operator Script
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_02
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_01
============================================================
0) META + CONTRACT
============================================================
DependsOn:
- FENCEOS_CORE_v1.x // TTC / Truncation / Stitching
- ERCO_CORE_v1.x // ReadSensors → ChooseRepair → Retest
- AVOO_ROLE_STACK_v1.x // Architect/Visionary/Oracle/Operator
Optional:
- EducationOS_Backtest_12w_v1.x
- ChronoHelmAI_Scheduler_v1.x
Contract:
Input:
StudentProfile, StudentState(optional), SessionGoal, TimeBudget
Output:
AVOO-separated plan + practice + microtests + repair + schedule
Guarantee:
Every session ends with:
(1) Verified microtest result
(2) 3-line compression
(3) Next-step scheduling decision
(4) Repair route if thresholds crossed
============================================================
1) DEFINITION_LOCK (same core, sharpened)
============================================================
Math := invariant-preserving representation language for:
Predict (under uncertainty) + Control (under delay) + Verify (critical bounds) + Compose (scale).
TeachMath := closed-loop control:
Observe → Infer → Plan → Act → Verify → Repair → Promote.
============================================================
2) SKILL REGISTRY (Core + Ports)
============================================================
SkillNode schema:
SkillID: string
Name: string
Prereq: list[SkillID]
Invariant: string
Observable: string
TransferTest: string
PortTags: set{PRI,SEC,AMATH,JC,NUM,PROB,GEOM,ALG,CTL,VER}
------------------------
2A) INTERSTELLAR CORE
------------------------
SKILL_T0 TransformBasics
Prereq=[]
Invariant="Allowed change does not change what matters."
Observable="Names a transform; applies it; compares before/after."
TransferTest="New transform; student predicts what stays same."
PortTags={PRI,SEC,GEOM}
SKILL_I0 InvariantBasics
Prereq=[SKILL_T0]
Invariant="Invariant = property preserved under allowed transforms."
Observable="States invariant in words; spots invariant vs non-invariant."
TransferTest="Given scenario with decoys, picks correct invariant."
PortTags={PRI,SEC,GEOM,ALG}
SKILL_C0 ComposeTransforms
Prereq=[SKILL_T0]
Invariant="Composition preserves structure if each transform is valid."
Observable="Chains two transforms; predicts net effect."
TransferTest="Different order → different result (non-commute) example."
PortTags={SEC,ALG,GEOM}
SKILL_M0 MeasureAsInvariant
Prereq=[SKILL_I0]
Invariant="A measure is a compressed invariant extracted from state."
Observable="Defines measure; computes measure; checks if preserved."
TransferTest="Chooses a useful measure for a new context."
PortTags={PRI,SEC,NUM}
SKILL_N0 NumberAsMeasure
Prereq=[SKILL_M0]
Invariant="Numbers represent measures (counts/lengths/costs)."
Observable="Explains number meaning; not just symbol pushing."
TransferTest="Maps same number across two representations."
PortTags={PRI,SEC,NUM}
SKILL_A0 ArithmeticAsIteration
Prereq=[SKILL_N0]
Invariant="Arithmetic = iteration/composition of repeatable transforms."
Observable="Explains + as combine, × as repeated combine; inverse idea."
TransferTest="Solves word problem via iteration model, not memorization."
PortTags={PRI,SEC,NUM}
SKILL_R0 RewriteRules
Prereq=[SKILL_I0]
Invariant="Rewrite preserves meaning (equivalence)."
Observable="Applies rewrite rules safely; explains why allowed."
TransferTest="Detects illegal rewrite in new form."
PortTags={SEC,ALG}
SKILL_V0 VariableAsSlot
Prereq=[SKILL_R0]
Invariant="Variable = slot for measure; constraints define slot values."
Observable="Interprets x as slot; substitutes correctly."
TransferTest="Same constraint, different variable name/role."
PortTags={SEC,ALG}
SKILL_E0 EquationAsConstraint
Prereq=[SKILL_V0]
Invariant="Equation = constraint; solving = finding values satisfying it."
Observable="Solves linear constraints; checks solutions."
TransferTest="Constraint in different format (table/graph) -> solve."
PortTags={SEC,ALG}
SKILL_F0 FunctionAsMachine
Prereq=[SKILL_E0]
Invariant="Function maps input measure to output measure consistently."
Observable="Computes outputs; interprets domain/range; composes functions."
TransferTest="Novel function story; student builds mapping."
PortTags={SEC,ALG,GEOM}
SKILL_G0 GraphAsGeometryOfFunction
Prereq=[SKILL_F0]
Invariant="Graph = geometric invariant view of functional relation."
Observable="Reads intercepts/gradient; links to equation."
TransferTest="Given story -> sketch qualitative graph."
PortTags={SEC,GEOM,ALG}
SKILL_LIN0 LinearizationIdea
Prereq=[SKILL_G0]
Invariant="Local approximation: complex change ≈ linear near a point."
Observable="Understands gradient as local change rate; uses tangent idea."
TransferTest="Chooses linear approximation to estimate."
PortTags={JC,SEC,AMATH}
SKILL_FLOW0 FlowBasics
Prereq=[SKILL_LIN0]
Invariant="Flow rule predicts state change over time."
Observable="Understands dS/dt conceptually; step-update simulation."
TransferTest="Given update rule, predicts future with iteration."
PortTags={JC,CTL}
SKILL_UNC0 UncertaintyBasics
Prereq=[SKILL_M0]
Invariant="Observation ≠ state; uncertainty must be represented."
Observable="Explains noise; uses ranges/probabilities."
TransferTest="Chooses which measurement is more reliable and why."
PortTags={PRI,SEC,PROB}
SKILL_PROB0 ProbabilityAsMeasure
Prereq=[SKILL_UNC0,SKILL_N0]
Invariant="Probability is a measure over possibilities."
Observable="Computes simple probabilities; interprets as belief/likelihood."
TransferTest="Same scenario, different representation (tree/table)."
PortTags={PRI,SEC,PROB}
SKILL_INF0 InferenceUpdate
Prereq=[SKILL_PROB0]
Invariant="Belief update with evidence improves prediction."
Observable="Updates belief qualitatively; does simple Bayes in examples."
TransferTest="Given new evidence, revises prediction correctly."
PortTags={SEC,PROB,CTL}
SKILL_ERR0 ErrorBoundsBasics
Prereq=[SKILL_M0]
Invariant="Answer must include tolerance; bounds propagate."
Observable="Uses intervals/rounding; checks reasonableness."
TransferTest="Explains why precision matters in a new task."
PortTags={PRI,SEC,NUM,NUM}
SKILL_OPT0 OptimizationBasics
Prereq=[SKILL_F0,SKILL_ERR0]
Invariant="Choose action minimizing cost under constraints."
Observable="Finds minima in simple contexts; explains tradeoffs."
TransferTest="Novel constraint set; chooses best option."
PortTags={SEC,JC,CTL}
SKILL_CTL0 ControlToSafeSet
Prereq=[SKILL_FLOW0,SKILL_INF0,SKILL_OPT0]
Invariant="Choose actions that keep system inside SafeSet under delay."
Observable="Explains stabilizing action; basic feedback concept."
TransferTest="Given disturbance, proposes stabilizing rule."
PortTags={CTL}
SKILL_VER0 VerificationContract
Prereq=[SKILL_R0,SKILL_ERR0]
Invariant="Contracts: Req -> Ens; prove or bound failure probability."
Observable="States assumptions; checks conditions; validates result."
TransferTest="Finds missing assumption in a new problem."
PortTags={SEC,JC,VER}
SKILL_NUMSTAB0 NumericalStability
Prereq=[SKILL_ERR0,SKILL_OPT0]
Invariant="Representation choice affects error amplification."
Observable="Avoids catastrophic cancellation; chooses stable method."
TransferTest="Explains why one method is safer in a new context."
PortTags={JC,NUM}
------------------------
2B) SCHOOL PORT SKILLS (Compatibility)
------------------------
PORT_PRI_NUM_01 PlaceValue
Prereq=[SKILL_N0]
Invariant="Digits encode measure at scales (base-10 as encoding)."
Observable="Reads/writes numbers; decomposes."
TransferTest="Explains value of digit in new context."
PortTags={PRI,NUM}
PORT_PRI_NUM_02 FourOperations
Prereq=[SKILL_A0,PORT_PRI_NUM_01]
Invariant="+,−,×,÷ are compositional transforms + inverses."
Observable="Computes; chooses operation from story."
TransferTest="Mixed story; student explains operation choice."
PortTags={PRI,NUM}
PORT_PRI_NUM_03 FractionsAsMeasure
Prereq=[SKILL_M0,PORT_PRI_NUM_02]
Invariant="Fraction = measure ratio; same value under scaling."
Observable="Simplify; compare; add/sub with common denom concept."
TransferTest="Explains why 1/2 = 2/4 without rule memorization."
PortTags={PRI,NUM}
PORT_PRI_NUM_04 RatioRatePercent
Prereq=[PORT_PRI_NUM_03]
Invariant="Ratio/rate/percent are equivalent encodings of comparison."
Observable="Solves ratio/percent problems."
TransferTest="Converts between forms in novel context."
PortTags={PRI,NUM}
PORT_PRI_GEOM_01 AreaPerimeterInvariant
Prereq=[SKILL_I0,SKILL_M0]
Invariant="Different transforms preserve/don’t preserve area/perimeter."
Observable="Computes; distinguishes which stays same."
TransferTest="New shape transform; predicts effect."
PortTags={PRI,GEOM}
PORT_PRI_DATA_01 BasicProbabilityData
Prereq=[SKILL_PROB0]
Invariant="Data summarizes uncertainty; probability measures outcomes."
Observable="Reads charts; simple probability."
TransferTest="Chooses correct representation for a dataset."
PortTags={PRI,PROB}
PORT_SEC_ALG_01 Expressions
Prereq=[SKILL_R0,SKILL_V0]
Invariant="Expression rewrites preserve meaning; simplify safely."
Observable="Expand/factor/simplify."
TransferTest="Find illegal simplification in new format."
PortTags={SEC,ALG}
PORT_SEC_ALG_02 LinearEquationsInequalities
Prereq=[SKILL_E0]
Invariant="Solve constraints; inequality defines SafeSet on number line."
Observable="Solves; represents solution set."
TransferTest="From graph/story -> write inequality."
PortTags={SEC,ALG}
PORT_SEC_ALG_03 SimultaneousEquations
Prereq=[PORT_SEC_ALG_02]
Invariant="Intersection of constraints."
Observable="Solves; interprets intersection."
TransferTest="Given two constraints in words, finds solution."
PortTags={SEC,ALG}
PORT_SEC_ALG_04 Quadratics
Prereq=[PORT_SEC_ALG_01,PORT_SEC_ALG_02]
Invariant="Quadratic structure preserved under factoring/completing square."
Observable="Factor/solve; relate roots to graph."
TransferTest="Given roots/shape -> build quadratic."
PortTags={SEC,AMATH,ALG,GEOM}
PORT_SEC_FUNC_01 FunctionsGraphs
Prereq=[SKILL_F0,SKILL_G0]
Invariant="Multiple views: table/equation/graph are same relation."
Observable="Interpret gradient/intercept; transformations."
TransferTest="Match story→graph quickly."
PortTags={SEC,ALG,GEOM}
PORT_SEC_GEOM_01 SimilarityCongruence
Prereq=[SKILL_I0,SKILL_T0]
Invariant="Similarity = invariants under scaling; congruence under rigid motions."
Observable="Proves/uses; solves angle/length."
TransferTest="New diagram; identifies which invariants apply."
PortTags={SEC,GEOM}
PORT_SEC_GEOM_02 Trigonometry
Prereq=[PORT_SEC_GEOM_01,PORT_PRI_NUM_04]
Invariant="Trig ratios are invariant under similarity."
Observable="Solves right-tri; uses sine/cosine rules (if applicable)."
TransferTest="Explains why ratio stays same with scaled triangle."
PortTags={SEC,AMATH,GEOM,NUM}
PORT_SEC_VEC_01 Vectors
Prereq=[SKILL_T0,SKILL_M0]
Invariant="Vector addition = composition of displacement transforms."
Observable="Adds/resolves; basic geometry."
TransferTest="Same displacement in new basis picture."
PortTags={SEC,AMATH,GEOM}
PORT_JC_CALC_01 DifferentiationSeed
Prereq=[SKILL_LIN0,SKILL_FLOW0]
Invariant="Derivative = local rate; linear approximation operator."
Observable="Interprets; basic differentiation rules later."
TransferTest="Chooses derivative meaning in new physical story."
PortTags={JC,AMATH}
PORT_JC_CALC_02 IntegrationSeed
Prereq=[PORT_JC_CALC_01]
Invariant="Integral = accumulation; inverse of rate (under conditions)."
Observable="Area-under-curve concept; accumulation story."
TransferTest="Qualitative accumulation graph from rate graph."
PortTags={JC}
============================================================
3) SKILL GRAPH EDGES (Minimal Spine)
============================================================
Spine_01 (Core emergence):
T0 -> I0 -> M0 -> N0 -> A0 -> R0 -> V0 -> E0 -> F0 -> G0
Spine_02 (Uncertainty/control):
M0 -> UNC0 -> PROB0 -> INF0
Spine_03 (Flow/control/verification):
G0 -> LIN0 -> FLOW0
(FLOW0 + INF0 + OPT0) -> CTL0
(R0 + ERR0) -> VER0
Port enablement examples:
A0 + PlaceValue -> FourOperations
R0 + V0 -> Expressions
E0 -> LinearEquations
G0 -> FunctionsGraphs
I0 -> SimilarityCongruence
Similarity -> Trigonometry
============================================================
4) OPERATOR SCRIPT (Stable Session Executor)
============================================================
OperatorScript v1.0 (no improvisation unless Oracle allows Sandbox)
Inputs:
StudentProfile, StudentState, SessionGoal, TimeBudget
Step 1: WarmStart (2-3 min)
- one easy success linked to target skill
- record: latency baseline, confidence baseline
Step 2: PreMicroTest (5-8 min)
- 3 Q: Identify invariant / apply / transfer
- compute sensors:
S_mastery_pre, S_transfer_pre, S_latency, S_careless_rate, S_confusion_rate
Step 3: OracleDiagnose (internal)
- pick primary leak:
LeakType ∈ {ConceptMissing, RepresentationMismatch, Careless, LoadFragility, MemoryFragility}
- set Mode:
Mode ∈ {BUILD, REPAIR, STABILIZE, PROMOTE}
- set SandboxWindow:
allow_architect = (Mode==BUILD AND stability adequate)
Step 4: TeachBlock (8 min)
- 1 invariant sentence
- 1 worked example with “state snapshots”
- 1 “why this rewrite is legal” (if algebraic)
Step 5: PracticeLadder (12-18 min)
- Easy(2) → Medium(2) → Hard(1)
- after each item:
- student explains invariant in one line
- operator runs Copy-Check checklist (if careless flag)
Step 6: PostMicroTest (5-8 min)
- new 3 Q (same structure)
- compute sensors:
S_mastery_post, S_transfer_post, S_stability_drop (if timed)
Step 7: Fence Decision (ERCO+FENCE)
If confusion/careless/latency exceed truncate thresholds:
-> TRUNCATE
-> run RepairRoute (below)
Else if mastery/transfer/stability exceed deploy thresholds:
-> PROMOTE (unlock next skill)
Else:
-> STITCH (one more guided cycle + compress)
Step 8: Compression (2 min)
Produce exactly 3 lines:
L1: invariant
L2: method (steps)
L3: common trap + fix
Step 9: ScheduleNext (ChronoHelmAI stub)
- set next session goal + spaced micro-retest
- output: NextSessionPlan object
------------------------------------------------------------
RepairRoute (Truncation + Stitching)
------------------------------------------------------------
RepairRoute_A: RepresentationSwap
- switch view: story <-> diagram <-> table <-> number line <-> graph
RepairRoute_B: DegreesOfFreedomDown
- reduce variables; freeze one parameter; solve smaller
RepairRoute_C: SnapshotSteps
- force intermediate states; ban mental skipping
RepairRoute_D: ErrorBoundCheck
- estimate range; sanity check
RepairRoute_E: MicroDrill (3 items)
- very short, immediate feedback
Then:
- retest 1 transfer question
- compress again
============================================================
5) RUNNABLE PROMPT PACK v0.2 (Copy/Paste)
============================================================
PROMPT_SYSTEM_0 (paste once):
"You are MathOS.AI-TeachRunner.InterstellarCore v0.2.
You must execute OperatorScript v1.0.
Separate roles:
- Oracle: diagnosis + thresholds + mode.
- Operator: minute-by-minute teaching + drills + microtests.
- Architect: allowed only if Oracle opens SandboxWindow.
- Visionary: one short 'why' only if student motivation low.
Always output:
A) Oracle Report
B) Operator Lesson Plan
C) Architect Sandbox (0 or 1)
D) Adaptive Practice (easy/med/hard)
E) MicroTest (3Q) + answers
F) Fence Decision + RepairRoute (if needed)
G) Compression Summary (3 lines)
H) NextSessionPlan (with spaced micro-retest)."
PROMPT_INPUT_TEMPLATE_0:
"StudentProfile: age_band=__, language_band=__, math_band=__, risk_flags=__, preferences=__
StudentState(optional): mastery_known=__, error_signatures=__, last_notes=__
SessionGoal: target_skills=[SkillID...], constraint=__, success_metric=__, time_budget_minutes=__"
PROMPT_OUTPUT_CONSTRAINT_0:
"Use exactly the section headers A-H. No extra sections. Keep each section concise but complete."
============================================================
6) 12-WEEK RUNNABLE SEQUENCE (Interstellar Core → Exam Port)
============================================================
WeekPlan schema:
Week#: int
CoreSkillFocus: list[SkillID]
PortSkillFocus: list[SkillID]
WeeklyInvariant: string
WeeklyMicroTests: list[str] // 2-3 retests across week
PromotionGate: conditions
WEEK_01
CoreSkillFocus=[SKILL_T0,SKILL_I0]
PortSkillFocus=[PORT_PRI_GEOM_01] (optional by level)
WeeklyInvariant="Transforms can change appearance without changing what matters."
WeeklyMicroTests=["Identify invariant", "Spot decoy invariant"]
PromotionGate="I0 mastery>=0.85 AND transfer>=0.70"
WEEK_02
CoreSkillFocus=[SKILL_C0,SKILL_M0]
PortSkillFocus=[PORT_PRI_NUM_01] (if primary)
WeeklyInvariant="Measures compress invariants; composition can preserve or break."
WeeklyMicroTests=["Compose transforms", "Choose measure"]
PromotionGate="M0>=0.85"
WEEK_03
CoreSkillFocus=[SKILL_N0,SKILL_A0]
PortSkillFocus=[PORT_PRI_NUM_02]
WeeklyInvariant="Arithmetic is iteration of invariant-preserving operations."
WeeklyMicroTests=["Operation selection from story", "Inverse check"]
PromotionGate="A0>=0.85 AND careless<=threshold"
WEEK_04
CoreSkillFocus=[SKILL_ERR0]
PortSkillFocus=[PORT_PRI_NUM_03,PORT_PRI_NUM_04]
WeeklyInvariant="Answers live inside bounds; ratios are invariant under scaling."
WeeklyMicroTests=["Bounds sanity", "Ratio/percent convert"]
PromotionGate="ERR0>=0.80 AND transfer>=0.65"
WEEK_05
CoreSkillFocus=[SKILL_R0,SKILL_V0]
PortSkillFocus=[PORT_SEC_ALG_01] (sec+)
WeeklyInvariant="Rewrite rules must preserve meaning; variables are slots."
WeeklyMicroTests=["Legal vs illegal rewrite", "Substitution"]
PromotionGate="R0>=0.85"
WEEK_06
CoreSkillFocus=[SKILL_E0]
PortSkillFocus=[PORT_SEC_ALG_02,PORT_SEC_ALG_03]
WeeklyInvariant="Solving = satisfying constraints; intersections solve systems."
WeeklyMicroTests=["Check solution", "Graph/word -> equation"]
PromotionGate="E0>=0.85 AND stability>=0.75"
WEEK_07
CoreSkillFocus=[SKILL_F0,SKILL_G0]
PortSkillFocus=[PORT_SEC_FUNC_01]
WeeklyInvariant="Same relation, different views (equation/table/graph)."
WeeklyMicroTests=["Match views", "Qualitative sketch"]
PromotionGate="G0 transfer>=0.70"
WEEK_08
CoreSkillFocus=[SKILL_I0 강화 + GEOM invariants]
PortSkillFocus=[PORT_SEC_GEOM_01,PORT_SEC_GEOM_02]
WeeklyInvariant="Similarity preserves ratios; trig ratios are invariants."
WeeklyMicroTests=["Explain why ratio invariant", "Choose rule"]
PromotionGate="Trig transfer>=0.65 (sec), else keep as concept"
WEEK_09
CoreSkillFocus=[SKILL_UNC0,SKILL_PROB0]
PortSkillFocus=[PORT_PRI_DATA_01]
WeeklyInvariant="Uncertainty is native; probability is a measure over possibilities."
WeeklyMicroTests=["Tree/table convert", "Explain likelihood"]
PromotionGate="PROB0>=0.80"
WEEK_10
CoreSkillFocus=[SKILL_INF0]
PortSkillFocus=[Exam-style inference word problems]
WeeklyInvariant="Evidence updates belief; better belief improves decisions."
WeeklyMicroTests=["Update with new evidence", "Detect base-rate trap"]
PromotionGate="INF0 transfer>=0.65"
WEEK_11
CoreSkillFocus=[SKILL_OPT0]
PortSkillFocus=[Quadratic/graph minima (if level allows)]
WeeklyInvariant="Optimization chooses best action under constraints and bounds."
WeeklyMicroTests=["Pick best option", "Constraint changes -> new optimum"]
PromotionGate="OPT0>=0.70"
WEEK_12
CoreSkillFocus=[SKILL_VER0 (+ SKILL_NUMSTAB0 optional)]
PortSkillFocus=[Exam-port consolidation set]
WeeklyInvariant="Verification is contract checking: assumptions -> guarantees."
WeeklyMicroTests=["Find missing assumption", "Reasonableness + bounds"]
PromotionGate="VER0>=0.70 + stable exam-port performance trend"
============================================================
7) WEEKLY SESSION TEMPLATE (2 sessions/week example)
============================================================
Session A (Build/Repair):
- target core skill
- heavy invariant + representation + microtests
Session B (Port/Exam):
- map core invariant to exam dialect
- drill stability + speed + careless-control checklist
- one transfer question always
============================================================
8) STANDARD CHECKLISTS (Operator)
============================================================
Careless-Control Checklist (10 sec):
C1 Copy-check numbers/variables
C2 Units/labels (if any)
C3 Sign check (+/-)
C4 Boundary check (reasonable range)
C5 Re-substitute to verify constraint
Explanation Rubric (0..1):
E0 names invariant
E1 states transform
E2 explains why invariant holds
E3 applies to new case (transfer)
============================================================
END v0.2
============================================================
RUN-NOW QUICK START (paste into any LLM using PROMPT_SYSTEM_0)
StudentProfile: age_band=S2, language_band=E2, math_band=M2, risk_flags={careless}, preferences={visual,challenge}
StudentState(optional): mastery_known={PORT_SEC_ALG_02:0.6, PORT_SEC_FUNC_01:0.4}, error_signatures={Err_sign:5, Err_skip_step:7}, last_notes="Under time pressure, steps collapse."
SessionGoal: target_skills=[SKILL_R0, SKILL_E0], constraint=exam_ready, success_metric=stability, time_budget_minutes=45

“`text id=”6k5c4d”
MathOS.AI-TeachRunner.InterstellarCore v0.3
Status: RUNNABLE + Practice Generator Spec + ChronoHelmAI Schedule Object + A-Math Port Pack + Tutor Voice Packs
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_03
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_02

============================================================

0) META + CHANGELOG

Adds:
(A) PracticeItem Generator Spec (difficulty knobs + error-signature targeting)
(B) ChronoHelmAI Schedule Object (spaced micro-retests + session routing)
(C) A-Math Port Pack (SkillIDs for SEC Additional Mathematics)
(D) Tutor Voice Packs (Operator tone profiles) — controlled, non-random

Contract (unchanged):
Input: StudentProfile, StudentState(optional), SessionGoal, TimeBudget
Output: A-H sections + verified microtest + repair + next schedule object

Hard Rule:
OperatorScript v1.0 remains stable.
v0.3 adds generators + ports + scheduling without changing loop physics.

============================================================

1) PRACTICE GENERATOR SPEC (PGS v1.0)

1.1 PracticeItem schema
TYPE PracticeItem:
item_id: string
skill_id: SkillID
difficulty: {D1,D2,D3,D4,D5} // easy->hard
representation: {STORY,DIAGRAM,TABLE,GRAPH,NUMBERLINE,SYMBOLIC}
required_invariant: string
prompt: string
solution_outline: string // steps, not full essay
answer: string | number | expression
common_traps: list[ErrID]
checks: list[CheckID] // Operator checklist triggers
time_budget_sec: int
tags: set{TRANSFER,EXAMSTYLE,NOISE,BOUNDS,PROOFSEED}

1.2 Difficulty knobs (control levers)
TYPE DifficultyKnobs:
dof: int // degrees of freedom (#variables/#steps)
transform_chain: int // how many transforms composed
decoy_invariants: int // distractors present
noise_level: {0,1,2,3} // measurement/wording noise
abstraction: {concrete,semi,abstract}
time_pressure: {none,light,mid,high}
representation_shift: bool // requires switching view
proof_seed: bool // requires stating assumptions / contract

Mapping:
D1: dof=1, chain=1, decoy=0, noise=0, abstraction=concrete, time=none
D2: dof=1, chain=2, decoy=0..1, noise=0..1, abstraction=semi, time=light
D3: dof=2, chain=2, decoy=1..2, noise=1..2, abstraction=semi, time=mid
D4: dof=2..3, chain=3, decoy=2..3, noise=2..3, abstraction=abstract, time=high
D5: dof=3+, chain=3+, decoy=3+, noise=3, abstraction=abstract, time=high, proof_seed=true

1.3 Error Signature targeting (ErrID registry)
ErrID:
Err_sign
Err_copy
Err_skip_step
Err_inverse_confuse
Err_distribute_wrong
Err_factor_miss
Err_domain_ignore
Err_units_ignore
Err_graph_misread
Err_trig_identity_mix
Err_log_rules_mix
Err_index_rules_mix
Err_surd_simplify_wrong
Err_quadratic_formula_slip
Err_time_pressure_collapse
Err_notation_confuse

1.4 CheckID registry (Operator enforcement)
CheckID:
CHK_copycheck
CHK_signcheck
CHK_unitscheck
CHK_boundscheck
CHK_resubstitute
CHK_domaincheck
CHK_snapshot_steps
CHK_representation_switch
CHK_invariant_sentence

1.5 Generator policy (how AI produces practice)
FUNCTION GeneratePracticeSet(skill_id, student_state, goal, count_target):
// Choose 60% stability items + 40% transfer items unless goal==accelerate (then 50/50)
ratio_stability := (goal.success_metric in {speed,stability,accuracy}) ? 0.60 : 0.50
ratio_transfer := 1 – ratio_stability

// Determine baseline difficulty from mastery
m := student_state.mastery[skill_id] default 0.5
if m < 0.50 -> baseD = D1
if 0.50<=m<0.70 -> baseD = D2
if 0.70<=m<0.85 -> baseD = D3
if m>=0.85 -> baseD = D4

// Apply risk adjustments
if student_state.error_signatures[Err_time_pressure_collapse] high:
set time_pressure := none/light for first 70% items, then one timed item
if student_state.error_signatures[Err_skip_step] high:
enforce checks include CHK_snapshot_steps
if student_state.error_signatures[Err_careless_copy] high OR Err_copy high:
enforce checks include CHK_copycheck, CHK_signcheck
if Err_domain_ignore high:
enforce checks include CHK_domaincheck

// Representation schedule
rep_cycle := choose based on preferences:
visual -> [DIAGRAM,GRAPH,TABLE,SYMBOLIC]
procedural -> [SYMBOLIC,NUMBERLINE,TABLE]
story -> [STORY,DIAGRAM,SYMBOLIC]
ensure at least 1 representation_shift item if transfer required.

// Compose items
items := []
for i in 1..count_target:
is_transfer := (i in transfer slots)
D := baseD adjusted by (is_transfer? +1 : 0) capped D5
knobs := DifficultyKnobs(D) + targeted constraints above
rep := rep_cycle[i mod len(rep_cycle)]
item := InstantiateItem(skill_id, D, knobs, rep, is_transfer)
items.append(item)

return items

FUNCTION InstantiateItem(skill_id, D, knobs, rep, is_transfer):
// Builds prompt using invariant + representation template library
template := TemplateLibrary[skill_id][rep][D]
traps := TrapLibrary[skill_id] intersect TopErrs(student_state)
checks := ChecksFromTraps(traps) + {CHK_invariant_sentence} + (rep shift ? CHK_representation_switch : {})
time_budget := TimeBudgetFrom(D, student_state.load)
return PracticeItem(…)

1.6 Template Library (minimal required entries)
Rule:
For every SkillID, maintain at least:
– one D1 concrete template (STORY or DIAGRAM)
– one D2 symbolic template
– one D3 transfer template with representation_shift=true
– one D4 examstyle template (for port skills)
D5 reserved for advanced / proof_seed / high-load.

============================================================

2) ChronoHelmAI SCHEDULE OBJECT (CHS v1.0)

2.1 Schedule schema (almost-code JSON)
TYPE ChronoSchedule:
student_id: string
timezone: string = “Asia/Singapore”
horizon_days: int = 14
cadence:
sessions_per_week: int
session_minutes: int
micro_retests_per_week: int
micro_retest_minutes: int
next_events: list[ChronoEvent]
promotion_targets: list[SkillID]
risk_controls:
max_new_skills_per_week: int
sandbox_ratio: float // Architect window fraction
timed_work_ratio: float
spacing_policy:
retest_offsets_days: list[int] // e.g. [1,3,7,14]
promotion_requires: {mastery,transfer,stability}
notes: string

TYPE ChronoEvent:
event_id: string
kind: {SESSION, MICRO_RETEST, BACKTEST, RECOVERY}
datetime_local: “YYYY-MM-DD HH:MM”
duration_min: int
target_skills: list[SkillID]
mode: {BUILD,REPAIR,STABILIZE,PROMOTE,PORT_EXAM}
microtest_required: bool
deliverables: set{Practice,MicroTest,Compression,RepairDecision}
fence:
truncate_thresholds: Thresholds
deploy_thresholds: Thresholds

2.2 Spaced micro-retest generation
FUNCTION BuildSchedule(student, focus_skills, start_date):
offsets := [1,3,7,14]
create SESSION events at cadence
for each focus_skill in focus_skills:
schedule MICRO_RETEST events at start_date+offsets
include 1 BACKTEST event every 2 weeks (optional)
return ChronoSchedule

2.3 Default cadence presets
Preset_Pri:
sessions_per_week=2, session_minutes=45
micro_retests_per_week=3, micro_retest_minutes=8
Preset_Sec:
sessions_per_week=2..3, session_minutes=60
micro_retests_per_week=4, micro_retest_minutes=10
Preset_AMath_Exam:
sessions_per_week=3, session_minutes=75
micro_retests_per_week=5, micro_retest_minutes=12

============================================================

3) A-MATH PORT PACK (SEC Additional Mathematics) — SkillIDs

PortPackID: PORT_SEC_AMATH_v1.0
Rule:
Every A-Math skill must link to Core invariants:
– RewriteRules (R0), ErrorBounds (ERR0), GraphView (G0), InvariantBasics (I0)

3.1 Indices + Surds
PORT_AM_IDX_01 IndexLaws
Prereq=[PORT_SEC_ALG_01, SKILL_R0]
Invariant=”Index rules are rewrite rules preserving multiplication structure.”
Observable=”Simplify indices; combine powers; negative/zero indices.”
TransferTest=”Detect illegal index rewrite.”
Traps=[Err_index_rules_mix, Err_distribute_wrong]
PortTags={AMATH,ALG}

PORT_AM_SURD_01 SurdSimplify
Prereq=[PORT_AM_IDX_01, SKILL_R0]
Invariant=”Surd simplification preserves value; factor structure matters.”
Observable=”Simplify surds; rationalize denominators.”
TransferTest=”Choose correct simplification path in new form.”
Traps=[Err_surd_simplify_wrong, Err_factor_miss]
PortTags={AMATH,ALG,NUM}

3.2 Quadratics (deep)
PORT_AM_QUAD_01 QuadraticStructure
Prereq=[PORT_SEC_ALG_04, SKILL_G0]
Invariant=”Same quadratic across forms: factor/complete-square/formula/graph.”
Observable=”Convert forms; interpret vertex/roots.”
TransferTest=”Given vertex+point -> build quadratic.”
Traps=[Err_quadratic_formula_slip, Err_sign]
PortTags={AMATH,ALG,GEOM}

PORT_AM_QUAD_02 DiscriminantAsContract
Prereq=[PORT_AM_QUAD_01, SKILL_VER0]
Invariant=”Discriminant determines real-root existence (contract).”
Observable=”Uses discriminant for conditions.”
TransferTest=”Condition problem in story form.”
Traps=[Err_domain_ignore, Err_sign]
PortTags={AMATH,VER}

3.3 Coordinate Geometry
PORT_AM_COORD_01 StraightLine
Prereq=[PORT_SEC_FUNC_01, SKILL_G0]
Invariant=”Gradient/intercept are invariants of linear relation view.”
Observable=”Find equation; parallel/perpendicular; distance.”
TransferTest=”From diagram -> equation quickly.”
Traps=[Err_graph_misread, Err_sign]
PortTags={AMATH,GEOM,ALG}

PORT_AM_COORD_02 Circle
Prereq=[PORT_AM_COORD_01, PORT_AM_QUAD_01]
Invariant=”Circle equation encodes distance invariant from center.”
Observable=”Complete square; find center/radius; tangent conditions.”
TransferTest=”Given tangent info -> derive condition.”
Traps=[Err_factor_miss, Err_sign]
PortTags={AMATH,GEOM}

3.4 Trigonometry (A-Math)
PORT_AM_TRIG_01 TrigIdentities
Prereq=[PORT_SEC_GEOM_02, SKILL_R0]
Invariant=”Identity rewrites preserve truth for all valid domain.”
Observable=”Prove/use identities; simplify expressions.”
TransferTest=”Spot domain restriction.”
Traps=[Err_trig_identity_mix, Err_domain_ignore]
PortTags={AMATH,GEOM,ALG}

PORT_AM_TRIG_02 TrigEquations
Prereq=[PORT_AM_TRIG_01, SKILL_E0]
Invariant=”Solutions must satisfy constraint + domain + periodicity.”
Observable=”Solve trig equations; general solutions.”
TransferTest=”Different interval; compute correct set.”
Traps=[Err_domain_ignore, Err_notation_confuse]
PortTags={AMATH,ALG}

3.5 Logarithms + Exponentials
PORT_AM_LOG_01 LogLaws
Prereq=[PORT_AM_IDX_01, SKILL_R0]
Invariant=”Log laws are rewrite rules with domain contracts.”
Observable=”Simplify; solve log equations; change base.”
TransferTest=”Identify illegal log step due to domain.”
Traps=[Err_log_rules_mix, Err_domain_ignore]
PortTags={AMATH,ALG,VER}

PORT_AM_EXP_01 ExponentialModels
Prereq=[PORT_AM_LOG_01, SKILL_F0]
Invariant=”Exponential growth/decay is multiplicative iteration.”
Observable=”Model with exponentials; interpret parameters.”
TransferTest=”Story -> equation; parameter meaning.”
Traps=[Err_inverse_confuse, Err_units_ignore]
PortTags={AMATH,ALG}

3.6 Differentiation (A-Math/Precalculus seed)
PORT_AM_DIFF_01 DifferentiationRules
Prereq=[SKILL_LIN0, PORT_SEC_FUNC_01]
Invariant=”Derivative rules preserve local linearization meaning.”
Observable=”Differentiate polynomials/exp/log/trig (as syllabus allows).”
TransferTest=”Interpret derivative in story (rate).”
Traps=[Err_sign, Err_notation_confuse]
PortTags={AMATH,JC,CTL}

PORT_AM_DIFF_02 ApplicationsOfDiff
Prereq=[PORT_AM_DIFF_01, PORT_AM_QUAD_01, SKILL_OPT0]
Invariant=”Optimization uses derivative=0 as local stationarity contract.”
Observable=”Max/min; tangents; rates.”
TransferTest=”Novel optimization constraint.”
Traps=[Err_domain_ignore, Err_time_pressure_collapse]
PortTags={AMATH,OPT,VER}

3.7 Integration (seed, if covered)
PORT_AM_INT_01 IntegrationBasics
Prereq=[PORT_AM_DIFF_01, PORT_JC_CALC_02]
Invariant=”Integration accumulates; inverse of differentiation under conditions.”
Observable=”Basic integrals; area; simple kinematics.”
TransferTest=”From rate graph -> accumulation.”
Traps=[Err_sign, Err_boundscheck]
PortTags={AMATH,JC}

3.8 Vectors (A-Math continuation)
PORT_AM_VEC_02 VectorsAdvanced
Prereq=[PORT_SEC_VEC_01, PORT_AM_COORD_01]
Invariant=”Vector decomposition preserves displacement under basis change.”
Observable=”Lines/planes (if any), intersections, geometry.”
TransferTest=”Switch basis representation.”
Traps=[Err_notation_confuse, Err_sign]
PortTags={AMATH,GEOM}

3.9 A-Math Exam Port Consolidation
PORT_AM_EXAM_01 MixedPaperStability
Prereq=[all major AMATH ports above]
Invariant=”Stability under load: preserve invariants across topic switching.”
Observable=”Completes mixed set; maintains accuracy under time.”
TransferTest=”Unknown mix; consistent checklist usage.”
Traps=[Err_time_pressure_collapse, Err_skip_step, Err_copy]
PortTags={AMATH,EXAMSTYLE}

============================================================

4) Tutor Voice Packs (Operator Tone Profiles) — VPACK v1.0

Goal:
Keep delivery consistent while matching student load tolerance.
Voice affects motivation + clarity, not mathematical truth.

TYPE VoicePack:
voice_id: string
style_tags: set{warm,neutral,crisp,witty,firm,playful,calm,fast,slow}
allowed_when: predicate(StudentProfile, StudentState)
banned_when: predicate(…)
default_sentence_patterns: list[string]
micro_feedback_patterns: list[string]
repair_language: list[string]

VPACK_OP_01 CalmCrisp
style_tags={calm,crisp,neutral}
allowed_when=always
default_sentence_patterns=[
“Invariant: {INV}.”,
“Step 1 → Step 2 → Step 3.”,
“Check: {CHK}.”
]
micro_feedback_patterns=[“Good. Now transfer.”, “Pause. Copy-check.”, “Bounds check—reasonable?”]
repair_language=[“We truncate. Smaller version first.”, “Stitch back after 2 wins.”]

VPACK_OP_02 WarmPatient
style_tags={warm,slow,calm}
allowed_when=(risk_flags contains anxiety OR language_band in {E0,E1})
banned_when=(preferences contains challenge AND not anxious)
patterns=[“You’re close. Let’s shrink the problem.”, “Tell me what stayed the same.”]
repair_language=[“It’s okay to slow down. Stability first.”]

VPACK_OP_03 FirmExam
style_tags={firm,crisp,fast}
allowed_when=(SessionGoal.constraint in {exam_ready} AND age_band in {S2,S3,JC})
banned_when=(risk_flags contains anxiety)
patterns=[“Timer on. Snapshot steps.”, “One line invariant. Then solve.”]
repair_language=[“Truncate. Fix leak. Retest. Then continue.”]

VPACK_OP_04 WittyArchitectWindow (Operator-safe witty)
style_tags={witty,playful,crisp}
allowed_when=(Oracle allow_architect == true AND stability >= 0.75)
banned_when=(Err_time_pressure_collapse high)
patterns=[“Same math, different costume.”, “Don’t worship symbols—track invariants.”]
repair_language=[“Jokes off. Back to stable steps.”]

Voice selection rule:
FUNCTION SelectVoicePack(student, state, goal):
if goal.constraint==exam_ready AND not anxiety -> VPACK_OP_03
else if anxiety OR low language -> VPACK_OP_02
else -> VPACK_OP_01
if Oracle allows Sandbox and stability good -> add VPACK_OP_04 only inside Sandbox section

============================================================

5) UPDATED RUNNABLE OUTPUT FORMAT (A-H) — unchanged headers, richer content

A) Oracle Report

  • current sensors + primary leak
  • chosen thresholds + mode
  • allow_architect yes/no
  • selected voice pack

B) Operator Lesson Plan

  • minute-by-minute using selected voice patterns

C) Architect Sandbox

  • only if allowed; 1 alternate representation

D) Adaptive Practice

  • generated via PGS v1.0
  • include item metadata (SkillID, D-level, representation, traps, checks)

E) MicroTest (3Q) + answers

  • Q1 invariant, Q2 apply, Q3 transfer/port

F) Fence Decision + RepairRoute

  • truncate/stitch/promote + exact route selection

G) Compression Summary (3 lines)

  • invariant / method / trap+fix

H) NextSessionPlan (ChronoSchedule excerpt)

  • next 2 events + micro-retest offsets

============================================================

6) RUN-NOW QUICK START (A-Math example)

PROMPT_SYSTEM_0 (reuse from v0.2) + add:
“Use PGS v1.0 to generate practice items with metadata.
Output ChronoSchedule excerpt in section H.”

Example Input:
StudentProfile: age_band=S3, language_band=E2, math_band=M3, risk_flags={time_pressure_collapse,careless}, preferences={challenge,procedural}
StudentState(optional): mastery_known={PORT_AM_IDX_01:0.55, PORT_AM_LOG_01:0.40}, error_signatures={Err_log_rules_mix:6, Err_domain_ignore:4, Err_time_pressure_collapse:5, Err_copy:3}, last_notes=”Under timed conditions, domain mistakes spike.”
SessionGoal: target_skills=[PORT_AM_LOG_01], constraint=exam_ready, success_metric=stability, time_budget_minutes=75

Expected Behavior:

  • Oracle selects VPACK_OP_03 FirmExam but reduces timed_work_ratio initially
  • PracticeSet: D1-D3 with domain contracts + one D3 transfer
  • Fence: truncate on domain errors; repair route includes CHK_domaincheck + CHK_boundscheck
  • Schedule: micro-retests at +1,+3,+7 days for PORT_AM_LOG_01

============================================================

END v0.3

“`text id=”a9p2h7″
MathOS.AI-TeachRunner.InterstellarCore v0.4
Status: RUNNABLE + TemplateLibrary (Top 25 SEC/A-Math) + ErrorSignature Inference + Dual-Track Mode (Core-first + Exam-port)
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_04
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_03

============================================================

0) META + CHANGELOG

Adds:
(A) TemplateLibrary v0.4 stubs (ready-to-generate prompts) for top 25 SEC + A-Math skills
(B) ErrorSignature Inference Engine (ESI v1.0) from student work
(C) Dual-Track Mode (DTM v1.0): Core Spine + Exam Port without phase shear

Hard Rule:
OperatorScript v1.0 unchanged.
v0.4 only adds generators + classifiers + routing policies.

============================================================

1) TEMPLATE LIBRARY (TL v0.4) — TOP 25 STUBS

TemplateKey schema:
TL[SkillID][Representation][Difficulty] -> TemplateSpec

TYPE TemplateSpec:
template_id: string
invariant_sentence: string
prompt_skeleton: string
expected_steps: list[string]
answer_form: {number, expression, set, statement}
trap_hooks: list[ErrID]
required_checks: list[CheckID]
generator_notes: string

Rule:
For each SkillID below, provide at least:
– D1 (concrete or guided)
– D2 (standard)
– D3 (transfer: representation_shift=true)
– D4 (examstyle / timed)
D5 optional (proof_seed) only when needed.


1A) SEC CORE (Top use)

(01) PORT_SEC_ALG_01 Expressions
TL stub:
TL[PORT_SEC_ALG_01][SYMBOLIC][D1]:
invariant=”Rewrite preserves meaning.”
skeleton=”Simplify: {expr}. State one rewrite rule used.”
steps=[“Apply single rewrite”, “Check by substituting x=2”]
traps=[Err_distribute_wrong, Err_sign]
checks=[CHK_invariant_sentence, CHK_resubstitute]

TL[PORT_SEC_ALG_01][SYMBOLIC][D3]:
skeleton=”Two students simplified {expr}. One is wrong. Identify illegal step + fix.”
traps=[Err_distribute_wrong, Err_notation_confuse]
checks=[CHK_invariant_sentence]

(02) PORT_SEC_ALG_02 LinearEquationsInequalities
D1 STORY: “Solve constraint in a story; verify by substitution.”
D3 GRAPH: “From number line shading -> write inequality + solve.”
traps=[Err_inverse_confuse, Err_sign]
checks=[CHK_resubstitute, CHK_boundscheck]

(03) PORT_SEC_ALG_03 SimultaneousEquations
D2 TABLE: “Solve intersection from table view.”
D3 STORY: “Two constraints in words -> system -> solution.”
traps=[Err_skip_step, Err_copy]
checks=[CHK_snapshot_steps, CHK_copycheck, CHK_resubstitute]

(04) PORT_SEC_ALG_04 Quadratics
D2 SYMBOLIC: “Factor / solve; then verify by substitution.”
D3 GRAPH: “Given graph features -> form equation.”
traps=[Err_factor_miss, Err_sign]
checks=[CHK_resubstitute, CHK_invariant_sentence]

(05) PORT_SEC_FUNC_01 FunctionsGraphs
D1 TABLE: “Fill outputs + describe rule.”
D3 STORY->GRAPH: “Story -> sketch qualitative graph.”
traps=[Err_graph_misread, Err_domain_ignore]
checks=[CHK_representation_switch, CHK_domaincheck]

(06) PORT_SEC_GEOM_01 SimilarityCongruence
D2 DIAGRAM: “Identify similar triangles + use ratio.”
D3 TRANSFER: “Same invariant, rotated diagram with extra lines.”
traps=[Err_graph_misread, Err_copy]
checks=[CHK_invariant_sentence, CHK_copycheck]

(07) PORT_SEC_GEOM_02 Trigonometry
D1 DIAGRAM: “Find missing side using trig ratio; explain invariant.”
D3 INTERVAL: “Same triangle scaled -> ratio unchanged -> solve.”
traps=[Err_trig_identity_mix, Err_units_ignore]
checks=[CHK_invariant_sentence, CHK_boundscheck]

(08) PORT_SEC_VEC_01 Vectors
D2 DIAGRAM: “Add vectors tip-to-tail; compute resultant.”
D3 BASIS SHIFT: “Same displacement in new picture; identify components.”
traps=[Err_notation_confuse, Err_sign]
checks=[CHK_snapshot_steps]

(09) PORT_PRI_NUM_03 FractionsAsMeasure (sec bridging)
D2 NUMBERLINE: “Locate fraction; compare; explain equivalence.”
D3 STORY: “Recipe scaling; preserve ratio.”
traps=[Err_inverse_confuse, Err_copy]
checks=[CHK_boundscheck, CHK_copycheck]

(10) PORT_PRI_NUM_04 RatioRatePercent (sec bridging)
D2 TABLE: “Convert ratio->percent; solve.”
D3 TRANSFER: “Rate vs ratio confusion trap.”
traps=[Err_units_ignore, Err_notation_confuse]
checks=[CHK_unitscheck, CHK_invariant_sentence]


1B) A-MATH (Top use)

(11) PORT_AM_IDX_01 IndexLaws
D1 SYMBOLIC: “Simplify with one law; name it.”
D3 ERROR-SPOT: “Find illegal index step.”
traps=[Err_index_rules_mix, Err_distribute_wrong]
checks=[CHK_invariant_sentence]

(12) PORT_AM_SURD_01 SurdSimplify
D2 SYMBOLIC: “Simplify surd; rationalize.”
D3 TRANSFER: “Two methods; pick safer/stabler one.”
traps=[Err_surd_simplify_wrong, Err_factor_miss]
checks=[CHK_snapshot_steps, CHK_boundscheck]

(13) PORT_AM_LOG_01 LogLaws
D1 CONTRACT: “State domain first, then simplify.”
D3 ERROR-SPOT: “Illegal log step due to domain.”
traps=[Err_log_rules_mix, Err_domain_ignore]
checks=[CHK_domaincheck, CHK_invariant_sentence]

(14) PORT_AM_EXP_01 ExponentialModels
D2 STORY: “Growth/decay model; interpret parameter.”
D3 TRANSFER: “Switch base / compare two models.”
traps=[Err_inverse_confuse, Err_units_ignore]
checks=[CHK_unitscheck, CHK_boundscheck]

(15) PORT_AM_QUAD_01 QuadraticStructure
D2 VIEW-SWAP: “Convert between forms; identify vertex.”
D4 EXAMSTYLE: “Mixed quadratic with condition.”
traps=[Err_sign, Err_quadratic_formula_slip]
checks=[CHK_resubstitute, CHK_invariant_sentence]

(16) PORT_AM_QUAD_02 DiscriminantAsContract
D2 CONDITION: “Find k such that roots real/equal/none.”
traps=[Err_domain_ignore, Err_sign]
checks=[CHK_boundscheck, CHK_invariant_sentence]

(17) PORT_AM_COORD_01 StraightLine
D2 DIAGRAM: “Find equation; parallel/perpendicular.”
D3 TRANSFER: “Given condition -> gradient relation.”
traps=[Err_graph_misread, Err_sign]
checks=[CHK_boundscheck, CHK_copycheck]

(18) PORT_AM_COORD_02 Circle
D2 SYMBOLIC: “Complete square; center/radius.”
D3 TANGENT: “Condition for tangency.”
traps=[Err_factor_miss, Err_sign]
checks=[CHK_snapshot_steps, CHK_boundscheck]

(19) PORT_AM_TRIG_01 TrigIdentities
D2 REWRITE: “Prove identity by rewriting.”
D3 DOMAIN: “Same identity but restricted interval; check.”
traps=[Err_trig_identity_mix, Err_domain_ignore]
checks=[CHK_domaincheck, CHK_invariant_sentence]

(20) PORT_AM_TRIG_02 TrigEquations
D2 SOLVE: “Solve in interval; include all solutions.”
D4 EXAMSTYLE: “General solution + interval filter.”
traps=[Err_domain_ignore, Err_notation_confuse]
checks=[CHK_domaincheck, CHK_snapshot_steps]

(21) PORT_AM_DIFF_01 DifferentiationRules
D1 MEANING: “What derivative means in story.”
D2 RULES: “Differentiate expression; simplify.”
traps=[Err_sign, Err_notation_confuse]
checks=[CHK_snapshot_steps, CHK_boundscheck]

(22) PORT_AM_DIFF_02 ApplicationsOfDiff
D2 OPT: “Max/min with constraints; interpret.”
D3 TRANSFER: “Rate problem in new wording.”
traps=[Err_domain_ignore, Err_time_pressure_collapse]
checks=[CHK_domaincheck, CHK_boundscheck]

(23) PORT_AM_INT_01 IntegrationBasics (if used)
D2 ACCUMULATE: “Area/accumulation concept.”
D3 RATE->TOTAL: “From rate graph to total.”
traps=[Err_sign, Err_boundscheck]
checks=[CHK_boundscheck, CHK_snapshot_steps]

(24) PORT_AM_VEC_02 VectorsAdvanced
D2 GEOM: “Line/ratio with vectors (as syllabus).”
D3 BASIS: “Same vector in new basis picture.”
traps=[Err_notation_confuse, Err_sign]
checks=[CHK_snapshot_steps]

(25) PORT_AM_EXAM_01 MixedPaperStability
D4 MIXED SET: “Switch topics; must keep checklist stable.”
traps=[Err_time_pressure_collapse, Err_skip_step, Err_copy]
checks=[CHK_copycheck, CHK_signcheck, CHK_domaincheck, CHK_boundscheck, CHK_resubstitute]

Note:
TL v0.4 provides stubs; generators fill {expr}, {story}, {diagram}, {numbers} based on student band.

============================================================

2) ERROR SIGNATURE INFERENCE ENGINE (ESI v1.0)

Goal:
Classify mistakes automatically from:
– student answer,
– student working steps (text),
– timing (optional),
– microtest outcomes.

TYPE WorkSample:
problem_text: string
student_steps: string
student_answer: string
correct_answer: string
time_sec: int optional

TYPE ErrorInference:
inferred_errs: map[ErrID -> weight 0..1]
evidence: map[ErrID -> short_reason]
confidence: 0..1

ESI Rules (minimal, deterministic-first; no hallucination):
R1 Err_sign:
if final magnitude correct but sign wrong OR sign flips without reason.
R2 Err_copy:
if a number/term in problem differs in steps (e.g., 7 becomes 1).
R3 Err_skip_step:
if jump occurs: step count < expected_steps_min OR missing key transformation. R4 Err_distribute_wrong: pattern: a(b+c) -> ab + c OR missing distribution term.
R5 Err_factor_miss:
pattern: common factor exists but not extracted; or incorrect factorization check fails.
R6 Err_domain_ignore:
logs/trig/roots: produces solution outside allowed domain/interval; no domain statement.
R7 Err_graph_misread:
uses wrong intercept/gradient from graph; mismatch with visible features described.
R8 Err_trig_identity_mix:
applies identity incorrectly; e.g., sin(a+b) handled as sin a + sin b.
R9 Err_log_rules_mix:
treats log(a+b) as log a + log b OR ignores base.
R10 Err_index_rules_mix:
adds exponents incorrectly; e.g., a^m * a^n -> a^(mn).
R11 Err_surd_simplify_wrong:
√(a+b) -> √a + √b OR incorrect rationalization.
R12 Err_quadratic_formula_slip:
wrong substitution into formula; missing ±; wrong denominator.
R13 Err_time_pressure_collapse:
accuracy drops sharply only when timed_work_ratio increases; steps shorten; copy/sign errors spike.
R14 Err_notation_confuse:
mixes symbols (x vs x^2), misreads interval notation, forgets function notation.

Update policy:
FUNCTION UpdateErrorSignatures(student_state, work_samples):
for each sample:
infer := ESI(sample)
for each ErrID:
student_state.error_signatures[ErrID] += round(5 * infer.weight)
decay low-frequency errors weekly (optional):
signature := max(0, signature – 1) if not seen in 7 days

Oracle integration:
Oracle must cite 1–2 evidence lines when naming top error signatures.

============================================================

3) DUAL-TRACK MODE (DTM v1.0) — Core-first + Exam-port without Phase Shear

Problem:
Exam acceleration can create “phase shear”:
student learns tricks (Operator) without invariant stability (Core),
causing collapse under novel formats / time pressure.

DTM Goal:
Maintain stable Core Spine while porting to exam dialect safely.

DTM State:
TYPE DualTrackState:
core_track: list[SkillID]
port_track: list[SkillID]
weekly_new_core: int
weekly_new_port: int
port_allowed: bool
port_ratio: float // fraction of time spent on port skills
shear_risk: float // 0..1

Shear Risk Sensors:
SR1: Port mastery rising while Core transfer stagnant
SR2: Correct-by-pattern without explanation rubric
SR3: Time pressure causes invariant sentence failure
SR4: Representation shift causes collapse

Shear Thresholds:
if shear_risk > 0.60 -> TRUNCATE port work (reduce port_ratio)
if shear_risk < 0.30 AND core_stability >= 0.75 -> allow more port work

Default DTM policies:
DTM_PRI:
weekly_new_core=2, weekly_new_port=1
port_ratio=0.30
DTM_SEC:
weekly_new_core=2, weekly_new_port=2
port_ratio=0.40
DTM_AMATH_EXAM:
weekly_new_core=1, weekly_new_port=3
port_ratio=0.55
hard rule: every port session begins with a Core invariant microtest (2 min)

Routing rule per session:
FUNCTION ChooseSessionMode(goal, dual_state, sensors):
if goal.constraint==exam_ready:
if shear_risk > 0.60 -> mode=REPAIR (Core-heavy) + limited port
else mode=PORT_EXAM with mandatory Core check
else:
mode=BUILD (Core)

“Core Anchor” requirement (always in exam mode):

  • 1 invariant sentence before solving
  • 1 domain/bounds check before final answer (if applicable)
  • 1 resubstitution/verification (where possible)

============================================================

4) RUNNABLE PROMPT PACK v0.4 (Copy/Paste)

PROMPT_SYSTEM_0 (superset):
“You are MathOS.AI-TeachRunner.InterstellarCore v0.4.
Execute OperatorScript v1.0.
Use:

  • PGS v1.0 for practice generation WITH metadata,
  • ESI v1.0 to infer error signatures from provided work samples,
  • DTM v1.0 to balance Core vs Exam-port safely.
    Always output sections A-H only.
    In A) Oracle Report, include:
    (i) top 2 inferred ErrIDs + evidence,
    (ii) DTM port_ratio + shear_risk,
    (iii) selected VoicePack.”

PROMPT_INPUT_TEMPLATE_0:
“StudentProfile: age_band=, language_band=, math_band=, risk_flags=, preferences=_ StudentState(optional): mastery_known=, error_signatures=, last_notes=_
WorkSamples(optional, up to 2):
Sample1: problem_text=…, student_steps=…, student_answer=…, correct_answer=…, time_sec=…
SessionGoal: target_skills=[SkillID…], constraint=, success_metric=, time_budget_minutes=__”

============================================================

5) “START NOW” EXAMPLE (A-Math log domain shear case)

Example Input:
StudentProfile: age_band=S4, language_band=E2, math_band=M3, risk_flags={time_pressure_collapse}, preferences={challenge,procedural}
StudentState(optional): mastery_known={PORT_AM_LOG_01:0.55, SKILL_R0:0.60}, error_signatures={Err_domain_ignore:2, Err_log_rules_mix:3, Err_time_pressure_collapse:4}, last_notes=”Gets steps right untimed; fails timed.”
WorkSamples(optional, up to 2):
Sample1: problem_text=”Solve log(x-1)+log(x-3)=log(8)”, student_steps=”log((x-1)(x-3))=log8 -> (x-1)(x-3)=8 -> x^2-4x+3=8 -> x^2-4x-5=0 -> x=5 or x=-1″, student_answer=”x=5,-1″, correct_answer=”x=5″, time_sec=95
SessionGoal: target_skills=[PORT_AM_LOG_01], constraint=exam_ready, success_metric=stability, time_budget_minutes=75

Expected Oracle:

  • infer Err_domain_ignore (evidence: accepted x=-1)
  • DTM shear_risk moderate/high -> reduce port_ratio, enforce domain contract
  • VoicePack FirmExam but timed_work_ratio lowered early

============================================================

END v0.4

“`text id=”v0q8a1″
MathOS.AI-TeachRunner.InterstellarCore v0.5
Status: RUNNABLE + MicroTest Bank Gen + Mastery/Stability Estimator + WordPress “Tutor Runner Page”
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_05
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_04

============================================================

0) META + CHANGELOG

Adds:
(A) MicroTest Bank Generator (MTB v1.0): per SkillID (Q1 invariant / Q2 apply / Q3 transfer) + auto-scoring rubrics
(B) Mastery/Stability Estimator (MSE v1.0): deterministic + Bayesian-lite update rules (no web; explainable)
(C) WordPress-ready Tutor Runner Page Template (WPR v1.0): copy/paste runner that parents/students can use with any LLM

Hard Rules:

  • OperatorScript v1.0 unchanged
  • Output remains A-H headers only
  • Teaching loop remains Observe→Infer→Plan→Act→Verify→Repair→Promote

============================================================

1) MICR0TEST BANK GENERATOR (MTB v1.0)

1.1 MicroTest item schema
TYPE MicroTestItem:
mt_id: string
skill_id: SkillID
q_type: {Q1_INVARIANT, Q2_APPLY, Q3_TRANSFER}
difficulty: {D1,D2,D3,D4} // microtests avoid D5
representation: {STORY,DIAGRAM,TABLE,GRAPH,NUMBERLINE,SYMBOLIC}
prompt: string
expected_answer: string | number | expression | set
expected_reason: string // one-line invariant reason
traps: list[ErrID]
required_checks: list[CheckID]
scoring_rubric: RubricID
time_budget_sec: int

TYPE MicroTestPack:
pack_id: string
skill_id: SkillID
items: list[MicroTestItem] // exactly 3: Q1,Q2,Q3
answer_key: string
scoring_sheet: ScoringSheet

TYPE ScoringSheet:
accuracy_score: 0..1
explain_score: 0..1
transfer_score: 0..1
stability_proxy: 0..1
inferred_errs: map[ErrID->weight]
notes: string

1.2 Rubrics (auto-scoring)
RubricID:
RUB_Q1_INVARIANT
RUB_Q2_APPLY
RUB_Q3_TRANSFER

RUB_Q1_INVARIANT:
accuracy_score:
1 if student names correct invariant OR selects correct invariant among options
0 otherwise
explain_score:
1 if student states “transform” + “what stays same” correctly in one line
0.5 if partially correct
0 otherwise
transfer_score:
n/a (0)
stability_proxy:
= explain_score (Q1 is stability anchor)

RUB_Q2_APPLY:
accuracy_score:
1 if final answer correct
0 otherwise
explain_score:
1 if student states invariant sentence before solving OR justifies key step
0.5 if minimal
0 if none
transfer_score:
n/a (0)
stability_proxy:
= 1 if checks used (resubstitute/bounds/domain) AND correct; else 0..0.5

RUB_Q3_TRANSFER:
accuracy_score:
1 if answer correct
0 otherwise
explain_score:
1 if student explicitly maps representation shift (e.g., graph->equation)
0.5 if partial
0 otherwise
transfer_score:
= accuracy_score * max(0.5, explain_score) // require some mapping
stability_proxy:
= transfer_score (transfer is stability under novelty)

1.3 MicroTest generation policy
FUNCTION GenerateMicroTestPack(skill_id, student_state, goal):
// choose difficulty band from mastery
m := student_state.mastery[skill_id] default 0.5
if m < 0.50 -> D = D1
if 0.50<=m<0.70 -> D = D2
if 0.70<=m<0.85 -> D = D3
if m>=0.85 -> D = D4 (exam-port timed)

// representation selection
rep_Q1 := choose stable rep (DIAGRAM or STORY)
rep_Q2 := choose main skill rep (SYMBOLIC or DIAGRAM)
rep_Q3 := choose representation_shift rep (GRAPH/TABLE/NUMBERLINE) != rep_Q2

// build items using TemplateLibrary (TL) stubs
Q1 := InstantiateMicroItem(skill_id, Q1_INVARIANT, D, rep_Q1)
Q2 := InstantiateMicroItem(skill_id, Q2_APPLY, D, rep_Q2)
Q3 := InstantiateMicroItem(skill_id, Q3_TRANSFER, D, rep_Q3 with rep_shift=true)

// attach traps + checks (from TL + ESI top errors)
inject top_errs := TopErrs(student_state)
add relevant required_checks (domain/bounds/copy/sign) based on traps

return MicroTestPack(Q1,Q2,Q3)

FUNCTION InstantiateMicroItem(skill_id, q_type, D, rep):
template := TL[skill_id][rep][D] if exists else TLFallback(skill_id,q_type)
prompt := Fill(template.prompt_skeleton, with fresh numbers/story)
expected_answer := GeneratorSolve(prompt) // LLM internal; must provide answer key
expected_reason := template.invariant_sentence
rubric := Map(q_type)
time_budget := TimeBudgetMicro(D, student_state)
return MicroTestItem(…)

1.4 Scoring + ESI integration
FUNCTION ScoreMicroTest(pack, student_responses, work_samples_optional):
score each item via rubric rules (text match + correctness)
infer_errs using ESI v1.0 when:
– answer wrong OR checks missing OR contradiction in steps
output ScoringSheet

============================================================

2) MASTERY/STABILITY ESTIMATOR (MSE v1.0)

2.1 StudentState extension
TYPE SkillStats:
mastery_beta: (a:float, b:float) // Bayesian-lite for correctness
transfer_beta: (a:float, b:float) // Bayesian-lite for transfer
stability_beta: (a:float, b:float) // under load/timed
last_seen_date: “YYYY-MM-DD”
streak: int // consecutive passes
notes: string

StudentState.mastery := map[SkillID -> 0..1] // derived from mastery_beta mean
StudentState.stability := map[SkillID -> 0..1] // derived from stability_beta mean
StudentState.skill_stats := map[SkillID -> SkillStats]

2.2 Initialization
FUNCTION InitSkillStats(skill_id):
// mildly uninformative prior
mastery_beta=(a=2,b=2)
transfer_beta=(a=2,b=2)
stability_beta=(a=2,b=2)
streak=0

2.3 Update rules (Bayesian-lite + deterministic modifiers)
Inputs:

  • PreMicroTest ScoringSheet (pre)
  • PostMicroTest ScoringSheet (post)
  • PracticeResults summary:
    timed_item_correct_rate (0..1)
    checklist_compliance_rate (0..1)
    representation_shift_success_rate (0..1)

FUNCTION UpdateSkillStats(skill_id, pre, post, practice):
stats := student_state.skill_stats[skill_id] else InitSkillStats(skill_id)

// Mastery update from post accuracy (Q2 primarily, plus Q1/Q3 signal)
y_mastery := WeightedCorrectness(post):
y = 0.2Q1_accuracy + 0.6Q2_accuracy + 0.2*Q3_accuracy
if y_mastery >= 0.85: stats.mastery_beta.a += 2
else if y_mastery >= 0.60: stats.mastery_beta.a += 1; stats.mastery_beta.b += 1
else: stats.mastery_beta.b += 2

// Transfer update (Q3)
y_transfer := post.transfer_score
if y_transfer >= 0.70: stats.transfer_beta.a += 2
else if y_transfer >= 0.50: stats.transfer_beta.a += 1; stats.transfer_beta.b += 1
else: stats.transfer_beta.b += 2

// Stability update (timed + checklist + error spike)
y_stability := CombineStability(post, practice):
base = post.stability_proxy
timed = practice.timed_item_correct_rate
checks = practice.checklist_compliance_rate
// stability rewards correctness under load + correct checking behavior
y = 0.45base + 0.35timed + 0.20*checks

if y_stability >= 0.75: stats.stability_beta.a += 2
else if y_stability >= 0.55: stats.stability_beta.a += 1; stats.stability_beta.b += 1
else: stats.stability_beta.b += 2

// Streak logic
if (post.accuracy_score>=0.85 AND post.transfer_score>=0.70): stats.streak += 1
else: stats.streak = 0

// Derived means
mastery_mean = stats.mastery_beta.a / (stats.mastery_beta.a + stats.mastery_beta.b)
transfer_mean = stats.transfer_beta.a / (stats.transfer_beta.a + stats.transfer_beta.b)
stability_mean= stats.stability_beta.a / (stats.stability_beta.a + stats.stability_beta.b)

student_state.mastery[skill_id] = mastery_mean
student_state.stability[skill_id] = stability_mean

// Record
stats.last_seen_date = Today(Asia/Singapore)
student_state.skill_stats[skill_id] = stats

2.4 Promotion gate (uses estimator)
FUNCTION PromotionGate(skill_id, thresholds):
m = student_state.mastery[skill_id]
s = student_state.stability[skill_id]
t = Mean(transfer_beta)
return (m>=thresholds.T_deploy_mastery AND t>=thresholds.T_deploy_transfer AND s>=thresholds.T_deploy_stability)

2.5 Decay rule (forgetting / drift)
FUNCTION WeeklyDecay(skill_id):
if days_since(stats.last_seen_date) > 14:
// gentle decay toward prior (prevents stale confidence)
stats.mastery_beta.b += 1
stats.transfer_beta.b += 1
stats.stability_beta.b += 1

============================================================

3) WORDPRESS “TUTOR RUNNER PAGE” TEMPLATE (WPR v1.0)

Goal:
One publishable page that lets parents/students:
– paste a system prompt into any LLM
– input student info
– paste up to 2 work samples
– get A-H outputs + schedule

WPR_SLUG: /mathos-ai-tutor-runner-interstellarcore-v0-5/
WPR_SECTIONS (WordPress-ready blocks):

  • What this is
  • How to run (3 steps)
  • Copy/Paste System Prompt
  • Input Form (copy/paste)
  • Optional: Work Sample format
  • What you will get (A-H)
  • Safety rules (short)

WPR_CONTENT_BLOCK (copy/paste)

[H2] MathOS AI Tutor Runner (Interstellar Core v0.5)

[H3] Step 1 — Paste this into your AI (System/Instruction)
SYSTEM_PROMPT:
“You are MathOS.AI-TeachRunner.InterstellarCore v0.5.
You must run a closed-loop teaching controller:
Observe→Infer→Plan→Act→Verify→Repair→Promote.
Execute OperatorScript v1.0.
Use:

  • TemplateLibrary TL v0.4 for prompt generation,
  • Practice Generator PGS v1.0 (with metadata),
  • Error Signature Inference ESI v1.0,
  • Dual-Track Mode DTM v1.0,
  • MicroTest Bank MTB v1.0 (Q1 invariant/Q2 apply/Q3 transfer),
  • Mastery/Stability Estimator MSE v1.0 (update skill stats).
    Output ONLY sections A-H with these exact headers:
    A) Oracle Report
    B) Operator Lesson Plan
    C) Architect Sandbox (0 or 1)
    D) Adaptive Practice
    E) MicroTest (3Q) + Answer Key + Scoring Rubric
    F) Fence Decision + RepairRoute
    G) Compression Summary (3 lines)
    H) NextSessionPlan (ChronoSchedule excerpt).
    No extra sections.”

[H3] Step 2 — Paste this Input Form (fill in blanks)
INPUT_FORM:
“StudentProfile: age_band=, language_band=, math_band=, risk_flags={}, preferences={} StudentState(optional): mastery_known={SkillID:0.xx,…}, error_signatures={ErrID:count,…}, last_notes=’…’ WorkSamples(optional, up to 2): Sample1: problem_text=’…’, student_steps=’…’, student_answer=’…’, correct_answer=’…’, time_sec=
SessionGoal: target_skills=[SkillID,…], constraint=, success_metric=, time_budget_minutes=__”

[H3] Step 3 — Do the session
Rule:

  • Follow the Operator Lesson Plan (B).
  • Student attempts Practice (D).
  • Student answers MicroTest (E).
  • Paste the student responses back into the AI and ask it to score + update.

[H3] What you will get (A–H)

  • Diagnosis (errors + leak)
  • Lesson plan (minute-by-minute)
  • Adaptive practice (with traps + checks)
  • 3-question microtest + scoring
  • Repair decision (truncate/stitch/promote)
  • 3-line compression summary
  • Next schedule (micro-retests + next session targets)

[H3] Safety rules (short)

  • If confusion spikes: truncate; smaller problem; rebuild stability.
  • If careless spikes: enforce checklist; slow down; verify.
  • If transfer fails: representation swap; restitch; retest.

============================================================

4) UPDATED RUN LOOP (v0.5 integration points)

In OperatorScript v1.0:
Step 2 PreMicroTest:
– GenerateMicroTestPack(skill_id) using MTB v1.0

Step 6 PostMicroTest:
– ScoreMicroTest using MTB rubrics + ESI inference

Step 7 Fence Decision:
– PromotionGate uses MSE v1.0 derived mastery/transfer/stability

Step 9 ScheduleNext:
– ChronoSchedule uses spaced micro-retests for focus skills (+1,+3,+7,+14)

============================================================

5) RUN-NOW EXAMPLE (SEC Algebra)

Example Input (paste into runner):
StudentProfile: age_band=S2, language_band=E2, math_band=M2, risk_flags={careless,skip_step}, preferences={visual,challenge}
StudentState(optional): mastery_known={PORT_SEC_ALG_02:0.55, PORT_SEC_ALG_01:0.60}, error_signatures={Err_skip_step:6, Err_copy:4, Err_sign:3}, last_notes=”Jumps steps; loses sign; graph questions confuse.”
WorkSamples(optional, up to 2):
Sample1: problem_text=”Solve 3(2x-1)=5x+7″, student_steps=”6x-1=5x+7 -> x=8″, student_answer=”x=8″, correct_answer=”x=8/??”, time_sec=40
SessionGoal: target_skills=[PORT_SEC_ALG_02], constraint=exam_ready, success_metric=stability, time_budget_minutes=45

Expected Oracle outcomes:

  • ESI infers Err_distribute_wrong or Err_skip_step (evidence: 3(2x-1)->6x-1)
  • RepairRoute includes CHK_snapshot_steps + CHK_resubstitute
  • MTB microtest includes Q3 representation shift (number line inequality or graph)

============================================================

END v0.5

“`text id=”q7c2mz”
MathOS.AI-TeachRunner.InterstellarCore v0.6
Status: RUNNABLE + Session Report Card + Multi-Skill Session Router + SkillID Quick Picker
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_06
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_05

============================================================

0) META + CHANGELOG

Adds:
(A) Session Scoring + Report Card (SRC v1.0): parent-friendly + machine-readable
(B) Multi-Skill Sessions (MSR v1.0): 2–3 SkillIDs per session with conflict-free routing
(C) SkillID Quick Picker (SQP v1.0): user selects by human labels (Primary/Sec/A-Math topics); system maps to SkillIDs

Hard Rules:

  • Output remains A-H only for “session run”
  • OperatorScript v1.0 unchanged; v0.6 adds planning + reporting objects

============================================================

1) SESSION SCORING + REPORT CARD (SRC v1.0)

1.1 Report objects
TYPE SessionResult:
session_id: string
date_local: “YYYY-MM-DD”
duration_min: int
target_skills: list[SkillID]
mode: {BUILD,REPAIR,STABILIZE,PROMOTE,PORT_EXAM}
voice_pack: VoicePackID
microtest_pre: ScoringSheet
microtest_post: ScoringSheet
practice_summary: PracticeSummary
fence_decision: {TRUNCATE,STITCH,PROMOTE}
repair_route_used: list[string]
compression_summary_3lines: list[string]
updated_skill_stats: map[SkillID -> SkillStatsSnapshot]
notes: string

TYPE PracticeSummary:
total_items: int
correct_rate: 0..1
timed_items: int
timed_correct_rate: 0..1
checklist_compliance_rate: 0..1
representation_shift_success_rate: 0..1
top_errs: list[ErrID]
time_pressure_flag: bool

TYPE SkillStatsSnapshot:
mastery: 0..1
transfer: 0..1
stability: 0..1
streak: int
delta_mastery: float
delta_stability: float

TYPE ReportCard:
student_id: string
week_range: “YYYY-MM-DD..YYYY-MM-DD”
focus_skills: list[SkillID]
current_levels: map[SkillID -> {mastery,transfer,stability}]
trend: map[SkillID -> {up,flat,down}]
top_leaks: list[ErrID]
parent_summary: string // short, readable
next_actions: list[string] // 3 bullets
next_schedule: ChronoScheduleExcerpt
risk_panel:
shear_risk: 0..1
time_pressure_risk: 0..1
careless_risk: 0..1
confidence: 0..1 // teacher belief confidence
machine_summary: object // stable key-value for automation

TYPE ChronoScheduleExcerpt:
next_events: list[ChronoEvent] // next 3 events
retest_offsets_days: list[int]
port_ratio: float
sandbox_ratio: float

1.2 Session scoring (single-number + breakdown)
TYPE SessionScore:
learning_gain: 0..1
transfer_gain: 0..1
stability_gain: 0..1
reliability: 0..1 // checks used + low error spike
overall: 0..1

FUNCTION ComputeSessionScore(pre:ScoringSheet, post:ScoringSheet, practice:PracticeSummary):
learning_gain := clamp(post.accuracy_score – pre.accuracy_score, 0, 1)
transfer_gain := clamp(post.transfer_score – pre.transfer_score, 0, 1)
stability_gain := clamp(post.stability_proxy – pre.stability_proxy, 0, 1)
reliability := 0.6practice.checklist_compliance_rate + 0.4(1 – practice.time_pressure_flag)
overall := 0.35learning_gain + 0.30transfer_gain + 0.25stability_gain + 0.10reliability
return SessionScore(…)

1.3 Parent Summary generator (strictly non-fluffy)
FUNCTION BuildParentSummary(report_card):
// exactly 3 short paragraphs max
P1: “This week we focused on {skills}. {best_gain} improved. {main_leak} is the main mark-loss cause.”
P2: “Under time pressure: {stable/unstable}. Checklist usage: {rate}. Transfer: {ok/not yet}.”
P3: “Next: {Action1}; {Action2}; {Action3}. Next session on {date/time}.”

============================================================

2) MULTI-SKILL SESSION ROUTER (MSR v1.0)

Problem:
2–3 skills in one session can conflict (phase shear, overload, representation confusion).

MSR Goals:

  • choose 1 PrimarySkill (core of session)
  • choose up to 2 SecondarySkills (support/port)
  • maintain load stability
  • enforce “one representation spine” per session

2.1 SessionPlan (multi-skill)
TYPE MultiSkillPlan:
primary_skill: SkillID
secondary_skills: list[SkillID] // max 2
mode: {BUILD,REPAIR,STABILIZE,PROMOTE,PORT_EXAM}
time_split_min: map[SkillID -> int]
microtests:
pre: SkillID // only primary microtest pre
post: SkillID // only primary microtest post
micro_retest_secondary: list[SkillID] // 1Q each
representation_spine: {STORY,DIAGRAM,SYMBOLIC,GRAPH,TABLE,NUMBERLINE}
checklist_set: set[CheckID]
fence:
truncate_thresholds: Thresholds
deploy_thresholds: Thresholds

2.2 Conflict rules
Rule C1 (Invariant clash):
Do not pair two skills that require different “dominant invariant” modes under same representation spine.
Example:
– log domain contracts + trig periodicity contracts in same session => high confusion risk.
Rule C2 (Notation overload):
Avoid pairing skills with high notation confusion risk simultaneously when Err_notation_confuse high.
Rule C3 (Port shear):
If shear_risk > 0.60, secondary skills must be Core-only (not exam-port).
Rule C4 (Load budget):
Max new skills introduced per session:
– Primary: 1 new concept
– Secondary: must be review/retest only (no new) unless stability>=0.80

2.3 Router algorithm
FUNCTION BuildMultiSkillPlan(candidate_skills:list[SkillID], student_state, goal, time_budget_min):
// Step 0: rank skills by urgency
urgency(skill) = (1 – stability(skill)) + (exam proximity weight if goal.exam_ready) + (error signature relevance)
sorted = sort descending urgency

// Step 1: choose PrimarySkill
primary = first(sorted)

// Step 2: choose SecondarySkills (0..2) subject to conflict rules
secondary = []
for skill in sorted[1:]:
if len(secondary)==2: break
if Conflicts(primary, skill, student_state): continue
if goal.exam_ready AND shear_risk>0.60 AND IsPortSkill(skill): continue
secondary.append(skill)

// Step 3: choose mode (primary decides)
mode = ChooseSessionMode(goal, dual_state, sensors) // from DTM v1.0

// Step 4: assign representation spine
spine = PreferredSpine(primary, student_profile, student_state)
// keep spine same for whole session; secondary items must match spine or be 1 quick shift only.

// Step 5: time split
base_primary = round(0.70 * time_budget_min)
rem = time_budget_min – base_primary
split_secondary = distribute(rem, secondary) // equal; minimum 8 min each
time_split = {primary: base_primary, …}

// Step 6: microtests
pre = primary
post = primary
secondary_retests = secondary (1Q each, not full microtest)

// Step 7: checklist selection
checklist_set = CoreAnchorChecklist(primary, student_state) + TrapsToChecks(primary, top_errs)

return MultiSkillPlan(…)

2.4 Secondary 1-question retest format
TYPE OneQRetest:
skill_id: SkillID
prompt: string
expected_answer: string
check: CheckID
pass_fail: bool

Rule:
If retest fails -> secondary skill becomes next session primary (unless conflict).

============================================================

3) SKILLID QUICK PICKER (SQP v1.0)

Goal:
User doesn’t need SkillIDs; user picks by:
Level + Topic + Subtopic + Goal.

3.1 Picker schema
TYPE QuickPickInput:
level: {PRI,SEC,AMATH,JC}
topic: string // e.g. “Algebra”, “Logarithms”
subtopic: string optional // e.g. “Linear equations”, “Domain”
goal: {concept_build, exam_ready, repair_only, accelerate}
common_issue: string optional // e.g. “careless”, “sign”, “time pressure”
time_budget_minutes: int

TYPE QuickPickOutput:
recommended_skills: list[SkillID] // 1 primary + up to 2 secondary
rationale: list[string]
session_mode: {BUILD,REPAIR,PORT_EXAM,STABILIZE,PROMOTE}
port_ratio: float

3.2 Picker map (minimal coverage; extendable)
SQP_MAP:
PRI:
“Number” -> [PORT_PRI_NUM_01, PORT_PRI_NUM_02, PORT_PRI_NUM_03, PORT_PRI_NUM_04]
“Fractions” -> [PORT_PRI_NUM_03]
“Ratio/Percent” -> [PORT_PRI_NUM_04]
“Geometry” -> [PORT_PRI_GEOM_01]
“Data/Probability” -> [PORT_PRI_DATA_01, SKILL_PROB0]
SEC:
“Algebra” -> [PORT_SEC_ALG_01, PORT_SEC_ALG_02, PORT_SEC_ALG_03, PORT_SEC_ALG_04]
“Functions/Graphs” -> [PORT_SEC_FUNC_01, SKILL_G0]
“Geometry” -> [PORT_SEC_GEOM_01, PORT_SEC_GEOM_02]
“Vectors” -> [PORT_SEC_VEC_01]
AMATH:
“Indices” -> [PORT_AM_IDX_01]
“Surds” -> [PORT_AM_SURD_01]
“Logarithms” -> [PORT_AM_LOG_01]
“Exponentials” -> [PORT_AM_EXP_01]
“Quadratics” -> [PORT_AM_QUAD_01, PORT_AM_QUAD_02]
“Coord Geometry” -> [PORT_AM_COORD_01, PORT_AM_COORD_02]
“Trigonometry” -> [PORT_AM_TRIG_01, PORT_AM_TRIG_02]
“Differentiation” -> [PORT_AM_DIFF_01, PORT_AM_DIFF_02]
“Integration” -> [PORT_AM_INT_01]
“Mixed Exam” -> [PORT_AM_EXAM_01]
JC:
“Differentiation” -> [PORT_JC_CALC_01]
“Integration” -> [PORT_JC_CALC_02]
“Numerical Stability” -> [SKILL_NUMSTAB0]
“Control/Optimization” -> [SKILL_OPT0, SKILL_CTL0]

3.3 QuickPick resolution rules
FUNCTION QuickPickResolve(input:QuickPickInput, student_state):
skills = SQP_MAP[input.level][input.topic] (filter by subtopic if provided)
// choose primary by lowest stability among mapped skills
primary = argmin(stability(skill)) among skills

// choose secondary:
secondary = []
if input.goal==exam_ready:
// add the nearest prerequisite if weak
prereq = WeakestPrereq(primary)
if prereq exists: secondary.append(prereq)
// add exam stability pack if time pressure issue
if input.common_issue contains “time” OR Err_time_pressure_collapse high:
secondary.append(PORT_AM_EXAM_01 or PORT_SEC_ALG_02 depending level)
else:
// add core anchor skill for meaning transfer
secondary.append(CoreAnchorFor(primary)) // typically SKILL_R0 or SKILL_I0 or SKILL_G0

// cap secondary to 2 + apply MSR conflict rules
plan = BuildMultiSkillPlan([primary]+secondary, student_state, goal=input.goal, time_budget_min=input.time_budget_minutes)
return QuickPickOutput(recommended_skills=[plan.primary]+plan.secondary, …)

CoreAnchorFor(skill):
if skill in ALG family -> SKILL_R0
if skill in GEOM/TRIG -> SKILL_I0
if skill in FUNC/COORD -> SKILL_G0
if skill in LOG/IDX -> SKILL_R0 + SKILL_VER0 (domain contracts) [use secondary only one]
else -> SKILL_I0

============================================================

4) UPDATED “RUNNER PAGE” EXTENSION (WPR v1.1)

Add-on block for WordPress page:
[H3] Quick Picker (no SkillIDs needed)
Paste this instead of SkillIDs:

QUICK_PICK_FORM:
“QuickPick:
level=SEC
topic=Algebra
subtopic=Linear equations
goal=exam_ready
common_issue=time pressure + careless
time_budget_minutes=60″

Runner behavior:

  • resolve QuickPick -> SkillIDs
  • build MultiSkillPlan
  • run session outputs A-H

============================================================

5) SESSION OUTPUT (A-H) — v0.6 REQUIRED ADDITIONS

A) Oracle Report must include:

  • Top 2 ErrIDs + evidence
  • DTM: port_ratio + shear_risk
  • MSR: primary_skill + secondary_skills + representation_spine
  • Selected VoicePack
  • MicroTestPack IDs used (pre/post)

H) NextSessionPlan must include:

  • ChronoScheduleExcerpt (next 3 events)
  • ReportCard excerpt: top_leaks + next_actions

============================================================

6) RUN-NOW QUICK START (No SkillIDs)

Paste into any LLM with SYSTEM_PROMPT v0.5 (plus v0.6 add-ons implied):

QuickPick:
level=AMATH
topic=Logarithms
subtopic=Domain
goal=exam_ready
common_issue=careless + time pressure
time_budget_minutes=75

Optional WorkSample:
Sample1: problem_text=’Solve log(x-1)+log(x-3)=log(8)’,
student_steps=’… includes x=-1 …’,
student_answer=’x=5,-1′,
correct_answer=’x=5′,
time_sec=95

Expected:

  • primary=PORT_AM_LOG_01
  • secondary=SKILL_VER0 (contract/domain) or SKILL_R0 (rewrite legality)
  • mode=PORT_EXAM with Core Anchor
  • report card excerpt + spaced retests

============================================================

END v0.6

“`text id=”p0x3h2″
MathOS.AI-TeachRunner.InterstellarCore v0.7
Status: RUNNABLE + One-Button Parent Loop + Weekly Auto-Report + Skill Glossary Pack
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_07
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_06

============================================================

0) META + CHANGELOG

Adds:
(A) One-Button Parent Loop (OBPL v1.0):
parent pastes student answers once → AI scores + updates state + generates next practice + schedules next events.
(B) Weekly Auto-Report Compiler (WARC v1.0):
AI compiles SessionResult logs into a ReportCard + trends + next actions.
(C) Skill Glossary Pack (SGP v1.0):
minimal human-readable glossary for any SkillID used (on-page ready).

Hard Rules:

  • “Session Run” output remains A-H only.
  • OBPL + WARC are extra prompts/contracts (not extra sections inside A-H).
  • OperatorScript v1.0 remains stable.

============================================================

1) ONE-BUTTON PARENT LOOP (OBPL v1.0)

Goal:
Parent workflow:
1) Run a session (A-H)
2) Student answers practice + microtest
3) Parent pastes a single “Answer Packet”
4) AI returns:
– auto-scored results
– updated StudentState (mastery/stability/error signatures)
– next practice set
– next micro-retest schedule excerpt
– short parent summary

1.1 Answer Packet schema (single paste)
TYPE AnswerPacket:
session_id: string
target_skills: list[SkillID]
practice_answers:
– item_id: string
student_answer: string
student_steps: string optional
time_sec: int optional
microtest_answers:
– mt_id: string
response: string
steps: string optional
time_sec: int optional
notes_optional: string

1.2 OBPL Output schema (single response object)
TYPE OBPL_Output:
scored_microtest: ScoringSheet
scored_practice: PracticeSummary
inferred_errors: map[ErrID->weight]
updated_student_state_patch:
– mastery updates
– stability updates
– error_signatures updates
– dual_track updates (shear_risk)
fence_decision: {TRUNCATE,STITCH,PROMOTE}
repair_route_recommendation: list[string]
next_practice_set: list[PracticeItem] // generated via PGS v1.0
next_micro_retest_pack: MicroTestPack // MTB v1.0 for next event
next_schedule_excerpt: ChronoScheduleExcerpt
parent_summary_short: string // <= 6 lines
machine_patch: object // stable keys for automation

1.3 OBPL “One Button” policy
FUNCTION OBPL_Run(answer_packet, last_AH_output, student_state):
// Step 1: Score microtest
micro_score := ScoreMicroTest(pack_from_last_AH, answer_packet.microtest_answers)

// Step 2: Score practice
practice_summary := ScorePractice(answer_packet.practice_answers, expected_answers_from_last_AH, ESI v1.0)

// Step 3: Update error signatures
UpdateErrorSignatures(student_state, WorkSamplesFrom(answer_packet))

// Step 4: Update mastery/stability estimator (MSE v1.0)
UpdateSkillStats(primary_skill, pre_sheet_from_last_AH, micro_score, practice_summary)
if secondary skills exist:
update secondary with “1Q retest” pass/fail as weak signal:
if pass: +1 to mastery_beta.a
if fail: +1 to mastery_beta.b and mark as next-session candidate

// Step 5: Fence decision
fence := DecideFence(micro_score, practice_summary, thresholds)
if domain/careless/time collapse exceed truncate → TRUNCATE
else if PromotionGate(primary_skill) true → PROMOTE
else → STITCH

// Step 6: Generate next practice + next microtest pack
next_skill_focus := SelectNextSkillFocus(fence, dual_track_state, MSR outcomes)
next_practice := GeneratePracticeSet(next_skill_focus, student_state, goal, count_target)
next_micro := GenerateMicroTestPack(next_skill_focus, student_state, goal)

// Step 7: Build schedule excerpt
schedule_excerpt := BuildNext3Events(student_state, next_skill_focus, cadence_preset)

// Step 8: Produce parent summary + machine patch
return OBPL_Output(…)

1.4 Practice scoring (minimal deterministic)
TYPE PracticeItemResult:
item_id: string
correct: bool
inferred_errs: map[ErrID->weight]
checks_used: set[CheckID] optional
time_sec: int optional

FUNCTION ScorePractice(practice_answers, expected_key, ESI):
for each item:
if student_answer matches expected (allow algebraic equivalence if declared):
correct=true
else:
correct=false
infer_errs = ESI(WorkSample)
compute:
correct_rate
timed_correct_rate (if any timed)
checklist_compliance_rate (from declared checks OR from presence of verification steps)
representation_shift_success_rate (items tagged TRANSFER)
time_pressure_flag := (timed_correct_rate << untimed_correct_rate) OR Err_time_pressure_collapse inferred
return PracticeSummary

1.5 OBPL prompts (copy/paste)
PROMPT_OBPL_SYSTEM (paste once for “scoring step”):
“You are MathOS OBPL v1.0.
Input: AnswerPacket + last session A-H output + StudentState.
You must:

  • score microtest via MTB rubrics,
  • infer errors via ESI,
  • update mastery/stability via MSE,
  • decide Fence outcome,
  • generate next practice via PGS,
  • generate next microtest via MTB,
  • output OBPL_Output only.
    Do NOT output A-H. Output ONLY:
    1) OBPL_Output (human-readable + machine_patch).”

PROMPT_OBPL_INPUT_TEMPLATE:
“StudentState: … (paste current)
LastSession_AH: … (paste A-H content)
AnswerPacket: … (paste one packet)”

============================================================

2) WEEKLY AUTO-REPORT COMPILER (WARC v1.0)

Goal:
Parent/tutor pastes SessionResult logs (or OBPL_Output logs) for the week →
AI compiles:
– weekly ReportCard
– trends per SkillID
– top recurring errors
– schedule for next week
– 3 next actions (highest ROI)

2.1 Weekly Log schema
TYPE WeeklyLog:
student_id: string
week_start: “YYYY-MM-DD”
week_end: “YYYY-MM-DD”
sessions: list[SessionResult] // from SRC v1.0
notes_optional: string

2.2 Compiler outputs
TYPE WeeklyReport:
report_card: ReportCard
session_scores: list[SessionScore]
skill_trends: map[SkillID -> {mastery_delta, stability_delta, sessions_count}]
top_errs_week: list[ErrID]
highlights: list[string] // <= 5
risks: list[string] // <= 5
next_week_plan: ChronoScheduleExcerpt
machine_summary: object

2.3 Trend rules (deterministic)
FUNCTION ComputeSkillTrend(sessions):
for each skill:
delta_mastery := last.mastery – first.mastery
delta_stability := last.stability – first.stability
trend := if delta_mastery>+0.05 OR delta_stability>+0.05 -> up
else if delta_mastery<-0.05 OR delta_stability<-0.05 -> down
else -> flat

2.4 Weekly next actions (3 bullets)
FUNCTION PickNextActions(top_errs_week, weakest_skills, goal):
Action1: Repair top leak (highest frequency ErrID) with one named checklist + 6 micro-drills
Action2: Raise stability in weakest skill (timed_work_ratio controlled)
Action3: One transfer practice block (representation shift) to reduce shear risk

2.5 WARC prompt (copy/paste)
PROMPT_WARC_SYSTEM:
“You are MathOS WARC v1.0.
Input: WeeklyLog with SessionResult entries.
Output: WeeklyReport only.
Be concise and deterministic:

  • compute trends,
  • list top ErrIDs,
  • produce ReportCard.parent_summary,
  • propose next_week_plan excerpt (next 3 events),
  • 3 next actions maximum.”

PROMPT_WARC_INPUT_TEMPLATE:
“WeeklyLog: {student_id, week_start, week_end, sessions:[…SessionResult…] }”

============================================================

3) SKILL GLOSSARY PACK (SGP v1.0)

Goal:
Any SkillID used in a session can be shown to parent/student as:
– what it is
– why it matters
– how to practice
– common traps
– quick self-check

3.1 Glossary schema
TYPE GlossaryEntry:
skill_id: SkillID
display_name: string
one_line: string // definition
why_it_matters: string // transfer/exam reason
invariant: string
3_step_method: list[string]
common_traps: list[ErrID]
self_check: string // 1 line test
next_skills: list[SkillID] // edges
port_tags: set[string]

TYPE GlossaryPack:
pack_id: string
generated_for: list[SkillID]
entries: list[GlossaryEntry]
format: {WORDPRESS,PLAIN}

3.2 Glossary generator
FUNCTION BuildGlossaryPack(skill_ids, format):
for each skill_id:
entry := LookupBaseEntry(skill_id) + attach traps from TL + checks from PGS
output in requested format

3.3 Minimal base entries (seed set; extendable)
ENTRY_SKILL_R0 (RewriteRules):
display_name=”Rewrite Rules (Algebra Safety)”
one_line=”A rewrite is allowed only if it preserves meaning (equivalence).”
why=”Prevents ‘looks right’ steps that lose marks and break transfer.”
invariant=”Meaning stays the same under legal rewrites.”
method=[“Name the rule”, “Apply once”, “Verify by substitution (x=2).”]
traps=[Err_distribute_wrong, Err_sign]
self_check=”If x=2 gives different values before/after, rewrite is illegal.”
next=[SKILL_V0, PORT_SEC_ALG_01]
port_tags={SEC,ALG}

ENTRY_PORT_AM_LOG_01 (Log Laws):
display_name=”Logarithms (Rewrite + Domain Contract)”
one_line=”Log laws are rewrite rules that only work when the domain is valid.”
why=”Most A-Math log mistakes are not algebra—they are missing domain checks.”
invariant=”Rewrite preserves truth AND domain must be satisfied.”
method=[“State domain (arguments>0)”, “Rewrite using log laws”, “Filter solutions by domain.”]
traps=[Err_log_rules_mix, Err_domain_ignore]
self_check=”Did you write and use the domain before final answers?”
next=[PORT_AM_EXP_01, PORT_AM_DIFF_01]
port_tags={AMATH,ALG,VER}

ENTRY_PORT_SEC_ALG_02 (Linear Equations/Inequalities):
display_name=”Linear Constraints”
one_line=”An equation/inequality is a constraint; solving finds values that satisfy it.”
why=”Builds stable solving + checking; inequalities define solution sets (SafeSet).”
invariant=”Solution must satisfy the original constraint.”
method=[“Isolate variable with inverse operations”, “Solve”, “Verify by substitution / boundary check.”]
traps=[Err_inverse_confuse, Err_sign, Err_skip_step]
self_check=”Does your answer satisfy the original line when substituted?”
next=[PORT_SEC_ALG_03, SKILL_F0]
port_tags={SEC,ALG}

3.4 WordPress output format
FORMAT_WORDPRESS_ENTRY:
[H3]{display_name} ({skill_id})

  • One-line: {one_line}
  • Why it matters: {why_it_matters}
  • Invariant: {invariant}
  • 3-step method:
    1) …
    2) …
    3) …
  • Common traps: {ErrIDs}
  • Self-check: {self_check}
  • Next: {next_skills}

============================================================

4) “ONE-BUTTON” WORDPRESS RUNNER PAGE (WPR v1.2)

Add two blocks to existing WPR page:

[H3] One-Button Scoring (after the session)

  • Paste StudentState
  • Paste last A-H output
  • Paste AnswerPacket
  • Get updated state + next practice + next schedule

[H3] Weekly Report (once a week)

  • Paste WeeklyLog (list of SessionResult)
  • Get ReportCard + next actions + plan

============================================================

5) RUN-NOW QUICK START (OBPL + Glossary)

OBPL_INPUT_MIN:
StudentState: { … }
LastSession_AH: { … }
AnswerPacket:
session_id=”S2026-02-25-01″
target_skills=[PORT_AM_LOG_01, SKILL_R0]
practice_answers=[
{item_id:”P1″, student_answer:”x=5,-1″, student_steps:”…”, time_sec:120}
]
microtest_answers=[
{mt_id:”MT-Q1″, response:”Invariant: log laws; must keep domain >0″, time_sec:30},
{mt_id:”MT-Q2″, response:”…”, steps:”…”, time_sec:90},
{mt_id:”MT-Q3″, response:”…”, steps:”…”, time_sec:110}
]

Glossary request (optional):
“BuildGlossaryPack for skill_ids=[PORT_AM_LOG_01, SKILL_R0] format=WORDPRESS”

============================================================

END v0.7

“`text id=”m8v0k2″
MathOS.AI-TeachRunner.InterstellarCore v0.8
Status: RUNNABLE + Registry Expansion + Auto-Log Builder + Exam Paper Simulator Mode
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_08
Supersedes: MATHOS_AI_RUNNER_INTERSTELLARCORE_07

============================================================

0) META + CHANGELOG

Adds:
(A) SkillID Registry Expansion Pack (SREP v1.0):
– expands Skill Glossary Pack (SGP) coverage
– expands TemplateLibrary (TL) coverage beyond Top 25
(B) Auto-Log Builder (ALB v1.0):
– OBPL outputs auto-append into WeeklyLog via machine_patch
(C) Exam Paper Simulator Mode (EPS v1.0):
– timed mixed set + stability scoring + shear control + postmortem repair routing

Hard Rules:

  • Standard session output remains A-H only (when running a normal session).
  • OBPL/WARC remain separate “tool prompts”.
  • EPS is a dedicated mode with its own strict output format (EPS-OUT), not A-H.

============================================================

1) SKILLID REGISTRY EXPANSION PACK (SREP v1.0)

Goal:
Provide “minimum viable coverage” for:
– SEC E-Math typical clusters
– SEC A-Math full clusters (beyond v0.4 top 25)
Coverage means:
(1) GlossaryEntry exists
(2) TL stubs exist for D1..D4 in 2–3 representations
(3) MicroTest templates exist (Q1/Q2/Q3)

1.1 Expansion scope (cluster list)
SREP_CLUSTERS:
SEC_EMATH:
– Algebra: expressions, equations, inequalities, simultaneous, proportions, functions/graphs
– Geometry: angle properties, triangles, polygons, circles, coordinate geometry basics
– Mensuration: area/volume/surface area, composite shapes
– Statistics/Probability: charts, averages, scatter, basic probability
– Number: fractions/ratio/percent, speed/rate, standard form, indices basics
SEC_AMATH:
– Indices/Surds (done)
– Log/Exp (done)
– Quadratics (done)
– Trig (done)
– Coordinate geometry (done)
– Differentiation/Applications (done)
– Integration (seed done)
– Sequences/Series (NEW)
– Binomial (NEW)
– Partial fractions (NEW)
– Remainder/Factor theorem basics (NEW)
– Amath problem-solving mix (done as EXAM)

1.2 New SkillIDs (minimal, extendable)
PORT_AM_SEQ_01 SequencesBasics
Prereq=[PORT_SEC_ALG_01, SKILL_R0]
Invariant=”Pattern rule must generate terms consistently; index n is a slot.”
Traps=[Err_notation_confuse, Err_skip_step]
PortTags={AMATH,ALG}

PORT_AM_SEQ_02 AP_GP
Prereq=[PORT_AM_SEQ_01]
Invariant=”AP: constant difference; GP: constant ratio.”
Traps=[Err_units_ignore, Err_notation_confuse]
PortTags={AMATH,ALG}

PORT_AM_SER_01 SeriesSums
Prereq=[PORT_AM_SEQ_02, SKILL_M0]
Invariant=”Sum is accumulation; formula encodes invariant structure.”
Traps=[Err_copy, Err_skip_step]
PortTags={AMATH,ALG}

PORT_AM_BIN_01 BinomialBasics
Prereq=[PORT_AM_IDX_01, PORT_SEC_ALG_01]
Invariant=”Expansion preserves equivalence; coefficients follow combinatorial structure.”
Traps=[Err_distribute_wrong, Err_copy]
PortTags={AMATH,ALG}

PORT_AM_BIN_02 BinomialGeneralTerm
Prereq=[PORT_AM_BIN_01, SKILL_V0]
Invariant=”General term is a contract: coefficient + power + index constraints.”
Traps=[Err_notation_confuse, Err_skip_step]
PortTags={AMATH,VER,ALG}

PORT_AM_PF_01 PartialFractionsBasics
Prereq=[PORT_AM_LOG_01, PORT_SEC_ALG_03, SKILL_R0]
Invariant=”Decomposition preserves value; recomposition verifies.”
Traps=[Err_skip_step, Err_copy]
PortTags={AMATH,ALG}

PORT_AM_PF_02 PartialFractionsRepeatedQuadratic
Prereq=[PORT_AM_PF_01]
Invariant=”Form depends on factor structure (distinct/repeated/irreducible).”
Traps=[Err_factor_miss, Err_notation_confuse]
PortTags={AMATH,ALG}

PORT_AM_FT_01 FactorRemainderTheorem
Prereq=[PORT_AM_QUAD_01, SKILL_R0]
Invariant=”f(a)=0 ⇔ (x-a) factor; remainder is invariant under division algorithm.”
Traps=[Err_copy, Err_sign]
PortTags={AMATH,ALG,VER}

1.3 Expansion artifacts (what SREP generates)
TYPE SREP_Artifacts:
glossary_pack: GlossaryPack
template_additions: list[TemplateSpec]
microtest_templates: list[MicroTestItem] // “blueprints” not full numbers

SREP Rule:
For each new SkillID:
– Build GlossaryEntry (SGP format)
– TL stubs:
[SYMBOLIC][D1..D4] + one of [STORY/DIAGRAM/GRAPH][D2..D3]
– MTB templates:
Q1 invariant (choice/short)
Q2 apply (standard)
Q3 transfer (representation shift)

============================================================

2) AUTO-LOG BUILDER (ALB v1.0)

Goal:
Parent does NOT manually maintain WeeklyLog.
OBPL_Output.machine_patch contains:
– SessionResult fragment
– WeeklyLog append directive
Any LLM can apply patch deterministically.

2.1 Machine patch contract
TYPE MachinePatch:
patch_version: “ALB1.0”
student_id: string
append_to_week_range: “YYYY-MM-DD..YYYY-MM-DD”
session_result_compact: object // minimal SessionResult fields
skill_stats_deltas: object // per-skill delta
err_signature_deltas: object
schedule_excerpt: ChronoScheduleExcerpt

2.2 OBPL required outputs (extension)
OBPL_Output.machine_patch MUST include MachinePatch.

2.3 Apply patch (deterministic)
FUNCTION ApplyMachinePatch(weekly_log, machine_patch):
assert week_range matches
weekly_log.sessions.append(ExpandToSessionResult(machine_patch.session_result_compact))
update any rolling summaries if present
return weekly_log

2.4 Auto-week-boundary rule
WeekRange definition:
week_start = Monday local
week_end = Sunday local

FUNCTION ResolveWeekRange(today_local):
return [MostRecentMonday(today) .. MostRecentSunday(today)]

============================================================

3) EXAM PAPER SIMULATOR MODE (EPS v1.0)

Goal:
Simulate a timed paper-like environment while preserving:
– invariants (Core Anchor)
– stability scoring
– shear control (DTM)
– postmortem repair routing (FENCE + ERCO)

EPS is NOT “teach during paper”.
EPS is “run → score → diagnose → repair plan”.

3.1 EPS Inputs
TYPE EPS_Input:
level: {SEC,AMATH,JC}
paper_style: {MIXED_SET,TOPIC_MIX,PASTYEAR_STYLE}
duration_min: int
target_clusters: list[string] // e.g. [“logs”,”indices”,”trig”,”diff”]
difficulty_profile: {EASY_HEAVY,BALANCED,HARD_HEAVY}
timed_work_ratio: float // usually 1.0 in EPS
items_count: int
student_state: StudentState
rules:
require_core_anchor: bool = true
allowed_checks: set[CheckID] default all
no_help: bool = true // paper simulation

3.2 EPS Output format (EPS-OUT only)
EPS-OUT Sections (fixed):
1) Paper (Items)
2) Answer Key (concise)
3) Marking Scheme (points + common traps)
4) Student Answer Packet Template (for parent to paste)
5) Scoring + Stability Panel (after answers pasted)
6) Postmortem (top leaks + shear + time pressure)
7) Repair Plan (next 2 sessions) + MicroRetests (+1,+3,+7)
8) ReportCard Excerpt + MachinePatch

Hard Rule:
If student answers not provided yet:
Output sections 1–4 only (paper generation stage).
If student answers provided:
Output sections 5–8 only (scoring stage).

3.3 EPS Paper generator (uses TL + PGS)
FUNCTION GeneratePaper(eps_input):
clusters -> map to SkillIDs via SQP_MAP + SREP
choose primary skills per cluster by weakest stability
allocate items per cluster (balanced)
for each item:
instantiate PracticeItem with:
tags={EXAMSTYLE,NOISE(if needed),BOUNDS(if needed)}
time_budget_sec derived from duration/items_count
checks include core anchor:
– CHK_invariant_sentence always
– domain/bounds/checklist as applicable
return PaperItems + AnswerKey + MarkingScheme

3.4 EPS Scoring (after AnswerPacket)
TYPE EPS_StudentAnswers:
paper_id: string
answers: list[{item_id, response, steps optional, time_sec optional}]

FUNCTION ScorePaper(paper, student_answers):
item_scores:
– correctness (0/1 or points)
– trap inference via ESI
– checklist compliance (evidence of checks)
compute:
total_score
cluster_scores
stability_score:
stability = 0.5(timed_correct_rate) + 0.3(transfer_items_correct_rate) + 0.2*(checklist_compliance)
time_pressure_risk:
if late items collapse OR time_sec spikes OR errors shift to copy/sign -> high
shear_risk:
if port items correct but invariant sentences missing + transfer fails -> high
produce Postmortem + RepairPlan + MachinePatch (ALB)

3.5 EPS Repair Plan (2 sessions) routing
RepairPlan format:
Session1: REPAIR core leak (Core anchor skill)
Session2: PORT_EXAM stability rebuild for top 2 clusters
Each session includes:

  • primary + secondary skills (MSR)
  • microtests + practice
  • strict checklist

============================================================

4) PROMPT PACK v0.8 (Normal Session + OBPL + EPS)

PROMPT_SESSION_SYSTEM_v08:
“You are MathOS.AI-TeachRunner.InterstellarCore v0.8.
Run normal sessions using A-H only.
Use:
TL v0.4 + SREP v1.0, PGS v1.0, MTB v1.0, MSE v1.0, ESI v1.0, DTM v1.0, MSR v1.0, SQP v1.0, SRC v1.0, ALB v1.0.
A) must include: MSR plan + DTM + VoicePack + top ErrIDs evidence.
H) must include: ChronoScheduleExcerpt + ReportCard excerpt + MachinePatch.”

PROMPT_OBPL_SYSTEM_v08:
“You are MathOS OBPL v1.0 with ALB v1.0.
Input: StudentState + LastSession_AH + AnswerPacket.
Output: OBPL_Output only, including MachinePatch.”

PROMPT_EPS_SYSTEM_v08:
“You are MathOS EPS v1.0.
Input: EPS_Input (and optional EPS_StudentAnswers).
If no student answers: output EPS-OUT sections 1–4 only.
If answers provided: output EPS-OUT sections 5–8 only.
Use TL + SREP + ESI + MSE + DTM + ALB.”

============================================================

5) RUN-NOW QUICK START (EPS generation)

EPS_Input:
level=AMATH
paper_style=MIXED_SET
duration_min=75
target_clusters=[“indices”,”logs”,”trig”,”quadratics”,”diff”]
difficulty_profile=BALANCED
timed_work_ratio=1.0
items_count=18
student_state={…}
rules={require_core_anchor:true, no_help:true}

Expected:

  • outputs Paper + AnswerKey + MarkingScheme + Student Answer Packet Template

============================================================

END v0.8

MathOS.AI-TeachRunner.InterstellarCore — Remaining Needs (Gap Map) v0.8 → v1.0
Goal: make it truly “runnable + teachable + scalable” on BukitTimahTutor.com, not just a spec.
============================================================
A) MINIMUM TO GO LIVE (Must-Have)
============================================================
1) STATE PERSISTENCE LAYER
ModuleID: MATHOS_STATESTORE_01
Need:
- Store StudentProfile, StudentState, SkillStats, ErrorSignatures, DualTrackState
- Version-lock state schema (forward-only)
Why:
- Without persistence, “AI tutor” resets every chat → no real control loop.
2) ANSWER VALIDATION / EQUIVALENCE CHECKER
ModuleID: MATHOS_VALIDATE_01
Need:
- Algebraic equivalence (e.g., x=5 and x-5=0)
- Set-of-solutions equivalence (intervals, trig solutions)
- Numeric tolerance (rounding/approx)
Why:
- LLM scoring alone is noisy; must fence hallucinated grading.
3) TEMPLATE LIBRARY SCALE-UP (Coverage Completeness)
ModuleID: MATHOS_TL_FULLPACK_01
Need:
- TL stubs + generators for “all common” SEC E/A-Math clusters
- At least 20–50 items per major SkillID across D1–D4
Why:
- Without breadth, the runner breaks on real student work.
4) MICROTEST BANK SCALE-UP + AUTO-SCORING RULES
ModuleID: MATHOS_MTB_FULLPACK_01
Need:
- For every SkillID used: Q1/Q2/Q3 variants (multiple forms)
- Deterministic rubrics + common-trap scoring notes
Why:
- Microtests are the sensors; weak sensors = weak control.
5) WORDPRESS RUNNER UX (Parent-usable)
ModuleID: MATHOS_WP_RUNNER_UX_01
Need:
- Copy/paste runner page + QuickPick + AnswerPacket + OBPL
- “Paste here” blocks + examples + minimal instructions
Why:
- If it’s not frictionless, nobody runs it consistently.
============================================================
B) MAKES IT “CIVILISATION-GRADE” (High Leverage)
============================================================
6) HALLUCINATION FENCE (Truth Guard)
ModuleID: MATHOS_TRUTHFENCE_01
Need:
- Hard rules: “If uncertain, ask for student steps / don’t assert”
- Confidence outputs + refusal to grade when validator fails
- Detection: inconsistent answer key vs generated prompt
Why:
- Advanced ≠ fancy; advanced = reliable under load.
7) DIAGRAM / VISUAL PIPELINE
ModuleID: MATHOS_DIAGRAM_01
Need:
- Standard text-diagram encoding (ASCII or simple markup)
- Optional image input path (student photos of work) → error inference
Why:
- Most geometry/trig failures are representation failures.
8) EXAM PAPER SIMULATOR PACK (EPS) — Content + Calibration
ModuleID: MATHOS_EPS_FULLPACK_01
Need:
- Paper generators for E-Math + A-Math “mixed stability”
- Stable marking + postmortem-to-repair routing
Why:
- This is your “stress lab” for Phase reliability.
9) BACKTEST / OUTCOME LOOP (EducationOS link)
ModuleID: MATHOS_BACKTEST_01
Need:
- Weekly trend report + predicted next gains
- “Before/after” quant (accuracy, transfer, stability)
Why:
- This is how you prove the OS works, not just claim it.
============================================================
C) SCALE + OPERATIONS (So it can run for many students)
============================================================
10) CONTENT GOVERNANCE + VERSIONING RULES
ModuleID: MATHOS_GOVERNANCE_01
Need:
- Frozen SkillIDs (no renames)
- TL/MTB version locks
- Patch protocol (v1.0 → v1.1 forward-only)
Why:
- Prevent drift that breaks AI extraction + your own runtime.
11) “TUTOR VOICE” STANDARDIZATION (Brand + Consistency)
ModuleID: MATHOS_VOICEPACKS_02
Need:
- BukitTimahTutor brand voice packs mapped to student risk flags
Why:
- Consistent execution reduces phase shear.
12) PRIVACY / DATA POLICY (Practical)
ModuleID: MATHOS_PRIVACY_01
Need:
- What parents should/shouldn’t paste
- How to store anonymized logs (if any)
Why:
- Trust + operational hygiene.
============================================================
D) OPTIONAL “ALIEN-ADVANCED” UPGRADES (Later)
============================================================
13) FORMAL VERIFICATION TRACK (Proof-as-Contract)
ModuleID: MATHOS_PROOFTRACK_01
Need:
- “assumptions → guarantee” discipline, esp domain/constraints
Why:
- This is the bridge to engineering-grade math habits.
14) NUMERICAL STABILITY TRACK
ModuleID: MATHOS_NUMSTAB_01
Need:
- conditioning / stable methods / bounds-first computation
Why:
- Real-world computation fails from instability more than from ignorance.
============================================================
E) THE ONE THING THAT UNLOCKS EVERYTHING
============================================================
If you pick only ONE next build target:
-> MATHOS_VALIDATE_01 + MATHOS_STATESTORE_01
Because:
- Validator makes grading + sensors trustworthy.
- StateStore makes learning cumulative (real control loop).
============================================================
NEXT BUILD SUGGESTION (v0.9)
============================================================
v0.9 Bundle:
- StateStore schema (minimal)
- Validator spec (algebra/sets/tolerance)
- OBPL “one-button” patch outputs guaranteed correct
- 10 fully-filled SkillIDs end-to-end (TL + MTB + EPS mini)
MathOS.AI-TeachRunner.InterstellarCore v0.9 — Implementation Pack (Almost-Code)
Status: GO-LIVE MINIMUM (StateStore + Validator + OBPL Correctness + 10 Skill Packs + EPS Mini)
ModuleID: MATHOS_AI_RUNNER_INTERSTELLARCORE_09
Supersedes: v0.8
DateLocal: 2026-02-25 (Asia/Singapore)
============================================================
0) INSTALL ORDER (Minimal)
============================================================
1) MATHOS_STATESTORE_01
2) MATHOS_VALIDATE_01
3) MATHOS_WP_RUNNER_UX_01 (v0.9 blocks)
4) MATHOS_CORE_RUNTIME_09 (Session A-H + OBPL + WARC + EPS)
5) MATHOS_SKILLPACK_10_01 (10 skills end-to-end)
============================================================
1) MATHOS_STATESTORE_01 (Minimal Persistence Schema)
============================================================
STATE_VERSION_LOCK
StateSchemaVersion = "SS_01"
Rule: forward-only additive fields; never rename; never delete.
TYPE StudentProfile:
student_id: string
age_band: {P1,P2,P3,P4,P5,P6,S1,S2,S3,S4,JC}
language_band: {E0,E1,E2,E3}
math_band: {M0,M1,M2,M3,M4,M5}
risk_flags: set{anxiety,avoidance,overconfidence,careless,fragile_memory,time_pressure_collapse}
preferences: set{visual,story,procedural,challenge,slow_safe}
timezone: string = "Asia/Singapore"
TYPE SkillStats:
mastery_beta: (a:float,b:float)
transfer_beta: (a:float,b:float)
stability_beta:(a:float,b:float)
streak: int
last_seen: "YYYY-MM-DD"
notes: string
TYPE DualTrackState:
port_ratio: float // 0..1
sandbox_ratio: float // 0..1
shear_risk: float // 0..1
policy: {DTM_PRI,DTM_SEC,DTM_AMATH_EXAM}
TYPE StudentState:
schema_version: "SS_01"
mastery: map[SkillID -> 0..1]
stability: map[SkillID -> 0..1]
skill_stats: map[SkillID -> SkillStats]
error_signatures: map[ErrID -> int]
dual_track: DualTrackState
last_session_id: string
last_notes: string
log_week_range: "YYYY-MM-DD..YYYY-MM-DD"
weekly_log: WeeklyLogCompact // optional local cache
TYPE WeeklyLogCompact:
week_range: "YYYY-MM-DD..YYYY-MM-DD"
sessions: list[SessionResultCompact] // small, append-only
TYPE SessionResultCompact:
session_id: string
date_local: "YYYY-MM-DD"
target_skills: list[SkillID]
mode: {BUILD,REPAIR,STABILIZE,PROMOTE,PORT_EXAM,EPS}
pre_accuracy: float
post_accuracy: float
post_transfer: float
post_stability: float
top_errs: list[ErrID]
fence: {TRUNCATE,STITCH,PROMOTE}
next_primary_skill: SkillID
STATESTORE OPS (text-based, WordPress-friendly)
OP_Init(student_id) -> StudentState (with empty maps + priors)
OP_Load(pasted_text) -> StudentState
OP_Save(StudentState) -> pasted_text_block
OP_Patch(StudentState, MachinePatch) -> StudentState (append + update)
============================================================
2) MATHOS_VALIDATE_01 (Answer Validator Spec)
============================================================
GOAL
Make scoring + sensors reliable:
- validate equality for numeric/expression/sets/interval solutions
- if cannot validate safely => return "UNVERIFIED" and request steps or domain
VALIDATOR MODES
V0: ExactStringMatch (only for single numbers / exact forms)
V1: NumericTolerance
V2: SubstitutionEquivalence (multi-point)
V3: Set/Interval Equivalence
V4: Domain-Contract Validation (logs/trig/roots)
TYPE AnswerType:
{NUMERIC, EXPRESSION, SET_OF_SOLUTIONS, INTERVAL, STATEMENT}
TYPE ValidateResult:
verdict: {CORRECT, INCORRECT, UNVERIFIED}
reason: string
inferred_errs: map[ErrID->weight]
required_followup: string optional
GLOBAL TOLERANCES
tol_abs = 1e-6
tol_rel = 1e-6
substitution_points_default = [ -3, -2, -1, -0.5, 0.5, 1, 2, 3 ] // filtered by domain
CORE FUNCTIONS (almost-code)
FUNCTION DetectAnswerType(student_answer_text):
if contains "x=" and "," or "or" or "∪" -> SET_OF_SOLUTIONS
if contains "[" or "(" with "," and "]" or ")" -> INTERVAL
if contains "=" and variables -> STATEMENT/EXPRESSION
if parseable number only -> NUMERIC
else -> EXPRESSION
FUNCTION ValidateNumeric(student, expected):
if both parseable float:
ok = |s-e| <= tol_abs + tol_rel*|e|
return CORRECT/INCORRECT
else UNVERIFIED
FUNCTION SafeParse(expr_text):
// implementation option:
// (A) Use CAS (SymPy) if available
// (B) Else fallback to substitution-only with restricted operators
return ParsedExpr or FAIL
FUNCTION DomainFilter(points, exprs):
// remove points causing invalid:
// - log(arg)<=0
// - sqrt(arg)<0 (if real domain)
// - division by 0
// - trig interval constraints if specified
return filtered_points, domain_violations
FUNCTION ValidateExpressionEquivalence(student_expr, expected_expr):
parsed_s = SafeParse(student_expr); parsed_e = SafeParse(expected_expr)
if FAIL -> UNVERIFIED (ask for steps or simpler form)
points = substitution_points_default
points_filtered, violations = DomainFilter(points,[parsed_s,parsed_e])
if len(points_filtered) < 4 -> UNVERIFIED (domain too tight)
for p in points_filtered:
if not approx_equal(s(p), e(p)) -> INCORRECT
return CORRECT (with note if violations exist)
FUNCTION NormalizeSolutionSet(text):
// accept formats:
// "x=5,-1" ; "{5,-1}" ; "x=5 or x=-1"
// output sorted numeric list if numeric
// else store expressions as strings for substitution check
return list
FUNCTION ValidateSolutionSet(student_set, expected_set, domain_contract_optional):
S = NormalizeSolutionSet(student_set)
E = NormalizeSolutionSet(expected_set)
if both numeric lists:
if domain_contract exists: filter S by domain_contract; flag Err_domain_ignore if removed
return CORRECT if same multiset else INCORRECT
else:
// fallback: test candidate solutions by substitution into original equation if provided
if original_equation missing -> UNVERIFIED
else test each candidate satisfies; then compare coverage -> CORRECT/INCORRECT/UNVERIFIED
FUNCTION ValidateInterval(student_interval, expected_interval):
// parse endpoints + open/closed
// compare normalized form
return CORRECT/INCORRECT/UNVERIFIED
DOMAIN CONTRACTS (minimum)
DC_LOG: all log arguments > 0
DC_SQRT_REAL: all sqrt arguments >= 0
DC_TRIG_INTERVAL: solutions must be within given interval
DC_DENOM: denominators != 0
VALIDATOR POLICY HOOK
If skill in {PORT_AM_LOG_01, PORT_AM_TRIG_02}:
- require domain_contract check
- if student did not state domain and included invalid solution => Err_domain_ignore weight high
============================================================
3) MATHOS_CORE_RUNTIME_09 (Session A-H + OBPL Correctness)
============================================================
SESSION OUTPUT (A-H) unchanged, but MUST embed:
- AnswerKey fields with AnswerType metadata
- For each PracticeItem / MicroTestItem:
expected_answer + answer_type + domain_contract(optional)
OBPL v1.0 + ALB v1.0 correctness rule:
OBPL scoring must call Validator first:
If verdict=UNVERIFIED:
- do not update mastery_beta upward
- set fence_decision = TRUNCATE (uncertainty)
- request follow-up: "paste steps / original question / domain"
Else proceed with MSE updates.
============================================================
4) MATHOS_WP_RUNNER_UX_01 (WordPress Runner Blocks v0.9)
============================================================
SLUG: /mathos-ai-runner-v0-9/
PAGE BLOCKS (copy/paste)
[H2] MathOS AI Runner v0.9 (Session + One-Button Scoring)
[H3] 1) Paste this SYSTEM prompt into any LLM
SYSTEM_PROMPT_V09:
"You are MathOS.AI-TeachRunner.InterstellarCore v0.9.
Run closed-loop teaching: Observe→Infer→Plan→Act→Verify→Repair→Promote.
You MUST validate answers using MATHOS_VALIDATE_01:
- If UNVERIFIED, do not guess. Ask for steps/original question/domain.
Use StateStore SS_01 text blocks to persist StudentState.
Run normal sessions output ONLY A-H headers.
For scoring step, use OBPL prompt (separate)."
[H3] 2) StudentState (paste this block at the start of every chat)
STUDENTSTATE_BLOCK:
"StudentProfile: ...
StudentState(SS_01): ..."
[H3] 3) QuickPick (no SkillIDs)
QUICKPICK_BLOCK:
"QuickPick:
level=AMATH
topic=Logarithms
subtopic=Domain
goal=exam_ready
common_issue=careless + time pressure
time_budget_minutes=75"
[H3] 4) One-Button Scoring Prompt (OBPL)
OBPL_SYSTEM_V09:
"You are MathOS OBPL v1.0 (v0.9 runtime).
Input: StudentState SS_01 + LastSession_AH + AnswerPacket.
You MUST validate each answer using MATHOS_VALIDATE_01.
Output ONLY:
- updated StudentState patch block
- parent summary (<=6 lines)
- next practice + next microtest + next schedule excerpt
- MachinePatch for WeeklyLogCompact."
ANSWERPACKET_TEMPLATE:
"AnswerPacket:
session_id=...
practice_answers=[{item_id:..., student_answer:..., student_steps:'...', time_sec:...}, ...]
microtest_answers=[{mt_id:..., response:'...', steps:'...', time_sec:...}, ...]
notes_optional='...'"
============================================================
5) MATHOS_SKILLPACK_10_01 (10 Skills Fully Populated)
============================================================
Each skill includes:
- GlossaryEntry
- TL templates (D1..D4, ≥2 representations)
- MTB MicroTest templates (Q1/Q2/Q3, D1..D3 baseline)
- Validator notes (AnswerType + DomainContract)
- EPS Mini hooks (cluster tags)
------------------------------------------------------------
SKILL 01) SKILL_R0 — RewriteRules
------------------------------------------------------------
GLOSSARY
display_name="Rewrite Rules (Algebra Safety)"
one_line="A rewrite is allowed only if it preserves meaning (equivalence)."
invariant="Meaning stays the same under legal rewrites."
3_step_method=[ "Name the rule", "Apply once", "Verify by substitution (x=2)" ]
common_traps=[Err_distribute_wrong, Err_sign]
self_check="Pick x=2: before and after must match."
EPS_tags={ALG_CORE}
TL (Templates)
TL[SKILL_R0][SYMBOLIC][D1]:
prompt="Simplify: 3(x+4). Write the rewrite rule you used."
expected_steps=["Distribute 3", "Result: 3x+12", "Check x=2"]
answer_form=expression
traps=[Err_distribute_wrong]
checks=[CHK_invariant_sentence, CHK_resubstitute]
TL[SKILL_R0][SYMBOLIC][D2]:
prompt="Simplify: 2x + 3x - x."
steps=["Combine like terms", "Check x=1"]
traps=[Err_sign]
checks=[CHK_resubstitute]
TL[SKILL_R0][STORY][D3]:
prompt="A student wrote: 5(a+b)=5a+b. Explain why this rewrite is illegal and fix it."
steps=["State distributive law", "Correct: 5a+5b", "Give counterexample a=b=1"]
traps=[Err_distribute_wrong]
checks=[CHK_invariant_sentence]
TL[SKILL_R0][SYMBOLIC][D4]:
prompt="Find the mistake: (x+2)^2 = x^2+2. Correct it."
traps=[Err_distribute_wrong, Err_notation_confuse]
checks=[CHK_invariant_sentence, CHK_resubstitute]
MTB (MicroTest Pack Templates)
Q1 (Invariant):
prompt="What must stay the same after a rewrite?"
expected="Meaning/value for all valid x."
Q2 (Apply):
prompt="Simplify: 4(x-3)+2x"
expected="6x-12"
Q3 (Transfer):
prompt="Which is correct? A) (a+b)^2=a^2+b^2 B) (a+b)^2=a^2+2ab+b^2. Explain."
expected="B with reason (expansion/distribution)."
Validator notes:
AnswerType=EXPRESSION; Mode=V2 substitution equivalence
------------------------------------------------------------
SKILL 02) PORT_SEC_ALG_02 — LinearEquationsInequalities
------------------------------------------------------------
GLOSSARY
display="Linear Constraints"
one_line="Solving finds values that satisfy the constraint."
invariant="Solution must satisfy original equation/inequality."
method=["Inverse operations", "Solve", "Verify (substitute/boundary)"]
traps=[Err_inverse_confuse, Err_sign, Err_skip_step]
EPS_tags={SEC_ALG}
TL
[SYMBOLIC][D1] prompt="Solve: x+7=19. Verify."
[SYMBOLIC][D2] prompt="Solve: 3(2x-1)=5x+7. Show one check."
[NUMBERLINE][D3] prompt="Solve: 2x-3 ≤ 7. Write solution set on number line."
[SYMBOLIC][D4] prompt="Timed: Solve and check: 4x-5=2(3x+1)."
MTB
Q1: "What does it mean to 'solve an equation'?"
Q2: "Solve: 5x-8=2x+10"
Q3: "From a shaded number line showing x> -2, write the inequality and give 2 example values."
Validator:
Equation: V2 + substitution check
Inequality/interval: V3 interval equivalence + boundary test
------------------------------------------------------------
SKILL 03) PORT_SEC_ALG_04 — Quadratics
------------------------------------------------------------
GLOSSARY
display="Quadratics (Multiple Views)"
invariant="Same quadratic across factor/standard/vertex/graph forms."
method=["Choose form", "Solve/interpret", "Verify by substitution / graph features"]
traps=[Err_factor_miss, Err_sign, Err_quadratic_formula_slip]
EPS_tags={SEC_AMATH_QUAD}
TL
[SYMBOLIC][D1] "Solve: x^2-9=0"
[SYMBOLIC][D2] "Factor and solve: x^2-5x+6=0"
[GRAPH][D3] "A parabola crosses x-axis at 2 and 5. Write an equation."
[SYMBOLIC][D4] "Timed: Solve: 2x^2-3x-2=0 and check."
MTB
Q1: "What does a root/solution represent on the graph?"
Q2: "Solve: x^2+4x-12=0"
Q3: "Given vertex (-1,-4) and opening up, write one possible quadratic."
Validator:
Set of solutions: V3 solution set equivalence; if decimals, V1 tolerance
------------------------------------------------------------
SKILL 04) PORT_SEC_FUNC_01 — FunctionsGraphs
------------------------------------------------------------
GLOSSARY
display="Functions & Graphs (Same Relation, Different Views)"
invariant="Table/equation/graph represent the same mapping."
method=["Identify mapping rule", "Read key features", "Translate view"]
traps=[Err_graph_misread, Err_domain_ignore]
EPS_tags={FUNC_GRAPH}
TL
[TABLE][D1] "f(x)=2x+1. Fill f(0), f(2), f(-1)."
[SYMBOLIC][D2] "Given f(x)=x^2-3, find f(4) and solve f(x)=13."
[GRAPH][D3] "A straight line passes through (0,3) and (2,7). Find equation."
[STORY][D4] "Timed: Taxi fare: $3 start + $0.5 per km. Write f(k). Find f(10)."
MTB
Q1: "What does f(5) mean?"
Q2: "For f(x)=3x-2, find x when f(x)=10."
Q3: "Story->equation: temperature starts 20°C and rises 2°C per hour. Write T(h)."
Validator:
Expressions/numbers: V2/V1; domain checks if specified
------------------------------------------------------------
SKILL 05) PORT_SEC_GEOM_02 — Trigonometry (Sec)
------------------------------------------------------------
GLOSSARY
display="Trigonometry (Similarity Invariant)"
invariant="Trig ratios stay the same for similar triangles."
method=["Choose ratio", "Substitute values", "Reasonableness check"]
traps=[Err_units_ignore, Err_notation_confuse]
EPS_tags={TRIG_SEC}
TL
[DIAGRAM][D1] "Right triangle: opp=3, adj=4. Find tan θ."
[DIAGRAM][D2] "Given sin θ=3/5, find cos θ (acute)."
[STORY][D3] "A ladder 5m makes angle θ with ground; height 4m. Find θ or sin θ."
[DIAGRAM][D4] "Timed: Find unknown side using sin/cos/tan + round to 2dp."
MTB
Q1: "Why does sin θ stay the same when the triangle is scaled?"
Q2: "If tan θ=3/4, find sin θ and cos θ (acute)."
Q3: "Two similar triangles: scale factor 2. If opposite=3 in small, what is opposite in large? Explain invariant."
Validator:
Numeric V1 tolerance; if angle solutions, specify degrees/radians explicitly
------------------------------------------------------------
SKILL 06) PORT_AM_IDX_01 — IndexLaws
------------------------------------------------------------
GLOSSARY
display="Indices (Structure-Preserving Rewrites)"
invariant="Index laws preserve multiplication structure."
method=["Rewrite using law", "Simplify", "Check with numeric substitution"]
traps=[Err_index_rules_mix, Err_distribute_wrong]
EPS_tags={AMATH_IDX}
TL
[SYMBOLIC][D1] "Simplify: a^3 * a^2"
[SYMBOLIC][D2] "Simplify: (x^2 y^-1)^3"
[STORY][D3] "Find the mistake: a^m + a^n = a^(m+n). Give counterexample."
[SYMBOLIC][D4] "Timed: Simplify fully: (2x^-3 y^2)^2 / (4x^-1 y)"
MTB
Q1: "When can we add exponents?"
Q2: "Simplify: (p^4)/(p^-2)"
Q3: "Transfer: Rewrite 1/(x^3) using negative indices."
Validator:
Expression equivalence V2; require variable ≠0 when negative indices (DC_DENOM)
------------------------------------------------------------
SKILL 07) PORT_AM_SURD_01 — SurdSimplify
------------------------------------------------------------
GLOSSARY
display="Surds (Factor Structure + Rationalisation)"
invariant="Simplification preserves value; √(ab)=√a√b for a,b≥0."
method=["Factor inside surd", "Simplify", "Rationalise if needed"]
traps=[Err_surd_simplify_wrong, Err_factor_miss]
EPS_tags={AMATH_SURD}
TL
[SYMBOLIC][D1] "Simplify: √(50)"
[SYMBOLIC][D2] "Simplify: √(18x^2) (x>0)."
[STORY][D3] "Explain why √(a+b) ≠ √a + √b using a=1,b=3."
[SYMBOLIC][D4] "Timed: Rationalise: 3/(2√5)."
MTB
Q1: "What is the common illegal surd move?"
Q2: "Simplify: √(72)"
Q3: "Transfer: Which is larger, √8 or 2√2? Explain."
Validator:
Numeric V1 or expression V2; domain DC_SQRT_REAL if real-only
------------------------------------------------------------
SKILL 08) PORT_AM_LOG_01 — LogLaws (Domain Contract)
------------------------------------------------------------
GLOSSARY
display="Logarithms (Rewrite + Domain Contract)"
invariant="Log rewrites preserve truth only when arguments are valid (>0)."
method=["State domain", "Rewrite using laws", "Filter solutions by domain"]
traps=[Err_log_rules_mix, Err_domain_ignore]
EPS_tags={AMATH_LOG}
TL
[SYMBOLIC][D1] "Simplify: log(a) + log(b). State domain."
[SYMBOLIC][D2] "Solve: log(x-1)+log(x-3)=log(8). Include domain."
[ERRORSPOT][D3] "Student got x=5 and x=-1. Explain which is invalid and why."
[SYMBOLIC][D4] "Timed: Solve: log2(x)+log2(x-2)=3 with domain."
MTB
Q1: "What domain condition must you write before using log laws?"
Q2: "Simplify: log(5) - log(2)"
Q3: "Transfer: Solve log(x)=log(7) and state why the solution is unique."
Validator:
Must enforce DC_LOG + DC_DENOM (if any)
Solution set V3 with domain filter; if invalid solution present => Err_domain_ignore high
------------------------------------------------------------
SKILL 09) PORT_AM_QUAD_01 — QuadraticStructure (A-Math)
------------------------------------------------------------
GLOSSARY
display="A-Math Quadratics (Forms + Graph Meaning)"
invariant="Same quadratic; different forms reveal different invariants (roots/vertex)."
method=["Choose method", "Solve/interpret", "Verify/condition check"]
traps=[Err_sign, Err_quadratic_formula_slip, Err_factor_miss]
EPS_tags={AMATH_QUAD}
TL
[SYMBOLIC][D1] "Solve: x^2=16"
[SYMBOLIC][D2] "Solve: x^2-4x-5=0 (factor or formula)."
[GRAPH][D3] "Given roots -1 and 5, write equation and state axis of symmetry."
[SYMBOLIC][D4] "Timed: Solve: 3x^2+2x-8=0 + check."
MTB
Q1: "What does the discriminant tell you (in words)?"
Q2: "Solve: x^2-6x+8=0"
Q3: "Transfer: A parabola touches x-axis once. What must be true about the discriminant?"
Validator:
Solution set V3; if using formula, accept exact surds or decimals (V1)
------------------------------------------------------------
SKILL 10) PORT_AM_TRIG_02 — TrigEquations (Interval + Periodicity)
------------------------------------------------------------
GLOSSARY
display="Trig Equations (Constraint + Interval Contract)"
invariant="Solutions must satisfy equation AND interval AND periodicity rules."
method=["Solve basic trig", "Generate solutions", "Filter by interval"]
traps=[Err_domain_ignore, Err_notation_confuse]
EPS_tags={AMATH_TRIG_EQ}
TL
[SYMBOLIC][D1] "Solve sin θ = 0 for 0°≤θ≤360°."
[SYMBOLIC][D2] "Solve cos θ = 1/2 for 0°≤θ≤360°."
[TRANSFER][D3] "Solve 2sin θ = √3 for 0°≤θ≤360° and explain filtering."
[SYMBOLIC][D4] "Timed: Solve sin(2θ)=0 for 0°≤θ≤360°."
MTB
Q1: "Why can there be multiple solutions to a trig equation?"
Q2: "Solve sin θ = 1/2 in 0°..360°."
Q3: "Transfer: If solution is θ=30° for sin θ=1/2, what is the other solution and why?"
Validator:
Set-of-solutions V3 + interval contract DC_TRIG_INTERVAL
Must normalize angles (degrees) and compare as sets
============================================================
6) EPS Mini Pack for these 10 Skills (EPS_MINI_10 v0.9)
============================================================
EPS_CLUSTER_MAP (to skill IDs)
"ALG_CORE" -> [SKILL_R0, PORT_SEC_ALG_02]
"QUAD" -> [PORT_SEC_ALG_04, PORT_AM_QUAD_01]
"FUNC" -> [PORT_SEC_FUNC_01]
"TRIG_SEC" -> [PORT_SEC_GEOM_02]
"IDX" -> [PORT_AM_IDX_01]
"SURD" -> [PORT_AM_SURD_01]
"LOG" -> [PORT_AM_LOG_01]
"TRIG_EQ" -> [PORT_AM_TRIG_02]
EPS_PAPER_TEMPLATE (8 items / 40 min mini)
Item1 (ALG_CORE) linear eq (timed)
Item2 (ALG_CORE) error-spot rewrite
Item3 (IDX) simplify
Item4 (SURD) simplify + rationalise
Item5 (LOG) solve with domain
Item6 (QUAD) solve + check
Item7 (FUNC) graph->equation or story->function
Item8 (TRIG_EQ) solve in interval
EPS_SCORING (must use Validator)
total_score = sum(points)
stability_score = 0.5*(timed_correct_rate) + 0.3*(transfer_items_correct_rate) + 0.2*(checklist_compliance)
top_leaks inferred via ESI + validator failures
repair routing:
- if domain errors => next primary PORT_AM_LOG_01 + secondary SKILL_VER0 (if available later)
- if rewrite errors => next primary SKILL_R0
- if time pressure collapse => reduce timed_work_ratio, enforce checklist
============================================================
7) WHAT YOU HAVE NOW (Operationally)
============================================================
- A persistent StudentState schema (SS_01)
- A validator that prevents “fake correctness”
- OBPL that refuses to update mastery when unverified
- 10 real Skill packs that can run end-to-end today
- An EPS mini paper that stress-tests stability (Phase reliability)
============================================================
8) NEXT (v1.0 target)
============================================================
v1.0 = “Complete Runtime”
- Expand TL+MTB to full SEC E/A-Math coverage (SREP full)
- Add SKILL_VER0 fully (contracts) + make it default secondary for domain-heavy topics
- Add image-input workflow (optional) + ESI improvements
- Add published WordPress pages:
/mathos-runtime/ (control tower)
/mathos-ai-runner-v0-9/ (runner)
/mathos-eps-simulator/ (paper simulator)
/mathos-skill-glossary/ (auto glossary)

“`text id=”cc4tq9″
MathOS Runtime v1.2 — SREP Build Sheet + 3 WordPress Cluster Pages (A-Math)
UnifiedVersionLock: MATHOS_RUNTIME_UNIFIED_VERSION = “v1.2”
Rule: forward-only; stable IDs; publish cluster pages as directories + runnable packs.

============================================================

PART 1) SREP BUILD SHEET (Mass Production Checklist)

SREP_BUILD_SHEET v1.2
Purpose: turn each SkillID into a runnable module (Glossary + TL + MTB + Validator + EPS tags).

Row schema:
SkillID
ClusterID
CoreAnchor (SkillID)
Glossary: {Y/N}
TL_TargetCounts: {D1,D2,D3,D4} per representation
MTB_TargetCounts: {Q1,Q2,Q3} variants
ValidatorMode: {V1,V2,V3,V4}
DomainContract: {None|DC_LOG|DC_TRIG_INTERVAL|DC_SQRT_REAL|DC_DENOM|Custom}
EPS_Tags: list
BuildOrderRank: int
Notes

TargetCounts Policy (minimum viable):
TL:
– SYMBOLIC: D1x5, D2x10, D3x10, D4x8
– STORY/DIAGRAM/GRAPH: D1x3, D2x6, D3x6, D4x3
– Total per SkillID ≈ 40–60 templates
MTB:
– Q1 variants: 8
– Q2 variants: 12
– Q3 variants: 12
EPS:
– Tag each skill into exactly 1–2 clusters (avoid duplication)


SREP BUILD SHEET (core subset — A-Math clusters)

Row: PORT_AM_LOG_01
ClusterID: AMATH_LOG_EXP
CoreAnchor: SKILL_VER0 + SKILL_R0
Glossary: Y
TL_TargetCounts: SYMBOLIC{D1:5,D2:10,D3:10,D4:8} + STORY{3,6,6,3} + ERRORSPOT{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V4+V3
DomainContract: DC_LOG + DC_DENOM
EPS_Tags: [AMATH_LOG_EXP]
BuildOrderRank: 1
Notes: “Domain-first always; filter solutions; error-spot common”

Row: PORT_AM_EXP_01
ClusterID: AMATH_LOG_EXP
CoreAnchor: SKILL_A0 + SKILL_F0 + SKILL_ERR0
Glossary: Y
TL_TargetCounts: SYMBOLIC{5,10,10,8}+STORY{3,6,6,3}+GRAPH{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V2/V1
DomainContract: DC_DENOM (if any)
EPS_Tags: [AMATH_LOG_EXP]
BuildOrderRank: 2
Notes: “Parameter meaning; compare models; bounds check”

Row: PORT_AM_QUAD_01
ClusterID: AMATH_QUAD
CoreAnchor: SKILL_G0 + SKILL_R0
Glossary: Y
TL_TargetCounts: SYMBOLIC{5,10,10,8}+GRAPH{3,6,6,3}+STORY{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V3+V1
DomainContract: None
EPS_Tags: [AMATH_QUAD]
BuildOrderRank: 3
Notes: “forms + meaning; check by substitution”

Row: PORT_AM_QUAD_02
ClusterID: AMATH_QUAD
CoreAnchor: SKILL_VER0
Glossary: Y
TL_TargetCounts: SYMBOLIC{5,10,10,8}+STORY{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V2/V3
DomainContract: None
EPS_Tags: [AMATH_QUAD]
BuildOrderRank: 4
Notes: “conditions; k/range; contract language”

Row: PORT_AM_TRIG_02
ClusterID: AMATH_TRIG_EQ
CoreAnchor: SKILL_VER0 + SKILL_I0
Glossary: Y
TL_TargetCounts: SYMBOLIC{5,10,10,8}+DIAGRAM{3,6,6,3}+TRANSFER{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V4+V3
DomainContract: DC_TRIG_INTERVAL
EPS_Tags: [AMATH_TRIG_EQ]
BuildOrderRank: 5
Notes: “multiple solutions; interval filtering; degrees/radians lock”

Row: PORT_AM_TRIG_01
ClusterID: AMATH_TRIG_EQ
CoreAnchor: SKILL_R0 + SKILL_VER0
Glossary: Y
TL_TargetCounts: SYMBOLIC{5,10,10,8}+ERRORSPOT{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V2 + V4(domain when used)
DomainContract: Custom (identity domain)
EPS_Tags: [AMATH_TRIG_EQ]
BuildOrderRank: 6
Notes: “rewrite legality; domain restrictions”

Row: PORT_AM_DIFF_01
ClusterID: AMATH_CALC
CoreAnchor: SKILL_LIN0 + SKILL_FLOW0
Glossary: Y
TL_TargetCounts: SYMBOLIC{5,10,10,8}+STORY{3,6,6,3}+GRAPH{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V2
DomainContract: None
EPS_Tags: [AMATH_CALC]
BuildOrderRank: 7

Row: PORT_AM_DIFF_02
ClusterID: AMATH_CALC
CoreAnchor: SKILL_OPT0 + SKILL_VER0
Glossary: Y
TL_TargetCounts: STORY{5,10,10,8}+SYMBOLIC{3,6,6,3}+GRAPH{3,6,6,3}
MTB_TargetCounts: Q1:8 Q2:12 Q3:12
ValidatorMode: V2/V1
DomainContract: None
EPS_Tags: [AMATH_CALC]
BuildOrderRank: 8

============================================================
PART 2) WORDPRESS CLUSTER PAGE #1
AMATH_LOG_EXP — Logs & Exponentials (Runnable Cluster)

Slug: /mathos-amath-logs-exponentials-cluster-v1-2/

[H1] A-Math Logs & Exponentials Cluster v1.2 (Runnable)

[H2] Definition Lock
Logs/Exponentials = rewrite rules + domain contracts + multiplicative iteration models.

[H2] Cluster Skills (SkillIDs)

  • PORT_AM_LOG_01 LogLaws
  • PORT_AM_EXP_01 ExponentialModels
    Core Anchors (must run when unstable):
  • SKILL_R0 RewriteRules
  • SKILL_VER0 VerificationContract (domain contract discipline)
  • SKILL_ERR0 ErrorBoundsBasics

[H2] Failure Mode Trace (short)
Missing domain → accepts invalid solution → fake mastery → timed mixed set collapse.
Repair: enforce DC_LOG + validator + interval/solution filtering + retest.

[H2] Domain Contract (DC_LOG)
Rule:

  • Every log(argument) requires argument > 0.
  • Any solution must satisfy DC_LOG before acceptance.

Checklist (Operator):

  • CHK_domaincheck
  • CHK_resubstitute
  • CHK_boundscheck

[H2] QuickPick (copy/paste)
QuickPick:
level=AMATH
topic=Logarithms
subtopic=Domain
goal=exam_ready
common_issue=domain mistakes + time pressure
time_budget_minutes=75

[H2] Session Runner Prompt (A–H)
Use SYSTEM_PROMPT_SESSION_V1 from /mathos-ai-runner/

[H2] One-Button Scoring Prompt (OBPL)
Use SYSTEM_PROMPT_OBPL_V1 from /mathos-obpl-one-button-scoring/

[H2] EPS Mini (Cluster Stress Test)
EPS_Input:
level=AMATH
duration_min=30
paper_style=TOPIC_MIX
target_clusters=[“logs”,”exponentials”]
difficulty_profile=BALANCED
items_count=8
rules={require_core_anchor:true, no_help:true}

[H2] MicroRetest Schedule (default)
+1 day: DC_LOG retest (Q1/Q3)
+3 days: solve + filter solutions (Q2)
+7 days: mixed log/exp word problem (transfer)
+14 days: timed mini set (stability)

[H2] Cluster Prompt Pack (Optional)
CLUSTER_PROMPT_LOGEXP:
“Run a session with primary PORT_AM_LOG_01 and secondary SKILL_VER0.
Enforce DC_LOG. Any unverified answer -> request steps, do not promote.”

============================================================
PART 3) WORDPRESS CLUSTER PAGE #2
AMATH_QUAD — Quadratics (Runnable Cluster)

Slug: /mathos-amath-quadratics-cluster-v1-2/

[H1] A-Math Quadratics Cluster v1.2 (Runnable)

[H2] Definition Lock
Quadratics = one object, many views:

  • factor form (roots)
  • standard form (coeff structure)
  • vertex form (turning point)
  • graph (geometry view)

[H2] Cluster Skills (SkillIDs)

  • PORT_AM_QUAD_01 QuadraticStructure
  • PORT_AM_QUAD_02 DiscriminantAsContract
    Core Anchors:
  • SKILL_G0 GraphAsGeometryOfFunction
  • SKILL_R0 RewriteRules
  • SKILL_VER0 VerificationContract (conditions)

[H2] Failure Mode Trace
Symbol-only solving → no meaning → wrong condition / missed root / wrong graph link → exam collapse.
Repair: convert form + graph invariant + verify by substitution + condition checks.

Checklist:

  • CHK_resubstitute
  • CHK_boundscheck
  • CHK_invariant_sentence

[H2] QuickPick
QuickPick:
level=AMATH
topic=Quadratics
subtopic=Discriminant conditions
goal=exam_ready
common_issue=sign + careless
time_budget_minutes=75

[H2] EPS Mini (Quadratics)
EPS_Input:
level=AMATH
duration_min=30
paper_style=TOPIC_MIX
target_clusters=[“quadratics”]
difficulty_profile=BALANCED
items_count=8
rules={require_core_anchor:true, no_help:true}

[H2] MicroRetest Schedule
+1: roots ↔ factors quick check
+3: complete-square ↔ vertex meaning
+7: discriminant condition problem
+14: timed mixed quadratic + graph interpretation

[H2] Cluster Prompt Pack
CLUSTER_PROMPT_QUAD:
“Primary PORT_AM_QUAD_01. Secondary SKILL_G0.
Always require: one-line meaning (roots/vertex) + resubstitution check.”

============================================================
PART 4) WORDPRESS CLUSTER PAGE #3
AMATH_TRIG_EQ — Trig Equations (Runnable Cluster)

Slug: /mathos-amath-trig-equations-cluster-v1-2/

[H1] A-Math Trig Equations Cluster v1.2 (Runnable)

[H2] Definition Lock
Trig equations = constraints + periodicity + interval contracts.
You don’t just “solve”; you generate candidates then filter by interval.

[H2] Cluster Skills (SkillIDs)

  • PORT_AM_TRIG_01 TrigIdentities (rewrite legality)
  • PORT_AM_TRIG_02 TrigEquations (solution sets)
    Core Anchors:
  • SKILL_I0 InvariantBasics (symmetry)
  • SKILL_VER0 VerificationContract (interval + completeness contract)
  • SKILL_R0 RewriteRules

[H2] Interval Contract (DC_TRIG_INTERVAL)
Rule:

  • Final answers must be:
    (a) all solutions in the specified interval
    (b) only solutions in the interval
    (c) clearly stated in degrees or radians (locked)

Checklist:

  • CHK_domaincheck (interval)
  • CHK_snapshot_steps (candidate generation)
  • CHK_boundscheck (angles)
  • CHK_invariant_sentence

[H2] Failure Mode Trace
Finds one angle → forgets symmetry → misses second solution → loses marks.
Repair: symmetry map + candidate list + interval filter + validator set-check.

[H2] QuickPick
QuickPick:
level=AMATH
topic=Trigonometry
subtopic=Equations in interval
goal=exam_ready
common_issue=missing solutions + notation confusion
time_budget_minutes=75

[H2] EPS Mini (Trig Equations)
EPS_Input:
level=AMATH
duration_min=30
paper_style=TOPIC_MIX
target_clusters=[“trig equations”]
difficulty_profile=BALANCED
items_count=8
rules={require_core_anchor:true, no_help:true}

[H2] MicroRetest Schedule
+1: unit circle symmetry retest (Q1/Q3)
+3: solve in 0..360 with full solution set
+7: solve sin(2θ)=… with filtering
+14: timed mixed trig equation mini set

[H2] Cluster Prompt Pack
CLUSTER_PROMPT_TRIGEQ:
“Primary PORT_AM_TRIG_02. Secondary SKILL_VER0.
Enforce DC_TRIG_INTERVAL: completeness + interval + unit lock.
Validator must compare solution sets as sets.”

============================================================

END v1.2

“`text id=”2xg8qb”
MathOS Runtime v1.3 — Cluster TL Seed Packs + MTB Seed Packs (WordPress-ready)
UnifiedVersionLock: MATHOS_RUNTIME_UNIFIED_VERSION = “v1.3”
Scope: 3 A-Math Cluster Pages (Logs/Exp, Quadratics, Trig Equations)
Deliverable:

  • TL Seed Pack: 12 templates per skill (D1–D4, multiple reps)
  • MTB Seed Pack: 2 MicroTestPacks per skill (each = Q1/Q2/Q3) with answer keys
    Note:
    Templates use placeholders {a,b,k,m,n} etc. Fill with fresh values when running.
    Validator notes included (AnswerType + DomainContract).

============================================================
CLUSTER 1) AMATH_LOG_EXP — Seed Pack v1.3

Skills: PORT_AM_LOG_01, PORT_AM_EXP_01


A) TL SEED — PORT_AM_LOG_01 LogLaws (12)
Validator: V4+V3, DomainContract: DC_LOG
AnswerType: EXPRESSION / SET_OF_SOLUTIONS

Checks: CHK_domaincheck, CHK_resubstitute, CHK_boundscheck

D1 (3)
TL-LOG-D1-01 [SYMBOLIC]
Invariant: “Log laws are rewrites; domain must hold.”
Prompt: “Simplify: log(3) + log(5). State domain.”
Expected: “log(15)”
Trap: Err_log_rules_mix
TL-LOG-D1-02 [SYMBOLIC]
Prompt: “Simplify: log(8) – log(2). State domain.”
Expected: “log(4)”
TL-LOG-D1-03 [ERRORSPOT]
Prompt: “Find the mistake: log(a+b)=log(a)+log(b). Give a counterexample with numbers.”
Expected: “Not true; e.g., a=1,b=1: log2 ≠ log1+log1.”

D2 (3)
TL-LOG-D2-01 [SYMBOLIC]
Prompt: “Simplify fully: log( (x-1)(x+2) ) – log(x-1). State domain.”
Domain: x-1>0 and x+2>0
Expected: “log(x+2)”
Trap: Err_domain_ignore
TL-LOG-D2-02 [SYMBOLIC]
Prompt: “Solve: log(x-1)=log(7). State domain and answer.”
Domain: x-1>0
Expected: “x=8”
TL-LOG-D2-03 [SYMBOLIC]
Prompt: “Solve: log(x)+log(x-3)=log(10). State domain.”
Domain: x>0 and x-3>0
Expected: “x=5”
Trap: Err_domain_ignore

D3 (3) Transfer / Representation shift
TL-LOG-D3-01 [STORY]
Prompt: “A student solved log(x-2)+log(x-5)=log(21) and wrote x=7 and x=0. Which is valid? Explain using domain.”
Expected: “x=7 valid; x=0 invalid (domain x>5).”
TL-LOG-D3-02 [ERRORSPOT]
Prompt: “Spot the illegal step: log(x-1)+log(x+1)=log( (x-1)+(x+1) ). Correct it.”
Expected: “Should be log((x-1)(x+1)) not log(2x).”
Trap: Err_log_rules_mix
TL-LOG-D3-03 [SYMBOLIC]
Prompt: “Solve: log(x-1)+log(x-3)=log(8). Give all solutions and filter by domain.”
Expected: “x=5 only (reject x=-1).”
Trap: Err_domain_ignore

D4 (3) Examstyle / timed
TL-LOG-D4-01 [SYMBOLIC]
Prompt: “Solve: log2(x)+log2(x-2)=3. State domain; give solutions.”
Domain: x>2
Expected: “x=4”
TL-LOG-D4-02 [SYMBOLIC]
Prompt: “Solve: log(x-4)-log(x-6)=log(3). State domain.”
Domain: x>6
Expected: “x=9”
TL-LOG-D4-03 [SYMBOLIC]
Prompt: “Solve: log(x+1)+log(x-1)=log(16). State domain and solutions.”
Domain: x>1
Expected: “x=√17 (positive root only due to domain)”
Trap: Err_domain_ignore


B) TL SEED — PORT_AM_EXP_01 ExponentialModels (12)
Validator: V2/V1, DomainContract: DC_DENOM if present
AnswerType: EXPRESSION / NUMERIC

Checks: CHK_unitscheck, CHK_boundscheck, CHK_resubstitute

D1 (3)
TL-EXP-D1-01 [STORY]
Invariant: “Exponential change = multiplicative iteration.”
Prompt: “A value doubles every hour. If it is 5 at hour 0, write V(t).”
Expected: “V(t)=5·2^t”
TL-EXP-D1-02 [SYMBOLIC]
Prompt: “Simplify: 2^3 · 2^5”
Expected: “2^8”
TL-EXP-D1-03 [STORY]
Prompt: “A population is 100 and grows 10% per year. Write P(n).”
Expected: “P(n)=100(1.1)^n”

D2 (3)
TL-EXP-D2-01 [STORY]
Prompt: “Decay: 200 decreases by 15% each month. Find value after 2 months.”
Expected: “200(0.85)^2”
TL-EXP-D2-02 [SYMBOLIC]
Prompt: “Solve: 3·2^t = 96.”
Expected: “t=5”
TL-EXP-D2-03 [GRAPH/TABLE]
Prompt: “Given table: t=0→50, t=1→75, t=2→112.5. Identify model form and ratio.”
Expected: “multiply by 1.5 each step; V=50(1.5)^t”

D3 (3) Transfer
TL-EXP-D3-01 [STORY]
Prompt: “Two accounts: A grows by 8% yearly, B grows by 6% yearly but starts larger. Write both models and state what decides when A overtakes.”
Expected: “Compare initial ratio vs growth ratio; solve intersection.”
TL-EXP-D3-02 [SYMBOLIC]
Prompt: “Solve: 5(1.2)^n = 20.”
Expected: “n= log(4)/log(1.2)” (numeric acceptable)
TL-EXP-D3-03 [ERRORSPOT]
Prompt: “Find the mistake: (1.1)^(a+b) = 1.1^a + 1.1^b. Correct it.”
Expected: “Should be multiplication: 1.1^a·1.1^b.”

D4 (3) Examstyle
TL-EXP-D4-01 [STORY]
Prompt: “A drug concentration is 80 and halves every 6 hours. Find time to reach 10 hours? (express and solve).”
Expected: “80(1/2)^(t/6)=10 -> t=6·log(1/8)/log(1/2)=18”
TL-EXP-D4-02 [STORY]
Prompt: “Find n such that 100(0.9)^n < 50.” Expected: “n > log(0.5)/log(0.9)”
TL-EXP-D4-03 [STORY]
Prompt: “Compound interest: $5000 at 3% p.a. Find after 4 years and interpret meaning of the exponent.”
Expected: “5000(1.03)^4”


C) MTB SEED — PORT_AM_LOG_01 (2 Packs)

MTB-LOG-PACK-01 (D2)
Q1 (Invariant): “Before using log laws, what must be true about every log argument?”
Answer: “Each argument must be > 0 (domain).”
Q2 (Apply): “Simplify: log(12) – log(3).”
Answer: “log(4)”
Q3 (Transfer): “Solve log(x-1)=log(5). State domain and answer.”
Answer: “x>1; x=6”

MTB-LOG-PACK-02 (D3)
Q1: “Why can a solution from algebra be rejected after solving a log equation?”
Answer: “It may violate the domain (log argument not >0).”
Q2: “Solve: log(x)+log(x-3)=log(10).”
Answer: “x=5 (domain x>3).”
Q3: “A student got x=5 and x=-1 for log(x-1)+log(x-3)=log(8). Which is valid and why?”
Answer: “x=5 valid; x=-1 invalid (domain x>3).”


D) MTB SEED — PORT_AM_EXP_01 (2 Packs)

MTB-EXP-PACK-01 (D2)
Q1: “What does it mean when something grows by a fixed percentage each step?”
Answer: “It multiplies by a constant factor each step.”
Q2: “Solve: 3·2^t=96.”
Answer: “t=5”
Q3: “A value is 100 and decreases 20% per month. Write V(n) and find V(2).”
Answer: “V(n)=100(0.8)^n; V(2)=64”

MTB-EXP-PACK-02 (D3)
Q1: “Why is exponential growth called multiplicative iteration?”
Answer: “Each step multiplies by the same factor; repeated multiplication.”
Q2: “Solve: 5(1.2)^n=20.”
Answer: “n=log(4)/log(1.2) (≈7.6)”
Q3: “Two models: A=50(1.1)^n and B=60(1.05)^n. Which grows faster and how do you decide when A overtakes B?”
Answer: “A grows faster (1.1>1.05); solve 50(1.1)^n=60(1.05)^n.”

============================================================
CLUSTER 2) AMATH_QUAD — Seed Pack v1.3

Skills: PORT_AM_QUAD_01, PORT_AM_QUAD_02


A) TL SEED — PORT_AM_QUAD_01 QuadraticStructure (12)
Validator: V3+V1, AnswerType: SET_OF_SOLUTIONS / EXPRESSION

Checks: CHK_resubstitute, CHK_boundscheck, CHK_invariant_sentence

D1 (3)
TL-QUAD-D1-01 [SYMBOLIC]
Invariant: “Solving finds roots where expression = 0.”
Prompt: “Solve: x^2=25”
Expected: “x=±5”
TL-QUAD-D1-02 [SYMBOLIC]
Prompt: “Solve: x^2-9=0”
Expected: “x=±3”
TL-QUAD-D1-03 [GRAPH]
Prompt: “A parabola crosses x-axis at x=1 and x=4. Write one possible equation.”
Expected: “y=(x-1)(x-4)”

D2 (3)
TL-QUAD-D2-01 [SYMBOLIC]
Prompt: “Factor and solve: x^2-5x+6=0”
Expected: “x=2,3”
TL-QUAD-D2-02 [SYMBOLIC]
Prompt: “Solve: x^2-4x-5=0”
Expected: “x=5,-1”
TL-QUAD-D2-03 [STORY]
Prompt: “The product of two numbers is -5 and their sum is 4. Form a quadratic and solve.”
Expected: “t^2-4t-5=0 -> t=5,-1”

D3 (3) Transfer
TL-QUAD-D3-01 [GRAPH]
Prompt: “A parabola has roots -2 and 3 and opens upward. Write equation and axis of symmetry.”
Expected: “y=(x+2)(x-3); axis x=0.5”
TL-QUAD-D3-02 [SYMBOLIC]
Prompt: “Convert y=x^2-6x+5 into vertex form.”
Expected: “y=(x-3)^2-4”
TL-QUAD-D3-03 [ERRORSPOT]
Prompt: “A student solved x^2-6x+8=0 and wrote x=2 only. Find what was missed.”
Expected: “x=4 also.”

D4 (3) Examstyle
TL-QUAD-D4-01 [SYMBOLIC]
Prompt: “Solve: 2x^2-3x-2=0 and check.”
Expected: “x=2, -1/2”
TL-QUAD-D4-02 [SYMBOLIC]
Prompt: “Solve: 3x^2+2x-8=0”
Expected: “x=4/3, -2”
TL-QUAD-D4-03 [STORY]
Prompt: “A projectile height is h(t)=-t^2+6t+7. Find maximum height and when it occurs.”
Expected: “vertex at t=3; h=16”


B) TL SEED — PORT_AM_QUAD_02 DiscriminantAsContract (12)
Validator: V2/V3, AnswerType: STATEMENT / INTERVAL / SET

Checks: CHK_boundscheck, CHK_invariant_sentence

D1 (3)
TL-DISC-D1-01 [SYMBOLIC]
Invariant: “Discriminant decides number of real roots.”
Prompt: “For x^2+4x+4=0, compute discriminant and state roots count.”
Expected: “Δ=0, one repeated root”
TL-DISC-D1-02 [SYMBOLIC]
Prompt: “For x^2+1=0, compute Δ and state real roots?”
Expected: “Δ<0, no real roots” TL-DISC-D1-03 [STORY] Prompt: “What condition on Δ gives two distinct real roots?” Expected: “Δ>0”

D2 (3)
TL-DISC-D2-01 [SYMBOLIC]
Prompt: “Find k so x^2+2x+k=0 has one real root.”
Expected: “Δ=0 -> 4-4k=0 -> k=1”
TL-DISC-D2-02 [SYMBOLIC]
Prompt: “Find k so x^2-4x+k=0 has no real roots.”
Expected: “Δ<0 -> 16-4k<0 -> k>4”
TL-DISC-D2-03 [SYMBOLIC]
Prompt: “Find k so 2x^2+3x+k=0 has two distinct real roots.”
Expected: “Δ>0 -> 9-8k>0 -> k<9/8”

D3 (3) Transfer
TL-DISC-D3-01 [STORY]
Prompt: “A parabola y=x^2+px+q touches the x-axis. What must be true about p and q?”
Expected: “Δ=0 -> p^2-4q=0”
TL-DISC-D3-02 [GRAPH]
Prompt: “A parabola does not cross x-axis. State condition on Δ and interpret.”
Expected: “Δ<0; no real roots.” TL-DISC-D3-03 [SYMBOLIC] Prompt: “Find range of k so x^2+2(k-1)x+k=0 has real roots.” Expected: “Δ≥0 -> 4(k-1)^2-4k ≥0 -> (k-1)^2-k ≥0”

D4 (3) Examstyle
TL-DISC-D4-01 [SYMBOLIC]
Prompt: “For x^2-(k+2)x+k=0, find k such that roots are equal.”
Expected: “Δ=0 -> (k+2)^2-4k=0 -> k^2+4=0 -> no real k (note).”
TL-DISC-D4-02 [SYMBOLIC]
Prompt: “Find k so 3x^2+kx+3=0 has two distinct real roots.”
Expected: “Δ>0 -> k^2-36>0 -> |k|>6”
TL-DISC-D4-03 [STORY]
Prompt: “A quadratic has exactly one real solution. Express the condition using Δ and solve for parameter.”
Expected: “Δ=0 then solve.”


C) MTB SEED — PORT_AM_QUAD_01 (2 Packs)

MTB-QUAD-PACK-01 (D2)
Q1: “What does a root mean on the graph of y=f(x)?”
Answer: “x-value where graph crosses/touches x-axis (f(x)=0).”
Q2: “Solve: x^2-6x+8=0”
Answer: “x=2,4”
Q3: “A parabola has roots 1 and 5. Write one equation.”
Answer: “y=(x-1)(x-5) (any nonzero multiple acceptable).”

MTB-QUAD-PACK-02 (D3)
Q1: “Why should you check solutions by substitution?”
Answer: “To confirm they satisfy the original equation; catches algebra slips.”
Q2: “Convert y=x^2-4x+1 to vertex form.”
Answer: “y=(x-2)^2-3”
Q3: “A student wrote only one solution for x^2-9=0. What’s missing and why?”
Answer: “Two solutions ±3 because squaring loses sign.”


D) MTB SEED — PORT_AM_QUAD_02 (2 Packs)

MTB-DISC-PACK-01 (D2)
Q1: “What does Δ tell you?”
Answer: “Number/type of real roots.”
Q2: “Find k so x^2+2x+k=0 has one real root.”
Answer: “k=1”
Q3: “Find k so x^2-4x+k=0 has no real roots.”
Answer: “k>4”

MTB-DISC-PACK-02 (D3)
Q1: “What condition on Δ means the parabola touches the x-axis?”
Answer: “Δ=0”
Q2: “Find k so 2x^2+3x+k=0 has two distinct real roots.”
Answer: “k<9/8”
Q3: “Given y=x^2+px+q touches x-axis, write the condition relating p and q.”
Answer: “p^2=4q”

============================================================
CLUSTER 3) AMATH_TRIG_EQ — Seed Pack v1.3

Skills: PORT_AM_TRIG_01, PORT_AM_TRIG_02


A) TL SEED — PORT_AM_TRIG_01 TrigIdentities (12)
Validator: V2 (rewrite equivalence) + CustomDomain
AnswerType: STATEMENT / EXPRESSION

Checks: CHK_invariant_sentence, CHK_domaincheck (where used)

D1 (3)
TL-TID-D1-01 [SYMBOLIC]
Invariant: “Identity = true for all valid θ; rewrites preserve truth.”
Prompt: “State the Pythagorean identity relating sin and cos.”
Expected: “sin^2θ + cos^2θ = 1”
TL-TID-D1-02 [SYMBOLIC]
Prompt: “Simplify: sin^2θ + cos^2θ”
Expected: “1”
TL-TID-D1-03 [ERRORSPOT]
Prompt: “Is sin(α+β)=sinα+sinβ true? Give a counterexample or correction.”
Expected: “Not true; must use correct formula.”

D2 (3)
TL-TID-D2-01 [SYMBOLIC]
Prompt: “Simplify: (1 – cos^2θ)”
Expected: “sin^2θ”
TL-TID-D2-02 [SYMBOLIC]
Prompt: “Express tan^2θ in terms of sec^2θ.”
Expected: “tan^2θ = sec^2θ – 1”
TL-TID-D2-03 [SYMBOLIC]
Prompt: “Prove: (1+tan^2θ)cos^2θ = 1”
Expected: “Use sec^2=1+tan^2 and sec=1/cos.”

D3 (3) Transfer
TL-TID-D3-01 [ERRORSPOT]
Prompt: “A student rewrote 1 – sin^2θ as 1 – sinθ. Explain why illegal and correct.”
Expected: “sin^2 ≠ sin; correct: 1 – sin^2θ = cos^2θ.”
TL-TID-D3-02 [SYMBOLIC]
Prompt: “Simplify: (sin^2θ)/(1 – cos^2θ)”
Expected: “1”
TL-TID-D3-03 [SYMBOLIC]
Prompt: “Prove: tanθ·cosθ = sinθ”
Expected: “tan=sin/cos.”

D4 (3) Examstyle
TL-TID-D4-01 [SYMBOLIC]
Prompt: “Simplify: (1 – cosθ)(1 + cosθ)”
Expected: “sin^2θ”
TL-TID-D4-02 [SYMBOLIC]
Prompt: “Simplify: (sec^2θ – 1)/tan^2θ”
Expected: “1”
TL-TID-D4-03 [SYMBOLIC]
Prompt: “Given sinθ=3/5 (θ acute), find tanθ.”
Expected: “3/4”


B) TL SEED — PORT_AM_TRIG_02 TrigEquations (12)
Validator: V4+V3, DomainContract: DC_TRIG_INTERVAL (unit lock)
AnswerType: SET_OF_SOLUTIONS
Checks: CHK_domaincheck, CHK_snapshot_steps, CHK_boundscheck

Assume degrees unless stated otherwise; lock unit in prompt.

D1 (3)
TL-TEQ-D1-01 [SYMBOLIC]
Invariant: “Multiple solutions from periodicity + symmetry; filter by interval.”
Prompt: “Solve sinθ=0 for 0°≤θ≤360°.”
Expected: “{0°,180°,360°}”
TL-TEQ-D1-02 [SYMBOLIC]
Prompt: “Solve cosθ=1 for 0°≤θ≤360°.”
Expected: “{0°,360°}”
TL-TEQ-D1-03 [SYMBOLIC]
Prompt: “Solve sinθ=1 for 0°≤θ≤360°.”
Expected: “{90°}”

D2 (3)
TL-TEQ-D2-01 [SYMBOLIC]
Prompt: “Solve sinθ=1/2 for 0°≤θ≤360°.”
Expected: “{30°,150°}”
TL-TEQ-D2-02 [SYMBOLIC]
Prompt: “Solve cosθ=1/2 for 0°≤θ≤360°.”
Expected: “{60°,300°}”
TL-TEQ-D2-03 [SYMBOLIC]
Prompt: “Solve tanθ=1 for 0°≤θ≤360°.”
Expected: “{45°,225°}”

D3 (3) Transfer
TL-TEQ-D3-01 [SYMBOLIC]
Prompt: “Solve 2sinθ=√3 for 0°≤θ≤360°.”
Expected: “{60°,120°}”
TL-TEQ-D3-02 [SYMBOLIC]
Prompt: “Solve sin(2θ)=0 for 0°≤θ≤360°.”
Expected: “{0°,90°,180°,270°,360°}” // since 2θ=0,180,360,540,720 => θ=0,90,180,270,360
TL-TEQ-D3-03 [SYMBOLIC]
Prompt: “Solve cos(2θ)=1/2 for 0°≤θ≤360°.”
Expected: “{30°,150°,210°,330°}” // 2θ=60,300,420,660

D4 (3) Examstyle
TL-TEQ-D4-01 [SYMBOLIC]
Prompt: “Solve sinθ=-1/2 for 0°≤θ≤360°.”
Expected: “{210°,330°}”
TL-TEQ-D4-02 [SYMBOLIC]
Prompt: “Solve tan(2θ)=1 for 0°≤θ≤360°.”
Expected: “{22.5°,112.5°,202.5°,292.5°}” // 2θ=45,225,405,585
TL-TEQ-D4-03 [SYMBOLIC]
Prompt: “Solve 3cosθ= -1 for 0°≤θ≤360°.”
Expected: “{arccos(-1/3), 360°-arccos(-1/3)}” (numeric allowed)


C) MTB SEED — PORT_AM_TRIG_01 (2 Packs)

MTB-TID-PACK-01 (D2)
Q1: “What does ‘identity’ mean?”
Answer: “True for all valid θ (within its domain).”
Q2: “Simplify: 1 – sin^2θ”
Answer: “cos^2θ”
Q3: “Transfer: Simplify (1 – cosθ)(1 + cosθ). Explain which identity you used.”
Answer: “sin^2θ using 1 – cos^2θ = sin^2θ.”

MTB-TID-PACK-02 (D3)
Q1: “Why must a rewrite preserve truth for all θ (not just one value)?”
Answer: “Otherwise it’s not an identity; it changes the statement.”
Q2: “Prove: tanθ·cosθ = sinθ”
Answer: “tan=sin/cos → (sin/cos)cos=sin.”
Q3: “Error-spot: Is 1 – sin^2θ = 1 – sinθ correct? If not, correct it.”
Answer: “Incorrect; correct: 1 – sin^2θ = cos^2θ.”


D) MTB SEED — PORT_AM_TRIG_02 (2 Packs)

MTB-TEQ-PACK-01 (D2)
Q1: “Why can trig equations have more than one solution in an interval?”
Answer: “Periodicity and symmetry produce multiple angles with same value.”
Q2: “Solve sinθ=1/2 for 0°≤θ≤360°.”
Answer: “{30°,150°}”
Q3: “Transfer: Solve cosθ=1/2 for 0°≤θ≤360° and explain the two angles.”
Answer: “{60°,300°} (quadrants I and IV).”

MTB-TEQ-PACK-02 (D3)
Q1: “What must you always do after generating candidate trig solutions?”
Answer: “Filter by the given interval and ensure completeness.”
Q2: “Solve sin(2θ)=0 for 0°≤θ≤360°.”
Answer: “{0°,90°,180°,270°,360°}”
Q3: “Transfer: Solve 2sinθ=√3 for 0°≤θ≤360°.”
Answer: “{60°,120°}”

============================================================

DONE — v1.3 Seed Packs

“`text id=”n7s9pt”
MathOS Runtime v1.4 — Cluster Page Inserts + Validator Panels + EPS-30 Mini Papers (3 Clusters)
UnifiedVersionLock: MATHOS_RUNTIME_UNIFIED_VERSION = “v1.4”
Scope:

  • Insert v1.3 TL+MTB seed packs into each cluster page cleanly
  • Add “Validator Examples Panel” (UNVERIFIED handling)
  • Add EPS-30 (8 items / 30 min) per cluster with marking scheme + answer packet template

============================================================
CLUSTER PAGE INSERT #1
AMATH_LOG_EXP — WordPress-Ready Full Insert v1.4

Slug: /mathos-amath-logs-exponentials-cluster-v1-4/

[H1] A-Math Logs & Exponentials Cluster v1.4 (Runnable + Seed Packs + EPS)

[H2] Definition Lock
Logs/Exponentials = rewrite rules + domain contracts + multiplicative iteration.
TruthFence: grading must validate; UNVERIFIED means “paste steps / original question / domain”.

[H2] Cluster Skills (SkillIDs)
Primary:

  • PORT_AM_LOG_01 LogLaws
  • PORT_AM_EXP_01 ExponentialModels
    Core Anchors:
  • SKILL_R0 RewriteRules
  • SKILL_VER0 VerificationContract (domain discipline)
  • SKILL_ERR0 ErrorBoundsBasics

[H2] Failure Mode Trace
Missing DC_LOG → accepts invalid solution → fake mastery → timed mixed set collapse.
Repair: enforce DC_LOG + validator + checklist + retest.

[H2] Domain Contract (DC_LOG)
Rule: every log(argument) must satisfy argument > 0.
Operator must write domain BEFORE solving.
Validator filters solutions using DC_LOG.

Checklist:

  • CHK_domaincheck
  • CHK_resubstitute
  • CHK_boundscheck

[H2] QuickPick (copy/paste)
QuickPick:
level=AMATH
topic=Logarithms
subtopic=Domain
goal=exam_ready
common_issue=domain mistakes + time pressure
time_budget_minutes=75

[H2] Session Runner
Use SYSTEM_PROMPT_SESSION_V1 from /mathos-ai-runner/

[H2] One-Button Scoring (OBPL)
Use SYSTEM_PROMPT_OBPL_V1 from /mathos-obpl-one-button-scoring/


[H2] TL Seed Pack (12) — PORT_AM_LOG_01 LogLaws

(Insert from v1.3: TL-LOG-D1-01 … TL-LOG-D4-03)

TL-LOG-D1-01 … (paste the 12 TL items exactly as in v1.3)


[H2] TL Seed Pack (12) — PORT_AM_EXP_01 ExponentialModels

(Insert from v1.3: TL-EXP-D1-01 … TL-EXP-D4-03)

TL-EXP-D1-01 … (paste the 12 TL items exactly as in v1.3)


[H2] MicroTest Seed Packs — PORT_AM_LOG_01 (2 packs)

(Insert MTB-LOG-PACK-01, MTB-LOG-PACK-02)


[H2] MicroTest Seed Packs — PORT_AM_EXP_01 (2 packs)

(Insert MTB-EXP-PACK-01, MTB-EXP-PACK-02)

[H2] Validator Examples Panel (Logs/Exp)
Goal: show what “UNVERIFIED” means and what parents should paste.

Example A — UNVERIFIED (missing original equation)
Student answer: “x=5”
Problem: not provided
Validator result: UNVERIFIED
Follow-up needed:

  • paste the original question OR the equation after log rewrite
  • paste student steps (at least 2 lines)
  • paste stated domain (if any)

Example B — INCORRECT (domain fail)
Problem: log(x-1)+log(x-3)=log(8)
Student: x=5,-1
Validator: INCORRECT
Reason: x=-1 violates DC_LOG (x-3>0 false)
Inferred ErrID: Err_domain_ignore

Example C — CORRECT (domain stated + filtered)
Student steps include:

  • domain: x>3
  • solutions: x=5,-1
  • filtered: x=5
    Validator: CORRECT

Parent Paste Format (minimal):
WorkSample:
problem_text=’…’
student_steps=’…’
student_answer=’…’
correct_answer=’…’ (optional)
time_sec=__ (optional)

[H2] EPS-30 Mini Paper (Logs & Exp)
EPS_Input:
level=AMATH
duration_min=30
paper_style=TOPIC_MIX
target_clusters=[“logs”,”exponentials”]
difficulty_profile=BALANCED
items_count=8
rules={require_core_anchor:true, no_help:true}

[H3] EPS-OUT (1) Paper Items
LOGEXP-01 [PORT_AM_LOG_01] Solve: log(x-1)=log(7). State domain.
LOGEXP-02 [PORT_AM_LOG_01] Simplify: log(12)-log(3). State domain.
LOGEXP-03 [PORT_AM_LOG_01] Solve: log(x)+log(x-3)=log(10). State domain + filter.
LOGEXP-04 [PORT_AM_LOG_01] Error-spot: log(a+b)=log(a)+log(b). Give counterexample.
LOGEXP-05 [PORT_AM_EXP_01] Model: 100 grows 10% per year. Write P(n).
LOGEXP-06 [PORT_AM_EXP_01] Solve: 3·2^t=96.
LOGEXP-07 [PORT_AM_EXP_01] Decay: 200 decreases 15% each month. Write value after 2 months.
LOGEXP-08 [PORT_AM_EXP_01] Solve: 5(1.2)^n=20 (exact form allowed).

[H3] EPS-OUT (2) Answer Key (concise)
01 x=8, domain x>1
02 log(4)
03 x=5, domain x>3
04 Not true; counterexample e.g. a=b=1
05 P(n)=100(1.1)^n
06 t=5
07 200(0.85)^2
08 n=log(4)/log(1.2)

[H3] EPS-OUT (3) Marking Scheme (points + traps + checks)
Each item 5 points = 40 total.
Per item:

  • 1pt invariant sentence (rewrite/domain or multiplicative factor)
  • 1pt domain/units/bounds check (as relevant)
  • 3pt method + correct answer
    Common traps:
  • LOG: Err_domain_ignore, Err_log_rules_mix
  • EXP: Err_inverse_confuse, Err_units_ignore

[H3] EPS-OUT (4) Student Answer Packet Template
EPS_StudentAnswers:
paper_id=’EPS-LOGEXP-30-01′
answers=[
{item_id:’LOGEXP-01′, response:’…’, steps:’…’, time_sec:__},

]

============================================================
CLUSTER PAGE INSERT #2
AMATH_QUAD — WordPress-Ready Full Insert v1.4

Slug: /mathos-amath-quadratics-cluster-v1-4/

[H1] A-Math Quadratics Cluster v1.4 (Runnable + Seed Packs + EPS)

[H2] Definition Lock
Quadratics = one object, many views (roots/vertex/graph).
TruthFence: validate solution sets; accept equivalent forms; resubstitute to verify.

[H2] Cluster Skills (SkillIDs)

  • PORT_AM_QUAD_01 QuadraticStructure
  • PORT_AM_QUAD_02 DiscriminantAsContract
    Core Anchors:
  • SKILL_G0 GraphAsGeometryOfFunction
  • SKILL_R0 RewriteRules
  • SKILL_VER0 VerificationContract

[H2] Failure Mode Trace
Single-method solving → missed root/condition → wrong interpretation → exam collapse.
Repair: view swap + resubstitution + discriminant contract.

Checklist:

  • CHK_resubstitute
  • CHK_boundscheck
  • CHK_invariant_sentence

[H2] QuickPick
QuickPick:
level=AMATH
topic=Quadratics
subtopic=Discriminant conditions
goal=exam_ready
common_issue=sign + careless
time_budget_minutes=75

[H2] Session Runner + OBPL
(use the main runner pages)

[H2] TL Seed Packs

  • PORT_AM_QUAD_01 (12) — paste from v1.3
  • PORT_AM_QUAD_02 (12) — paste from v1.3

[H2] MicroTest Seed Packs

  • MTB-QUAD-PACK-01, MTB-QUAD-PACK-02
  • MTB-DISC-PACK-01, MTB-DISC-PACK-02

[H2] Validator Examples Panel (Quadratics)
Example A — UNVERIFIED (ambiguous set form)
Student: “x=2/3”
Expected: “x=2,3”
Validator: UNVERIFIED if original equation missing and set unclear
Follow-up: paste original equation and full solution set.

Example B — INCORRECT (missed root)
Problem: x^2-6x+8=0
Student: x=2
Validator: INCORRECT (missing x=4)
ErrID: Err_skip_step / Err_factor_miss

Example C — CORRECT (equivalent forms)
Student: “x=2,4”
Expected: “{2,4}”
Validator: CORRECT (set equivalence)

[H2] EPS-30 Mini Paper (Quadratics)
Paper Items (8):
QUAD-01 Solve: x^2-9=0
QUAD-02 Solve: x^2-5x+6=0
QUAD-03 Solve: 2x^2-3x-2=0
QUAD-04 Convert: y=x^2-4x+1 to vertex form
QUAD-05 Roots -2 and 3: write equation + axis of symmetry
QUAD-06 Find k: x^2+2x+k=0 has one real root
QUAD-07 Find k: x^2-4x+k=0 has no real roots
QUAD-08 Story: h(t)=-t^2+6t+7 find max height + time

Answer Key:
01 x=±3
02 x=2,3
03 x=2, -1/2
04 y=(x-2)^2-3
05 y=(x+2)(x-3); axis x=0.5
06 k=1
07 k>4
08 t=3, h=16

Marking:
5 pts each = 40

  • 1pt invariant meaning (roots/vertex/Δ)
  • 1pt check (resubstitute / Δ sign)
  • 3pt method + correct answer

Student Answer Packet Template:
paper_id=’EPS-QUAD-30-01′ + answers[] list

============================================================
CLUSTER PAGE INSERT #3
AMATH_TRIG_EQ — WordPress-Ready Full Insert v1.4

Slug: /mathos-amath-trig-equations-cluster-v1-4/

[H1] A-Math Trig Equations Cluster v1.4 (Runnable + Seed Packs + EPS)

[H2] Definition Lock
Trig equations = periodicity + symmetry + interval contract.
TruthFence: validator compares solution sets; must be complete in the interval.

[H2] Cluster Skills (SkillIDs)

  • PORT_AM_TRIG_01 TrigIdentities
  • PORT_AM_TRIG_02 TrigEquations
    Core Anchors:
  • SKILL_I0 InvariantBasics
  • SKILL_VER0 VerificationContract (interval completeness)
  • SKILL_R0 RewriteRules

[H2] Interval Contract (DC_TRIG_INTERVAL)
Rule:

  • Provide ALL solutions in the interval
  • Provide ONLY solutions in the interval
  • Lock unit (degrees/radians) explicitly

Checklist:

  • CHK_domaincheck (interval)
  • CHK_snapshot_steps (candidate list)
  • CHK_boundscheck (angles)
  • CHK_invariant_sentence

[H2] QuickPick
QuickPick:
level=AMATH
topic=Trigonometry
subtopic=Equations in interval
goal=exam_ready
common_issue=missing solutions + notation confusion
time_budget_minutes=75

[H2] TL Seed Packs

  • PORT_AM_TRIG_01 (12) — paste from v1.3
  • PORT_AM_TRIG_02 (12) — paste from v1.3

[H2] MicroTest Seed Packs

  • MTB-TID-PACK-01, MTB-TID-PACK-02
  • MTB-TEQ-PACK-01, MTB-TEQ-PACK-02

[H2] Validator Examples Panel (Trig Equations)
Example A — INCORRECT (incomplete set)
Problem: sinθ=1/2, 0°≤θ≤360°
Student: {30°}
Validator: INCORRECT (missing 150°)
ErrID: Err_domain_ignore (interval completeness) / Err_notation_confuse

Example B — UNVERIFIED (unit not stated)
Problem: “Solve sinθ=1/2 for 0≤θ≤2π”
Student answers in degrees
Validator: UNVERIFIED
Follow-up: clarify unit and interval.

Example C — CORRECT (set)
Student: {30°,150°}
Validator: CORRECT

[H2] EPS-30 Mini Paper (Trig Equations)
Paper Items (8):
TRIG-01 Simplify: 1 – sin^2θ
TRIG-02 Simplify: (1-cosθ)(1+cosθ)
TRIG-03 Solve sinθ=1/2 for 0°≤θ≤360°
TRIG-04 Solve cosθ=1/2 for 0°≤θ≤360°
TRIG-05 Solve tanθ=1 for 0°≤θ≤360°
TRIG-06 Solve 2sinθ=√3 for 0°≤θ≤360°
TRIG-07 Solve sin(2θ)=0 for 0°≤θ≤360°
TRIG-08 Solve sinθ=-1/2 for 0°≤θ≤360°

Answer Key:
01 cos^2θ
02 sin^2θ
03 {30°,150°}
04 {60°,300°}
05 {45°,225°}
06 {60°,120°}
07 {0°,90°,180°,270°,360°}
08 {210°,330°}

Marking:
5 pts each = 40

  • 1pt identity/rewrite invariant
  • 1pt interval/unit lock
  • 3pt correct solution set + method

Student Answer Packet Template:
paper_id=’EPS-TRIGEQ-30-01′ + answers[] list

============================================================

NOTE ABOUT THE “PASTE FROM v1.3” LINES

To keep this insert clean, wherever you see:
“paste the 12 TL items exactly as in v1.3”
you replace that line with the 12 TL blocks already produced in v1.3.“`

WORDPRESS PAGE — FULL EXPANDED (INLINED) v1.4
CLUSTER 1: AMATH_LOG_EXP
Slug: /mathos-amath-logs-exponentials-cluster-v1-4/
============================================================
[H1] A-Math Logs & Exponentials Cluster v1.4 (Runnable + Seed Packs + EPS)
[H2] Definition Lock
Logs/Exponentials = rewrite rules + domain contracts + multiplicative iteration.
TruthFence: grading must validate. UNVERIFIED ⇒ paste steps/original question/domain.
[H2] Cluster Skills (SkillIDs)
Primary:
- PORT_AM_LOG_01 LogLaws
- PORT_AM_EXP_01 ExponentialModels
Core Anchors:
- SKILL_R0 RewriteRules
- SKILL_VER0 VerificationContract (domain discipline)
- SKILL_ERR0 ErrorBoundsBasics
[H2] Failure Mode Trace
Missing DC_LOG → accepts invalid solution → fake mastery → timed mixed set collapse.
Repair: enforce DC_LOG + validator + checklist + retest.
[H2] Domain Contract (DC_LOG)
Rule: every log(argument) must satisfy argument > 0.
Operator must write domain BEFORE solving.
Validator filters solutions using DC_LOG.
Checklist:
- CHK_domaincheck
- CHK_resubstitute
- CHK_boundscheck
[H2] QuickPick (copy/paste)
QuickPick:
level=AMATH
topic=Logarithms
subtopic=Domain
goal=exam_ready
common_issue=domain mistakes + time pressure
time_budget_minutes=75
[H2] Session Runner
Use SYSTEM_PROMPT_SESSION_V1 from /mathos-ai-runner/
[H2] One-Button Scoring (OBPL)
Use SYSTEM_PROMPT_OBPL_V1 from /mathos-obpl-one-button-scoring/
------------------------------------------------------------
[H2] TL Seed Pack (12) — PORT_AM_LOG_01 LogLaws
Validator: V4+V3 | DomainContract: DC_LOG | AnswerType: EXPRESSION / SET_OF_SOLUTIONS
Checks: CHK_domaincheck, CHK_resubstitute, CHK_boundscheck
------------------------------------------------------------
[D1] TL-LOG-D1-01 (SYMBOLIC)
Invariant: "Log laws are rewrites; domain must hold."
Prompt: "Simplify: log(3) + log(5). State domain."
Expected: "log(15)"
Trap: Err_log_rules_mix
[D1] TL-LOG-D1-02 (SYMBOLIC)
Prompt: "Simplify: log(8) - log(2). State domain."
Expected: "log(4)"
[D1] TL-LOG-D1-03 (ERRORSPOT)
Prompt: "Find the mistake: log(a+b)=log(a)+log(b). Give a counterexample with numbers."
Expected: "Not true; e.g., a=1,b=1: log(2) ≠ log(1)+log(1)."
Trap: Err_log_rules_mix
[D2] TL-LOG-D2-01 (SYMBOLIC)
Prompt: "Simplify fully: log((x-1)(x+2)) - log(x-1). State domain."
Domain: "x-1>0 and x+2>0"
Expected: "log(x+2)"
Trap: Err_domain_ignore
[D2] TL-LOG-D2-02 (SYMBOLIC)
Prompt: "Solve: log(x-1)=log(7). State domain and answer."
Domain: "x-1>0"
Expected: "x=8"
[D2] TL-LOG-D2-03 (SYMBOLIC)
Prompt: "Solve: log(x)+log(x-3)=log(10). State domain."
Domain: "x>0 and x-3>0"
Expected: "x=5"
Trap: Err_domain_ignore
[D3] TL-LOG-D3-01 (STORY)
Prompt: "A student solved log(x-2)+log(x-5)=log(21) and wrote x=7 and x=0. Which is valid? Explain using domain."
Expected: "x=7 valid; x=0 invalid because domain requires x>5."
Trap: Err_domain_ignore
[D3] TL-LOG-D3-02 (ERRORSPOT)
Prompt: "Spot the illegal step: log(x-1)+log(x+1)=log((x-1)+(x+1)). Correct it."
Expected: "Illegal. Correct: log((x-1)(x+1)) = log(x^2-1)."
Trap: Err_log_rules_mix
[D3] TL-LOG-D3-03 (SYMBOLIC)
Prompt: "Solve: log(x-1)+log(x-3)=log(8). Give all solutions and filter by domain."
Domain: "x>3"
Expected: "x=5 only (reject x=-1)."
Trap: Err_domain_ignore
[D4] TL-LOG-D4-01 (SYMBOLIC)
Prompt: "Solve: log2(x)+log2(x-2)=3. State domain; give solutions."
Domain: "x>2"
Expected: "x=4"
Trap: Err_domain_ignore
[D4] TL-LOG-D4-02 (SYMBOLIC)
Prompt: "Solve: log(x-4)-log(x-6)=log(3). State domain."
Domain: "x>6"
Expected: "x=9"
Trap: Err_domain_ignore
[D4] TL-LOG-D4-03 (SYMBOLIC)
Prompt: "Solve: log(x+1)+log(x-1)=log(16). State domain and solutions."
Domain: "x>1"
Expected: "x=√17"
Trap: Err_domain_ignore
------------------------------------------------------------
[H2] TL Seed Pack (12) — PORT_AM_EXP_01 ExponentialModels
Validator: V2/V1 | DomainContract: DC_DENOM (if any) | AnswerType: EXPRESSION / NUMERIC
Checks: CHK_unitscheck, CHK_boundscheck, CHK_resubstitute
------------------------------------------------------------
[D1] TL-EXP-D1-01 (STORY)
Invariant: "Exponential change = multiplicative iteration."
Prompt: "A value doubles every hour. If it is 5 at hour 0, write V(t)."
Expected: "V(t)=5·2^t"
[D1] TL-EXP-D1-02 (SYMBOLIC)
Prompt: "Simplify: 2^3 · 2^5"
Expected: "2^8"
[D1] TL-EXP-D1-03 (STORY)
Prompt: "A population is 100 and grows 10% per year. Write P(n)."
Expected: "P(n)=100(1.1)^n"
Trap: Err_units_ignore
[D2] TL-EXP-D2-01 (STORY)
Prompt: "Decay: 200 decreases by 15% each month. Write value after 2 months."
Expected: "200(0.85)^2"
[D2] TL-EXP-D2-02 (SYMBOLIC)
Prompt: "Solve: 3·2^t = 96."
Expected: "t=5"
[D2] TL-EXP-D2-03 (TABLE)
Prompt: "Given table: t=0→50, t=1→75, t=2→112.5. Identify model form and ratio."
Expected: "Multiply by 1.5 each step; V(t)=50(1.5)^t"
[D3] TL-EXP-D3-01 (STORY)
Prompt: "Two accounts: A grows by 8% yearly, B grows by 6% yearly but starts larger. Write both models and state what decides when A overtakes."
Expected: "A=A0(1.08)^n, B=B0(1.06)^n; solve intersection A0(1.08)^n=B0(1.06)^n."
Trap: Err_inverse_confuse
[D3] TL-EXP-D3-02 (SYMBOLIC)
Prompt: "Solve: 5(1.2)^n = 20."
Expected: "n = log(4)/log(1.2) (numeric acceptable)."
[D3] TL-EXP-D3-03 (ERRORSPOT)
Prompt: "Find the mistake: (1.1)^(a+b) = 1.1^a + 1.1^b. Correct it."
Expected: "Incorrect; correct: 1.1^(a+b)=1.1^a·1.1^b."
[D4] TL-EXP-D4-01 (STORY)
Prompt: "A drug concentration is 80 and halves every 6 hours. Find time t (hours) to reach 10."
Expected: "80(1/2)^(t/6)=10 → t=18"
Trap: Err_inverse_confuse
[D4] TL-EXP-D4-02 (STORY)
Prompt: "Find n such that 100(0.9)^n < 50."
Expected: "n > log(0.5)/log(0.9)"
Trap: Err_notation_confuse
[D4] TL-EXP-D4-03 (STORY)
Prompt: "Compound interest: $5000 at 3% p.a. Find after 4 years and interpret meaning of the exponent."
Expected: "5000(1.03)^4 (exponent counts compounding steps)."
Trap: Err_units_ignore
------------------------------------------------------------
[H2] MicroTest Seed Packs — PORT_AM_LOG_01 (2 packs)
------------------------------------------------------------
MTB-LOG-PACK-01 (D2)
Q1 (Invariant): "Before using log laws, what must be true about every log argument?"
Answer: "Each argument must be > 0 (domain)."
Q2 (Apply): "Simplify: log(12) - log(3)."
Answer: "log(4)"
Q3 (Transfer): "Solve log(x-1)=log(5). State domain and answer."
Answer: "x>1; x=6"
MTB-LOG-PACK-02 (D3)
Q1: "Why can a solution from algebra be rejected after solving a log equation?"
Answer: "It may violate the domain (log argument not >0)."
Q2: "Solve: log(x)+log(x-3)=log(10)."
Answer: "x=5 (domain x>3)."
Q3: "A student got x=5 and x=-1 for log(x-1)+log(x-3)=log(8). Which is valid and why?"
Answer: "x=5 valid; x=-1 invalid (domain x>3)."
------------------------------------------------------------
[H2] MicroTest Seed Packs — PORT_AM_EXP_01 (2 packs)
------------------------------------------------------------
MTB-EXP-PACK-01 (D2)
Q1: "What does it mean when something grows by a fixed percentage each step?"
Answer: "It multiplies by a constant factor each step."
Q2: "Solve: 3·2^t=96."
Answer: "t=5"
Q3: "A value is 100 and decreases 20% per month. Write V(n) and find V(2)."
Answer: "V(n)=100(0.8)^n; V(2)=64"
MTB-EXP-PACK-02 (D3)
Q1: "Why is exponential growth called multiplicative iteration?"
Answer: "Each step multiplies by the same factor; repeated multiplication."
Q2: "Solve: 5(1.2)^n=20."
Answer: "n=log(4)/log(1.2) (≈7.6)"
Q3: "Two models: A=50(1.1)^n and B=60(1.05)^n. Which grows faster and how do you decide when A overtakes B?"
Answer: "A grows faster (1.1>1.05); solve 50(1.1)^n=60(1.05)^n."
[H2] Validator Examples Panel (Logs/Exp)
Example A — UNVERIFIED (missing original question)
Student answer: "x=5"
Problem: not provided
Validator result: UNVERIFIED
Follow-up needed:
- paste the original question (or the equation after rewrite)
- paste student steps (at least 2 lines)
- paste stated domain (if any)
Example B — INCORRECT (domain fail)
Problem: log(x-1)+log(x-3)=log(8)
Student: x=5,-1
Validator: INCORRECT
Reason: x=-1 violates DC_LOG
ErrID: Err_domain_ignore
Example C — CORRECT (domain stated + filtered)
Student steps:
- domain: x>3
- algebra solutions: x=5,-1
- filtered: x=5
Validator: CORRECT
Parent paste format:
WorkSample:
problem_text='...'
student_steps='...'
student_answer='...'
time_sec=__ (optional)
------------------------------------------------------------
[H2] EPS-30 Mini Paper (Logs & Exp)
------------------------------------------------------------
EPS-OUT (1) Paper Items (8 items / 30 min)
LOGEXP-01 [PORT_AM_LOG_01] Solve: log(x-1)=log(7). State domain.
LOGEXP-02 [PORT_AM_LOG_01] Simplify: log(12)-log(3). State domain.
LOGEXP-03 [PORT_AM_LOG_01] Solve: log(x)+log(x-3)=log(10). State domain + filter.
LOGEXP-04 [PORT_AM_LOG_01] Error-spot: log(a+b)=log(a)+log(b). Give counterexample.
LOGEXP-05 [PORT_AM_EXP_01] Model: 100 grows 10% per year. Write P(n).
LOGEXP-06 [PORT_AM_EXP_01] Solve: 3·2^t=96.
LOGEXP-07 [PORT_AM_EXP_01] Decay: 200 decreases 15% each month. Write value after 2 months.
LOGEXP-08 [PORT_AM_EXP_01] Solve: 5(1.2)^n=20 (exact form allowed).
EPS-OUT (2) Answer Key
01 x=8, domain x>1
02 log(4)
03 x=5, domain x>3
04 Not true; counterexample e.g. a=b=1
05 P(n)=100(1.1)^n
06 t=5
07 200(0.85)^2
08 n=log(4)/log(1.2)
EPS-OUT (3) Marking Scheme (40 points total)
Each item 5 points:
- 1pt invariant sentence (rewrite/domain OR multiplicative factor)
- 1pt check (domain/units/bounds/resubstitute as relevant)
- 3pt method + correct answer
Common traps:
- LOG: Err_domain_ignore, Err_log_rules_mix
- EXP: Err_inverse_confuse, Err_units_ignore
EPS-OUT (4) Student Answer Packet Template
EPS_StudentAnswers:
paper_id='EPS-LOGEXP-30-01'
answers=[
{item_id:'LOGEXP-01', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-02', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-03', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-04', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-05', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-06', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-07', response:'...', steps:'...', time_sec:__},
{item_id:'LOGEXP-08', response:'...', steps:'...', time_sec:__}
]
WORDPRESS PAGE — FULL EXPANDED (INLINED) v1.4
CLUSTER 2: AMATH_QUAD
Slug: /mathos-amath-quadratics-cluster-v1-4/
============================================================
[H1] A-Math Quadratics Cluster v1.4 (Runnable + Seed Packs + EPS)
[H2] Definition Lock
Quadratics = one object, many views (roots/vertex/graph/coeff structure).
TruthFence: validate solution sets; resubstitute to verify.
[H2] Cluster Skills (SkillIDs)
- PORT_AM_QUAD_01 QuadraticStructure
- PORT_AM_QUAD_02 DiscriminantAsContract
Core Anchors:
- SKILL_G0 GraphAsGeometryOfFunction
- SKILL_R0 RewriteRules
- SKILL_VER0 VerificationContract
[H2] Failure Mode Trace
Single-method solving → missed root/condition → wrong interpretation → exam collapse.
Repair: view swap + resubstitution + discriminant contract.
Checklist:
- CHK_resubstitute
- CHK_boundscheck
- CHK_invariant_sentence
[H2] QuickPick
QuickPick:
level=AMATH
topic=Quadratics
subtopic=Discriminant conditions
goal=exam_ready
common_issue=sign + careless
time_budget_minutes=75
[H2] Session Runner + OBPL
Use the main runner pages:
- /mathos-ai-runner/
- /mathos-obpl-one-button-scoring/
------------------------------------------------------------
[H2] TL Seed Pack (12) — PORT_AM_QUAD_01 QuadraticStructure
Validator: V3+V1 | AnswerType: SET_OF_SOLUTIONS / EXPRESSION
Checks: CHK_resubstitute, CHK_boundscheck, CHK_invariant_sentence
------------------------------------------------------------
[D1] TL-QUAD-D1-01 (SYMBOLIC)
Invariant: "Solving finds roots where expression = 0."
Prompt: "Solve: x^2=25"
Expected: "x=±5"
[D1] TL-QUAD-D1-02 (SYMBOLIC)
Prompt: "Solve: x^2-9=0"
Expected: "x=±3"
[D1] TL-QUAD-D1-03 (GRAPH)
Prompt: "A parabola crosses x-axis at x=1 and x=4. Write one possible equation."
Expected: "y=(x-1)(x-4)"
[D2] TL-QUAD-D2-01 (SYMBOLIC)
Prompt: "Factor and solve: x^2-5x+6=0"
Expected: "x=2,3"
Trap: Err_factor_miss
[D2] TL-QUAD-D2-02 (SYMBOLIC)
Prompt: "Solve: x^2-4x-5=0"
Expected: "x=5,-1"
Trap: Err_sign
[D2] TL-QUAD-D2-03 (STORY)
Prompt: "The product of two numbers is -5 and their sum is 4. Form a quadratic and solve."
Expected: "t^2-4t-5=0 → t=5,-1"
[D3] TL-QUAD-D3-01 (GRAPH)
Prompt: "A parabola has roots -2 and 3 and opens upward. Write equation and axis of symmetry."
Expected: "y=(x+2)(x-3); axis x=0.5"
[D3] TL-QUAD-D3-02 (SYMBOLIC)
Prompt: "Convert y=x^2-6x+5 into vertex form."
Expected: "y=(x-3)^2-4"
[D3] TL-QUAD-D3-03 (ERRORSPOT)
Prompt: "A student solved x^2-6x+8=0 and wrote x=2 only. Find what was missed."
Expected: "x=4 also."
Trap: Err_skip_step
[D4] TL-QUAD-D4-01 (SYMBOLIC)
Prompt: "Solve: 2x^2-3x-2=0 and check."
Expected: "x=2, -1/2"
Trap: Err_quadratic_formula_slip
[D4] TL-QUAD-D4-02 (SYMBOLIC)
Prompt: "Solve: 3x^2+2x-8=0"
Expected: "x=4/3, -2"
Trap: Err_sign
[D4] TL-QUAD-D4-03 (STORY)
Prompt: "A projectile height is h(t)=-t^2+6t+7. Find maximum height and when it occurs."
Expected: "t=3; h=16"
------------------------------------------------------------
[H2] TL Seed Pack (12) — PORT_AM_QUAD_02 DiscriminantAsContract
Validator: V2/V3 | AnswerType: STATEMENT / INTERVAL / SET
Checks: CHK_boundscheck, CHK_invariant_sentence
------------------------------------------------------------
[D1] TL-DISC-D1-01 (SYMBOLIC)
Invariant: "Discriminant decides number of real roots."
Prompt: "For x^2+4x+4=0, compute discriminant and state roots count."
Expected: "Δ=0, one repeated root"
[D1] TL-DISC-D1-02 (SYMBOLIC)
Prompt: "For x^2+1=0, compute Δ and state real roots?"
Expected: "Δ<0, no real roots"
[D1] TL-DISC-D1-03 (STORY)
Prompt: "What condition on Δ gives two distinct real roots?"
Expected: "Δ>0"
[D2] TL-DISC-D2-01 (SYMBOLIC)
Prompt: "Find k so x^2+2x+k=0 has one real root."
Expected: "k=1"
[D2] TL-DISC-D2-02 (SYMBOLIC)
Prompt: "Find k so x^2-4x+k=0 has no real roots."
Expected: "k>4"
[D2] TL-DISC-D2-03 (SYMBOLIC)
Prompt: "Find k so 2x^2+3x+k=0 has two distinct real roots."
Expected: "k<9/8"
[D3] TL-DISC-D3-01 (STORY)
Prompt: "A parabola y=x^2+px+q touches the x-axis. What must be true about p and q?"
Expected: "Δ=0 → p^2-4q=0"
[D3] TL-DISC-D3-02 (GRAPH)
Prompt: "A parabola does not cross x-axis. State condition on Δ and interpret."
Expected: "Δ<0; no real roots."
[D3] TL-DISC-D3-03 (SYMBOLIC)
Prompt: "Find range of k so x^2+2(k-1)x+k=0 has real roots."
Expected: "Δ≥0 → 4(k-1)^2-4k ≥0"
[D4] TL-DISC-D4-01 (SYMBOLIC)
Prompt: "For x^2-(k+2)x+k=0, find k such that roots are equal."
Expected: "Δ=0 → (k+2)^2-4k=0 → k^2+4=0 → no real k"
Note: "This is a valid result: no real parameter satisfies."
[D4] TL-DISC-D4-02 (SYMBOLIC)
Prompt: "Find k so 3x^2+kx+3=0 has two distinct real roots."
Expected: "|k|>6"
[D4] TL-DISC-D4-03 (STORY)
Prompt: "A quadratic has exactly one real solution. Express the condition using Δ and solve for parameter (generic statement)."
Expected: "Δ=0 then solve (context supplies equation)."
------------------------------------------------------------
[H2] MicroTest Seed Packs — PORT_AM_QUAD_01 (2 packs)
------------------------------------------------------------
MTB-QUAD-PACK-01 (D2)
Q1: "What does a root mean on the graph of y=f(x)?"
Answer: "x-value where graph crosses/touches x-axis (f(x)=0)."
Q2: "Solve: x^2-6x+8=0"
Answer: "x=2,4"
Q3: "A parabola has roots 1 and 5. Write one equation."
Answer: "y=(x-1)(x-5) (any nonzero multiple acceptable)."
MTB-QUAD-PACK-02 (D3)
Q1: "Why should you check solutions by substitution?"
Answer: "To confirm they satisfy the original equation; catches algebra slips."
Q2: "Convert y=x^2-4x+1 to vertex form."
Answer: "y=(x-2)^2-3"
Q3: "A student wrote only one solution for x^2-9=0. What’s missing and why?"
Answer: "Two solutions ±3 because squaring loses sign."
------------------------------------------------------------
[H2] MicroTest Seed Packs — PORT_AM_QUAD_02 (2 packs)
------------------------------------------------------------
MTB-DISC-PACK-01 (D2)
Q1: "What does Δ tell you?"
Answer: "Number/type of real roots."
Q2: "Find k so x^2+2x+k=0 has one real root."
Answer: "k=1"
Q3: "Find k so x^2-4x+k=0 has no real roots."
Answer: "k>4"
MTB-DISC-PACK-02 (D3)
Q1: "What condition on Δ means the parabola touches the x-axis?"
Answer: "Δ=0"
Q2: "Find k so 2x^2+3x+k=0 has two distinct real roots."
Answer: "k<9/8"
Q3: "Given y=x^2+px+q touches x-axis, write the condition relating p and q."
Answer: "p^2=4q"
[H2] Validator Examples Panel (Quadratics)
Example A — UNVERIFIED (ambiguous / missing original)
Student: "x=2/3"
Original: not pasted
Validator: UNVERIFIED
Follow-up: paste original equation + full solution set.
Example B — INCORRECT (missed root)
Problem: x^2-6x+8=0
Student: x=2
Validator: INCORRECT (missing x=4)
ErrID: Err_skip_step / Err_factor_miss
Example C — CORRECT (set equivalence)
Student: "x=2,4"
Expected: "{2,4}"
Validator: CORRECT (set equivalence)
------------------------------------------------------------
[H2] EPS-30 Mini Paper (Quadratics)
------------------------------------------------------------
EPS-OUT (1) Paper Items (8 items / 30 min)
QUAD-01 Solve: x^2-9=0
QUAD-02 Solve: x^2-5x+6=0
QUAD-03 Solve: 2x^2-3x-2=0
QUAD-04 Convert: y=x^2-4x+1 to vertex form
QUAD-05 Roots -2 and 3: write equation + axis of symmetry
QUAD-06 Find k: x^2+2x+k=0 has one real root
QUAD-07 Find k: x^2-4x+k=0 has no real roots
QUAD-08 Story: h(t)=-t^2+6t+7 find max height + time
EPS-OUT (2) Answer Key
01 x=±3
02 x=2,3
03 x=2, -1/2
04 y=(x-2)^2-3
05 y=(x+2)(x-3); axis x=0.5
06 k=1
07 k>4
08 t=3, h=16
EPS-OUT (3) Marking Scheme (40 points total)
Each item 5 points:
- 1pt invariant sentence (roots/vertex/Δ meaning)
- 1pt check (resubstitute / Δ sign / reasonableness)
- 3pt method + correct answer
Common traps:
- Err_sign, Err_factor_miss, Err_skip_step, Err_quadratic_formula_slip
EPS-OUT (4) Student Answer Packet Template
EPS_StudentAnswers:
paper_id='EPS-QUAD-30-01'
answers=[
{item_id:'QUAD-01', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-02', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-03', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-04', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-05', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-06', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-07', response:'...', steps:'...', time_sec:__},
{item_id:'QUAD-08', response:'...', steps:'...', time_sec:__}
]
WORDPRESS PAGE — FULL EXPANDED (INLINED) v1.4
CLUSTER 3: AMATH_TRIG_EQ
Slug: /mathos-amath-trig-equations-cluster-v1-4/
============================================================
[H1] A-Math Trig Equations Cluster v1.4 (Runnable + Seed Packs + EPS)
[H2] Definition Lock
Trig equations = periodicity + symmetry + interval contract.
TruthFence: validator compares solution sets; answers must be complete in the interval.
[H2] Cluster Skills (SkillIDs)
- PORT_AM_TRIG_01 TrigIdentities (rewrite legality)
- PORT_AM_TRIG_02 TrigEquations (solution sets)
Core Anchors:
- SKILL_I0 InvariantBasics (symmetry)
- SKILL_VER0 VerificationContract (interval completeness)
- SKILL_R0 RewriteRules
[H2] Interval Contract (DC_TRIG_INTERVAL)
Rule:
- Provide ALL solutions in the interval
- Provide ONLY solutions in the interval
- Lock unit (degrees/radians) explicitly
Checklist:
- CHK_domaincheck (interval)
- CHK_snapshot_steps (candidate list)
- CHK_boundscheck (angles)
- CHK_invariant_sentence
[H2] QuickPick
QuickPick:
level=AMATH
topic=Trigonometry
subtopic=Equations in interval
goal=exam_ready
common_issue=missing solutions + notation confusion
time_budget_minutes=75
[H2] Session Runner + OBPL
Use the main runner pages:
- /mathos-ai-runner/
- /mathos-obpl-one-button-scoring/
------------------------------------------------------------
[H2] TL Seed Pack (12) — PORT_AM_TRIG_01 TrigIdentities
Validator: V2 (+ domain where used) | AnswerType: STATEMENT / EXPRESSION
Checks: CHK_invariant_sentence, CHK_domaincheck (when needed)
------------------------------------------------------------
[D1] TL-TID-D1-01 (SYMBOLIC)
Invariant: "Identity = true for all valid θ; rewrites preserve truth."
Prompt: "State the Pythagorean identity relating sin and cos."
Expected: "sin^2θ + cos^2θ = 1"
[D1] TL-TID-D1-02 (SYMBOLIC)
Prompt: "Simplify: sin^2θ + cos^2θ"
Expected: "1"
[D1] TL-TID-D1-03 (ERRORSPOT)
Prompt: "Is sin(α+β)=sinα+sinβ true? Give a counterexample or correction."
Expected: "Not true; must use the correct compound-angle formula."
Trap: Err_trig_identity_mix
[D2] TL-TID-D2-01 (SYMBOLIC)
Prompt: "Simplify: (1 - cos^2θ)"
Expected: "sin^2θ"
[D2] TL-TID-D2-02 (SYMBOLIC)
Prompt: "Express tan^2θ in terms of sec^2θ."
Expected: "tan^2θ = sec^2θ - 1"
[D2] TL-TID-D2-03 (SYMBOLIC)
Prompt: "Prove: (1+tan^2θ)cos^2θ = 1"
Expected: "Use 1+tan^2θ=sec^2θ and sec^2θ·cos^2θ=1."
[D3] TL-TID-D3-01 (ERRORSPOT)
Prompt: "A student rewrote 1 - sin^2θ as 1 - sinθ. Explain why illegal and correct."
Expected: "Illegal because sin^2θ≠sinθ. Correct: 1 - sin^2θ = cos^2θ."
[D3] TL-TID-D3-02 (SYMBOLIC)
Prompt: "Simplify: (sin^2θ)/(1 - cos^2θ)"
Expected: "1"
Trap: Err_trig_identity_mix
[D3] TL-TID-D3-03 (SYMBOLIC)
Prompt: "Prove: tanθ·cosθ = sinθ"
Expected: "tanθ=sinθ/cosθ ⇒ (sinθ/cosθ)·cosθ=sinθ."
[D4] TL-TID-D4-01 (SYMBOLIC)
Prompt: "Simplify: (1 - cosθ)(1 + cosθ)"
Expected: "sin^2θ"
[D4] TL-TID-D4-02 (SYMBOLIC)
Prompt: "Simplify: (sec^2θ - 1)/tan^2θ"
Expected: "1"
[D4] TL-TID-D4-03 (SYMBOLIC)
Prompt: "Given sinθ=3/5 (θ acute), find tanθ."
Expected: "3/4"
------------------------------------------------------------
[H2] TL Seed Pack (12) — PORT_AM_TRIG_02 TrigEquations
Validator: V4+V3 | DomainContract: DC_TRIG_INTERVAL (unit lock) | AnswerType: SET_OF_SOLUTIONS
Checks: CHK_domaincheck, CHK_snapshot_steps, CHK_boundscheck
Assume DEGREES unless stated otherwise (unit is locked in every prompt).
------------------------------------------------------------
[D1] TL-TEQ-D1-01 (SYMBOLIC)
Invariant: "Multiple solutions from periodicity + symmetry; filter by interval."
Prompt: "Solve sinθ=0 for 0°≤θ≤360°."
Expected: "{0°,180°,360°}"
[D1] TL-TEQ-D1-02 (SYMBOLIC)
Prompt: "Solve cosθ=1 for 0°≤θ≤360°."
Expected: "{0°,360°}"
[D1] TL-TEQ-D1-03 (SYMBOLIC)
Prompt: "Solve sinθ=1 for 0°≤θ≤360°."
Expected: "{90°}"
[D2] TL-TEQ-D2-01 (SYMBOLIC)
Prompt: "Solve sinθ=1/2 for 0°≤θ≤360°."
Expected: "{30°,150°}"
[D2] TL-TEQ-D2-02 (SYMBOLIC)
Prompt: "Solve cosθ=1/2 for 0°≤θ≤360°."
Expected: "{60°,300°}"
[D2] TL-TEQ-D2-03 (SYMBOLIC)
Prompt: "Solve tanθ=1 for 0°≤θ≤360°."
Expected: "{45°,225°}"
[D3] TL-TEQ-D3-01 (SYMBOLIC)
Prompt: "Solve 2sinθ=√3 for 0°≤θ≤360°."
Expected: "{60°,120°}"
[D3] TL-TEQ-D3-02 (SYMBOLIC)
Prompt: "Solve sin(2θ)=0 for 0°≤θ≤360°."
Expected: "{0°,90°,180°,270°,360°}"
[D3] TL-TEQ-D3-03 (SYMBOLIC)
Prompt: "Solve cos(2θ)=1/2 for 0°≤θ≤360°."
Expected: "{30°,150°,210°,330°}"
[D4] TL-TEQ-D4-01 (SYMBOLIC)
Prompt: "Solve sinθ=-1/2 for 0°≤θ≤360°."
Expected: "{210°,330°}"
[D4] TL-TEQ-D4-02 (SYMBOLIC)
Prompt: "Solve tan(2θ)=1 for 0°≤θ≤360°."
Expected: "{22.5°,112.5°,202.5°,292.5°}"
[D4] TL-TEQ-D4-03 (SYMBOLIC)
Prompt: "Solve 3cosθ= -1 for 0°≤θ≤360°."
Expected: "{arccos(-1/3), 360°-arccos(-1/3)} (numeric acceptable)"
Trap: Err_notation_confuse
------------------------------------------------------------
[H2] MicroTest Seed Packs — PORT_AM_TRIG_01 (2 packs)
------------------------------------------------------------
MTB-TID-PACK-01 (D2)
Q1: "What does 'identity' mean?"
Answer: "True for all valid θ (within its domain)."
Q2: "Simplify: 1 - sin^2θ"
Answer: "cos^2θ"
Q3: "Transfer: Simplify (1 - cosθ)(1 + cosθ). Explain which identity you used."
Answer: "sin^2θ using 1 - cos^2θ = sin^2θ."
MTB-TID-PACK-02 (D3)
Q1: "Why must a rewrite preserve truth for all θ (not just one value)?"
Answer: "Otherwise it’s not an identity; it changes the statement."
Q2: "Prove: tanθ·cosθ = sinθ"
Answer: "tan=sin/cos → (sin/cos)cos=sin."
Q3: "Error-spot: Is 1 - sin^2θ = 1 - sinθ correct? If not, correct it."
Answer: "Incorrect; correct: 1 - sin^2θ = cos^2θ."
------------------------------------------------------------
[H2] MicroTest Seed Packs — PORT_AM_TRIG_02 (2 packs)
------------------------------------------------------------
MTB-TEQ-PACK-01 (D2)
Q1: "Why can trig equations have more than one solution in an interval?"
Answer: "Periodicity and symmetry produce multiple angles with same value."
Q2: "Solve sinθ=1/2 for 0°≤θ≤360°."
Answer: "{30°,150°}"
Q3: "Transfer: Solve cosθ=1/2 for 0°≤θ≤360° and explain the two angles."
Answer: "{60°,300°} (quadrants I and IV)."
MTB-TEQ-PACK-02 (D3)
Q1: "What must you always do after generating candidate trig solutions?"
Answer: "Filter by the given interval and ensure completeness."
Q2: "Solve sin(2θ)=0 for 0°≤θ≤360°."
Answer: "{0°,90°,180°,270°,360°}"
Q3: "Transfer: Solve 2sinθ=√3 for 0°≤θ≤360°."
Answer: "{60°,120°}"
[H2] Validator Examples Panel (Trig Equations)
Example A — INCORRECT (incomplete set)
Problem: sinθ=1/2, 0°≤θ≤360°
Student: {30°}
Validator: INCORRECT (missing 150°)
ErrID: Err_domain_ignore (interval completeness)
Example B — UNVERIFIED (unit mismatch)
Problem: "Solve sinθ=1/2 for 0≤θ≤2π"
Student answers in degrees
Validator: UNVERIFIED
Follow-up: confirm unit + provide answers in that unit.
Example C — CORRECT (set)
Student: {30°,150°}
Validator: CORRECT
------------------------------------------------------------
[H2] EPS-30 Mini Paper (Trig Equations)
------------------------------------------------------------
EPS-OUT (1) Paper Items (8 items / 30 min)
TRIG-01 Simplify: 1 - sin^2θ
TRIG-02 Simplify: (1-cosθ)(1+cosθ)
TRIG-03 Solve sinθ=1/2 for 0°≤θ≤360°
TRIG-04 Solve cosθ=1/2 for 0°≤θ≤360°
TRIG-05 Solve tanθ=1 for 0°≤θ≤360°
TRIG-06 Solve 2sinθ=√3 for 0°≤θ≤360°
TRIG-07 Solve sin(2θ)=0 for 0°≤θ≤360°
TRIG-08 Solve sinθ=-1/2 for 0°≤θ≤360°
EPS-OUT (2) Answer Key
01 cos^2θ
02 sin^2θ
03 {30°,150°}
04 {60°,300°}
05 {45°,225°}
06 {60°,120°}
07 {0°,90°,180°,270°,360°}
08 {210°,330°}
EPS-OUT (3) Marking Scheme (40 points total)
Each item 5 points:
- 1pt identity/invariant sentence
- 1pt interval/unit lock (explicit)
- 3pt correct method + complete solution set
Common traps:
- Err_trig_identity_mix, Err_domain_ignore (completeness), Err_notation_confuse
EPS-OUT (4) Student Answer Packet Template
EPS_StudentAnswers:
paper_id='EPS-TRIGEQ-30-01'
answers=[
{item_id:'TRIG-01', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-02', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-03', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-04', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-05', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-06', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-07', response:'...', steps:'...', time_sec:__},
{item_id:'TRIG-08', response:'...', steps:'...', time_sec:__}
]
WHAT_THIS_IS (Almost-Code) — MathOS Runtime (AI-TeachRunner)
ID: MATHOS_WHAT_THIS_IS_01
Runtime: MathOS Runtime v1.x
Audience: Parent / Student / Tutor / AI
============================================================
1) ONE-LINE
============================================================
MathOS Runtime = an AI-driven closed-loop teaching controller that teaches mathematics as a stability system (invariants + checks + retests), not as a topic list.
============================================================
2) DEFINITION_LOCK
============================================================
Math := invariant-preserving representation language for:
Predict + Control + Verify + Compose.
Teach := Observe → Infer → Plan → Act → Verify → Repair → Promote.
TruthFence := do not guess grading; validate or return UNVERIFIED.
============================================================
3) WHAT YOU GET (OUTPUTS)
============================================================
Outputs:
SESSION(A–H):
A OracleReport
B OperatorLessonPlan
C ArchitectSandbox (0/1)
D AdaptivePractice (+ traps + checks + answer types)
E MicroTest (Q1 invariant / Q2 apply / Q3 transfer) + key + rubric
F FenceDecision (TRUNCATE/STITCH/PROMOTE) + RepairRoute
G CompressionSummary (3 lines)
H NextSessionPlan (schedule + MachinePatch)
OBPL (One-Button Scoring):
- Score student answers
- Validate answers (Validator)
- Update StudentState (mastery/transfer/stability)
- Generate next practice + next microtest + next schedule
EPS (Exam Paper Simulator):
- Generate timed mixed sets
- Score + stability panel
- Postmortem + 2-session repair plan
============================================================
4) WHY IT EXISTS (PROBLEM)
============================================================
Problem:
Traditional math learning often produces:
- "pattern correctness" without invariants,
- careless collapse under time,
- transfer failure when format changes,
- fake mastery (looks good in drills, fails in exams).
MathOS goal:
Build Phase reliability:
Correct when calm + correct when stressed + correct when format changes.
============================================================
5) CORE IDEA (THE ENGINE)
============================================================
Engine:
- Sensors (microtests + practice signals) detect leaks early
- Thresholds (FENCE) prevent collapse
- Repair (Truncation + Stitching) restores stability
- Promotion requires mastery + transfer + stability (not just accuracy)
============================================================
6) THE 3 LAWS (IN PRACTICE)
============================================================
LAW_1 (Invariant-First):
Every problem has a "what stays the same" statement.
Student must say it before solving (when required).
LAW_2 (Contract-First for risky topics):
If domain/interval matters (logs/trig/roots):
write contract first (DC_LOG / DC_TRIG_INTERVAL / DC_SQRT_REAL / DC_DENOM).
Any solution must satisfy the contract.
LAW_3 (Promotion requires stability):
PROMOTE only if:
mastery >= T_deploy_mastery
transfer >= T_deploy_transfer
stability >= T_deploy_stability
============================================================
7) THE RELIABILITY LAYER (WHAT MAKES IT "AI-SAFE")
============================================================
Modules:
StateStore SS_01:
- persists StudentState across sessions (no reset)
Validator v1:
- checks equivalence (numeric tolerance / substitution / set/interval)
- enforces domain contracts
- returns CORRECT / INCORRECT / UNVERIFIED
Policy:
If UNVERIFIED:
- do not update mastery upward
- ask for original question or steps
============================================================
8) THE STUDENTSTATE (WHAT THE SYSTEM TRACKS)
============================================================
StudentState tracks:
mastery(skill) // can do it now
transfer(skill) // can do it in new format
stability(skill) // can do it under time/load
error_signatures // common mistake types
dual_track // core vs exam port ratio + shear risk
weekly_log // append-only session outcomes
============================================================
9) HOW A SESSION RUNS (EXECUTION)
============================================================
SESSION_RUN:
Input:
- StudentState
- QuickPick (level/topic/goal/time)
Process:
- choose primary skill + (0..2) secondary skills
- generate practice + microtest
- run lesson plan
- verify via microtest
- fence decision:
TRUNCATE if collapse risk
STITCH if partial
PROMOTE if stable
Output:
- A–H package + Next schedule
============================================================
10) HOW YOU USE IT (3-STEP USER FLOW)
============================================================
FLOW_PARENT_STUDENT:
Step 1: Run SESSION (A–H) for today’s topic
Step 2: Student does practice + microtest
Step 3: Paste AnswerPacket into OBPL → get:
updated StudentState + next practice + next schedule
Optional:
- Run EPS once a week to stress-test exam stability
============================================================
11) WHAT IT IS NOT
============================================================
Not:
- a static worksheet site
- a “tips” blog
- pure explanation without measurement
- grading by guessing
It is:
- a control system for building math capability reliably over time.
============================================================
12) MINIMUM SUCCESS CRITERIA
============================================================
Success = the student can:
- explain the invariant,
- solve correctly,
- pass transfer question,
- remain stable under timed conditions,
- avoid repeat error signatures.
END

Recommended Internal Links (Spine)

Start Here For Mathematics OS Articles: 

Start Here for Lattice Infrastructure Connectors

eduKateSG Learning Systems: