mirror of
https://relay.ngit.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp.git
synced 2026-10-05 23:18:24 +00:00
The completed-push shortcut required every target to be satisfied and treated verification as all-or-nothing even without atomic negotiation. A completed deletion mixed with new work still failed, and post-push promotion could apply refs that receive-pack had just rejected despite exiting successfully. Replace the shortcut with an unsigned receive-pack plan. Verify satisfied refs without writes when completed deletions are present, forward remaining commands and original pack/options to Git, and merge per-ref statuses. Non-atomic checks complete independently; atomic checks retain prepared verification locks until Git exits, and abort before execution on verification failure. Native statuses remain authoritative for actual updates. Zero-to-zero deletes never reach Git. Keep whole-request signed-state authorization and independent PR validation. Accept branch/tag deletion only when absent from the authorizing state. Capture native per-ref failures on ordinary unsigned pushes too, retain successful tips, and defer immediate state promotion after rejection. Background reconciliation of authorized state is unchanged; signed/malformed requests retain their path. Stream sideband progress while retaining the status report for finalization; preserve status-v2 options and honor clients that did not request a report. Own subprocess cleanup and verification locks together across upload awaits, and stop Git on client cancellation before releasing those locks. Validation: the 956-test library suite passed, followed by all ten final plan regressions including cancellation and lock cleanup. All 208 selected Git, authorization, PR-hosting and streaming integrations passed after the final changes. Real Git tests cover mixed success, update-hook partial rejection and atomic rejection with and without completed deletions. Streaming fixtures now emit valid Git packets and retain bounded readiness/finalization checks. Strict all-target Clippy passed. Assisted-by: GPT-6