What the engine checks, what it models, and what it refuses to claim
Every figure on this page is read from the code that produces it. Where a claim is not yet backed by a measurement, it is listed below as pending rather than written into the marketing copy.
The 18 pedagogical gates, across 11 categories
Every generated lab is checked against this list, and each gate is written here as the question it asks. A gate that could not apply to your lab is reported as INAPPLICABLE. Applicable means an assertion actually executed, not that a candidate existed, so a gate that inspected nothing lands in the list of checks that did not run rather than in the list that passed.
assessment-alignment
- ANSWER-LEAK Does any activity hand over its own answer before it is asked?
- DISTRACTOR-QUALITY Is every wrong answer a real candidate rather than filler?
- POSITION-BIAS Can a learner score by always choosing the same option index?
- ASSESSMENT-COHERENCE Does the lab assess what it actually taught?
feedback
- DISTRACTOR-QUALITY Is every wrong answer a real candidate rather than filler?
- FEEDBACK-SPECIFICITY Does a wrong answer get diagnosed and corrected, not just marked wrong?
pedagogy
- HINT-LADDER Do the hints climb from orientation to scaffold without leaking the answer?
- DEPTH Does the prose teach judgement, or only state facts?
fidelity
- ASSESSMENT-COHERENCE Does the lab assess what it actually taught?
- OBJECTIVE-COVERAGE Does the lab deliver every objective it promised the educator?
cognitive-level
- OBJECTIVE-PROGRESSION Do the objectives climb, or restate one demand four times?
- BLOOM-SPREAD Is the spread of cognitive demand the one this level expects?
- LEVEL-AUTHENTICITY Is this the level it claims, or a shallower lab with the verbs swapped?
interactivity
- LEVEL-AUTHENTICITY Is this the level it claims, or a shallower lab with the verbs swapped?
- VARIETY Does one activity format dominate the lab?
domain-authenticity
- DOMAIN-AUTHENTICITY Does the lab make this discipline's reasoning moves and avoid its red flags?
redundancy
- REDUNDANCY Does any chunk teach what an earlier chunk already taught?
- TERM-REDEFINITION Is a term formally defined more times than a recap justifies?
volume
- FILLER Does the lab spend a learner's minute without teaching anything?
- BLOAT Is the lab the shape of the material it was made from?
accessibility
- FIGURE-PROVENANCE Is every figure themed, labelled and free of executable content?
technical-portability
- FIGURE-PROVENANCE Is every figure themed, labelled and free of executable content?
The safety overlay is counted separately
What is checked but holds no gate id
Why the list is longer than the count
What this does not do
Teaching level is modelled, not decorated
All 8 RQF and FHEQ levels carry their own demand profile: how much scaffolding is given, how much ambiguity is tolerated, how many reasoning steps a task may take, and how much a learner is expected to justify. The level also weights which activity types a lab reaches for.
Level 1 - GCSE foundation (grades 3-1)
Remembering - recognising and recalling everyday facts, terms, and simple one-step procedures.
Level 2 - GCSE (grades 9-4)
Remembering and understanding - describing, summarising, and applying routine methods in familiar contexts.
Level 3 - A-level / BTEC National
Understanding and applying - explaining mechanisms and applying methods to structured, unfamiliar problems.
Level 4 - First-year undergraduate / HNC
Applying and analysing - using disciplinary techniques accurately and beginning to break problems into parts.
Level 5 - Second-year undergraduate / HND
Analysing and early evaluating - comparing methods, appraising evidence, and justifying choices between alternatives.
Level 6 - Bachelor's with honours (final year)
Evaluating and synthesising - critically weighing competing positions and integrating sources into a sustained argument.
Level 7 - Master's
Evaluating and creating - critically appraising research and designing or reframing approaches under uncertainty.
Level 8 - Doctoral
Creating - originating, defending, and extending knowledge at the discipline's frontier.
Discipline is modelled too
21 UK discipline packs, each with its own referencing standard and worked citation form, its own reasoning moves, and its own preferred activity mix. A law lab and a nursing lab do not differ only in their adjectives.
The six high-agency families
17 activity types, one display path
Evidence is authored, not inferred
An assessed activity records whether its objective mapping was written at generation time or matched afterwards by lexical overlap. The two are not the same fact and the document no longer stores them as if they were.
The hint ladder has 3 named rungs
A further reading must state its provenance
Source fidelity is measured in both directions
Small cohorts are withheld, not rounded
How long generation takes
Generation is bounded by a 300 second wall clock. A run that cannot finish inside it stops and says so; it does not keep spending and it does not hand back a partial lab dressed as a whole one.
What this does not do
The public vocabulary
Every activity word this site uses names something the engine can produce. Words that had no referent were given one rather than deleted, because the thing they described was real. No activity type the engine can render is left without a public word.
- challengeexercise, scenario, investigation, errorRepair, prioritization
- An activity where the learner produces or decides something rather than recognising an option: a marked exercise, a branching scenario, an investigation, a fault to repair, or a set of competing priorities to resolve.
- case studyscenario, investigation, dialogue
- A situated activity built from one worked case: a decision path, an evidence hunt, or a conversation the learner steers.
- practice taskexercise, numeric, fillGap
- A task the learner works through and is marked on: a structured exercise, a numeric calculation, or a cloze passage.
- quick checkmcq, matching, ordering, classify, fillGap, numeric
- A short marked check with an authored answer key, marked by the machine rather than by the learner.
- quizmcq, matching, ordering, classify, fillGap
- The recognition family: choose, pair, sequence, sort, or complete against an authored key.
- guided practiceexercise, branch, fillGap
- A supported attempt where the structure is given and the learner supplies the reasoning.
- branching decisionbranch, scenario
- A choice that changes what the learner meets next, rather than one that is simply right or wrong.
- experimentexperiment
- A parameterised model the learner varies, with a transfer question marked against the model's own arithmetic.
- error repairerrorRepair
- A worked artefact containing exactly one authored defect, which the learner must locate and correct.
- investigationinvestigation
- A set of evidence items with authored roles, from which the learner must assemble a sufficient case.
- prioritisationprioritization
- A capacity-constrained choice between options with authored costs and impacts.
- dialoguedialogue
- A multi-turn exchange where each of the learner's replies carries an authored quality.
- reflectionreflect
- An unmarked written response the learner keeps, never scored as a correct answer.
- diagramfigure
- An application-drawn figure. The model supplies the relationships; this application owns every coordinate.
- explanationtext
- Taught prose, optionally opened by a prediction prompt before the passage is revealed.
- smart hintChunk.hintLadder
- One rung of the three-level hint ladder: orientation, then structure, then scaffold. The scaffold rung declares what it must not reveal.
- readingLab.readings
- A further-reading entry carrying a tier (foundation, core, extension) and a provenance that states whether it was found in your upload, is a suggested search topic, or is model generated and unverified.
- objectiveLab.objectives
- A stated learning objective with a Bloom level, which assessed activities cite by id.
- misconceptionWrongAnswerDiagnosis
- The authored reason a particular wrong answer is tempting, and what to do next about it.
Claims we corrected
An audit of this site classified 35 public claims against the code behind them. These 11 were changed, and here is what each one used to say.
SCORM 2004 3rd Edition is NOT offered.
The landing page rendered 'SCORM 2004 3rd Edition' as a selectable export tile. No third builder has ever existed: the route enum has two values, the package builder is a binary branch, and the manifest module builds 1.2 and 2004 4th Edition only. The page also contradicted itself, since the announcement bar correctly said 'SCORM 1.2 and SCORM 2004'. The tile is gone and the list is now derived from the enum. This is a capability the product genuinely does not have, so the claim was withdrawn rather than built: a 3rd Edition manifest builder is a change to src/lib/scorm/**, which this workstream does not own.
EngagedLab has 17 activity types, every one of them draws the same markup for an educator editing it and a learner meeting it, and an answer is marked by the same code in the browser and in an exported package.
The site said '11 activity types' against a seventeen-member union, while a provider comment said 'eleven' over a list of seventeen and a repair hint said 'fourteen'. The marketing UNDERSOLD by six, and the six omitted are the higher-order families that substantiate the site's weakest-supported claims. The count is now derived.
Every activity word the site uses names something the engine can produce and a function can count.
Marketing had invented a vocabulary layer (challenges, case studies, smart hints, practice tasks, readings) with no referent in the engine, so no claim about it was verifiable even in principle. The words are kept and given referents rather than deleted.
An ASSESSED step is not publishable without a three-rung hint ladder (orientation, structure, scaffold) whose scaffold rung declares what it must not reveal.
The copy said 'Every generated step carries a three-level hint ladder'. The schema was a CEILING with an empty default (zero hints validated), no quality gate read hints at all, and the tightening pass was instructed to 'shorten hints to a clause'. The universal quantifier could not survive any adversarial check. Enforcement is on ASSESSED chunks, so the copy now says assessed. A reflection step does not need a hint ladder and never did. CORRECTED A SECOND TIME, for the verb rather than the quantifier: 'carries' is present tense about something generation does not do. Measured against a real offline run of the pipeline, 0 of 7 chunks (both assessed ones included) came back with a tiered ladder; every one was flat, hintLadderOf reported legacy-flat, and no rung declared anything. This claim is now about what the contract REFUSES, which is what its own requires always said. The producer has since landed (hint-ladder-in-generated-labs, backed): the surfaces that said generation writes the hints flat now say what it writes and what it refuses, because a disclosure left standing after the capability ships understates the product in the same way the original sentence overstated it.
A further reading is not accepted unless it states its provenance: found in your upload, a suggested search topic, or model generated and unverified. A suggested search topic is not a citation.
The claim, and the feature card added for it, read 'A further reading states its provenance', in the present tense, about a field nothing in the pipeline writes. Measured against a real offline run this wave, readingsOf on a generated lab returns an empty array and publishabilityIssues raises PUB-READINGS. The provenance rules themselves are real and enforced, so the claim is kept and narrowed to what it always tested: what the contract refuses. The card and /methodology then said generation did not write the list yet. The producer has since landed (readings-in-generated-labs, backed), so both now say what generation writes and the one rule it never breaks: no invented reference.
Every lab is checked against 18 named pedagogical gates across 11 quality categories, and the report says which of them did not apply.
The homepage said 'Every lab is quality-checked' and named six categories, with no number and no way to check it. For a short, low-level, objective-free lab a majority of gates report inapplicable, so the sentence was true and uninformative at once. The count is now published and derived, and the methodology page states plainly that an inapplicable gate is not a passed gate.
A generation finishes inside 5 minutes or stops and says why.
The headline said 'in 2 Minutes'. Nothing measured generation duration in either direction, and the engine is budgeted to 300 seconds, two and a half times the advertised figure, with a single retried model call allowed to spend 120 seconds of it. The headline now states the deadline the engine actually enforces. It is deliberately not presented as a typical time.
Every destination the public navigation offers exists.
Five nav destinations did not resolve, two of them the highest commercial-intent links on the site. A rewrite table inside the nav component later hid them by sending 'For Educators' to the upload form and 'About' to a testimonial anchor, which is a 404 the visitor cannot see. 8 real pages now exist and the rewrites for them are gone.
Any figure on the site that was not measured says so.
The cohort mockup labelled its own figures 'Illustrative cohort preview' while the hero's animated output counters, the more prominent and more animated block, carried no label at all. The site was applying its own honesty standard to one surface and not the other. Both now use one constant. CORRECTED AGAIN for the third figure: the hero's '250 XP Earned' card is fabricated too, and it is a positioned sibling of the labelled panel rather than a child of it, so it was outside the label and outside the requirement, which said 'both panels' under a claim that says 'any figure'. The subtitle beneath it was made true in the previous wave; the number above it was not labelled until this one.
A complete example lab is reachable without an account.
'See Example Labs' appeared in three placements and every one linked to a single hand-authored biology lab, at one level, in one discipline, for a product whose stated differentiator is discipline and level awareness. The copy now matches the count, and the count is derived from the index.
The pricing section says whether paid plans are on offer, and when they are, shows the plans Stripe holds at the price Stripe charges.
The section told every visitor, in every billing state, that the application did not present a card checkout or promise a paid plan. That is false once STRIPE_MODE is test or live. It now says so only while billing is switched off.
Claims we are not making yet
These capabilities are being built. Nothing on this site claims them, and each one has a test that stays red until it is true.
A representative source generates in a measured median time.
PENDING ON THE MEASUREMENT, NOT ON THE CODE. report.ts computes a nearest-rank p50 and p90 and carries a `basis` of mock, cassette-replay or live, refusing to call anything but a live figure an educator's wait. A live corpus run exists (2026-09-23, docs/generation/live-benchmark.md), and it measured two engines that no longer generate labs here: one took p50 277.2 s and p90 289.3 s over 13 labs, slowest 326.1 s, and the one before it took p50 174.0 s over 20 labs. No later engine has been measured over the corpus: the only live observation of one is a single generation of the 2,705-character sample material, at 111.0 s on 2026-10-05, and one lab is not a median. A replay of the recordings takes under a second, so no figure can be taken from a replay either. Until a live corpus run of the current engine is committed, the headline states the deadline that the budget enforces and no surface states a typical time. The cited test asserts both halves of that, and asserts them behaviourally rather than by looking for the word `p50` in a source file, which is how this probe once went green having checked neither.
Example labs generated by the engine span at least three disciplines and three levels.
MEASURED ON 2026-10-06, not assumed. EXAMPLE_LABS holds three labs: the hand-authored Biology demo at Level 3, which counts for nothing here, and two GENERATED labs (Computing & Computer Science at Level 3, Engineering at Level 2). Each is the pipeline's own output with every model call answered by a live recording of gpt-5.6-terra and gpt-5.6-luna made on 2026-09-23, committed with its provenance and a sha256 under src/lib/claims/example-labs/ and served at /examples/[id]. Generated coverage is therefore 2 disciplines and 2 levels against a bar of 3 and 3. The recording this entry used to say was owed exists: three corpus recordings that would each add a third discipline and a third level (health-l8, humanities-l6 and law-l6) replay with zero misses. What is owed is building one of them into an example with scripts/bench/build-example-labs.mjs and committing it the same way. The two engine fallbacks the recording run advised fixing first, the fallback section stub and the dialogue constructor that spoke a heading as a turn, are both fixed. Both committed examples are an earlier engine's output: the computing recording still replays with zero misses, but the engine now builds a different lab from it, and the engineering recording no longer replays on the current prompts, so that example cannot be rebuilt until it is re-recorded. Committing output from the offline stub would be worse than no example: it emits byte-identical canned structures that pass every gate, so it would look like proof and be the opposite.

