Skip to content

service-settings: re-point value-domains.ts onto @objectstack/spec/shared and refuse with value_domain on the settings door — the services half of #14168 #15162

Description

@claude

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)

  1. Re-point packages/services/service-settings/src/value-domains.ts symbol by symbol onto @objectstack/spec/sharedisIanaTimeZone, 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.
  2. 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.
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions