You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e2c2620
Browse filesBrowse the repository at this point in the historyBrowse files
fix(cli): os i18n check counts the coverage an app actually owns, so --strict / --threshold can gate an app package (#17223)
* fix(cli): os i18n check counts the coverage an app actually owns
`collectExpectedEntries` walks the Studio metadata-form registries
unconditionally, so every stack's expected set carries ~773
`metadataForms.*` keys that `@objectstack/platform-objects` translates and
the runtime serves. `os lint` hides them and says so; `os i18n extract` has
`--no-metadata-forms`; `os i18n check` — the one command that publishes a
PERCENTAGE — carried them in its denominator, so an application with its own
surface fully translated read 38.9% and `--strict` / `--threshold` could not
gate it.
Ownership is now OBSERVED rather than assumed: the baseline counts when the
stack itself ships those translations, and does not when it does not. That
keeps the package which owns the family gated with no flag, which an
unconditional exclusion would not. `--include-platform` (`os lint`'s own
spelling) and `--no-include-platform` force either way.
`os lint` is unchanged: the shared seam still defaults to counting the
baseline, because lint folds it away one seam later and counts what it folded
for its own hint line.
Claude-Session: https://claude.ai/code/session_015QE8qk46e5CHJxyQEUjbf8
Co-authored-by: Claude <noreply@anthropic.com>
* docs(i18n): state who owns the metadata-form baseline where the gate is taught
`content/docs/ui/translations.mdx` recommends `os i18n check --strict
--threshold` as the CI gate; that advice is now reachable for an app package,
and the page has to say what is and is not in the number it produces —
including why shipping your own `metadataForms` bundle to move it is the wrong
repair.
The published i18n skill listed metadata forms among the surfaces `check`
always reports on. That sentence is false as of this change, so it is
corrected in place rather than left to read as a scope statement.
`content/docs/protocol/kernel/i18n-standard.mdx` names `metadataForms` only in
its ORPHAN-key paragraph (the reverse direction, which `os validate` / `os
lint` / `os compile` answer) — untouched by this change and left alone.
Claude-Session: https://claude.ai/code/session_015QE8qk46e5CHJxyQEUjbf8
Co-authored-by: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
description: 'List every missing key (otherwise the first 20 per locale are shown)',
80
120
}),
121
+
// The same flag NAME and the same default as `os lint`, deliberately: this
122
+
// command was the odd one out of three, and a third vocabulary for one
123
+
// decision is what made an author go read the source to find out whether
124
+
// the platform bucket counts. `os i18n extract` spells its half
125
+
// `--no-metadata-forms`, which selects an emitted FILE SET rather than a
126
+
// gated population — see the table in the module note at the top of this
127
+
// file.
128
+
//
129
+
// `allowNo` gives the third state a percentage gate needs. Absent, the
130
+
// decision is `auto` — observed from the config, so neither an app nor the
131
+
// platform package has to discover a flag to get the right number.
132
+
// `--include-platform` forces the baseline in; `--no-include-platform`
133
+
// forces it out, for a package that ships a partial baseline and does not
134
+
// intend to own the rest of it.
135
+
'include-platform': Flags.boolean({
136
+
allowNo: true,
137
+
description:
138
+
'Count platform built-in metadata forms toward coverage (default: only when this stack ships their translations — the platform packages own them otherwise)',
0 commit comments