refactor(qa): use transport-native actions in flow scenarios#97962
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 1, 2026, 6:30 AM ET / 10:30 UTC. Summary PR surface: Source +108, Tests +76, Other -25. Total +159 across 24 files. Reproducibility: not applicable. this is a QA authoring/refactor PR rather than a bug report. The relevant behavior is source-verifiable, and the PR body/comment report the changed scenarios passing through QA Channel and Crabline Telegram. Review metrics: 2 noteworthy metrics.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land this after maintainers accept the QA Lab transport-action contract and decide whether the QA authoring docs should name these YAML-native actions now. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a QA authoring/refactor PR rather than a bug report. The relevant behavior is source-verifiable, and the PR body/comment report the changed scenarios passing through QA Channel and Crabline Telegram. Is this the best way to solve the issue? Yes, conditionally: moving scenario input/output through the transport adapter is a better owner-boundary fit than direct bus calls or a separate conversation DSL. The remaining question is maintainer acceptance of the new QA Lab action/API contract and docs follow-through. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 4076ba0bd9e8. Label changesLabel justifications:
Evidence reviewedPR surface: Source +108, Tests +76, Other -25. Total +159 across 24 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Ran the 15 changed scenarios end to end through both transport paths.
The initial Crabline run exposed one real portability bug in Blacksmith Testbox was blocked before provisioning by GitHub HTTP 429, so the completed proof used local real child gateways and Crabline's local Telegram provider. Artifact paths are recorded in the PR body. |
9a19425 to
80e0773
Compare
80e0773 to
8c05211
Compare
8c05211 to
d584f23
Compare
…w#97962) * Add QA channel scenario driver contracts * Route DM baseline through channel scenario driver * Simplify channel behavior flow runtime helper * test(qa): use native YAML for DM channel scenario * test(qa): add conversation flow action * test(qa): break channel scenario import cycle * test(qa): fix channel scenario lint * Unify QA channel scenario transport adapter * Fix QA transport test type expectations * refactor(qa): use native transport flow actions * test(qa): derive direct reply session from transport
…w#97962) * Add QA channel scenario driver contracts * Route DM baseline through channel scenario driver * Simplify channel behavior flow runtime helper * test(qa): use native YAML for DM channel scenario * test(qa): add conversation flow action * test(qa): break channel scenario import cycle * test(qa): fix channel scenario lint * Unify QA channel scenario transport adapter * Fix QA transport test type expectations * refactor(qa): use native transport flow actions * test(qa): derive direct reply session from transport
…w#97962) * Add QA channel scenario driver contracts * Route DM baseline through channel scenario driver * Simplify channel behavior flow runtime helper * test(qa): use native YAML for DM channel scenario * test(qa): add conversation flow action * test(qa): break channel scenario import cycle * test(qa): fix channel scenario lint * Unify QA channel scenario transport adapter * Fix QA transport test type expectations * refactor(qa): use native transport flow actions * test(qa): derive direct reply session from transport
…w#97962) * Add QA channel scenario driver contracts * Route DM baseline through channel scenario driver * Simplify channel behavior flow runtime helper * test(qa): use native YAML for DM channel scenario * test(qa): add conversation flow action * test(qa): break channel scenario import cycle * test(qa): fix channel scenario lint * Unify QA channel scenario transport adapter * Fix QA transport test type expectations * refactor(qa): use native transport flow actions * test(qa): derive direct reply session from transport
What Problem This Solves
QA flow scenarios injected channel messages by calling low-level bus functions directly. That bypassed the selected transport adapter, so the same scenario could not reliably exercise QA Channel or Crabline through one transport boundary. An attempted universal conversation DSL also added substantial scenario-specific plumbing without matching the existing transport model.
Why This Change Was Made
This replaces the conversation DSL with four YAML-native actions that call
QaTransportAdapterdirectly:resetTransport,sendInbound,waitForOutbound, andwaitForNoOutbound.All 24 direct inbound injections across 15 existing flow scenarios now use
sendInbound. Specialized model, command, UI, and thread assertions remain ordinary flow logic instead of expanding the transport interface. The QA Channel and Crabline adapters implement and test the shared actions.webchat-direct-reply-routingalso derives its transcript session key fromtransport.buildAgentDelivery()instead of hardcoding QA Channel identifiers.Live Telegram, Slack, Discord, and WhatsApp lanes remain separate channel-specific runners today; this PR does not claim that those runners implement
QaTransportAdapteryet.AI-assisted: yes.
User Impact
No end-user runtime behavior changes. QA authors can write transport-native YAML actions once and run the same inbound flow through QA Channel or Crabline without direct bus calls or a separate conversation language.
The change removes the superseded conversation module and tests. The replacement commit contains 465 additions and 1,919 deletions.
Evidence
End-to-end scenario proof
mock-openai: 14/15 passed. The only excluded result wasthinking-slash-model-remap, which correctly requireslive-frontier.live-frontierwithopenai/gpt-5.5:thinking-slash-model-remappassed. Combined result: all 15 changed scenarios passed on QA Channel using their required provider modes.mock-openai: all 9 transport-eligible scenarios passed.live-frontierwithopenai/gpt-5.5:thinking-slash-model-remappassed. Combined result: all 10 portable changed scenarios passed on Crabline Telegram.requiredChannelDriver: qa-channel:group-message-tool-unavailable-fallback,thread-follow-up,thread-memory-isolation,personal-channel-thread-reply, andcontrol-ui-qa-channel-image-roundtrip.Artifacts:
.artifacts/qa-e2e/pr-97962-qa-channel/qa-suite-summary.json.artifacts/qa-e2e/pr-97962-crabline-telegram-eligible/qa-suite-summary.json.artifacts/qa-e2e/pr-97962-thinking-live-qa-channel/qa-suite-summary.json.artifacts/qa-e2e/pr-97962-thinking-live-crabline-telegram/qa-suite-summary.jsonAutomated checks
sendInbound,waitForOutbound, andresetthrough the shared interface.sendInboundreaches the fake provider andwaitForOutboundobserves the provider response through the same interface.oxfmtandoxlintchecks passed.git diff --checkpassed.