Files
hq/01-RESEARCH
jschoubben 4c8515507a 011: where a binding lives follows the scope, and a grant is not always a whole resource
Two questions asked directly, and the second collides with a rule in force.

One module on two nodes sharing a database corrects something stated flatly: the
binding is not "recorded on the assignment". Where it is written down FOLLOWS
THE SCOPE. A shared grant belongs to the module and every assignment references
the same one — which is the answer for two nodes wanting one database between
them. A per-instance grant belongs to the assignment. Same relation, two homes,
and which home is what makes two instances share something or not.

Several modules adding their own tables to one database is three needs wearing
one sentence, and a provider offers KINDS of grant rather than one: a database
for a consumer whose tables are nobody else's business, a read-only role for one
that needs to see what another holds, and a SCHEMA within a shared database for
the case actually asked about.

Loose tables in a shared database is what how-we-build §4 warns against in as
many words — several domains sharing one forty-five-table schema, which is why
work belonging to one context keeps having to be implemented in another. Not a
style objection; the observed cost, already paid.

A per-consumer schema keeps what the request wants and drops what §4 objects to.
Same database, same connection, same backup, and a cross-schema read remains
physically possible when genuinely needed. What it adds is ownership: migrations
touch one namespace, two modules cannot collide over a table name, and revoking
drops the schema rather than guessing which tables belonged to whom.

So the fault §4 names is still possible and no longer accidental — a
cross-context join becomes something somebody deliberately writes rather than
the path of least resistance. And revocation becomes answerable, which the
whole-database version never was.
2026-08-26 23:08:32 +02:00
..

01-RESEARCH

Investigations that have not yet hardened into design.

Structure

Each effort lives in NNN-descriptive-name/ and must contain 00-overview.md, carrying its state in YAML frontmatter and a prose summary below it:

---
status: active | graduated | abandoned
initiated: YYYY-MM-DD
touches: []          # design docs, subsystems or areas the effort bears on
became: []           # required when status is terminal — what it turned into
---

The prose says what is being investigated, why, and what it touches. It does not restate the status — status lives in one place, and two places is one too many.

Further documents in the same folder hold the work itself: notes, evidence, option analyses, draft designs.

Lifecycle

status Meaning
active Investigation in progress.
graduated Checked against 00-META, decided in 02-DECISIONS/, and specified in 03-DESIGN — see became:.
abandoned Stopped or superseded. Nothing is deleted.

An effort graduates by producing a decision record and a 03-DESIGN entry. It is abandoned in place — never deleted. What was rejected, and why, is the more expensive half to rediscover.

Starting and closing efforts is playbook territory: 00-META/process/01-research.md and 02-graduation.md.

Rules

  • Markdown only. Do not skip or reuse a sequence number.
  • Evidence, not assertion. An effort that measured nothing has not finished.
  • Research describes real observations but never identifies the mesh it observed. The shape of a finding survives anonymisation intact.