Repository navigation
Conversation
create_ingress_receipt read the receipt with the lenient _read_json, which
turns a truncated, non-object or foreign-schema file into {} and so into
"no receipt". A retry of a live-steering ingress whose receipt was damaged
after delivery then recreated a fresh pending receipt (overwriting the
damaged evidence), reported created=True and sent the steering message to the
native turn a second time; the HTTP retry answered not_delivered instead of
unresolved.
Reuse the strict reader behind steering_receipt for the create path so that
only a missing file means absence; any other unreadable receipt raises and the
existing callers report the delivery as unresolved without resending or
rewriting the file.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: duang777 <duangjl007@gmail.com>
Duang777
requested review from
huangruiteng,
loopx-agent and
songoow
as code owners
November 13, 2026 09:45
This branch has not been deployed
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.
Goal And Delivered Outcome
create_ingress_receiptinloopx/chat_ingress.pyread the receipt with the lenient_read_json, which returns{}for a truncated, non-object or unreadable file.steering_receiptright next to it already treated that as an error.client_ingress_idwrote a freshpendingreceipt over it, returnedcreated=Trueand steered the native turn again; the HTTP reply was 409live_steering_turn_mismatch/not_delivered. After: 409live_steering_delivery_unresolved/unresolved, the damaged bytes are left untouched and exactly oneturn/steerreaches the peer. Rows:regression_parity,unit.mainat7bb1b01.Author Declaration
Implemented against
_strict_ingress_receipt,create_ingress_receipt,steering_receiptinloopx/chat_ingress.pytests/test_chat_session_active_turn.py::test_unreadable_ingress_receipt_is_not_recreated_as_absenttests/test_chat_turn_steering.py::test_http_steering_never_resends_after_its_receipt_becomes_unreadableContent-Lengthhandling inchat_server.pyand found nothing provable.Scope And Continuation
update_ingress_receiptandloopx_ingressstill use the lenient reader. Neither produced a harmful outcome in my probes, so they are left alone.Validation
87878a7b2cb66dc5969719fec53e16c0fddde7aafor the diff; local runs used a working tree whose touched files were blob-identical tomain7bb1b01before the change.regression_paritypassed[]and a foreign schema version.unitpassedruff checkclean.OSErrorto the unresolved reply, so the HTTP path is covered by the second test. Lark-side ingress is not touched.Frontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
N/A
Boundary Checklist
.loopx/,.codex/goals/, and liveACTIVE_GOAL_STATE.md).none.Signed-off-bytrailer (git commit -s).🤖 Generated with Claude Code