Repository navigation
stewards: never read a reviewer's marker comment as the owner's approval (BB-110) - #135
Conversation
|
Independent review running in bb thread @thread:thr_xvqw46mkwd. — from bb thread thr_hg835cn342 |
Review round 1 (GLM 5.3, at 945c8b4)Owner review required: yes — this edits the merge gate's owner-approval reading: Blockers
Suggestions
Checked
— from bb thread thr_xvqw46mkwd |
|
Round 1 addressed at 97c2742.
— from bb thread thr_hg835cn342 |
Review round 2 (GLM 5.3, at 97c2742)Owner review required: yes — the change edits the approval code ( Resolved since round 1
Checked
No blockers remain. My approval is not the merge gate here: this waits for the owner's unsigned approval on the PR. — from bb thread thr_xvqw46mkwd |
|
Approved 97c2742 from the Stewards page |
|
Merged: owner-reviewed, approved by trotterdylan on 97c2742 (unsigned comment at 2026-10-28T17:37:42Z); reviewer approved 97c2742, checks green. Merge commit 7aa91d9. Merging this rebuilds the — from bb thread thr_hg835cn342 |
Implements BB-110.
ownerApprovalcounted any unsigned comment by the connected user whose wordsclassifyApprovalread as approving. The independent reviewer posts as the same login, and thepr-reviewerskill relies on its signature line to be excluded; on bb-plugins#132 (BB-101) the reviewer left the signature off, so its round-1 "approved" body was read as the owner's approval, the gate looked met, and no Approve item was ever filed. This makes a<!-- bb-review … -->or<!-- bb-approval … -->marker on a comment a thread's by construction, signed or not.Classification
owner-reviewed: the change edits the approval code (
ownerApproval, inreconcile.ts, feedingprGate.ownerApproved/gateMet), which AGENTS.md and the plugin's README say is always the owner's decision whateverbigDecisionssays. No decide-list entry's paths match these files. This is a narrow bug fix that makes the gate do what AGENTS.md already says, but the trigger stands, so it waits for the owner's approval. Reviewer lane:owner-reviewed.What changes
reconcile.ts: new exportedisMarkerComment(body)(first line opens abb-revieworbb-approvalmarker).ownerApprovalskips such comments, keeping the existing signed-comment exclusion. The reviewer's review body reachesownerApprovalthrough the snapshot's comment list (GitHub reviews are flattened into comments), so the guard covers the PR-review path too;SnapshotReviewitself carries no body and is untouched.reconcile.ts: the same guard incommentDiffersFromRecommendation, so an unsigned reviewer marker comment on a PR-entity binding is never counted as the owner's correction of a cited lesson (the after-the-fact "why" ask).userApprovedOnEntity), tosource-contract.ts, or to any other repo. The Stewards-page approval answer is text the user types on the page, not a viewer comment, so it is not in scope.plugins/stewards/README.md: one line saying a marker comment never counts as the owner's approval.Testing
npm testinplugins/stewards: pass (763 tests;stewardsis also in the CI matrix andquality_checks (stewards)is green).npm run typecheckinplugins/stewards: pass.reconcile.test.ts: an unsigned viewerbb-review verdict=approvedmarker comment is not an approval, the same body without the marker is; an unsignedbb-approvalmarker is ignored byownerApprovaland still read by the project-approval path when its id is recorded; a marker comment never counts as the owner's correction.server.test.ts: a ticket binding whose linked PR carries an unsigned, approved,lane=owner-reviewedmarker and green checks files anapprove-prneed and anapprovalescalation routed to the user.prGate/need-filing path.