Conversation
…nted checks, publisher heading passes check (Closes #5776) The merger merged 0 pull requests since 2026-09-20: its all-green gate cannot pass while advisory checks (and spec-guards on master) are red. - tools/bees/reviewer.py: the reviewer bee as a launchd service. The runner gathers facts (ruleset-required checks, failing step, log tail, the same check on master); a sandboxed claude -p (Read/Grep/Glob, no token) judges; the runner validates the verdict, re-reads the head, approves and labels as t27-bees[bot]. - auto-merge-ready-prs.yml: a red check passes only if not required, concluded, and discounted in the bot's approval of that head. Required checks must have posted and passed; an unreadable ruleset fails closed. Also runs on the bee-reviewed label. - tools/queen/publish.py: heading ends in (YYYY-MM-DD) as check_now_entry_shape requires; self-test runs that checker on the generated entry. Self-tests: reviewer 65/65, merger 26/26 (master's workflow fails 4), publish 26 shapes (old heading fails). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
…(Refs #5776) The first listing after the base moves reads UNKNOWN for every pull request; measured on 2026-10-03 it reported 0 to review where a second listing found 10, so a whole launchd interval passed with nothing reviewed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
The string template put '2>&1' into XML unescaped; plutil rejected the
plist ('unknown ampersand-escape sequence'), so launchd could never load
it. The self-test now parses the job it writes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR DashboardGenerated at: 2026-10-03 16:45:01 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-10-03 16:45:31 UTC
Summary
Seal Status
|
… run (Refs #5776) The first launchd run exited 1 on a TLS handshake timeout reading one linked issue; nothing was reviewed that interval. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR DashboardGenerated at: 2026-10-03 16:49:52 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
…ad (Refs #5776) Under launchd the first real run hit 'Failed to authenticate: OAuth session expired', recorded agent-failed on four heads (two strikes and a head is never reviewed again), and kept going. Now AgentUnavailable stops the remaining reviews, records nothing, exits 1, and logs the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CLI's own OAuth session cannot refresh under launchd. The operator stores a 'claude setup-token' token as Keychain item t27-bees-claude-token; the runner hands it to the agent's environment only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR DashboardGenerated at: 2026-10-03 16:57:15 UTC
Summary
Seal Status
|
PR DashboardGenerated at: 2026-10-03 16:57:26 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
The merger's gate in auto-merge-ready-prs.yml changed shape. One step left the census (`if [ "$FAILING" = "0" ]`, the all-green rule) and three entered it: `if [ -n "$PENDING" ]`, `if [ -z "$BLOCKING" ]` (the discounted-check gate) and the job's `if:` for the bee-reviewed label trigger. None of them is in a quiet shape: each names its subject and fails when it is missing. Re-blessed with `tri census pin --bless`; `tri census pin --gate` passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-10-03 17:36:39 UTC
Summary
Seal Status
|
tools/queen/publish.py wrote `(published DATE)`, which tools/check_now_entry_shape.py HEADING does not accept; fixed in the publisher by #5777. Only the first line changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tools/queen/publish.py wrote `(published DATE)`, which tools/check_now_entry_shape.py HEADING does not accept; fixed in the publisher by #5777. Only the first line changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…label, read every bee-reviewed PR (#6826) * fix(merger): judge red checks the bee answered for, run on the bee's label, read every bee-reviewed PR (Refs #6657, Refs #5776) The merger has merged zero pull requests since 2026-09-20 for three reasons, each measured: 1. It counts every red check as failing. spec-guards has been red on master since 2026-09-16 (ring-096-rust drift, fix #5921), so every bee PR inherits it. The reviewer bee already writes `discounted-check: <name> -- <why>` lines in its approving review; the merger never read them. Now it does (the #5777 slice): a red check blocks unless the bee discounted it by exact name, and a check the base branch ruleset requires can never be discounted, nor merged around by never posting. 2. GitHub ran the */20 cron about every six hours (02:19Z, 09:13Z, 18:28Z, 00:16Z, 06:25Z). The merger now also runs on pull_request_target labeled with bee-reviewed; the only value read from the payload is the PR number, validated numeric, and every gate is re-read from the API. 3. `gh pr list --limit 50` read the newest 50 of 108 open PRs and missed 6 of the 7 approved ones. It now lists only bee-reviewed PRs, limit 500. Self-test: 29/29 (tools/bees/merger_gate_selftest.py). Negative control against master's gate: 6 failures, including "required check never posted". Live read-only dry run: ready_prs=6729 6728 6724 6723 6722 6718. Owner standing approval 2026-10-06 for foreign edits (label owner-approved-foreign); the foreign-exceptions entry is removed again right after merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * census: quiet 154 -> 159 "named a path but not quiet" (Refs #6657) The merger's new steps (ruleset read, review-body decode, EVENT_PR guard) add five lines that name a path in a shape the quiet census does not flag. Nothing about any gate changed; the population grew. Value as measured by `tri census pin --gate` in cli-tri on 68d2471 ("now: ... 159"). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oad spends no attempt (Refs #5776) B34. The two-model rule dead-ended: when z.ai answered 1305 and the CLI fell back mid-review, the first review's modelUsage held both free flash models and second_model() found none left, so every such APPROVE ended incomplete -- 29 rows in all, 18 of the 23 incompletes on 2026-10-06. The CLI (2.1.283) does not alternate: on 1305 it sets mainLoopModel to the fallback and stays there, so the verdict was written by glm-4.5-flash. The rule is kept -- two models, each reaching APPROVE on its own from the same brief -- and the second model now only has to differ from the model that WROTE the first verdict (verdict_model). It still runs without a fallback. An agent-failed on 1305 (the second opinion has no fallback) is z.ai's load, not the head's, and spends no attempt, as B18 made a fallback free: #6551 and #6730 are reviewable again. The opinion now names the model that wrote it, so a review that ran wholly on 4.5 no longer reads "glm-4.7-flash approved, glm-4.7-flash requested changes" (#6759). Six new self-test checks failed by name on the old code; self-test 0 failures, bees 0, merger gate 0 of 26, loop-tools 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes #5776
Why
The review column did not drain. These measurements are from 2026-10-03:
auto-merge-ready-prs.ymlmerged 0 pull requests since 2026-09-20; all 300 merges were by hand.spec-guardsis red on master itself.tools/queen/publish.pyfailedcheck, because the publisher wrote(published YYYY-MM-DD)as the last parenthesis of the heading.What changes
tools/bees/reviewer.py(new)claude -pjudges the PR with--restricted --safe-mode --strict-mcp-config --tools Read,Grep,Globand no token in its environment. The runner then validates the verdict, re-reads the head, and approves and labels ast27-bees[bot]. A request for changes is posted as a COMMENT, so it never blocks a manual merge..github/workflows/auto-merge-ready-prs.ymldiscounted-check: <name> -- <why>. Required checks must have posted and passed. If the ruleset cannot be read, the gate fails closed. The workflow now also runs onpull_request_target: labeled(bee-reviewed); it never checks out PR code.tools/bees/merger_gate_selftest.pytools/queen/publish.py# NOW -- Published: <title> (YYYY-MM-DD). The self-test imports the realcheck_now_entry_shape.check_entryand runs it on the generated entry.tools/bees/README.mdVerified
python3 tools/bees/reviewer.py self-test→self-test: 0 failure(s), 71 checks.python3 tools/bees/merger_gate_selftest.py→0 failure(s) of 26.MERGER_WORKFLOW=<master copy>→ 4 failures, as the negative control expects:python3 tools/queen/publish.py --self-test→ok: 26 shapes. With the old heading restored it fails on "the entry this writes passes thecheckgate".reviewer.py run --dry-runon Port gHashTag/trinity:fpga/openxc7-synth/d_y0_test.v (Verilog, 1 module) to specs/port/trinity/fpga/openxc7-synth/d_y0_t #5756 and specs/port/fpga/verilog/ternary_mac_synth.t27: rewrite w_code_to_mult/product in t27 form (explicit return, element-wise #5664 took about 37 s and cost about $0.20 each, in 7 to 9 turns.spec-guards(red on master 1b12580),untrusted-input, andemit-bitexact, with reasons.check, which is the publisher heading this PR fixes.Not done here
Foreign code: owner approval
This branch edits Python (
tools/bees/reviewer.py), which the only-t27 rule(
specs/policy/own_language.t27) admits only under theowner-approved-foreignlabel. The owner's standing approval of 2026-10-06 (translated): put the
owner-approved-foreignlabel on yourself and do the work, do not ask aboutlabels. The owner asked the same day to fix the reviewer bee's second-model rule
(489bae8, plan B34). The debt -- the reviewer in t27 -- is #6198/#5980.
🤖 Generated with Claude Code