Problem
The intended convert-fork workflow is: convert_session (one copy per variant) → rewind_transcript --cut before → SendMessage each copy a variant prompt → collect answers → delete_conversions to clean up.
But the act of using a fork (SendMessage resumes it) makes it GROW past lines_at_creation, and delete_conversions' growth guard then refuses it:
{"refused":[{"id":"…","reason":"conversion has been resumed or built upon since
creation; someone may depend on it — confirm with the user before removing…"}]}
So the cleanup step refuses every fork the experiment actually drove. The reaper also won't auto-reap grown artifacts (pristine-only). Net: the forks leak, and the user must delete the files by hand. Repro: convert a small session, SendMessage it once, delete_conversions([id]) → refused.
Why the guard exists (don't just rip it out)
The growth guard protects a resumed conversation someone may still depend on. That's correct for the accidental case. The fork-experiment case is the opposite: the user deliberately drove the fork and explicitly wants it gone afterward.
Possible directions (not prescribing)
A force/confirm: true on delete_conversions for grown artifacts; or a way to mark a fork "ephemeral" at convert time so its teardown skips the guard; or scoping the sweep-this-session default to also offer grown forks behind an explicit flag. Whatever keeps the safety net for the accidental case while giving the experiment a clean teardown.
Breadcrumb
Surfaced reproducing a field session's convert→rewind→SendMessage fork experiment (bluetaka). Related to the rewind fixes in #44/#45.
Problem
The intended convert-fork workflow is:
convert_session(one copy per variant) →rewind_transcript --cut before→SendMessageeach copy a variant prompt → collect answers →delete_conversionsto clean up.But the act of using a fork (
SendMessageresumes it) makes it GROW pastlines_at_creation, anddelete_conversions' growth guard then refuses it:So the cleanup step refuses every fork the experiment actually drove. The reaper also won't auto-reap grown artifacts (pristine-only). Net: the forks leak, and the user must delete the files by hand. Repro: convert a small session,
SendMessageit once,delete_conversions([id])→ refused.Why the guard exists (don't just rip it out)
The growth guard protects a resumed conversation someone may still depend on. That's correct for the accidental case. The fork-experiment case is the opposite: the user deliberately drove the fork and explicitly wants it gone afterward.
Possible directions (not prescribing)
A
force/confirm: trueondelete_conversionsfor grown artifacts; or a way to mark a fork "ephemeral" at convert time so its teardown skips the guard; or scoping the sweep-this-session default to also offer grown forks behind an explicit flag. Whatever keeps the safety net for the accidental case while giving the experiment a clean teardown.Breadcrumb
Surfaced reproducing a field session's convert→rewind→SendMessage fork experiment (bluetaka). Related to the rewind fixes in #44/#45.