⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’

Excalidraw Data

Text Elements

analysis_jobs

pending

queued

running

finalizing

succeeded

partial

failed

canceled

line_analysis_tasks

retry_wait

enqueue song_analysis.start

worker claimed job

all line tasks finished

summary assembled

some line tasks failed

fatal setup error

canceled before execution

canceled by user/admin

retry failed lines

manual retry

enqueue line_analysis.generate

worker claimed task

line analysis saved

transient LLM / network error

backoff elapsed

attempts exhausted / validation failed

parent job canceled

parent job canceled

manual retry

analysis_jobs

pending

queued

planning

running

finalizing

succeeded

partial

failed

canceling

canceled

analysis_tasks

retry_wait

task types in analysis_tasks

song_analysis_start

line_analysis_generate

song_analysis_summarize

song_analysis_assemble

song_analysis_validate

job created

enqueue song_analysis.start

song_analysis.start claimed

line tasks enqueued

all line tasks reached terminal state

result assembled and validated

result assembled with failed lines

assemble / validation fatal error

cancel requested

cancel before start

cancel during planning

queued/running tasks canceled

retry failed lines

manual retry

manual restart

task row created

available_at reached

worker claimed task

task output saved

transient error and attempts remain

backoff elapsed

attempts exhausted

deterministic validation failed

parent job canceled

parent job canceled

parent job canceled

worker acknowledged cancel

manual retry

manual restart

creates N line tasks

all line tasks terminal

song_analysis.start

Normalize lyrics

RuleBasedChunkPlanner

Create chunk_analysis.generate tasks

Worker executes chunk_analysis.generate

Call LLM

Parse JSON

Chunk JSON valid?

retry_wait with backoff

chunk task failed

Output range valid?

Save ChunkAnalysisOutput

chunk task succeeded

All chunk tasks terminal?

song_analysis.summarize

song_analysis.assemble

song_analysis.validate

No, attempts remain

No, attempts exhausted

Yes

No, attempts remain

No, attempts exhausted

Yes

No

Yes

analysis_jobs

pending

queued

planning

running

finalizing

succeeded

partial

failed

canceled

enqueue song_analysis.start

song_analysis.start claimed

chunk tasks enqueued

all chunk tasks terminal

all chunks valid

some chunks failed but result usable

fatal assemble / validate error

retry failed chunks requested

manual retry

retry_failed_chunks claimed and failed tasks requeued

POST /lyrics-analysis/jobs

Create AnalysisJob: pending

Create task: song_analysis.start

Job: queued

Execute song_analysis.start

Normalize lyrics into LyricLine[]

RuleBasedChunkPlanner creates ChunkPlan

Create N chunk_analysis.generate tasks

Job: running

Workers execute chunk_analysis.generate

Call LLM

Parse JSON

Validate chunk JSON + output range

Save ChunkAnalysisOutput

retry_wait

chunk task failed

All chunk tasks terminal?

Create task: song_analysis.assemble

Assemble final SongAnalysisResult

Create task: song_analysis.validate

Final validation

Job: succeeded

Job: partial

Job: failed

valid

invalid, attempts remain

attempts exhausted

No

Yes

complete valid

usable with failed chunks

fatal invalid