Bound native inference lost-ack recovery and honor interactive deadlines #645

Open
toasterson wants to merge 2 commits from fix/odin-inference-lost-ack-20261015 into main
Owner

Odin's interactive native turn waited 1,800 seconds after an I/O failure and repeated request lookup 404s, then surfaced an operational failure as a completion-contract refusal. Native submission now reconciles the exact ID and retries only the identical payload, at most three times within a 30s recovery window, using the existing runtime's durable ID deduplication. Missing/unreachable jobs fail promptly and retain receipts.

Pass the resolved turn/profile deadline into blocking native calls, use a 300s native default, and permit a rolling 30s extension only for newly observed runtime text/reasoning. Local polling/dots and replayed events do not extend it. Native failures and timeouts return proper ACP JSON-RPC errors; explicit cancellation and genuine contract refusal remain distinct. Add a bounded identity-aware _akh/inference/health probe and verified private-CA TLS support.

Includes regression tests for missing and admitted lost acknowledgements, retry payload identity/bounds, deadlines, streaming extensions, RPC error mapping, and TLS trust/SAN verification. Includes a read-only-by-default armini cutover script with planner tests and main-binary/probe/quiescence guards. The incident report documents evidence, rollout, rollback and remaining gates.

Companion Talos PR: https://github.com/Toasterson/talos/pull/207 replaces inference port-forwards with per-Akh private Cilium TLS LoadBalancers using existing credentials. Neither PR is merged; no host/cluster rollout or historical-request replay was performed. Deploy only a verified merged-main binary.

Validation: seven native backend tests; 62 agent-loop tests (one ignored); ACP operational-error regression; two archived-request dedup/conflict regressions; two Python cutover planner tests; production cargo check --locked --lib --features server; cargo fmt and git diff --check. A broader native test filter hit an unrelated native-audio fixture socket WouldBlock; its isolated rerun passed. Exact-head CI/review and post-merge live pilot acceptance remain separate gates.

Odin's interactive native turn waited 1,800 seconds after an I/O failure and repeated request lookup 404s, then surfaced an operational failure as a completion-contract refusal. Native submission now reconciles the exact ID and retries only the identical payload, at most three times within a 30s recovery window, using the existing runtime's durable ID deduplication. Missing/unreachable jobs fail promptly and retain receipts. Pass the resolved turn/profile deadline into blocking native calls, use a 300s native default, and permit a rolling 30s extension only for newly observed runtime text/reasoning. Local polling/dots and replayed events do not extend it. Native failures and timeouts return proper ACP JSON-RPC errors; explicit cancellation and genuine contract refusal remain distinct. Add a bounded identity-aware _akh/inference/health probe and verified private-CA TLS support. Includes regression tests for missing and admitted lost acknowledgements, retry payload identity/bounds, deadlines, streaming extensions, RPC error mapping, and TLS trust/SAN verification. Includes a read-only-by-default armini cutover script with planner tests and main-binary/probe/quiescence guards. The incident report documents evidence, rollout, rollback and remaining gates. Companion Talos PR: https://github.com/Toasterson/talos/pull/207 replaces inference port-forwards with per-Akh private Cilium TLS LoadBalancers using existing credentials. Neither PR is merged; no host/cluster rollout or historical-request replay was performed. Deploy only a verified merged-main binary. Validation: seven native backend tests; 62 agent-loop tests (one ignored); ACP operational-error regression; two archived-request dedup/conflict regressions; two Python cutover planner tests; production cargo check --locked --lib --features server; cargo fmt and git diff --check. A broader native test filter hit an unrelated native-audio fixture socket WouldBlock; its isolated rerun passed. Exact-head CI/review and post-merge live pilot acceptance remain separate gates.
Bound native inference recovery and interactive deadlines
Some checks failed
CI / docker-seshd (pull_request) Has been cancelled
CI / docker-sokard (pull_request) Has been cancelled
CI / docker-akh-transcripts (pull_request) Has been cancelled
CI / publish-chart (pull_request) Has been cancelled
CI / platform-images-home (pull_request) Has been cancelled
CI / platform-images-core (pull_request) Has been cancelled
CI / platform-images-daemons (pull_request) Has been cancelled
CI / platform-images-fleet (pull_request) Has been cancelled
CI / platform-images-collect (pull_request) Has been cancelled
CI / test-akh-medu (pull_request) Has been cancelled
CI / check-akh-medu (pull_request) Has been cancelled
CI / check-seshat (pull_request) Has been cancelled
CI / test-session-platform (pull_request) Has been cancelled
CI / test-sokar (pull_request) Has been cancelled
c4575997e9
Record companion incident pull request links
All checks were successful
CI / check-akh-medu (pull_request) Successful in 6m38s
CI / check-seshat (pull_request) Successful in 10m15s
CI / docker-seshd (pull_request) Successful in 6m51s
CI / publish-chart (pull_request) Successful in 51s
CI / test-sokar (pull_request) Successful in 20m20s
CI / docker-sokard (pull_request) Successful in 13m25s
CI / docker-akh-transcripts (pull_request) Successful in 13m33s
CI / test-akh-medu (pull_request) Successful in 25m11s
CI / test-session-platform (pull_request) Successful in 36m34s
CI / platform-images-home (pull_request) Successful in 1m11s
CI / platform-images-daemons (pull_request) Successful in 1m22s
CI / platform-images-core (pull_request) Successful in 1m30s
CI / platform-images-fleet (pull_request) Successful in 1m1s
CI / platform-images-collect (pull_request) Successful in 1m1s
58d0ca7d5d
All checks were successful
CI / check-akh-medu (pull_request) Successful in 6m38s
CI / check-seshat (pull_request) Successful in 10m15s
CI / docker-seshd (pull_request) Successful in 6m51s
CI / publish-chart (pull_request) Successful in 51s
CI / test-sokar (pull_request) Successful in 20m20s
CI / docker-sokard (pull_request) Successful in 13m25s
CI / docker-akh-transcripts (pull_request) Successful in 13m33s
CI / test-akh-medu (pull_request) Successful in 25m11s
CI / test-session-platform (pull_request) Successful in 36m34s
CI / platform-images-home (pull_request) Successful in 1m11s
CI / platform-images-daemons (pull_request) Successful in 1m22s
CI / platform-images-core (pull_request) Successful in 1m30s
CI / platform-images-fleet (pull_request) Successful in 1m1s
CI / platform-images-collect (pull_request) Successful in 1m1s
This pull request has changes conflicting with the target branch.
  • .forgejo/workflows/ci.yml
  • src/agent/chat_backend.rs
  • src/agent/native_backend.rs
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/odin-inference-lost-ack-20261015:fix/odin-inference-lost-ack-20261015
git switch fix/odin-inference-lost-ack-20261015

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff fix/odin-inference-lost-ack-20261015
git switch fix/odin-inference-lost-ack-20261015
git rebase main
git switch main
git merge --ff-only fix/odin-inference-lost-ack-20261015
git switch fix/odin-inference-lost-ack-20261015
git rebase main
git switch main
git merge --no-ff fix/odin-inference-lost-ack-20261015
git switch main
git merge --squash fix/odin-inference-lost-ack-20261015
git switch main
git merge --ff-only fix/odin-inference-lost-ack-20261015
git switch main
git merge fix/odin-inference-lost-ack-20261015
git push origin main
Sign in to join this conversation.
No reviewers
No labels
follow-up
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
toasterson/akh-medu!645
No description provided.