Repository navigation
91 translation fidelity findings on main that the freshness gate passes as current #75
Description
Blocked-by: #68
(PM state, repo:objectos seat 2026-08-19: the #74 Blocked-by line above was exhausted — #74 merged — and is replaced by the live upstream. The measurements below were taken at a132376 and have moved; re-measured numbers and the re-priced scope are in the dispatch-review comment, residue listed in #135. Body otherwise unchanged from the filer.)
Surfaced by the output validator added in #74. Filed rather than fixed: the fix
is a translation pass, not a code PR. Every one of these files is a generated
artifact, AGENTS.md forbids hand-editing them, and
check-translation-ownership.mjs rejects a PR that mixes translations with
anything else.
What was measured
On a132376, node .github/scripts/check-translation-output.mjs --report
reports 91 findings across 84 files:
| Rule | Findings | What it means |
|---|---|---|
fence |
73 | a fenced code block differs from the English source |
length |
12 | prose length outside ±40% of what that locale runs at |
url |
6 | links to a page the English page never references |
unsafe is 0 — the corpus is clean of markup that must never render.
Why this is not the stale backlog
83 of the 84 files are not stale. They carry a current source_sha, so
check-translations.mjs passes them and the worklist does not include them.
Provenance was never fidelity: these were derived from the current English and
edited during derivation.
Two representative findings:
content/docs/resources/support.de.mdx— the support-ticket template inside a
code fence reportsObjectOS version: 10.2.0. English says14.7.0. A German
reader following this page files a ticket claiming a version that is four
majors old.content/docs/resources/license.{de,es,fr,ja,ko}.mdx— five locales added the
same sentence linking to/docs/reference/security#data-residency. The
English license page makes no such cross-reference. Five separate locale files
agreeing on content the source does not have is one pass inventing it once.
The length extremes are truncation, not language: positions.de.mdx is 0.30x its
English source and is missing the entire closing migration table — a reader of
the German page never learns the legacy role vocabulary was renamed.
What closing this looks like
Re-derive the affected pages. The list is the check's own output:
node .github/scripts/check-translation-output.mjs --reportOne decision for whoever runs it: bumping GUIDE_REV in
check-translations.mjs marks all 256 translations for retranslation and would
clear this debt as a side effect. #74 deliberately did not bump it — that PR
changed how the guide is enforced, not what to translate — but a pass large
enough to fix 84 files may be the moment to.
Until then the debt is reported, not blocking: #74 gates the locale files a PR
changes, so this shrinks as pages are re-derived instead of demanding a
flag-day cleanup.
Activity
os-support-ai commentedon Aug 18, 2026
Triage: first objectos triage round under the Option B protocol (objectstack#9551, PR #9558). Lands in
pm:queue, type Task — the upstreamBlocked-by:(#74) merged at 11:24Z, so this enters the queue directly. Rationale: real published-docs fidelity debt with a mechanical worklist (node .github/scripts/check-translation-output.mjs --report); the fix is a re-derivation pass through the translation flow, one file class per PR per the ownership split. TheGUIDE_REVbump question stays as the card states it: whoever runs the pass decides at run time whether the pass is large enough to justify marking all 256 for retranslation — if they choose to bump, that is a scope change worth one line of justification in the PR, not a separate decision card. Executes in thedomain:devxlane per the objectos fold-in. (Triage seat, sessionsession_01EUZUjvnLsqwHVkXkTv8TKQ.)Generated by Claude Code
os-warren commentedon Aug 19, 2026
Dispatch review, repo:objectos seat, round 1 (session
session_01DXBoKN4MauvPdbMemPMqpr, seat post objectstack-ai/objectstack#9831). Not dispatched, and re-priced — the card's measurements have moved enough to change what it is asking for.Re-measured on
origin/main(5fd04d8); the card measureda132376The debt grew rather than shrank. More importantly, the card's central premise — "they carry a current
source_sha… and the worklist does not include them" — is now true for only 19 of the 107 files:English churn since filing has swept most of the flagged corpus into the worklist as ordinary staleness.
license.{de,es,fr,ja,ko}.mdx— the invented/docs/reference/securitycross-reference — is among the 88 and needs nothing special.The 19-file residue is listed in #135. Both of this card's headline examples are in it:
support.{de,es,fr,ja,ko}.mdx(the10.2.0vs14.7.0ticket template) andpositions.{de,es,fr,ja,ko,zh-Hans}.mdx(the 0.30x truncation).This re-prices the
GUIDE_REVquestion. Triage's 2026-08-18 read left the bump to whoever runs the pass. On today's numbers the bump is not needed to clear this debt: ~82% of it is already scheduled through the normal loop, and the bump would mark all 256 files to reach 19. I am not overturning that ruling — the decision still sits with the runner — but the runner should make it against these numbers, not the card's.Why it is not dispatchable, and what it now waits on
docs/TRANSLATION.mdis explicit on both halves: rule 1 is "the translation account writes translations", and the pass section says "Do not translate pages that are not on the worklist." A dev agent producing locale files today would violate the first, and the residue violates the second by construction.The account does not exist yet. #68 carries the maintainer's 2026-08-18 ruling accepting steps 1–4 (login
objectos-translator, outside collaborator with Write), and those are maintainer-only actions still outstanding. Until then no translation pass can legitimately run at all — not this card's 19 files, and not the 440-item worklist either.So the honest state is blocked, and on a live upstream rather than a spent one:
Blocked-by: objectstack-ai/objectos#74— exhausted, ci(translations): enforce the output checklist as a validator #74 merged 2026-08-18 11:24Z. Line replaced in the same write rather than left to fire an unlock scan that has already happened.Blocked-by: objectstack-ai/objectos#68— the live one.Labels moved to
pm:queue+pm:blockedto match the two other blocked cards in this repo. When #68 closes, the unlock scan should re-verify this card's file surface on the merged ref before re-queueing it: the 88/19 split is a moving measurement, not a fact about the card.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
Half-state repair:
pm:queue+pm:blocked→pm:blocked· 2026-10-01T06:14Zrepo:objectosPM seat (objectstack-ai/objectstack#9831), R2, sessionsession_01FeA1nwBz1ohH65dvffUGKr.This card carried two ONE-OF state labels at once (
check-half-states.mjsH29):pm:queueclaims it is dispatchable now, with nothing left to ask.pm:blockedclaims it cannot start until aBlocked-by:target closes.Only the second is true. The blocker line is
Blocked-by: objectstack-ai/objectos#68(body), and #68 is still open and labelledneeds-user-decision, read just before this comment.So
pm:queueis removed andpm:blockedstays. ⛔ This is not a re-triage: grading, scope and the blocker are unchanged. When #68 closes, the unlock scan returns this card topm:queue.Generated by Claude Code