Repository navigation
knowledge: hard stop #1 leaks a fourth way; the in-loop check needs a provenance clause (Oct 5–12) - #28
Open
espi wants to merge 1 commit into
Open
knowledge: hard stop #1 leaks a fourth way; the in-loop check needs a provenance clause (Oct 5–12)#28espi wants to merge 1 commit into
espi wants to merge 1 commit into
Conversation
… provenance clause Weekly update-knowledge pass, window Oct 5-12 2026. Five research agents; every load-bearing claim re-verified by the lead against a primary rather than relayed. Headlines: - Hard stop #1 leaked a fourth time, through the same setting as the second: v2.1.296 fixed CLAUDE_CODE_RESUME_INTERRUPTED_TURN re-running a finished turn, three weeks after v2.1.285 fixed it re-running a turn that ended at --max-turns. With /goal resetting its turn count on resume, the pattern is that resume is where hard stop #1 leaks. - The in-loop check needs a provenance clause. arXiv:2610.11835 (n=145 PRs) finds 8-17% of LLM-generated regression tests are fault-enforcing, persist, accumulate, and evade developer suites. A maker-authored test satisfies this repo's non-negotiable while asserting the bug. Proposed amendment surfaced as a human call, not applied. - A metered verifier's budget ceiling is a verifier kill-switch: Anthropic Code Review skips the review on cap exhaustion while the check stays neutral, so a correct hard ceiling can produce an unreviewed merge. Ellipsis shows the safe design (an out-of-budget reviewer never counts as an approval). - Corrected a claim the KB had repeated for weeks: peer harnesses DO ship iteration caps (Goose default 1000, soft) and stall detection (Gemini CLI on by default since 2025-09) and validator primitives (Cursor /goal, Factory mission validators). A hard dollar ceiling remains unique to Anthropic, and the peer caps are soft or off by default. - Two corrections this repo owes itself: the claude/ branch prefix is a default, not an enforced restriction (enforcement is a GitHub ruleset); and the Routine caps are hourly, not daily, with scheduled runs waiting rather than failing. Both live in protected or always-suggest regions, so both are suggestions. Also: /loop ships none of the three hard stops (only a 7-day expiry) and its bounding state is a file the agent can delete; Haiku 5.5's 100K price cliff lands on /goal's evaluator; the spend meter erred in both directions in three weeks; auto-approve takes attack success 29.2% -> 95.6% across six harnesses; LiteLLM's zero-budget bug shipped in v1.105.0; the Bedrock cell is filled from a first-party source that documents no cap at all. All 62 arXiv IDs machine-verified against the API (62/62 resolved, zero hallucinated, 55 in-window). Thirteen backlog items resolved and archived, fifty-two opened; the backlog is now 95 open and growing faster than it resolves, which is flagged for a human. Primer held inside its 750-line budget at 748 by moving older per-paper detail to knowledge/archive/ verbatim. Scope: knowledge/ only. SKILL.md, guardrails/, budget.env, CLAUDE.md, permissions and the gate are untouched; step 7 found no auto-apply candidate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018wyFXTkape7KkU1fCQcYy9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Weekly
update-knowledgepass, window Oct 5 – Oct 12 2026. Five research agents; every load-bearing claim below was re-fetched and verified by the lead against a primary, not relayed from an agent's report.Routine self-improvements
Applied (auto-gated): none this pass.
I ran the step 7 scan and found no auto-apply candidate. Specifically, I verified on disk that every path
SKILL.mdreferences resolves (kb-size.yml,self-edit-guard.yml, all fourknowledge/files,guardrails/budget.env,runbooks/staying-current.md,CLAUDE.md, and the../../../knowledge/archive/resolved-caveats.mdrelative link), and that all thirteen step-number cross-references point at the right steps. Nothing stale, no broken link, no typo — so default-deny applies andSKILL.mdis untouched (git diff --name-onlyconfirmsknowledge/only).Suggested (needs your confirm):
runbooks/staying-current.mdasserts "Branch pushes areclaude/-prefixed only, so it physically cannot touchmain", andSKILL.mdstep 8 asserts the prefix "keeps it inside the Routine's default push restriction, so the routine physically can't touch main." The currentroutinesdoc says something weaker: "Claude pushes its work to a branch prefixed withclaude/unless your prompt directs it to push to another branch. To control which branches a run can push to, use branch protection rules or rulesets on GitHub" — plus a second-order catch, "a rule that access can bypass doesn't block a run's push." I also readclaude-code-on-the-webin full: it documents the two GitHub auth methods as granting access to "clone code and push branches" with no branch scoping, and neither page documents any Routine-level branch-push setting. The enforceable version of this floor is a GitHub ruleset onmainthat the connected identity cannot bypass.runbooks/**and step 8's branch rule are both in step 7's always-suggest lane.SKILL.md's "Guardrails for this skill" is wrong twice over. The caps are hourly, not daily, and for scheduled runs the over-limit behaviour is "The run waits until the limit resets" — a queue, not a rejection (only Run now/API fires fail). ✅ The other half is confirmed verbatim: "Without usage credits, additional runs are rejected until your usage window resets", so the subscription limit is the real ceiling and only with metered overage off. → Routed to you: that text is in a protected region.CLAUDE.md's verification non-negotiable says nothing about who wrote the check, and 8–17% of agent-written regression tests assert the bug. Proposed wording: the check must observe state the agent cannot write, and must not be authored by the loop it gates. → Routed to you:CLAUDE.mdand the three hard stops are always-suggest.guardrails/). → Always-suggest.onFailure: "block"andCLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MSacrossguardrails/and the templates. Both are new this window; without the first, a hook-delivered gate that crashes fails open. →guardrails/is always-suggest.arXiv:2609.27871"Bounded Loops: Pre-Run Spend Bounds, Proved Termination, and Verified Completion for Agent Harnesses" — whose title maps onto all three hard stops plus verification. A one-off backfill sweep, not bounded by a date window, looks cheap and high-yield. → Changes step 3, so semantic and always-suggest.--depth Nclone fabricates a file's last-modified date at the shallow boundary; GitHub topic-page "updated N days ago" strings are not commit dates (wrong by seven weeks);<docs-url>.mdorAccept: text/markdownreturns clean raw markdown on Mintlify-hosted docs and sidesteps the rendered-page year trap; and a second batched arXivid_listcall in one session returns 429, so fall back to per-IDabs/pages. → Semantic additions to steps 3–4.The headline: hard stop #1 leaked a fourth way, and the leak has a name
v2.1.296 (Oct 9): "Fixed⚠️ resume is where hard stop #1 leaks, so an external counter must survive the restart it is counting across.
CLAUDE_CODE_RESUME_INTERRUPTED_TURNre-running a finished turn after a restart when an MCP tool result had ended that turn." That is the same setting v2.1.285 fixed three weeks earlier for "re-running a turn that had ended at--max-turns". Two defeats of turn accounting in eighteen days from one component — a component, not a bug. Add/goal, which "carries the condition over but resets the turn count, timer, and token-spend baseline" on resume, and the pattern is clear:Two more ways a stop can fail without erroring:⚠️ the meter erred in the opposite direction from last window (v2.1.296 fixed ⚠️ a fourth zero-polarity arrived, where
--max-budget-usdover-pricing Sonnet 5.5 cache reads 2×, after v2.1.286 fixed under-counting) — so the meter a ceiling is computed from has been wrong both ways in three weeks, and can stop a loop early as well as late; andCLAUDE_CODE_WEB_SEARCH_REFILLS_PER_HOUR=0means enforce and its default differs by session type — 100/hr interactive,0in headless.✅ Credit where due:
CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MSis the first bound ever offered on the retry watchdog (though per-request, not per-session, and unbounded when unset), andonFailure: "block"finally lets a hook fail closed.CLAUDE.mdrequires "a single deterministic success check … run inside the loop" and says nothing about who wrote it.arXiv:2610.11835(v1 2026-10-08, n = 145 PRs across SciPy, Qiskit, pandas): 8–17% of LLM-generated regression tests are fault-enforcing — they assert the bug — against 2.4–4.8% that reveal faults; they persist ("83%-91% … still relevant and pass"), accumulate ("83%-92% remain enforced at the end of the commit history"), and "the developer-written test suite detects only 14%-30% of them", producing "a new form of technical debt."A maker-authored test is deterministic, pass/fail and inside the loop — and sometimes asserts the fault, then outlives the loop while hiding it from the humans' own suite. Corroborated within-paper by
arXiv:2610.13065: agents' suites reach "mutation scores below 60%" while their implementations "pass 82% of the reference tests" — "agents can build software they cannot verify." The best primitive for the strict form is SpecGuard (arXiv:2610.09159), which formalizes intent and tests independently into Lean 4 and lets the kernel decide pre-execution, before the loop has a reason to cheat around it.Anthropic Code Review now ships an enforced monthly cap, and what it enforces is the absence of the check: "Code Review skips the review and posts a single comment on the PR", while the run "always completes with a neutral conclusion so it never blocks merging" and "a failed run never blocks your PR." So a correctly-configured hard ceiling can produce an unreviewed merge. The shape recurs in⚠️ And across roborev, Anthropic Code Review, CodeRabbit, Qodo 3.0 and Kodus, no tool does both — each either caps spend or gates merges.
claude plugin eval, roborev and Kodus. ✅ Ellipsis is the existence proof that the safe design works: an out-of-budget reviewer "never counts as an approval" — exhaustion degrades to withheld approval, not skipped check.🔴 A claim this KB had repeated for weeks was simply wrong
"No peer harness has shipped a validator stop, iteration cap, stall detector or dollar ceiling" is false on three of the four legs — and was already false before this window. I verified the two decisive cases from tagged sources myself rather than relaying them:
GOOSE_MAX_TURNS, default 1000 — but "goose stops and prompts… If the user answers in the affirmative, goose continues", a soft cap that pauses for a humanmodel.disableLoopDetectiondefaultfalse— loop detection on by default, present in its 0.50.0 docs and dialogued in its changelog at v0.6.0, 2025-09-15 (wrong by over a year)/goal [objective]| Give the agent a long-lived objective to work towards until it's fully complete. Rolling out." plus an undocumented step limit--validator-model), a per-feature retry limit, and "Rate-capped | The automation already started 10 runs this hour"/goaland a "realbudget-limitedstop" that are not in its headless flag set (read fromcodex-rs/exec/src/cli.rs). ✅ What survives is narrower and more interesting: a hard dollar ceiling remains unique to Anthropic, and the peer caps are soft or off by default — so the differentiator is not "we have caps", it is that the stop must be hard and live in the harness.Other findings worth your time
/loopships none of the three hard stops; its only bound is a seven-day wall clock — ~2,000 iterations at/loop 5m, no dollar ceiling. Self-paced mode lets the worker declare itself done./loop"running an extra time… after.claude/scheduled_tasks.jsonwas deleted" — deleting the state that bounds the loop produced more iterations./goal's evaluator. It is the first Anthropic model "priced by prompt length" and the only one excluded from flat-rate long context, and "a request over the threshold pays the higher prices even when part of its prompt is a cache hit." It is whathaikuresolves to on the Anthropic API, and the evaluator sees "the condition and the conversation so far" every turn — so it crosses the cliff exactly in the long runs a loop is for. Mechanism High on three first-party pages; the consequence is my inference (Medium-High) and wants a real measurement.arXiv:2610.07639; n = 2,500 trials, 81,155 tool calls). Its recommendation — "test alternative execution paths to protected operations" — restates the openself-edit-guardwrite-path question as a benchmarked practice.PreToolUse/auto-mode bypass. This answers the standing "can a mod load beforesec-default?" question in a stronger form than it was asked.arXiv:2610.09264attacks "community-shared rule files (e.g., AGENTS.md or .cursorrules)" to substitute dependencies — exactly this repo's shape. Conversely, the KB's "nothing has shipped for Claude Code under this heading" is now too strong: the Routines docs carry explicit provenance text.arXiv:2610.11464, which also finds downstream task score cannot certify a self-evolved verifier — a collapsed always-pass grader trains just as well).arXiv:2610.09239says why it must not be tiny: 13–20 points of inflation with 16 selection items, 1–5 with 256.max_budget = 0as unlimited onmainand v1.105.0 shipped Oct 11 carrying the bug; ✅ AgentGuard47 v2.0.0 ships "agentguard hook claude-code", a drop-in stall detector plus iteration cap for this repo's own harness; Google's spend-cap quote no longer exists on the page; AWS's graduated controls are opt-in with Bedrock only at the ~4-day tier; ✅ the Bedrock cell is filled from a first-party source that documents no cap at all; andrun.shalready does.temporalio/pi-temporal(first commit Oct 6) — a 200-step runaway cap plus opt-in token/time budgets, no dollar ceiling, no no-progress detection — and its source draws a distinction the KB needed: "The heartbeat finds a dead Worker in 30 seconds. It comes from a timer, not from progress." Gas City shipped a fail-fast arm but ships stall detection disabled by default. ✅ Loom's description is retired as unsupported.Verification method
id_listcall (HTTP 200): 62/62 resolved, zero unresolved, zero hallucinated, 55 in-window, each checked for ID ↔ exact title ↔ v1published↔ primary category ↔ author count. The three most load-bearing abstracts were read in full and every quote matched verbatim.2609.27871's v1 is 20 August).espi/loops, and neither agent calledadd_repoon third-party repos the user never asked for. PR state for LiteLLM is therefore Medium (HTML page), while its source read is High.Pruning and the size budget
The primer held inside its 750-line budget at 748. That required moving four blocks of older per-paper detail to
archive/primer-detail-2026-09.mdverbatim and condensing the per-vendor enforcement inventory to synthesis plus a pointer, per step 5 — every claim removed from the primer is still carried, with its source and confidence, insources.md. Thirteen backlog items resolved and archived.Per step 2, the full standing backlog, not only what is new. Fifty-two opened this pass, thirteen archived.
Security (14) — 🔴 NEW the in-loop check needs a provenance clause; 🔴 NEW a metered verifier's ceiling is a kill-switch; NEW scanning source is not admission control / popularity is not provenance; NEW discount skill-injection ASRs that presuppose selection; NEW adopt⚠️
onFailure: "block"; GitSpawnultrareview(7th pass, unconfirmed — andfsmonitorappears zero times in all 418 versions, so changelog grepping cannot resolve it); does the PR-review gate bind what the reviewer sees to what merges?; is every write path to a protected region covered byself-edit-guard? (now a benchmarked practice); vendor artifact for 2609.01222; does X-CPE reach this repo'sknowledge/? (now with a named attack artifact); adopt PROCTOR canaries / hash-pinning / provisional-persistent split / annealed edit budget?;--restrictedis not an OS sandbox; per-edit gates don't compose (now with a published remedy); a command-prefix allowlist is not a sandbox.Guardrails (29) — 🔴 NEW the
claude/prefix is a default, not enforcement; 🔴 NEW the Routine caps are hourly and wait rather than reject; NEW three ways a routine can appear to run and do nothing; NEW hard stop #1's fourth leak and/goal's resume reset; NEW the meter erred both ways; NEW setRETRY_WATCHDOG_MAX_WAIT_MS(per-request, unset = unbounded); NEW an aborted call is still billed; NEW/loopships none of the three stops; NEW Haiku 5.5's cliff on the/goalevaluator (wants a measurement); NEW Google's stale quote + a launch-stage disagreement between its own two surfaces; NEW AWS's opt-in graduated controls; NEWx-should-retryas the durable budget signal; NEW Managed Agents' three enforcement boundaries; NEW task budgets unsupported on Claude Code + a too-small budget causing refusal-like behaviour; NEW AgentGuard's Claude Code hook + the 90-day price-table gate; NEW an available stall policy is not an engaged one / a heartbeat is not a progress detector / a better detector shape; NEW classify failures to short-circuit the cap; NEW a deterministic ceiling on a replay substrate; plus the carried-forward set — fixed caps vs progress-authorized continuation + context growth; verify an injected guardrail reached the model; zero-valued ceilings (LiteLLM still not fixed, now shipped in v1.105.0); the LiteLLM fail-open family; Anthropic's undelivered spend controls (now a weaker negative-by-absence); Google Spend Caps GA; OpenRouter's cost endpoint; a per-run budget is not a campaign ceiling (second first-party instance found); AWS's destructive tail; OpenRouter's zero-budget semantics (half resolved); the budget status-code table.Tooling (15) — 🔴 NEW the peer-harness matrix correction; NEW the Codex row is overstated; NEW Gemini's
maxSessionTurnsdoc ambiguity; NEW three peers are version- but not date-trackable here; NEW opencode's v2.0.x explained (dates still open); NEW three MCP standards corrections + track the satellite repos; NEW the Agent Skills governance asymmetry; NEWplugin eval's plan-usage path still uninstrumented (cost-ceiling half resolved); NEWplugin eval'sllmjudge reads the maker's trace; NEW the MCP metadata budget grew 2×/8×; NEW URL and naming hygiene (docs.claude.com301s; Qodo 3.0); NEW AG2 v1.2.0 tagged but unreleased + Agent Router's unreleased quota work; plus the 1 GB tool-results cap (5th pass);SKILL.mdcross-tool execution; the/loopand/goalversion-minimum human call.Research / infrastructure (37) — 🔴 NEW the window sweep misses older work + three unread high-value papers; NEW the YYMM trap in reverse + the arXiv 429 fallback; NEW shallow-clone date fabrication + GitHub topic-page strings; NEW the ghuntley.com byline skew + the feed-regeneration trap on a second domain; NEW stop citing an aggregate skill count + the SkillsBench rule; NEW skill utility is configuration-dependent (an
artifact-audittrigger); NEW the Mandiant distortion watch; NEW annotate the two $6,000 figures; NEW blacklist additions + the per-claim nuance; NEW the unpromoted Cherny lead; NEW dated tripwires (Gartner Oct 19–22; Haiku 4.5 retires "not sooner than Oct 15" — three days after this window, and it is the/goalevaluator on every non-Anthropic provider); NEW two research-path techniques; NEW Jev corroborated as a classifier; NEW Osmani's.comblog lags Substack; plus the carried-forward set (the x.com note; Osmani's Sep 7 post and his two uncited statistics; Cherny's structural limit; Huntley's recap dating; the YC-hackathon field report; the do-not-cite blacklist; the four recycled dollar anecdotes; the Jun 15 billing split; Microsoft dropping Claude Code; the/goalorigin timeline; the "costliest thing" slogan; the magnitudes-don't-cross-papers rule; Steinberger's permanent coverage gap; roborev's 403s;openai.comPDF primaries; the GitHub access shape).Worth a closer look
CLAUDE.mdexactly today can satisfy it with a test that asserts the bug.kb-sizeshould pass at 748/750;self-edit-guardhas noself-edit:commit to inspect.guardrails/,budget.env,CLAUDE.md,.claude/settings*,runbooks/or the gate was touched — this PR isknowledge/only.🤖 Generated with Claude Code
https://claude.ai/code/session_018wyFXTkape7KkU1fCQcYy9
Generated by Claude Code