# \[Bug\]: Re-embedding an overwritten local image shows the old cached version · Issue \#15676 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/issues/15676)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

State: backlog

Priority: 0

## Description

[Discussion and activity](https://git.cafe/pingdotgg/t3code/issues/15676)

---

### Before submitting

- [x] I searched existing issues and did not find a duplicate.
- [x] I included enough detail to reproduce or investigate the problem.

No open issue covers this. #13942 and #14009 addressed the same problem and were closed under the prior-approval rule, so this issue is for maintainers to decide the intended behavior.

## Area

apps/server, apps/web

## Actual behavior

An agent regenerated an image by overwriting the same PNG it had embedded earlier in the thread, then embedded that path again in its reply. The new message showed the old image. Opening the same file from the files panel showed the correct, updated image, so the two views disagreed side by side.

The file on disk was correct, and the agent had read the new file back before replying.

## Steps to reproduce

1. Have an agent write an image to a path, for example `/tmp/chart.png`, and embed it in a reply with `![chart](/tmp/chart.png)`.
2. Within an hour, have it overwrite that file with different content and embed the same path in a new reply.
3. The new reply shows the previous image.
4. Open the file from the files panel. It shows the current image.

## Expected behavior

A message that embeds a local image shows the file as it was when the message was written, or at least never shows an older version than the one on disk.

## Cause

Two caches key only on the path:

- The client reuses the signed asset URL per resource path for up to an hour (`useAssetUrlState`, `ASSET_URL_IDLE_TTL_MS` in `packages/client-runtime/src/state/assets.ts`).
- The server serves images with `Cache-Control: private, max-age=3600` (`assetResponseHeaders` in `apps/server/src/http.ts`). The token does not include the file's mtime or size.

Audio and video already get `no-store` because "host media can change in place", but images do not.

Confirmed on main at `4ee6bfd5`.

## Open question

The closed PRs show the possible directions:

1. Treat local images as live references and revalidate them (for example `no-cache` with an mtime/size ETag). Small change, but older messages would also switch to the newest file.
2. Snapshot referenced images per message (#14009). Preserves history, but adds storage and retention.
3. Prompt-only guidance to write revisions to new file names (#13942).

Which behavior is intended?

## Impact

Minor bug. Misleading when an agent iterates on an image or screenshot, because the chat shows a result that does not match the file.

## Version or commit

`0.0.46-nightly.20261004.2648`. Cause confirmed on main at `4ee6bfd5`.

## Environment

Linux, T3 desktop app, Claude provider.

## Workaround

Reload the window, open the file from the files panel, or have the agent write each revision to a new file name.

