Repository navigation
fix(mcp): set retryable false on the first unfinished-run tick - #24
Merged
Merged
Conversation
Hosts that treat an omitted retryable as permission to tick again stop on the first soft redirect. ok stays true, and gate_soft_continue stays omitted so a strict false is not read as session death. Co-authored-by: Steper Lin <linker.lin@live.com>
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.
Summary
未完成 run 的第一次
swarm_tick重定向现在也写retryable=false。把缺席的retryable当成「可以再 tick」、只在严格 false 时才停、同时不看tick_again/next_action/ok的宿主,会在第一次软返回上停下来;ok仍是 true,不会再掉进保险丝的ok=false。gate_soft_continue仍然缺席,不把严格 false 写回那个会被读成整段会话失败的字段。The first unfinished-run
swarm_tickredirect now setsretryable=falseas well. Hosts that treat an omittedretryableas permission to tick again, and that ignoretick_again/next_action/ok, stop on that first soft return whileokstays true, so they do not fall through to the fuse'sok=false.gate_soft_continuestays omitted.What changed
retryable=false。第一次仍是ok=true、没有error、没有loop_fuse,redirect_reason仍是pending_solidify。保险丝仍是ok=false、loop_fuse=pending_redirect_loop、redirect_reason=pending_redirect_loop、没有error。gate_soft_continue仍然缺席。缺席不是 false:只把严格 false 当成整段会话失败、且不读session_not_failed的宿主不会在第一次就结束会话。只认这一个字段、完全不读retryable的宿主仍可能再 tick;把该键写成 false 会重开 DEBUG #67。session_not_failed=true与 preserve 三元组不动。boot / status 不写retryable。不写 Parent baseline,不放宽固化门。DEBUG #61 的目录缓存没有做假修复。swarm_tick参数说明、README(英/中)、quickstart、AGENTS、DEBUG #69 写同一口径。常驻 instructions 未加长(仍小于 1200)。How to test
uv run pytest tests/test_mcp_host_usability_pending_smoke.py tests/test_mcp_server.py tests/test_mcp_protocol.py tests/test_mcp_host_usability_p0.py tests/test_swarm.py -q --tb=line128 passed.retryable is Falseon the first redirect, and a host that ticks unlessretryableis strict false does not tick) fails on unmodified master.uv run ruff check src tests && uv run ruff format --check src tests && uv run mypy srcSuccess: no issues found in 353 source files.uv run pytest tests/gep/test_material.py::TestWatermarkIngest::test_identical_rewrite_is_noop -q --tb=linestill fails on unmodified master in this environment (skippedvsrewrite_noop). Identicalwrite_textrestores the previousmtime_ns, so the watermark fast-skip is doing what it says. Callers only readadded. Not changed here.Risk
Low. The unfinished-run tick envelope gains
retryable=falseon the first redirect, where it was previously absent. The fuse already had that value.okon the first call stays true, so hosts that treatok=falseas session death do not die on the accidental first tick.gate_soft_continueis still omitted. Solidify gate,skip_validation, Parent baseline, and val seal are unchanged.Harness/evaluator governance
Upstream governance surface: MCP
swarm_tickunfinished-run redirect envelope (retryableonly). Not solidify, selector, mutation, or the frozen gate.Downstream EvoX impact: N/A -- existing tool return field, no bridge or contract change.
Rollout-local scope: host-visible tick redirect only; boot and status are unchanged.
Promotion boundary: N/A -- no proposal/rollout/default promotion.
Evaluator mismatch sets: N/A
Non-regression evidence:
tests/test_mcp_host_usability_pending_smoke.pypins the first redirect (oktrue,retryablefalse,gate_soft_continueomitted,session_not_failedtrue) and the fuse (okfalse unchanged).Fix-severity review: low
Owner approval: N/A
Security boundary: no new data, tool, host, network, or secret surface.
Rollback: revert this commit.
Live promotion: no
Autonomous evaluator self-editing: no
Self-check
uv run pytest(modules listed above),uv run ruff check src tests,uv run ruff format --check src tests,uv run mypy src.