Blocked-by: #66
Problem
docs/TRANSLATION.md (landing in #65) ends with a pre-PR checklist a translation pass is expected to satisfy: code fences byte-identical to the English source, the page's URL set a subset of the English page's, frontmatter keys matching, MDX component names unchanged, no <script / javascript: / on*=, length within ±40%.
A prose checklist is the weakest form of every one of those rules. The translation pass is an agent with an editor, and the failure mode is not malice but helpfulness — fixing a link it believes is broken, repairing a code sample, restructuring a table while translating. Those produce a PR that reads like a translation and is not one.
The <script / javascript: / on*= items are a different weight class: the English MDX is authored by anyone who can open a PR, it is fed to a model, and the output is committed to a public site. A prompt instruction not to follow embedded instructions is necessary and is not a control. The control is refusing to commit output that fails validation.
Required outcome
A check that runs on translation PRs and fails them when any checklist item is violated, so the list in docs/TRANSLATION.md becomes a description of an enforced rule rather than an aspiration.
Constraints, inherited from the two checks landing in #65 and non-negotiable for the same reasons:
- Dependency-free, network-free, credential-free. It must run on a fork PR and add no secret to this public repository. Parse frontmatter as text; do not add a YAML dependency.
- Locales come from
apps/docs/lib/i18n.ts, which AGENTS.md names as the authority — do not hardcode the list. - Each rule must be demonstrated able to go red. A validator observed only green is indistinguishable from one that cannot fail; include fixtures that trip each rule.
Scope note
Serial with #66 — same file surface (.github/scripts/, .github/workflows/translations.yml, docs/TRANSLATION.md). Do not start before #65 merges.
Not dispatched: objectos currently has no lane or seat in the pm-dispatch protocol, which is open as objectstack-ai/objectstack#9551. This card is filed unassigned and stays in the backlog until that is settled.
Blocked-by: #66
Problem
docs/TRANSLATION.md(landing in #65) ends with a pre-PR checklist a translation pass is expected to satisfy: code fences byte-identical to the English source, the page's URL set a subset of the English page's, frontmatter keys matching, MDX component names unchanged, no<script/javascript:/on*=, length within ±40%.A prose checklist is the weakest form of every one of those rules. The translation pass is an agent with an editor, and the failure mode is not malice but helpfulness — fixing a link it believes is broken, repairing a code sample, restructuring a table while translating. Those produce a PR that reads like a translation and is not one.
The
<script/javascript:/on*=items are a different weight class: the English MDX is authored by anyone who can open a PR, it is fed to a model, and the output is committed to a public site. A prompt instruction not to follow embedded instructions is necessary and is not a control. The control is refusing to commit output that fails validation.Required outcome
A check that runs on translation PRs and fails them when any checklist item is violated, so the list in
docs/TRANSLATION.mdbecomes a description of an enforced rule rather than an aspiration.Constraints, inherited from the two checks landing in #65 and non-negotiable for the same reasons:
apps/docs/lib/i18n.ts, which AGENTS.md names as the authority — do not hardcode the list.Scope note
Serial with #66 — same file surface (
.github/scripts/,.github/workflows/translations.yml,docs/TRANSLATION.md). Do not start before #65 merges.Not dispatched:
objectoscurrently has no lane or seat in the pm-dispatch protocol, which is open as objectstack-ai/objectstack#9551. This card is filed unassigned and stays in the backlog until that is settled.