From 5fcfcf7d42c732c99cfdf1fd5d7a73811150dab1 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 13:59:43 +0000 Subject: [PATCH] docs(spec): record text.value as deliberately omitted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The expression-bindable-text-keys module's docblock lists the component-renderer read points it deliberately has not declared a row for yet. `text`'s fallback read of `schema.value` (behind `schema.content || schema.value`) was missing from that list, leaving the omission unrecorded rather than decided. The #13670 ruling settled the question: text's intended evaluation channel is `content` alone, and `text.value` is declared OUT — adding a `text: ['value']` row would legitimize a second evaluation path for the same slot. This records that decision in the docblock's known- omitted list, with the ruling cited. No carriage row, no behavior change; `content/docs/references/ui/expression-bindable-text-keys.mdx` is the regenerated projection (`pnpm --filter @objectstack/spec gen:docs`). _Generated by [Claude Code](https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2)_ --- .../references/ui/expression-bindable-text-keys.mdx | 12 ++++++++++-- .../spec/src/ui/expression-bindable-text-keys.zod.ts | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/content/docs/references/ui/expression-bindable-text-keys.mdx b/content/docs/references/ui/expression-bindable-text-keys.mdx index ff52137071..4b03fe9ffa 100644 --- a/content/docs/references/ui/expression-bindable-text-keys.mdx +++ b/content/docs/references/ui/expression-bindable-text-keys.mdx @@ -67,8 +67,16 @@ at the top level (`alert`/`empty`/`dialog` `title`+`description`, `badge` `label`, form inputs' `value`/`label`, …) — those rows are deliberately NOT declared yet: form-control `value` is interactive state rather than display text, and each row is an accept-surface widening that should arrive with its -own measurement, not ride this one (startup scope discipline). Adding a row -is additive and spec-first; do it here, never as a renderer-side inference. +own measurement, not ride this one (startup scope discipline). `text` reads +back `schema.content || schema.value` (`basic/text.tsx`) — unlike the rows +above, its omission is not merely unmeasured: `value` there is a fallback +spelling for the same slot `content` already evaluates (see `content` NOT a +member, above), not a second read point, so a `text: ['value']` row would +legitimize the fallback spelling and give one slot two declared evaluation +paths. The objectstack#13670 ruling settled `text`'s intended evaluation +channel as `content` alone and declared `text.value` OUT on those grounds — +this omission is deliberate, not pending measurement. Adding a row is +additive and spec-first; do it here, never as a renderer-side inference. **Source:** `packages/spec/src/ui/expression-bindable-text-keys.zod.ts` diff --git a/packages/spec/src/ui/expression-bindable-text-keys.zod.ts b/packages/spec/src/ui/expression-bindable-text-keys.zod.ts index 88efca2520..726f382627 100644 --- a/packages/spec/src/ui/expression-bindable-text-keys.zod.ts +++ b/packages/spec/src/ui/expression-bindable-text-keys.zod.ts @@ -63,8 +63,16 @@ * `label`, form inputs' `value`/`label`, …) — those rows are deliberately NOT * declared yet: form-control `value` is interactive state rather than display * text, and each row is an accept-surface widening that should arrive with its - * own measurement, not ride this one (startup scope discipline). Adding a row - * is additive and spec-first; do it here, never as a renderer-side inference. + * own measurement, not ride this one (startup scope discipline). `text` reads + * back `schema.content || schema.value` (`basic/text.tsx`) — unlike the rows + * above, its omission is not merely unmeasured: `value` there is a fallback + * spelling for the same slot `content` already evaluates (see `content` NOT a + * member, above), not a second read point, so a `text: ['value']` row would + * legitimize the fallback spelling and give one slot two declared evaluation + * paths. The objectstack#13670 ruling settled `text`'s intended evaluation + * channel as `content` alone and declared `text.value` OUT on those grounds — + * this omission is deliberate, not pending measurement. Adding a row is + * additive and spec-first; do it here, never as a renderer-side inference. */ import { z } from 'zod';