From 7f2920f861d3e4848c8b37c06ca5ebddfd2dd055 Mon Sep 17 00:00:00 2001 From: vasilito Date: Mon, 3 Aug 2026 13:26:14 +0300 Subject: [PATCH] build: make verify-fork-functions honor 'diverged' mode like its sibling verify-fork-versions.sh reads the 4th column of fork-upstream-map.toml and skips the content check for forks marked 'diverged', with a WARN. verify-fork-functions.sh had no notion of mode and hard-failed every fork, so kernel (30), bootloader (5) and installer (2) blocked every canonical build for drift the map itself records as accepted, with comments saying a full rebase is later work. Both verifiers now read the same source of truth. Diverged forks are reported and counted as warnings; every other fork still gates. This turned a 5-fork / 43-function hard failure into 2 real findings, which are fixed in the accompanying relibc and base commits. --- local/scripts/verify-fork-functions.sh | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/local/scripts/verify-fork-functions.sh b/local/scripts/verify-fork-functions.sh index 65fb1cb10c..b67790cbd3 100755 --- a/local/scripts/verify-fork-functions.sh +++ b/local/scripts/verify-fork-functions.sh @@ -64,6 +64,7 @@ if [[ ${#TARGET_FORKS[@]} -eq 0 ]]; then fi VIOLATIONS=0 +DIVERGED_WARNINGS=0 TOTAL_MISSING=0 for fork in "${TARGET_FORKS[@]}"; do @@ -78,6 +79,15 @@ for fork in "${TARGET_FORKS[@]}"; do continue fi + # Mode from the authoritative map (4th column), same source of truth as + # verify-fork-versions.sh. A fork marked 'diverged' has substantial + # post-fork work and is deliberately behind upstream master -- the map + # records for each one that a full rebase is later work. Its sibling + # verifier skips the content check for those forks with a WARN; this one + # used to hard-fail them, so kernel/bootloader/installer blocked every + # build for drift the project has already accepted. Report, do not gate. + fork_mode=$(awk -v f="$fork" '$1==f {print $4}' "$PROJECT_ROOT/local/fork-upstream-map.toml" 2>/dev/null | head -1) + # Determine upstream branch upstream_branch="master" if ! (cd "$fork_dir" && git rev-parse --verify upstream/master >/dev/null 2>&1); then @@ -215,7 +225,14 @@ for fork in "${TARGET_FORKS[@]}"; do echo " This likely means a bad merge or cherry-pick dropped them silently." echo " Fix: ./local/scripts/upgrade-forks.sh $fork" fi - VIOLATIONS=$((VIOLATIONS + 1)) + if [[ "$fork_mode" == "diverged" ]]; then + echo " NOTE: $fork is 'diverged' in local/fork-upstream-map.toml —" + echo " reported as a warning, not a build gate. Rebasing it is" + echo " tracked work; see local/docs/FORK-BUMP-PATCHING-POLICY.md." + DIVERGED_WARNINGS=$((DIVERGED_WARNINGS + 1)) + else + VIOLATIONS=$((VIOLATIONS + 1)) + fi elif [[ "$QUIET" -eq 0 ]]; then echo -e "\033[1;32mOK: $fork — all upstream functions present\033[0m" fi @@ -227,5 +244,8 @@ if [[ "$VIOLATIONS" -gt 0 ]]; then exit 1 fi -echo -e "\033[1;32mAll forks retain all upstream functions.\033[0m" +if [[ "${DIVERGED_WARNINGS:-0}" -gt 0 ]]; then + echo -e "\033[1;33m$DIVERGED_WARNINGS diverged fork(s) are behind upstream (warning only).\033[0m" +fi +echo -e "\033[1;32mAll gated forks retain all upstream functions.\033[0m" exit 0