M4b review, and follow-up tasks 16 to 18
The review of tasks 01 to 15 goes in the implementer log, with the device check against the owner's Mattermost. Three follow-ups: - 16: the refusal without a runner says why. - 17: the texts that say who asked. - 18: approvals from non-approvers in direct or group messages go to an approver. Task 14's given serve_approvals.rs becomes serve_approvals.rs-task14, since task 18 hands over a new version. Tip T31 is added. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -600,3 +600,48 @@ The one deviation, reported, was the plan's fault: step 6 of the comment said "f
|
||||
`check_file`", which made step 5's `grep` print a line the task said it would not. The given test
|
||||
also differed from the plan's copy, in rustfmt's layout only: the design model copied it into the
|
||||
plan before formatting it. The plan's copy is now the formatted file.
|
||||
|
||||
### M4b, tasks 01 to 15 — reviewed 2026-09-24 by the design model (Claude)
|
||||
|
||||
Accepted, with three follow-up tasks (16 to 18). All work by Ornith-1.5-35B-A3B through
|
||||
`tools/run-plan.sh`. The code does what the spec says and is equivalent to the reference; against
|
||||
the owner's Mattermost, every claim held. One gap is in the spec, not the code (finding 1).
|
||||
|
||||
| Check | Result |
|
||||
|---|---|
|
||||
| 15 task commits; 1 plan commit by the design model during the run (`af7137d`) | pass; tasks 05 and 08 lack the `Implemented-By` trailer (finding 3) |
|
||||
| All given tests, fixtures and the runbook entry identical to the plan | pass |
|
||||
| Protected files (`AGENTS.md`, `CLAUDE.md`, `docs/design.md`, specs, `Makefile`, `scripts/`, `deny.toml`) | untouched |
|
||||
| `make gate` | `gate: ok`, 845 tests, the count the plan gave (the gate log counts 846: a different count) |
|
||||
| Banned constructs in new library code | none: no `unwrap`, `expect`, `panic!`, `#[allow]`, `unsafe` or bare `as` casts |
|
||||
|
||||
**Against the owner's server** (2026-09-24; this branch's binaries on the owner's machine,
|
||||
`inferproxy`, `brokerd` with `[gateway]` and an `ask` grant but no `[runner]`, `loopd` against
|
||||
Ornith slot 0 on straylight, `gatewayd` against the owner's Mattermost; the owner sent the
|
||||
messages):
|
||||
|
||||
| Claim | Seen |
|
||||
|---|---|
|
||||
| An `ask` call is posted in the thread that asked for it | yes, with the arguments fenced and the grant named; the owner saw the bot typing while the turn ran (the pause while it waits is covered by `serve_answers.rs`) |
|
||||
| `!approve <id>` from an approver in the thread approves it, as `bxctl` would | approvals 0 and 6 approved; the audit log names the approver (`by`) and the answering post (`post`); `bxctl audit verify` ok |
|
||||
| `!deny <id> <reason>` refuses it, with the reason | approval 4 denied "not now"; the post says so |
|
||||
| Nobody else, and nothing else, answers it | a non-approver's `!approve` refused with the reason; `!approbe` answered "unknown command" |
|
||||
| An approval answered elsewhere is marked | `bxctl deny 3`: the post became "No longer pending" |
|
||||
| A restart marks what it left behind and reposts | `gatewayd` restarted with approval 9 pending: its post marked; `brokerd`'s courier sent it again, and it went to the owner's direct messages because the session was no longer followed, as specified |
|
||||
| The bot can edit its own posts and look up users | yes |
|
||||
| No post left looking answerable | yes; Mattermost's edit history shows up as deleted copies in `posts?since` (`original_id`, `delete_at`), which `gatewayd` already skips |
|
||||
|
||||
| # | Severity | Owner | Finding | Fix |
|
||||
|---|---|---|---|---|
|
||||
| 1 | medium | spec | An approval asked by a non-approver in a direct message went into that direct message, where no approver can see it: only `bxctl` could answer it. The same in a group message the approver is not in. The owner's requirement for the fix: the approver must see who asked, their message, and what Boxmaker is trying to do. | Spec changed (`d2e8141`, section 6); tasks 17 and 18 |
|
||||
| 2 | low | code (M3a) | Without `[runner]`, every allowed call was refused with "the runner arrives in M3b", which is stale since M3b merged, and the model repeated it to the owner. | Task 16 |
|
||||
| 3 | nit | implementer (05, 08) | Two task commits lack the `Implemented-By` trailer that `AGENTS.md` asks for. The log rows are there. | None needed; noted for the lessons |
|
||||
| 4 | low | plan (14, 15) | Task 14's `ended` had two values both called `reason` and a comment that did not say which went where; task 14's tests could not send a refusal. The refusal's text was dropped, and task 15's given test found it. | Task 15 (`af7137d`); tip T30 |
|
||||
|
||||
What was good: 14 of 15 tasks finished on their first session. The courier, the registry's six
|
||||
checks and the text rendering follow their comments exactly. When task 15 found the cause of its
|
||||
failure in a file it was not given, it stopped and said so instead of editing that file, which was
|
||||
right.
|
||||
|
||||
**The run.** Task 15's first session stopped on finding 4. After the listed fix, task 15 finished
|
||||
on its first session.
|
||||
|
||||
Reference in New Issue
Block a user