GitHub API checks for open-policy-agent/gatekeeper PR #4504 Fetched on 2026-04-22 UTC using gh pr view and gh api graphql.
PR metadata:
- title: fix: avoid externaldata provider status reconcile loop
- state: MERGED
- mergedAt: 2026-04-22T00:02:27Z
- reviewDecision: APPROVED
- url: open-policy-agent/gatekeeper#4504
- mergeCommit: 4d78cc96735268f8ebd89112767d206d3669b32c
Reviews:
- JaydipGabani review state APPROVED submittedAt 2026-04-14T19:08:13Z on commit 4a7649307d9b2860df192120a3b2213d6cb82bd5
- copilot-pull-request-reviewer review state COMMENTED submittedAt 2026-04-09T19:36:53Z on commit cbe0cb4166b3b1f42bc4c1463bb76438347152ce
- copilot-pull-request-reviewer review state COMMENTED submittedAt 2026-04-22T00:04:57Z on commit 4a7649307d9b2860df192120a3b2213d6cb82bd5
Review threads totalCount: 2
Thread 1:
- isResolved: false
- isOutdated: false
- path: pkg/controller/externaldata/externaldata_controller.go
- startLine: 226
- line: 227
- author: copilot-pull-request-reviewer
- createdAt: 2026-04-09T19:36:52Z
- url: open-policy-agent/gatekeeper#4504 (comment)
- comment summary: preserve existing status.Status.Errors unless errorsChanged is true, because providerErrors gets fresh ErrorTimestamp values and can otherwise keep DeepEqual from short-circuiting.
Thread 2:
- isResolved: false
- isOutdated: false
- path: pkg/controller/externaldata/externaldata_controller.go
- startLine: 220
- line: 232
- author: copilot-pull-request-reviewer
- createdAt: 2026-04-22T00:04:56Z
- url: open-policy-agent/gatekeeper#4504 (comment)
- comment summary: same concern restated after merge; warns fresh ErrorTimestamp values may still trigger status updates on every reconcile.
Current file state on default branch:
- oldStatus := status.Status
- errorsChanged := errorChanged(status.Status.Errors, providerErrors)
- errorsForStatus := status.Status.Errors
- if errorsChanged { status.Status.LastTransitionTime = util.Now(); errorsForStatus = providerErrors }
- updateLastCacheTime := shouldCreate || errorsChanged || status.Status.ObservedGeneration != provider.GetGeneration()
- setStatus(status, errorsForStatus, updateLastCacheTime)
- status.Status.ObservedGeneration = provider.GetGeneration()
- if !shouldCreate && apiequality.Semantic.DeepEqual(status.Status, oldStatus) { return nil }
Interpretation:
- The code already preserves existing Errors when errorsChanged is false.
- So both unresolved review threads are functionally addressed in code.
- They remain unresolved only in GitHub thread state.