Skip to content

feat(objectql,spec): enforce Field.valueDomain on the write path — refuse a non-member with value_domain, show the key in both authoring forms, flip the liveness row #21106

feat(objectql,spec): enforce Field.valueDomain on the write path — refuse a non-member with value_domain, show the key in both authoring forms, flip the liveness row

feat(objectql,spec): enforce Field.valueDomain on the write path — refuse a non-member with value_domain, show the key in both authoring forms, flip the liveness row #21106

Triggered via pull request September 5, 2026 01:42
Status Success
Total duration 52s
Artifacts

pr-automation.yml

on: pull_request
Check PR Size
Check PR Size
Check Changeset
48s
Check Changeset
Auto Label
Auto Label
Fit to window
Zoom out
Zoom in

Annotations

1 notice
Check Changeset: .changeset/field-value-domain-write-path.md#L0
ADR-0087 exemption (no-migration-prescription): Nothing authorable is renamed, retired or tombstoned. `Field.valueDomain` keeps its name, its type and its position; this release only makes the declaration the key already carries bind at the write seam, so `objectstack migrate meta` has no metadata to rewrite — a document that declares a domain is already in its final spelling, and one that declares none is untouched. ⚠️ This disposition does NOT rest on the key being unpublished, and must not be read that way: 17.3.0 shipped `Field.valueDomain` declared, parsed and UNENFORCED, which is exactly why this changeset carries the BREAKING banner above. It rests on the stored side instead. A stored value outside a declared domain is never re-read, so no stored row is invalidated here and none is reachable by a ledger entry at all. And which member a stored non-member SHOULD have been is authoring intent no ledger entry can decide: the stored string carries no evidence of whether the author meant a different member of that standard, a different standard, or no declaration at all. The channel that reaches the author is the refusal itself, raised at the write, naming the standard — the same ground the sibling accept-set narrowing #15319 stands its own `no-migration-prescription` disposition on.