bus: review.request reports whether a reviewer holds the role (#1599)

Row 105. Built by a Haiku subagent under Researcher (decision 129),
packet agents/researcher/work/queue-105/r1/, candidate manifest
cd6d5eb3e4093ac157f63d05cb639d243d76c6bde1a03e78efb8f29e191b6b44.
Filbert approved on #1599, comment 28247.

The review.request reply and the review.requested event carry held,
the run id holding the reviewer role or null. The request_review tool
description says what null means. The broker change is live only at
a bus restart.

Sage's gate rerun on 79e126be0 with rows 101 and 105 applied, Docker
up: node suites bus 128, business 67, cli 146, control-board 124,
conversation 182, discord 178, harness 70, ledger 78, mosaic 69,
queue 155, runs 43, seat 109, tasks 92, webui 108; scripts auth 15,
conductor 17, config 24, discord 66, extension-package 18,
foundation 44, queue 28, release 14, task 98. All pass, 0 fail.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-13 16:26:12 -05:00
co-authored by Claude Opus 5.5
parent 056a20397d
commit 3a1e11b83e
5 changed files with 37 additions and 5 deletions
+1 -1
View File
@@ -110,7 +110,7 @@ export function typedTools({ resolved, arbiter = false, tracker = false, project
}, ["task_ref", "project", "branch"]));
}
if (held.has("review.request")) {
add("request_review", "review.request", "review.request", "Ask a reviewer role to review the task's latest pushed commit. The reviewer gets a REVIEW-REQUEST message, and its verdict comes back to you as a REVIEW-RESULT.", obj({
add("request_review", "review.request", "review.request", "Ask a reviewer role to review the task's latest pushed commit. The reviewer gets a REVIEW-REQUEST message, and its verdict comes back to you as a REVIEW-RESULT. The reply's held names the run holding the reviewer role, or is null when no reviewer is running. A null request waits until a reviewer launches, so tell whoever launches roles that a review is waiting.", obj({
task_ref: TASK_REF,
commit: str("The commit push_working returned", { pattern: "^[0-9a-f]{40}([0-9a-f]{24})?$" }),
to: str("Reviewer role instance"),
+3
View File
@@ -97,6 +97,9 @@ test("the review loop: push_working and request_review for the coder, fetch_revi
assert.deepEqual([ask.verb, ask.action], ["review.request", "review.request"]);
assert.deepEqual(ask.parameters.required, ["task_ref", "commit", "to"]);
assert.equal(ask.parameters.properties.commit.pattern, "^[0-9a-f]{40}([0-9a-f]{24})?$");
// Row 105 (#1599): the description says what a null held means, and what the requester should do.
assert.match(ask.description, /The reply's held names the run holding the reviewer role, or is null when no reviewer is running\./);
assert.match(ask.description, /A null request waits until a reviewer launches, so tell whoever launches roles that a review is waiting\./);
const reviewer = resolvedFor(t, "reviewer");
const rtools = typedTools({ resolved: reviewer, tracker: true, projects: ["stack"] });