Conversation
Engine half of a coordinated pair with trustabl/agent-reliability-rules#84, 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 claude_sdk/network.yaml into testdata/rules-fixture and adds cases to policyRuleCases, as TestPolicyRules_AllRulesCovered requires. CSDK-003 covers Python; the TypeScript half was missing even though this pack ships TS rules throughout. Three cases, following OAI-016's own 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 I want cross-repo rule work to take. I diffed the fixture hunk against trustabl/agent-reliability-rules#84 and the two are byte identical, so The test cases fit the harness correctly. I left two small text nits on trustabl/agent-reliability-rules#84, one of which changes the explanation prose. When you apply it there, mirror the identical edit into |
What the pair adds
CSDK-003 covers the Python side of network timeouts; the TypeScript half was missing, even though this pack ships TS rules throughout (CSDK-010..014, CSDK-120..131). OpenAI (OAI-016, OAI-024) and Vercel AI (VAI-011) already use
has_http_call_without_timeoutfor exactly this.The consequence framing is what makes it more than a port of VAI-011: an unresponsive host stalls the conversation rather than failing it. The model gets no result and no error, so the turn can't advance — and a
max_turnscap doesn't help, because the run is stuck inside one turn rather than taking too many.What this PR does
claude_sdk/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 is the one worth having: it pins that the predicate checks for a deadline, not merely for an options argument — the plausible regression is treating any second argument as "configured".
Verification