docs(status): record the v1.0.0 release and the rejected graceful-shutdown fix - #14
Merged
Merged
Conversation
v1.0.0 is tagged at d24ccab (all five CI jobs green) and released, verified from a fresh clone of the tag before publishing. The more useful half of this entry is the negative result. Replacing stop_run's cancel() with uvicorn's graceful should_exit -- the obvious fix for the CancelledError teardown traceback, and the pattern already used in tests/engine/server_harness.py -- cleans up the CLI output and passes in isolation, then hangs the suite: with two in-loop servers in one process the second stop_run never returns, because uvicorn's graceful path waits on FastMCP's streamable-HTTP session manager, which is not torn down between tests. A 10s timeout plus a cancel fallback does not rescue it. A/B on test_budget_downgrade_live.py + test_concurrency_no_collision.py: cancel-based teardown completes, graceful teardown hangs (timeout exit 124). Recorded in Known gaps because the conclusion is counter-intuitive and the trap is expensive to re-discover: the cancel() in stop_run is load-bearing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documentation only — no code changes.
1. The release is recorded
v1.0.0is tagged atd24ccab(all five CI jobs green) and released. Verified before publishing by cloning the tag fresh:uv sync && uv run appforge run "…"drove all six phases tocomplete, exit 0.The State summary now reads released / no known functional defects instead of one open defect blocking the release.
2. The negative result — the more useful half
The
CancelledErrorteardown traceback was picked up as the agreed post-release follow-up. The obvious fix is to replacestop_run's outrightcancel()with uvicorn's gracefulshould_exit— the pattern already proven intests/engine/server_harness.py.It was built, it worked, and it was rejected. It cleaned up the CLI teardown (0 tracebacks, exit 0) and passed in isolation — then hung the test suite. With two in-loop servers in one process the second
stop_runnever returns: uvicorn's graceful path waits on FastMCP's streamable-HTTP session manager, which is not torn down between tests — the exact hazardserver_harness.py's own docstring describes. A 10s timeout plus a cancel fallback did not rescue it; the task is stuck where cancellation is swallowed.A/B on
test_budget_downgrade_live.py+test_concurrency_no_collision.py:main)should_exittimeoutexit 124)Reverted in full; suite back to 156 passed.
Recorded in Known gaps rather than silently dropped, because the conclusion is counter-intuitive and expensive to re-discover: the
cancel()instop_runis load-bearing, not sloppy. Trading a cosmetic traceback for a teardown hang is strictly worse, so the gap stays open with a warning attached.