fix(herdr): confirm busy-Pi steering-queue delivery instead of false pending verdict - #12
Merged
Merged
Conversation
An ordinary instruction sent to a Pi agent that was already responding was accepted into Pi's steering queue and acted on, but fm-send reported it as unsubmitted and exited nonzero. A busy baseline could only fall back to composer clearance, and a busy Pi's composer is cleared by the very submission being confirmed, so nothing on that path could observe the delivery. A busy Pi submit is now confirmed from Pi's own queued-input rows, bound to the current send by a new matching entry so an older identical row cannot create false success. Input that Pi consumes while busy without queueing it reports the new busy-unqueued verdict, and fm-send turns that into an actionable retry-when-idle failure instead of claiming delivery. The rule is transport-generic: no command name or harness message is inspected. Real unsubmitted composer text still reports pending, unreadable panes still report unknown, and the idle Pi path plus every non-Pi busy path are unchanged. The message is still typed exactly once.
…lit and inject log
This was referenced Aug 7, 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.
Problem
fm-sendfalsely reporteddelivery unconfirmed; verdict=pendingwhen delivering an ordinary instruction to a Pi agent that was already generating a response under the Herdr runtime, even though Pi had accepted the text into its visibleSteering:queue and later acted on it.Fix
bin/backends/herdr.sh:fm_backend_herdr_send_text_submitnow confirms a busy Pi agent's steering-queue acceptance as a successful delivery, bound to the current send (queue key derived from the first line) so a staleSteering:transcript line cannot create false success. A busy Pi/reloadrejection is reported as an accurate retry-when-idle outcome rather than a false success. Ambiguous/unreadable panes and real unsubmitted composer text retain conservative non-success behavior.bin/fm-send.sh: propagates the busy-Pi queued-delivery confirmation.Tests
Added focused regression coverage in
tests/fm-backend-herdr.test.shfor busy accepted steering, busy rejected/reload, stale steering evidence, idle submission baseline, ambiguous panes, non-Pi fallback, and duplicate prevention.Local verification (c8dca18)
tests/fm-backend-herdr.test.sh— greentests/fm-send-strict.test.sh,fm-send-settle,fm-send-popup-settle,fm-composer-lib— greentests/fm-documentation-audiences.test.sh— greenbin/fm-lint.sh— exits clean (ShellCheck not installed in this environment; full CI-parity lint not run locally)Docs
Updated
docs/herdr-backend.md,docs/architecture.md,docs/configuration.md, and the harness-adapters/afk skills to describe the corrected busy-Pi submit-confirmation contract.