Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

I2840 — Zrušené volání MCP se zastaví a klient se dozví, že se zastavilo

Respektovat notifications/cancelled na každém přenosu MCP: volání, které pojmenovává, se zastaví v deklarované mezi, odpoví se na něj jako na zrušené místo pozdního výsledku a účinek zapisovače se hlásí jako úplný, žádný nebo neznámý.

PŘIPRAVENO vlna 0 · p1 · profil implementation · běží samostatně

Součást mcp-transports-are-reliable — Every MCP transport delivers each request at most once, bounds what it carries, and honours cancellation.

Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2840 bude přijato.

Cíl

Respektovat notifications/cancelled na každém přenosu MCP: volání, které pojmenovává, se zastaví v deklarované mezi, odpoví se na něj jako na zrušené místo pozdního výsledku a účinek zapisovače se hlásí jako úplný, žádný nebo neznámý.

Proč

Akceptační kritérium milníku „notifications/cancelled zastaví běžící volání v mezích“ je jediné bez implementace; jeho dva úkoly (I2145 odeslání nejvýše jednou, I2147 meze) jsou HOTOVO, takže milník se četl VERIFY s nedokázaným kritériem. Čteno na masteru 01227a0f74a dne 2026-10-17: Session::notification (apps/majordomus-cli/src/mcp/protocol.rs:245) zpracovává notifications/initialized a každou další notifikaci zahazuje na úrovni debug; žádný transport nesleduje požadavek, který zrušení jmenuje; most stdio předává jeden požadavek najednou pod mutexem (apps/majordomus-cli/src/commands/mcp.rs:82,217), takže zrušení dorazivší za běžícím voláním se přečte až po jeho konci. Testy posílají notifications/cancelled jen jako šum, který relace musí přežít (apps/majordomus-cli/tests/mcp_conformance.rs:463, mcp_shared.rs:810), nikdy proto, aby něco zastavily. Execution engine už má kooperativní příznak zrušení (apps/majordomus-cli/src/execution/engine.rs:340), kterého MCP nedosáhne.

Aktuální stav

notifications/cancelled se na stdio, na mostu i na endpointu Streamable HTTP přijme a ignoruje; zrušené volání doběhne a jeho výsledek je doručen.

Cílový stav

Každý transport drží id požadavků relace za běhu; notifications/cancelled jmenující jedno zvedne příznak zrušení onoho požadavku, který čte dispatcher schopností a engine provádění; stdio bridge čte klienta, zatímco volání probíhá, takže zrušení se přeposílá, ne řadí; zrušený požadavek se zodpoví bez výsledku (podle pravidla zrušení MCP) a zapisovatel s deklarovaným efektem, který mohl proběhnout, se zaloguje jako výsledek neznámý; zrušení jmenující neznámé nebo dokončené id se ignoruje. docs/MCP.md uvádí hranici a co zrušený zapisovatel zanechává.

Rozsah

  • apps/majordomus-cli/src/mcp
  • apps/majordomus-cli/src/commands/mcp.rs
  • apps/majordomus-cli/src/http/mcp.rs
  • apps/majordomus-cli/src/execution/engine.rs
  • apps/majordomus-cli/tests/mcp_conformance.rs
  • apps/majordomus-cli/tests/mcp_conformance_http.rs
  • apps/majordomus-cli/tests/mcp_shared.rs
  • docs/MCP.md

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • Dlouho běžící volání nástroje, které jmenuje notifications/cancelled, se zastaví v deklarovaném limitu na stdio, přes bridge i přes Streamable HTTP, vše doložené testem se skutečným procesem
  • Zrušené volání nedoručí pozdní výsledek a relace odpoví na další požadavek
  • Zrušený zapisovatel je hlášen jako dokončený, nezačatý nebo neznámý, nikdy mlčky
  • Zrušení jmenující neznámé nebo už zodpovězené id nic nemění

Validace

  • bin/majordomus plan validate
  • cargo test --test mcp_conformance --test mcp_conformance_http --test mcp_shared

Požadované důkazy

  • cancellation_test

Důkazy

Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.

Časová osa

zahájeno
—
ověřeno
—
dokončeno
—

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I2840.yaml. Přečtěte jej zpět pomocí majordomus plan show I2840.

Prohledává názvy a popisy všech stránek, které tento web publikuje.