What happens
If a cancel arrives after the pipeline has passed its last cancel check, the job still finishes and lands in the library as done. The cancel flag stays set on it, though, and it is only cleared by a restart.
Several on-demand features on a done track read that flag and stop at once: the vocal split, section detection, lyrics transcription and lyric timing. So the track plays fine, but each of those reports itself as cancelled the moment it starts, until the app is restarted.
Who hits it
Anyone who cancels or trashes an import in its final seconds, during the metadata write or the lyric timing tail. The window is short, but trashing makes it more likely than a plain cancel, because people tend to bin a song that is nearly done.
Constraints for a fix
- The flag is runtime-only (never persisted), which is why a restart hides the problem.
- A job that genuinely finished should not be marked cancelled after the fact: its stems are complete.
What happens
If a cancel arrives after the pipeline has passed its last cancel check, the job still finishes and lands in the library as done. The cancel flag stays set on it, though, and it is only cleared by a restart.
Several on-demand features on a done track read that flag and stop at once: the vocal split, section detection, lyrics transcription and lyric timing. So the track plays fine, but each of those reports itself as cancelled the moment it starts, until the app is restarted.
Who hits it
Anyone who cancels or trashes an import in its final seconds, during the metadata write or the lyric timing tail. The window is short, but trashing makes it more likely than a plain cancel, because people tend to bin a song that is nearly done.
Constraints for a fix