Skip to content

Resyncs preferentially consume human-edited prose — three-edition evidence for a preserve rule (source unchanged + target human-edited → keep) #295

Description

@mmcky

Packages the F2 (overwrite) evidence from the first three-edition lifecycle baseline (QuantEcon/project-translation#53, delivering QuantEcon/textstrata#1) as the quantitative case for a preserve rule in sync: a target section whose source is unchanged and whose target text a human has edited should be kept, not regenerated. The 2026-08-04 intro study first surfaced the pattern; this run reproduces it at the 2026-08-28 HEADs and adds the cross-edition contrast that isolates the mechanism.

The measurement

For every machine sync commit, textstrata blames the prose lines the sync deleted at the parent revision and counts them by the tier of their last author (method: textstrata docs/method.md, F2):

Edition @ HEAD sync commits prose lines overwritten of which human-last-touched
lecture-intro.zh-cn @ d8ce61e 47 1,583 933 (59%)
lecture-python.zh-cn @ 6a4b427 96 4,092 1,249 (31%)
lecture-python-programming.zh-cn @ b727528 36 1,191 0

At intro, human-authored prose is 20.5% of the corpus but 59% of what syncs deleted — consumed at nearly three times its share (the surviving corpus share is post-destruction, so the true targeting ratio is at least this). programming is the control: engine-era from the start with essentially no human layer (six human-edited lines total), its overwrites recycle only machine text. The gradient says the effect is not an artefact of sync volume — it appears exactly where, and in proportion to how much, human-reviewed prose exists to destroy.

What the overwritten lines look like

From overwrites.json of the intro run (sync PRs of the 2026-07-18 wave; before = human-last-touched line at the sync's parent, after = the machine's replacement):

heavy_tails.md — a reviewer's deliberate localisation of the reference link for Chinese readers, reverted to the source's English link:

− 经典的例子是正态分布,其密度公式为

networks.md — pedagogical expansion a human added, collapsed back to the literal source:

− 本讲座将重点介绍经济和金融网络,探讨网络结构如何影响经济活动和金融稳定性。

  • 本讲座将介绍经济和金融网络。

cagan_ree.md — equivalent-meaning retranslation: same content, human phrasing lost:

− 在讲座{doc}基于适应性预期的价格水平财政理论 <cagan_adaptive>中,我们介绍了一个使用"适应性预期"(凯根和其导师米尔顿·弗里德曼提出的概念)而非"理性预期"的模型版本

    • 讲座{doc}基于适应性预期的价格水平财政理论 <cagan_adaptive>描述了该模型的一个版本,它不施加"理性预期",而是使用凯根和他的导师米尔顿·弗里德曼所称的"适应性预期"

Some replacements are legitimately needed — the English source had changed underneath them. The point is that whole-section regeneration cannot tell the difference, so every sync spends reviewer work that a source-diff check would have shown did not need spending.

The proposed rule

At sync time, per section (the engine already has section-level heading maps and per-document source-sha baselines in .translate/state): if the section's source is unchanged since the recorded baseline and the target section text differs from the last machine output for it, keep the target text. Regenerate only sections whose source actually changed. This is the minimal translation-memory step the 2026-08-04 study's §7 argued for, now with cross-edition numbers behind it.

#276 is the same failure class at its pathological extreme — there the regeneration source is not merely "unchanged" but stale, so the overwrite is wrong with certainty rather than merely wasteful; a preserve rule keyed on source-diff would have suppressed those reverts too. #90's silent-loss inventory is adjacent: this issue is about content the sync path successfully and reportedly replaces.

Reproducing

overwrites.json regenerates deterministically: textstrata 98df675, configs/quantecon/{intro,python,programming}-zh-cn.yml pointed at the HEADs above (per-commit prior-tier counts and up to 50 example pairs per sync commit). Full context and limits in the report: reports/2026-08-28-three-edition-lifecycle-baseline.md.

Part of QuantEcon/project-translation#49 (lifecycle metrics, Stage 1); tracked on the textstrata side as QuantEcon/textstrata#6.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions