Repository navigation
Explain how to recover from credential-provider conflicts - #3883
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR adds administrator and retry guidance to credential-provider conflict errors and extends existing HTTP integration coverage. Example: A source approved with source-verifier-a is updated while two registrations claim that provider.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open: it provides a focused, useful recovery-message improvement, with no introduced defects found. Priority: P3 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherOCC admits credential-source create and update requests against registered providers; its conflict errors reach authenticated HTTP callers through the controller API. flowchart TD
A[Authenticated caller] --> B[Controller HTTP API]
B --> C[OCC source admission]
C --> D[Provider registration checks]
D --> E[Conflict with recovery guidance]
E --> B
Technical reviewBest possible solution: Keep the recovery guidance in the existing OCC conflict branches and retain the focused HTTP assertions. Do we have a high-confidence way to reproduce the issue? Current-main source shows both unhelpful conflict messages, and the existing HTTP scenarios supply concrete duplicate-registration and admission-drift triggers; no target code was run during this read-only review. Is this the best way to solve the issue? The patch improves the messages at their existing owner without changing admission semantics, adding configuration, or duplicating recovery machinery. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 7fbf06ff478c. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 27, 2026, 1:55 PM ET / 17:55 UTC. |
A static-source update with duplicate registrations for its approved provider now tells the caller to ask an Installation administrator to resolve them. If the provider changes during admission, both create and update return HTTP 409 and tell the caller to check the current provider configuration before retrying the refused credential-source request. This guidance does not apply to a provider operation.
The HTTP tests check the error messages, verify a refused update preserves its original source, and verify a refused create leaves no new source. This addresses the caller-guidance item from the review of #3879.
Observed provider behavior from #3879
With same-type provider B ordered before the admitted provider A, a signed-in source update returned 200. It called A once and B zero times, kept A as the admitted provider, and advanced the source from generation 1 to 2. When A was duplicated or missing, the update returned 409, made no Secret reads or verifier calls, and left the source at generation 2.
The production OCC and OpenShell exchange receiver ran over authenticated loopback gRPC/TLS with PostgreSQL and a counting HTTPS origin. The authenticated test peer made the upstream HTTP request. Counts are per request. Where a row lists two replacements, each was exercised separately and produced the same counts.
During the Secret GET cases, neither injector ran and the peer received no credential headers. In both response-stage cases, the origin request had already completed. The receiver withheld the protected frame from the peer. These observations cover the production receiver with a controlled peer. Installed-supervisor behavior was outside the scope of the run.