Skip to content

[Windows App 26.715.4045.0] Benign process-lifecycle design review ends in cyber_policy and "Task encountered a system error" #34228

Open

Description

@aidawilliam41-ops

Codex version

  • Codex Windows App: 26.715.4045.0
  • Bundled runner: 0.145.0-alpha.18
  • Platform: Microsoft Windows NT 10.0.26200.0 x64

Summary

A benign, defensive, local-only architecture review was blocked at final-response generation with cyber_policy, and Codex Desktop surfaced the result as Task encountered a system error.

The task was designing a source-only Windows process-lifecycle POC for cleaning up Codex-owned orphaned MCP subprocess trees after an explicit task/subagent shutdown. The underlying lifecycle defect is already reported in #33531. This task did not perform penetration testing, exploitation, scanning, persistence, credential access, or operations against a third party.

During the affected turn, Codex only read official openai/codex source, reviewed Microsoft Job Object semantics, and edited two local Markdown design documents. It did not terminate any process, run the proposed POC, modify the installed Codex app, or change Codex configuration/state.

Exact failure

At 2026-07-19 23:50:00.373 MSK (UTC+3), the turn ended with:

This content was flagged for possible cybersecurity risk. If this seems wrong, try rephrasing your request. To get authorized for security work, join the Trusted Access for Cyber program: https://chatgpt.com/cyber

The recorded error class was:

codex_error_info = cyber_policy

The Desktop UI also showed:

Task encountered a system error

Turn ID for internal correlation:

019f7c15-f7e0-7a71-9154-295b1ae6d0e5

No request/correlation ID was present in accessible local telemetry.

Timeline

Time (MSK) Evidence
23:34:02 Turn started
23:49:38.974 Final local Markdown patch completed successfully
23:49:38.993 Tool output recorded
23:49:44.524 Reasoning continued
23:50:00.373 task_complete recorded cyber_policy instead of the final answer

Windows Application/AppModel logs showed no synchronous crash or app termination, and Codex remained running. This was a policy-classifier rejection, not a Windows crash.

A later native thread readback reported the affected turn as status=completed and error=null, which conflicts with the canonical rollout's cyber_policy terminal event.

Defensive scope of the task

The design itself required:

  • only isolated source builds and subprocesses created by the test;
  • exact process handles and creation-time verification;
  • no PID/name-based process cleanup;
  • fail-closed Windows Job Object containment;
  • no unmanaged fallback;
  • no installed-package probe;
  • no Desktop/global integration without separate approval;
  • no credentials, remote target, exploit, malware, or third-party access.

The document used terms such as TerminateProcess, Job Objects, KILL_ON_JOB_CLOSE, crash, process handle, and taskkill solely to design safe ownership, cleanup, negative tests, and rollback. These terms may have contributed to the classifier result, but the exact trigger is not available in local telemetry.

Steps that led to the issue

  1. Open a Codex Desktop task on Windows.
  2. Review a defensive design for owner-scoped cleanup of orphaned local MCP process trees.
  3. Compare the design with pinned official Codex source and Microsoft Job Object documentation.
  4. Apply Markdown-only corrections covering shutdown state, process ownership, test cleanup, and race handling.
  5. Attempt to produce the final review summary.
  6. Observe the Trusted Access/cyber-risk message followed by Task encountered a system error.

This is an evidence report, not a claim that every repetition will trigger the classifier; the exact classifier feature/phrase is not exposed.

Expected behavior

  • Benign local resource-lifecycle engineering should complete normally.
  • An additional safety check should not be presented as evidence that the user violated policy.
  • If output is blocked, Desktop should show the exact policy reason rather than a generic system-error message.
  • Rollout, native thread status, and UI state should agree.
  • A request/correlation ID should be available for support and classifier tuning.
  • Successful local tool work should remain recoverable and the task should be safely continuable.

Actual impact

  • The final answer was lost after successful edits.
  • The UI made a policy rejection look like an app/system failure.
  • The Trusted Access wording made a benign user believe they were being accused of unauthorized activity.
  • The task required a recovery turn and was left partially completed until then.

Related issues

Suggested product fixes

  1. Include owner-scoped local process-lifecycle and documentation-only context in classifier tuning.
  2. Do not map cyber_policy to a generic Task encountered a system error banner.
  3. Preserve the terminal error consistently across rollout, native thread readback, and UI.
  4. Surface a request/correlation ID and an in-product feedback path.
  5. Allow a safe continuation/retry after tool work has already completed.

No usernames, absolute paths, PID values, raw command lines, credentials, document contents, or private logs are included.

Why this defensive work was necessary

This was not a hypothetical process-control exercise. It was a response to repeated, measurable resource retention by Codex Desktop itself on the user's own Windows machine. The user first asked Codex to explain why Codex was consuming enough CPU and memory to make other work difficult, then asked for a narrowly scoped design for deterministic cleanup of Codex-owned child processes.

Sanitized point-in-time evidence collected before the blocked turn includes:

  • up to 552 app-server descendants;
  • a clean Codex-tree checkpoint with 354 processes, 17.88 GB private memory, and 24.9% CPU;
  • 11 complete, structurally identical 13-process MCP suites alive concurrently: 143 MCP processes using 9,575.5 MB private memory;
  • five code-mode kernels that remained alive for more than eight hours, using 32.617% of total-machine CPU and 7,550 MB private memory, while the app-server used another 8.125%;
  • a simultaneous native task-status checkpoint of only 2 active, 5 idle, and 27 notLoaded tasks.

The measurements do not prove exact per-task ownership for every MCP suite, and they do not prove that every retained suite is a permanent orphan. Natural cleanup was partial rather than absent: over one ten-minute idle checkpoint, 11 suites became 9, descendants fell from 312 to 251, and private memory fell from 11,659.7 MB to 9,528.9 MB. The remaining footprint was still large enough to justify product-level lifecycle investigation.

One separately authorized selective cleanup removed only three processes already proven to belong to an idle task. Their runners exited naturally, protected active-task processes remained untouched, and measured total CPU fell from 45.02% to 21.39%. This historical diagnostic action is context only; no process was terminated in the turn that received cyber_policy.

User time, context, and reliability impact

The lifecycle diagnosis, defensive design, and recovery span 29 completed relevant root turns with a non-overlapping recorded duration of 34,244,650 ms (09:30:44.650). Parallel subagent turns were excluded to avoid double-counting. The exact scoped token count is unavailable, so this report does not estimate it.

All selected relevant turns were recorded with gpt-5.6-sol at ultra reasoning effort. The user spent substantial time supervising evidence collection because the product did not expose reliable process ownership, reuse, cleanup-completion telemetry, or a supported owner-scoped cleanup control. The retained processes caused real UI/mouse lag and repeatedly consumed multi-gigabyte memory. After that investment, the final answer of the defensive design review was lost to a safety classification even though the Markdown edits had already succeeded.

Why this appears to be a false positive

The affected turn was restricted to official source inspection, documentation review, and local Markdown edits. It did not:

  • build or run a process-lifecycle POC;
  • terminate any process;
  • modify installed Codex, WindowsApps, persistent Codex configuration/state, Windows settings, services, or security controls;
  • scan a network or target a third party;
  • access credentials;
  • perform exploitation, persistence, evasion, malware activity, or unauthorized access.

The proposed POC was deliberately narrower than ordinary process-management code: isolated source build, synthetic test-created processes only, exact handle ownership, fail-closed Job Object containment, no PID/name-based cleanup, no unmanaged fallback, and no Desktop integration without separate approval.

OpenAI's official Cyber Safety guidance acknowledges that legitimate or non-cybersecurity activity can be classified incorrectly and directs users to report such cases through /feedback. A Feedback ID is not yet available: this automation runtime exposes no native feedback submission method, and its Windows-automation safety rules prohibit controlling the Codex Desktop UI. The affected turn ID and exact terminal event are preserved above.

Request for human review and actionable guidance

We are not asking OpenAI to bypass safeguards or authorize arbitrary process termination. We are asking for a human determination and a supported path for fixing a Codex resource-lifecycle problem on the owner's own machine.

Please:

  1. Review this event as a likely false positive and use the preserved turn ID for classifier tuning.
  2. Confirm whether narrowly scoped, owner-authorized local process-lifecycle engineering for Codex-created synthetic child processes is permitted.
  3. If any part is not permitted, identify the exact prohibited operation and the supported safe alternative; a generic Trusted Access invitation does not answer that engineering question.
  4. Confirm whether this one additional-check event, by itself, represents an established Usage Policy violation or any negative account/access status.
  5. Fix the UI/status mismatch so cyber_policy is not presented as a generic system error and later read back as completed / error=null.
  6. Provide a request/correlation identifier and an in-product false-positive path that remains usable after the original turn has been blocked.
  7. Clarify whether Trusted Access is actually required for this strictly local defensive systems-engineering work, or whether ordinary false-positive review is the intended route.

The desired outcome is straightforward: either allow this legitimate local reliability work to continue under clear guardrails, or state precisely what must stop and what supported alternative should be used.

Activity

  1. added
    bugSomething isn't working
    appIssues related to the Codex desktop app
    windows-osIssues related to Codex on Windows systems
    safety-checkIssues related to safety and abuse checks
    on Jul 19, 2026
  2. aidawilliam41-ops commented on Jul 22, 2026

    @aidawilliam41-ops
    Author

    Follow-up: in-product feedback and Support escalation completed

    The issue body currently says that a Feedback ID was not available. That statement is now outdated.

    • Codex in-app feedback was submitted successfully.
    • Feedback ID: 019f5fec-8f00-7ea0-995e-b3bfdf16ded7
    • A separate OpenAI Support conversation was submitted with the sanitized evidence, exact warning, environment, affected turn ID, public issue URL, and this Feedback ID.
    • Support returned: “Escalated to a support specialist; You can expect a response in the coming days. Replies will also be sent via email.”
    • No separate Support case/reference ID was shown in the confirmed response.

    This follow-up does not change the technical scope or conclusions of the report. It only supersedes the outdated “Feedback ID is not yet available” statement and confirms that the official feedback and human-support escalation routes were completed.

    No account address, credentials, private logs, or local paths are included.

  3. aidawilliam41-ops commented on Jul 24, 2026

    @aidawilliam41-ops
    Author

    Fresh recurrence after Desktop update (2026-07-24)

    This false-positive safety block reproduced after updating Codex Desktop.

    Environment

    • Codex Desktop: 26.721.3996.0
    • Windows 11 25H2, build 26200.8037
    • Affected turn: 019f9556-c580-77b2-8976-4917b2426acd
    • Start: 2026-07-24 21:15:19.701 MSK
    • Terminal event: 2026-07-24 21:30:51.449 MSK
    • Duration: 931,741 ms

    The canonical local rollout again ended with:

    codex_error_info = cyber_policy
    This content was flagged for possible cybersecurity risk. If this seems wrong, try rephrasing your request. To get authorized for security work, join the Trusted Access for Cyber program: https://chatgpt.com/cyber
    

    The localized Desktop UI showed that the delegated content could not be viewed and suggested Trusted Access.

    The triggering content was a bounded independent audit of a proposed test contract for Codex’s own Windows process lifecycle. The audit explicitly said that no tests, downloads, worktree, processes, or patches were created or run. The affected turn performed read-only inspection of official Codex source and documentation, version checks, task-state reads, and planning. It did not terminate processes, run a process-control POC, build Rust code, modify Codex or Windows, scan a network, access credentials, exploit anything, persist, evade controls, or target a third party. The term taskkill appeared only while reading the official Codex launcher source; it was not executed.

    The user’s goal is ordinary owner-authorized local reliability work: stop unused Codex-owned child process trees from retaining CPU, memory and process slots after task release, while preserving all active tasks. The intended outcomes are fewer unnecessary processes, lower CPU/RAM use, less heat, and less UI/mouse lag. We are not requesting a safeguards bypass or arbitrary process termination.

    This is a second confirmed occurrence in the same product area, now on a newer Desktop build. The exact classifier feature or phrase remains unknown because no classifier trace is exposed. The event proves a content/turn policy block; it does not prove an account ban or established policy violation.

    Please:

    1. Treat this as additional false-positive evidence for classifier tuning.
    2. Confirm whether owner-scoped local process-lifecycle diagnostics for Codex-created processes are allowed without Trusted Access.
    3. Confirm whether these notices carry any negative account/access status; the UI currently makes that impossible to determine.
    4. Do not label cyber_policy as a generic system error, and preserve a recoverable final result when read-only work already completed.
    5. Expose a request/correlation ID and a direct false-positive feedback action on the blocked card.
    6. Distinguish static defensive review of Job Objects/process cleanup from offensive process-control intent.

    Nothing here is legal advice, but all performed work was confined to the owner’s own Windows device and involved no unauthorized access or third-party target.

    No usernames, absolute paths, PID values, raw commands, credentials, private logs, or document bodies are included.

  4. Daevalus commented on Sep 5, 2026

    @Daevalus

    2026-09-05 recurrence: benign PyTorch/CPython lifecycle debugging blocked across multiple OpenAI surfaces

    I have a materially broader recurrence that appears closely related to this issue and may help isolate the classifier/enforcement layer.

    The affected work was not cybersecurity work. It was debugging an intermittent process-teardown crash in an audio/TTS application I own. The investigation was limited to my own repository, my own Linux host, disposable local containers, and retained crash/test evidence. No scanning, exploitation, credential access, third-party target, persistence, evasion, or security-control work was involved.

    The technical task was ordinary runtime/lifecycle engineering: determine why a Python process could complete GPU synthesis successfully, shut down the application runtime normally, and then sometimes fail during interpreter/process teardown. The evidence involved PyTorch/CPython thread and TLS lifetime, Thread.join() vs native thread completion, SafePyObject, Py_FinalizeEx, GDB/core traces, and Docker process exit state.

    Cross-surface recurrence

    On the same day, the same class of cyber-safety block appeared through several different paths:

    • Codex root task using gpt-6-astra at high/xhigh reasoning;
    • a Codex subagent using gpt-5.6-sol;
    • a separate agent harness calling the OpenAI Codex backend with gpt-6-astra;
    • ChatGPT web itself, which replaced a response with the Daybreak/"This content can't be shown" card.

    The backend-facing error text included:

    This content was flagged for possible cybersecurity risk. If this seems wrong, try rephrasing your request. To get authorized for security work, join the Trusted Access for Cyber program: https://chatgpt.com/cyber
    

    and the ChatGPT UI showed the equivalent Daybreak message.

    This is important because the recurrence is no longer isolated to one Codex model, one subagent, or one UI surface. It suggests a shared upstream safety-classification/enforcement path rather than a single-model refusal.

    Concrete benign context immediately surrounding the blocks

    The work included:

    • comparing a candidate and base revision of an audio/TTS service;
    • reproducing an intermittent post-success process exit failure;
    • inspecting CPython/PyTorch native thread/TLS destruction order;
    • reducing the problem to CPU-only test programs with no application imports and no CUDA calls;
    • comparing Python Thread.join() with actual native thread completion;
    • reading upstream PyTorch source and existing PyTorch issue discussions;
    • filing an upstream runtime bug report with minimized reproduction evidence.

    The reduction ultimately reproduced a PyTorch/CPython finalization race with no network target or security activity at all.

    Impact

    The false positive repeatedly interrupted long-running autonomous work after tool execution had already occurred. That creates a real recovery hazard: the user has to determine what was already mutated or verified before safely resuming, and a blind retry can duplicate work.

    We retained extensive local evidence across these occurrences, including exact timestamps, model names, task/subagent state, provider errors, tool history, and the benign crash-analysis context. I am deliberately not posting private session logs, local paths, or repository contents publicly, but can provide redacted evidence through an appropriate support channel.

    Requested action

    Please treat this as additional evidence for the existing safety-check false-positive cluster and specifically investigate:

    1. ordinary crash/debugging vocabulary such as thread ownership, TLS, process teardown, GDB/core, native join, locks, and finalization being misclassified as cybersecurity intent;
    2. whether the same classifier/enforcement path is shared across Codex, subagents, and ChatGPT surfaces;
    3. preserving a recoverable final/task state when a safety check fires after successful tool work;
    4. exposing a stable decision/correlation ID for false-positive reports;
    5. avoiding a Daybreak/Trusted Access recommendation for clearly non-cyber local software engineering.

    This looks especially close to this issue because the triggering domain is process-lifecycle debugging, but the recurrence is broader: it now affects benign audio/runtime engineering and multiple OpenAI product paths, not just one Windows Codex App workflow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbugSomething isn't workingsafety-checkIssues related to safety and abuse checkswindows-osIssues related to Codex on Windows systems

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions