
=== 2026-05-07 15:20:58 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152047-fa30f6 --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152047-fa30f6' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152047-fa30f6.yaml
[   INFO   ] MusicExtractorSVM: no classifier models were configured by default
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] FrameCutter: dropping incomplete frame
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] FrameCutter: dropping incomplete frame
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')

======================================================================
music-pipeline3000 v2 | 4 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[15:21:00] 🏥 Health check...
[15:21:02] ✅ qishui: OK
[15:21:02] ✅ netease: OK
[15:21:02] ✅ qq: OK

[15:21:02] 🔍 [01_Beautiful Crazy_20260507] Step 0: Fetching...
[15:21:02] 🔍 [02_Last Night_20260507] Step 0: Fetching...
[15:21:02] 🔍 [03_Love Story_20260507] Step 0: Fetching...
[15:21:02] 🔍 [04_You Belong With Me_20260507] Step 0: Fetching...
[15:21:05] ✅ [02_Last Night_20260507] Step 0: netease | 1855c lyrics
[15:21:05] ⬇️  [02_Last Night_20260507] Step 0.5: Download from netease...
[15:21:05] ✅ [03_Love Story_20260507] Step 0: netease | 1873c lyrics
[15:21:05] ⬇️  [03_Love Story_20260507] Step 0.5: Download from netease...
[15:21:05] ✅ [01_Beautiful Crazy_20260507] Step 0: netease | 1187c lyrics
[15:21:05] ⬇️  [01_Beautiful Crazy_20260507] Step 0.5: Download from netease...
[15:21:08] ✅ [04_You Belong With Me_20260507] Step 0: netease | 2053c lyrics
[15:21:08] ⬇️  [04_You Belong With Me_20260507] Step 0.5: Download from netease...
[15:21:10] ✅ [02_Last Night_20260507] Step 0.5: 3278653 bytes | 163.9s
[15:21:10] 🔬 [02_Last Night_20260507] Step 0.75: Audio features...
[15:21:10] ✅ [01_Beautiful Crazy_20260507] Step 0.5: 3622273 bytes | 193.5s
[15:21:10] 🔬 [01_Beautiful Crazy_20260507] Step 0.75: Audio features...
[15:21:11] ✅ [03_Love Story_20260507] Step 0.5: 4560260 bytes | 236.3s
[15:21:11] 🔬 [03_Love Story_20260507] Step 0.75: Audio features...
[15:21:23] ✅ [04_You Belong With Me_20260507] Step 0.5: 5008224 bytes | 231.2s
[15:21:23] 🔬 [04_You Belong With Me_20260507] Step 0.75: Audio features...
[15:21:39] ✅ [02_Last Night_20260507] Step 0.75: BPM=101.99 Key=F# major (29.0s)
[15:21:39] 🧠 [02_Last Night_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:21:39.308Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/02_Last Night_20260507/song_pgc.mp3", "has_features": true}}
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] FrameCutter: dropping incomplete frame
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')
[15:21:50] ✅ [01_Beautiful Crazy_20260507] Step 0.75: BPM=102.68 Key=B major (40.0s)
[15:21:50] 🧠 [01_Beautiful Crazy_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:21:50.854Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/01_Beautiful Crazy_20260507/song_pgc.mp3", "has_features": true}}
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] FrameCutter: dropping incomplete frame
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')
[15:22:12] ✅ [03_Love Story_20260507] Step 0.75: BPM=118.39 Key=D major (32.8s)
[15:22:12] 🧠 [03_Love Story_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:22:12.124Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/song_pgc.mp3", "has_features": true}}
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')
[15:22:14] ✅ [04_You Belong With Me_20260507] Step 0.75: BPM=129.68 Key=F# major (23.9s)
[15:22:14] 🧠 [04_You Belong With Me_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:22:14.822Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/song_pgc.mp3", "has_features": true}}
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:22:41.787Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 3.8, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:22:41.787Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 62.479}
[15:22:41] ❌ [02_Last Night_20260507] Step 1: http_503 (3.8s)
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:22:49.055Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 5.8, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:22:49.055Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 58.201}
[15:22:49] ❌ [01_Beautiful Crazy_20260507] Step 1: http_503 (5.8s)
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:23:26.891Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 5.1, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:23:26.891Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 74.767}
[15:23:26] ❌ [03_Love Story_20260507] Step 1: http_503 (5.1s)
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:23:46.259Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 15.9, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:23:46.259Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 91.437}
[15:23:46] ❌ [04_You Belong With Me_20260507] Step 1: http_503 (15.9s)

======================================================================
SUMMARY | 164s (2.7min)
======================================================================
✅ Done: 0 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 4
[exit 0]

=== 2026-05-07 15:23:46 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 --profile __runtime_batch-20260507-152047-fa30f6 --resume-mode each --skip-feishu ===
{"timestamp": "2026-05-07T15:23:46.974466+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6", "profile": "__runtime_batch-20260507-152047-fa30f6", "concurrency": 3, "resume_mode": "each", "pending_song_count": 0, "groups": [], "status": "noop", "resume": null}
[exit 0]

=== 2026-05-07 15:23:47 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[Feishu] No successful songs to export.
[exit 0]

=== 2026-05-07 15:28:32 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152047-fa30f6 --resume /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152047-fa30f6' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152047-fa30f6.yaml

======================================================================
music-pipeline3000 v2 | 4 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
Skip Suno: False | Step1 only: False | Version: v4
======================================================================

[15:28:34] 🏥 Health check...
[15:28:35] ✅ qishui: OK
[15:28:35] ✅ netease: OK
[15:28:35] ✅ qq: OK

[15:28:35] 🧠 [01_Beautiful Crazy_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:35.678Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/01_Beautiful Crazy_20260507/song_pgc.mp3", "has_features": true}}
[15:28:35] 🧠 [02_Last Night_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:35.736Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/02_Last Night_20260507/song_pgc.mp3", "has_features": true}}
[15:28:35] 🧠 [03_Love Story_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:35.783Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/song_pgc.mp3", "has_features": true}}
[15:28:35] 🧠 [04_You Belong With Me_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:35.826Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/song_pgc.mp3", "has_features": true}}

=== 2026-05-07 15:28:39 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152047-fa30f6 --resume /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152047-fa30f6' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152047-fa30f6.yaml

======================================================================
music-pipeline3000 v2 | 4 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
Skip Suno: False | Step1 only: False | Version: v4
======================================================================

[15:28:40] 🏥 Health check...
[15:28:42] ✅ qishui: OK
[15:28:42] ✅ netease: OK
[15:28:42] ✅ qq: OK

[15:28:42] 🧠 [01_Beautiful Crazy_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:42.831Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/01_Beautiful Crazy_20260507/song_pgc.mp3", "has_features": true}}
[15:28:42] 🧠 [02_Last Night_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:42.891Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/02_Last Night_20260507/song_pgc.mp3", "has_features": true}}
[15:28:42] 🧠 [03_Love Story_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:42.942Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/song_pgc.mp3", "has_features": true}}
[15:28:42] 🧠 [04_You Belong With Me_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:42.980Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/song_pgc.mp3", "has_features": true}}

=== 2026-05-07 15:28:43 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152047-fa30f6 --resume /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152047-fa30f6' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152047-fa30f6.yaml

======================================================================
music-pipeline3000 v2 | 4 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
Skip Suno: False | Step1 only: False | Version: v4
======================================================================

[15:28:44] 🏥 Health check...
[15:28:46] ✅ qishui: OK
[15:28:46] ✅ netease: OK
[15:28:46] ✅ qq: OK

[15:28:46] 🧠 [01_Beautiful Crazy_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:46.137Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/01_Beautiful Crazy_20260507/song_pgc.mp3", "has_features": true}}
[15:28:46] 🧠 [02_Last Night_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:46.192Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/02_Last Night_20260507/song_pgc.mp3", "has_features": true}}
[15:28:46] 🧠 [03_Love Story_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:46.235Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/song_pgc.mp3", "has_features": true}}
[15:28:46] 🧠 [04_You Belong With Me_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:46.269Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/song_pgc.mp3", "has_features": true}}
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:29:09.333Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 3.6, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:29:09.333Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 33.655}
[15:29:09] ❌ [01_Beautiful Crazy_20260507] Step 1: http_503 (3.6s)
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:29:09.393Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 3.4, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:29:09.393Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 33.656}
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:29:27.109Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 5.9, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:29:27.109Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 40.917}
[15:29:27] ❌ [02_Last Night_20260507] Step 1: http_503 (5.9s)
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:29:35.186Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 3.4, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:29:35.186Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 49.049}
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  📊 Gemini official: 51s | prompt_tokens=9637 completion=1405
{"__trace__": true, "ts": "2026-05-07T07:29:47.437Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 51.4, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:29:47.437Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "01_Beautiful Crazy_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 64.606}
[15:29:47] ⚠️  [01_Beautiful Crazy_20260507] Step 1.5: prompt 1140c > 1000c, compressing...
  📏 [01_Beautiful Crazy_20260507] prompt 1140c → 828c (smart truncate)
[15:29:47] ✅ [01_Beautiful Crazy_20260507] Step 1.5: prompt compressed 1140c → 828c
[15:29:47] ✅ [01_Beautiful Crazy_20260507] Step 1: 51.4s | prompt=828c | prompt_ok=True lyrics_ok=True
[15:29:47] 🌐 [01_Beautiful Crazy_20260507] Step 2: target_language=auto → lang_mode=EN
[15:29:47] 🤖 [01_Beautiful Crazy_20260507] Step 2 API: 34245 chars ≈ 8561 tokens → claude-sonnet-4-6
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:29:50.992Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 4.2, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:29:50.992Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 68.101}
[15:29:09] ❌ [02_Last Night_20260507] Step 1: http_503 (3.4s)
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:29:52.215Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 5.6, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:29:52.216Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 76.39}
[15:29:50] ❌ [02_Last Night_20260507] Step 1: http_503 (4.2s)
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
[15:30:19] ⚠️  [01_Beautiful Crazy_20260507] Step 2 API: originality 50% < 85% | 1 copied phrases
          ❗ "over the V chord, building significant tension that demands the resolution of the final chorus.)" ~ "over the V chord, building significant tension that demands the resolution of the final chorus.)" (100%)
[15:30:19] 🔄 [01_Beautiful Crazy_20260507] Step 2 API: originality retry 1/3...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T07:30:32.123Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 7.4, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:30:32.123Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 109.18}
[15:29:35] ❌ [01_Beautiful Crazy_20260507] Step 1: http_503 (3.4s)
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  📊 Gemini official: 48s | prompt_tokens=11184 completion=1620
{"__trace__": true, "ts": "2026-05-07T07:30:34.161Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 47.9, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:30:34.161Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 107.926}
[15:29:52] ❌ [04_You Belong With Me_20260507] Step 1: http_503 (5.6s)
  📊 Gemini official: 53s | prompt_tokens=11184 completion=1775
{"__trace__": true, "ts": "2026-05-07T07:30:47.795Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 53.0, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:30:47.795Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "03_Love Story_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 132.012}
[15:30:34] ⚠️  [03_Love Story_20260507] Step 1.5: prompt 1302c > 1000c, compressing...
  📏 [03_Love Story_20260507] prompt 1302c → 967c (smart truncate)
[15:30:34] ✅ [03_Love Story_20260507] Step 1.5: prompt compressed 1302c → 967c
[15:30:34] ✅ [03_Love Story_20260507] Step 1: 47.9s | prompt=967c | prompt_ok=True lyrics_ok=True
[15:30:34] 🌐 [03_Love Story_20260507] Step 2: target_language=auto → lang_mode=EN
[15:30:34] 🤖 [03_Love Story_20260507] Step 2 API: 35299 chars ≈ 8824 tokens → claude-sonnet-4-6
  📊 Gemini official: 57s | prompt_tokens=11057 completion=1927
{"__trace__": true, "ts": "2026-05-07T07:30:51.581Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 57.1, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:30:51.581Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 125.312}
[15:30:32] ❌ [03_Love Story_20260507] Step 1: http_503 (7.4s)
[15:30:56] ⚠️  [01_Beautiful Crazy_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[15:30:56] ⚠️  [01_Beautiful Crazy_20260507] Step 2 API: best originality 50% after 3 retries
[15:30:56] ✅ [01_Beautiful Crazy_20260507] Step 2 API: 《Flour On Her Hands》 | 31.7s | in=18215 out=2214 | ~$0.088
[15:30:56] ✅ [01_Beautiful Crazy_20260507] Step 2.5: originality 50% ✓
[15:30:56] ✅ [01_Beautiful Crazy_20260507] Step 2: 《Flour On Her Hands》
[15:30:56] 📁 [01_Beautiful Crazy_20260507] Renamed → 01_Beautiful Crazy_Flour_On_Her_Hands_20260507
  📝 [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] lyrics stripped: 4071c → 4065c
[15:30:56] 🎵 [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:30:56] 🎨 [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['cf727ad7', 'e504c9bc']
  🎵 cf727ad7... → submitted
  🎵 e504c9bc... → submitted
  📊 Gemini official: 48s | prompt_tokens=11057 completion=1704
{"__trace__": true, "ts": "2026-05-07T07:31:00.411Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 48.5, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:31:00.411Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "04_You Belong With Me_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 137.43}
[15:30:47] ⚠️  [03_Love Story_20260507] Step 1.5: prompt 1496c > 1000c, compressing...
  📏 [03_Love Story_20260507] prompt 1496c → 895c (smart truncate)
[15:30:47] ✅ [03_Love Story_20260507] Step 1.5: prompt compressed 1496c → 895c
[15:30:47] ✅ [03_Love Story_20260507] Step 1: 53.0s | prompt=895c | prompt_ok=True lyrics_ok=True
[15:30:47] 🌐 [03_Love Story_20260507] Step 2: target_language=auto → lang_mode=EN
[15:30:47] 🤖 [03_Love Story_20260507] Step 2 API: 35566 chars ≈ 8891 tokens → claude-sonnet-4-6
[15:31:33] ⚠️  [03_Love Story_20260507] Step 2 API: originality 49% < 85% | 5 copied phrases
          ❗ "Oh oh" ~ "Oh oh" (100%)
          ❗ "And I said" ~ "And I said" (100%)
          ❗ "And said" ~ "And said" (100%)
          ❗ "Oh oh oh" ~ "Oh oh oh" (100%)
          ❗ "Oh oh oh oh" ~ "Oh oh oh oh" (100%)
[15:31:33] 🔄 [03_Love Story_20260507] Step 2 API: originality retry 1/3...
[15:32:13] ⚠️  [03_Love Story_20260507] Step 2 API retry 1: originality 55%
[15:32:13] 🔄 [03_Love Story_20260507] Step 2 API: originality retry 2/3...
[15:32:55] ⚠️  [03_Love Story_20260507] Step 2 API retry 2: originality 56%
[15:32:55] 🔄 [03_Love Story_20260507] Step 2 API: originality retry 3/3...
[15:33:43] ⚠️  [03_Love Story_20260507] Step 2 API originality retry 3 failed: Expecting value: line 1 column 1 (char 0)
[15:33:43] ⚠️  [03_Love Story_20260507] Step 2 API: best originality 56% after 3 retries
[15:33:43] ⚠️  [03_Love Story_20260507] Step 2 API attempt 1 (175.5s): [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/step2_json_b.json'
[15:34:30] ⚠️  [03_Love Story_20260507] Step 2 API: originality 49% < 85% | 5 copied phrases
          ❗ "Oh oh" ~ "Oh oh" (100%)
          ❗ "Oh oh oh" ~ "Oh oh oh" (100%)
          ❗ "Oh oh oh oh" ~ "Oh oh oh oh" (100%)
          ❗ "And you said" ~ "And I said" (82%)
          ❗ "Baby just say you'll stay" ~ "Baby just say yes" (76%)
[15:34:30] 🔄 [03_Love Story_20260507] Step 2 API: originality retry 1/3...
[15:35:05] ⚠️  [03_Love Story_20260507] Step 2 API retry 1: originality 54%
[15:35:05] 🔄 [03_Love Story_20260507] Step 2 API: originality retry 2/3...
[15:35:52] ⚠️  [03_Love Story_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[15:35:52] ⚠️  [03_Love Story_20260507] Step 2 API: best originality 54% after 3 retries
[15:35:52] ⚠️  [03_Love Story_20260507] Step 2 API attempt 2 (124.4s): [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/step2_json_b.json'
Traceback (most recent call last):
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 958, in <module>
    main()
    ~~~~^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 945, in main
    asyncio.run(run_pipeline(
    ~~~~~~~~~~~^^^^^^^^^^^^^^
        songs, output_dir,
        ^^^^^^^^^^^^^^^^^^
    ...<6 lines>...
        target_language=args.target_language,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ))
    ^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 827, in run_pipeline
    results = await asyncio.gather(*tasks)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 467, in run_song
    state.mark_error("step2", s2.get("error", "API call failed"))
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/utils.py", line 199, in mark_error
    self.save()
    ~~~~~~~~~^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/utils.py", line 184, in save
    self.state_file.write_text(json.dumps(self.state, ensure_ascii=False, indent=2))
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_local.py", line 557, in write_text
    return PathBase.write_text(self, data, encoding, errors, newline)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_abc.py", line 651, in write_text
    with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
         ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_local.py", line 539, in open
    return io.open(self, mode, buffering, encoding, errors, newline)
           ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/03_Love Story_20260507/_state.json'
[exit 1]

=== 2026-05-07 15:35:53 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152047-fa30f6 --resume /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152047-fa30f6' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152047-fa30f6.yaml

======================================================================
music-pipeline3000 v2 | 4 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
Skip Suno: False | Step1 only: False | Version: v4
======================================================================

[15:35:54] 🏥 Health check...
[15:35:56] ✅ qishui: OK
[15:35:56] ✅ netease: OK
[15:35:56] ✅ qq: OK

[15:35:56] ⏭️  [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Already complete, skipping
[15:35:56] 🧠 [02_Last Night_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:35:56.014Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/02_Last Night_20260507/song_pgc.mp3", "has_features": true}}
  📝 [03_Love Story_Hay_Bale_Summer_20260507] lyrics stripped: 4674c → 4668c
[15:35:56] 🎵 [03_Love Story_Hay_Bale_Summer_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:35:56] 🎨 [03_Love Story_Hay_Bale_Summer_20260507] Step 4: SeeDream cover (parallel)...
  📝 [04_You Belong With Me_Gravel_Road_Back_20260507] lyrics stripped: 4925c → 4917c
[15:35:56] 🎵 [04_You Belong With Me_Gravel_Road_Back_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:35:56] 🎨 [04_You Belong With Me_Gravel_Road_Back_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['ccb9c067', 'ae761556']
  ✅ submitted: ['dd2a9d22', '53387547']
  🎵 ccb9c067... → submitted
  🎵 ae761556... → submitted
  🎵 dd2a9d22... → submitted
  🎵 53387547... → submitted
  🎵 ccb9c067... → error
  🎵 ae761556... → error
  ⚠️  2 song(s) failed, returning 0 complete
  ⚠️  removing rejected artist refs from tags: bleachers
  🔄 retry #1...
  🎵 dd2a9d22... → queued
  🎵 53387547... → queued
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  🎵 53387547... → streaming
  ✅ submitted: ['87aa36ff', 'd505edac']
  🎵 87aa36ff... → submitted
  🎵 d505edac... → submitted
  🎵 dd2a9d22... → streaming
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  🎵 87aa36ff... → queued
  🎵 d505edac... → queued
  🎵 87aa36ff... → streaming
  🎵 d505edac... → streaming
  📊 Gemini official: 51s | prompt_tokens=8856 completion=1463
{"__trace__": true, "ts": "2026-05-07T07:37:14.219Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 51.1, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:37:14.220Z", "trace_id": "batch-20260507-152047-fa30f6", "song_key": "02_Last Night_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 78.205}
[15:30:51] ⚠️  [04_You Belong With Me_20260507] Step 1.5: prompt 1115c > 1000c, compressing...
  📏 [04_You Belong With Me_20260507] prompt 1115c → 989c (smart truncate)
[15:30:51] ✅ [04_You Belong With Me_20260507] Step 1.5: prompt compressed 1115c → 989c
[15:30:51] ✅ [04_You Belong With Me_20260507] Step 1: 57.1s | prompt=989c | prompt_ok=True lyrics_ok=True
[15:30:51] 🌐 [04_You Belong With Me_20260507] Step 2: target_language=auto → lang_mode=EN
[15:30:51] 🤖 [04_You Belong With Me_20260507] Step 2 API: 36370 chars ≈ 9092 tokens → claude-sonnet-4-6
[15:31:29] ⚠️  [03_Love Story_20260507] Step 2 API: originality 52% < 85% | 2 copied phrases
          ❗ "over a minor chord , creating a prolonged feeling of doubt and unresolved tension.)" ~ "over a minor chord , creating a prolonged feeling of doubt and unresolved tension.)" (100%)
          ❗ "provides the ultimate harmonic release, resolving all the song's narrative tension in a triumphant climax.)" ~ "provides the ultimate harmonic release, resolving all the song's narrative tension in a triumphant climax.)" (100%)
[15:31:29] 🔄 [03_Love Story_20260507] Step 2 API: originality retry 1/3...
[15:31:50] ⚠️  [04_You Belong With Me_20260507] Step 2 API: originality 55% < 85% | 0 copied phrases
[15:31:50] 🔄 [04_You Belong With Me_20260507] Step 2 API: originality retry 1/3...
[15:32:23] ⚠️  [03_Love Story_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[15:32:23] ⚠️  [03_Love Story_20260507] Step 2 API: best originality 52% after 3 retries
[15:32:23] ✅ [03_Love Story_20260507] Step 2 API: 《Hay Bale Summer》 | 54.8s | in=18447 out=2391 | ~$0.091
[15:32:23] ✅ [03_Love Story_20260507] Step 2.5: originality 55% ✓
[15:32:23] ✅ [03_Love Story_20260507] Step 2: 《Hay Bale Summer》
[15:32:23] 📁 [03_Love Story_20260507] Renamed → 03_Love Story_Hay_Bale_Summer_20260507
  📝 [03_Love Story_Hay_Bale_Summer_20260507] lyrics stripped: 4674c → 4668c
[15:32:23] 🎵 [03_Love Story_Hay_Bale_Summer_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:32:23] 🎨 [03_Love Story_Hay_Bale_Summer_20260507] Step 4: SeeDream cover (parallel)...
[15:32:43] ⚠️  [04_You Belong With Me_20260507] Step 2 API retry 1: originality 55%
[15:32:43] 🔄 [04_You Belong With Me_20260507] Step 2 API: originality retry 2/3...
  ✅ submitted: ['31464aca', 'd21f5790']
  🎵 31464aca... → submitted
  🎵 d21f5790... → submitted
  🎵 31464aca... → error
  🎵 d21f5790... → error
  ⚠️  2 song(s) failed, returning 0 complete
  ⚠️  removing rejected artist refs from tags: bleachers
  🔄 retry #1...
[15:33:54] ⚠️  [04_You Belong With Me_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[15:33:54] ⚠️  [04_You Belong With Me_20260507] Step 2 API: best originality 55% after 3 retries
[15:33:54] ⚠️  [04_You Belong With Me_20260507] Step 2 API attempt 1 (183.2s): [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/step2_json_b.json'
  ✅ submitted: ['acaf4550', '448eb373']
  🎵 acaf4550... → submitted
  🎵 448eb373... → submitted
  🎵 acaf4550... → queued
  🎵 448eb373... → queued
  🎵 acaf4550... → streaming
  🎵 448eb373... → streaming
[15:35:01] ⚠️  [04_You Belong With Me_20260507] Step 2 API: originality 56% < 85% | 0 copied phrases
[15:35:01] 🔄 [04_You Belong With Me_20260507] Step 2 API: originality retry 1/3...
[15:36:03] ⚠️  [04_You Belong With Me_20260507] Step 2 API retry 1: originality 56%
[15:36:03] 🔄 [04_You Belong With Me_20260507] Step 2 API: originality retry 2/3...
  🎵 acaf4550... → complete
[15:37:15] ⚠️  [04_You Belong With Me_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[15:37:15] ⚠️  [04_You Belong With Me_20260507] Step 2 API: best originality 56% after 3 retries
[15:37:15] ⚠️  [04_You Belong With Me_20260507] Step 2 API attempt 2 (195.5s): [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/step2_json_b.json'
Traceback (most recent call last):
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 958, in <module>
    main()
    ~~~~^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 945, in main
    asyncio.run(run_pipeline(
    ~~~~~~~~~~~^^^^^^^^^^^^^^
        songs, output_dir,
        ^^^^^^^^^^^^^^^^^^
    ...<6 lines>...
        target_language=args.target_language,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ))
    ^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 827, in run_pipeline
    results = await asyncio.gather(*tasks)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py", line 467, in run_song
    state.mark_error("step2", s2.get("error", "API call failed"))
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/utils.py", line 199, in mark_error
    self.save()
    ~~~~~~~~~^^
  File "/srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/utils.py", line 184, in save
    self.state_file.write_text(json.dumps(self.state, ensure_ascii=False, indent=2))
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_local.py", line 557, in write_text
    return PathBase.write_text(self, data, encoding, errors, newline)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_abc.py", line 651, in write_text
    with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
         ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_local.py", line 539, in open
    return io.open(self, mode, buffering, encoding, errors, newline)
           ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/04_You Belong With Me_20260507/_state.json'
[exit 1]
[15:31:00] ⚠️  [04_You Belong With Me_20260507] Step 1.5: prompt 1484c > 1000c, compressing...
  📏 [04_You Belong With Me_20260507] prompt 1484c → 984c (smart truncate)
[15:31:00] ✅ [04_You Belong With Me_20260507] Step 1.5: prompt compressed 1484c → 984c
[15:31:00] ✅ [04_You Belong With Me_20260507] Step 1: 48.5s | prompt=984c | prompt_ok=True lyrics_ok=True
[15:31:00] 🌐 [04_You Belong With Me_20260507] Step 2: target_language=auto → lang_mode=EN
[15:31:00] 🤖 [04_You Belong With Me_20260507] Step 2 API: 35488 chars ≈ 8872 tokens → claude-sonnet-4-6
  🎵 cf727ad7... → queued
  🎵 e504c9bc... → queued
  🎵 cf727ad7... → streaming
  🎵 e504c9bc... → streaming
[15:31:42] ⚠️  [04_You Belong With Me_20260507] Step 2 API: originality 52% < 85% | 2 copied phrases
          ❗ ", anchors on the 5th, resolves down to the root on the final phrase; Repeated with slight melodic variation)" ~ ", anchors on the 5th, resolves down to the root on the final phrase; Repeated with slight melodic variation)" (100%)
          ❗ ", anchors on the 5th, resolves down to the root on the final phrase; Repeated with slight melodic variation)" ~ ", anchors on the 5th, resolves down to the root on the final phrase; Repeated with slight melodic variation)" (100%)
[15:31:42] 🔄 [04_You Belong With Me_20260507] Step 2 API: originality retry 1/3...
[15:32:23] ⚠️  [04_You Belong With Me_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[15:32:23] ⚠️  [04_You Belong With Me_20260507] Step 2 API: best originality 52% after 3 retries
[15:32:23] ✅ [04_You Belong With Me_20260507] Step 2 API: 《Gravel Road Back》 | 41.7s | in=18479 out=2516 | ~$0.093
[15:32:23] ✅ [04_You Belong With Me_20260507] Step 2.5: originality 52% ✓
[15:32:23] ✅ [04_You Belong With Me_20260507] Step 2: 《Gravel Road Back》
[15:32:23] 📁 [04_You Belong With Me_20260507] Renamed → 04_You Belong With Me_Gravel_Road_Back_20260507
  📝 [04_You Belong With Me_Gravel_Road_Back_20260507] lyrics stripped: 4925c → 4917c
[15:32:23] 🎵 [04_You Belong With Me_Gravel_Road_Back_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:32:23] 🎨 [04_You Belong With Me_Gravel_Road_Back_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['14bda566', '0754455d']
  🎵 14bda566... → submitted
  🎵 0754455d... → submitted
  🎵 14bda566... → queued
  🎵 0754455d... → queued
  🎵 14bda566... → streaming
  🎵 0754455d... → streaming
  🎵 e504c9bc... → complete
  🎵 cf727ad7... → complete
[15:35:03]    🎧 [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Song 1: https://cdn1.suno.ai/cf727ad7-8c93-4c30-a15b-04474d6aba1e.mp3
[15:35:03]    🎧 [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Song 2: https://cdn1.suno.ai/e504c9bc-d1ba-418d-9578-c82a9188c318.mp3
[15:35:03] 🎛️ [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Step 3.5: 混音...
[15:35:25]    🎚️ [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Song 1: pop | 低36/中57/高7%
[15:35:44]    🎚️ [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Song 2: pop | 低60/中36/高4%
[15:35:44] ✅ [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Step 3.5: 40.5s | 2 songs mixed
[15:35:44] ⚠️  [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Step 4: http_403 (non-fatal)
  🎵 14bda566... → complete
  🎵 0754455d... → complete
[15:37:13]    🎧 [04_You Belong With Me_Gravel_Road_Back_20260507] Song 1: https://cdn1.suno.ai/14bda566-8d82-4b3a-a6f3-b19d7f6c2cf9.mp3
[15:37:13]    🎧 [04_You Belong With Me_Gravel_Road_Back_20260507] Song 2: https://cdn1.suno.ai/0754455d-6116-4af2-bf05-ac9f5b31e7bf.mp3
[15:37:13] 🎛️ [04_You Belong With Me_Gravel_Road_Back_20260507] Step 3.5: 混音...
[15:37:32]    🎚️ [04_You Belong With Me_Gravel_Road_Back_20260507] Song 1: edm | 低33/中58/高9%
[15:37:52]    🎚️ [04_You Belong With Me_Gravel_Road_Back_20260507] Song 2: edm | 低27/中65/高8%
[15:37:52] ✅ [04_You Belong With Me_Gravel_Road_Back_20260507] Step 3.5: 38.9s | 2 songs mixed
[15:37:52] ⚠️  [04_You Belong With Me_Gravel_Road_Back_20260507] Step 4: http_403 (non-fatal)

======================================================================
SUMMARY | 549s (9.2min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 2
[MasterDB] ✅ 批次 batch-20260507-152047-fa30f6 → +2 新增, ~0 更新 | 总计 644 首
[exit 0]

=== 2026-05-07 15:39:31 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152047-fa30f6 --resume /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152047-fa30f6' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152047-fa30f6.yaml
[15:37:14] ⚠️  [02_Last Night_20260507] Step 1.5: prompt 1367c > 1000c, compressing...
  📏 [02_Last Night_20260507] prompt 1367c → 869c (smart truncate)
[15:37:14] ✅ [02_Last Night_20260507] Step 1.5: prompt compressed 1367c → 869c
[15:37:14] ✅ [02_Last Night_20260507] Step 1: 51.1s | prompt=869c | prompt_ok=True lyrics_ok=True
[15:37:14] 🌐 [02_Last Night_20260507] Step 2: target_language=auto → lang_mode=EN
[15:37:14] 🤖 [02_Last Night_20260507] Step 2 API: 34238 chars ≈ 8559 tokens → claude-sonnet-4-6
[15:38:04] ⚠️  [02_Last Night_20260507] Step 2 API: originality 57% < 85% | 1 copied phrases
          ❗ ", creating a pleading, unresolved feeling before resolving down.)" ~ ", creating a pleading, unresolved feeling before resolving down.)" (100%)
[15:38:04] 🔄 [02_Last Night_20260507] Step 2 API: originality retry 1/3...
[15:38:56] ⚠️  [02_Last Night_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[15:38:56] ⚠️  [02_Last Night_20260507] Step 2 API: best originality 57% after 3 retries
[15:38:56] ✅ [02_Last Night_20260507] Step 2 API: 《Wren County Road》 | 50.5s | in=18198 out=2370 | ~$0.090
[15:38:56] ✅ [02_Last Night_20260507] Step 2.5: originality 57% ✓
[15:38:56] ✅ [02_Last Night_20260507] Step 2: 《Wren County Road》
[15:38:56] 📁 [02_Last Night_20260507] Renamed → 02_Last Night_Wren_County_Road_20260507
  📝 [02_Last Night_Wren_County_Road_20260507] lyrics stripped: 3938c → 3932c
[15:38:56] 🎵 [02_Last Night_Wren_County_Road_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:38:56] 🎨 [02_Last Night_Wren_County_Road_20260507] Step 4: SeeDream cover (parallel)...
  🎵 87aa36ff... → complete
  🎵 53387547... → complete
  🎵 dd2a9d22... → complete
[15:39:48]    🎧 [04_You Belong With Me_Gravel_Road_Back_20260507] Song 1: https://cdn1.suno.ai/dd2a9d22-08eb-4c3b-92ec-c949a1bbdb5b.mp3
[15:39:48]    🎧 [04_You Belong With Me_Gravel_Road_Back_20260507] Song 2: https://cdn1.suno.ai/53387547-85af-40e9-8e78-6febee980218.mp3
[15:39:48] 🎛️ [04_You Belong With Me_Gravel_Road_Back_20260507] Step 3.5: 混音...
[15:40:09]    🎚️ [04_You Belong With Me_Gravel_Road_Back_20260507] Song 1: edm | 低33/中58/高9%
[15:40:27]    🎚️ [04_You Belong With Me_Gravel_Road_Back_20260507] Song 2: edm | 低27/中65/高8%
[15:40:27] ✅ [04_You Belong With Me_Gravel_Road_Back_20260507] Step 3.5: 39.0s | 2 songs mixed
[15:40:27] ⚠️  [04_You Belong With Me_Gravel_Road_Back_20260507] Step 4: http_403 (non-fatal)
  ✅ submitted: ['aa2c789b', '2e284686']
  🎵 aa2c789b... → streaming
  🎵 2e284686... → streaming
  🎵 d505edac... → complete
[15:40:27]    🎧 [03_Love Story_Hay_Bale_Summer_20260507] Song 1: https://cdn1.suno.ai/87aa36ff-94e2-448b-9977-0bf9dfdd0686.mp3
[15:40:27]    🎧 [03_Love Story_Hay_Bale_Summer_20260507] Song 2: https://cdn1.suno.ai/d505edac-3b03-4452-a338-89c449952a41.mp3
[15:40:27] 🎛️ [03_Love Story_Hay_Bale_Summer_20260507] Step 3.5: 混音...
[15:40:47]    🎚️ [03_Love Story_Hay_Bale_Summer_20260507] Song 1: pop | 低30/中61/高10%
[15:41:09]    🎚️ [03_Love Story_Hay_Bale_Summer_20260507] Song 2: rock | 低40/中53/高7%
[15:41:09] ✅ [03_Love Story_Hay_Bale_Summer_20260507] Step 3.5: 41.9s | 2 songs mixed
[15:41:09] ⚠️  [03_Love Story_Hay_Bale_Summer_20260507] Step 4: http_403 (non-fatal)
  🎵 aa2c789b... → complete
  🎵 2e284686... → complete
[15:42:38]    🎧 [02_Last Night_Wren_County_Road_20260507] Song 1: https://cdn1.suno.ai/aa2c789b-a6ee-41ca-8936-380de6a766d5.mp3
[15:42:38]    🎧 [02_Last Night_Wren_County_Road_20260507] Song 2: https://cdn1.suno.ai/2e284686-5dd1-4900-aaa4-4dd8774de7f8.mp3
[15:42:38] 🎛️ [02_Last Night_Wren_County_Road_20260507] Step 3.5: 混音...
[15:42:52]    🎚️ [02_Last Night_Wren_County_Road_20260507] Song 1: pop | 低59/中37/高3%
[15:43:06]    🎚️ [02_Last Night_Wren_County_Road_20260507] Song 2: pop | 低63/中32/高5%
[15:43:06] ✅ [02_Last Night_Wren_County_Road_20260507] Step 3.5: 27.7s | 2 songs mixed
[15:43:06] ⚠️  [02_Last Night_Wren_County_Road_20260507] Step 4: http_403 (non-fatal)

======================================================================
SUMMARY | 430s (7.2min)
======================================================================
✅ Done: 4 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260507-152047-fa30f6 → +2 新增, ~2 更新 | 总计 646 首
[exit 0]

=== 2026-05-07 15:43:07 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===

======================================================================
music-pipeline3000 v2 | 4 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
Skip Suno: False | Step1 only: False | Version: v4
======================================================================

[15:39:32] 🏥 Health check...
[15:39:34] ✅ qishui: OK
[15:39:34] ✅ netease: OK
[15:39:34] ✅ qq: OK

[15:39:34] ⏭️  [01_Beautiful Crazy_Flour_On_Her_Hands_20260507] Already complete, skipping
[15:39:34] ⏭️  [04_You Belong With Me_Gravel_Road_Back_20260507] Already complete, skipping
  📝 [02_Last Night_Wren_County_Road_20260507] lyrics stripped: 3938c → 3932c
[15:39:34] 🎵 [02_Last Night_Wren_County_Road_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:39:34] 🎨 [02_Last Night_Wren_County_Road_20260507] Step 4: SeeDream cover (parallel)...
  📝 [03_Love Story_Hay_Bale_Summer_20260507] lyrics stripped: 4674c → 4668c
[15:39:34] 🎵 [03_Love Story_Hay_Bale_Summer_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[15:39:34] 🎨 [03_Love Story_Hay_Bale_Summer_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['3996b761', 'fbe14f01']
  🎵 3996b761... → submitted
  🎵 fbe14f01... → submitted
  ✅ submitted: ['bb020094', '06ce45e5']
  🎵 bb020094... → submitted
  🎵 06ce45e5... → submitted
  🎵 3996b761... → error
  🎵 fbe14f01... → error
  ⚠️  2 song(s) failed, returning 0 complete
  ⚠️  removing rejected artist refs from tags: bleachers
  🔄 retry #1...
  🎵 bb020094... → queued
  🎵 06ce45e5... → queued
  🎵 bb020094... → streaming
  🎵 06ce45e5... → streaming
  ✅ submitted: ['cc07ee6c', '961dc1f6']
  🎵 cc07ee6c... → submitted
  🎵 961dc1f6... → submitted
  🎵 cc07ee6c... → queued
  🎵 961dc1f6... → queued
  🎵 cc07ee6c... → streaming
  🎵 961dc1f6... → streaming
  🎵 bb020094... → complete
  🎵 06ce45e5... → complete
[15:41:58]    🎧 [02_Last Night_Wren_County_Road_20260507] Song 1: https://cdn1.suno.ai/bb020094-27b2-44d0-b653-4046061b9250.mp3
[15:41:58]    🎧 [02_Last Night_Wren_County_Road_20260507] Song 2: https://cdn1.suno.ai/06ce45e5-c1b1-4c82-b07e-2271199bf615.mp3
[15:41:58] 🎛️ [02_Last Night_Wren_County_Road_20260507] Step 3.5: 混音...
[15:42:16]    🎚️ [02_Last Night_Wren_County_Road_20260507] Song 1: pop | 低59/中37/高3%
[15:42:32]    🎚️ [02_Last Night_Wren_County_Road_20260507] Song 2: pop | 低63/中32/高5%
[15:42:32] ✅ [02_Last Night_Wren_County_Road_20260507] Step 3.5: 34.5s | 2 songs mixed
[15:42:32] ⚠️  [02_Last Night_Wren_County_Road_20260507] Step 4: http_403 (non-fatal)
  🎵 cc07ee6c... → complete
  🎵 961dc1f6... → complete
[15:43:41]    🎧 [03_Love Story_Hay_Bale_Summer_20260507] Song 1: https://cdn1.suno.ai/cc07ee6c-3371-4a5b-9102-415981ba33f7.mp3
[15:43:41]    🎧 [03_Love Story_Hay_Bale_Summer_20260507] Song 2: https://cdn1.suno.ai/961dc1f6-59b2-4128-823e-5d53b504b042.mp3
[15:43:41] 🎛️ [03_Love Story_Hay_Bale_Summer_20260507] Step 3.5: 混音...
[15:44:00]    🎚️ [03_Love Story_Hay_Bale_Summer_20260507] Song 1: pop | 低30/中61/高10%
[15:44:21]    🎚️ [03_Love Story_Hay_Bale_Summer_20260507] Song 2: rock | 低40/中53/高7%
[15:44:21] ✅ [03_Love Story_Hay_Bale_Summer_20260507] Step 3.5: 39.7s | 2 songs mixed
[15:44:21] ⚠️  [03_Love Story_Hay_Bale_Summer_20260507] Step 4: http_403 (non-fatal)

======================================================================
SUMMARY | 287s (4.8min)
======================================================================
✅ Done: 4 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260507-152047-fa30f6 → +0 新增, ~4 更新 | 总计 646 首
[exit 0]

=== 2026-05-07 15:44:22 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6 ===
[Feishu] ✅ Exported 4 songs to: https://ccnu62373cgc.feishu.cn/sheets/ZBqysEerahEOMKtLC0qc1UyknTb
[Feishu] 📐 Expanded master sheet from 583 to 687 rows
[Feishu] ✅ Appended 4 new songs to master sheet (rows 584-587)
[MasterDB] ✅ 批次 batch-20260507-152047-fa30f6 → +4 新增, ~0 更新 | 总计 587 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/ZBqysEerahEO
[15:43:16] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Flour On Her Hands] topic head sent (message_id=om_x100b50f06799ccacb4858f068d15451)
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V1_raw.mp3 replied
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V1_mixed.mp3 replied
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V2_raw.mp3 replied
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V2_mixed.mp3 replied
[Feishu IM] ✅ [Wren County Road] topic head sent (message_id=om_x100b50f064b0b4a8b4b3d98506b4fd0)
[Feishu IM] ✅ [Wren County Road] Wren County Road_V1_raw.mp3 replied
[Feishu IM] ✅ [Wren County Road] Wren County Road_V1_mixed.mp3 replied
[Feishu IM] ✅ [Wren County Road] Wren County Road_V2_raw.mp3 replied
[Feishu IM] ✅ [Wren County Road] Wren County Road_V2_mixed.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] topic head sent (message_id=om_x100b50f065a31084b3743f3114f2082)
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V1_raw.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V1_mixed.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V2_raw.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V2_mixed.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] topic head sent (message_id=om_x100b50f062f4bc9cb2e1d8cc8d49897)
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V1_raw.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V1_mixed.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V2_raw.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-152047-fa30f6
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6

📊 https://ccnu62373cgc.feishu.cn/sheets/ZBqysEerahEOMKtLC0qc1UyknTb
[exit 0]
[Feishu] ✅ Exported 4 songs to: https://ccnu62373cgc.feishu.cn/sheets/I60NsJc9QhHaOWtWlPLcu1DPnif
[Feishu] ⏭️  Skip duplicate (complete): Beautiful Crazy (https://fileserver.yuchenhu.com/pipeline/batch-20260507-152047-fa30f6/01_Beautiful%20Crazy_Flour_On_Her_Hands_20260507/song_pgc.mp3)
[Feishu] ⏭️  Skip duplicate (complete): Last Night (https://fileserver.yuchenhu.com/pipeline/batch-20260507-152047-fa30f6/02_Last%20Night_Wren_County_Road_20260507/song_pgc.mp3)
[Feishu] ⏭️  Skip duplicate (complete): Love Story (https://fileserver.yuchenhu.com/pipeline/batch-20260507-152047-fa30f6/03_Love%20Story_Hay_Bale_Summer_20260507/song_pgc.mp3)
[Feishu] ⏭️  Skip duplicate (complete): You Belong With Me (https://fileserver.yuchenhu.com/pipeline/batch-20260507-152047-fa30f6/04_You%20Belong%20With%20Me_Gravel_Road_Back_20260507/song_pgc.mp3)
[MasterDB] ✅ 批次 batch-20260507-152047-fa30f6 → +0 新增, ~0 更新 | 总计 587 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/I60NsJc9QhHa
[15:44:32] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Flour On Her Hands] topic head sent (message_id=om_x100b50f060ddd0a0b299a56eb0070a8)
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V1_raw.mp3 replied
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V1_mixed.mp3 replied
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V2_raw.mp3 replied
[Feishu IM] ✅ [Flour On Her Hands] Flour On Her Hands_V2_mixed.mp3 replied
[Feishu IM] ✅ [Wren County Road] topic head sent (message_id=om_x100b50f0603bdcb8b2212326456dd2c)
[Feishu IM] ✅ [Wren County Road] Wren County Road_V1_raw.mp3 replied
[Feishu IM] ✅ [Wren County Road] Wren County Road_V1_mixed.mp3 replied
[Feishu IM] ✅ [Wren County Road] Wren County Road_V2_raw.mp3 replied
[Feishu IM] ✅ [Wren County Road] Wren County Road_V2_mixed.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] topic head sent (message_id=om_x100b50f0612620acb2e1115204b3f89)
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V1_raw.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V1_mixed.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V2_raw.mp3 replied
[Feishu IM] ✅ [Hay Bale Summer] Hay Bale Summer_V2_mixed.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] topic head sent (message_id=om_x100b50f07ff48db4b4adf527adb0387)
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V1_raw.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V1_mixed.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V2_raw.mp3 replied
[Feishu IM] ✅ [Gravel Road Back] Gravel Road Back_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-152047-fa30f6
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-152047-fa30f6

📊 https://ccnu62373cgc.feishu.cn/sheets/I60NsJc9QhHaOWtWlPLcu1DPnif
[exit 0]
