Conversation
Engine half of a coordinated pair with trustabl/agent-reliability-rules#85, on a branch of the same name so the rules-sync job resolves the matching pack rather than main. Neither half should merge alone — check-rules-sync.sh fails if they do. Mirrors mcp/network.yaml into testdata/rules-fixture and adds cases to policyRuleCases, as TestPolicyRules_AllRulesCovered requires. MCP-004 covers Python; the TypeScript half was missing even though the pack ships TS rules (MCP-011, MCP-013). Three cases, following OAI-016's table: the bare fetch, the AbortSignal remediation, and a fetch whose options object is present but carries no timeout — the last pinning that the predicate checks for a deadline rather than merely for an options argument.
|
Thanks @bradAGI. This is the shape a coordinated change should arrive in: the The three cases hold up when I walk them against the predicate. One nit: the diff also drops a blank line in MCP-024 still needs a rationale doc in |
What the pair adds
MCP-004 covers the Python side of network timeouts; the TypeScript half was missing, even though the pack ships TS rules (MCP-011, MCP-013).
What makes the MCP case its own is that the stall crosses the server's trust boundary. The connecting client waits on a JSON-RPC response that never arrives, and MCP gives it no way to cancel an in-flight tool call — so it's left to its own timeout, an abandoned request, or a hung session, with nothing saying why. The server author never sees the symptom; the client's users do. On a stdio server a handler parked on a dead socket is also holding the single process that serves the connection.
What this PR does
mcp/network.yamlintotestdata/rules-fixture/.policyRuleCases, asTestPolicyRules_AllRulesCoveredrequires.await fetch(url){ signal: AbortSignal.timeout(15000) }{ method: "POST" }— options present, no deadlineThree cases, following OAI-016's own table. The third pins that the predicate checks for a deadline, not merely for an options argument.
Verification