Skip to content

Run the zh-Hans translation pass as a routine (on merge to main touching English pages, or weekly), stamped with --stamp, so coverage converges without a hand-run pass #379

Open

Description

@objectstack-fleet

This card comes from the maintainer rulings on #347 (os-zhuang, comment 6471867606, 2026-10-28), under "Two gaps this card should close". #347 closed before those rulings were posted, so the gap is filed here.

What is wrong

translations.yml only runs checks. Nothing runs the translation pass itself: there is no schedule, no merge trigger, and no dedicated account. zh-Hans therefore drifts with every English change, and nothing pulls it back. This has already been measured. #347 brought zh-Hans to 0 stale and 0 missing at f574497. Two English landings later (#373, #378), it was 4 stale and 10 missing, now tracked by hand as #376.

Proposed (from the ruling)

  • Run the pass as a fixed routine, emitting zh-Hans only:
    • Trigger: on merge to main touching English content/docs/**/*.mdx, or weekly.
    • Follow the rules in docs/TRANSLATION.md.
    • Stamp with --stamp.
    • Regenerate zh-Hant with gen:zh-hant.
    • Open its own PR, capped at 3000 lines.
  • Run it under a dedicated account. Set vars.TRANSLATION_BOT_LOGIN to that account so the ownership gate becomes real (The ownership check is inert on main until TRANSLATION_BOT_LOGIN is set #68).

The precondition in the ruling is now met: #343–#346 have all landed (#349, #373, #352, #351).

Needs a maintainer decision before it is dispatched

  • Which account runs the pass. Setting a repository variable and an account is a maintainer action.
  • Which trigger. The choices are per-merge or weekly. Per-merge keeps zh fresh. Weekly batches the work into fewer PRs.
  • Whether the routine's PRs land under the seat's standing merge go-ahead, or wait for review.

Until then, #376 is the manual stopgap.

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat record · maintainer decision · 2026-10-29T04:17Z · session_01QsR2jTaZ2GeyfjANMwstiw · seat repo:docs.objectos.ai#1

    Decided. In the project thread at 2026-10-29T04:17Z, the maintainer (Steedos, zhuangjianguo) ruled 「你就是这个专用账户」: this seat runs the translation pass. Earlier, at 2026-10-29T03:51Z, the same maintainer said 「你接手 #380 和后续的翻译」.

    Done in this session:

    • The seat's patrol now runs the routine every 4 hours. It runs check-translations on a fresh main. If zh-Hans shows any stale or missing page, it checks for an overlapping open PR, then dispatches one serial translation card under docs/TRANSLATION.md. That card lands through the merge queue under the maintainer's standing go-ahead.

    Still open (TRANSLATION_BOT_LOGIN, #68). This seat cannot set repository variables (the Actions variables API is refused here). Setting the variable to zhuangjianguo would also have a side effect. check-translation-ownership.mjs limits the bot login to locale files only. This account also authors this lane's English and tooling PRs, for example #370 and #381, and those PRs would start failing the Ownership step. The gate stays inert until a separate login exists for the pass, such as a bot account or a GitHub App. The routine does not wait for that.

    The card stays open for that piece only.

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: translation routine run 1 · 2026-10-29T04:44Z
    Session: session_01QsR2jTaZ2GeyfjANMwstiw (seat thread; the dev is card thread session_01QsR2jRB2NQDKX8sKbnVPjo, identity by branch)
    Account: zhuangjianguo
    Branch: claude/project-thread-a4towv (platform-assigned; a card thread can push only this branch)
    Worktree: the card thread's own docs.objectos.ai checkout
    Domain: domain:docs (single-lane repository)
    Seat: repo:docs.objectos.ai#1
    File surface: content/docs/build/packages.zh-Hans.mdx and its generated packages.zh-Hant.mdx. Locale files only. If the work goes beyond this surface, stop and explain why in the report.
    Container & model: S, mode:thread, model: default tier (TIER_DEFAULT — sister repository, hand-derived: no packages/spec, no protocol-semantic surface), effort: project default
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — translation routine run 1 (#379), under the maintainer ruling that this seat is the translation account
    Thread-read: none
    Premise: confirmed. check-translations on main 6f002d6 reports zh-Hans 1 stale, 0 missing: build/packages, after #382 added one sentence to the "CI shortcut" note.
    Tier: none.
    Serial constraints cleared: #382 landed and deployed green. This is the only card in flight, and no open PR touches these files. The PR says Refs #379 because the card stays open for TRANSLATION_BOT_LOGIN.

  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing · translation routine run 1 · 2026-10-29T04:59Z · session_01QsR2jTaZ2GeyfjANMwstiw · seat repo:docs.objectos.ai#1

    Reading Value
    PR #383 Merged through the merge queue as d10d817 (squash), on head e13ec8c, the head the seat ACCEPTed in 6488231478
    main CI run 40820221619 on d10d817 build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
    zh-Hans on main 0 stale, 0 missing

    The routine works from end to end: an English change (#382), then the seat's check, then a translation card and its landing, in about 20 minutes. This card stays open for TRANSLATION_BOT_LOGIN only.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions