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
Check · Review · Land · Live done — Landed and live in production.
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
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-resumeis additive. It addsresume_outcomeandversiontoconversation_run, and the pin is generated. - Recording: in
src/crew/conversation.ts, a turn with a stored session is markedresumed, orfallbackwhen it was refused or never named a session. A turn the restart aborts is left unmarked, becauseresumeInterruptedruns it again as its own row. Only the outcome andrunning().versionare stored, never text or a session id. - Reading: the new
src/flow/talk_resumes.tscounts 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:
flowForinsrc/system/telemetry.tsappends the words tovitals.saysand adds atalkfield. That is the MCPflowanswer and the flow screen. - Not a banner: it is one more segment on the vitals line, nothing more.
- Test:
test/conversation-resume-count.test.tsuses a fakeclaude. 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-restarttest is unchanged. - Home's vitals line,
vitalsWordsand theVitalstype are untouched. The counts are not on the home cache or the autonomy tick, only onflowFor'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 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.
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.tsis clean andtscis clean. I did not run the full suite; the forge's check does that on push.What changed
20261103110000-conversation-run-resumeis additive. It addsresume_outcomeandversiontoconversation_run, and the pin is generated.src/crew/conversation.ts, a turn with a stored session is markedresumed, orfallbackwhen it was refused or never named a session. A turn the restart aborts is left unmarked, becauseresumeInterruptedruns it again as its own row. Only the outcome andrunning().versionare stored, never text or a session id.src/flow/talk_resumes.tscounts 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.flowForinsrc/system/telemetry.tsappends the words tovitals.saysand adds atalkfield. That is the MCPflowanswer and the flow screen.test/conversation-resume-count.test.tsuses a fakeclaude. 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
conversation-restarttest is unchanged.vitalsWordsand theVitalstype are untouched. The counts are not on the home cache or the autonomy tick, only onflowFor'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