Two Clocks, Neither Lying
The night of August 14th, Claude Code was planning me a trip. An eight-day itinerary — not code, just travel planning — running in the VS Code extension against the remote box where my sessions live. Just past midnight my phone buzzed: the turn had finished, and Claude was waiting for me to approve its plan. That buzz was claude-code-notify , a hook I wrote myself so that a long turn, or one…
On August 14th, Claude Code was preparing for a travel itinerary planning session. The user received a notification from the system, stating that the turn had finished and waiting for approval. The notification was sent by a hook the user had created to alert them about long-running or pending turns. As the user inspected the session, they noticed that both the session status and the notification message aligned correctly.
This discrepancy led the user to investigate how a session could be both finished and unfinished simultaneously.
The extension was not frozen or empty; it was continuously displaying old text that had been processed and rendered earlier. The text was outdated when it appeared on the screen, indicating that the session was not empty but rather showing past information. The issue traced back to how the session's progress was being recorded and displayed. The session's process was still running but asleep, consuming minimal resources and not making any network connections or spawning any child processes.
Upon further examination, the user discovered that the session had not received a proper close-out message after completing its task. The CLI (Command Line Interface) had finished producing its question but still believed the session was ongoing, waiting for a response from the user. The JSON logs of the session revealed that the session had ended with a tool call requesting approval for the drafted plan. However, this message was not reflected in the rendered output displayed to the user.
The root cause of the issue was traced to the extension's handling of the streaming data received from the remote provider. The extension consumed the streaming data much slower than it was received, causing a backlog of events to accumulate in a pipe with a limited capacity. As a result, the extension's rendering process became slow and overwhelmed, causing delays in displaying the latest session information.
The approval notification, which was ready to be displayed as soon as the session finished, remained hidden in the render queue, causing a delay of over an hour before it was finally shown on the user's screen.
In summary, the two clocks were not lying; they were simply reading from different sources. The session status showed that the session had finished, while the rendered output displayed by the extension lagged behind due to an issue with the extension's handling of the streaming data. The notification accurately reflected the session's status, confirming that the session had indeed completed its task.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.