ADR 0007: Module system — data-only manifests, signed code, two-stage install
Status: Accepted
Date: 2026-07-19
Context
Modules must be installable/enableable/configurable/upgradable/uninstallable without turning the admin panel into remote code execution.
Decision
PlatformModuleManifest(seepackages/module-sdk) is data-only and validated at build/install time: id, version, platformRange, dependencies, capabilities, permissions, settings, featureFlags, entitlements, navigation, adminResources, blocks, events published/consumed, jobs, webhooks, healthChecks, dataClassification.
- Executable registrations (routes, services, block renderers) come from signed, trusted packages in the deployment — never uploaded at runtime.
- Two stages: platform-wide install (code + migrations exist) is separate from tenant-level enable (tenant may use it). Admins enable deployed modules; they cannot deploy code.
- Lifecycle:
install → enable → configure → disable → upgrade → uninstall(uninstall requires impact preview + export/retention choice + explicit destructive confirmation).
- Cross-module collaboration uses public service contracts or events; importing another module's private implementation is a boundary violation.
Consequences
- A tenant admin can never hot-load arbitrary code.
- Compatibility is machine-checked (manifest semver ranges + CI matrix).