From c163d717147b92b16d89da2fbccef775647b5a07 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Tue, 3 Feb 2026 16:13:59 +0000 Subject: fix: accept no-op pushes where old_oid == new_oid Fixes race condition where user's push becomes no-op after state event is applied between fetch and push. Now accepts these as successful no-ops, matching Git's 'Everything up-to-date' behavior. - Add early detection in get_state_authorization_for_specific_owner_repo - Return success for all-noop pushes without requiring purgatory event - Document behavior in inline-authorization.md --- docs/explanation/inline-authorization.md | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'docs/explanation/inline-authorization.md') diff --git a/docs/explanation/inline-authorization.md b/docs/explanation/inline-authorization.md index 7081f63..80bd98f 100644 --- a/docs/explanation/inline-authorization.md +++ b/docs/explanation/inline-authorization.md @@ -352,6 +352,10 @@ pub async fn authorize_push( - If no event found, create placeholder (git-data-first scenario) - Collect PR events from purgatory for post-push processing +**No-Op Push Acceptance:** Pushes where all refs have `old_oid == new_oid` are accepted without requiring a purgatory state event, matching Git's "Everything up-to-date" behavior and avoiding race condition rejections. + +--- + ## State Event Authorization State events (kind 30618) undergo authorization checks at three points (defense-in-depth): -- cgit v1.2.3