--- import platform from '../../data/platform.json'; /** * "Where the game stops and the platform starts" — the third of `/architecture/`'s diagrams * (D21). * * The other two draw runtime shapes. This one draws a code boundary, and it is here because * it is the claim the whole project rests on: that a community platform can be built once * and pointed at any game. An evaluator has every reason to read that as marketing, so the * page draws the seam and then says plainly what does and does not prove it — one module * exists, the second is a paper exercise, and the exit criterion for calling the contract * proven is written down (§2, and the entries `/modules/` renders from `notBuilt.mjs`). * * The Module API version is read from `platform.json` like every other number on this site * (§12). It is the one place a version genuinely belongs in this diagram: the seam is * literally a version check, and a module whose declared range does not match refuses to * load rather than half-loading. */ ---

Where the game stops

A seam, with a version on it

The core site does not know what a shard is, what a guild is, or that Ultima Online exists. Everything that does lives in an installable module on the other side of a declared interface — which is what makes "put your game on it" a shape rather than a slogan.

A module declares which versions of the interface it speaks. If that does not match what the site offers, it refuses to load and the site comes up without it.

The module brings its own everything

Not just screens: its routes, its database tables, its navigation rows, its slice of the OpenAPI spec and its own prebuilt client bundle. Installing it is a paste in the admin panel or a line in your environment — never a build step, because production runs an image you pulled, and an operator who has to compile something has been handed a maintenance job rather than a feature.

Failure is contained by design

A module that will not load is marked as failed and the site starts without it. Disabling one is a kill switch, not a visibility flag — its routes stop answering and its live connections close. Uninstalling keeps the data, and destroying the data is a separate, deliberate choice made in its own dialog.

Teams is the shape of the contract

Core owns the Teams primitive — the roster, the forum, the notifications, the voice channel — and does not own the word. A Team cannot be created in core at all; it arrives from the module, which is why the UO module calls them guilds and builds those pages itself. That is the pattern the whole interface is built on: core supplies the machinery, the module supplies the meaning.

What this does not yet prove

One module exists and it is Ultima Online. A second, for a different game, is a written dry-run that was deliberately never implemented — it exists to test whether the contract generalises on paper. Until somebody builds the second one, the seam is a well-argued design rather than a demonstrated one, and this site says so wherever it comes up.