stateDiagram-v2 direction TB state "analysis_jobs" as AJ { [*] --> pending pending --> queued: enqueue song_analysis.start queued --> running: worker claimed job running --> finalizing: all line tasks finished finalizing --> succeeded: summary assembled finalizing --> partial: some line tasks failed running --> failed: fatal setup error queued --> canceled: canceled before execution running --> canceled: canceled by user/admin partial --> queued: retry failed lines failed --> queued: manual retry succeeded --> [*] partial --> [*] failed --> [*] canceled --> [*] } state "line_analysis_tasks" as LT { [*] --> pending pending --> queued: enqueue line_analysis.generate queued --> running: worker claimed task running --> succeeded: line analysis saved running --> retry_wait: transient LLM / network error retry_wait --> queued: backoff elapsed running --> failed: attempts exhausted / validation failed queued --> canceled: parent job canceled running --> canceled: parent job canceled failed --> queued: manual retry succeeded --> [*] failed --> [*] canceled --> [*] }
第二版
stateDiagram-v2 direction TB state "analysis_jobs" as AJ { [*] --> pending: job created pending --> queued: enqueue song_analysis.start queued --> planning: song_analysis.start claimed planning --> running: line tasks enqueued running --> finalizing: all line tasks reached terminal state finalizing --> succeeded: result assembled and validated finalizing --> partial: result assembled with failed lines finalizing --> failed: assemble / validation fatal error running --> canceling: cancel requested queued --> canceled: cancel before start planning --> canceled: cancel during planning canceling --> canceled: queued/running tasks canceled partial --> queued: retry failed lines failed --> queued: manual retry canceled --> queued: manual restart succeeded --> [*] partial --> [*] failed --> [*] canceled --> [*] } state "analysis_tasks" as AT { [*] --> pending: task row created pending --> queued: available_at reached queued --> running: worker claimed task running --> succeeded: task output saved running --> retry_wait: transient error and attempts remain retry_wait --> queued: backoff elapsed running --> failed: attempts exhausted running --> failed: deterministic validation failed queued --> canceled: parent job canceled retry_wait --> canceled: parent job canceled running --> canceling: parent job canceled canceling --> canceled: worker acknowledged cancel failed --> queued: manual retry canceled --> queued: manual restart succeeded --> [*] failed --> [*] canceled --> [*] } state "task types in analysis_tasks" as TT { [*] --> song_analysis_start song_analysis_start --> line_analysis_generate: creates N line tasks line_analysis_generate --> song_analysis_summarize: all line tasks terminal song_analysis_summarize --> song_analysis_assemble song_analysis_assemble --> song_analysis_validate song_analysis_validate --> [*] }