Skeletons for new files only; existing files change by exact edits, so no task overwrites an earlier one's work. Each task's tests were run against a reference built in order from master, with the gate at each step and mutations checked; each skeleton compiles and fails its tests, and every todo!() comment was read beside its signature. The reference is kept off this machine. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2.3 KiB
2.3 KiB
M4b task 11: the approvals posted here, and the commands that answer them
Branch: m4b (run git switch m4b; git status --short must be empty, otherwise stop)
Commit subject: gatewayd: approvals, the registry and the judging of commands
Goal
gatewayd keeps the approvals it has posted and not yet seen answered. A command answers one only
if all of these hold, checked in this order, each refusal answered in the thread with its own
line (M4b spec, section 7):
- its author is an approver (
NOT_APPROVERotherwise); - it is well formed (
USAGEotherwise); - that approval is pending here;
- it was not too long to show (then only
bxctlanswers it); - the command is in the approval's own thread;
- it was posted after the approval's last part.
An accepted answer is taken out of the registry as it is sent to the approval's
gateway.sock connection, so a second !approve finds nothing.
Files
- Copy: the skeleton
crates/gatewayd/src/approvals/mod.rs(it replaces task 10's three lines;pub mod text;is still in it), andcrates/gatewayd/tests/approvals_judge.rs - Modify:
docs/implementer-log.md
The skeleton
Written: NOT_APPROVER, USAGE, Posted, Judged, Registry with new and lock. To fill:
add, remove, holds, waiting_sessions (one line each), and judge, whose seven steps are
above its todo!().
Steps
- 1. Copy.
git switch m4b, thencp docs/plans/M4b/files/crates/gatewayd/src/approvals/mod.rs crates/gatewayd/src/approvals/ && cp docs/plans/M4b/files/crates/gatewayd/tests/approvals_judge.rs crates/gatewayd/tests/ - 2. See it fail.
cargo test -p gatewayd --test approvals_judge. Expected: it compiles and 6 tests fail. - 3. Fill the four small functions, then
judge,cargo check -p gatewaydafter each. - 4. See it pass.
cargo test -p gatewayd --test approvals_judge --test approvals_text. Expected: 6 and 6 passed. - 5. Run the gate.
cargo fmt --all, thenmake gate. Expected last line:gate: ok. - 6. Log and commit.
git add crates/gatewayd docs/implementer-log.md Cargo.lock && git commit
Done when
- Both suites pass;
make gateprintsgate: ok.
Stop and report if
- A comment above a
todo!()does not fit its function, or contradicts a test: quote it.