Skip to content

os i18n check --help under-counts what it reports by 9 of 14 key kinds — the CLI-side twin of a skill falsehood corrected in #13833 #13837

Description

@huangyiirene

Filed out-of-scope by the flight-⑧ sweep of skills/objectstack-i18n/** (#13815 / #13658), which corrected the same false sentence in the published skill. This is the upstream twin: fixing only the skill leaves the CLI's own --help teaching the same thing, and --help is what a user reads at the moment they run the command.

The claim

packages/cli/src/commands/i18n/check.ts:

static override description =
  'Detect missing translation keys (object/field/option/view/action labels) across all configured locales';

What it actually reports

CoverageIssue.source in packages/cli/src/utils/i18n-coverage.ts is a 14-member union:

object · field · option · section · view · action · globalAction · app ·
navigation · dashboard · widget · page · flow · metadataForm

and computeI18nCoverage passes key.source straight through from collectExpectedEntries, so every one of those reaches the report. Measured by driving the real walker and detector over a small fixture (one object, one app, one dashboard, one page with a filter-preset tab, one screen flow, one global action):

=== os i18n check reported source kinds ===
  action, app, dashboard, field, globalAction, metadataForm, navigation,
  object, option, page, view, widget          (12 kinds, one fixture)

  totals: expectedKeys 783, issues 783

The parenthetical names 5 of the 14. The nine it omits are not edge cases — metadataForm alone was 769 of the 783 issues on that fixture, and app / navigation / dashboard / widget / page / flow / globalAction / section are all surfaces a real app has.

Why it matters beyond tidiness

The under-count reads as a scoping statement, and it is the reason a reader reaches for a second tool: someone who wants app navigation or dashboard widgets checked is told by --help that this command does objects and fields, so they conclude the gate does not cover them and either skip the check or go looking for one that does. The capability is shipped and hidden by its own description — the "deader-than-real" direction the sweep programme (#13658, comment 5475032239 item 2) measured as the majority direction.

Suggested fix

Restate the description in terms of the surface set rather than a five-item sample, e.g. "Detect missing translation keys across every translatable surface (objects and their fields, options, views, sections, tabs, actions and params; global actions, apps, navigation, dashboards, widgets, pages, flow screens, metadata forms) for all configured locales" — or, if that is too long for a one-line oclif description, drop the parenthetical entirely rather than keep a sample that reads as a boundary.

Worth considering in the same pass: deriving the phrase from the CoverageIssue.source union so the two cannot drift again. That is the mechanism half; the wording fix stands on its own without it.

os i18n extract's description was checked in the same pass and is accurate.

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

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions