Core features are modules
- Created
- Decided
- Versions
- History
Context
The engine is the foundation the rest of the panel builds on, and the module system is its extension mechanism, open to first-party and third-party modules alike.
Some functionality is low-level framework machinery that everything else depends on. Other features are more complex: they typically combine several components, and many of them are configuration-heavy or user-facing.
Decision
The engine holds base framework functionality, the low-level parts that everything else depends on. Features that combine several components, especially configuration-heavy or user-facing ones, are modules, built on the same module system available to third parties. Auth and servers are modules.
Alternatives
No other arrangement was weighed.
Consequences
Easier:
- The engine will stay limited to the low-level parts that everything else depends on.
Harder:
- Engine components will provide mechanism without meaning, leaving the meaning to modules. Sessions will store what auth puts in them and give it no meaning, and long-lived re-authentication will belong to auth rather than to sessions.
Constrained:
- First-party features will ship as bundled modules: inside the binary, with manifests declared in code and a core flag set.
Corewill be ambiguous as a name, since core features are themselves modules.
Sources
- Brainstorming session, date not recalled, not publicly available and first written down on : the reasoning for the decision.
- Issue #35, Engine - Modules, original text of in its edit history: the first written record of the
decision. It is both
createdanddecided, because the date of the brainstorming session is not recalled. It also names permissions as a module; whether permissions will be a module of its own is not settled. - Issue #36, Engine - Modules - Discovery and Manifest, : bundled modules with manifests declared in code and a core flag.
- Issue #67, Engine - Sessions, : sessions giving what auth stores no meaning, and re-authentication belonging to auth, taken from the sessions design rather than anticipated.
- Issue #70, Engine - Container - Module scopes, :
Corerejected as an attribute name for being ambiguous when core features are modules, taken from that design rather than anticipated.
Source adr/0013-core-features-are-modules.md · commit 072385a · exported