Skip to content

fix(mcp): keep gate_soft_continue true on unfinished soft-gap ticks - #30

Merged
linkerlin merged 1 commit into
masterfrom
cursor/tick-fuse-soft-continue-9a06
Nov 3, 2026
Merged

linkerlin merged 1 commit into
masterfrom
cursor/tick-fuse-soft-continue-9a06

Conversation

@linkerlin

Copy link
Copy Markdown
Owner

Summary

未完成 run 的软缺口上,第一次 swarm_tick 和 loop_fuse=pending_redirect_loop 现在保留 gate_soft_continue=true,与 boot / status 同一口径。这个键不写成 false。只认该键的宿主因此能看见软缺口;停 tick 仍看 tick_again、retryable 和 next_action。

Unfinished soft-gap swarm_tick redirects and the fuse envelope now keep gate_soft_continue=true, the same advisory bit boot and status already set. The key is never written false. Hosts that only look for that key see the soft gap; stop-tick stays on tick_again, retryable, and next_action.

What changed

How to test

  1. uv run pytest tests/test_mcp_host_usability_pending_smoke.py tests/test_mcp_host_usability_p0.py tests/test_mcp_host_usability_p1.py tests/test_mcp_host_usability_p2.py tests/test_mcp_host_usability_polish.py tests/test_swarm.py::TestTick tests/test_swarm.py::TestBootAndStatus tests/test_mcp_server.py tests/test_mcp_protocol.py tests/test_open_box_setup_doctor.py
  2. uv run ruff check src tests && uv run ruff format --check src tests && uv run mypy src
  3. 未完成软缺口上,第一次 tick 与保险丝的 gate_soft_continue 为 true,不是 false,也不是缺席。没有软缺口的重定向、以及没有未完成 run 的 boot,形状不变。doctor 的未完成软路径仍不带这个键。

Risk

Low -- MCP 宿主回执旗标。不改固化门、Parent baseline、保险丝 ok,也不把软缺口收成硬门。只看 gate_soft_continue=true、完全不看 tick_again / next_action / ok 的宿主,在 tick 与保险丝之后仍可能再 tick;写成 false 会重开 DEBUG #67。

Harness/evaluator governance

Upstream governance surface: swarm instrument wording and unfinished-run tick envelopes only
Downstream EvoX impact: N/A
Rollout-local scope: N/A
Promotion boundary: N/A
Evaluator mismatch sets: N/A
Non-regression evidence: pending-smoke, sibling usability, tick/boot, MCP protocol, and open-box tests
Fix-severity review: low
Owner approval: N/A
Security boundary: does not execute evolver doctor --fix, does not write a Parent baseline, and does not relax the solidify gate
Rollback: revert this commit
Live promotion: no
Autonomous evaluator self-editing: no

Self-check

  • Tests added or updated to cover the new behavior; gates pass locally: related pytest suites, uv run ruff check src tests, uv run ruff format --check src tests, uv run mypy src.

Related

Follows #29. That change left the first unfinished-run tick and the fuse omitting gate_soft_continue. DEBUG #75.

Open in Web Open in Cursor 

Unfinished soft-gap swarm_tick redirects and the pending_redirect_loop
fuse dropped the true that apply_soft_gap writes. Soft-continue-only
hosts then missed the advisory bit boot and status already show.
Keep the key true and never write false. tick_again, retryable, fuse
ok, and the solidify steer stay as they are.

Co-authored-by: Steper Lin <linker.lin@live.com>
Copilot AI balanced review requested due to automatic review settings November 3, 2026 06:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

@linkerlin
linkerlin merged commit bf107ba into master Nov 3, 2026
5 checks passed
linkerlin added a commit that referenced this pull request Nov 3, 2026
…uals (#31)

* fix(mcp): close post-#30 catalog, re-tick, steer, and watermark residuals

Advertise tools.listChanged and send tools/list_changed after initialize
so hosts refresh a catalog that already lists swarm_doctor. Omit
gate_soft_continue on unfinished soft-gap tick and fuse envelopes
(never write false) and set soft_gap.tick=false. Drop bench freeze and
baseline from those solidify steers. Fast-skip a watermark only when
the full hash matches, so a same-size rewrite is not a silent skip.

Co-authored-by: Steper Lin <linker.lin@live.com>

* fix(test): skip tools/list_changed when the e2e MCP client reads replies

The catalog refresh notification has no id. The e2e recv treated the
next stdout line as the JSON-RPC result, so tools/call and prompts/get
raised KeyError on result. Read until the matching id, and pin that
pairing with a regression.

Co-authored-by: Steper Lin <linker.lin@live.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
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.

3 participants