mirror of
https://github.com/Heretek-AI/GDevelop-Heretek.git
synced 2026-10-12 02:02:42 +00:00
The fork-divergence job has been red since upstream pushed on 2026-09-23:
191 modified paths vs 126 allowlisted, 65 "unexpected", plus one unexpected
upstreamMissing entry.
Root cause is not fork divergence. The guard compared the fork against the
live refs/remotes/upstream/master (or the API's master tip), so every
upstream push that touched a file the fork also carries read as newly
introduced divergence. All 66 reported paths were byte-identical to the
fork's previous upstream snapshot — the fork had never modified them. The
one upstreamMissing entry came from an upstream commit that touched it in
that same window.
Compare against a baseline commit instead:
* fork-divergence.json records `baselineCommit` (here the merge base of
the last upstream sync, b9109cfbaa). The reported set now only moves
when the fork's own content moves, which is the only signal a reviewer
can act on.
* Resolution falls back to `git merge-base HEAD upstream/master` when the
field is absent, and the baseline tree is read either from a local
commit or the GitHub trees API by SHA — still no ~1.7 GB clone in CI.
* A baseline that is recorded but unreachable is a hard error (exit 2)
rather than a silent fallback to live upstream, which would reintroduce
exactly the false positives the baseline exists to remove.
Re-anchoring also drops entries that have converged: 10 paths the fork once
modified but which now match the baseline (upstream fixes adopted by the
merge) are no longer divergence. Verified all 10 are byte-identical to the
baseline and none is touched by a non-merge fork commit, so nothing is lost.
Also updates MAINTENANCE.md, scripts/README.md, AGENTS.md, docs and the
ci.yml comment to the corrected semantics and counts (180 paths: 116/57/7).
Verified: guard exits 0 locally against upstream at a later HEAD; exits 0 in
a depth-1 clone with no upstream ref against the API-by-SHA path; still exits
1 on a new modification, a stale entry, and a restored upstreamMissing file;
exits 2 with an actionable message when no baseline can be resolved.