Skip to content

Converge self-review on a blocking boundary; gate PR opening - #238

Merged
bigboateng merged 8 commits into
mainfrom
convergence-boundary
Aug 22, 2026
Merged

Converge self-review on a blocking boundary; gate PR opening#238
bigboateng merged 8 commits into
mainfrom
convergence-boundary

Conversation

@bigboateng

Copy link
Copy Markdown
Contributor

Boundary

This change crosses the convergence boundary of the self-review control program: the rule deciding when a reviewed head may become trusted, mergeable state. Previously that rule was the proposer's verdict string — an untrusted sentence. It is now a deterministic law over finding priorities, hashed into the program identity, and the same boundary gains a second consumer: opening a pull request itself becomes a governed transition that only fires for a head whose converged review attestation verifies.

Transition

Before: a review saying "patch is correct" converged even with an open P1, a review saying "patch is incorrect" over nothing but nits looped until stall, and any change to the review policy sealed an attestation CI could never verify, because the local loop admitted the worktree policy while CI re-admits from the base revision. After: convergence happens exactly when no blocking (P0/P1) finding remains, regardless of verdict wording; P2/P3 findings are residuals that are recorded and reported but can neither demand rounds nor trigger stall escalation; an incorrect verdict with zero findings is refused as incoherent; both the local loop and CI admit the policy from the base revision, so a policy-changing branch still seals a verifiable attestation and the new policy governs after merge; the review prompt scopes deep durable-contract checks to diffs that touch such surfaces; skill runs rebuild the reviewer per command so mid-run repairs take effect immediately; and pull requests open only through the new open-pr workflow, which refuses unless the committed attestation verifies for the exact head tree before pushing anything.

Evidence

The reviewer suite adds tests proving each side of the law: residual-only reviews converge under either verdict wording and land their priorities in the sealed round record; an open P1 refuses convergence despite a correct verdict; incorrect-with-zero-findings is invalid; shrinking residuals cannot mask a flat blocking measure (escalates on the third submission); and a branch that edits the prompt seals an attestation that verifies against the base admission while the worktree-fingerprinted inverse refuses. The full reviewer suite, go vet, and the 69-test repository contract suite pass. All three Yield skills pass fixture tests, with the open-pr fixture driving the real gate end to end: it seals a real attestation in a scratch repository, pushes to a local bare remote, and creates the pull request through a stub gh. The base-admission defect this description mentions was found by the new review program reviewing this very change: round 1 recorded it as a blocking P1, the fix landed, and round 2 converged — the attestation on this branch is the output of that loop.

Commits

  • Converge the self-review on a deterministic blocking boundary
  • Admit the review policy from the base revision in the local loop
  • Seal converged self-review attestation
  • Rebuild the reviewer in every skill command instead of once per run
  • Add the open-pr skill: pull requests open through the review gate
  • Seal converged self-review attestation
  • Remove the accidentally committed open-pr binary and ignore skill builds
  • Seal converged self-review attestation

Self-review attestation

  • reviewed tree: 638048ded4504ed3df431637e803348cc2100340
  • program fingerprint: ddbd77f1cbc842b3dffcb8e54b53ddcc624a998fb9c5a9ace15028580ab87967
  • the review-verified CI job re-derives both facts deterministically from the base-admitted policy

P0/P1 findings block convergence; P2/P3 are residuals recorded with the
round. Convergence, stall, and round bounds run over the blocking measure
so verdict wording and residual churn can neither converge past an open
P1 nor keep the loop alive on nits. The blocking boundary joins the
program fingerprint; the admitted prompt scopes deep durable-contract
checks to diffs that touch such surfaces and turns nearby pre-existing
issues into carried notes. Skills fix blocking findings only and report
residual titles for the user to decide.
A branch that changes the policy assets previously sealed an attestation
whose program fingerprint CI could never recompute, because the loop
admitted the worktree policy while verification re-admits from the base
revision. Both sides now admit from the base revision: the changed
policy governs after merge, and resolve surfaces a policy note when the
worktree assets drift from the admitted ones.
A solve run whose fix commit changes the reviewer's own code previously
kept driving the binary built at run start. The prelude now rebuilds
from the current tree before every command (a cached no-op when nothing
changed), so mid-run repairs take effect for the next resolve, submit,
and seal.
Opening a pull request becomes a governed workflow: skills/open-pr
refuses unless the committed attestation verifies for the exact head
tree (the check CI performs), then assembles a fixed-structure
description — agent-drafted Boundary, Transition, and Evidence plus
workflow-gathered facts (commits, attestation binding, residual
findings) — pushes the branch, and creates the pull request. Fixture
tests drive the whole flow against a scratch repo with a local bare
remote and a stub gh.
A local go build artifact entered the tree with the open-pr skill;
compiled skill binaries are never repository content, so the three
skill output paths join .gitignore.
@bigboateng
bigboateng merged commit 898d094 into main Aug 22, 2026
18 checks passed
@bigboateng
bigboateng deleted the convergence-boundary branch August 22, 2026 10:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant