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
skills/objectstack-i18n: the _actions row and the translation-target-unknown paragraph omit the action-entry keys os validate judges (param options, outcomeMessages, resultDialog leaves and fields) #21583
Filed on the maintainer's instruction, given in session session_01UtnxvdiN376GF3sgXwAw4d's chat and quoted verbatim: 「1. 一处技能文档修改等您动手: skills/objectstack-i18n/SKILL.md 有一处修改没有建卡,你应该创建issue」. Until now this was a debt without a card, recorded on the domain:spec seat post #6017 under "Owed by this seat, no card". Filed by domain:spec seat 1 after stand-down. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.
What is wrong (read on origin/maincc645f2385)
The published skill skills/objectstack-i18n/SKILL.md teaches the translation-bundle shape that agents write. It lags what os validate / os lint / os compile now judge under an action entry. Those rules came with #21216 (PR #21258), #21264 (PR #21304) and #21261. The reference page, content/docs/protocol/kernel/i18n-standard.mdx:1039–:1058, already states every rule. The skill states only part of them.
The _actions.{action_name} row (:164) lists label, description, confirmText, successMessage, params.{param_name} and a bare resultDialog. Missing:
params.{param}.options.{value}: a param's inline option values. A wrong key is a translation-option-key-unknown warning. A param that references a field with no inline options is not judged.
outcomeMessages.{outcome}: an outcome the action's own outcomeMessages declares.
resultDialog.title / .description / .acknowledge: valid only when the action declares a resultDialog. Under an action that declares none, they are a translation-target-unknown error (checkActionResultDialogLeaves, packages/lint/src/validate-translation-references.ts:2065).
resultDialog.fields.{path}: the literal path of a field in resultDialog.fields[], dots included (client.secret is one key).
The same sub-keys hold under globalActions.{action} (checkActionEntry, called from both loops).
The translation-target-unknown paragraph (:198–:202) lists what a key can fail to name: "object, field, view, tab, action, param, section, validation rule, app, nav item, dashboard, widget or flow screen". It omits three cases that are now errors:
an outcome the action does not declare;
a result-dialog field path the action does not declare;
result-dialog copy under an action with no resultDialog.
It also does not say that param option keys share the option warning.
Reach: an agent that authors a bundle from this skill gets no warning about any of these shapes:
it has no way to learn that outcomeMessages and resultDialog.fields copy is keyable;
it gets no warning that dialog copy under a dialog-less action fails os validate with an error;
it is not told that a bound action's copy under globalActions is refused.
The skill's own pointer to translation.zod.ts does not cover the lint's cross-reference rules.
Direction (for triage, not a ruling)
Bring the three places in line with i18n-standard.mdx:1039–:1058, which is already right. ⛔ No second vocabulary: name the keys and rules the way the page and the lint do.
All 134 open issues and PRs were listed over REST, and the 300 most recently updated closed ones. Their titles and bodies were grepped for objectstack-i18n, i18n/SKILL, resultDialog and outcomeMessages. The hits are:
Filed on the maintainer's instruction, given in session
session_01UtnxvdiN376GF3sgXwAw4d's chat and quoted verbatim: 「1. 一处技能文档修改等您动手:skills/objectstack-i18n/SKILL.md有一处修改没有建卡,你应该创建issue」. Until now this was a debt without a card, recorded on thedomain:specseat post #6017 under "Owed by this seat, no card". Filed bydomain:specseat 1 after stand-down. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.What is wrong (read on
origin/maincc645f2385)The published skill
skills/objectstack-i18n/SKILL.mdteaches the translation-bundle shape that agents write. It lags whatos validate/os lint/os compilenow judge under an action entry. Those rules came with #21216 (PR #21258), #21264 (PR #21304) and #21261. The reference page,content/docs/protocol/kernel/i18n-standard.mdx:1039–:1058, already states every rule. The skill states only part of them.The
_actions.{action_name}row (:164) listslabel,description,confirmText,successMessage,params.{param_name}and a bareresultDialog. Missing:params.{param}.options.{value}: a param's inline option values. A wrong key is atranslation-option-key-unknownwarning. A param that references afieldwith no inlineoptionsis not judged.outcomeMessages.{outcome}: an outcome the action's ownoutcomeMessagesdeclares.resultDialog.title/.description/.acknowledge: valid only when the action declares aresultDialog. Under an action that declares none, they are atranslation-target-unknownerror (checkActionResultDialogLeaves,packages/lint/src/validate-translation-references.ts:2065).resultDialog.fields.{path}: the literalpathof a field inresultDialog.fields[], dots included (client.secretis one key).globalActions.{action}(checkActionEntry, called from both loops).The
globalActionsline (:170) reads "(object-less actions)". It matches lint: os validate refuses a bound action's globalActions translation key as "never read", but the spec's own i18n resolver reads it as the object-scoped key's fallback #21261. It does not say that aglobalActionskey naming a bound action is an error, or that the message names theobjects.{owner}._actions.{action}key to write instead (i18n-standard.mdx:1053).The
translation-target-unknownparagraph (:198–:202) lists what a key can fail to name: "object, field, view, tab, action, param, section, validation rule, app, nav item, dashboard, widget or flow screen". It omits three cases that are now errors:resultDialog.It also does not say that param option keys share the option warning.
Reach: an agent that authors a bundle from this skill gets no warning about any of these shapes:
outcomeMessagesandresultDialog.fieldscopy is keyable;os validatewith an error;globalActionsis refused.The skill's own pointer to
translation.zod.tsdoes not cover the lint's cross-reference rules.Direction (for triage, not a ruling)
i18n-standard.mdx:1039–:1058, which is already right. ⛔ No second vocabulary: name the keys and rules the way the page and the lint do.skills/**is governed text (Tier H), so the PR lands only by the maintainer's hand or authorized approval. Triage5943006586on lint: os validate does not judge an action translation's resultDialog title / description / acknowledge copy when the action declares no resultDialog, so the copy passes clean and is never read #21264 already named it "a separate Tier H PR" (domain:skills).5944914497③ on PR feat(lint): os validate refuses an action translation's resultDialog title / description / acknowledge when the action declares no resultDialog #21304.Dedupe
All 134 open issues and PRs were listed over REST, and the 300 most recently updated closed ones. Their titles and bodies were grepped for
objectstack-i18n,i18n/SKILL,resultDialogandoutcomeMessages. The hits are:ComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464 (ComponentPropsMap, unrelated);None carries this edit.
Dedupe words:
objectstack-i18n skill _actions outcomeMessages resultDialog·translation-target-unknown skill paragraph·i18n SKILL.md Tier H action keys