You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
91 translation fidelity findings on main that the freshness gate passes as current #75
(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 reports ObjectOS version: 10.2.0. English says 14.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:
One 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.
Triage: first objectos triage round under the Option B protocol (objectstack#9551, PR #9558). Lands in pm:queue, type Task — the upstream Blocked-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. The GUIDE_REV bump 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 the domain:devx lane per the objectos fold-in. (Triage seat, session session_01EUZUjvnLsqwHVkXkTv8TKQ.)
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 measured a132376
Card
Now
Findings
91
133
Files
84
107
Worklist items
(excluded these)
440
The 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:
on the worklist : 88 ← the ordinary pass already re-derives these
NOT on the worklist : 19 ← unreachable by any correctly-run pass
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/security cross-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 (the 10.2.0 vs 14.7.0 ticket template) and positions.{de,es,fr,ja,ko,zh-Hans}.mdx (the 0.30x truncation).
This re-prices the GUIDE_REV question. 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.md is 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#68 — the live one.
Labels moved to pm:queue + pm:blocked to 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.
This card carried two ONE-OF state labels at once (check-half-states.mjs H29):
pm:queue claims it is dispatchable now, with nothing left to ask.
pm:blocked claims it cannot start until a Blocked-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 labelled needs-user-decision, read just before this comment.
So pm:queue is removed and pm:blocked stays. ⛔ This is not a re-triage: grading, scope and the blocker are unchanged. When #68 closes, the unlock scan returns this card to pm:queue.
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