⚙️ 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.

Authoring guide ↗

Boards — the interactive question UIs

A station's board is the activity a child plays. Each board's generator supplies the questions.

kindwhat it is
anglesAngles — 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.
areaArea — 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.
bondsNumber 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.
compareBigger 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.
countingCounting — 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-addsubDecimal + 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-compareCompare 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-convertFractions ↔ 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-placeDecimal 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-factsDivision 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.
elapsedElapsed 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-oddEven 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-addAdding 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-subTaking 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-addlikeAdd 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-compareCompare 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-conceptWhat 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-equivEquivalent 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-mixedMixed 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-mulwholeFraction × 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-unlikeMixed 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-addLong Addition — Multi-digit column addition with carrying.
long-divLong Division — Long division with the standard bracket algorithm.
long-mulLong Multiplication — Multi-digit column multiplication.
long-subLong Subtraction — Multi-digit column subtraction with borrowing.
moneyMoney & 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-conceptGroups & 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.
perimeterPerimeter — 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.
roundingRounding — 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.
shapesName 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.
skipSkip 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.
symmetrySymmetry — 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.
tablesTimes 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-onesTens & 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.
timeTelling 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-nrTwo-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-convertUnit 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.
unitsLength & 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.
volumeVolume — 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-1stepStory 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-2stepTwo-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-masterGrand 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.

kindwhat it isprops
adddecAdding two decimals, lined up on the decimal point.a: number, b: number
addfracAdding fractions with a like denominator: a/n + b/n.a: int, b: int, n: int
angleAn angle sweeping open to a given number of degrees.deg: int
areaA rectangle filling with unit squares to teach area.w: int, h: int
arrayA rectangular array of dots — multiplication as rows × columns.a: int, b: int
basetenBase-ten blocks: tens-rods and ones-cubes for two-digit place value.t: int, o: int
bigA single big numeral or label, for emphasis / answer-reveal beats.text: string, color?: string
clockAn analog clock set to a time, for telling time.h: int, m: int
coinsA tray of coins to count a money amount / make change.coins: int[]
columnVertical 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
combineTwo groups of blocks sliding together to show addition as combining.a: int, b: int
compareTwo groups of objects with a < > = "hungry mouth" sign that eats the bigger amount.emoji?: string, left: int, right: int, sign?: enum
comparecardsTwo number cards side by side to compare magnitudes.a: int, b: int
compdecTwo decimals aligned by place value for comparing.a: number, b: number
compfracTwo fractions side by side (k1/n1 vs k2/n2) for comparing.k1: int, n1: int, k2: int, n2: int
decgridA hundred-grid shading a decimal value (tenths/hundredths).value: number
dechopMultiplying/dividing a decimal by 10/100 — the point hops places.from: number, factor: int, op?: enum
elapsedTwo clocks (start and end) showing elapsed time.h1: int, m1: int, dh: int, dm: int
equivEquivalent fractions: a/b scaled by m to show why they are equal.a: int, b: int, m: int
evenoddDots paired up to show whether a number is even (all paired) or odd (one left over).n: int
fracbarA fraction bar split into n parts with k shaded.n: int, k: int
fracpieA fraction as a pie and a bar: k of n parts shaded.k: int, n: int
groupsA total shared into equal groups — division as sharing.total: int, groups: int
longdivA long-division bracket walked step by step (Divide–Multiply–Subtract–Bring down).divisor: string, dividend: string, quotient: string, quoSteps?: int[], rows?: object[], step?: int
multableA multiplication grid that sweeps to the answer cell (row × col).hint: object
numberlineA number line that hops from a start value — add/subtract or bond-up to a target.hint: object
objectsA 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
perimeterA rectangle with its border traced to teach perimeter.w: int, h: int
placedigitsA number split into place-value columns (Ones | Tens | Hundreds…) plus its expanded form.value: int
repeataddRepeated addition building toward a product (a + a + … = a × b).a: int, b: int, run?: int
roundlineA number line showing which nearby multiple a value rounds to.v: int, unit: int
shapeA polygon with its sides counted and named.sides: int, name: string
skipSkip-counting hops along a track (count by 2s, 5s, 10s).step: int, count: int
storyA word problem read aloud; words reveal as Luna reads, with numbers and action words colour-coded.words: object[], revealed?: int
symmetryA shape/emoji folding along its line of symmetry.emoji: string
tableA times table for n, revealing one fact at a time (skip-counting up the column).n: int, reveal?: int
takeawayA group of blocks with some removed to show subtraction as taking away.a: int, b: int
tenframeA ten-frame filled with counters — the bridge to making tens.filled: int, showEq?: bool
unitladderA unit-conversion ladder (big ↔ small, e.g. m ↔ cm) showing the ×/÷ factor.big: string, small: string, per: int, n: int
volumeA box stacking unit cubes layer by layer to teach volume.l: int, w: int, h: int