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
Description
Activity
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsTriage: first grade —
documentation·priority:p2·domain:skills·area:i18n·pm:queue. The skill states whatos validatejudges under an action entryTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-03T12:55Z. ⛔ Not a claim, ⛔ not a dispatch.Why p2. It is AI-facing published text that lags the gate (NORTH-STAR priority rule 4). An agent that authors from it never learns that some keys are keyable, and writes one shape the validator refuses with an error. Nothing is silently wrong at runtime: the gate is loud.
Routing:
skills/objectstack-i18n/SKILL.mdis Tier H, sodomain:skills, through its own governed PR. The card is the maintainer's own instruction (quoted on it).Ruling: mirror the reference page, which already states every rule (
content/docs/protocol/kernel/i18n-standard.mdx,:1039–:1058).- The
_actionsrow names every key the card lists: param options,outcomeMessages, theresultDialogleaves andfields.{path}. It says the same keys hold underglobalActions. - The
globalActionsline says a key naming a bound action is an error, and what the message prescribes. - The
translation-target-unknownparagraph names the three new error cases and the shared option warning. - ⛔ The skill does not restate the gate's internals. It names the shapes and the outcomes.
Generated by Claude Code
- The
- addedarea:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsdocumentationImprovements or additions to documentationImprovements or additions to documentationpriority:p2Medium: important, M3Medium: important, M3and removed
on Oct 3, 2026 objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01CB6W87z22K2yjUCDyVrJRk
Account:os-project-manager(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-21583-i18n-skill-action-entry-keys
Worktree:objectstack-issue-21583
Domain:domain:skills
Seat:domain:skills#1
File surface:skills/objectstack-i18n/SKILL.md— the bundle-shape table's_actionsrow (about :164 onorigin/main1968d5e), theglobalActionsline (about :170) and thetranslation-target-unknownparagraph (about :198–202); ⛔ no other file (stop on breach; explain in the report)
Container & model:M,mode:subagent,model: CONTRACT_REVIEW_TIER— MANDATORY perdispatch-gates --tier --repo objectstack-ai/objectstack skills/objectstack-i18n/SKILL.md, which prints "skills/objectstack-i18n/SKILL.md ⇢ 'skills/**' — clause ①"; Tier H landing (an authorized APPROVED review, then this seat lands)
Clause-②: no
Thread-read: 5969376283
Serial constraints cleared: none — the open objectstack PRs (read at 2026-10-04T00:20Z, plus this seat's own PRs #21650 / #21651 / #21652) touch noskills/objectstack-i18n/**path; no in-flight claim on this file; same-day churn none (last touch d0f1845). Token ratchet at 0c50b5d: 4752 / 6338 (headroom 1586). Readings taken at 2026-10-04T00:32Z.objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 21583, "status": "done", "branch": "claude/issue-21583-i18n-skill-action-entry-keys", "pr": "https://github.com/objectstack-ai/objectstack/pull/21656", "session": "session_01CB6W87z22K2yjUCDyVrJRk", "premise_still_valid": true, "summary": "Premise verified on origin/main 759dbe9e: the three spots read exactly as the card and the dispatch quoted (:164 row, :170 line, :198-203 paragraph), and packages/lint/src/validate-translation-references.ts judges every rule i18n-standard.mdx :1039-:1058 states (checkActionEntry from both the _actions and globalActions loops; param options as the warning rule with the field-backed skip; outcomes, dialog leaves and field paths as the error; a bound action under globalActions as an orphan whose hint names objects.{owner}._actions.{action}) — page and gate agree, so the page was not touched. Edited skills/objectstack-i18n/SKILL.md in three places, mirroring the page with no second vocabulary: the _actions.{action_name} row now names params.{param_name}.options.{value}, outcomeMessages.{outcome}, resultDialog.title/.description/.acknowledge (only under an action that declares a resultDialog) and resultDialog.fields.{path} (literal, dots included) and says the same keys hold under globalActions.{action_name}; the globalActions line says a key naming a bound action is an error whose message names the objects.{owner}._actions.{action_name} key; the translation-target-unknown paragraph names the three action-entry error shapes and the shared option warning (field-backed param with no inline options not judged). Draft PR opened via the fleet-write relay, left draft (Tier H, skills/**).", "tests": "line_budget: file 496 → 503 (net +7 of at most +8); package skills/**/SKILL.md 4397 → 4404; token ratchet 4752 → 5032 / ceiling 6338 (headroom 1586 → 1306), ceiling untouched. gates (tree afecd20b, every exit captured before any pipe): node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 24 commands = the dispatch's 24; --ran reconciliation 'Run reconciliation — 24 derived, 24 run, 0 NOT-MEASURED, 0 UNRUN' with all 24 exit codes recorded. All exit 0: check-ci-filter-parity; check-closing-keyword-parity + --self-test (40 assertions); check-comment-mask-corpus (8122 files, 0 disagree); check-doc-route-spelling --advisory ('population clean') + --self-test; check-skills-token-ratchet ('54 authored bundle file(s) within their ceilings') + --self-test (65 cases); pnpm check:agent-test-spelling (0 violations), check:corpus-claim-drift (251 files, 53 under skills), check:cross-package-test-inputs, check:doc-authoring ('53 published skill files clean — no internal issue-id references'), check:driver-memory-census, check:gitlink-declared, check:nul-bytes ('10027 text file(s) … no raw ASCII control bytes'), check:pm-governed-merges, check:refd-timer-probe, check:role-word, check:skill-compatibility ('10 SKILL.md file(s) reconciled'), check:skill-frame-sync, check:skill-identifier-liveness ('Leg 1: 457 citation(s) over 53 published file(s) … Leg 2: 8 registered exhaustive section(s), 0 ledgered gap(s)'), check:watch-hint-literal; pnpm --filter @objectstack/spec run check:skill-docs ('Skill docs in sync') and check:skill-refs ('9 generated files in sync', added per AGENTS.md for a SKILL.md body edit; both read frontmatter/src via tsx, no build needed); pnpm --filter @objectstack/lint run check:doc-formula-expressions ('22 record-scoped formula example(s) across 460 files / 1381 TS blocks judged clean') after turbo run build --filter=@objectstack/lint under os-verify-lock.sh (OS_VERIFY_LOCK_SLOT=issue-21583; 4 tasks all cache hits; VERDICT command-exit 0; no tracked file changed). Not measured locally, declared to CI: whole-tree families, type-check lanes, Test Core shards (no TypeScript or package touched). Byte hygiene: grep -naP for control bytes on the file = none; no tracker-shaped ids; no 'role'; no new code fence. ablation: none — a prose-only change, no behaviour to ablate.", "mcp_calls": "0 — no MCP GitHub tool used; issue and comments read with gh api (REST read), writes through scripts/pm/ only", "api_writes": "3 REST writes, all as objectstack-fleet[bot] through scripts/pm/ over the fleet-write relay (no bare curl/gh write, no MCP): ① POST /repos/objectstack-ai/objectstack/pulls (pr_create, draft forced; relay run 37166938480); ② one label-write dispatch = POST /repos/objectstack-ai/objectstack/issues/21656/labels (skip-changeset) + POST /repos/objectstack-ai/objectstack/issues/21656/assignees (os-project-manager); relay run 37167004297, read-back matched; ③ POST /repos/objectstack-ai/objectstack/issues/21583/comments (this os-dev-report, via post-stamped). Plus 2 git push (empty-branch probe, then afecd20b) — not REST. One REFUSED attempt landed nothing (see deviations).", "gates": "24/24 derived families green at afecd20b (+ check:skill-refs green); CI not awaited", "line_budget": "skills/objectstack-i18n/SKILL.md +7 net (at most +8); package 4397 → 4404; tokens 5032/6338", "files_changed": [ "skills/objectstack-i18n/SKILL.md" ], "deviations": "① The first pr_create dispatch was refused by the fleet write-pace budget (scripts/pm/write-pace.mjs: 40 of 40 writes in the trailing hour, exit 10, 'REFUSED until 2026-10-04T01:05Z'); not a classifier refusal and no route change — waited in the foreground inside this round (polling the local ledger, no write retried until the ledger said a slot was free), then sent once more on the same route at 01:05Z, success. ② Labels `documentation` and `size/s` on PR 21656 were set by another actor (the labeler), not by me; left untouched. ③ `pnpm --filter @objectstack/spec run check:skill-refs` run in addition to the 24 derived families (AGENTS.md ties it to any SKILL.md body edit); green. ④ No build was needed for check:skill-docs / check:skill-refs (both read frontmatter and packages/spec/src through tsx), so the dispatch's 'build spec first' step was replaced by a turbo build under the verify lock that turned out to be an all-cache-hit no-op; check:doc-formula-expressions did need the lint/formula dists and got them from that build.", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed · the skill states only the consequence of a field-backed action param with no inline options ('is not judged'); the page also gives the reason ('takes the field's list when the dialog renders') — left out to stay inside the +8 line budget; in the PR's Acceptance notes." ] }
Generated by Claude Code
objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsACCEPT — PR #21656 (head
afecd20b) · skills seat 1,session_01CB6W87z22K2yjUCDyVrJRk· 2026-10-04T01:16ZReviewed against GitHub, not the report (
references/review-checklist.md):- PR form: draft, base
main, first lineFixes #21583,Clause-②: noat line start; no closing keyword beside another card number; one session-URL footer. Files:skills/objectstack-i18n/SKILL.md+14/−7, the claimed surface and nothing else (the reference page untouched, as instructed). - Text vs the reference page (this seat's own read of
i18n-standard.mdx:1039–1058): the_actionsrow names param options (the warning),outcomeMessages.{outcome}, the threeresultDialogleaves only under an action that declares a dialog,resultDialog.fields.{path}with dots included, and the same keys underglobalActions; theglobalActionsline states the bound-action error and the key its message prescribes; the paragraph names the three error shapes and the shared option warning. No second vocabulary. - Readings off the head blob (this seat's own): 496 → 503 lines (+7, budget ≤ +8); 4752 → 5032 tokens (ceiling 6338); catalog
SKILL.mdsum 4397 → 4404. No ceiling moved. - Scope and changeset: skill text only;
skip-changesetapplies;documentation/size/sare the labeler's. Report comment 5975258458 present and parses;mcp_calls0;api_writes3 as listed; the one deviation is a write-pace wait (exit 10, resent after the window reopened), not a route change. - Value density (customer-agent seat): the row grows by the keys an author can actually write and the outcomes
os validatereturns; nothing restates the gate. Accepted. - Contract review record (
skills/**, governed rule text): PASS onafecd20b, posted on the PR. - CI at this write:
Governed Surface Queue Guardsuccess;Lint & Repo Gates,Type Check · workspace,Test Core1/6, 2/6 in progress — read again before the four-piece and at landing.
Landing: Tier H (
skills/**). The PR stays draft. Once the required jobs are green:needs-user-decisionon the PR, the final 维护者速读, review requested ofos-zhuang/hotlong. After an authorized APPROVED review this seat clears the label and lands through the relay (pr_ready+automerge_enable).- PR form: draft, base
objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsLanded — skills seat 1,
session_01CB6W87z22K2yjUCDyVrJRk· 2026-10-04T02:13ZPR #21656 MERGED through the queue at 2026-10-04T02:01Z as
506fb6da(one parent: squash), approved, readied, auto-merged and enqueued by os-zhuang himself (2026-10-04T01:35Z to 2026-10-04T01:36Z), so the seat's landing stroke was not needed; in-seat contract review PASS 5975318963 and ACCEPT 5975322135 onafecd20bare the record. Confirmed onorigin/mainby content:skills/objectstack-i18n/SKILL.mdcarriesoutcomeMessages.{outcome}(1 hit) and theglobalActionserror sentence namingobjects.{owner}._actions.{action_name}.Fixes #21583closed this cardcompleted;pm:dispatchedand the assignee are stripped in this stroke (the PR'sneeds-user-decisionwas stripped at 2026-10-04T01:44Z). The lane's open set matches expectation (no other card closed by a keyword).- added a commit that references this issue
on Oct 7, 2026
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