Filed by the domain:spec PM seat (session session_0174WZTU6XcFcS7g2kykC53i, seat post #6017) at 2026-09-04T04:09Z as the services half of the maintainer's ruling A on #14168 (comment 5507503059, 2026-09-02: one closed vocabulary and one membership predicate shared by settings specifiers and object fields), whose spec half landed in PR #15133 (merge 1d7e76a6, 04:05Z). Cross-lane request into the domain:services lane; domain:* is triage's to set. Provenance: the #14168 dev's read-and-report (comment 5534923686), the seat's contract review (PR #15133 comment 5535158979, ruling 2), director audit 5535155127.
What the spec now exports (on origin/main 5c584231a, 04:06Z)
@objectstack/spec/shared (packages/spec/src/shared/value-domain.zod.ts, re-exported at shared/index.ts:35): ValueDomainSchema (:97), ISO_3166_ALPHA2_CODES (:123), isValueDomainMember(domain, value) (:175). SpecifierValueDomainSchema is now the alias = ValueDomainSchema (system/settings-manifest.zod.ts:156), and its doc block states that the settings door enforces with the shared predicate on the write path. The field error code value_domain (api/errors.zod.ts:268) carries four-locale message templates.
The ask (packages/services/service-settings)
- Re-point
packages/services/service-settings/src/value-domains.ts symbol by symbol onto @objectstack/spec/shared — isIanaTimeZone, iso4217Codes, ISO_3166_ALPHA2 / ISO_3166_ALPHA2_CODES (:114 re-exports a module-private set today), DOMAIN_MEMBERSHIP — deleting the copies, so knownValueDomain (:140), firstRejectedDomainMember (:163) and valueDomainPhrasing (:179) answer from the one predicate. Measured equivalence is the bar: the same 162 ISO 4217 codes, the same 249 alpha-2 codes, UTC admitted as a zone.
- One code on both doors (seat ruling 2, open to the maintainer's veto): the settings door's refusal for a non-member becomes
value_domain (the catalog's rule is that the code is the constraint's own name), with a pin that states the wire-visible change on the settings door; the message text comes from the spec's catalog templates.
- Tests. The existing value-domain suite in
service-settings re-run against the shared predicate; a pin that service-settings no longer defines its own membership tables (an import-shape test or a grep-class ratchet on the module).
Not in scope
The engine's write path on object fields (the domain:engine card filed alongside); #15134 (the packages/core copy, a finding awaiting first grading — the dev landing this card is its natural reader, the grading is triage's).
Generated by Claude Code
Filed by the
domain:specPM seat (sessionsession_0174WZTU6XcFcS7g2kykC53i, seat post #6017) at 2026-09-04T04:09Z as the services half of the maintainer's ruling A on #14168 (comment 5507503059, 2026-09-02: one closed vocabulary and one membership predicate shared by settings specifiers and object fields), whose spec half landed in PR #15133 (merge1d7e76a6, 04:05Z). Cross-lane request into thedomain:serviceslane;domain:*is triage's to set. Provenance: the #14168 dev's read-and-report (comment 5534923686), the seat's contract review (PR #15133 comment 5535158979, ruling 2), director audit 5535155127.What the spec now exports (on
origin/main5c584231a, 04:06Z)@objectstack/spec/shared(packages/spec/src/shared/value-domain.zod.ts, re-exported atshared/index.ts:35):ValueDomainSchema(:97),ISO_3166_ALPHA2_CODES(:123),isValueDomainMember(domain, value)(:175).SpecifierValueDomainSchemais now the alias= ValueDomainSchema(system/settings-manifest.zod.ts:156), and its doc block states that the settings door enforces with the shared predicate on the write path. The field error codevalue_domain(api/errors.zod.ts:268) carries four-locale message templates.The ask (
packages/services/service-settings)packages/services/service-settings/src/value-domains.tssymbol by symbol onto@objectstack/spec/shared—isIanaTimeZone,iso4217Codes,ISO_3166_ALPHA2/ISO_3166_ALPHA2_CODES(:114re-exports a module-private set today),DOMAIN_MEMBERSHIP— deleting the copies, soknownValueDomain(:140),firstRejectedDomainMember(:163) andvalueDomainPhrasing(:179) answer from the one predicate. Measured equivalence is the bar: the same 162 ISO 4217 codes, the same 249 alpha-2 codes,UTCadmitted as a zone.value_domain(the catalog's rule is that the code is the constraint's own name), with a pin that states the wire-visible change on the settings door; the message text comes from the spec's catalog templates.service-settingsre-run against the shared predicate; a pin thatservice-settingsno longer defines its own membership tables (an import-shape test or a grep-class ratchet on the module).Not in scope
The engine's write path on object fields (the
domain:enginecard filed alongside); #15134 (thepackages/corecopy, afindingawaiting first grading — the dev landing this card is its natural reader, the grading is triage's).Generated by Claude Code