ci(release): block publication on agent-server stress regressions - #4595
ci(release): block publication on agent-server stress regressions#4595chrischen-coder wants to merge 1 commit into
Conversation
Add a lifecycle-isolation regression that fails when one stuck conversation close globally serializes unrelated create, load, and delete operations. Run the complete stress suite against the exact release merge commit before creating any release artifact. Co-authored-by: openhands <openhands@all-hands.dev>
neubig
left a comment
There was a problem hiding this comment.
Thanks for the submission and for adding a real-path lifecycle-isolation stress test with the existing credential-free fake LLM harness.
Before this PR is satisfactory, please add concrete fail-before/pass-after evidence for every regression named in acceptance criterion 3 of issue #4588. The current description only documents the lifecycle-lock case (#4570/#4514). Please cover:
#4570/#4514: lifecycle lock#4481: blocking event search/listing work#4417: blockingConversationInfocomposition#4473: serialized LLM calls
For each regression, add a short matrix to the PR description or repository documentation identifying:
- The stress test or scenario that detects it.
- The pre-fix commit or revert used.
- The exact command and failure observed on the pre-fix tree.
- The exact command and passing result on current
main.
Running the current stress suite successfully shows that the gate executes, but it does not establish that the suite catches the other historical regressions required by the issue. Once this regression mapping and evidence are included, the acceptance-criteria coverage will be clear.
AI disclosure: This review was generated by an AI agent (OpenHands) on behalf of the requester.
HUMAN:
I authorized this contribution and will take responsibility for reviewing it and responding to maintainer feedback.
AGENT:
Why
The existing stress suite runs on relevant PRs, but release publication does not
depend on it. If a release PR is merged with checks bypassed or against a bad
merge result,
create-release.ymlimmediately creates the tag and GitHub Releaseand dispatches PyPI, image, and binary publication.
That gap is high impact because the regressions this suite targets are
process-wide: before #4570, one conversation stuck in
close()held a globallifecycle lock, so create, load, and delete for every unrelated conversation
wedged even while
/healthremained responsive. A package release can thereforelook healthy and still make the agent server unusable for all active users.
This follows the same principle as production agent harnesses such as
DeepSeek Harness: inject a
controlled failure into the real execution path, assert a deterministic
invariant, and make that invariant a release boundary rather than advisory CI.
Summary
EventService.close()and proves unrelated conversation create/load/deleteoperations still finish within a documented five-second CI budget.
commit before
create-releasecan create any tag or dispatch publication.automated release flow.
Issue Number
Fixes #4588
How to Test
Focused reviewer command:
The equivalent local command executed in this macOS workspace was
.venv/bin/python -m pytestwith the same arguments. Observed:Full reviewer/release-gate command:
The equivalent full local run used
.venv/bin/python -m pytestwith the samearguments. Observed:
Historical fail-before/pass-after proof:
611629e6, the first parent of thefix(agent-server): replace global _lifecycle_lock with per-conversation locks #4570 merge and therefore the last tree with the process-wide lifecycle lock.
Static validation:
All hooks passed, including YAML formatting, Ruff, Pyright, import rules, and
tool registration.
Video/Screenshots
Not applicable. This is a backend lifecycle regression and release workflow;
the direct pass/fail terminal evidence is included above.
Design Doc
Not applicable. The change is test/workflow-only and does not alter a public API
or production runtime behavior.
Type
Notes
unconditional for merged
rel-*PRs and is a hardneedsdependency of thepublication job.
fake LLMs; no paid model credentials or external services are required.
production code changes.