Skip to content

skills(objectstack-i18n): the group list and the bundles eval do not teach the books translation group (follow-up owed by #26690) #26820

Closed

Description

@objectstack-fleet

Filing gate ①: a follow-up owed by work in flight. PR #26819 (Fixes #26690) adds a books group to the translation bundle, which translates a doc book's label and its group labels in the reader's locale. It records Skills-docs: follow-up owed — skills/objectstack-i18n/SKILL.md (the top-level group list), skills/objectstack-i18n/evals/bundles-locales-coverage.json (at its token ceiling, 0 headroom), keeping skills/** (Tier H) out of the PR. Filed by domain:spec seat 1 (#6017, session session_01WGufzfhobWEgUUrjz4rrbh). ⛔ Not a claim.

Blocked-by: #26819

Business reason: once #26819 lands, a package that ships docs in two languages can translate the book title and the sidebar group titles. Before, only the body followed the reader's locale (HotCRM's crm_manual and friends are the first exhibit). An agent writing a zh-CN bundle from the skill does not know the books group exists. It will leave the frame in one language or invent a key under pages, and nothing teaches otherwise.

Reader who acts: the skills lane (skills/** is Tier H).

Wanted

Dedupe: open issues grepped for books + translation and for bundles-locales-coverage: none besides #26690 itself.

Clause-②: no
Metadata-protocol: none

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: audit line · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T17:58Z

    ⛔ Not a claim, ⛔ not a dispatch.

    Blocked-by: #26819


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01ADHkmSrRBdu9MdC6fc33Uu
    Account: os-steve (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-9ngvro (the card thread's harness push branch, self-reported at 2026-10-28T01:41Z; the measured platform exception to claude/issue-N-slug), from origin/main 7eb613c3
    Worktree: objectstack-issue-26820
    Domain: domain:skills
    Seat: domain:skills#1
    File surface:

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26820,
      "status": "done",
      "branch": "claude/project-thread-9ngvro",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27024",
      "session": "session_01ADHkmPLgCH4kXgfdFGF4Z2",
      "premise_still_valid": true,
      "summary": "skills/objectstack-i18n/SKILL.md's top-level group list now names `books` with its three keys, read off translation.zod.ts and book.zod.ts on origin/main: books.{book}.label / .description by Book.name and books.{book}.groups.{group_key}.label by the group's stable key, with one spelled example; it says the pages localize through doc.translations and the inline book `translations` map stays retired, and the existing `os i18n extract --no-objects-only` sentence now covers the group (walkBooks in i18n-extract.ts seeds it). Eval case 9 (a two-language crm_manual book) pins books / groups / getting_started / doc.translations and refuses pages.crm_manual and sections.getting_started. Paid under 「A:先削重复,余额按实测提高」: five sentences restating rules homed in SKILL.md or their own pins were cut (227 B = 57 units, 1642 -> 1585), then the eval row was raised by the measured remainder (817 B = 205 units, 1585 -> 1790, pinned at ceil(7157/4)); SKILL.md stayed under its ceiling (5485 -> 5571 of 6333) so its row is unchanged. Patch changeset for @objectstack/skills. Draft PR, Tier H (skills/**): never readied, armed or enqueued.",
      "tests": "Per-case cross-check over all 9 eval cases: every must_contain string present in its own expected_output, no must_not_contain string inside it, 0 violations; JSON.parse ok. node scripts/check-skills-token-ratchet.mjs :: exit 0 (`✓ check-skills-token-ratchet: 82 authored bundle file(s) within their ceilings`); --self-test :: exit 0 (`79 cases pass`). No package test/typecheck owed (no package source in the diff); no ablation (no tested behaviour changed).",
      "gates": "local subset = the derived list: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at head cd559297 printed 63 commands; all 63 ran (the 8 dist-reading ones after turbo run build --filter='./packages/**' under os-verify-lock, VERDICT command-exit 0, 7m26s), exit codes captured before any pipe: 63/63 exit 0. --ran reconciliation: `✓ dispatch-gates --ran: 63 derived famil(ies) accounted for — 63 run, 0 NOT-MEASURED (a DERIVED zero — all 63 recorded an exit code and none of them is 3)`. Notable lines: pnpm --filter @objectstack/spec run check:skill-docs `✅ Skill docs in sync`; check:pm-skill-id-lint `104 file(s) clean`; check:nul-bytes OK; check:pm-dispatch-gates `1935 cases pass`. The full ledger is in the PR body's Verification details block. CI families: the PR's check-runs are the reading, in_progress at report time; not re-run locally. dispatch-gates --tier: both skills/** paths clause ① MANDATORY, no one-line exit.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — read-only: issue_read get_comments (#26820, claim check), issue_read get (#26820 body), pull_request_read get (#26739, serial-conflict check), pull_request_read get (#27024, draft/labels read-back)",
      "api_writes": "3 — git push -u origin claude/project-thread-9ngvro; relay pr_create (PR #27024, draft, assignee os-steve, run 40618813846, read-back 11223/11223 bytes identical); this os-dev-report comment via post-stamped.mjs",
      "open_questions": [
        { "question": "The SKILL.md example is a spelled key (`books.crm_manual.groups.getting_started.label`) rather than a line quoted from a shipped bundle, because neither app-crm nor app-showcase declares a `books` group yet.", "options": ["A keep the spelled key (done)", "B add a books group to a shipped example bundle in a later example-lane card and quote it then"], "recommendation": "A, because the card's file surface is the two skill files only and the key spelling is what the eval grades." }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #27024 · domain:skills#1 · 2026-10-28T02:09Z · Tier H; approved by os-zhuang on cd559297 and armed; contract review (≥ xhigh) requested from the director seat.

  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Sibling gap for this card's roster · from domain:skills#2 (session_01QSeKYmhU5KEj1nukYhp1Tg) · 2026-10-28T05:21Z — ⛔ not a claim, a one-line hand-over from PR #27088's review (#26834).

    skills/objectstack-i18n/SKILL.md's top-level translation-group roster (apps, messages, globalActions, picklists, dashboards, datasets, reports, pages, flows, positions, permissions, metadataForms, settingsCommon) does not list hooks, while packages/spec/src/system/translation.zod.ts declares the nested hooks record and content/docs/protocol/kernel/i18n-standard.mdx lists hooks.{hook}.refusals.{code} (both from PR #26831, merged 2026-10-28T02:23Z); git grep hooks origin/main -- skills/objectstack-i18n/ is empty. A bundle author reading the i18n skill alone does not learn where a hook refusal's message goes. Same shape as this card's books group; the seat holding this card decides whether it rides this PR or a follow-up. Readings taken by the #26834 dev at head 1a0fb94a; the seat re-read the roster line on origin/main fbc16563.

  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · 2026-10-28T07:53Z — PR #27024 merged through the queue (merge commit 857cd3c702, 07:52Z) on the os-zhuang approval, after the director's PASS 6458779982: objectstack-i18n teaches the books translation group (books.{book}.label / .description, groups.{key}.label) and eval case 9 pins it. The card closed by its Fixes line; pm:dispatched stripped in this act.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsdocumentationImprovements or additions to documentationdomain:skillspriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions