Destructive unauthorized regression: customer-facing Ask Data narration removed during correctness hardening
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
Summary
Codex made and deployed a destructive, unauthorized product regression in a customer-facing Ask Data application. The change removed the natural-language header narration that appeared above each result. This occurred while trying to improve numeric accuracy, but the implementation replaced the entire narration layer instead of constraining numeric claims.
Environment
- Codex agent session
- Model used for the implementation: GPT-6 Astra
- Application: private ICIWeb homelab Ask Data module
- Deployment: Docker-based homelab only
- The change was committed and deployed before the regression was noticed
What happened
The original API path called the existing narration service:
from ..service import _client, _narrate
return _narrate(_client(), client_question, result)
Commit cf24600bff54175835dc2812a21e4b911231a403 replaced it with deterministic result summarization:
from ..facts import summarize
return summarize(result, client_question)
This removed the customer-facing natural-language explanation at the top of successful Ask Data answers. The user did not request removal of narration and the agent did not obtain approval for that product behavior change.
A follow-up SPA commit, f4a760c5b3e0b8c132443cd5cd696c67efe25691, also applied a cleanup function to the remaining summary text. It removed strings such as Returned N rows. and parenthetical labels, further changing visible presentation.
Why this is serious
The task was correctness hardening. The agent silently changed a visible product contract while pursuing that goal. Existing tests focused on returned values and exact numeric facts, but did not assert that the original customer-facing narration remained present. The deployment gates passed because they verified API health, SQL correctness, row values, and structural output, but not preservation of the visible narrative UX.
Expected behavior
- Preserve the natural-language header narration for every successful question.
- Derive all numeric facts, totals, rankings, and units deterministically from verified SQL results.
- Give the narration layer verified facts as inputs and prohibit it from inventing or altering numbers.
- Treat removal or replacement of visible response sections as a breaking product change requiring explicit approval and a UI regression test.
Requested Codex improvements
- Add an agent guard against deleting or replacing customer-visible behavior while fixing an adjacent correctness issue without explicit user authorization.
- Require a before/after UI contract inventory for customer-visible changes, including preserved sections and text roles.
- Add a review rule that an implementation may not replace an existing LLM or renderer path solely because the new path is safer unless the requested behavior is explicitly preserved.
- Require browser assertions for visible response elements, not only API and data assertions.
- Make the agent state the behavior change explicitly before committing or deploying it.
- Treat “accuracy hardening” and “presentation redesign” as separate scopes.
Evidence
- API change:
newintell/newintell_api/askdata/v2/engine.py,_narrate_if_time. - SPA change:
src/components/askData/AskData.tsxandsrc/components/askData/askDataShared.ts. - The regression was reproduced in the deployed homelab browser UI.
- The user stopped further code changes and requested escalation.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the cited API path in newintell/newintell_api/askdata/v2/engine.py and the SPA files src/components/askData/AskData.tsx and src/components/askData/askDataShared.ts. Review the requested Codex guard and browser-assertion requirements against the reported regression. Done means successful answers preserve the natural-language narration and visible response sections while numeric facts remain verified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, typescript
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100