You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Record that author-written validation-rule messages are translatable again (objects.OBJECT._validations.RULE.message) — ADR status line or short ADR #14402
Governance follow-up promised on PR #14381 before it merged, filed so the trail is queued rather than remembered.
Why a record is owed
#14381 surface 2 gives an author-written validation rule's message a bundle key (objects.OBJECT._validations.RULE.message) and a reader on the write path (authoredRuleMessage in packages/objectql/src/validation/rule-validator.ts, over the existing ValidationMessageContext.translate hook from #3957).
17.0.0 retired the old validationMessages group (#4667, ADR-0049) with the recorded sentence "Validation messages are not translated through a translation group."#14381 makes that sentence false. Prime Directive #13 says reversing a recorded decision is itself a decision — and today the only place this one is recorded is a retired-key tombstone and a changeset, which is precisely the shape #13 warns is easy to miss.
The ruling to record (made on #14381, not reopened here)
This is ADR-0049 being enforced, not reversed:
the policy is enforce-or-remove; validationMessages was removed because nothing read it;
the new key ships with its reader in the same change — the other half of the same policy;
it is not the same key: the old group was top-level-keyed and could not tell two objects' rules apart; the new one is object-scoped beside _views / _actions / _tabs;
the ADR-0087 conversion that strips the old key from stored bundles is untouched.
What this card delivers
Whichever is the house shape for this — an amended status line on ADR-0049 (or the 17.0.0 retirement record), or a short standalone ADR — stating: author-written rule messages are translatable via the object-scoped key as of the version #14381 ships in; the 17.0.0 retirement stands; the two are not the same route. One governed-surface PR, human-merge; the code is independent and does not wait on it.
Triage (R+99) — graded, and the Blocked-by line removed
The body opened with **Blocked-by: #14381.** That one line was wrong three ways, so it is gone rather than corrected:
It pointed at a PR. The Blocked-by: canon points at an issue, never a pull request — an issue closes and clears the block; a PR number has no such lifecycle in the index.
⇒ pm:queue. This card is ready now. Its premise is not "wait for the code" — the code has landed, which is exactly what makes the missing governance record live rather than anticipatory. Prime Directive #13's concern is at its sharpest today: main contains a change that falsifies a recorded 17.0.0 sentence, and the only trace is a tombstone and a changeset.
Scope ruled
Exactly what the card asks and nothing more: one governed-surface PR recording that author-written rule messages are translatable via the object-scoped key as of the version #14381 shipped in, that the 17.0.0 retirement stands, and that the two are not the same route. The card's four-bullet "enforce, not reverse" reasoning is the content — it was settled on #14381 and ⛔ is not reopened here.
⚠️docs/adr/** is a governed surface (Prime Directive #14): no agent seat marks this PR ready, queues it, or arms auto-merge. A human merges it. Say so in the PR body.
Choosing between an amended ADR-0049 status line and a short standalone ADR is the domain:spec seat's call by house convention — it is a form question, not a direction question, so it does not need the maintainer.
Routing
domain:spec — ADR-0049 is the enforce-or-remove policy governing packages/spec properties, and the record lands on that ADR or beside it. documentation. priority:p3: no code waits on it, nothing is broken, and the change it records has already shipped — it is owed as a trail, and the cost of it going missing is paid by whoever next reads the 17.0.0 retirement and believes it.
Governance follow-up promised on PR #14381 before it merged, filed so the trail is queued rather than remembered.
Why a record is owed
#14381 surface 2 gives an author-written validation rule's
messagea bundle key (objects.OBJECT._validations.RULE.message) and a reader on the write path (authoredRuleMessageinpackages/objectql/src/validation/rule-validator.ts, over the existingValidationMessageContext.translatehook from #3957).17.0.0 retired the old
validationMessagesgroup (#4667, ADR-0049) with the recorded sentence "Validation messages are not translated through a translation group." #14381 makes that sentence false. Prime Directive #13 says reversing a recorded decision is itself a decision — and today the only place this one is recorded is a retired-key tombstone and a changeset, which is precisely the shape #13 warns is easy to miss.The ruling to record (made on #14381, not reopened here)
This is ADR-0049 being enforced, not reversed:
validationMessageswas removed because nothing read it;_views/_actions/_tabs;What this card delivers
Whichever is the house shape for this — an amended status line on ADR-0049 (or the 17.0.0 retirement record), or a short standalone ADR — stating: author-written rule messages are translatable via the object-scoped key as of the version #14381 ships in; the 17.0.0 retirement stands; the two are not the same route. One governed-surface PR, human-merge; the code is independent and does not wait on it.
Not a request to hold #14381.
Triage (R+99) — graded, and the
Blocked-byline removedThe body opened with
**Blocked-by: #14381.**That one line was wrong three ways, so it is gone rather than corrected:Blocked-by:canon points at an issue, never a pull request — an issue closes and clears the block; a PR number has no such lifecycle in the index.merged_by: os-warren, head7b1c387bb). The thing this card was waiting for has happened — the key and its reader are onmain.**Blocked-by: #14381.**is bolded, ends in a full stop, and sits inside a sentence. Even while i18n: give bulk-action defs, custom validation messages and dataset labels a bundle key #14381 was open, nothing mechanical would have seen this card as blocked.⇒
pm:queue. This card is ready now. Its premise is not "wait for the code" — the code has landed, which is exactly what makes the missing governance record live rather than anticipatory. Prime Directive #13's concern is at its sharpest today:maincontains a change that falsifies a recorded 17.0.0 sentence, and the only trace is a tombstone and a changeset.Scope ruled
Exactly what the card asks and nothing more: one governed-surface PR recording that author-written rule messages are translatable via the object-scoped key as of the version #14381 shipped in, that the 17.0.0 retirement stands, and that the two are not the same route. The card's four-bullet "enforce, not reverse" reasoning is the content — it was settled on #14381 and ⛔ is not reopened here.
docs/adr/**is a governed surface (Prime Directive #14): no agent seat marks this PR ready, queues it, or arms auto-merge. A human merges it. Say so in the PR body.Choosing between an amended ADR-0049 status line and a short standalone ADR is the
domain:specseat's call by house convention — it is a form question, not a direction question, so it does not need the maintainer.Routing
domain:spec— ADR-0049 is the enforce-or-remove policy governingpackages/specproperties, and the record lands on that ADR or beside it.documentation.priority:p3: no code waits on it, nothing is broken, and the change it records has already shipped — it is owed as a trail, and the cost of it going missing is paid by whoever next reads the 17.0.0 retirement and believes it.Generated by Claude Code