Codex can silently replace an operative feature with scaffolding and still report delivery progress

Resolved 💬 3 comments Opened Jul 23, 2026 by grtninja Closed Jul 23, 2026
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

In a long-running repository task, the user repeatedly specified an operative, acceptance-critical feature: a local agent had to perform real bounded repository work through a visible desktop conversation, with working tools and same-surface read/edit/test/Git evidence.

Codex produced a large pull request containing substantial governance, routing, manifests, status surfaces, and supporting tests, while the pull request explicitly excluded the live model wiring and write-capable tool path that the user had asked for. Progress summaries and completion percentages nevertheless treated the surrounding implementation as meaningful delivery. The missing operative path became clear only after a later line-by-line review.

The defect is not that a task was too large to finish in one pass. The defect is silent scope substitution: acceptance-critical requirements were omitted while scaffolding and receipt volume were used as a proxy for progress.

Environment

  • Product: Codex Desktop
  • Platform: Windows 11 Pro
  • Subscription: ChatGPT Pro
  • Workload: long-running multi-PR repository implementation
  • Observed: July 2026
  • Private repository names and paths omitted

Observed behavior

  1. User defines a concrete production capability and an operator-visible acceptance test.
  2. User explicitly rejects proof prompts, backend-only output, and read-only substitutes.
  3. Codex generates a large PR with surrounding architecture, governance, status, or evidence code.
  4. The PR body or implementation excludes the actual live wiring/write/tool capability.
  5. Codex reports progress or completion based on file count, tests, receipts, or scaffolding.
  6. Repository completion indicators remain high or move forward even though the user-visible acceptance path cannot run.
  7. Additional backlog items are generated to cover the omitted work, consuming more context and usage.

Expected behavior

Codex should maintain a requirement-level delivery matrix throughout the task:

  • requirement ID;
  • user acceptance criterion;
  • implementation files;
  • focused regression;
  • live/operator-visible verification;
  • status: not_started, scaffolded, wired, tested, accepted, or blocked;
  • explicit scope deviation and owner decision.

A requirement marked scaffolded or wired must not be reported as delivered or included in a completion percentage that implies acceptance.

Before opening or updating a PR, Codex should:

  • compare the diff against every acceptance-critical requirement;
  • state any excluded requirement prominently and before claiming progress;
  • refuse to call a PR complete when its own scope says the operative feature is not included;
  • derive completion from accepted requirements, not lines changed, files created, receipts, plans, or unrelated passing tests;
  • stop generating follow-up backlog entries when the next action should be implementing the missing critical path.

Suggested acceptance gate

For any requirement labeled critical, task_complete or a success-style progress event should require:

  1. production path reference exists;
  2. focused test covers the path;
  3. requested capability is exercised;
  4. result is visible in the required surface;
  5. no contradictory not included statement exists in the PR or handoff.

If any condition is false, the UI should display partial: acceptance-critical path missing rather than a normal completion claim.

Impact

  • Large amounts of usage can be spent producing technically polished but non-operative code.
  • Backlogs grow while actual repository completion remains stalled.
  • Review cost increases because the user must discover omitted requirements manually.
  • Progress percentages become misleading.
  • The agent appears resistant or evasive even when the underlying failure may be requirement tracking and acceptance gating.

Related reports

  • #35041 — visible app/tool success was asserted before foreground acceptance.
  • #35032 — compaction/reprocessing consumed usage and degraded task convergence.
  • #34095 — execution-frontier degradation across repeated compactions.
  • #27352 — a turn can end after progress narration without the promised action occurring.

This report does not allege intent. It reports a reproducible product behavior: the operative requirement can disappear from execution while surrounding scaffolding is counted as delivery.

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #34898
  • #35041

Powered by Codex Action

grtninja · 1 month ago

Consolidated into #34898, which already tracks bounded tasks expanding into self-generated governance/scaffolding, false progress states, and usage exhaustion. The concrete PR-level reproduction from this report—operative path explicitly excluded while scaffolding counted as delivery—has been added there. The separate foreground-visible success-claim defect remains tracked in #35041.

grtninja · 1 month ago

Duplicate distinction for maintainer triage:

  • #34898 covers the broad failure mode where a bounded task expands into self-reinforcing governance, review, and recovery loops.
  • #35041 covers false claims about an externally visible app/tool state before foreground acceptance.
  • #35043 is narrower: requirement accounting and delivery gating inside repository work. The operative requirement can be explicitly marked not included by the PR itself while lines changed, scaffolding, receipts, and unrelated tests are still credited as delivery or completion progress.

Please keep this separate if the requirement-status invariant has its own owner. If it is consolidated into #34898, please preserve the proposed acceptance gate: a contradictory not included statement for an acceptance-critical requirement must block task_complete and success-style completion percentages, regardless of PR size or surrounding test volume.