Vimalendra Rohit Nekkanti
05/05/2026, 8:16 AMMarvin
05/05/2026, 8:16 AMMarvin
05/05/2026, 8:19 AMVimalendra Rohit Nekkanti
05/05/2026, 8:24 AMVimalendra Rohit Nekkanti
05/05/2026, 8:25 AMMarvin
05/05/2026, 8:25 AMMarvin
05/05/2026, 8:26 AMlast_seen: 2025-10-31T14:49:31...
- latest_materialization.occurred: 2025-10-31T14:48:08...
- a concrete flow_run_id
- a concrete task_run_id
That means Prefect Cloud received a new asset event recently. So this is not just old retained history from 48 days ago — something is still actively emitting this asset.
Also, the asset key:
<athena://layered_data_dev/a47c9a3e8ecf24e7e8681503edfa0e85d_matched_matcher_manual_domain>
suggests the event is being emitted by code that still knows about that asset key, likely from a task or materialization wrapper in a deployed flow.
What this tells us
Because there is a fresh:
- flow_run_id
- task_run_id
- latest_materialization
the root cause is almost certainly one of these:
1. An old deployment is still running
- The deployment may still point to older code.
2. The worker is using an old image / old checked-out code
- For example, your deployment definition changed, but the runtime image/container did not.
3. Another flow or task still emits the same asset key
- Maybe not the one you edited.
4. A scheduled run or automation is recreating it
- The daily cadence strongly suggests a schedule.
Most important next step
Open that exact flow_run_id in Prefect Cloud and inspect:
- deployment name
- work pool / worker
- deployment version or code source
- container image / infrastructure block / pull step
- which flow file was actually executed
- task run name for task_run_id
That will tell you which runtime is still producing the asset event.
How to reason about the payload
You pasted both:
- latest_materialization
- latest_reference
That means the flow is not only materializing the asset, but something in the run is also referencing it afterward. So there is definitely asset-aware code still executing in that flow path.
Because you are using Prefect Cloud
The “48 days ago” part is best understood as history retention in Cloud UI/events. But the new daily reappearance is not caused by retention. Retention explains why old entries are visible; it does not explain why latest_materialization keeps updating. A live run is doing that.
What I would check in order
1. Search all deployments for the flow run that owns flow_run_id = 06904cc1-501e-7495-8000-1bc51e677ebd
2. Check if that deployment still has an active schedule
3. Confirm what code source that deployment is using
- remote git source
- Docker image tag
- local worker filesystem
- baked image with stale code
4. Check whether multiple deployments exist for the same flow
- often an “old” deployment is forgotten
5. Search your codebase for the asset key suffix
- matched_matcher_manual_domain
- and also search for the human-readable name
6. Check if a helper abstraction still emits asset events
- sometimes materializations are not directly visible as @materialize anymore because they happen through a wrapper/util
Likely scenario
The most likely explanation is:
- you removed the materialization code in your current branch/repo
- but a deployment in Prefect Cloud is still running older code every day
- each run emits the same asset key again
- Cloud then shows the asset as active again
What would confirm this immediately
If you click that flow run and the code/deployment points to an older image tag, commit SHA, or deployment version, that’s your answer.
If you want, send me any of the following and I can help pinpoint it quickly:
- the flow run details for 06904cc1-501e-7495-8000-1bc51e677ebd
- the deployment configuration
- how you deploy today (prefect deploy, Docker image, git-based source, etc.)
- whether workers pull latest code or run a fixed image
And one extra note: if you share the deployment method, I can tell you the most likely stale-code failure mode for that setup.Vimalendra Rohit Nekkanti
05/05/2026, 8:28 AMMarvin
05/05/2026, 8:28 AMMarvin
05/05/2026, 8:29 AMflow_run_id from the asset event doesn’t correspond to a run you can find in Prefect Cloud, then the most likely explanation is stale/foreign event data rather than a currently existing flow run.
A few possibilities:
1. The event is old/stale history
- Asset views are built from event data.
- If the event store still has asset events, the UI can show latest_materialization / latest_reference even when the linked flow run record is no longer available in the UI.
- That can happen if flow runs were deleted/pruned but the asset event history remains.
2. The event came from a different workspace/account context
Your payload includes:
- originating_workspace_id: null
That’s a little notable. It may indicate the event metadata doesn’t have a workspace association in the way you’d expect, so the asset history can outlive or be disconnected from the current visible run records.
3. The flow run record no longer exists, but the asset event does
This is probably the cleanest explanation if:
- the asset still shows a latest_materialization
- but the run ID cannot be opened anywhere
That means the asset page is rendering from the event stream, not from a live run lookup.
So at this point, I would not assume a currently active deployment unless you also see new timestamps continuing to advance every day.
Important question:
Are the timestamps like 2025-10-31T14:48:08Z continuing to move forward each day, or are they fixed on the same recent date?
Because there are two very different cases:
Case A — timestamps keep changing daily
- then something is definitely still emitting events
- and we need to find the source
Case B — timestamps are static, but the assets remain visible
- then this is almost certainly retained historical event data / UI persistence
- not an active job recreating them
Given your latest message, I’d lean more toward Case B unless you’ve confirmed those timestamps keep updating.
What to check next
1. Pick one asset and record:
- last_seen
- latest_materialization.occurred
2. Check it again after the next daily window.
3. If those values change, then events are still being emitted.
4. If they do not change, then the asset is just being shown from retained history.
If they are not changing
Then the behavior is expected from retained asset events in Cloud, and manual asset deletion may not fully remove what can be reconstructed from historical event data.
If they are changing
Then we need to look for the actual emitter outside the obvious flow list:
- another workspace
- another deployment name
- a worker still sending events from old code
- direct event emission / asset instrumentation outside the flow you checked
One other subtle possibility: if your team has changed workspaces/environments, the asset key may be the same but the event provenance may not line up with the workspace you’re currently inspecting.
So my recommendation is:
First confirm whether last_seen is still advancing.
If you want, paste:
- whether that timestamp changes tomorrow
- and whether searching Prefect Cloud for the task run id also returns nothing
If both flow run and task run IDs are missing and timestamps are no longer moving, then this looks like retained/disconnected historical asset events rather than an active deployment.Vimalendra Rohit Nekkanti
05/05/2026, 8:32 AMMarvin
05/05/2026, 8:33 AMMarvin
05/05/2026, 8:33 AMlast_seen does not change
- latest_materialization.occurred does not change
- the flow_run_id no longer resolves
- but the same asset reappears every day even after you manually delete it
then this does not look like an active flow recreating the asset.
It looks much more like the asset view is being reconstructed from retained historical event data in Prefect Cloud, and the manual delete is not removing the underlying event history that the UI uses to rebuild that asset.
So in plain terms:
You are deleting the visible asset, but not the historical materialization/reference events behind it.
Then some background refresh/reindex/UI rebuild causes the asset to show up again from those same old events.
Why this fits your symptoms
- The timestamps stay frozen -> no new events are arriving
- The run/task IDs are effectively dead -> these are old events
- The asset returns after deletion -> the source of truth is still historical event data, not a live deployment
That means this is likely either:
1. expected behavior of the current asset/event model in Cloud, or
2. a Cloud-side bug in asset deletion, where deletion hides the asset temporarily but a later refresh reconstructs it from retained events
Given your description, I would strongly suspect #2 or a product limitation around deletion semantics.
Important distinction
There are really two layers here:
- Asset event history — old prefect.asset.* events
- Current asset listing — what the UI renders
If the UI can derive the asset from old events, then deleting only the listing won’t be durable.
What you can do right now
Since you’re on Prefect Cloud, you do not control event-retention internals the same way as self-hosted Server. So there probably isn’t a self-serve cleanup knob for you to permanently purge those old asset events.
At this point, the most accurate guidance is:
- this does not appear to be caused by currently running code
- this does not appear to be caused by a still-active deployment
- it does appear that old asset events are still present in Cloud and are enough to recreate the asset after deletion
Most likely conclusion
This is likely a Prefect Cloud issue / limitation with asset deletion when historical asset events still exist.
Because I can’t file this for you, the best next step is to contact Prefect directly and include exactly what you already collected:
- the asset key
- the frozen last_seen
- the frozen latest_materialization.occurred
- the non-resolving flow_run_id
- the fact that the asset reappears daily after manual deletion without timestamp changes
Contact:
- Prefect contact
If helpful, you can send them a concise report like this:
We are using Prefect Cloud.
We deleted several assets manually, and they reappear every day in the UI.
However, these assets do not appear to be actively rematerialized:
- `last_seen` does not change
- `latest_materialization.occurred` does not change
- the referenced `flow_run_id` and `task_run_id` do not resolve to existing runs
Example asset:
- key: `<athena://layered_data_dev/a47c9a3e8ecf24e7e8681503edfa0e85d_matched_matcher_manual_domain>`
- last_seen: `2025-10-31T14:49:31.704129Z`
- latest_materialization.occurred: `2025-10-31T14:48:08.829006Z`
This suggests the asset is being reconstructed from retained historical asset events after deletion, rather than from active runs. Can you confirm whether this is expected behavior or a bug in Prefect Cloud asset deletion?
If you want, I can also help you turn this into a shorter bug report for GitHub discussion/issues, but based on what you’ve shown, I would describe it as historical asset events resurrecting deleted assets in Cloud.Vimalendra Rohit Nekkanti
05/05/2026, 8:35 AMMarvin
05/05/2026, 8:35 AMMarvin
05/05/2026, 8:35 AMDeleted assets reappear in Prefect Cloud without new materialization events
Suggested issue body
### Description
In Prefect Cloud, we manually delete assets from the UI, but the same assets reappear later even though they do not appear to be actively rematerialized.
### What we observed
For affected assets:
- `last_seen` does not change
- `latest_materialization.occurred` does not change
- the referenced `flow_run_id` and `task_run_id` do not resolve to existing runs in the workspace
- after manual deletion, the same assets reappear later with the exact same historical data
This suggests the assets may be getting reconstructed from retained historical asset events rather than from active flow runs.
### Example asset payload
{
"key": "athena://layered_data_dev/a47c9a3e8ecf24e7e8681503edfa0e85d_matched_matcher_manual_domain",
"properties": {
"name": "Matched on Matcher Manual Domain Only",
"url": "",
"description": "The domain input list matched to infobel unique ids based on the manual matches, but only using the domain to join on and not include the country. This is used as a fallback for when we have a manual match on the domain but the countries do not match. So for example a domain on a Ducth IP can than be matched to a German holding when a manual match exists in Germany. This is done to provide a good as possible match",
"owners": [
"pim@leadinfo.com"
]
},
"last_seen": "2025-10-31T144931.704129Z",
"latest_reference": {
"event_id": "019a3abe-c338-799b-aacd-84c6c6ba4d75",
"occurred": "2025-10-31T144931.704129Z",
"flow_run_id": "06904cc1-501e-7495-8000-1bc51e677ebd",
"task_run_id": "019a3abe-71d9-7c7f-803d-249140b0d5f1",
"originating_workspace_id": null,
"metadata": {}
},
"latest_materialization": {
"event_id": "019a3abd-7f7d-77ab-86f7-60b5f9cc0a46",
"occurred": "2025-10-31T144808.829006Z",
"flow_run_id": "06904cc1-501e-7495-8000-1bc51e677ebd",
"task_run_id": "019a3abd-5ac6-7621-9a49-cd0f6d0a5103",
"originating_workspace_id": null,
"metadata": {},
"by_tools": [],
"status": "succeeded"
}
}
### Expected behavior
When an asset is manually deleted, it should either:
- remain deleted unless new events are emitted, or
- the product should clearly indicate that historical retained events will recreate the asset
### Actual behavior
The asset reappears later with unchanged historical timestamps and references to flow/task runs that do not exist anymore.
### Environment
- Prefect Cloud
- Prefect 3.x
- No evidence of new materialization events for the affected assets
- `last_seen` remains unchanged between deletions/reappearances
If you want, I can also make this:
1. shorter and more GitHub-ready, or
2. more support-ticket style for the contact form.Vimalendra Rohit Nekkanti
05/05/2026, 2:40 PMMarvin
05/05/2026, 2:40 PMMarvin
05/05/2026, 2:40 PM2026-05-05
- But each asset’s timestamps are old:
- `last_seen`: 2026-04-15...
- `latest_materialization`: 2026-04-28...
- That means they are new to your current asset listing snapshot, not newly materialized on May 5
- In other words: the assets are reappearing, but their underlying event timestamps are not being updated
That is exactly the pattern you’d expect if:
- the assets were deleted from the visible asset list
- Prefect Cloud later rebuilt/re-surfaced them from retained historical asset/event data
It does not fit an active-rematerialization explanation.
There’s also another notable clue:
For many of these assets,
- latest_materialization is later than last_seen
That suggests last_seen may not simply mean “last time this asset existed in the UI.” It may reflect a reference-type event or another event-derived timestamp, while the materialization history is preserved separately. That makes the case even stronger that the asset UI is being synthesized from event history rather than a single canonical asset row.
What this means for the report
You now have much better evidence that:
1. The assets reappear after deletion
2. They reappear with unchanged historical timestamps
3. They are not being freshly materialized at the time they reappear
4. Therefore, deletion is likely not removing the historical records Cloud uses to reconstruct assets
That’s a much stronger bug report.
Recommended issue title
Deleted assets reappear in Prefect Cloud from historical state/events without new materializations
Updated issue body
### Description
In Prefect Cloud, manually deleted assets reappear later even though they are not being newly materialized.
### What we observed
We monitor our asset list externally. After manually deleting assets, the same assets show up again later, but with unchanged historical timestamps.
Example monitor output:
2026-05-05T072917Z New layered_data_dev assets detected: 10
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_xing", "last_seen": "2026-04-15T181909.792945Z", "latest_materialization": "2026-04-28T134903.765353Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_domain", "last_seen": "2026-04-15T181906.607191Z", "latest_materialization": "2026-04-28T134859.746878Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_domain_country", "last_seen": "2026-04-15T181900.656565Z", "latest_materialization": "2026-04-28T134854.515172Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_vat", "last_seen": "2026-04-15T181855.305439Z", "latest_materialization": "2026-04-28T134848.960320Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_coc", "last_seen": "2026-04-15T181843.456839Z", "latest_materialization": "2026-04-28T134837.230402Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_phone", "last_seen": "2026-04-15T181833.060078Z", "latest_materialization": "2026-04-28T134825.696189Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_phone_country", "last_seen": "2026-04-15T181823.098659Z", "latest_materialization": "2026-04-28T134816.912536Z"}
2026-05-05T072917Z {"key": "athena://layered_data_dev/output_table_prefix/matched_matcher_manual_domain", "last_seen": "2026-04-15T181814.702194Z", "latest_materialization": "2026-04-28T134805.232442Z"}Marvin
05/05/2026, 2:40 PM### Why this seems incorrect
These assets are detected as newly present in the asset list on 2026-05-05, but their timestamps are still old:
- `last_seen` remains in April
- `latest_materialization` remains in April
So the assets appear to be reappearing from retained historical asset/event state, not from new materialization events.
We also checked referenced flow/task run IDs for some assets, and they do not resolve to currently visible runs.
### Expected behavior
If an asset is manually deleted, it should either:
- stay deleted unless a new event/materialization recreates it, or
- the product should clearly document that historical retained asset events will recreate deleted assets
### Actual behavior
Deleted assets reappear in Prefect Cloud with old timestamps and without evidence of new materialization activity.
### Environment
- Prefect Cloud
- Prefect 3.x
### Additional context
We removed asset materializations and dependencies from our codebase, and we do not see evidence that these assets are being actively rebuilt now. The reappearing assets seem tied to historical state rather than current executions.
My recommendation
Use that as either:
- a GitHub issue: Prefect issues
- or a Cloud support/contact request: prefect.io/contact
For Cloud-specific behavior, the contact form is probably the better first step.
If you want, I can do one more pass and turn this into:
- a very short support-form version, or
- a polished GitHub issue version with less repetition.