Stop naming an expiry a coder session cannot have

f63a651ddd7b · AtlantisPleb · · parent 47bfbc2dc617

Stop naming an expiry a coder session cannot have

The proxy's `grant_expired` refusal was rendered as "This thread's authority
expired. Start a new session to open another." A thread's grant no longer
carries a deadline (openagents.com 5d6f30c), so a coder session cannot reach
that sentence by waiting, and naming a clock to a reader who has not run into
one explains nothing.

It says the authority is no longer live, which is what the code means wherever
it still arrives, and keeps the part the reader can act on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012TRDRrfL1khQhQtNr3SRrA
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified packages/openagents-cli/src/coder-thread.ts

Diff

1 file changed, +6 -2

packages/openagents-cli/src/coder-thread.ts modified +6 -2

@@ -16,7 +16,7 @@

16 16
 * keeps the provider credential on the server, so the CLI still holds no
17 17
 * provider key. `DELETE /api/v3/threads/{id}` revokes the thread on exit, which
18 18
 * matters because an account may hold only eight open threads at once and a
19
 * closed terminal would otherwise hold a slot until the authority expired.
19
 * closed terminal would otherwise hold a slot until its authority was spent.
20 20
 *
21 21
 * Three properties of that proxy shape this file, and each is a real loss
22 22
 * against the event log this replaces:

@@ -1000,7 +1000,11 @@ async function proxyRefusal(response: Response): Promise<ThreadUnavailable> {

1000 1000
1001 1001
  const sentences: Record<string, string> = {
1002 1002
    grant_revoked: "This thread was revoked. Start a new session to open another.",
1003
    grant_expired: "This thread's authority expired. Start a new session to open another.",
1003
    // Not a sentence about a clock. A thread's authority has no deadline —
1004
    // this reaches a caller only where the deployment minted one that does,
1005
    // and it says what the reader can act on rather than naming an expiry a
1006
    // coder session cannot have.
1007
    grant_expired: "This thread's authority is no longer live. Start a new session to open another.",
1004 1008
    grant_exhausted: "This thread spent its budget. Start a new session to open another.",
1005 1009
    grant_budget_reached: "This thread reached its budget ceiling and cannot buy another call.",
1006 1010
    invalid_grant: "The inference proxy did not recognize this thread's grant.",

This page updates live while a promote is in flight · changelog