I3777 — site-check refuses a translation-memory entry the build can no longer reach because it is keyed the old way
Make the translation memory's key form a checked invariant rather than a step a train composer must remember: scripts/site-check refuses any entry of site/i18n/<lang>/memory whose English still carries a whole-element value inside a <tN>…</tN> pair (the form I3758 turned into a void <tN/>), naming the entry and the remedy, scripts/site-translate rekey.
BLOKOVÁNO vlna 2 · p2 · implementační profil · bezpečné paralelně
Součást public-proof — Návštěvník vidí, jak se produkt sám dokazuje, a může ověřit každé jeho tvrzení.
Blocked. This issue cannot start until I3758 is done. The status is derived from that, not declared.
Cíl
Make the translation memory's key form a checked invariant rather than a step a train composer must remember: scripts/site-check refuses any entry of site/i18n/<lang>/memory whose English still carries a whole-element value inside a <tN>…</tN> pair (the form I3758 turned into a void <tN/>), naming the entry and the remedy, scripts/site-translate rekey.
Proč
I3758 (2026-10-22) changed how a commit id, a version or a date that is a whole inline element is keyed, and shipped scripts/site-translate rekey to move the existing memory. A row of a later train that imports memory written before the rule, or written by a translator from an old missing.json, adds entries no build can reach again. The train-4 order file carries a manual rekey step before the derive (a3), and a manual step is forgotten sooner or later.
Aktuální stav
scripts/site-translate rekey (I3758) moves such entries and is idempotent, but nothing runs it unless a person does, and scripts/site-check does not read the memory's key form.
Cílový stav
scripts/site-check reads every memory entry and refuses one that rekeyValues (scripts/lib/site-i18n.mjs) would still move, with its key, the value and the remedy; a clean memory passes; the pages-and-deploy path that runs site-check therefore refuses such a memory before it is published.
Rozsah
- scripts/site-check
- scripts/lib/site-i18n.mjs
- test/cases
- .ai/repo/project/issues/I3777.yaml
Mimo rozsah
- Rewriting the memory inside scripts/derive or site-build: the memory is source, and the derive must not edit it
- Choosing between two translations that rekey merges into one key; rekey names them, a translator decides
Závislosti
Kritéria přijetí
- site-check fails on a memory holding an entry whose English carries a whole-element value inside a <tN>…</tN> pair, naming the entry's key, the value and scripts/site-translate rekey
- site-check passes on the memory after scripts/site-translate rekey
- Negative: removing the check lets the fixture's old-form entry pass, and its case turns red
Validace
- majordomus plan validate
Požadované důkazy
- test_an_unkeyed_memory_entry_is_refused
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3777.yaml. Read it back with majordomus plan show I3777.