Records the module definition we worked out, and the naming rule at the end.
A module is one self-contained piece of software the mesh installs and manages. The software is its identity; capabilities, seats and provisioned resources are the relationships between modules, not what a module is — which is what binds it into one thing.
Three relationships: shared seat (shells coexist, one default), exclusive seat (i3/sway contend for the display), provide/require (the provider ships the provisioner; symmetric).
Interfaces are mesh-owned, providers adapt — a consumer depends on the interface, never a provider.
The naming rule — the interface is drawn at the consumer's real coupling: neutral where the coupling is thin (analytics, providers adapt); the protocol where the consumer speaks one (postgres-database/mssql-database/mongodb-database, swappable only among protocol-compatible engines, never across); never false genericity. "database" is not a capability — the protocol is. This generalises ADR 0027.
Not a module: libraries and control-plane contexts. A swappable machine mechanism (firewall) is a module; the host hardcodes nothing and runs where ufw/systemd/pacman/Docker don't exist (Android).
Records the module definition we worked out, and the naming rule at the end.
**A module is one self-contained piece of software the mesh installs and manages.** The software is its identity; capabilities, seats and provisioned resources are the *relationships between modules*, not what a module is — which is what binds it into one thing.
- **Three relationships:** shared seat (shells coexist, one default), exclusive seat (i3/sway contend for the display), provide/require (the provider ships the provisioner; symmetric).
- **Interfaces are mesh-owned, providers adapt** — a consumer depends on the interface, never a provider.
- **The naming rule — the interface is drawn at the consumer's real coupling:** neutral where the coupling is thin (`analytics`, providers adapt); the **protocol** where the consumer speaks one (`postgres-database`/`mssql-database`/`mongodb-database`, swappable only among protocol-compatible engines, never across); never false genericity. "database" is not a capability — the protocol is. This generalises ADR 0027.
- **Not a module:** libraries and control-plane contexts. A swappable machine mechanism (firewall) *is* a module; the host hardcodes nothing and runs where ufw/systemd/pacman/Docker don't exist (Android).
Supersedes ADR 0017 (domain grouping), refines ADR 0002.
https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
A module is one self-contained piece of software the mesh installs and
manages; the software is its identity, and capabilities/seats/provisions
are the relationships between modules, not what a module is. Records the
three relationships (shared seat, exclusive seat, provide/require), that
interfaces are mesh-owned and providers adapt to them, and the naming
rule: draw the interface at the consumer's real coupling — neutral where
the coupling is thin (analytics), protocol-scoped where the consumer
speaks a protocol (postgres/mssql/mongodb), never false genericity.
Supersedes 0017 (domain grouping — wrong axis), refines 0002, generalises
0027's protocol-not-product rule.
Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Records the module definition we worked out, and the naming rule at the end.
A module is one self-contained piece of software the mesh installs and manages. The software is its identity; capabilities, seats and provisioned resources are the relationships between modules, not what a module is — which is what binds it into one thing.
analytics, providers adapt); the protocol where the consumer speaks one (postgres-database/mssql-database/mongodb-database, swappable only among protocol-compatible engines, never across); never false genericity. "database" is not a capability — the protocol is. This generalises ADR 0027.Supersedes ADR 0017 (domain grouping), refines ADR 0002.
https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
Pull request closed