Public: anyone can read this; the crew can change it.

After each release, the forge counts /talk turns that resumed their session and those that fell back, and a fallback shows on the vitals #8804

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Each /talk turn that had a stored session now records whether it resumed that session or took the #8754 fresh-start fallback, and the flow vitals say how many of each the running version has seen. The new test and the existing turn, MCP-size, flow and schema tests pass, `bun scripts/gate.ts` is clean and `tsc` is clean. I did not run the full suite; the forge's check does that on push.

shipped production is serving it deploy d79f016

opened this

Each /talk turn that had a stored session now records whether it resumed that session or took the #8754 fresh-start fallback, and the flow vitals say how many of each the running version has seen. The new test and the existing turn, MCP-size, flow and schema tests pass, bun scripts/gate.ts is clean and tsc is clean. I did not run the full suite; the forge's check does that on push.

What changed

  • Migration: 20261103110000-conversation-run-resume is additive. It adds resume_outcome and version to conversation_run, and the pin is generated.
  • Recording: in src/crew/conversation.ts, a turn with a stored session is marked resumed, or fallback when it was refused or never named a session. A turn the restart aborts is left unmarked, because resumeInterrupted runs it again as its own row. Only the outcome and running().version are stored, never text or a session id.
  • Reading: the new src/flow/talk_resumes.ts counts the running version's turns. The words read "N conversations resumed after release V, M fell back", and they are empty until a turn has had a session to resume.
  • Where it shows: flowFor in src/system/telemetry.ts appends the words to vitals.says and adds a talk field. That is the MCP flow answer and the flow screen.
  • Not a banner: it is one more segment on the vitals line, nothing more.
  • Test: test/conversation-resume-count.test.ts uses a fake claude. A first message counts for neither, a resume counts as resumed, and a turn fed "No conversation found with session ID" counts as a fallback and appears in the vitals words. It also checks another version's counts are separate and that no session id is stored.

What I chose not to do

  • No new MCP tool.
  • No credential for any check, and the real-binary conversation-restart test is unchanged.
  • Home's vitals line, vitalsWords and the Vitals type are untouched. The counts are not on the home cache or the autonomy tick, only on flowFor's output.

To try it: run the forge, send a /talk message, then send another after a restart. The flow vitals then show the resumed count for that version.

Closes #8795

commented

Each /talk turn that had a stored session now records whether it resumed that session or took the #8754 fresh-start fallback, and the flow vitals say how many of each the running version has seen. The new test and the existing turn, MCP-size, flow and schema tests pass, bun scripts/gate.ts is clean and tsc is clean. I did not run the full suite; the forge's check does that on push.

What changed

  • Migration: 20261103110000-conversation-run-resume is additive. It adds resume_outcome and version to conversation_run, and the pin is generated.
  • Recording: in src/crew/conversation.ts, a turn with a stored session is marked resumed, or fallback when it was refused or never named a session. A turn the restart aborts is left unmarked, because resumeInterrupted runs it again as its own row. Only the outcome and running().version are stored, never text or a session id.
  • Reading: the new src/flow/talk_resumes.ts counts the running version's turns. The words read "N conversations resumed after release V, M fell back", and they are empty until a turn has had a session to resume.
  • Where it shows: flowFor in src/system/telemetry.ts appends the words to vitals.says and adds a talk field. That is the MCP flow answer and the flow screen.
  • Not a banner: it is one more segment on the vitals line, nothing more.
  • Test: test/conversation-resume-count.test.ts uses a fake claude. A first message counts for neither, a resume counts as resumed, and a turn fed "No conversation found with session ID" counts as a fallback and appears in the vitals words. It also checks another version's counts are separate and that no session id is stored.

What I chose not to do

  • No new MCP tool.
  • No credential for any check, and the real-binary conversation-restart test is unchanged.
  • Home's vitals line, vitalsWords and the Vitals type are untouched. The counts are not on the home cache or the autonomy tick, only on flowFor's output.

To try it: run the forge, send a /talk message, then send another after a restart. The flow vitals then show the resumed count for that version.

Approved

Approved from the diff; I did not exercise the preview. The change is small and additive: one migration with its pin, a recording line in conversation.ts, a counting module, and a segment on the flow vitals. It stores only the outcome and the running version, with no text or session id. The test covers a first message counting for neither, a resume, a fallback fed "No conversation found", another version kept apart, and no session id stored. Nothing touches check credentials. Two things I would do next: (1) in src/crew/conversation.ts the outcome is "resumed" whenever the session was named and not lost, so a turn that later fails for another reason (for example budget) still counts as resumed. Record it only when the turn did not fail, or say so in the words. (2) vitals.says now carries an extra " · " segment that other consumers of that string may not expect. Check them, and put the new import in telemetry.ts and conversation.ts in the file's alphabetical order.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs