ADR-016, ADR-017
Related: ADR-008, ADR-010, ADR-013, constitution §1
Context
Two related pieces of forward-looking scaffolding were added on 2026-04-22 (PR #137/#138 follow-ups) and never activated:-
Workspace-packages overlay (ADR-016). Empty
packages/core-*,packages/platform, andpackages/sharedstubs —package.jsonfiles only, with anencoreos.sourceDirectorypointer back tosrc/. No source was moved. A metadata-layer audit (scripts/audit/audit-package-boundaries.ts, npmaudit:package-boundaries, CI gate inbuild.yml) enforced the declared dependency graph, andscripts/dev/generate-core-package-jsons.mjsregenerated the stubs. -
Microfrontends overlay (ADR-017). A root
microfrontends.jsonrouting map plus emptypackages/encoreos-app/packages/encoreos-publicplaceholders, a validation script (scripts/audit/validate-microfrontends-config.ts, npmaudit:microfrontends), a runbook, and an activation checklist. The scaffolding commit was explicitly titled “Vercel Microfrontends scaffolding (inert until activation).”
Evidence both overlays are inert (gathered 2026-05-25)
- Zero
@encoreos/*imports anywhere insrc/,tests/, ortools/. The app resolves everything through the@/path alias (tsconfig.app.json,vite.config.ts). The workspace package names are never consumed. - Turborepo tasks are all root-scoped (
//#…); no workspace package is a build target. vercel.jsoncontains no microfrontends/app/public configuration. The@vercel/microfrontendsdependency is not installed. The vite plugin is “intentionally absent” (comment-only).- ADR-017 status was Proposed (“becomes Accepted on Phase 3 activation”); the activation checklist never ran.
packages/ tree, near-identical boilerplate, two extra audit gates, a routing file, a runbook — while having no runtime or build effect today.
Decision
Remove both overlays and return to the single-app monolith of record:- Delete
packages/core-*,packages/platform,packages/shared,packages/encoreos-app,packages/encoreos-public, and the orphanedpackages/encore-spec(which had only a straynode_modules/). Keeppackages/docs(the real Docusaurus site). - Delete
microfrontends.jsonand its validator (scripts/audit/validate-microfrontends-config.ts, npmaudit:microfrontends). - Delete
scripts/audit/audit-package-boundaries.ts,scripts/dev/generate-core-package-jsons.mjs, the npm scriptsaudit:package-boundaries/packages:regenerate-cores, and theaudit:package-boundariesstep in.github/workflows/build.yml. - Prune the removed members from the root
package.jsonworkspacesarray. - Remove the now-orphaned docs (
WORKSPACE_PACKAGES.md,MICROFRONTENDS_RUNBOOK.md,MICROFRONTENDS_ACTIVATION_CHECKLIST.md) and theirdocs.jsonnav entries; clean the microfrontends activation comments fromvite.config.ts.
check-architecture), which was always the primary gate; only the redundant package-metadata layer is retired.
Consequences
Positivepackages/shrinks to the one real package (docs); the confusing empty-stub tree is gone.- Two CI/audit gates and their scripts retire; the dependency graph is enforced by the import-scan that already runs.
- No more “why are these packages empty?” onboarding friction.
- The metadata-layer boundary check (a second enforcement layer over import-scan) is gone. Acceptable: it never caught anything import-scan didn’t, and nothing imported the packages.
- A future modular/microfrontends migration starts clean rather than from this scaffolding. Git history (this ADR + ADR-016/017 + the original commits) preserves the prior design for revival.