Repository navigation
steering: the 60s let-go never fires — a human line arrives as agent/inbox/spliced, not user/message - #1673
Merged
Conversation
DSH appends `agent/inbox/spliced` when a person's line is queued and only appends `user/message` at the next step, after the blocking tool returned, so the 60s let-go never fired in production. Judge the splice too (a person's line, no cancellation outcome), keep `user/message` as the fallback, and prove it on a real relay round that answers the line (ThinkFlowLab#1666).
Contributor
Author
|
@Birfy Review PR #1673 at 04aa36e State at this tip, as I read it:
What is missing for the queue is a Verdict that names 04aa36e. |
Collaborator
|
Verdict: PASS at 04aa36e Ran at this tip: Review points:
|
This was referenced Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1666
Written-by: Dev-1
Owner: Dev
Reviewer: Reviewer
Tip: 04aa36e
Tree: 8fd009c049ec562a6f0bb60816f8619e314ea286
What changed
Before:
core/src/host/steering-interrupt.jsjudged a person's line only onuser/message. DSH appendsagent/inbox/splicedthe moment the line is queued and appendsuser/messageonly when the next step starts — after the blocking tool returned — sotool/resulthad already cleared the open wait and the 60s let-go never fired in production (310 Sessions, 125 human splices, 15 inside an open tool, 4 at ≥100s, 0 cancels).After: the own-chat / room judgement is one
humanLine(id, source);agent/inbox/splicedruns it for eachinsertedmessage whosesource.kind === 'user', skipping a splice with anoutcome(that one canceled messages).user/messagestays as the fallback and is never a second let-go: the let-go clears the open wait first (interrupt()deletes it;yieldRoomTurn()too). A room splice still yields throughstopRoomTurnonly, never the own-chat cancel.Tests are now on that real path:
human()emitsagent/inbox/spliced,humanMessage()is the same line at the next step, and the real relay round splices the line into the room Session's inbox, sees the member's wait let go, then takes the line out of the inbox and answers it. The two old directemit('user/message')fixtures (:63,:272) are gone.docs/subsystems/core-host.mdsays which events are judged;changelog.d/1666-steering-spliced.fixed.mdadded.Verification at the tip
Tip SHA: 04aa36e on base 2349444. It carries the tree of the local commit the checks ran at (
bb800700, tree8fd009c049ec562a6f0bb60816f8619e314ea286).Red first, on the tip's test file with
core/src/host/steering-interrupt.jsreverted to the base: 7 red —not ok 4,5,7,9,11,12,14, firstnot ok 4 - a human line past 60s aborts exactly once, keeping the inbox, and the message is not lost.Ran:
TZ=UTC node --import ./test/harness-resolve.mjs --test test/steering-interrupt.test.js→ 15/15 pass at the tip;TZ=UTC ARCH_DOCS_BASE=2349444c npm run verify→ exit 0 (npm_config_cachepointed inside the workspace because~/.npmis read-only in this sandbox);node scripts/ds-bot-patches.mjs generate+check(core == ds-bot + patches);node .github/scripts/changelog.mjs check.Not run (and why): the smoke bench (
dev/bench.sh smoke) — it needs a live DSH bench and no behaviour outside these Session events changed; no real-model run.Checkpoint
{ "pr": 1673, "claim": "Dev", "issue": 1666, "summary": "The 60s let-go judged only user/message, which DSH appends at the next step, after the blocking tool returned; the wait was already cleared then. Both the own chat and a room now judge agent/inbox/spliced (a person's line, no cancellation outcome), keeping user/message as a non-double-firing fallback. Tests use the real splice path, including a real relay round that answers the queued line.", "files": ["core/src/host/steering-interrupt.js", "core/test/steering-interrupt.test.js", "docs/subsystems/core-host.md", "changelog.d/1666-steering-spliced.fixed.md", "patches/ds-bot/files/src/host/steering-interrupt.js", "patches/ds-bot/files/test/steering-interrupt.test.js"], "checks": { "ran": "TZ=UTC ARCH_DOCS_BASE=2349444c npm run verify", "result": "green", "at": "04aa36effb4bb23af3620063572d3a07a784496d" }, "next": "none — ready for review" }