@@ -425,12 +425,14 @@ import { overlayLockLayerAt, resolveOverlayPackageBinding, storedRowKnownDatasou
425425import { throwMetadataServiceUnavailable, warnClosureReadUnavailable } from './protocol-loud-degradations.js';
426426// [#25467 cut 33] The overlay-uniqueness indexes and the bundle-member backfill, once per process.
427427import { ensureOverlayIndex, ensureOverlayMembersBackfilled } from './protocol-overlay-index.js';
428- // [#25467 cut 33] The registry and view-container predicates: stored container expansion, binding, ownership, registry scope.
429- import { copiesOwnShippedViewContainer, expandStoredViewContainers, isAnotherPackagesObject, registryTakesStoredRows, runtimeViewContainerObject } from './protocol-registry-view-predicates.js';
428+ // [#25467 cut 33] The registry and view-container predicates: stored container expansion, binding, ownership, registry scope, overlaid views .
429+ import { copiesOwnShippedViewContainer, expandStoredViewContainers, isAnotherPackagesObject, overlaidShippedContainerViewNames, registryTakesStoredRows, runtimeViewContainerObject } from './protocol-registry-view-predicates.js';
430430// [#25467 cut 33] The ADR-0067 commit row of a publish or revert turn, and its named INSERT.
431431import { persistPackageCommitRow, recordPackageCommit } from './protocol-package-commit-record.js';
432432// [#25467 cut 33] Package scope: the writable base, the named-base rule, storage teardown, the app package-id key.
433433import { isWritablePackage, resolveAppPackageIdKey, shouldDropStorage, uninstalledNamedBaseRefusal } from './protocol-package-scope.js';
434+ // [#25467 cut 33] The /meta save door's refusal of a `:type` that is no metadata type at all.
435+ import { refuseUnmintableMetaType } from './protocol-unmintable-meta-type.js';
434436// [#25467 cut 33] The deployment's SDUI component manifest, and the load-time page `requires` report against it.
435437import { reportPageRequiresAbsentAtLoad, resolveSduiManifest } from './protocol-sdui-manifest.js';
436438
@@ -19410,23 +19412,11 @@ export class ObjectStackProtocolImplementation implements
1941019412 * existence claim (see {@link metaTypeNamespaceExists}).
1941119413 */
1941219414 private async refuseUnmintableMetaType(request: { type: string, name: string }): Promise<void> {
19413- const unrecognised = unrecognisedMetaTypeRefusal(request.type);
19414- if (!unrecognised) return;
19415- // The old exemption 1 (skip when the name contains a slash) was
19416- // removed by commit 311433f6b — the grammar verdict upstream refuses every
19417- // slash-bearing name before this probe runs. See the header.
19418- // Exemption 2 — the namespace predates this write.
19419- if (await this.metaTypeNamespaceExists(unrecognised.type)) return;
19420- const err = new Error(
19421- `'${unrecognised.type}' is not a metadata type. The platform declares `
19422- + `no such type, and a plugin cannot declare one either: 'additionalTypes' was retired because `
19423- + `nothing ever read it — so this write would mint a sys_metadata namespace under `
19424- + `type='${unrecognised.type}' that nothing reads and nothing serves. Address a real `
19425- + `metadata type; GET /api/v1/meta/types lists the ones this deployment carries.`,
19426- );
19427- (err as any).code = 'INVALID_REQUEST';
19428- (err as any).status = 400;
19429- throw err;
19415+ // [#25467 cut 33] The body moved to `protocol-unmintable-meta-type.ts` (see `UnmintableMetaTypeHost`).
19416+ const host: ThisParameterType<typeof refuseUnmintableMetaType> = {
19417+ metaTypeNamespaceExists: (...a) => this.metaTypeNamespaceExists(...a),
19418+ };
19419+ return refuseUnmintableMetaType.call(host, request);
1943019420 }
1943119421
1943219422 /**
@@ -19937,12 +19927,13 @@ export class ObjectStackProtocolImplementation implements
1993719927 container: Record<string, unknown>,
1993819928 packageId: string | null | undefined,
1993919929 ): ReadonlySet<string> {
19940- const ownPackageId = this.runtimeViewContainerPackage(type, container, { packageId });
19941- const shipped = this.shippedViewContainerOf(type, container.name, ownPackageId);
19942- if (shipped === undefined) return new Set();
19943- return new Set(
19944- this.expandRuntimeViewContainer(type, shipped, { packageId: ownPackageId }).map((view) => String(view.name)),
19945- );
19930+ // [#25467 cut 33] The body moved to `protocol-registry-view-predicates.ts` (see `RegistryViewPredicatesHost`).
19931+ const host: ThisParameterType<typeof overlaidShippedContainerViewNames> = {
19932+ expandRuntimeViewContainer: (...a) => this.expandRuntimeViewContainer(...a),
19933+ runtimeViewContainerPackage: (...a) => this.runtimeViewContainerPackage(...a),
19934+ shippedViewContainerOf: (...a) => this.shippedViewContainerOf(...a),
19935+ };
19936+ return overlaidShippedContainerViewNames.call(host, type, container, packageId);
1994619937 }
1994719938
1994819939 /**
0 commit comments