Skip to content

Architecture decisions

Modgud records the decisions that shape it, not just their outcome. Each record states what the situation was, what was decided, and what the decision costs — including the ones that were later reversed. A decision record is history; it is not edited to match what we would decide today.

Records are numbered once and never renumbered or reused. A superseded record keeps its number and gains a pointer to the record that replaced it.

The records

#DecisionStatus
0001OAuth / MCP client registration: DCR now, CIMD nextAccepted
0002Public origin is derived, not configuredSuperseded by 0023
0003Persistence: hybrid event sourcing + flat documentsAccepted
0004Tenancy: database per realm, master/system splitAccepted
0005Permission model: per-app catalog, RBAC via groups, two bypass tiersAccepted
0006Identity hub, not federation proxyAccepted
0007Access tokens: reference by default, per-client JWT opt-inAccepted
0008CIMD — client-ID metadata documentsAccepted
0009Per-client WebAuthn RP-IDAccepted
0010Native cookieless token grantsAccepted
0011Application tier: a soft facet within a tenantAccepted
0012Invite-code-gated passwordless self-registrationAccepted
0013PageBuilder: named page variants and activationAccepted
0014Finish the customization core before the page builderAccepted
0015Positions, terminals and staffing are the shared-device modelAccepted
0016Policy, binding and control-plane semantics for positionsAccepted
0017Staged configuration (draft mode) with transactional applyAccepted
0018Registration before proofAccepted
0019Caller context and multi-dimensional rate limitingAccepted
0020Device-aware login throttlingAccepted
0021Back-channel logoutAccepted
0022Two-instance operationAccepted
0023The public origin is declared, not derivedAccepted

Released under the Apache-2.0 License.