Skip to content

Fix live CI voice reliability and email freshness - #38

Open
dimavrem22 wants to merge 18 commits into
mainfrom
fix/full-stack-ci-reliability
Open

dimavrem22 wants to merge 18 commits into
mainfrom
fix/full-stack-ci-reliability

Conversation

@dimavrem22

@dimavrem22 dimavrem22 commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Executive Summary

Bump 0.2.14 → 0.2.15, fix runtime SMS reconciliation and voice-driver failures, and strengthen live-test integrity. Real callers now request outcomes naturally, without tool names, action schemas, or internal execution instructions. Earlier scripted passes are invalidated; natural-input acceptance is 0/2 until two fresh complete workflows pass.

Description

Runtime / product fixes

  1. A noisy transcript overrode a correctly saved exact SMS body. Prefer the explicit body in an open action over incidental speech-transcription variants during normal, correction, and recovered reconciliation. Later clear corrections/cancellations remain authoritative; never resend an accepted message merely to correct wording. Proof: read-only CI evidence showed the wrong SMS matched a noisy transcript rather than the saved body; initial/correction/recovery regressions fail the previous prompt and preserve recipient and replay protection.

  2. Spelled-out SMS initialisms were rejected. Normalize S M S, S.M.S., and S-M-S before runtime clause parsing; the independent live oracle recognizes the same semantics. Proof: six positive regressions failed before the fix; near-miss letters, missing intent/timing, and runtime negation remain rejected. This parser gap was not the cause of the separate marker-only saved-action failure.

  3. A late first A2A turn could complete a resumed task with its old question. Honor the exact turn's durable reply fence before automatic fallback completion; do not rely on a mutable context object shared across independently hosted tools. Proof: natural live multi-turn input reached completed with another question instead of the requested answer; a separate-context, real-state-file regression reproduces the stale completion before the fix and verifies the new unfenced caller turn still completes exactly once.

Harness reliability and integrity fixes

  1. A fixed speech timer could interrupt the peer greeting. Wait for bounded peer silence, tracking partial and final speech while preserving hangup ownership. Proof: actual-driver fake-clock regressions cover long greetings, silence, and continuously speaking peers.
  2. Empty transcript frames incorrectly prolonged the quiet gate. Only nonempty speech updates activity. Proof: actual-driver empty/whitespace partial/final-frame regressions fail the previous behavior.
  3. Long requests could be queued again before finishing playback. Apply a request-length-aware retry floor without changing total deadlines or retry-count limits. Proof: the previous driver queues an 80-word request at 20 seconds; regressions require playback allowance and continued peer silence.
  4. A caller-readiness substring could accept only one call leg; ordinary agent speech did not prove the requested readback. Require structured readiness for both caller recordings, plus the marker in both persisted AUT speech and driver-received speech. Proof: one-sided caller and one-sided readback cases fail; greetings alone cannot pass. The driver's stop-retrying matcher now also preserves word boundaries: four before-fix regressions showed merged or longer words falsely suppressed retries, and seven actual-driver cases retain valid case/punctuation tolerance without phonetic aliases.
  5. Real-model caller inputs prescribed internal implementation steps. Remove action/title/details/tool coaching from hosted speech and call-placement requests, and remove named A2A tools from three delegation/dialogue requests. The caller now asks for one exact SMS after hangup and a spoken readback. Proof: actual-workflow checks reject internal coaching; natural task requests retain protocol and durable-action assertions. This corrects preexisting coaching and coaching retained/reworked during this branch. Earlier scripted green runs are explicitly not accepted as natural behavior. Nothing was moved into scenario-specific system instructions. The first natural run delivered the complete request but repeatedly substituted its first body word; comma-separated spoken articulation now adds pauses without changing the machine marker or accepting incorrect words. This is a harness articulation change, not proof that natural action recording already passes.
  6. SMS settlement could accept extra prose, hide wrong-body/wrong-recipient duplicates, or count an in-call send. Inspect every fresh outbound SMS across all recipients and SDK pages; require exactly one accepted row, only the intended recipient, exactly the requested word sequence, a send timestamp at/after the persisted call end, and the successful journal's provider message ID. Recheck after the existing duplicate grace period. Proof: extra prose, merged/reordered words, wrong/extra recipients, extra messages, missing/wrong journal IDs, and pre-hangup timestamps fail. Published-SDK pagination coverage includes 201 rows, an off-target row beyond page one, a fixed inclusive lower bound, and snapshot-stable upper bounds.
  7. A2A completion tokens could be found in the caller's own history. Require the actual final agent answer, not combined caller/agent history. Proof: the original inbound single/multi scenarios accepted wrong agent answers when caller messages carried the tokens; executable scenario regressions now reject them. Terminal states, input-required transitions, outer-task-open checks, and real remote-worker handshakes remain required.
  8. Email baselines stopped at 30 IDs while polls searched older history. Fully paginate one recent inclusive window frozen before baseline/send and reuse its boundary for every poll. Proof: the published SDK reproduced acceptance of a stale row beyond the old cap; regressions cover 65 baseline rows, nine page requests, and a delayed reply after ten minutes without moving the lower bound.
  9. Generic confirmations, inherited subjects, or truncated snippets could satisfy email proof. Require the current nonce in response content and fetch the full message body for final assertions: the real reply must contain exactly the requested confirmation and nonce, optionally followed by the single exact standard mail-transport footer, and the mock reply must carry its pipeline token and nonce in its body. Proof: current-run correlation and full-body assertions exclude stale confirmations and subject-only evidence; extra prose, repeated/altered footers, and wrong nonces fail. The optional footer is a legitimate delivery transformation, not model-authored prose.

Release metadata

  1. Reliability changes still carried the previous version. Bump all three canonical package/lock entries to 0.2.15. Proof: build and 30 existing User-Agent/client/contract checks passed; the built runtime reports inkbox-opencode/0.2.15. No dependency versions changed.

Diagnostic-only improvements

  1. Failures did not distinguish clipped speech, missing rows, wrong content, and action syntax. Add content-free counts/booleans for driver activity, barge-in events, call parties, action predicates, marker evidence, and provider-record correlation. These do not make failures pass; barge-in event counts alone do not prove playback cancellation. No raw transcripts, message bodies, identifiers, or gateway logs are published.

Reason

The recurring failures included runtime defects, driver timing problems, and false-positive test paths. Unchanged assertions alone were insufficient when caller speech told the agent how to implement the task. The live scenarios must prove natural requests produce correct customer-visible outcomes and durable state, without internal coaching or historical/caller-supplied evidence satisfying the result.

Decisions

  • Preserve real models, live protocol calls, every full-stack lane, existing deadlines/retry limits, durable open-action proof, and duplicate grace periods.
  • Keep exact word boundaries; do not concatenate words or accept partial/reordered markers.
  • Verify request and readback in both persisted call legs, then verify the complete delivered message, sole recipient, timing, and journal identity.
  • Keep generic product instructions separate from caller tasks; no scenario-specific system-prompt replacement or synthetic action creation.
  • Treat all earlier scripted successes as invalidated acceptance, while preserving their diagnostic metadata. Require two consecutive whole workflows on the final corrected source.

Testing

  • 940 offline tests passed, with typecheck, changed-file lint, and Python syntax checks passing.
  • Before-fix reproductions include stale email acceptance, empty-frame activity, premature retries, initialism parsing, exact-body prompt contracts, and A2A caller-only-token false positives.
  • Natural-input acceptance: 0/2, held for shared call-transport failure on f520203889a7d4e768401a835e9d11e7d773f9ac (version 0.2.15). Queued whole workflow 35434089368 was canceled pending resolution of a shared pre-connect call failure: the correct peer was dialed with an active allow rule, but the outbound call was canceled as busy after two seconds, before audio. No acceptance pass is claimed. Interim 35432687627 exposed the documented mail footer (fixed) and a strict final-agent A2A answer failure (durable-fence race now reproduced and fixed); it also exposed the spoken-word substitution described above and does not count. The interim natural run 35433787880 passed real channels and all five A2A scenarios, including the formerly failing multi-turn case. All three voice modes then failed to obtain the receiving call leg; the run was stopped after collecting those distinct failures. The paused-word natural stimulus has not yet been validated through speech because these calls never connected. It remains prior-revision diagnostic evidence, not acceptance. Two complete workflows on the final corrected source are required.
  • Earlier 35429693227 and 35430673797 were green with internally coached caller speech and are invalidated, not acceptance. Earlier revisions, canceled attempts, and diagnostic-only runs are likewise excluded.
  • No merge or deployment is performed by this validation work.

@dimavrem22
dimavrem22 marked this pull request as ready for review September 19, 2026 02:07
@dimavrem22 dimavrem22 changed the title Wait for greeting silence in live voice tests Fix live CI voice reliability and email freshness Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant