0006 - One Gradle Module Today, a Documented Split for api/sdk/web Later¶
Status¶
Accepted
Context¶
The target architecture eventually envisions universaladmin-core,
universaladmin-api, universaladmin-sdk, and universaladmin-web as
separate artifacts. But today there is no external extension and no web app
that would compile against -api/-sdk, and no web process that would need
-web.
Decision¶
A single Gradle project (universaladmin-core, the repo root) for now. No
multi-project scaffold with empty modules. The future module boundary is
instead marked in code:
- The interfaces a future extension will need (
Module,Action,GuiPage,PermissionRegistry,AuditService, ...) already live in their own, focused packages rather than being scattered - the later cut "these packages move touniversaladmin-api" is thus a mechanical step, not a redesign. - Storage/threading/config are already cut so a web layer could call the same services without changing the core (see ../web-future.md).
When the actual multi-project split happens is in
ROADMAP.md (Phase 4 for -api/-sdk, Phase 6 for
-web) and will be decided at the point a module actually has real content.
Consequences¶
- Less Gradle overhead and configuration now.
- The split isn't "free" when it happens - it brings real work then
(versioning, publishing, possibly separate repos for
-sdkexamples). That's deliberately accepted rather than front-loading that work today with no users yet. - Until the split, 0005-extension-ready-design.md still applies: the code has to be written so the split stays feasible.
Alternatives¶
- Multi-project from the start (empty
api/sdk/webmodules): rejected - pure structure with no content makes the repository harder to navigate, with nothing using it today. Can be added at any time once a module actually gets real code.