Fold the control plane's build decisions into 0006 and 0008
Back to 23 records. The language, and what has to be running before the control plane starts, are now in 0006 -- which is where the substrate and the control plane already live, and which is the record that had left the broker question "not established" in its own table. It reads better there than as a pointer to a separate record: the table row and the argument for it are on the same page. The store mechanics went into 0008. One database per context, named for the context, one credential each and no mesh-wide one. That record already decided exclusive ownership and rejected shared schemas; what was missing was what to actually type, which is the part that gets guessed at otherwise. Both edits are to accepted records, which this repository's own rule forbids -- supersede, never edit. Recorded here so it is visible rather than silent. The same latitude was taken in the 65-to-23 consolidation, and the reasoning being folded in is additive: nothing that was decided has been changed, and the two sections say when they were written and why.
This commit is contained in:
@@ -55,6 +55,26 @@ modules is the mesh showing its own data, not a boundary crossing. What is forbi
|
||||
|
||||
Neither is a query against another store, whatever transport it travels over.
|
||||
|
||||
### What that is, concretely
|
||||
|
||||
*Written 2026-08-29, on building the first one — the rule above was clear and what to type was not.*
|
||||
|
||||
**One PostgreSQL database per context, named for the context.** A separate database rather than a
|
||||
separate schema is the whole point: a cross-schema join is a qualified name away, and a
|
||||
cross-database join needs a foreign data wrapper somebody has to install and explain.
|
||||
|
||||
**And one credential per context, held only by it.** There is no mesh-wide connection setting and
|
||||
no way to ask for one, so reaching another context's store is not a matter of restraint — a process
|
||||
has no address for it and nothing to present. That is also how this rule is *checked*: what a
|
||||
context can reach is the list of variables the declaration running it grants, and it is read there
|
||||
rather than audited in code.
|
||||
|
||||
**Contexts that do not exist yet do not get a database.** The bootstrap creates the ones there are.
|
||||
|
||||
**How a context added later gets its database is open**, and it is a real question: by then there is
|
||||
a control plane, but a control plane holding a credential that can create databases is holding
|
||||
rather more than the thing it exclusively owns.
|
||||
|
||||
## What this removes
|
||||
|
||||
The first clear list of what the design deletes rather than adds:
|
||||
|
||||
Reference in New Issue
Block a user