The contract
11 / 11 · from docs/mpa.json in the full document · PDF
Every capability of Mabat, against the areas of the MPA specification, with the rules that define it. The matrix is drawn from docs/mpa.json when this document is built, so it cannot drift from the index; the index cannot drift from the specification, and neither from the crates, because a test fails when the derive accepts an attribute, or the crate has an error variant, that the index does not list.
Reading it. A number is a rule of its column's area: under VIEW, 9 is MPA-VIEW-9. A capability's row says where its contract is; a column says which capabilities an area of the specification serves. The areas are the sections of the specification: concepts, databases, declaring views, enums with data, loading, query planning, overrides, JSON and selections, GraphQL, writing, and schema snapshots. Rules that define details — the errors, the decoding of a NULL, the order of children — are in the specification without a row of their own.
Written for tools. docs/mpa.json lists every capability, attribute, function, error and diagnostic with the rules that define it, and llms.txt at the root of the repository points assistants to it. Rule identifiers are never reused: a removed rule keeps its number, marked removed MPA-DOC-2. A code review, an issue or an assistant can cite MPA-WRITE-9 and mean one sentence, in one version of the contract.
What is not there. Section 12 of the specification lists what Mabat 0.1 does not do, so tools do not generate code that relies on it: a unit of work, lazy loading, writes through overrides, filters on embedded columns, GraphQL mutations, pipelining, schema generation or migrations — views describe existing tables — and saving only what changed in a graph MPA-NOT-3 to MPA-NOT-10. A rule that is lifted keeps its number, marked removed: keys generated by the database were MPA-NOT-1, and saving graphs MPA-NOT-2.