Files
m4 d4b53bfb08
Docker / build (push) Has been cancelled
Test / pytest (ubuntu-latest, 3.12) (push) Has been cancelled
Test / pytest (windows-latest, 3.11) (push) Has been cancelled
Test / pytest (windows-latest, 3.12) (push) Has been cancelled
Lint / ruff (push) Has been cancelled
Test / pytest (ubuntu-latest, 3.11) (push) Has been cancelled
Build / build (push) Has been cancelled
test: cover stop contract, execution adapters, checkpointer race and runtime identity
2026-09-13 15:12:17 +08:00

35 lines
2.1 KiB
Markdown

# B04 stop proof evidence
Final run: `/tmp/b04-stop-green4.log`, `3 passed in 0.44s`.
Each new parameter node used 4/5 attempts (ledger alongside this file).
Old writer race and continuation scenarios were not executed.
- cancel: real StateGraph plus native LangChain SubagentTransformer and
controlled FakeListChatModel stream; node finally settled, one terminal,
physical writer rows zero.
- close_error: instance-local graph iterator aclose fails once, then blocks;
repeated wait_stopped returns unknown, stop task remains alive, writer row
remains one; release allows retry, terminal once, writer rows zero.
- slow_commit: real aiosqlite worker operation blocks, its waiting future is
cancelled, operation still executes an INSERT; unknown retains writer;
after release, stop commit barrier makes INSERT visible from a separate
SQLite connection and physical writer rows become zero.
- Default no-registry abort compatibility: `/tmp/b04-stop-default-regression.log`,
`1 passed, 48 deselected in 0.13s`.
No event-stream replacement, global dependency monkeypatch, external network,
business service, PostgreSQL, installation, git commit, or full suite used.
Support is pinned to LangGraph 1.2.6, checkpoint-sqlite 3.0.3, aiosqlite
0.22.1. Adapter retains the graph iterator before dependency abort can discard
it, intercepts cancellation exception args for Pregel exit_task, and waits for
pulls, exits, graph close, mux close and local producers. Database barrier runs
after event generator closure (including exceptional state repair).
Limits: these three runs observed zero *detached* exit_task handles; ordinary
Pregel exit completed inside the cancelled pull. The exit_task capture branch
is source-grounded, not directly fault-triggered by these fixtures. A failed
or cancelled internal exit has no reliable supported recovery interface and
conservatively retains ownership. Unsupported dependency versions do likewise.
No arbitrary detached writers, external update_state/raw SQL writers, external
namespace entry, different registry, file replacement, or saver-level CAS claims.