A distinct forward-resync gap surfaced during the intermediate lecture-python.zh-cn resync wave (2026-07-19). It is the mirror image of #107: where #107 is about the resync dropping a target-side adaptation, this is about the resync not carrying across an upstream-side addition to a shared file.
Mechanism
forward resyncs each lecture's .md body — including any new {cite}`Key` directives that upstream added — but does not sync the shared bibliography lectures/_static/quant-econ.bib. When an upstream lecture begins citing a reference that upstream also newly added to its own .bib, the resync brings the {cite} into the target lecture while the key stays absent from the target repo's stale .bib. Under the strict build (-n -W) Sphinx emits WARNING: could not find bibtex key "<Key>", which -W promotes to a hard build failure.
Evidence (4 of 36 lectures in one Tier of the wave)
All four keys were present verbatim in the upstream lecture-python.myst quant-econ.bib and absent from the zh-cn copy, confirming the target bibliography is a stale snapshot the resync never updates. Fixed manually this wave by copying the specific entries across.
Why it is easy to miss
A per-lecture content review cannot catch it: a {cite} lives in prose and the key it needs lives in a separate file. There is no execution error either — it is a build-time cross-reference check, so only a cold strict build surfaces it (a cached build can pass and hide it).
Suggested fix, cheapest first
- Lint (minimum): after resyncing a lecture, extract every
{cite}`Key` in the translated file and assert each Key resolves in the target repo's .bib; if not, pull the missing entry from the upstream .bib (or flag it on the PR). Deterministic and would have caught all four pre-merge.
- Sync shared assets (better): treat
_static/quant-econ.bib as part of the resync surface and diff-and-merge new upstream entries when a resynced lecture references them.
- Generalise (best): a shared-asset drift check — any file a resynced lecture references by name (bib keys,
_static/… paths, data URLs) should resolve in the target repo after the resync. This subsumes the bib case and would also catch missing data/image assets.
A distinct forward-resync gap surfaced during the intermediate
lecture-python.zh-cnresync wave (2026-07-19). It is the mirror image of #107: where #107 is about the resync dropping a target-side adaptation, this is about the resync not carrying across an upstream-side addition to a shared file.Mechanism
forwardresyncs each lecture's.mdbody — including any new{cite}`Key`directives that upstream added — but does not sync the shared bibliographylectures/_static/quant-econ.bib. When an upstream lecture begins citing a reference that upstream also newly added to its own.bib, the resync brings the{cite}into the target lecture while the key stays absent from the target repo's stale.bib. Under the strict build (-n -W) Sphinx emitsWARNING: could not find bibtex key "<Key>", which-Wpromotes to a hard build failure.Evidence (4 of 36 lectures in one Tier of the wave)
All four keys were present verbatim in the upstream
lecture-python.mystquant-econ.biband absent from the zh-cn copy, confirming the target bibliography is a stale snapshot the resync never updates. Fixed manually this wave by copying the specific entries across.Why it is easy to miss
A per-lecture content review cannot catch it: a
{cite}lives in prose and the key it needs lives in a separate file. There is no execution error either — it is a build-time cross-reference check, so only a cold strict build surfaces it (a cached build can pass and hide it).Suggested fix, cheapest first
{cite}`Key`in the translated file and assert eachKeyresolves in the target repo's.bib; if not, pull the missing entry from the upstream.bib(or flag it on the PR). Deterministic and would have caught all four pre-merge._static/quant-econ.bibas part of the resync surface and diff-and-merge new upstream entries when a resynced lecture references them._static/…paths, data URLs) should resolve in the target repo after the resync. This subsumes the bib case and would also catch missing data/image assets.