waaseyaa / admin-surface
Canonical integration boundary for the Waaseyaa Admin SPA
Requires
- php: >=8.5
- symfony/http-foundation: ^7.0
- waaseyaa/access: ^0.1.0-alpha.301
- waaseyaa/api: ^0.1.0-alpha.301
- waaseyaa/audit: ^0.1.0-alpha.301
- waaseyaa/entity: ^0.1.0-alpha.301
- waaseyaa/field: ^0.1.0-alpha.301
- waaseyaa/foundation: ^0.1.0-alpha.301
- waaseyaa/page-builder: ^0.1.0-alpha.301
- waaseyaa/routing: ^0.1.0-alpha.301
- waaseyaa/user: ^0.1.0-alpha.301
- waaseyaa/workflows: ^0.1.0-alpha.301
Requires (Dev)
- phpunit/phpunit: ^13.0
- waaseyaa/config: ^0.1.0-alpha.301
- waaseyaa/database-legacy: ^0.1.0-alpha.301
- waaseyaa/entity-storage: ^0.1.0-alpha.301
- waaseyaa/node: ^0.1.0-alpha.301
- waaseyaa/note: ^0.1.0-alpha.301
- waaseyaa/taxonomy: ^0.1.0-alpha.301
- waaseyaa/testing: ^0.1.0-alpha.301
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main / 0.1.x-dev
- v0.1.0-alpha.301
- v0.1.0-alpha.300
- v0.1.0-alpha.299
- v0.1.0-alpha.298
- v0.1.0-alpha.297
- v0.1.0-alpha.296
- v0.1.0-alpha.295
- v0.1.0-alpha.294
- v0.1.0-alpha.293
- v0.1.0-alpha.292
- v0.1.0-alpha.291
- v0.1.0-alpha.290
- v0.1.0-alpha.289
- v0.1.0-alpha.288
- v0.1.0-alpha.287
- v0.1.0-alpha.286
- v0.1.0-alpha.285
- v0.1.0-alpha.284
- v0.1.0-alpha.283
- v0.1.0-alpha.282
- v0.1.0-alpha.281
- v0.1.0-alpha.280
- v0.1.0-alpha.279
- v0.1.0-alpha.278
- v0.1.0-alpha.277
- v0.1.0-alpha.276
- v0.1.0-alpha.275
- v0.1.0-alpha.274
- v0.1.0-alpha.273
- v0.1.0-alpha.272
- v0.1.0-alpha.271
- v0.1.0-alpha.270
- v0.1.0-alpha.269
- v0.1.0-alpha.268
- v0.1.0-alpha.267
- v0.1.0-alpha.266
- v0.1.0-alpha.265
- v0.1.0-alpha.264
- v0.1.0-alpha.263
- v0.1.0-alpha.262
- v0.1.0-alpha.261
- v0.1.0-alpha.260
- v0.1.0-alpha.259
- v0.1.0-alpha.258
- v0.1.0-alpha.257
- v0.1.0-alpha.256
- v0.1.0-alpha.255
- v0.1.0-alpha.254
- v0.1.0-alpha.253
- v0.1.0-alpha.252
- v0.1.0-alpha.251
- v0.1.0-alpha.250
- v0.1.0-alpha.249
- v0.1.0-alpha.248
- v0.1.0-alpha.247
- v0.1.0-alpha.246
- v0.1.0-alpha.245
- v0.1.0-alpha.244
- v0.1.0-alpha.243
- v0.1.0-alpha.242
- v0.1.0-alpha.241
- v0.1.0-alpha.240
- v0.1.0-alpha.239
- v0.1.0-alpha.238
- v0.1.0-alpha.237
- v0.1.0-alpha.236
- v0.1.0-alpha.235
- v0.1.0-alpha.234
- v0.1.0-alpha.233
- v0.1.0-alpha.232
- v0.1.0-alpha.231
- v0.1.0-alpha.230
- v0.1.0-alpha.229
- v0.1.0-alpha.228
- v0.1.0-alpha.227
- v0.1.0-alpha.226
- v0.1.0-alpha.225
- v0.1.0-alpha.224
- v0.1.0-alpha.223
- v0.1.0-alpha.222
- v0.1.0-alpha.221
- v0.1.0-alpha.220
- v0.1.0-alpha.219
- v0.1.0-alpha.218
- v0.1.0-alpha.217
- v0.1.0-alpha.216
- v0.1.0-alpha.215
- v0.1.0-alpha.214
- v0.1.0-alpha.213
- v0.1.0-alpha.212
- v0.1.0-alpha.211
- v0.1.0-alpha.210
- v0.1.0-alpha.209
- v0.1.0-alpha.208
- v0.1.0-alpha.207
- v0.1.0-alpha.206
- v0.1.0-alpha.205
- v0.1.0-alpha.204
- v0.1.0-alpha.203
- v0.1.0-alpha.202
- v0.1.0-alpha.201
- v0.1.0-alpha.200
- v0.1.0-alpha.199
- v0.1.0-alpha.198
- v0.1.0-alpha.197
- v0.1.0-alpha.196
- v0.1.0-alpha.195
- v0.1.0-alpha.194
- v0.1.0-alpha.193
- v0.1.0-alpha.192
- v0.1.0-alpha.191
- v0.1.0-alpha.190
- v0.1.0-alpha.189
- v0.1.0-alpha.188
- v0.1.0-alpha.187
- v0.1.0-alpha.186
- v0.1.0-alpha.185
- v0.1.0-alpha.184
- v0.1.0-alpha.183
- v0.1.0-alpha.182
- v0.1.0-alpha.181
- v0.1.0-alpha.180
- v0.1.0-alpha.179
- v0.1.0-alpha.178
- v0.1.0-alpha.177
- v0.1.0-alpha.176
- v0.1.0-alpha.175
- v0.1.0-alpha.174
- v0.1.0-alpha.173
- v0.1.0-alpha.172
- v0.1.0-alpha.171
- v0.1.0-alpha.170
- v0.1.0-alpha.169
- v0.1.0-alpha.168
- v0.1.0-alpha.167
- v0.1.0-alpha.166
- v0.1.0-alpha.165
- v0.1.0-alpha.164
- v0.1.0-alpha.163
- v0.1.0-alpha.162
- v0.1.0-alpha.161
- v0.1.0-alpha.160
- v0.1.0-alpha.159
- v0.1.0-alpha.158
- v0.1.0-alpha.157
- v0.1.0-alpha.156
- v0.1.0-alpha.155
- v0.1.0-alpha.154
- v0.1.0-alpha.153
- v0.1.0-alpha.152
- v0.1.0-alpha.151
- v0.1.0-alpha.150
- v0.1.0-alpha.149
- v0.1.0-alpha.148
- v0.1.0-alpha.147
- v0.1.0-alpha.146
- v0.1.0-alpha.145
- v0.1.0-alpha.144
- v0.1.0-alpha.143
- v0.1.0-alpha.141
- v0.1.0-alpha.140
- v0.1.0-alpha.139
- v0.1.0-alpha.138
- v0.1.0-alpha.137
- v0.1.0-alpha.136
- v0.1.0-alpha.135
- v0.1.0-alpha.134
- v0.1.0-alpha.133
- v0.1.0-alpha.132
- v0.1.0-alpha.131
- v0.1.0-alpha.130
- v0.1.0-alpha.129
- v0.1.0-alpha.128
- v0.1.0-alpha.127
- v0.1.0-alpha.126
- v0.1.0-alpha.125
- v0.1.0-alpha.124
- v0.1.0-alpha.123
- v0.1.0-alpha.122
- v0.1.0-alpha.121
- v0.1.0-alpha.120
- v0.1.0-alpha.119
- v0.1.0-alpha.118
- v0.1.0-alpha.117
- v0.1.0-alpha.116
- v0.1.0-alpha.115
- v0.1.0-alpha.114
- v0.1.0-alpha.113
- v0.1.0-alpha.112
- v0.1.0-alpha.111
- v0.1.0-alpha.110
- v0.1.0-alpha.109
- v0.1.0-alpha.108
- v0.1.0-alpha.107
- v0.1.0-alpha.106
- v0.1.0-alpha.105
- v0.1.0-alpha.104
- v0.1.0-alpha.103
- v0.1.0-alpha.102
- v0.1.0-alpha.101
- v0.1.0-alpha.100
- v0.1.0-alpha.99
- v0.1.0-alpha.98
- v0.1.0-alpha.97
- v0.1.0-alpha.96
- v0.1.0-alpha.95
- v0.1.0-alpha.94
- v0.1.0-alpha.93
- v0.1.0-alpha.92
- v0.1.0-alpha.91
- v0.1.0-alpha.90
- v0.1.0-alpha.89
- v0.1.0-alpha.88
- v0.1.0-alpha.87
- v0.1.0-alpha.86
- v0.1.0-alpha.85
- v0.1.0-alpha.84
- v0.1.0-alpha.83
- v0.1.0-alpha.82
- v0.1.0-alpha.81
- v0.1.0-alpha.80
- v0.1.0-alpha.79
- v0.1.0-alpha.78
- v0.1.0-alpha.77
- v0.1.0-alpha.76
- v0.1.0-alpha.75
- v0.1.0-alpha.74
- v0.1.0-alpha.73
- v0.1.0-alpha.72
- v0.1.0-alpha.71
- v0.1.0-alpha.70
- v0.1.0-alpha.69
- v0.1.0-alpha.68
- v0.1.0-alpha.67
- v0.1.0-alpha.66
- v0.1.0-alpha.65
- v0.1.0-alpha.64
- v0.1.0-alpha.63
- v0.1.0-alpha.62
- v0.1.0-alpha.61
- v0.1.0-alpha.58
- v0.1.0-alpha.57
- v0.1.0-alpha.56
- v0.1.0-alpha.55
- v0.1.0-alpha.54
- v0.1.0-alpha.53
- v0.1.0-alpha.52
- v0.1.0-alpha.51
- v0.1.0-alpha.50
- v0.1.0-alpha.49
- v0.1.0-alpha.48
- v0.1.0-alpha.47
- v0.1.0-alpha.46
- v0.1.0-alpha.45
- v0.1.0-alpha.44
- v0.1.0-alpha.43
- v0.1.0-alpha.42
- v0.1.0-alpha.41
- v0.1.0-alpha.40
- v0.1.0-alpha.39
- v0.1.0-alpha.38
- v0.1.0-alpha.37
- v0.1.0-alpha.36
- v0.1.0-alpha.35
- v0.1.0-alpha.34
- v0.1.0-alpha.33
- v0.1.0-alpha.32
- v0.1.0-alpha.31
- v0.1.0-alpha.30
- v0.1.0-alpha.29
- v0.1.0-alpha.28
- v0.1.0-alpha.27
- v0.1.0-alpha.26
- v0.1.0-alpha.25
- v0.1.0-alpha.24
- v0.1.0-alpha.23
- v0.1.0-alpha.22
- v0.1.0-alpha.21
- v0.1.0-alpha.20
- v0.1.0-alpha.19
- v0.1.0-alpha.18
- v0.1.0-alpha.17
- v0.1.0-alpha.16
- v0.1.0-alpha.15
- v0.1.0-alpha.14
- v0.1.0-alpha.13
- v0.1.0-alpha.12
- v0.1.0-alpha.11
- v0.1.0-alpha.10
- v0.1.0-alpha.9
This package is auto-updated.
Last update: 2026-09-20 01:19:22 UTC
README
Layer 6: Interfaces
waaseyaa/admin-surface is the canonical integration boundary between a
Waaseyaa application and the Admin SPA. It translates authenticated HTTP
requests into domain-package operations, projects the results into a stable
wire contract, and serves the packaged SPA. It does not own entity storage,
authorization policy, workflow policy, revision storage, page-builder domain
behavior, or application-specific preview signing.
This charter is the package-level authority for ownership, composition seams,
internal dependency direction, and split-package contents. The wire-shape
authority is the concern-separated module set under contract/, re-exported
through contract/index.ts; contract/README.md describes how that
authority is maintained.
Responsibilities and non-responsibilities
The package owns:
- canonical Admin Surface route and destination paths;
- route composition, transport status promotion, and SPA/static delivery;
- generic CRUD, list, action, revision, and page-builder adapters;
- the host-to-SPA result, session, catalog, entity, list, action, and page-builder payload contract;
- closed query, list-metadata, formatter, and action vocabularies;
- application composition ports for a custom host, publication projection, revision-preview grants, and page-builder hosting;
- the distributable Admin SPA tree and its manifest, marker, and signature evidence.
The package delegates authority to:
waaseyaa/accessfor identity, principals, permissions, capabilities, and entity-access decisions;waaseyaa/entityand storage implementations for entity identity, persistence, mutation tokens, and revisions;waaseyaa/apiandwaaseyaa/fieldfor schema projection and internal-field visibility;waaseyaa/auditfor privileged publication-field read evidence;waaseyaa/workflowsfor bindings and transition decisions;waaseyaa/page-builderfor drafts, commands, preview state, history, and restore behavior;- applications for custom host composition and signed revision-preview URLs;
waaseyaa/routingandwaaseyaa/foundationfor routing and provider lifecycle.
Generating an Admin destination or advertising a UI capability never grants access. Every operation remains subject to the owning package's server-side authority. Missing access services fail closed; missing field-schema authority fails loudly during generic-host composition.
HTTP boundary
AdminSurfaceRoutePaths is the PHP path authority. The SPA's relative route
builder in packages/admin/app/runtime/adminSurfaceRoutes.ts is a consumer that
must be checked mechanically against it.
| Route | Method and path | Transport gate | Handler and response contract |
|---|---|---|---|
admin_surface.session |
GET /admin/_surface/session |
Session required | handleSession; compact application/json; valid refusal status promoted |
admin_surface.catalog |
GET /admin/_surface/catalog |
Authentication required | handleCatalog; compact application/json; valid refusal status promoted |
admin_surface.list |
GET /admin/_surface/{type} |
Authentication required | handleList; compact application/json; valid refusal status promoted |
admin_surface.get |
GET /admin/_surface/{type}/{id} |
Authentication required | handleGet; compact application/json; valid refusal status promoted |
admin_surface.action |
POST /admin/_surface/{type}/action/{action} |
Authentication and CSRF required | handleAction; JSON object body; compact application/json; valid refusal status promoted |
admin_surface.page_builder.definitions |
GET /admin/_surface/page-builder/{surface}/definitions |
Authentication required | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_surface.page_builder.draft |
GET /admin/_surface/page-builder/{surface}/{id} |
Authentication required | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_surface.page_builder.command |
POST /admin/_surface/page-builder/{surface}/{id}/commands |
Authentication and CSRF required | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_surface.page_builder.preview |
POST /admin/_surface/page-builder/{surface}/{id}/preview |
Authentication and CSRF required | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_surface.page_builder.history |
GET /admin/_surface/page-builder/{surface}/{id}/revisions |
Authentication required | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_surface.page_builder.revision |
GET /admin/_surface/page-builder/{surface}/{id}/revisions/{revision} |
Authentication required; positive-integer revision | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_surface.page_builder.restore |
POST /admin/_surface/page-builder/{surface}/{id}/restore |
Authentication and CSRF required | Optional page-builder host; dispatcher JSON response; valid refusal status promoted |
admin_spa |
GET /admin/{path} |
Public shell route | App static override, packaged static asset, packaged index, then fallback HTML; excludes _surface and api |
The five core handlers return the flat {ok, data, error, meta} Admin Surface
envelope. A refusal status is promoted to HTTP only when ok is exactly false
and error.status is an integer from 400 through 599. Page-builder routes keep
the routing dispatcher's existing encoding and wrap only valid refusal statuses
in its statusCode/body transport form.
AdminDestinationPaths owns links into the SPA for list, filtered list, create,
edit, record history, workflow pipeline, embedded create/edit, and embedded
page-builder views. It is a URL generator, not an access-decision API.
Wire contract and consumers
The convergence target is one package-owned, concern-separated TypeScript contract:
| Concern | Canonical owner | PHP producer | SPA consumer |
|---|---|---|---|
| Result/error, session, catalog, entity, mutation token, list, CRUD | contract/types.ts |
core DTOs/builders and GenericAdminSurfaceHost |
bootstrap and transport adapters |
| JSON Schema request and response | contract/schema.ts |
SchemaController/SchemaPresenter through the generic host |
schema composables, forms, and listings |
| Entity history, revision, preview, and restore | contract/revisions.ts |
generic host and preview authority | revision recovery workspace |
| Page-builder definitions, draft, commands, preview, history, revision, restore | contract/pageBuilder.ts |
GenericPageBuilderSurfaceHost |
mechanically checked app/contracts/pageBuilder.ts, client, composable, workspace |
The convergence slice resolves the known contract drift without changing the wire protocol:
AdminSurfaceEntity.mutation_tokenis canonical, required, and nullable, matching the PHP emitter's always-present key and the SPA's fenced writes.- session fields match the PHP emitter's actual required/nullability behavior, and catalog capability optionality is exact.
- core CRUD, schema, revision, and page-builder crossing payloads are owned by the corresponding concern modules and re-exported through one entrypoint.
npm run check:contract-compatibilityuses exact TypeScript equality to prevent the SPA-local declaration-build mirrors from drifting silently.AdminSurfaceContract.tsandADMIN_SURFACE_VERSIONhave no observed runtime consumer. They remain deprecated source-compatibility exports, are not wire authorities, and have their completion-or-removal lifecycle tracked in #3084.
Protocol keys are preserved exactly. Most payload fields are camelCase, while
the established concurrency and action protocol intentionally uses
mutation_token and related snake-case request keys. Consumers must not rename
those wire keys.
Composition seams and optional dependencies
| Seam or dependency | Disposition | Composition behavior |
|---|---|---|
AdminSurfaceHostFactoryInterface |
Public application extension | One optional application binding replaces the generic host while retaining canonical routes and transport behavior. |
AbstractAdminSurfaceHost |
Public application extension base | Custom hosts implement session, catalog, entity, list, and action operations behind the canonical HTTP boundary. |
SurfaceActionHandlerInterface |
Public application extension | Supplies a custom action implementation to a host. |
AdminPublicationFieldReaderInterface |
Public override seam with Framework default | Provider binds the audited implementation; applications may replace the projection boundary. |
BatchAdminPublicationFieldReaderInterface |
Public optional optimization seam | Preserves list cardinality while projecting already-authorized rows transactionally. |
AdminRevisionPreviewAuthorityInterface |
Public optional authority seam | Applications issue signed exact-revision preview grants after record, revision, and view checks. Absence disables preview issuance. |
PageBuilderSurfaceHostInterface |
Public optional route seam | Its presence registers all seven page-builder routes; absence registers none. |
GenericPageBuilderSurfaceHost |
Public Framework implementation | Generated applications bind it to the page-builder registry and gateways. |
| MCP package | Optional feature detection | class_exists enables only the declared MCP feature and capability allowlist; no hard Composer dependency. |
| Wayfinding package | Optional feature detection | class_exists enables only the declared Wayfinding session feature; no hard Composer dependency. |
| Field schema authority | Required generic-host dependency | Uses FieldSchemaAuthority or builds it from FieldTypeManagerInterface; absence throws. |
| Entity access handler | Required for useful generic access, fail closed | Reuses the kernel-composed handler; absence denies and filters rather than bypassing checks. |
The CLI governed-authoring recipe is the observed generated-application
composition site for PageBuilderSurfaceHostInterface to
GenericPageBuilderSurfaceHost. Generated-owner admission work remains in
issue #3073 and is not absorbed by this package charter.
Internal dependency model
Every production PHP token belongs to exactly one internal layer. Dependencies may point down this diagram, never upward. Same-layer dependencies are allowed.
flowchart TD
Delivery[Delivery and composition] --> Application[Application adapters]
Delivery --> Contract[Boundary contract]
Application --> Contract
Loading
- Boundary contract contains public ports, immutable crossing values, declarations, closed vocabularies, path authorities, and boundary parsers. It must not depend on either package implementation layer.
- Application adapters coordinate domain authorities and project their outcomes into the boundary contract. They may depend on Boundary contract, never Delivery and composition.
- Delivery and composition owns providers, route wiring, transport adaptation, static delivery, and fallback HTML. It may depend on both lower layers.
Deptrac is the enforcement authority for this model. Its configuration must classify every production PHP token, report uncovered dependencies as failures, and generate the maintained dependency view. This charter describes the intended model; the scoped Deptrac work makes it executable.
The executable authority is deptrac.yaml; dependency-graph.mmd is its
generated evidence view. Run composer check-admin-surface-deptrac to enforce
the model and composer admin-surface-dependency-view to refresh the view.
Complete production-token classification
| Layer | Production PHP token | Role |
|---|---|---|
| Boundary contract | Action/SurfaceActionHandlerInterface.php |
Custom action port |
| Boundary contract | AdminDestinationPaths.php |
SPA destination-path authority |
| Boundary contract | AdminSurfaceRoutePaths.php |
Admin HTTP path authority |
| Boundary contract | Catalog/ActionDefinition.php |
Catalog action value |
| Boundary contract | Catalog/CatalogBuilder.php |
Catalog declaration builder |
| Boundary contract | Catalog/EntityDefinition.php |
Catalog entity declaration |
| Boundary contract | Catalog/FieldDefinition.php |
Catalog field value |
| Boundary contract | Host/AdminPublicationFieldReaderInterface.php |
Publication projection port |
| Boundary contract | Host/AdminRevisionPreviewAuthorityInterface.php |
Revision-preview authority port |
| Boundary contract | Host/AdminRevisionPreviewGrantData.php |
Revision-preview grant value |
| Boundary contract | Host/AdminSurfaceHostFactoryInterface.php |
Application host factory port |
| Boundary contract | Host/AdminSurfaceResultData.php |
Result and refusal envelope value |
| Boundary contract | Host/AdminSurfaceSessionData.php |
Session payload value |
| Boundary contract | Host/AdminSurfaceUiPayload.php |
Session UI payload value |
| Boundary contract | Host/BatchAdminPublicationFieldReaderInterface.php |
Batch publication projection port |
| Boundary contract | List/ListFormatter.php |
Closed list formatter vocabulary |
| Boundary contract | List/ListMetadata.php |
Validated list metadata value |
| Boundary contract | PageBuilder/PageBuilderSurfaceHostInterface.php |
Optional page-builder route port |
| Boundary contract | PageBuilder/PageBuilderSurfaceRequest.php |
Principal and body request value |
| Boundary contract | Query/SurfaceFieldName.php |
Closed field-name grammar |
| Boundary contract | Query/SurfaceFilterOperator.php |
Closed filter-operator vocabulary |
| Boundary contract | Query/SurfaceQuery.php |
Parsed list query value |
| Boundary contract | Query/SurfaceQueryParser.php |
HTTP query boundary parser |
| Boundary contract | Host/AbstractAdminSurfaceHost.php |
Public host operation and request orchestration base |
| Application adapters | Host/AuditedAdminPublicationFieldReader.php |
Audited publication projection adapter |
| Application adapters | Host/GenericAdminSurfaceHost.php |
Generic entity CRUD, list, action, and revision adapter |
| Application adapters | List/SurfaceQueryPolicy.php |
Server-side enforcement of list declarations |
| Application adapters | PageBuilder/GenericPageBuilderSurfaceHost.php |
Page-builder domain-to-wire adapter |
| Delivery and composition | AdminSpaFallback.php |
Safe fallback HTML response |
| Delivery and composition | AdminSurfaceServiceProvider.php |
Service composition, routes, transport, and static delivery |
Public-interface dispositions
public-surface.php remains the editable compatibility authority. This
candidate reconciles its 24 entries with the dispositions below. Concrete
Framework implementations are declared only when they are supported
composition surfaces; internal implementations do not gain compatibility
status from dead-code annotations.
| Symbol or family | Disposition | Lifecycle |
|---|---|---|
SurfaceActionHandlerInterface |
Public | Supported custom-action port |
AbstractAdminSurfaceHost |
Public | Supported custom-host base |
AdminSurfaceHostFactoryInterface |
Public | Supported application composition port |
AdminPublicationFieldReaderInterface |
Public | Supported application override port |
BatchAdminPublicationFieldReaderInterface |
Public | Supported optional batch extension |
AdminRevisionPreviewAuthorityInterface |
Public | Supported optional application authority |
PageBuilderSurfaceHostInterface |
Public | Supported optional route-composition port |
ListFormatter |
Public | Closed, additive formatter vocabulary |
SurfaceFilterOperator |
Public | Closed, additive query vocabulary |
AdminDestinationPaths, AdminSurfaceRoutePaths |
Public | Supported URL/path authorities |
CatalogBuilder, EntityDefinition, FieldDefinition, ActionDefinition |
Public | Supported catalog construction API returned through the custom-host base |
AdminSurfaceSessionData, AdminSurfaceResultData, SurfaceQuery |
Public crossing values | Supported parameter and return types of the custom-host base |
ListMetadata, SurfaceQueryPolicy |
Public | Supported declaration and enforcement pair |
AdminRevisionPreviewGrantData, AdminSurfaceUiPayload |
Public crossing values | Supported values returned or constructed through public seams |
PageBuilderSurfaceRequest |
Public crossing value | Supported parameter of the public page-builder host port |
GenericPageBuilderSurfaceHost |
Public Framework implementation | Supported default for generated/app composition |
AdminSurfaceServiceProvider, AdminSpaFallback, GenericAdminSurfaceHost, AuditedAdminPublicationFieldReader, SurfaceQueryParser, SurfaceFieldName |
Internal | Framework implementation or composition detail; no direct compatibility promise beyond public routes and ports |
The legacy TypeScript aggregate AdminSurfaceContract and marker
ADMIN_SURFACE_VERSION are deprecated compatibility exports. They have no
observed runtime consumer and do not define payload authority; #3084 owns their
completion or removal.
Split-package contract
The repository split workflow publishes packages/admin-surface to the
waaseyaa/admin-surface repository. The split must contain, at minimum:
composer.json,src/,public-surface.php, package tests,deptrac.yaml, and the generateddependency-graph.mmdview;- the authoritative
contract/TypeScript sources and documentation; - the built
dist/tree plusdist.manifest.json,dist.markers.json, anddist.signature; - the package README and other files admitted by distribution checks.
tests/PackagedForm/split-artifact-acceptance.php is the repository acceptance
boundary for the isolated artifact. A passing monorepo test that relies on
undeclared root files or dependencies is not sufficient split-package evidence.
Change discipline
Changes to this package must include discriminating evidence at the affected boundary: package PHP tests, canonical-to-SPA TypeScript compatibility, route composition, crossing-payload conformance, Deptrac, distribution acceptance, and browser coverage when behavior visible to an operator changes. Required hooks and hosted checks remain mandatory.
Large extraction of GenericAdminSurfaceHost or
AdminSurfaceServiceProvider remains in #3082 and #3083 respectively.
Generated-owner admission from issue #3073 and required identifier validation
from issue #3023 remain independently scoped.