Keep a flow's runs when the flow goes
A run record is a record of what ran, so deleting a flow no longer sweeps its
history: `_forget_runs` is gone from the flow-delete path, and `DELETE /runs/{id}`
is the only thing that removes a run one at a time. The in-flight guard stays —
that is about work, not history.
`DELETE /runs?flow=` is the counterpart to the list's flow filter and what a
reseed needs, sharing the four statements with the single-run delete and
refusing the same way while a run of that flow is still going.
A run whose flow is gone reads as one: `useFlowInputs` reports the 404 rather
than an empty declaration set, so the run page says "flow deleted", explains it,
and disables Retry, which the route would refuse anyway.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CL9zvnnvcp1mvA8o7impxk
This commit is contained in:
@@ -299,10 +299,17 @@ def test_delete_flow(
|
||||
client.get(f"{PREFIX}/demo", headers=superuser_token_headers).status_code == 404
|
||||
)
|
||||
|
||||
# Deleting the flow takes its runs with it, so a reseeded demo starts clean.
|
||||
# The run outlives the flow: a run record is a record of what ran, and
|
||||
# `DELETE /runs?flow=` is the only thing that clears one.
|
||||
db.expire_all()
|
||||
for model in (Run, RunNode, RunMetric, RunArtifact):
|
||||
assert db.exec(select(func.count()).select_from(model)).one() == 0
|
||||
assert db.exec(select(func.count()).select_from(model)).one() == 1
|
||||
assert (
|
||||
client.get(
|
||||
f"{settings.API_V1_STR}/runs/run-1", headers=superuser_token_headers
|
||||
).status_code
|
||||
== 200
|
||||
)
|
||||
|
||||
|
||||
def test_delete_flow_is_refused_while_a_run_is_live(
|
||||
|
||||
Reference in New Issue
Block a user