Skip to content

fix(approval): preserve state and decisions when updating ApprovalRequest spec fields#317

Open
ron96g wants to merge 2 commits intomainfrom
fix-stale-approvals
Open

fix(approval): preserve state and decisions when updating ApprovalRequest spec fields#317
ron96g wants to merge 2 commits intomainfrom
fix-stale-approvals

Conversation

@ron96g
Copy link
Copy Markdown
Member

@ron96g ron96g commented Apr 2, 2026

Refactor mutate to capture server-side state/decisions before applying spec updates, preventing already-decided ApprovalRequests from losing their granted state or recorded decisions on re-reconciliation.

Add test for spec field updates preserving granted state and decisions.

Problem: Already stale but granted AR cannot be updated due to webhook-freeze. Fix this by checking if update in webhook changes any relevant fields instead of global

…uest spec fields

Refactor mutate to capture server-side state/decisions before applying spec updates, preventing already-decided ApprovalRequests from losing their granted state or recorded decisions on re-reconciliation.

Add test for spec field updates preserving granted state and decisions.
Copilot AI review requested due to automatic review settings April 2, 2026 16:58
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the ApprovalRequest builder reconciliation logic to allow spec updates on already-decided ApprovalRequests without clobbering decider-managed fields (state/decisions), addressing re-reconciliation scenarios where inputs change after a request was granted.

Changes:

  • Preserve existing spec.state and spec.decisions when CreateOrUpdate mutates an already-decided ApprovalRequest, while still applying desired spec updates (target/requester/decider/action/strategy).
  • Ensure non-auto strategies explicitly keep spec.state as Pending only for new/pending requests.
  • Add a test covering “spec field update on granted ApprovalRequest” to verify state/decisions are preserved.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
approval/api/v1/builder/builder.go Refactors mutate logic to apply spec updates while preserving decider-managed state/decisions for already-decided ApprovalRequests.
approval/api/v1/builder/builder_test.go Adds regression test ensuring spec updates don’t reset granted state or erase recorded decisions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants