Yep – that all makes sense now. I mistakenly believed that
(setq x-trimmed (extract 0 0.25 (cue x-snd)))
would create a closure that captured the current state of the globals (start, stop, warp, etc) and defer the actual extracting until later. (This is my punishment for knowing too much about lisp.) As I mentioned in https://forum.audacityteam.org/t/when-you-evaluate-a-behavior-is-important/30566/1 I now understand that the extracting takes place at the time that (extract …) is called.
In other words, it all makes sense now. Thanks for helping along the path to enlightenment.
And yes, I also agree that an error message is more appropriate than an assert.