From 51cf9ddec65a9236319051f44f1a7b2759d7e97c Mon Sep 17 00:00:00 2001 From: Smokey <150986568+jacisjake@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:45:29 -0600 Subject: [PATCH] =?UTF-8?q?spec:=20nudge=20loop=20guard=20decided=20?= =?UTF-8?q?=E2=80=94=203=20nudges=20per=20expectation=20with=20no=20new=20?= =?UTF-8?q?content,=20then=20summarize=20to=20owner=20(#4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHATROOM_SPEC.md | 1 + CLAUDE.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHATROOM_SPEC.md b/CHATROOM_SPEC.md index 6e4d7b9..ed7835a 100644 --- a/CHATROOM_SPEC.md +++ b/CHATROOM_SPEC.md @@ -84,6 +84,7 @@ Jev classifies and scores; it isn't an agent. The harness owns the ledger and th - **Check:** on each new event and on a short timer, Jev scores open expectations against the room log (met, missed, or pending, with confidence). - **Trigger on a miss:** the harness hands the verdict to the responsible crow as a `nudge` trigger. The crow's model decides how to proceed. - **Budget:** each nudge counts against the nest's exchange budget. When the budget runs out, open expectations go to the owner as a summary instead of more nudges. +- **Nudge loop guard** [decided 2026-10-27]: **three loops max.** When a crow has received three nudges on one expectation with no new content or response data from it in between, the harness stops nudging and sends the open expectation to the owner in the summary. Three is a per-expectation constant in `guardrails.go`, counted by the harness, so the guard holds even if Jev keeps calling the expectation missed. Initial checks (from testing): promise kept, rounds completed, turn order (debate only), single owner, claims sourced, correction handled once, role adherence, requester gets an answer. diff --git a/CLAUDE.md b/CLAUDE.md index 21681d1..6e4f440 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -106,7 +106,7 @@ UI development: run the server, then `cd ui && npm run dev` (Vite proxies `/api` `.env` keys (names only; never print values): `OPENROUTER_API_KEY` (present), `TYPESAFE_API_KEY` (present), optional `ANTHROPIC_API_KEY`, `CROWS_PROVIDER`, `CROWS_MODEL`, `CROWS_JEV_MODEL` (default `jev-latest`), `CROWS_JEV_THRESHOLD` (default 0.7). Inspect safely with: `sed -n 's/^\([A-Z_]*\)=.*/\1/p' .env`. -Guardrail defaults (`guardrails.go`): 5 crows in flight, murder of 3, 20 items per list, 2,000 characters per item, 4 subtasks, 20,000 tokens per item, 100,000 per list, 60-second crow timeout, promote after 10, 5 requests per minute, cooldown 30 seconds doubling to 1 hour, 2 banter calls per list. +Guardrail defaults (`guardrails.go`): 5 crows in flight, murder of 3, 20 items per list, 2,000 characters per item, 4 subtasks, 20,000 tokens per item, 100,000 per list, 60-second crow timeout, promote after 10, 5 requests per minute, cooldown 30 seconds doubling to 1 hour, 2 banter calls per list, and (chatroom) a **3-nudge loop guard per expectation** — after three nudges with no new content from the crow, the harness stops and summarizes to the owner (CHATROOM_SPEC.md section 7). ## 6. Verified state (2026-10-27)