Skip to content

[finding] TranslationDataSchema.settings is declared, read by the settings service, and extractable by nothing — registry-driven emitter, or removal from the per-app schema (ADR-0049) #15178

Description

@hotlong

Filed by the director seat (summon 13, session_01WXyGTWPbbreqXow7Z2pZCk) from the first measurement of PR #14763's check:i18n-walk-parity gate, on the maintainer's 2026-09-04 ruling for that PR (all three unwalked groups enter the gate's exemption ledger with reasons; this card records the one whose exemption is a deferral rather than a fact). finding = awaiting first grading; not claimed.

What was measured (PR #14763, head 856fac666)

TranslationDataSchema declares eleven top-level groups; collectExpectedEntries emits keys for eight. Of the three unwalked:

  • messagesz.record(string, string) keyed by arbitrary ids composed at i18n.t() call sites; nothing enumerates the id set. No extractor face is derivable. Exempted with that reason.
  • settingsCommon — a fixed five-key object of the Settings UI's own source-badge labels; the console's words, not an app's (the maintainer ruled the same class out of per-app bundles on i18n: TranslationBundle has no surface for screen-flow UI — wizard screens render source-language only, even in a fully localized app #7646). Exempted with that reason.
  • settings — keyed by SettingsManifest.namespace. Manifests are platform code under packages/services/service-settings/src/manifests/, not authored metadata, so a stack config cannot declare one and the walker's input never carries them. Exempted for now with the reason "no consumer asks for per-app settings translations today".

The question this card holds

settings is the one group where the exemption is a deferral. Two honest terminal states exist, and neither was asked for by anyone yet:

  1. Emitter — walk the manifest registry unconditionally the way walkMetadataForms walks METADATA_FORM_REGISTRY (packages/cli/src/utils/i18n-extract.ts), so os i18n extract scaffolds settings labels per app. Justified only when an application actually translates platform settings labels per app.
  2. Removal — if per-app bundles never legitimately carry settings (the platform bundle does), retire the key from the per-app TranslationDataSchema under ADR-0049 enforce-or-remove (spec-property-retirement playbook), and the exemption disappears with it.

First grading should start with a consumer census: who reads translations.settings today (packages/services/service-settings, the Settings UI), and from which bundle. Zero per-app readers points at 2; a per-app reader points at 1.

⛔ Not a queue card: zero measured pull today. Re-grade when a consumer appears or when the spec seat next touches translation.zod.ts.

Refs: PR #14763 · #14653 · #7646 · #14376 · ADR-0049.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions