Observation-class finding, noticed while implementing #8069 (PR #8541). Unassigned, no pm:queue.
What I measured
I edited two field descriptions on sys_http_delivery (packages/services/service-messaging/src/objects/http-delivery.object.ts):
error — had nodescription before; gained one.attempts — already had one; its text changed.
pnpm check:i18n went red, and node scripts/check-i18n-bundles.mjs --write regenerated. The result, per locale bundle, was 2 insertions, 1 deletion — only the error entry:
error: {
- label: "Error"
+ label: "Error",
+ help: "Why this row is not a delivered callout: the last transport error, or — on a row with 0 attempts — why the delivery could never be prepared (#8069)."
},
attempts in en.objects.generated.ts still reads help: "Number of attempts made so far" — the pre-edit text — while the source now says something else. The gate then reports OK.
That is the documented merge behaviour, printed by the script itself: "Merge mode is on, so no existing translation is overwritten — new schema keys are added filled with the source text."
Why it is worth recording anyway
For zh-CN / ja-JP / es-ES the rule is obviously right: a regeneration must not clobber a human translation with English source text.
For en the same rule produces a different outcome, because en is not a translation — it is a copy of the source. So there, merge mode means:
- an author edits a field
description, - the gate passes,
- the change never reaches the bundle the UI renders,
- and nothing anywhere says the two disagree.
The source of truth and the served text drift apart silently, permanently, and by one commit at a time. It is the declared != enforced shape the repo keeps filing cards about, in the one place a gate is already looking.
What this finding does NOT claim
- ⛔ Not that any specific user-visible help text is currently wrong. I measured one instance, mine, and did not sweep for pre-existing drift. The size of the existing gap is unknown and is the first thing worth measuring — a scan comparing every authored
description against its en bundle help would grade this immediately, and would also decide whether this is a one-line fix or a backlog. - Not that merge mode is wrong for translated locales. It is right for them; the question is only whether
en belongs in the same channel. - Not urgent: help text going stale is a documentation degradation, not a durability one — nothing is lost, something is merely out of date while looking current.
Repro
Edit any field that already carries a description on any object in a package owning an i18n-extract.config.ts, run node scripts/check-i18n-bundles.mjs --write, and diff **/translations/en.objects.generated.ts — the entry is unchanged, and pnpm check:i18n is green.
Observation-class finding, noticed while implementing #8069 (PR #8541). Unassigned, no
pm:queue.What I measured
I edited two field descriptions on
sys_http_delivery(packages/services/service-messaging/src/objects/http-delivery.object.ts):error— had nodescriptionbefore; gained one.attempts— already had one; its text changed.pnpm check:i18nwent red, andnode scripts/check-i18n-bundles.mjs --writeregenerated. The result, per locale bundle, was2 insertions, 1 deletion— only theerrorentry:attemptsinen.objects.generated.tsstill readshelp: "Number of attempts made so far"— the pre-edit text — while the source now says something else. The gate then reports OK.That is the documented merge behaviour, printed by the script itself: "Merge mode is on, so no existing translation is overwritten — new schema keys are added filled with the source text."
Why it is worth recording anyway
For
zh-CN/ja-JP/es-ESthe rule is obviously right: a regeneration must not clobber a human translation with English source text.For
enthe same rule produces a different outcome, becauseenis not a translation — it is a copy of the source. So there, merge mode means:description,The source of truth and the served text drift apart silently, permanently, and by one commit at a time. It is the
declared != enforcedshape the repo keeps filing cards about, in the one place a gate is already looking.What this finding does NOT claim
descriptionagainst itsenbundlehelpwould grade this immediately, and would also decide whether this is a one-line fix or a backlog.enbelongs in the same channel.Repro
Edit any field that already carries a
descriptionon any object in a package owning ani18n-extract.config.ts, runnode scripts/check-i18n-bundles.mjs --write, and diff**/translations/en.objects.generated.ts— the entry is unchanged, andpnpm check:i18nis green.