Skip to content

[bug] The idle-reap message teaches the user what a session is, then tells them to do something the platform already does by itself #695

Description

@serge-ivo

Two issues (#257, #408) went to real trouble to stop "session" being a word the user has to know. One string undoes both, and it is the last thing a returning user reads.

The string

lib/coding-session-sweeper.ts:120-123:

consthead=`${IDLE_REAP_PREFIX}${idleHours} hours with no activity`;returnengineStopped
? `${head} — the engine process was released. Start a new session to pick the work back up.`
: `${head}, but the engine could not be stopped on your machine — it may still be running. Check it there if you need the process gone.`;

with IDLE_REAP_PREFIX = "Session closed automatically after" (:109).

This is written into coding_timeline as the run's outcome row, so it is the final line of the repo history the console renders when the user comes back. #257's own comment (agents/coder/web/src/CodingTab.tsx:154) says the history exists so "the user must not be shown an empty screen with a 'Start a session' button where their work used to be" — and then the history's last line tells them to start a session.

It is also not true

The user does not need to start anything, and starting a new session is not how they get their work back — the platform reattaches with continuity on the next engagement. Verified 2026-08-17 on instance bd43f4de: POST /v1/instances/:id/coding/sessions after this exact reap returned "resumed": true with resumeFrom pointing at the reaped session, and the engine recalled its previous closing question verbatim.

So the sentence teaches a concept the user should never have needed, in order to instruct an action the platform performs by itself, using a word ("new") that describes the opposite of what happens.

Owner report, 2026-08-17

"I just tried to ask it to continue, but it said the session has ended and all output pane is gone."

and then:

"why do users have to know about sessions? why can't it just be seamless?"

The reap message is, as far as I can trace, where that knowledge came from.

Fix

The reap itself is correct and should stay — IDLE_SESSION_MS is 6h (:63) and its header explains it is deliberately set below one night so an abandoned tab does not hold a child process on someone's laptop until morning. That is a good decision about a real cost.

What changes is that the reap stops being an announcement:

  • Drop the instruction entirely. The user has nothing to do.
  • Prefer sleep vocabulary to death vocabulary, or emit no user-visible row at all and let the history simply continue at the next turn. "Asleep" is what actually happened; the work is intact.
  • The second branch (engine could not be stopped) IS worth telling a human — a stray process on their machine is their problem to know about. Keep that one, minus the session noun.

Related: #697, which is the sentence that should be there instead — resolveSessionContinuity already returns "the previous conversation on this repo was last touched 11 hours ago" and nothing displays it.

Grep for the noun elsewhere before closing: any user-facing string containing "session" in the coding surface is in scope, not just this one.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    backendBackend / Worker / API workbugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions