From d6e72f149ddf042139fe645205654418584bd71a Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 29 Aug 2026 05:48:04 +0000 Subject: [PATCH] docs(kernel): teach the dot-qualified view item name in metadata-service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `metadata-service.mdx` taught `account_list` as a view name at four sites — the `get('view', ...)` read, both `saveOverlay` `baseName`s, and the `getEffective(...)` resolve. A view row written as a standalone ViewItem record is governed by `ViewItemNameSchema`, which pins identity on `QUALIFIED_ITEM_NAME_PATTERN` (dot REQUIRED), so a reader following the page gets a schema rejection naming the very field the page told them to fill. The replacement name is derived, not invented: `expandViewContainer('account', { list, form })` emits `account.default` + `account.form`, which is what the in-tree fixtures carry. All four sites move together — they address one logical row, so moving two would leave the page overlaying a row it does not read back. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01LpRNHxWZgSUgVnFT9mQQo4 --- content/docs/kernel/contracts/metadata-service.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/docs/kernel/contracts/metadata-service.mdx b/content/docs/kernel/contracts/metadata-service.mdx index 4a730bc1b8..504e77aaaf 100644 --- a/content/docs/kernel/contracts/metadata-service.mdx +++ b/content/docs/kernel/contracts/metadata-service.mdx @@ -312,7 +312,7 @@ UI metadata types (`view`, `dashboard`, `page`, `app`, `theme`) are first-class ```typescript // Get a view definition -const view = await metadataService.get('view', 'account_list'); +const view = await metadataService.get('view', 'account.default'); // List all views for an object const views = await metadataService.listViews('account'); @@ -330,7 +330,7 @@ Users can customize views via the overlay system: await metadataService.saveOverlay({ id: 'overlay-platform-1', baseType: 'view', - baseName: 'account_list', + baseName: 'account.default', scope: 'platform', patch: { columns: ['name', 'email', 'status', 'created_at'] }, }); @@ -339,14 +339,14 @@ await metadataService.saveOverlay({ await metadataService.saveOverlay({ id: 'overlay-user-123', baseType: 'view', - baseName: 'account_list', + baseName: 'account.default', scope: 'user', owner: 'user-123', patch: { columns: ['name', 'status'] }, // user only wants 2 columns }); // Resolve effective view for a specific user -const effectiveView = await metadataService.getEffective('view', 'account_list', { +const effectiveView = await metadataService.getEffective('view', 'account.default', { userId: 'user-123', }); // Result: base view ← platform overlay ← user-123 overlay