Skip to content

Builder takeover: make provenance, labels, and reviewer exclusion handoff-aware #963

Description

@jeffhuber

Part of stabilization epic #979 and roadmap #900.

Part of roadmap #900. Follow-up from the v1.4.0 release dogfood in PR #959.

Problem

Current provenance and reviewer exclusion are centered on the PR opener, branch prefix, and one active builder label. During an explicit takeover this can become internally inconsistent: PR #959 remained authored on a Devin branch, the final repair commit came from Codex, the active label changed to builder:codex, and the Devin reviewer still excluded itself solely because Devin originally opened the PR.

The system needs a handoff-aware contributor model so builder recording, labels, review eligibility, Board status, and the gate describe the same exact-head history.

Outcome

Code Mower preserves ordered builder contribution episodes, exposes one current writer, and excludes every verified contributor to the current diff from satisfying its own independent review requirement.

Acceptance criteria

  • Persist a metadata-only handoff record binding repository, PR, branch, source lane, destination lane, expected head, and resulting head.
  • Preserve ordered source and takeover contribution episodes while exposing exactly one current writer.
  • Keep exactly one active builder label; a valid takeover preserves earlier builder history in provenance rather than erasing or contradicting it.
  • Builder auto-record, runner-recorded provenance, the gate, Board projection, and reviewer selection resolve the same exact-head builder lineage.
  • Reviewer exclusion uses verified contributors to the current diff. The PR opener alone is neither necessary nor sufficient; every contributing builder lane is excluded from gating its own work.
  • Direct reviewer wrappers, including Devin CLI, use the shared exclusion resolver instead of product-specific PR-author-only checks.
  • Conflicting author, branch, label, or provenance evidence without a valid handoff fails closed with a concise owner action.
  • A PR Prepare the v1.4.0 release and stop stale completions projecting complete #959-shaped regression with a Devin author and branch, explicit Codex takeover, and Codex final head records both contributors, identifies Codex as current writer, excludes Devin and Codex from self-gating, and accepts an independent Claude exact-head audit.
  • Public and cloud evidence remains metadata-only and contains no source, diffs, prompts, transcripts, paths, credentials, or provider output.

Boundaries

Reuse the reviewer-exclusion and provenance contracts from #293 and #296 plus explicit handoff evidence from #751. Do not grant review or merge authority through a handoff and do not infer contribution from provider prose.

Delivery

One independently reviewable PR with one Code Mower builder, one independent exact-head merge-authority audit, focused adversarial regressions, privacy checks, and the normal Code Mower gate.

Completion dependencies and PR map

Requires #962's verified handoff boundary and #975's role eligibility result; keep contributor independence a separate shared decision. One planned OSS PR, planned Code Mower Claude builder with independent eligible Code Mower Codex review. #949 and #977 consume this resolver; #951/#920 verify its behavior. Every verified contributor to the current diff remains excluded from satisfying its own required independent review. If no qualified eligible lane remains, fail closed with one owner action. Do not fix labels manually as the product completion criterion.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    contract-firstRequires product/data/merge contract agreement before dependent work mergesenhancementNew feature or requesttier:RCode Mower generated label

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions