⚙️ engine vocabulary
Engine primitives
A course is composition, not code. These are the building blocks Luna's Math Quest draws on — the same catalog (engine.capabilities.json) the validator enforces and an AI can author against.
Boards — the interactive question UIs
A station's board is the activity a child plays. Each board's generator supplies the questions.
| kind | what it is |
|---|---|
| angles | Angles — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| area | Area — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| bonds | Number Bonds — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| compare | Bigger or Smaller — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| counting | Counting — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| dec-addsub | Decimal + and − — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| dec-compare | Compare Decimals — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| dec-convert | Fractions ↔ Decimals — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| dec-place | Decimal Places — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| dec-pow10 | × and ÷ by 10, 100 — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| div-facts | Division Facts — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| elapsed | Elapsed Time — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| even-odd | Even or Odd — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| fact-add | Adding Facts — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| fact-sub | Taking Away — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-addlike | Add Alike Fractions — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-compare | Compare Fractions — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-concept | What is a Fraction? — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-equiv | Equivalent Fractions — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-mixed | Mixed Numbers — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-mulwhole | Fraction × Whole — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| frac-unlike | Mixed Denominators — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| long-add | Long Addition — Multi-digit column addition with carrying. |
| long-div | Long Division — Long division with the standard bracket algorithm. |
| long-mul | Long Multiplication — Multi-digit column multiplication. |
| long-sub | Long Subtraction — Multi-digit column subtraction with borrowing. |
| money | Money & Change — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| mul-concept | Groups & Arrays — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| perimeter | Perimeter — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| rounding | Rounding — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| shapes | Name the Shapes — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| skip | Skip Counting — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| symmetry | Symmetry — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| tables | Times Tables — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| tens-ones | Tens & Ones — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| time | Telling Time — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| twodigit-nr | Two-Digit + and − — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| unit-convert | Unit Conversions — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| units | Length & Weight — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| volume | Volume — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| word-1step | Story Problems — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| word-2step | Two-Step Stories — The general problem board: shows a prompt and takes the answer (number pad or choices). Drives most math topics — each topic's generator supplies the questions, so the topic id is what varies, not the board. |
| word-master | Grand Challenge — Mixed review: draws problems across several topics in one station (boss level). |
Views — the lesson visuals
A lesson beat shows a view — the picture Luna talks over. Props configure it.
| kind | what it is | props |
|---|---|---|
| adddec | Adding two decimals, lined up on the decimal point. | a: number, b: number |
| addfrac | Adding fractions with a like denominator: a/n + b/n. | a: int, b: int, n: int |
| angle | An angle sweeping open to a given number of degrees. | deg: int |
| area | A rectangle filling with unit squares to teach area. | w: int, h: int |
| array | A rectangular array of dots — multiplication as rows × columns. | a: int, b: int |
| baseten | Base-ten blocks: tens-rods and ones-cubes for two-digit place value. | t: int, o: int |
| big | A single big numeral or label, for emphasis / answer-reveal beats. | text: string, color?: string |
| clock | An analog clock set to a time, for telling time. | h: int, m: int |
| coins | A tray of coins to count a money amount / make change. | coins: int[] |
| column | Vertical column arithmetic (add/sub/mul). The author sets each beat's state to walk a worked example column by column. | top: int|string, bottom: int|string, op?: enum, result?: string, carry?: object, active?: int |
| combine | Two groups of blocks sliding together to show addition as combining. | a: int, b: int |
| compare | Two groups of objects with a < > = "hungry mouth" sign that eats the bigger amount. | emoji?: string, left: int, right: int, sign?: enum |
| comparecards | Two number cards side by side to compare magnitudes. | a: int, b: int |
| compdec | Two decimals aligned by place value for comparing. | a: number, b: number |
| compfrac | Two fractions side by side (k1/n1 vs k2/n2) for comparing. | k1: int, n1: int, k2: int, n2: int |
| decgrid | A hundred-grid shading a decimal value (tenths/hundredths). | value: number |
| dechop | Multiplying/dividing a decimal by 10/100 — the point hops places. | from: number, factor: int, op?: enum |
| elapsed | Two clocks (start and end) showing elapsed time. | h1: int, m1: int, dh: int, dm: int |
| equiv | Equivalent fractions: a/b scaled by m to show why they are equal. | a: int, b: int, m: int |
| evenodd | Dots paired up to show whether a number is even (all paired) or odd (one left over). | n: int |
| fracbar | A fraction bar split into n parts with k shaded. | n: int, k: int |
| fracpie | A fraction as a pie and a bar: k of n parts shaded. | k: int, n: int |
| groups | A total shared into equal groups — division as sharing. | total: int, groups: int |
| longdiv | A long-division bracket walked step by step (Divide–Multiply–Subtract–Bring down). | divisor: string, dividend: string, quotient: string, quoSteps?: int[], rows?: object[], step?: int |
| multable | A multiplication grid that sweeps to the answer cell (row × col). | hint: object |
| numberline | A number line that hops from a start value — add/subtract or bond-up to a target. | hint: object |
| objects | A row of countable objects; counted-so-far light up one by one, with a running numeral. The counting/addition staple. | emoji?: string, n: int, highlight?: int, numeral?: int |
| perimeter | A rectangle with its border traced to teach perimeter. | w: int, h: int |
| placedigits | A number split into place-value columns (Ones | Tens | Hundreds…) plus its expanded form. | value: int |
| repeatadd | Repeated addition building toward a product (a + a + … = a × b). | a: int, b: int, run?: int |
| roundline | A number line showing which nearby multiple a value rounds to. | v: int, unit: int |
| shape | A polygon with its sides counted and named. | sides: int, name: string |
| skip | Skip-counting hops along a track (count by 2s, 5s, 10s). | step: int, count: int |
| story | A word problem read aloud; words reveal as Luna reads, with numbers and action words colour-coded. | words: object[], revealed?: int |
| symmetry | A shape/emoji folding along its line of symmetry. | emoji: string |
| table | A times table for n, revealing one fact at a time (skip-counting up the column). | n: int, reveal?: int |
| takeaway | A group of blocks with some removed to show subtraction as taking away. | a: int, b: int |
| tenframe | A ten-frame filled with counters — the bridge to making tens. | filled: int, showEq?: bool |
| unitladder | A unit-conversion ladder (big ↔ small, e.g. m ↔ cm) showing the ×/÷ factor. | big: string, small: string, per: int, n: int |
| volume | A box stacking unit cubes layer by layer to teach volume. | l: int, w: int, h: int |