[App][Browser] Synthetic typing does not update the Angular/DevExtreme form model

Open 💬 0 comments Opened Aug 8, 2026 by carpptn

Summary

In the Codex in-app browser, synthetic typing into a DevExtreme text filter changes the visible native input value but does not update the corresponding Angular form model. When the search action is executed, the optional filter is omitted and the API returns unfiltered data.

Environment

  • Codex desktop app, Codex in-app browser (IAB)
  • Windows
  • Local Angular/Vite web application
  • DevExtreme dx-form, dx-text-box and dx-button

Versions

  • Codex desktop app: 26.803.41515 (from the About dialog)
  • Operating system: Windows 11 Pro 64-bit, build 26200 (10.0.26200)
  • Browser: Codex embedded in-app browser (IAB); the embedded engine version is not exposed separately
  • Node.js: v25.2.1
  • npm: 11.7.0
  • Angular framework packages: 20.1.5
  • Angular CLI: 20.1.5
  • @angular/build: 20.3.11
  • DevExtreme and devextreme-angular: 25.1.5
  • Vite: 7.1.11

Reproduction

  1. Open a local Angular page containing a DevExtreme form, text filters and a data grid.
  2. Wait until the initial list loads.
  3. Focus any text filter.
  4. Enter a value that does not match any record, for example TEST_VALUE, using the in-app browser automation: Playwright typing, CUA typing, or individual CUA keypresses.
  5. The input visibly contains the entered value.
  6. Click the search button.
  7. Inspect the outgoing request or pause at the API breakpoint.

Actual behavior

The API receives no value for the corresponding optional filter (the parameter is null or missing). The request is therefore unfiltered and returns all records.

The DOM visibly contains the entered value, but the Angular/DevExtreme form model still contains an empty value.

No frontend exception or API error is reported. The request completes successfully.

Expected behavior

Synthetic typing should update the DevExtreme widget and the Angular form model in the same way as real keyboard input.

The outgoing request should contain the entered filter value and the API should return an empty result.

Important comparison

When a real user types the same value manually in the same browser session and clicks the same button, the filter is sent correctly and the UI displays an empty result.

This indicates that the API filtering logic and the application work with real user input. The problem is specific to synthetic input generated by the in-app browser automation.

Additional observations

  • The search button can show its loading spinner, so the click and HTTP request may execute successfully.
  • The reset button can also leave the visible control value and internal form state inconsistent.
  • Browser console contained no errors.
  • The only observed warning was unrelated: Inferno is running in development mode while using a production build.

Suspected cause

The automation changes the underlying native input value but does not reproduce the complete event sequence required by DevExtreme text editors and Angular two-way form binding, such as value-change propagation or Angular zone handling.

The native DOM value and the DevExtreme/Angular model become inconsistent.

Suggested investigation

Compare manual typing with IAB automation by logging the native input value, widget value, Angular model value, beforeinput/input/change/blur events, event trust state and event ordering.

A minimal Angular + DevExtreme reproduction containing one form, one text editor, one submit button and a data grid would help isolate the problem.

View original on GitHub ↗