Write the contract, and the app appears. A service that answers
the mandatory endpoints registers itself in the dashboard and becomes
reachable for the assistant — nobody wires it up by hand.
The contract is not a document that hopes to be followed. It is
machine-enforced: appkit/conformance.py runs inside the test
suite of seven of the ten. Creating’s core is not in this snapshot at
all; the core and the trading fleet carry their own test suites instead. The
specification says so itself — where the prose and the code disagree, the code
wins.
Measured against the written specification, nine of the ten
meet the contract. The core — the hub that collects it — stays outside
by design, on its own port.
/api/summary always answers HTTP 200; the state lives
in a status field (ok · leer ·
fehler), never in an error code and never in a fake zero.
/api/actions carries the human-in-the-loop flow:
propose → approve or reject. The AI never approves its own action.
/api/account/export and /api/account/loeschen
implement the data rights — both demand fresh re-authentication, both
fail closed.
/api/audit records every action that has an effect.