ADR 0003 - Anonymous read fallback

Decisionstable
On this page

Status

Stable.

Context

Browsing, monitoring, and log reading in Copr are all anonymous operations; the API does not require credentials to read public projects, builds, and logs. Initially every command built its API client from a configured profile, so chroot list, project get, log failures, and build reproduce failed with a no_config error when a user had no profile or legacy config. That made read-only inspection of public data require authentication, which is wrong.

Decision

Add a separate ReadClient() that uses the configured profile when one exists and otherwise falls back to an anonymous production client. Route all read-only commands through it. Write commands continue to use the authenticated client and still require configuration, returning a clear no_config error.

Consequences

  • Read-only commands work with zero configuration against public data.
  • Writes still require credentials, so there is no silent fallback to an anonymous write (which would fail with a confusing 401).
  • The anonymous fallback targets production by default; a user who wants to read a different instance configures a profile for it.