Skip to content

feat(ag-ui): distinguish run outcomes from HTTP completion - #1163

Merged
blove merged 1 commit into
mainfrom
codex/ag-ui-run-outcomes
Sep 24, 2026
Merged

blove merged 1 commit into
mainfrom
codex/ag-ui-run-outcomes

Conversation

@blove

@blove blove commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

A closed HTTP stream does not establish that an AG-UI run succeeded. The locked SDK also accepts mismatched root identifiers and trailing terminal events, while the supported Python provider represents a pause with CUSTOM on_interrupt followed by RUN_FINISHED.

Add a private run owner over the private HTTP request owner. Each invocation captures caller-assigned identity, admits matching root events, and resolves exactly once to success, pause, interruption, error or abort. It captures terminal evidence before the projection callback, so callback mutation cannot change authority; synchronous local or external cancellation still wins if triggered inside that callback. Every domain terminal closes the physical request, even if the server holds it open.

Native child events remain observations and cannot settle the parent. Child-tagged RUN_* events delivered by the SDK are rejected. Supported SSE tests preserve that distinction; protobuf can erase those tags before the coordinator, so this change makes no guarantee about recovering absent attribution. Public exports, SDK state application, transcripts, tools, dependencies and releases are unchanged.

Validation:

  • 81 private runtime tests (56 new) and 456 legacy AG-UI tests; strict runtime/public types, build and lint (zero errors, existing legacy warnings).
  • Actual HTTP regressions for terminal authority, identity, child attribution, EOF, callback mutation/reentrancy, physical cancellation and independent starts. Retained RED controls cover false success, lost abort, admission errors and omitted synchronous cleanup.
  • 266 focused runtime-config/boundary/inventory policy tests; inventory, source boundaries and release-version checks.
  • Actual deterministic Python provider HTTP success, graph failure and interrupt cases resolve success/error/paused without unhandled rejection.
  • Automated Chromium, Chrome MCP and in-app-browser walkthroughs each cover six outcomes; all 18 requests physically close with no uncaught JavaScript or console errors.
  • Independent compliance and code-quality review.

This is private run authority. Neutral session publication, complete transcript fidelity and public AG-UI/React parity remain separate work.

@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
threadplane Ready Ready Preview Sep 24, 2026 9:59pm UTC

Request Review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: this PR received an intelligent (AI) code review. See the review comments on this PR.

@blove
blove enabled auto-merge (squash) September 24, 2026 21:53
@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove merged commit 938ae9b into main Sep 24, 2026
77 of 78 checks passed

This branch was successfully deployed

1 active deployment
Preview – threadplane — 55bcab20 Deployed Sep 24, 2026 by vercel[bot]
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