The chain
One lesson, six hops, and every hop can corrupt it
It is a Tuesday. A curriculum designer asks for a lesson on one third-grade standard, for a section reading roughly two years below level. By Friday it is an assignment in a real course. Six weeks later it is a row in a readout that says whether it taught anything. Step through every hop it makes.
A contract, not a prompt
A curriculum designer asks for a lesson on one third-grade standard, for a section reading roughly two years below level. The request carries the district, the environment, the adopted framework and its version, the grade band and the reading target.
Leave the framework version out and the artefact makes a claim nobody can date.
Notice how little of that is generation. The model call is the easy part, and it gets easier every quarter. The hard part is the claim that this artefact teaches this standard, to this child, and that you can still prove it in March.
The squeeze
Writing the lesson stopped being the expensive part
Every argument about AI in education is still framed around whether the model can write a decent lesson. It can. That question closed, and closing it moved the bottleneck somewhere much less comfortable.
- Generation is now the cheapest step in the pipeline. A unit that cost an instructional designer three days costs a few cents of inference. When supply becomes effectively free, the scarce resource is not content — it is a reason to believe any particular piece of it.
- Verification did not get cheaper at the same rate. A human still has to look. If your pipeline generates a hundred lessons a day and a teacher can meaningfully review six, you have not built a content system. You have built a queue.
- The regulatory floor moved up. The long-standing US rules on children’s privacy and student education records were always there; what is new is a set of state student-privacy laws with real penalties, and — in the EU — education named explicitly as a high-risk application, which turns “we log our prompts” from good practice into an artefact somebody will ask to see.
- Trust is per-district and it is spent in one incident. One inappropriate image in one third-grade classroom does not produce a bug report. It produces a board meeting, a press cycle, and a district-wide ban that outlasts the fix by two years.
↳ The capacity slider is the same in both modes. Only what it is aimed at changes.
The constraint is real and the panic is not. You are not competing on whether the model writes well. You are competing on whether a curriculum director can defend using you — and the gate is not there to catch a model that writes badly. It is there so that the scarce hours of the people who can catch things get spent on the lessons that need them.
The spine
Every downstream claim is a bet that this artefact teaches what it is labelled
This is the sentence to carry through all six posts. Coverage, mastery, pass rates, “aligned to 100% of the third-grade standards” — none of them are measurements of learning. They are measurements of labels, and a label is whatever your alignment logic decided. Get that decision wrong and the arithmetic downstream is perfect and meaningless.
- Under-align and coverage lies in your favour. A lesson that genuinely teaches three objectives is tagged with one, so your coverage report shows gaps that are not there and your team generates redundant content to fill them. Expensive, but visible.
- Over-align and a child gets a lesson she cannot access. An item tagged to one standard that actually requires the reasoning of another lands in front of a student with no prerequisite for it. She does not report a mis-tag. She reports, in the only way available to her, that she is bad at maths.
- The catastrophic case spreads. A district mapping links a local code to a national one, another links that to a state framework, and a single bad alias welds two strands together. Now first-grade units inherit third-grade items. Nothing errors. The unit just gets strange.
- Re-alignment has to be an ordinary operation. Which means every alignment claim keeps its provenance — who or what asserted it, from which framework version, with what confidence — because you cannot retract a claim you cannot explain.
The silent version is the one to fear. Nobody files a ticket saying “the alignment layer is over-tagging.” They say the third-grade unit feels hard this year, and it feels hard for a year.
The leak
You can generate perfectly and still lose half of it at the importer
Suppose the alignment is right. The content is right. Gated, reviewed, approved, packaged and pushed into a district’s learning-management system. The importer accepts it and reports success. Then a teacher opens it and the equations are broken images, the interactive sort is a dead link, and two of the six question types came in as multiple choice.
Fidelity rate — elements submitted versus elements that render correctly in the student view — is the number that tells you whether the entire pipeline was worth building. Everything upstream is invisible to a classroom until it survives an importer you do not control.
- It fails silently and gradually. A package-format change, a new block type your authoring tool emits, a platform release that tightens a validator. The rate slides by a third over two months and no alert fires, because nothing is broken. The import succeeded. It just succeeded at delivering less than you sent.
- The absolute number is not the alarm. Fidelity differs enormously by platform and by content type. A text-and-image lesson round-trips near-perfectly; an interactive one does not. What matters is a relative drop against that pair’s own baseline.
- Most of the loss happens before the upload. An element the package format cannot carry was lost the moment you authored it, not the moment you sent it. That loss belongs to your editor’s block palette, and it should be visible there rather than discovered by a teacher on a Monday.
Post 5 owns the mechanics. For now, know the name of the number.
Wrong turns
Two reasonable answers that give away the thing you are trying to own
- “Just put a text box in front of a frontier model.” It works, and it is the fastest possible path to a demo that makes people gasp. The cost is that nothing is an artefact. There is no version graph, so a regenerated lesson is a new unaudited object with no relationship to the one a teacher approved yesterday. There is no provenance, so when an item turns out to be wrong you cannot find its siblings — the other four hundred items generated from the same flawed source passage. And there is no gate that survives editing, because the safety check ran once, at generation, and every subsequent edit routes around it.
- “Just license courseware.” Often correct. Buying it does not exempt you from any of this. The vendor gives you content and an integration; you still own the alignment semantics — what counts as covering a standard, whose mapping is authoritative, when a framework revision invalidates a tag — and you still own the safety policy and the review workflow, because those are claims you are making to a district about children. The point of building a small pipeline is to know what you are buying, and what you are still on the hook for after you buy it.
Governance
The gate belongs at publish, and deletion reaches the model too
A guardrail that runs only at generation is not a guardrail — it is a default. The moment a teacher can edit a block, swap an image, add her own text or regenerate one section, every path around the generation-time check is open, and none of them is malicious. She is doing exactly what your product told her to do. Enforce at the narrowest point every path shares, which is publish, and model publishability as a join rather than a check.
Deletion is the mirror image, and it is worse here than in any other domain. A student-data deletion that stops at your database is not a deletion — the lesson is live in three courses, a grade passback wrote a score into a gradebook you do not own, and the child’s free-text answer is sitting in the evaluation set you used to benchmark last quarter’s model. That last one cannot be undone, which is why the design decision — student text never enters a training corpus or a retained eval set, ever — has to be made before the first fine-tune exists rather than after the first request arrives. Post 4 owns this, and it is a data-model decision, not a compliance chapter.
What the series builds
Six posts, one stage each, each with a runnable tag on the same open-source repo.
A request that is a contract rather than a prompt, generation as a queue consumer, and immutable content-addressed blocks that make a content recall a Tuesday afternoon instead of a quarter.
Standard codes that normalise, alignment claims that carry a class and a provenance so they can be retracted, and the crosswalk collapse that swallows a whole strand and reports 100% coverage.
Four measurements hiding inside one word, one rubric loaded by two runtimes, and the family of evaluation bugs that make a generator look excellent offline and mediocre in a classroom.
Publishability as a join the editor cannot route around, every teacher edit recorded as an observation, and a deletion that fans out — including to the one destination it can never reach.
Diffed publishes that update in place instead of stranding student work, capability descriptors per platform, and the number that says how much of your lesson a child can actually use.
Randomisation at the level a classroom actually operates on, a power calculation with the clustering priced in, and a readout that knows whether it is answering superiority or non-inferiority.
This is a teaching-grade reference implementation, not a product. The parts it shows you are the tractable parts: a queue consumer, a component solver, a rubric in a file, a diff engine, a hash-based assignment. The hard part in any real company is the organisational agreement about what “covered” means — whether an inferred alignment counts, whether a teacher’s edit means the content was wrong or that she has a strong voice, whether a photograph of a classroom is a resource or a child’s data. Every one of those is a curriculum decision wearing an engineering costume. Build the pipeline so that when the answers change, you can change them in one place.
Explain it back
Reveal a model answer
The retrieval change altered which codes the generator asserts alignment against, and the district’s local codes had never been mapped to anything. With no authored mapping available, the alignment layer fell back to embedding similarity — an inference — and wrote those claims into the same field as human tags, so the coverage report counted a guess and a certainty as the same thing. Coverage went up because the denominator changed, not because more was taught.
The falling edit rate is the trap. Teachers edit what looks wrong, and content that is shallow but plausible does not look wrong; it reads fine and skips the hard part. A drop in edit rate is therefore ambiguous by construction — it means either that quality improved or that the errors got harder to see, and nothing in that metric alone distinguishes them. “Feels thinner” is the more reliable instrument, because the director is reporting the absence of something, which is exactly what a metric built from present artefacts cannot see.
The fix is structural rather than a better embedding: alignment class is a separate field from confidence, coverage is reported per class so an inferred claim can never be counted as a covered standard, and a framework is not adoptable until its mapping has been authored and reviewed. The second-order consequence is the one to flag before anyone reads the dashboard — every historical coverage number was computed under the old framework, so any trend line spanning the change is measuring your own migration.
The request envelope, the queue, and the immutable blocks everything else reads from — every stage at its thinnest honest version, so the later posts have somewhere to land.
Clone it and run it →