What "the backend is a mock" means here
Published
Every project that cannot afford a GPU has a moment where it is tempted to make the demo look like the product. This one wrote a rule instead: never fake a run. The backend is a mock, and the mock has to say so in the banner, in the machine-readable metadata of every response, and in the output text of every result.
The mock has to pass the real gate
There is an obvious cheap way to build a mock: invent a model id that is easy to route and never touch the policy engine. That was rejected. The mock runs under a real, eligible model id from the registry, so the scheduling decision it exercises is the real one. The id is a routing identifier and nothing more: it is not evidence that a model loaded, and the project says that in the same sentence it mentions the id.
That leaves two named defects rather than one. Inventing a registry row for a mock is a defect, and so is announcing a model the policy cannot route. A configuration value that names an ineligible model is refused loudly at startup, which is the only behaviour that keeps the mock from quietly proving something the product cannot do.
A labelled fake at every layer
The same rule repeats wherever the project describes itself. The architecture document marks every component with what it is rather than what it will be: the coordinator and the worker runtime are labelled implemented, and the settle path is exercised over real HTTP with two contributor processes — while the same page states that none of it means real inference ran, because the only backend is the labelled mock. The status table goes further and dates its own numbers, saying the gate results were measured on the assembled tree by running the commands, and that the mock label appears in the banner, in the response metadata and in every result text.
Even the mock has an interface it must not exceed. A device may only be offered a job for a model it already holds locally, so a mock that pretended a model had been downloaded would be describing a queue with extra steps rather than a swarm, and the honesty rule and the scheduling rule turn out to be the same rule written in two places.
What the label looks like from outside
- The backend is named dev-mock in the banner, in the response metadata and in the output text, so a reader who never opens the source still sees it.
- It is a backend label and never a region. The capability validator requires a two-letter country code, so a device announcing dev-mock cannot register at all.
- Two components shipped that placeholder as a region before it was caught, and neither could register. The honest version of that bug is that a mock label leaked into a jurisdiction field, and the fix was validation rather than documentation.
What the mock has and has not proven
The acceptance test is the part that does not rot. It drives a real coordinator, two real contributor processes and a real dashboard over loopback HTTP, with no test double standing in for the product, and it passes on the assembled tree. So the plumbing is exercised: registration, dispatch, claim, result, verification, settlement, the policy refusal path and the dashboard reading live values.
The same repository lists what that green does not mean. There is no discrete GPU on the build machine and no weight loader in the repository, so no real inference ran anywhere and the only backend is the mock. The browser worker page was never driven in a real browser, because the project permits no browser-automation dependency, so its rendering and layout are unmeasured. There is no TypeScript compiler in the repository either, so the interface types catch drift only for someone who runs a type check and catch nothing at runtime.
Two listed behaviours deserve their own line, and neither is a count. The end-to-end script has been observed to fail on the dashboard check that renders the live credit balance, so the project records the acceptance test as not always green and a single red run is not automatically a regression. And the registry and the ledger both live in memory, so a restart forgets devices and credits; there is no persistence claim anywhere.
Why the limits are part of the product, not an apology
A reader evaluating compute from a mock will get mock-sized numbers, and the specification says the amounts are set so the mechanism is testable rather than so they are economically final. A mock job reports a short duration, so the payout it produces is correspondingly small: the honest size of a mock job, not a rate card.
Putting all of that on the page costs nothing and changes what the thing is. A demo that says which lines it does not prove is a specification with a running check. One that stays quiet is a marketing page with a process id, and it is a much worse thing to be caught out by later.
Zdroje
Each link goes to the source the post cites. Where a source does not state a fact, the post shows it as unverified instead of filling it in.