The content bake is a build step again, and the gate judges what ships

Producing an assembly and proving it works are two different jobs, and until now one command did both: the platform's CI bake stood up an in-process mesh, imported the shipped documentation content, let that mesh compile every NodeType, and collected whatever it produced. It was a headless mesh rather than a serving portal, but it was still the runtime doing the compiler's work — mesh startup, the hub scheduler, and one activation per type, on every release.

Those two jobs are now separate.

The bake is a build step. mw-compiler compile <root> --output <dir> reads the node tree, compiles it with the extracted toolchain and writes the same bundles as before. There is no mesh anywhere in its path — no builder, no import, no hubs — and that is asserted structurally rather than believed: a test walks the call graph of the shipped binary and fails if the bake reaches anything that builds a mesh, with the gate's own path as its control.

The gate consumes that bake. The mesh still runs, because rendering a page and executing a Tests area are genuine runtime behaviours — but it now adopts the baked assemblies instead of building its own. So the bytes that render, and the bytes whose tests run, are the bytes that will actually be published. Previously the release gate proved that a private recompile of the same sources worked, and then shipped different ones.

Two things are refused rather than tolerated, because both would otherwise pass silently: a bake addressed to a different framework build than the one checking it (every assembly would be quietly declined and the gate would compile the tree itself, green), and a run that consumed less of the bake than the bake offered.

Along the way this uncovered a race worth naming: adopting a pre-built assembly has to write the node it belongs to, and that write woke the very machinery that starts a first compile — so an adoption regularly finished, correctly, and was then overwritten milliseconds later by a compile it had been trying to avoid. Every log line said the adoption had worked, because it had. Adoptions now hold that machinery off until they are done, which means pre-built assemblies are actually used when content is installed — on a running instance as much as in CI.

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.