Review date: 2026-07-27
Scope: the seven publishable packages, descriptor protocol v1, ComponentRegistry, server and UI plugin contracts, explicit package subpaths, Ace hooks, and doctor checks.
Decision
Protocol version remains the literal 1. Phase 4 tenant, nesting, locale, plugin, and registry data is optional or carried in open props objects; no existing required envelope or descriptor key is renamed or removed. Clients continue to reject only a value other than 1.
The signed source inventory is generated by pnpm launch:check from package export maps and source barrels. The protocol fixture set under fixtures/protocol/ remains the executable wire inventory.
Frozen ecosystem ABIs
- Wire roots:
AdoniaEnvelope,PanelEnvelope,ResourceDescriptor,DescriptorNode,TableDescriptor,ColumnDescriptor,ReactiveSpec,RecordsEnvelope,SerializedRow,ActionDescriptor, andprotocolVersion: 1. - Required node keys:
type,key,props; optional additive keys:reactive,urls,children. - Required resource keys:
resource,mode; mode-specificschema/table; additiveactionsandlenses. - Registry values and types:
ComponentRegistry,createAdoniaRegistry,getDefaultRegistry,RegistryMapName,AdoniaUiPlugin,NamedAdoniaUiPlugin,UnknownComponentEvent;register,resolve,use, and unknown-component subscription behavior. - Server plugin values and types:
definePlugin,AdoniaPlugin,ADONIA_HOOK_EVENTS, hook payload types, andPanel.plugins(). - Hook event names:
resource:booted,descriptor:compiling,pipeline:building,record:saving,record:saved,record:deleting,record:deleted,action:executing,action:executed,action:failed,nav:building, andsearch:results. - Addressable pipeline stage names:
base,softDeleteScope,search,filters,sort, andeagerLoad.
Export review
Every exports key is intentional. @adonia/core exposes the root authoring/runtime API plus the documented testing, protocol types, provider, and middleware integration subpaths. @adonia/ui exposes its root authoring API, packaged pages, registry-only API, Tailwind preset, and stylesheet. @adonia/devtools intentionally has no root export: only hooks, commands, configure, and doctor are supported. Each adapter/reference plugin exposes only its documented root and, where applicable, client entry.
The broad root barrels in core and UI are intentional extension-author surfaces: custom fields, columns, filters, widgets, pages, transports, plugin hooks, and conformance utilities need them without internal-path imports. Heavy editor implementations remain absent from the UI value barrel and lazy-loaded.
@adonia/core has no runtime dependency on @adonia/ui. AdonisJS, React, Lucid, Vine, BullMQ, and framework integration packages remain peer dependencies at their package boundaries.
Deprecation and alias sweep
No public @deprecated declaration or Phase-future compatibility export remains. NotImplementedException was removed from the core root barrel during review: no runtime path throws it, it represented unfinished-work vocabulary rather than an ecosystem contract, and consumers must use the concrete stable exception for the failed operation. The Router makeUrl member is a private structural compatibility input for AdonisJS Router and is not exported as an Adonia API.
RuleBuilder.is/isNot/isTruthy/isFalsy and equals/notEquals/truthy/falsy are intentional DSL vocabulary pairs accepted since 0.x, not deprecated aliases; both compile directly to the same frozen JsonLogic rules and remain supported. Container aliases are stable AdonisJS binding names, not source compatibility shims.
No 0.x public symbol needs a breaking rename for 1.0. The one accidental export removal has no mechanical replacement, so a codemod would be misleading; no codemod is required or shipped. The changeset and checklist record this decision.