Community Coliving

Module unit

Entitlements and Config

The configuration kernel: draft, atomic versioned publish, rollback, fail-closed entitlements.

Overview · Modules · Entitlements and Config

What it is

Where the platform's shape stops being code

This unit is the configuration kernel: the place where the platform's shape stops being code and becomes data. The tenant's entire product shape is authored here as configuration, not compiled in; the classes of configuration are defined once, in the data dictionary. An admin drafts a change, the draft is validated, and the whole thing publishes as one atomic versioned set. Every surface in the product renders the published set and nothing else; drafts never leak into what anyone sees. Rollback is a forward roll: reverting means publishing a new set that restates the old truth, and the rollback path never edits a prior version.

We built it this way because the alternative is the one every platform team knows: behavior scattered across code branches, feature flags, and environment switches, where answering "what is actually on for this tenant" requires an archaeologist. We wanted one answer to that question, and we wanted it to be data an admin can change without a developer. That is the configurability-without-code quality goal made concrete: the same codebase serves many tenant postures because posture is configuration, not a fork.

The unit also owns a load-bearing safety property: entitlement resolution is fail-closed at one choke point. When a surface, a scheduled job, or the agent asks "may this tenant do this", the answer comes from one place, and when that place cannot say yes with certainty, the answer is no. The composed module set is the one switch, and switching a module off means dead server-side: its writes refuse, its scheduled jobs deactivate, its notifications drop. Off that only hides a surface is not off, and we do not ship it.

The questions it answers

For the operator and the admin

Scope and boundaries

What it owns, and what it does not

The unit owns configuration authorship, validation, the versioned publish, entitlement resolution, and a read-only truth view of every switch. It does not own the behaviors it switches: each module owns its own capability and merely consults this unit for permission and shape. It does not own identity or membership; the identity provider owns who a person is and which organization they belong to, and this unit owns what that organization's product looks like and what it may do. The lane fork also lives outside it: the internal and self-serve lanes are separated at the infrastructure layer, and within each lane this unit shapes every tenant the same way.

What it is NOT

It is not a feature-flag service bolted on the side; it is the single definition of the tenant's shape, and everything else defers to it. It is not an admin panel in the sense of a bag of toggles; changes travel as validated, versioned sets, not individual switch flips. It is not identity: authentication and membership live with the identity provider. And its configuration schema is not part of this package.

Withheld by design Tier 2

The configuration schema itself is held at Tier 2.

The contract

The unit's public shape

What it is responsible for, how it is written to, what it announces, what it guarantees, and what it refuses. The configuration schema, field lists, and payloads are held at Tier 2.

Responsibilities

The write door

Like every module, this unit has one write door, and it admits a small set of business-named commands. At this altitude the door admits three kinds of action:

Agent writes arrive through this same door under the same rules as human writes; agents get the door, never the tables.

Withheld by design Tier 2

The command roster, with its inputs, is held at Tier 2.

Events announced

The unit announces business facts, carrying identity plus the fact, never a data dump:

Modules react through their own contracts: a module learning it is now off for a tenant deactivates its own jobs and refuses its own writes; surfaces re-render from the new published set. This unit does not reach into another module's tables to switch anything off, and no module reads its tables; permission is asked at the choke point, not read from storage.

Guarantees

Refusals

What done means

The gates a change passes

Done for this unit is not "the switches render". Done is the unit keeping its promises in the cases that would break them, proven mechanically, on the live surface. Every module's off switch and every tenant's shape depend on this unit being right.

The failing cases

Honest-state behaviors

Where it connects

The spine sections this unit realizes

Addi architecture disclosure · v1.0 · 2026-07-31
All modules · Traceability