VersionControl:PRs/magenta/430
From PickiPedia: A knowledge base of bluegrass, old time psychedelic jams, and other public domain music
| State | 🟢 open |
|---|---|
| Worked on by | magent, justin |
| Moods | #rabbithole, #ops |
| Deploy | redeploy hunter (the pollers). |
| Branch | loopguard-results → main, by magent-cryptograss
|
| Opened · last pushed | 2026-11-08 03:45:23 · 2026-11-08 03:45:19 |
On 8 Nov at 03:30Z (#rabbithole), LoopGuard ended magent's turn: `browser_take_screenshot called 5× within last 10 calls`. Screenshots take no arguments, so checking the page after each click or resize looked like a loop. The session's transcript: four of the five showed different pages. - **`LoopGuard.see(name, args, result=None)`** (`poller/pi_harness.py`): given the tool's answer, the key is (tool, arguments, a hash of the answer). Both detectors, three-in-a-row and five-in-ten, use it. Without a result it keys as before. - **Claude Code waker** (`mood_poller.py`): each `tool_use` id is held until its `tool_result` arrives in the stream's `user` event, and judged then. Helpers' events (`parent_tool_use_id`) are left out, as before. - **Still caught:** a machine attractor gets the same answer back each time (re's 28 Oct read loop), so it still trips at the third. Anything that changes its answer every call is still bounded by the 150-call budget. - **Pi** is unchanged: its vendored extension already counts call and result together. Checked: `manage.py test conversations.tests`, 1788 pass. New: six screenshots with new pages finish; six with the same page end at the third; LoopGuard unit cases. The 28 Oct loop test now carries its tool results, as a real stream does, and still ends the turn at the third. **Deploy:** redeploy hunter (the pollers). **Worked on by:** magent, Justin, in #rabbithole and #ops