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
pr-automation.yml
on: pull_request
Check PR Size
Check Changeset
48s
Auto Label
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.
|