Abstract & Central Claim
Input guardrails are designed to intercept policy-violating inputs before an AI agent executes state-modifying actions. This paper evaluates whether the OpenAI Agents SDK across three audited releases (v0.20.0, v0.21.1, v0.22.3) establishes a structural happens-before guarantee (T1 ≺ T3) ensuring that input guardrail evaluation (T1) strictly precedes tool side-effect commitment (T3).
In OpenAI Agents SDK v0.20.0, v0.21.1, and v0.22.3 under default parallel execution mode (
run_in_parallel=True), no pre-commit authorization barrier exists between input guardrail evaluation and tool dispatch.For all 300 parallel DENY trials in the forensic replication suite (100 per version), tool HTTP dispatch was initiated (T2) before the guardrail verdict was logged (T1) inside the runner. Furthermore, for all trials where full transport and server event correlation was confirmed, the HTTP side effect (T3) was committed to the local service before the runner communicated the tripwire exception (T4).
Conversely, configuring sequential mode (
run_in_parallel=False) or implementing an explicit pre-commit authorization barrier yielded 0 committed HTTP side effects on DENY across all evaluated releases.
Using an independent process-level HTTP microservice hosted on localhost (127.0.0.1:8888) with permanent append-only server logging, we evaluated a multi-stage experimental corpus comprising 2,000 original evaluable trials, a 900-trial forensic replication suite, 100 non-assessable streaming cases, and 300 unexecuted timeout trials across seven experimental conditions.
1. Introduction & Problem Statement
Agent orchestration frameworks delegate multi-step decision loops to Large Language Models (LLMs). When agents interact with external APIs, databases, or financial services, security governance requires strict control plane invariants:
Guardrail Evaluation (T1) ≺ Tool Side-Effect Commitment (T3)
Audit A02-07 documented that v0.22.3 under parallel execution lacked a synchronization barrier prior to tool execution. Audit A02-08 investigates whether this behavior is an isolated artifact of v0.22.3 or a persistent architectural trait across multiple SDK releases, and evaluates its impact when tools interact with process-isolated HTTP network endpoints.
2. Experimental Corpus Accounting (N = 3,300 Total Scope)
To maintain strict scientific rigor and transparency, the experimental corpus is categorized into four distinct accounting categories:
| Corpus Category | Trial Count | Audited Conditions | Scope, Storage & Verification Status |
|---|---|---|---|
| Original Evaluated Corpus | 2,000 trials | Conditions A, B, C, D1, D2, E, G across 3 SDK versions | Remediation harness executions; individually preserved in local JSON traces. |
| Forensic Replication Corpus | 900 trials | Conditions A, B, D2 across 3 SDK versions | Separately executed forensic suite; 300 Condition A commits matched 1:1 against external_service_audit_master.db. |
| Non-Assessable Cases | 100 cases | Condition G (Streaming) in v0.20.0 |
Marked NOT_ASSESSABLE by harness due to stream event schema differences; zero individual trial JSON traces generated. |
| Unexecuted Conditions | 300 trials | Condition F (Timeout / Retry) | Excluded from scope; strictly documented as never executed. |
Note: The 300 master-DB matches belong strictly to the 900-trial forensic replication suite. The 2,000 original evaluable trials are preserved separately in JSON traces.
3. Chronological vs. Causal Evidence Synthesis
3.1 Within-Runner Monotonic Initiation (T2 < T1)
Inside the runner process using high-resolution monotonic timestamps, we measure the relative sequence between tool HTTP dispatch initiation (T2) and guardrail verdict logging (T1):
- Observed Rate: In 100/100 parallel DENY trials per SDK version (300/300 total across
v0.20.0,v0.21.1, andv0.22.3in the forensic replication), T2 < T1 was recorded under the tested 50ms guardrail vs 5ms tool latency parameterization. - Scientific Boundary: T2 < T1 demonstrates that tool HTTP dispatch was initiated before the guardrail finished evaluation. Because clocks across independent OS processes cannot be assumed synchronized without physical cross-process hardware clocks, T2 < T1 alone must never be used to claim server-side commitment before verdict (T3 < T1).
3.2 Cross-Process Causal Transport & Exception Precedence (T3 ≺ T4)
Using correlated trial IDs, request headers, and idempotency keys across process boundaries:
Runner Dispatch (T2) ≺ Server Socket Receive (SREC) ≺ Server Commit (T3) ≺ HTTP Response (T2,resp) ≺ Tripwire Exception (T4)
For trials where full transport and server event correlation was confirmed (the 300 Condition A parallel DENY forensic trials):
- The tool function sends the HTTP request (T2) and awaits the HTTP response (T2,resp) before returning.
- The server receives (SREC), commits (T3), and logs the event in the master database prior to responding.
- The runner only communicates/raises the
InputGuardrailTripwireTriggeredexception (T4) afterasyncio.gathercollects task results.
Therefore, for all verified trials with confirmed HTTP responses, external side-effect commitment (T3) is causally established prior to tripwire observation (T4).
4. Multi-Version Empirical Findings Matrix
| SDK Version | Condition | Execution Mode | Within-Runner T2 < T1 Initiation | Verified HTTP Commits | Master DB 1:1 Matched | Tripwire Exception (T4) | Outcome |
|---|---|---|---|---|---|---|---|
| v0.20.0 | A (Parallel DENY) | Non-streaming | 100/100 | 100/100 | 100/100 | 100/100 | Precedence Violated (T3 ≺ T4) |
| v0.20.0 | B (Sequential DENY) | Non-streaming | 0/100 | 0/100 | 0/0 | 100/100 | 0 Commits Observed |
| v0.20.0 | D2 (Barrier DENY) | Non-streaming | 100/100 | 0/100 | 0/0 | 100/100 | Barrier Blocked |
| v0.21.1 | A (Parallel DENY) | Non-streaming | 100/100 | 100/100 | 100/100 | 100/100 | Precedence Violated (T3 ≺ T4) |
| v0.21.1 | B (Sequential DENY) | Non-streaming | 0/100 | 0/100 | 0/0 | 100/100 | 0 Commits Observed |
| v0.21.1 | D2 (Barrier DENY) | Non-streaming | 100/100 | 0/100 | 0/0 | 100/100 | Barrier Blocked |
| v0.22.3 | A (Parallel DENY) | Non-streaming | 100/100 | 100/100 | 100/100 | 100/100 | Precedence Violated (T3 ≺ T4) |
| v0.22.3 | B (Sequential DENY) | Non-streaming | 0/100 | 0/100 | 0/0 | 100/100 | 0 Commits Observed |
| v0.22.3 | D2 (Barrier DENY) | Non-streaming | 100/100 | 0/100 | 0/0 | 100/100 | Barrier Blocked |
5. Automated Adversarial Assessment Note (JEV)
The TypeSafe AI JEV adversarial service conducted an automated evaluation (jev-1.13.0, 6,165 input tokens, HTTP status 200 OK) of the preliminary A02-08 report and initial harness code. The automated model output attributed the observed behavior to the SDK's asyncio task scheduling structure under default parallel configuration.
- JEV evaluated only the preliminary report text and initial harness code.
- JEV did not evaluate the 900-trial forensic replication suite.
- JEV did not inspect or verify the permanent SQLite master database (
external_service_audit_master.db). - JEV did not evaluate the corrected cross-process temporal instrumentation or causal transport analysis.
- JEV's output represents an automated model-based code review, not a formal mathematical proof or independent manual code verification.
6. Scope Boundaries & Methodological Limitations
- Localhost Process-Level Scope: The target HTTP microservice was hosted locally on
localhost(127.0.0.1:8888). No remote internet endpoints or production third-party systems were contacted. - Synthetic Latency Ratios: The 100/100 violation rate under parallel DENY is conditional on the tested 50ms guardrail vs 5ms tool latency parameterization and does not represent a static probability for arbitrary network conditions.
- Audited Version Bounds: Empirical observations apply strictly to OpenAI Agents SDK releases
v0.20.0,v0.21.1, andv0.22.3.
7. Recommended Governance Mitigations
To enforce happens-before safety in agentic workflows:
- Enforce Sequential Mode for Critical Actions: Configure
run_in_parallel=Falseon input guardrails protecting high-consequence tools. - Implement Pre-Commit Authorization Barriers: Require tool functions to await explicit guardrail completion flags before issuing side-effect payloads.
- Deploy External Control-Plane Proxies: Use an out-of-process sidecar proxy that holds HTTP transport payloads until signed guardrail clearance is verified.
8. Methodology, Reproducibility & Data Availability
- Execution Environment: Windows 11 AMD64, Python 3.11.15, OpenAI Agents SDK releases
v0.20.0,v0.21.1, andv0.22.3isolated in versioned virtual environments. - Model Adapter: Offline deterministic adapter (
ScriptedModelAdapter) generating constant function-call decisions to eliminate LLM non-determinism. - HTTP Microservice: Process-isolated Python HTTP server (
local_http_service.py) maintaining a WAL-mode append-only SQLite database (external_service_audit_master.db). - Reproducibility Material: Full test harnesses (
a02_08_remediation_harness.py), evidence manifest (A02-08_EVIDENCE_MANIFEST.json), and master database are archived locally. Private raw traces and API credentials are withheld to maintain security governance.