Skip to content

ADR 0024: Proposal discussion without approval privileges

Status: implemented in development after beta.4.

Authors could submit code but could not reply in its review discussion without receiving the reviewer role. Discussion must not grant approval rights or alter an existing decision.

proposal.comment is a separate capability available to writers, reviewers and integrators. The HTTP /proposals/{id}/comments endpoint and gRPC Comment method accept non-empty text up to 16 KiB and require the exact inspected head. The head check, comment insertion, audit and optional idempotency record share one metadata transaction. A changed head rejects the write; retrying the same accepted key returns the same entry. A changed payload cannot reuse the key.

Discussion entries use the existing review records with the fixed comment decision. Callers cannot choose an approval decision through this operation. Comments remain available after closure and never affect approval counts. No metadata migration is necessary. Single-review lookup avoids scanning the whole history when storing another entry. Existing proposal.review keeps its distinct reviewer permission and behaviour.

The browser exposes a discussion action and composer. Proposal tabs have durable URLs and survive reload. Drafts are saved per account/repository/proposal in tab storage with the inspected head and retry key. A changed head requires explicit acknowledgement after inspection. Account changes clear active UI state and cancel pending requests. A malformed saved draft is left untouched. Discussion never supersedes an earlier approval or request for changes in the browser summary, matching server policy evaluation.

This is the foundation for author/reviewer discussion, not line-anchored threads, thread resolution or code suggestions. Those remain separate work.