docs: M5d-2 checklist: retain, Tally, mutation counts

Task 08 filters pending after the records walk so a ToolResult
before its ToolSummary is not summarised twice. Task 10 names
Tally to satisfy clippy type_complexity. Task 06 does not
return from tick when every_s is 0. README records 12/12
mutations caught.

Co-Authored-By: Grok 4.6 <noreply@x.ai>
This commit is contained in:
2026-10-03 02:42:06 -07:00
co-authored by Grok 4.6
parent f426b46ae7
commit 72e87076bc
4 changed files with 21 additions and 19 deletions
@@ -43,7 +43,7 @@ Tests call `tick(ctx, now)` with injected time. No sleeps (T27).
- **`Context::hold`.** Same insert as `handle`: if the id is already in `busy`, `Err(Busy)`;
else insert and return `Held`. `Held` must be `pub` so the given test can keep it. `Drop`
already removes the id. Do not return `Result<_, ()>`: clippy `result_unit_err` is denied.
- **Due.** `every_s == 0` → no heartbeat work. Else `now.unix_millis().saturating_sub(last.unix_millis()) >= every_s.saturating_mul(1000)`
- **Due.** `every_s == 0` → no heartbeat work (do not `return` from `tick`; task 07 runs jobs after this). Else `now.unix_millis().saturating_sub(last.unix_millis()) >= every_s.saturating_mul(1000)`
where `last` is `last_heartbeat.unwrap_or(started)`. `07:00` to `07:01` with `every_s = 60`
is due. `07:01` then `07:01:30` is not.
- **Prompt first, then hold.** If `read_to_string(cfg.heartbeat_prompt())` fails, do not hold,