Conversation
Engine half of a coordinated pair with trustabl/agent-reliability-rules#95, 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 openai_sdk/path_safety.yaml into testdata/rules-fixture and adds a fire and a silent case to policyRuleCases, as TestPolicyRules_AllRulesCovered requires. OAI-006 covers the Python path-safety case; the TypeScript half was missing. The silent case applies the remediation the fix text prescribes for the common shape — derive the name server-side rather than accepting a path from the model — instead of merely removing the write.
|
Thanks @bradAGI. I diffed the fixture hunk here against the YAML in trustabl/agent-reliability-rules#95 and the two are byte-identical, so One correction to the description. The PR says the silent case applies the remediation the Happy to take this as a pair with the rules PR. New rules also need a rationale doc in |
What the pair adds
OAI-006 covers the Python path-safety case; the TypeScript half was missing. OAI-029 mirrors CSDK-012 including its coarse-signal caveat, stated in the explanation: it flags any filesystem write, not only unnormalized paths, because TS path-normalization analysis isn't wired yet. Confidence 0.5 to match.
In an SDK built around guardrails, the point worth stating is that the guardrail story doesn't cover this. OAI-101 concerns input guardrails on the agent — they screen what enters the conversation, not what a tool does with an argument once the model has produced it. A call that reaches
execute()has already passed whatever guardrails were configured, so "we have guardrails" isn't an answer to this finding. The rule says so directly.What this PR does
openai_sdk/path_safety.yamlintotestdata/rules-fixture/.policyRuleCases, asTestPolicyRules_AllRulesCoveredrequires.The silent case applies the remediation the
fixtext prescribes for the common shape — derive the filename server-side rather than accepting a path from the model — instead of merely deleting the write.Verification