From: Willy Tarreau Date: Mon, 6 Jul 2026 14:26:45 +0000 (+0200) Subject: DEV: patchbot: let the page fetch the shared review state X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/$%7BGITURL%7D/1?a=commitdiff_plain;h=635d91aad92a341ff5f80d10908a19140cee3ac1;p=haproxy.git DEV: patchbot: let the page fetch the shared review state This adds the read side of the review syncing to the generated page: a "Get updates" button at the top right retrieves the shared state from update.cgi (reached by a bare relative URL, so it must be in a cgi-bin directory next to the page) and applies it. Nothing is fetched automatically, not even at load time: it's up to the user to explicitly click to resynchronize, and without it (or with the server down) the page keeps behaving fully standalone as today. Three states exist per line to make this work. The original state is the verdict the bot chose, captured at load time and constant. The reference state is the last known shared state, on top of which the user's edits sit; it starts equal to the original. The local state is the DOM itself (the checked radios). Applying a fetched overlay recomputes every line's reference as "the server's entry if any, otherwise the bot's verdict", so a removed override properly falls back to the original; the reference always advances but the displayed state only moves where the user had no local edit: local edits win, and re-applying the same overlay twice changes nothing. The received commit ids are resolved exactly first, then by symmetric prefix (one id being a prefix of the other, for mixed-length ids), first line wins. The shared notes land in a dedicated container below the AI explanation, rendered via innerText (no HTML injection) and replaced wholesale so the operation stays idempotent; entries for commits absent from the page are simply ignored. The whole exchange was tested with the real generated page's scripts running against a stubbed DOM covering load capture, prefix resolution, adopt-vs-keep on both changed and disappeared entries, idempotent re-application, and silent degradation on fetch failure. --- diff --git a/dev/patchbot/scripts/post-ai.sh b/dev/patchbot/scripts/post-ai.sh index 0db78aae9..0a7427cde 100755 --- a/dev/patchbot/scripts/post-ai.sh +++ b/dev/patchbot/scripts/post-ai.sh @@ -141,10 +141,17 @@ input.y[type="radio"]:checked { border: 2px solid black; background-color: $BT_Y; } + +/* shared reviewers' notes, shown below the AI explanation */ +div.notes { + font-style: italic; + margin-top: 2px; +}