Skip to content

docs(skills): name translation-target-unknown an error in the i18n skill - #17946

Queued
claude[bot] wants to merge 1 commit into
mainfrom
claude/issue-17787-i18n-severity-words
Queued

docs(skills): name translation-target-unknown an error in the i18n skill#17946
claude[bot] wants to merge 1 commit into
mainfrom
claude/issue-17787-i18n-severity-words

Conversation

@claude

@claude claude Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Fixes #17787

What changed

skills/objectstack-i18n/SKILL.md :196–:201 — one sentence, re-flowed within its own six lines. It grouped translation-target-unknown and translation-option-key-unknown under the single word "warnings"; on the tree the first is raised at error and fails the run, the second stays a warning. The sentence now names each id with its own severity. No other file is touched.

Before (flattened):

os validate / os lint / os compile check this direction and report it as warnings (translation-target-unknown, translation-option-key-unknown): a key naming an object, field, view, tab, action, param, section, validation rule, app, nav item, dashboard, widget or flow screen that does not exist is listed alongside the names that do. …

After (flattened):

os validate / os lint / os compile check this direction: translation-target-unknown is an error and fails the run; translation-option-key-unknown is a warning. A key naming an object, field, view, tab, action, param, section, validation rule, app, nav item, dashboard, widget or flow screen that does not exist is listed alongside the names that do. …

The tail of the paragraph (「A bundle keyed to something since renamed still parses — …」) is content-identical; only line breaks moved.

Severities re-measured on the tree (card acceptance item 2)

Measured at origin/main 84e6b05 (this branch's base), not against the card:

id severity on the tree evidence
translation-target-unknown error packages/lint/src/validate-translation-references.ts :31 (severity note), :151 TRANSLATION_TARGET_UNKNOWN_SEVERITY = 'error', :155–:156 (field docblock), emitted at :813 and :1265; test validate-translation-references.test.ts :306 「raises translation-target-unknown at error, selectable by its exact id」
translation-option-key-unknown warning same file :1210 and :1229 severity: 'warning' beside rule: TRANSLATION_OPTION_KEY_UNKNOWN; test :327 「leaves translation-option-key-unknown at warning

The card's wording is still current: the option-key rule has not moved since the triage grading.

Acceptance greps (both directions, this branch at 1974cee)

  • grep -c 'report it as warnings' skills/objectstack-i18n/SKILL.md0
  • lit control: grep -c 'translation-option-key-unknown' skills/objectstack-i18n/SKILL.md1
  • error inside the same sentence as translation-target-unknown: see the flattened "After" sentence above — 「… check this direction: translation-target-unknown is an error and fails the run; …」

Line and token readings for skills/**

reading before (84e6b05) after (1974cee) delta
skills/objectstack-i18n/SKILL.md lines 494 494 +0
skills/objectstack-i18n/SKILL.md bytes 18830 18850 +20
skills/objectstack-i18n/SKILL.md ratchet tokens (ceil bytes/4) 4708 (ceiling 6338, headroom 1630) 4713 (ceiling 6338, headroom 1625) +5
whole package: all skills/*/SKILL.md lines summed 6134 6134 +0
whole skills/objectstack-i18n/ directory lines 524 524 +0
ratchet bundle total (whole shipped tree, tokens) 139594 139599 +5

+0 lines is met by re-flowing only the six lines of the edited sentence (new widths 91/81/87/92/88/68; the sentence's own pre-edit maximum was 92, at line 200). Nothing outside the sentence was re-wrapped and no content was deleted to pay for anything. The ratchet prices tokens, not lines; the ceiling is untouched.

Gates

Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on 1974cee (24 commands — the same 24 the dispatch clue list named), each run in the foreground with its exit code captured before any pipe, then reconciled with --ran: 24 derived, 24 run, 0 NOT-MEASURED, 0 UNRUN.

command exit
node scripts/check-ci-filter-parity.mjs 0
node scripts/check-closing-keyword-parity.mjs 0
node scripts/check-closing-keyword-parity.mjs --self-test 0
node scripts/check-comment-mask-corpus.mjs 0
node scripts/check-doc-route-spelling.mjs --advisory 0
node scripts/check-doc-route-spelling.mjs --self-test 0
node scripts/check-skills-token-ratchet.mjs 0
node scripts/check-skills-token-ratchet.mjs --self-test 0
node scripts/report-test-timings.mjs --self-test 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0
pnpm --filter @objectstack/spec run check:skill-docs 0
pnpm check:agent-test-spelling 0
pnpm check:corpus-claim-drift 0
pnpm check:cross-package-test-inputs 0
pnpm check:doc-authoring 0
pnpm check:driver-memory-census 0
pnpm check:nul-bytes 0
pnpm check:pm-governed-merges 0
pnpm check:refd-timer-probe 0
pnpm check:role-word 0
pnpm check:skill-compatibility 0
pnpm check:skill-frame-sync 0
pnpm check:skill-identifier-liveness 0
pnpm check:watch-hint-literal 0
  • check:doc-formula-expressions: the first run exited 3 (PREREQUISITE NOT MET@objectstack/formula and @objectstack/lint are not built in a fresh worktree), which measures nothing. After pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint (the remedy the gate itself prescribes; run under scripts/pm/os-verify-lock.sh, VERDICT command-exit 0) it exited 0. The build left the tree clean (git status --porcelain printed nothing).
  • check:skill-docs reads only the SKILL.md frontmatter (the catalog); this body edit moves no generated listing — it reports in sync, nothing regenerated.
  • Not owed, not run: no workspace package is touched (skills/ is not one), so there is no dependency-closure build and no package test / typecheck for this diff. The 14 "pending-changeset" families the derivation lists apply only once a changeset exists; this PR ships none (measured below).

Changeset: skip-changeset, measured

skills/** reaches customer projects at scaffold time through packages/create-objectstack/src/skills-install.ts (SKILLS_CATALOG = 'objectstack-ai/objectstack/skills', pulled from the git catalog by the skills CLI) — not inside any npm tarball. Measurement on 1974cee: 70 non-private package.json manifests under packages/, examples/ and apps/ (node_modules excluded); 0 whose files[] mentions skills; positive control: 70 whose files[] mentions dist. create-objectstack itself ships ["dist", "README.md", "CHANGELOG.md"]. No released package's files[] ships this path, so nothing published moves ⇒ skip-changeset, applied with the additive labels endpoint and read back.

Governed surface

skills/** is governed (AGENTS.md Prime Directive #14). This PR stays a draft: no seat flips it ready, queues it, arms auto-merge or submits a review — the maintainer lands it by hand.

Acceptance notes

  • Other carriers of the literal id, re-checked on 84e6b05 with git grep -n 'translation-target-unknown' origin/main -- skills content docs examples: examples/app-showcase/test/seed.test.ts:94 (already says the rule fails) and docs/audits/2026-07-app-metadata-reference-integrity-assessment.md:143 (a dated audit table of counts). Neither is false; nothing filed.
  • Open PRs: one was opened after the dispatch's serial reading (test(service-automation): characterize a config-less wait / boundary_event node at run time #17937); its file list does not touch skills/.
  • noted, not filed: the skill nowhere else states what an error-severity finding does to a run, which is why the sentence spells out "fails the run" instead of relying on the severity word alone. No carrier.

维护者速读(草稿)

改了什么:skills/objectstack-i18n/SKILL.md 里的一句话(第 196–201 行)。原句把 translation-target-unknowntranslation-option-key-unknown 一起称为「warnings」;现在分别写明:前者是 error,会让 os validate / os lint / os compile 这次运行失败;后者仍是 warning。只改这一句,文件行数 494 → 494。

为什么改:PR #17777 已把 translation-target-unknown 提到 error 级(packages/lint/src/validate-translation-references.ts),技能文件却还说它是 warning。技能是 AI 作者最先读、而且不会去复核的那份说明——写错等于教 AI 把一个会让构建失败的问题当成可忽略的提示。

风险与代价(含回滚):纯文档改动,不发布任何 npm 包(实测 70 个非 private 包的 files[] 无一包含 skills/),无运行时影响。技能 token 棘轮 +5(上限 6338,余量 1625),不动上限。回滚 = revert 这一个 commit。

席位意见:(留空,待席位定稿)

你要做的:确认这句表述与你对两个规则严重度的预期一致,然后人工合并(受管面 skills/**,不走队列)。若 translation-option-key-unknown 日后也提级,这句话需要再改一次。


Generated by Claude Code

The i18n skill grouped `translation-target-unknown` and
`translation-option-key-unknown` under one word, "warnings". On the tree
`translation-target-unknown` is raised at `error` and fails the run
(`packages/lint/src/validate-translation-references.ts`, severity note and
`TRANSLATION_TARGET_UNKNOWN_SEVERITY`); only the option-key rule stays a
warning. The sentence now names each id with its own severity, re-flowed
within its own six lines so the file stays at 494 lines.

Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8
Co-authored-by: Claude <noreply@anthropic.com>
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 13, 2026
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 13, 2026
@claude

claude Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Contract review

Head: 1974cee66307192382ae1ca6bd3709ddf8fbeda0 (PR #17946, card #17787) — read at 2026-09-13T07:37Z by the skills seat at the contract-review tier (served model claude-fable-5-1, get_session external_metadata.last_served_model at 2026-09-13T07:35Z).

① derived judgments: the diff makes ONE tool-contract claim on a published skill — translation-target-unknown is an error that fails the run, translation-option-key-unknown is a warning — matched against packages/lint/src/validate-translation-references.ts on origin/main bd25e897: TRANSLATION_TARGET_UNKNOWN_SEVERITY = 'error' (:151) and severity: 'warning' for the option-key rule (:1210, :1229): correct. The paragraph tail is content-identical, re-flowed within the edited sentence only. No accept-set or public-surface change (check-clause2-carriers --pair 17946 exit 0, no widening tell).
② semver: nothing an npm package publishes moves (skip-changeset measured: 70 manifests, 0 files[] naming skills/, positive control 70 naming dist); consistent with the declared Clause-②: no.
③ boundary flags: none raised (open_questions: []).

Implemented-by: claude/issue-17787-i18n-severity-words (mode:subagent)
Reviewed-by: session_01DAcomhvR9kKizeYgg89Vo8

Verdict: PASS. Governed surface (skills/**): no gate carrier was hung (the content limb is reviewed here); the PR stays a draft for the maintainer's hand merge.


Generated by Claude Code

@claude

claude Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

维护者速读

改了什么 —— skills/objectstack-i18n/SKILL.md 里一句话。原文把 translation-target-unknowntranslation-option-key-unknown 都叫「警告」;新文分开说:前者是错误、会让 os lint / os validate / os build 失败,后者仍是警告。494 → 494 行,token 4708 → 4713(上限 6338)。

为什么改 —— PR #17777(你批的 #16310 裁决)把孤儿翻译键升成了错误,而发布的技能仍说它是警告——agent 照技能写元数据,不会去看工具自己打印的严重级。本席在 origin/main 上重测过两条规则的严重级,与新文一致。

风险与代价(含回滚) —— 纯文档面;唯一的形变是那一句被重新断行(只动了这一句的六行,行数不变)。回滚 = revert 单文件六行。

席位意见 —— 收。本席亲核:「report it as warnings」0 命中、两个规则 id 各 1、error 与 target-unknown 同句;lint 源码 :151 'error'、:1210 / :1229 'warning';单父提交;24 个门禁 exit 0;--pair 17946 exit 0;契约复核 PASS 记录 5651992708。CI 在读时 23 绿、1 在跑(Lint & Repo Gates)。

你要做的(一个动作) —— 受管面(skills/**):CI 转绿后 approve 并合并。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 13, 2026 08:09
@os-zhuang
os-zhuang enabled auto-merge September 13, 2026 08:09
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 13, 2026
Any commits made after this event will not be merged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants