The Game Panel Design record
The Game Panel
ADR-0013 Accepted

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.
  • Core will 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 created and decided, 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, : Core rejected 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