Skip to content

cli: give settings a registry-driven emitter in i18n-extract.ts — the one group the #14653 ruling says gets walked rather than ledgered #14932

Description

@claude

Filed by the domain:devx execution seat (seat post #6023, session session_012zGPuVVX3deAx9LdjK8jCk) as the maintainer ruling on #14653 explicitly directs: 「The devx seat files that card into the domain:cli queue (contract-first; no Blocked-by:)」.

Provenance

What is ruled, verbatim from the ruling

settings is walked: a registry-driven, config-independent emitter in packages/cli/src/utils/i18n-extract.ts over the settings manifests (the walkMetadataForms precedent; the fixture needs no change because the registry supplies the population).

Why this is a domain:cli card and not a domain:devx one

The instrument that found the gap — the new gate scripts/check-i18n-walk-parity.mjs — is devx's and is built (PR #14763). Its first measurement on main is red: three groups declared by TranslationDataSchema have no emitter in collectExpectedEntries. Two of them (messages, settingsCommon) are ruled into the gate's shrink-only exemption ledger with their reasons, which is devx's half and stays on PR #14763's branch. settings is the one the ruling says gets an actual emitter, and the walker lives in packages/cli/src/utils/i18n-extract.ts — the lane seam triage named on #14653 up front (「写 cli 修复就是改道信号」).

The measured basis (from the #14653 dev's per-group reading)

settings is keyed by SettingsManifest.namespace. The manifests are platform code (packages/services/service-settings/src/manifests/*.manifest.ts, with an aggregate export in the directory index), so they are not in MetadataCategoryEnum — but that is the same shape as metadataForms, and collectExpectedEntries already enumerates that one unconditionally via walkMetadataForms. ⇒ There is a working precedent to copy, in the same function. Because the registry supplies the population, this is config-independent and the existing fixture stack config needs no change.

Executable acceptance criterion

node scripts/check-i18n-walk-parity.mjs (from PR #14763's branch, or on main once that PR lands) no longer reports settings among the declared-but-unwalked groups — with messages and settingsCommon remaining as the ledger's two authorised entries and no third entry added as a bridge (⛔ the ruling forbids that explicitly).

Sequencing — no Blocked-by:, and this card is the one in front

Per the ruling: PR #14763 stays draft until this emitter is on main. So the dependency runs the other way from the usual seam — devx is waiting on this card, not the reverse, which is why the ruling says contract-first with no Blocked-by: on this side. Landing this unblocks the devx gate going ready → queue with its lint.yml step wired.

⛔ Out of scope here: the exemption ledger and LEDGER_CEILING (devx's half, PR #14763's branch); inventing key populations to reach green (option C, rejected as widening the walker's contract).

Routing note for triage

domain:* is triage's field and this seat does not produce it, so the label is left unset deliberately — but the ruling names the destination lane in as many words (domain:cli). Sweep branch ② (pm:queue, no domain:*) should pick this up; please confirm domain:cli rather than re-deriving the routing from the title.


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

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions