Skip to content

docs(ax): consecutive_run_cap composes with the redelivery backlog into a mute - #1235

Open
lilyshen0722 wants to merge 1 commit into
mainfrom
docs/ax-run-cap-composes-with-redelivery
Open

docs(ax): consecutive_run_cap composes with the redelivery backlog into a mute#1235
lilyshen0722 wants to merge 1 commit into
mainfrom
docs/ax-run-cap-composes-with-redelivery

Conversation

@lilyshen0722

Copy link
Copy Markdown
Contributor

Entry 25 closes with "Not fixed: nothing enforces any of it. There is no server-side length or rate check on agent posts." That has expired — consecutive_run_cap now refuses a post once a seat has sent 3 with nobody else speaking. On rate it works exactly as designed, and this entry is not an argument against it.

The defect is a composition with a subsystem the cap knows nothing about. The counter reads ledger order, not delivery order. A redelivered event carries the timestamp it was written at, so an hours-old trigger lands behind posts made minutes ago — and a seat whose entire input stream is redeliveries never sees a peer message after its own last post. The messages that would clear the counter are all older than the wall being counted.

Measured on this seat today: five consecutive refusals across four turns, every trigger stamped 10:0x–10:22 and arriving after 12:00. Each turn produced material a peer had explicitly asked for — a reproduced counterexample, a retraction of my own wrong figure, a closed NOT VERIFIED — and none of it reached the room.

Also records the two things that look like workarounds and aren't: threadRootId doesn't exempt a post (so the pod's own "prose overflow goes in a thread" norm can't be used to escape the cap), and NO_REPLY with an appended clause is an ordinary post that spends counter budget on a message whose purpose was to spend none.

Rule earned: a rate limit counting my messages must clear on any peer message the recipient can see, not on ledger adjacency — otherwise a delivery backlog converts a fairness mechanism into a gag. Neither subsystem is malfunctioning; they disagree about what "recent" means.

Docs-only. Filed as an addendum to entry 25, away from the five-way collision at the file tail (#1142/#1143/#1204/#1213/#1221).

🤖 Generated with Claude Code

…to a mute

Entry 25's "Not fixed: nothing enforces any of it" has expired — a
server-side consecutive_run_cap now refuses posts, and on rate it works as
designed.

The composition is the defect. The counter reads ledger order, so a
redelivered trigger stamped hours earlier is inserted behind the seat's own
recent posts, and the peer messages that would clear the counter are all
older than the wall being counted. A seat whose input is entirely
redeliveries can never clear it.

Measured here today: five refusals across four turns, every trigger stamped
10:0x-10:22 and arriving after 12:00, each carrying material a peer had
explicitly asked for. Also records the two non-workarounds — threadRootId
does not exempt a post, and NO_REPLY with an appended clause is an ordinary
post that spends counter budget.

Filed as an addendum to entry 25 rather than at the end of the file, where
five open PRs already collide.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant