
=== 2026-05-07 14:35:06 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-143506-3a2f07 --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-143506-3a2f07' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143506-3a2f07.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')
/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-143506-3a2f07
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[14:35:08] 🏥 Health check...
[14:35:11] ✅ qishui: OK
[14:35:11] ✅ netease: OK
[14:35:11] ✅ qq: OK

[14:35:11] 🔍 [01_places to be_20260507] Step 0: Fetching...
[14:35:11] 🔍 [02_Marea (we’ve lost dancing)_20260507] Step 0: Fetching...
[14:35:11] 🔍 [03_leavemealone_20260507] Step 0: Fetching...
[14:35:11] 🔍 [04_you're a star_20260507] Step 0: Fetching...
[14:35:14] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 0: netease | 1517c lyrics
[14:35:14] ⬇️  [02_Marea (we’ve lost dancing)_20260507] Step 0.5: Download from netease...
[14:35:14] ✅ [01_places to be_20260507] Step 0: netease | 2460c lyrics
[14:35:14] ⬇️  [01_places to be_20260507] Step 0.5: Download from netease...
[14:35:14] ✅ [03_leavemealone_20260507] Step 0: netease | 2656c lyrics
[14:35:14] ⬇️  [03_leavemealone_20260507] Step 0.5: Download from netease...
[14:35:17] ✅ [04_you're a star_20260507] Step 0: netease | 2663c lyrics
[14:35:17] ⬇️  [04_you're a star_20260507] Step 0.5: Download from netease...
[14:35:21] ✅ [03_leavemealone_20260507] Step 0.5: 4665879 bytes | 222.8s
[14:35:21] 🔬 [03_leavemealone_20260507] Step 0.75: Audio features...
[14:35:21] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 0.5: 6670587 bytes | 285.4s
[14:35:21] 🔬 [02_Marea (we’ve lost dancing)_20260507] Step 0.75: Audio features...
[14:35:22] ✅ [01_places to be_20260507] Step 0.5: 5245572 bytes | 226.7s
[14:35:22] 🔬 [01_places to be_20260507] Step 0.75: Audio features...
[14:35:40] ✅ [04_you're a star_20260507] Step 0.5: 5189263 bytes | 219.2s
[14:35:40] 🔬 [04_you're a star_20260507] Step 0.75: Audio features...
[14:36:12] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 0.75: BPM=122.97 Key=F minor (51.1s)
[14:36:12] 🧠 [02_Marea (we’ve lost dancing)_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:36:12.716Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/02_Marea (we’ve lost dancing)_20260507/song_pgc.mp3", "has_features": true}}
[14:36:12] ✅ [03_leavemealone_20260507] Step 0.75: BPM=172.27 Key=D minor (51.4s)
[14:36:12] 🧠 [03_leavemealone_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:36:12.777Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "03_leavemealone_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/03_leavemealone_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
[   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')
[14:36:44] ✅ [01_places to be_20260507] Step 0.75: BPM=87.08 Key=D minor (32.1s)
[14:36:44] 🧠 [01_places to be_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:36:44.907Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "01_places to be_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/01_places to be_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')
[14:36:47] ✅ [04_you're a star_20260507] Step 0.75: BPM=137.13 Key=A# minor (34.4s)
[14:36:47] 🧠 [04_you're a star_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:36:47.201Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/04_you're a star_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-07T06:37:27.728Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "03_leavemealone_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 4.8, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:37:27.729Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "03_leavemealone_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 74.951}
[14:37:27] ❌ [03_leavemealone_20260507] Step 1: http_503 (4.8s)
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T06:37:31.988Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 2.9, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:37:31.988Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 79.272}
[14:37:31] ❌ [02_Marea (we’ve lost dancing)_20260507] Step 1: http_503 (2.9s)
  ⚠️ 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 #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T06:37:53.307Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "01_places to be_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 3.9, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:37:53.307Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "01_places to be_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 68.399}
[14:37:53] ❌ [01_places to be_20260507] Step 1: http_503 (3.9s)
  ⚠️ 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-07T06:38:16.034Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 2.0, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:38:16.034Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 88.833}
[14:38:16] ❌ [04_you're a star_20260507] Step 1: http_503 (2.0s)

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

=== 2026-05-07 14:38:16 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07 --profile __runtime_batch-20260507-143506-3a2f07 --resume-mode each --skip-feishu ===
{"timestamp": "2026-05-07T14:38:16.979164+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07", "profile": "__runtime_batch-20260507-143506-3a2f07", "concurrency": 3, "resume_mode": "each", "pending_song_count": 0, "groups": [], "status": "noop", "resume": null}
[exit 0]

=== 2026-05-07 14:38:17 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-143506-3a2f07 ===
[Feishu] No successful songs to export.
[exit 0]

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

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

[14:45:46] 🏥 Health check...
[14:45:48] ✅ qishui: OK
[14:45:48] ✅ netease: OK
[14:45:48] ✅ qq: OK

[14:45:48] 🧠 [01_places to be_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:45:48.065Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "01_places to be_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/01_places to be_20260507/song_pgc.mp3", "has_features": true}}
[14:45:48] 🧠 [02_Marea (we’ve lost dancing)_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:45:48.159Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/02_Marea (we’ve lost dancing)_20260507/song_pgc.mp3", "has_features": true}}
[14:45:48] 🧠 [03_leavemealone_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:45:48.262Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "03_leavemealone_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/03_leavemealone_20260507/song_pgc.mp3", "has_features": true}}
[14:45:48] 🧠 [04_you're a star_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:45:48.306Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/04_you're a star_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 #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-07T06:46:31.020Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 7.5, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:46:31.021Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 42.862}
[14:46:31] ❌ [02_Marea (we’ve lost dancing)_20260507] Step 1: http_503 (7.5s)
  📊 Gemini official: 44s | prompt_tokens=11122 completion=1683
{"__trace__": true, "ts": "2026-05-07T06:46:37.415Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "01_places to be_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 44.4, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:46:37.415Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "01_places to be_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 49.35}
[14:46:37] ⚠️  [01_places to be_20260507] Step 1.5: prompt 1174c > 1000c, compressing...
  📏 [01_places to be_20260507] prompt 1174c → 844c (smart truncate)
[14:46:37] ✅ [01_places to be_20260507] Step 1.5: prompt compressed 1174c → 844c
[14:46:37] ✅ [01_places to be_20260507] Step 1: 44.4s | prompt=844c | prompt_ok=True lyrics_ok=True
[14:46:37] 🌐 [01_places to be_20260507] Step 2: target_language=auto → lang_mode=EN
[14:46:37] 🤖 [01_places to be_20260507] Step 2 API: 35054 chars ≈ 8763 tokens → claude-sonnet-4-6
  ⚠️ 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...
[14:47:16] ⚠️  [01_places to be_20260507] Step 2 API: originality 59% < 85% | 2 copied phrases
          ❗ "on a syncopated 16th note rhythm, anchoring on the root, repeats twice before a final answering phrase.)" ~ "on a syncopated 16th note rhythm, anchoring on the root, repeats twice before a final answering phrase.)" (100%)
          ❗ "on a syncopated 16th note rhythm, anchoring on the root, repeats twice before a final answering phrase.)" ~ "on a syncopated 16th note rhythm, anchoring on the root, repeats twice before a final answering phrase.)" (100%)
[14:47:16] 🔄 [01_places to be_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-07T06:47:24.536Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 2.1, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:47:24.536Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 96.229}
[14:47:24] ❌ [04_you're a star_20260507] Step 1: http_503 (2.1s)
[14:47:51] ⚠️  [01_places to be_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[14:47:51] ⚠️  [01_places to be_20260507] Step 2 API: best originality 59% after 3 retries
[14:47:51] ✅ [01_places to be_20260507] Step 2 API: 《Copper Wire》 | 38.8s | in=18535 out=2417 | ~$0.092
[14:47:51] ✅ [01_places to be_20260507] Step 2.5: originality 59% ✓
[14:47:51] ✅ [01_places to be_20260507] Step 2: 《Copper Wire》
[14:47:51] 📁 [01_places to be_20260507] Renamed → 01_places to be_Copper_Wire_20260507
  📝 [01_places to be_Copper_Wire_20260507] lyrics stripped: 4645c → 4632c
[14:47:51] 🎵 [01_places to be_Copper_Wire_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:47:51] 🎨 [01_places to be_Copper_Wire_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['04c4edd2', 'e722ad6a']
  🎵 04c4edd2... → submitted
  🎵 e722ad6a... → submitted
  📊 Gemini official: 83s | prompt_tokens=11058 completion=1978
{"__trace__": true, "ts": "2026-05-07T06:47:53.929Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "03_leavemealone_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 82.9, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:47:53.929Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "03_leavemealone_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 125.667}

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

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

[14:47:56] 🏥 Health check...
[14:47:58] ✅ qishui: OK
[14:47:58] ✅ netease: OK
[14:47:58] ✅ qq: OK

[14:47:58] 🧠 [02_Marea (we’ve lost dancing)_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:47:58.834Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/02_Marea (we’ve lost dancing)_20260507/song_pgc.mp3", "has_features": true}}
[14:47:58] 🌐 [03_leavemealone_20260507] Step 2: target_language=auto → lang_mode=EN
[14:47:58] 🤖 [03_leavemealone_20260507] Step 2 API: 35945 chars ≈ 8986 tokens → claude-sonnet-4-6
[14:47:58] 🧠 [04_you're a star_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:47:58.964Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/04_you're a star_20260507/song_pgc.mp3", "has_features": true}}
  📝 [01_places to be_Copper_Wire_20260507] lyrics stripped: 4645c → 4632c
[14:47:59] 🎵 [01_places to be_Copper_Wire_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:47:59] 🎨 [01_places to be_Copper_Wire_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['4a59dd01', '887b044a']
  🎵 4a59dd01... → submitted
  🎵 887b044a... → submitted
  🎵 4a59dd01... → queued
  🎵 887b044a... → queued
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  🎵 4a59dd01... → streaming
  🎵 887b044a... → streaming
  ⚠️ 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: 46s | prompt_tokens=12703 completion=1505
{"__trace__": true, "ts": "2026-05-07T06:48:44.808Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 45.9, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:48:44.809Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "02_Marea (we’ve lost dancing)_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 45.969}

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

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

[14:49:03] 🏥 Health check...
[14:49:05] ✅ qishui: OK
[14:49:05] ✅ netease: OK
[14:49:05] ✅ qq: OK

[14:49:05] 🌐 [02_Marea (we’ve lost dancing)_20260507] Step 2: target_language=auto → lang_mode=EN
[14:49:05] 🤖 [02_Marea (we’ve lost dancing)_20260507] Step 2 API: 34453 chars ≈ 8613 tokens → claude-sonnet-4-6
[14:49:05] 🌐 [03_leavemealone_20260507] Step 2: target_language=auto → lang_mode=EN
[14:49:05] 🤖 [03_leavemealone_20260507] Step 2 API: 35945 chars ≈ 8986 tokens → claude-sonnet-4-6
[14:49:05] 🧠 [04_you're a star_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:49:05.586Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/04_you're a star_20260507/song_pgc.mp3", "has_features": true}}
[14:48:44] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 1.5: prompt 1152c > 1000c, compressing...
  📏 [02_Marea (we’ve lost dancing)_20260507] prompt 1152c → 834c (smart truncate)
[14:48:44] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 1.5: prompt compressed 1152c → 834c
[14:48:44] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 1: 45.9s | prompt=834c | prompt_ok=True lyrics_ok=True
[14:48:44] 🌐 [02_Marea (we’ve lost dancing)_20260507] Step 2: target_language=auto → lang_mode=EN
[14:48:44] 🤖 [02_Marea (we’ve lost dancing)_20260507] Step 2 API: 34453 chars ≈ 8613 tokens → claude-sonnet-4-6
[14:48:45] ⚠️  [03_leavemealone_20260507] Step 2 API: originality 49% < 85% | 10 copied phrases
          ❗ "Everybody, everybody, everybody, everybody" ~ "Everybody, everybody, everybody, everybody" (100%)
          ❗ "Everybody, everybody, everybody" ~ "Everybody, everybody, everybody" (100%)
          ❗ "Everybody, everybody, everybo-, everybo-, every-" ~ "Everybody, everybody, everybo-, everybo-, every-" (100%)
          ❗ "Yeah" ~ "Yeah" (100%)
          ❗ "Everybody, everybody, everybody, everybody" ~ "Everybody, everybody, everybody, everybody" (100%)
[14:48:45] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 1/3...
  📊 Gemini official: 46s | prompt_tokens=10908 completion=1668
{"__trace__": true, "ts": "2026-05-07T06:49:24.765Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 46.1, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:49:24.765Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 85.802}
  📝 [01_places to be_Copper_Wire_20260507] lyrics stripped: 4645c → 4632c
[14:49:05] 🎵 [01_places to be_Copper_Wire_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:49:05] 🎨 [01_places to be_Copper_Wire_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['a26d2f63', 'b47d9c8d']
  🎵 a26d2f63... → submitted
  🎵 b47d9c8d... → submitted
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  🎵 a26d2f63... → queued
  🎵 b47d9c8d... → queued
  ⚠️ 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...
  🎵 a26d2f63... → streaming
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  🎵 b47d9c8d... → streaming
[14:49:40] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2 API: originality 49% < 85% | 4 copied phrases
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
[14:49:40] 🔄 [02_Marea (we’ve lost dancing)_20260507] Step 2 API: originality retry 1/3...
  ⚠️ Gemini official 503 on key #5/5, will retry...
{"__trace__": true, "ts": "2026-05-07T06:49:42.409Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 6.5, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T06:49:42.409Z", "trace_id": "batch-20260507-143506-3a2f07", "song_key": "04_you're a star_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 36.823}
[14:49:42] ❌ [04_you're a star_20260507] Step 1: http_503 (6.5s)
[14:49:51] ⚠️  [03_leavemealone_20260507] Step 2 API: originality 54% < 85% | 1 copied phrases
          ❗ "Yeah" ~ "Yeah" (100%)
[14:49:51] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 1/3...
[14:50:14] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[14:50:14] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2 API: best originality 49% after 3 retries
[14:50:14] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 2 API: 《Salt & Skin》 | 35.3s | in=18334 out=2348 | ~$0.090
[14:50:14] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2.5: originality 49% < 50% | 4 copied phrases
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
[14:50:14] ⏳ [02_Marea (we’ve lost dancing)_20260507] Step 2: 原创度不足，等待人审豁免或重试
[14:50:26] ⚠️  [03_leavemealone_20260507] Step 2 API retry 1: originality 55%
[14:50:26] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 2/3...
[14:51:16] ⚠️  [03_leavemealone_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[14:51:16] ⚠️  [03_leavemealone_20260507] Step 2 API: best originality 55% after 3 retries
[14:51:16] ⚠️  [03_leavemealone_20260507] Step 2 API attempt 1 (131.3s): [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/03_leavemealone_20260507/step2_json_b.json'
  🎵 a26d2f63... → complete
[14:52:22] ⚠️  [03_leavemealone_20260507] Step 2 API: originality 60% < 85% | 1 copied phrases
          ❗ "Yeah" ~ "Yeah" (100%)
[14:52:22] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 1/3...
  🎵 b47d9c8d... → complete
[14:52:31]    🎧 [01_places to be_Copper_Wire_20260507] Song 1: https://cdn1.suno.ai/a26d2f63-7a48-4ee4-9ec8-6d4ceef846e9.mp3
[14:52:31]    🎧 [01_places to be_Copper_Wire_20260507] Song 2: https://cdn1.suno.ai/b47d9c8d-261f-4bf4-a2c4-01ed141078be.mp3
[14:52:31] 🎛️ [01_places to be_Copper_Wire_20260507] Step 3.5: 混音...
[14:52:52]    🎚️ [01_places to be_Copper_Wire_20260507] Song 1: edm | 低91/中7/高2%
[14:53:07]    🎚️ [01_places to be_Copper_Wire_20260507] Song 2: edm | 低84/中13/高3%
[14:53:07] ✅ [01_places to be_Copper_Wire_20260507] Step 3.5: 36.1s | 2 songs mixed
[14:53:07] ⚠️  [01_places to be_Copper_Wire_20260507] Step 4: http_403 (non-fatal)
[14:53:17] ⚠️  [03_leavemealone_20260507] Step 2 API retry 1: originality 61%
[14:53:17] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 2/3...
[14:54:27] ⚠️  [03_leavemealone_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[14:54:27] ⚠️  [03_leavemealone_20260507] Step 2 API: best originality 61% after 3 retries
[14:54:27] ⚠️  [03_leavemealone_20260507] Step 2 API attempt 2 (185.9s): [Errno 2] No such file or directory: '/srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/03_leavemealone_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-143506-3a2f07/03_leavemealone_20260507/_state.json'
[exit 1]

=== 2026-05-07 14:54:28 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-143506-3a2f07 --resume /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-143506-3a2f07' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143506-3a2f07.yaml
[14:49:24] ⚠️  [04_you're a star_20260507] Step 1.5: prompt 1314c > 1000c, compressing...
  📏 [04_you're a star_20260507] prompt 1314c → 852c (smart truncate)
[14:49:24] ✅ [04_you're a star_20260507] Step 1.5: prompt compressed 1314c → 852c
[14:49:24] ✅ [04_you're a star_20260507] Step 1: 46.1s | prompt=852c | prompt_ok=True lyrics_ok=True
[14:49:24] 🌐 [04_you're a star_20260507] Step 2: target_language=auto → lang_mode=EN
[14:49:24] 🤖 [04_you're a star_20260507] Step 2 API: 35284 chars ≈ 8821 tokens → claude-sonnet-4-6
[14:49:31] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2 API: originality 46% < 85% | 6 copied phrases
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
          ❗ "Will be" ~ "Will be" (100%)
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
[14:49:31] 🔄 [02_Marea (we’ve lost dancing)_20260507] Step 2 API: originality retry 1/3...
[14:49:47] ⚠️  [03_leavemealone_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[14:49:47] ⚠️  [03_leavemealone_20260507] Step 2 API: best originality 49% after 3 retries
[14:49:56] ✅ [03_leavemealone_20260507] Step 2 API: 《Thin Ice》 | 46.7s | in=18885 out=2974 | ~$0.101
[14:49:56] ⚠️  [03_leavemealone_20260507] Step 2.5: originality 49% < 50% | 10 copied phrases
          ❗ "Everybody, everybody, everybody, everybody" ~ "Everybody, everybody, everybody, everybody" (100%)
          ❗ "Everybody, everybody, everybody" ~ "Everybody, everybody, everybody" (100%)
          ❗ "Everybody, everybody, everybo-, everybo-, every-" ~ "Everybody, everybody, everybo-, everybo-, every-" (100%)
          ❗ "Yeah" ~ "Yeah" (100%)
          ❗ "Everybody, everybody, everybody, everybody" ~ "Everybody, everybody, everybody, everybody" (100%)
[14:49:56] ⏳ [03_leavemealone_20260507] Step 2: 原创度不足，等待人审豁免或重试
[14:50:04] ⚠️  [04_you're a star_20260507] Step 2 API: originality 43% < 85% | 7 copied phrases
          ❗ "I swear" ~ "I swear" (100%)
          ❗ "I swear" ~ "I swear" (100%)
          ❗ "Hey, you're a sharp one, never been a soft one" ~ "Hey, you're a lit one, never been a dull one" (82%)
          ❗ "Hey, you're a sharp one, never been a soft one" ~ "Hey, you're a lit one, never been a dull one" (82%)
          ❗ "Never been a soft one" ~ "Never been a dull one" (81%)
[14:50:04] 🔄 [04_you're a star_20260507] Step 2 API: originality retry 1/3...
[14:50:10] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[14:50:10] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2 API: best originality 46% after 3 retries
[14:50:10] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 2 API: 《Hollow Season》 | 47.0s | in=18334 out=2302 | ~$0.090
[14:50:10] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 2.5: originality 46% < 50% | 6 copied phrases
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
          ❗ "Will be" ~ "Will be" (100%)
          ❗ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" ~ "; Anchors on chord tones; Repeats every 2 bars, creating the main groove.)" (100%)
          ❗ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" ~ "; Unfiltered plucky bassline; Bright M1-style piano stabs.)" (100%)
[14:50:10] ⏳ [02_Marea (we’ve lost dancing)_20260507] Step 2: 原创度不足，等待人审豁免或重试
[14:50:42] ⚠️  [04_you're a star_20260507] Step 2 API retry 1: originality 60%
[14:50:42] 🔄 [04_you're a star_20260507] Step 2 API: originality retry 2/3...
  🎵 887b044a... → complete
[14:51:29] ⚠️  [04_you're a star_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[14:51:29] ⚠️  [04_you're a star_20260507] Step 2 API: best originality 60% after 3 retries
[14:51:29] ✅ [04_you're a star_20260507] Step 2 API: 《Bitter Honey》 | 77.2s | in=40314 out=4937 | ~$0.195
[14:51:29] ✅ [04_you're a star_20260507] Step 2.5: originality 60% ✓
[14:51:29] ✅ [04_you're a star_20260507] Step 2: 《Bitter Honey》
[14:51:29] 📁 [04_you're a star_20260507] Renamed → 04_you're a star_Bitter_Honey_20260507
  📝 [04_you're a star_Bitter_Honey_20260507] lyrics stripped: 4933c → 4926c
[14:51:29] 🎵 [04_you're a star_Bitter_Honey_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:51:29] 🎨 [04_you're a star_Bitter_Honey_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['be7a4f15', '456fa6cb']
  🎵 be7a4f15... → submitted
  🎵 456fa6cb... → submitted
  🎵 be7a4f15... → queued
  🎵 456fa6cb... → queued
  🎵 be7a4f15... → streaming
  🎵 456fa6cb... → streaming
  🎵 4a59dd01... → complete
[14:53:33]    🎧 [01_places to be_Copper_Wire_20260507] Song 1: https://cdn1.suno.ai/4a59dd01-0537-441a-bc5b-961b7fa3723f.mp3
[14:53:33]    🎧 [01_places to be_Copper_Wire_20260507] Song 2: https://cdn1.suno.ai/887b044a-b433-4a70-987b-271342011fb2.mp3
[14:53:33] 🎛️ [01_places to be_Copper_Wire_20260507] Step 3.5: 混音...
[14:53:53]    🎚️ [01_places to be_Copper_Wire_20260507] Song 1: edm | 低91/中7/高2%
[14:54:08]    🎚️ [01_places to be_Copper_Wire_20260507] Song 2: edm | 低84/中13/高3%
[14:54:08] ✅ [01_places to be_Copper_Wire_20260507] Step 3.5: 35.2s | 2 songs mixed
[14:54:08] ⚠️  [01_places to be_Copper_Wire_20260507] Step 4: http_403 (non-fatal)
  🎵 be7a4f15... → complete
  🎵 456fa6cb... → complete
[14:55:11]    🎧 [04_you're a star_Bitter_Honey_20260507] Song 1: https://cdn1.suno.ai/be7a4f15-e21d-45be-b3bf-21ae33958f50.mp3
[14:55:11]    🎧 [04_you're a star_Bitter_Honey_20260507] Song 2: https://cdn1.suno.ai/456fa6cb-6728-4898-87fd-bc37f3c39772.mp3
[14:55:11] 🎛️ [04_you're a star_Bitter_Honey_20260507] Step 3.5: 混音...
[14:55:29]    🎚️ [04_you're a star_Bitter_Honey_20260507] Song 1: edm | 低53/中42/高5%
[14:55:47]    🎚️ [04_you're a star_Bitter_Honey_20260507] Song 2: edm | 低81/中14/高5%
[14:55:47] ✅ [04_you're a star_Bitter_Honey_20260507] Step 3.5: 37.0s | 2 songs mixed
[14:55:47] ⚠️  [04_you're a star_Bitter_Honey_20260507] Step 4: http_403 (non-fatal)

======================================================================
SUMMARY | 469s (7.8min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260507-143506-3a2f07 → +2 新增, ~0 更新 | 总计 633 首
[exit 0]

=== 2026-05-07 14:55:48 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-143506-3a2f07 ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/Btv0sXtUqhOwWct154rcbEfknAf
[Feishu] 📐 Expanded master sheet from 572 to 674 rows
[Feishu] ✅ Appended 2 new songs to master sheet (rows 573-574)
[MasterDB] ✅ 批次 batch-20260507-143506-3a2f07 → +2 新增, ~0 更新 | 总计 574 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/Btv0sXtUqhOw
[14:55:56] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Copper Wire] topic head sent (message_id=om_x100b50f7391d54f0b212278d2c2a6f3)
[Feishu IM] ✅ [Copper Wire] Copper Wire_V1_raw.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V1_mixed.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V2_raw.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V2_mixed.mp3 replied
[Feishu IM] ✅ [Salt & Skin] topic head sent (message_id=om_x100b50f7360d2c94b3b4848896bb011)
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V1_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V1_mixed.mp3 not found, skipping
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V2_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V2_mixed.mp3 not found, skipping
[Feishu IM] ✅ [Static Grip] topic head sent (message_id=om_x100b50f7360078bcb3b5e4a045fa42a)
[Feishu IM] ⚠️  [Static Grip] Static Grip_V1_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Static Grip] Static Grip_V1_mixed.mp3 not found, skipping
[Feishu IM] ⚠️  [Static Grip] Static Grip_V2_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Static Grip] Static Grip_V2_mixed.mp3 not found, skipping
[Feishu IM] ✅ [Bitter Honey] topic head sent (message_id=om_x100b50f73616acb8b2b24ca925820db)
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V1_raw.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V1_mixed.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V2_raw.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-143506-3a2f07
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07

📊 https://ccnu62373cgc.feishu.cn/sheets/Btv0sXtUqhOwWct154rcbEfknAf
[exit 0]
[14:47:53] ⚠️  [03_leavemealone_20260507] Step 1.5: prompt 1162c > 1000c, compressing...
  📏 [03_leavemealone_20260507] prompt 1162c → 872c (smart truncate)
[14:47:53] ✅ [03_leavemealone_20260507] Step 1.5: prompt compressed 1162c → 872c
[14:47:53] ✅ [03_leavemealone_20260507] Step 1: 82.9s | prompt=872c | prompt_ok=True lyrics_ok=True
[14:47:53] 🌐 [03_leavemealone_20260507] Step 2: target_language=auto → lang_mode=EN
[14:47:53] 🤖 [03_leavemealone_20260507] Step 2 API: 35945 chars ≈ 8986 tokens → claude-sonnet-4-6
  🎵 04c4edd2... → queued
  🎵 e722ad6a... → queued
  🎵 04c4edd2... → streaming
  🎵 e722ad6a... → streaming
[14:48:39] ⚠️  [03_leavemealone_20260507] Step 2 API: originality 52% < 85% | 10 copied phrases
          ❗ "Everybody, everybody, everybody, everybody" ~ "Everybody, everybody, everybody, everybody" (100%)
          ❗ "Everybody, everybody, everybody" ~ "Everybody, everybody, everybody" (100%)
          ❗ "Everybody, everybody, everybo-, everybo-, every-" ~ "Everybody, everybody, everybo-, everybo-, every-" (100%)
          ❗ "Yeah" ~ "Yeah" (100%)
          ❗ "Everybody, everybody, everybody, everybody" ~ "Everybody, everybody, everybody, everybody" (100%)
[14:48:39] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 1/3...
[14:49:30] ⚠️  [03_leavemealone_20260507] Step 2 API retry 1: originality 63%
[14:49:30] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 2/3...
[14:50:14] ⚠️  [03_leavemealone_20260507] Step 2 API retry 2: originality 60%
[14:50:14] 🔄 [03_leavemealone_20260507] Step 2 API: originality retry 3/3...
  🎵 e722ad6a... → complete
[14:51:00] ⚠️  [03_leavemealone_20260507] Step 2 API originality retry 3 failed: Expecting value: line 1 column 1 (char 0)
[14:51:00] ⚠️  [03_leavemealone_20260507] Step 2 API: best originality 63% after 3 retries
[14:51:00] ✅ [03_leavemealone_20260507] Step 2 API: 《Static Grip》 | 140.8s | in=68155 out=8995 | ~$0.339
[14:51:01] ✅ [03_leavemealone_20260507] Step 2.5: originality 63% ✓
[14:51:01] ✅ [03_leavemealone_20260507] Step 2: 《Static Grip》
[14:51:01] 📁 [03_leavemealone_20260507] Renamed → 03_leavemealone_Static_Grip_20260507
  📝 [03_leavemealone_Static_Grip_20260507] lyrics stripped: 5988c → 5000c
[14:51:01] 🎵 [03_leavemealone_Static_Grip_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:51:01] 🎨 [03_leavemealone_Static_Grip_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['ce7b2c21', '534347fc']
  🎵 ce7b2c21... → submitted
  🎵 534347fc... → submitted
  🎵 ce7b2c21... → queued
  🎵 534347fc... → queued
  🎵 ce7b2c21... → streaming
  🎵 534347fc... → streaming
  🎵 04c4edd2... → complete
[14:51:21]    🎧 [01_places to be_Copper_Wire_20260507] Song 1: https://cdn1.suno.ai/04c4edd2-2889-4911-b850-028f2aa70df4.mp3
[14:51:21]    🎧 [01_places to be_Copper_Wire_20260507] Song 2: https://cdn1.suno.ai/e722ad6a-482c-43be-aebe-89ced2d8433a.mp3
[14:51:21] 🎛️ [01_places to be_Copper_Wire_20260507] Step 3.5: 混音...
[14:51:44]    🎚️ [01_places to be_Copper_Wire_20260507] Song 1: edm | 低91/中7/高2%
[14:52:00]    🎚️ [01_places to be_Copper_Wire_20260507] Song 2: edm | 低84/中13/高3%
[14:52:00] ✅ [01_places to be_Copper_Wire_20260507] Step 3.5: 38.8s | 2 songs mixed
[14:52:00] ⚠️  [01_places to be_Copper_Wire_20260507] Step 4: http_403 (non-fatal)
  🎵 ce7b2c21... → complete
  🎵 534347fc... → complete
[14:56:44]    🎧 [03_leavemealone_Static_Grip_20260507] Song 1: https://cdn1.suno.ai/ce7b2c21-db55-4611-819e-5f9125ab540f.mp3
[14:56:44]    🎧 [03_leavemealone_Static_Grip_20260507] Song 2: https://cdn1.suno.ai/534347fc-04bf-427b-8216-acafe0dd3e04.mp3
[14:56:44] 🎛️ [03_leavemealone_Static_Grip_20260507] Step 3.5: 混音...
[14:57:02]    🎚️ [03_leavemealone_Static_Grip_20260507] Song 1: edm | 低87/中10/高3%
[14:57:37]    🎚️ [03_leavemealone_Static_Grip_20260507] Song 2: rock | 低79/中19/高2%
[14:57:37] ✅ [03_leavemealone_Static_Grip_20260507] Step 3.5: 53.2s | 2 songs mixed
[14:57:37] ⚠️  [03_leavemealone_Static_Grip_20260507] Step 4: http_403 (non-fatal)

======================================================================
SUMMARY | 709s (11.8min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 2
[MasterDB] ✅ 批次 batch-20260507-143506-3a2f07 → +1 新增, ~2 更新 | 总计 634 首
[exit 0]

=== 2026-05-07 14:57:38 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-143506-3a2f07 ===
[Feishu] ✅ Exported 3 songs to: https://ccnu62373cgc.feishu.cn/sheets/QFM1spEPrhG9Mvt8UCkcctP0nNf
[Feishu] ⏭️  Skip duplicate (complete): places to be (https://fileserver.yuchenhu.com/pipeline/batch-20260507-143506-3a2f07/01_places%20to%20be_Copper_Wire_20260507/song_pgc.mp3)
[Feishu] ⏭️  Skip duplicate (complete): you're a star (https://fileserver.yuchenhu.com/pipeline/batch-20260507-143506-3a2f07/04_you%27re%20a%20star_Bitter_Honey_20260507/song_pgc.mp3)
[Feishu] 📐 Expanded master sheet from 574 to 675 rows
[Feishu] ✅ Appended 1 new songs to master sheet (rows 575-575)
[MasterDB] ✅ 批次 batch-20260507-143506-3a2f07 → +1 新增, ~0 更新 | 总计 575 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/QFM1spEPrhG9
[14:57:46] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Copper Wire] topic head sent (message_id=om_x100b50f7307de8a0b48b0fdd8fc1e08)
[Feishu IM] ✅ [Copper Wire] Copper Wire_V1_raw.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V1_mixed.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V2_raw.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V2_mixed.mp3 replied
[Feishu IM] ✅ [Salt & Skin] topic head sent (message_id=om_x100b50f73128bc84b4cef183ec05c77)
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V1_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V1_mixed.mp3 not found, skipping
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V2_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Salt & Skin] Salt & Skin_V2_mixed.mp3 not found, skipping
[Feishu IM] ✅ [Static Grip] topic head sent (message_id=om_x100b50f7313e9084b48d58e12a6e932)
[Feishu IM] ✅ [Static Grip] Static Grip_V1_raw.mp3 replied
[Feishu IM] ✅ [Static Grip] Static Grip_V1_mixed.mp3 replied
[Feishu IM] ✅ [Static Grip] Static Grip_V2_raw.mp3 replied
[Feishu IM] ✅ [Static Grip] Static Grip_V2_mixed.mp3 replied
[Feishu IM] ✅ [Bitter Honey] topic head sent (message_id=om_x100b50f7cff6aca0b29bcd784bae223)
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V1_raw.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V1_mixed.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V2_raw.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-143506-3a2f07
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07

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

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

[14:54:29] 🏥 Health check...
[14:54:31] ✅ qishui: OK
[14:54:31] ✅ netease: OK
[14:54:31] ✅ qq: OK

[14:54:31] ⏭️  [01_places to be_Copper_Wire_20260507] Already complete, skipping
  📝 [02_Marea (we’ve lost dancing)_20260507] lyrics stripped: 4038c → 4024c
[14:54:31] 🎵 [02_Marea (we’ve lost dancing)_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:54:31] 🎨 [02_Marea (we’ve lost dancing)_20260507] Step 4: SeeDream cover (parallel)...
  📝 [03_leavemealone_Static_Grip_20260507] lyrics stripped: 5988c → 5000c
[14:54:31] 🎵 [03_leavemealone_Static_Grip_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:54:31] 🎨 [03_leavemealone_Static_Grip_20260507] Step 4: SeeDream cover (parallel)...
  📝 [04_you're a star_Bitter_Honey_20260507] lyrics stripped: 4933c → 4926c
[14:54:31] 🎵 [04_you're a star_Bitter_Honey_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...
[14:54:31] 🎨 [04_you're a star_Bitter_Honey_20260507] Step 4: SeeDream cover (parallel)...
  ✅ submitted: ['8c21cd9f', 'f0badf4a']
  🎵 8c21cd9f... → submitted
  🎵 f0badf4a... → submitted
  🎵 8c21cd9f... → queued
  🎵 f0badf4a... → queued
  🎵 f0badf4a... → streaming
  🎵 8c21cd9f... → streaming
  ✅ submitted: ['072646f0', '52563494']
  🎵 072646f0... → submitted
  🎵 52563494... → submitted
  🎵 072646f0... → queued
  🎵 52563494... → queued
  🎵 072646f0... → streaming
  🎵 52563494... → streaming
  🎵 072646f0... → complete
  🎵 52563494... → complete
[14:58:13]    🎧 [02_Marea (we’ve lost dancing)_20260507] Song 1: https://cdn1.suno.ai/072646f0-deff-4a84-9b52-cd58ebf221f5.mp3
[14:58:13]    🎧 [02_Marea (we’ve lost dancing)_20260507] Song 2: https://cdn1.suno.ai/52563494-4827-4c33-88bb-7768e3562bc4.mp3
[14:58:13] 🎛️ [02_Marea (we’ve lost dancing)_20260507] Step 3.5: 混音...
  ✅ submitted: ['d77a30b3', '663f72ba']
  🎵 d77a30b3... → submitted
  🎵 663f72ba... → submitted
[14:58:35]    🎚️ [02_Marea (we’ve lost dancing)_20260507] Song 1: edm | 低67/中27/高6%
[14:58:53]    🎚️ [02_Marea (we’ve lost dancing)_20260507] Song 2: rock | 低52/中44/高4%
[14:58:53] ✅ [02_Marea (we’ve lost dancing)_20260507] Step 3.5: 40.6s | 2 songs mixed
[14:58:53] ⚠️  [02_Marea (we’ve lost dancing)_20260507] Step 4: http_403 (non-fatal)
  🎵 d77a30b3... → streaming
  🎵 663f72ba... → streaming
  🎵 f0badf4a... → complete
  🎵 d77a30b3... → complete
  🎵 663f72ba... → complete
[15:01:36]    🎧 [04_you're a star_Bitter_Honey_20260507] Song 1: https://cdn1.suno.ai/d77a30b3-bce4-4afa-b1d4-631f03fbde90.mp3
[15:01:36]    🎧 [04_you're a star_Bitter_Honey_20260507] Song 2: https://cdn1.suno.ai/663f72ba-eb1c-4f56-b1de-758691c6722e.mp3
[15:01:36] 🎛️ [04_you're a star_Bitter_Honey_20260507] Step 3.5: 混音...
[15:01:53]    🎚️ [04_you're a star_Bitter_Honey_20260507] Song 1: edm | 低53/中42/高5%
[15:02:10]    🎚️ [04_you're a star_Bitter_Honey_20260507] Song 2: edm | 低81/中14/高5%
[15:02:10] ✅ [04_you're a star_Bitter_Honey_20260507] Step 3.5: 33.9s | 2 songs mixed
[15:02:10] ⚠️  [04_you're a star_Bitter_Honey_20260507] Step 4: http_403 (non-fatal)
  🎵 8c21cd9f... → complete
[15:03:06]    🎧 [03_leavemealone_Static_Grip_20260507] Song 1: https://cdn1.suno.ai/8c21cd9f-d719-4f84-bd4d-142ee86efb0b.mp3
[15:03:06]    🎧 [03_leavemealone_Static_Grip_20260507] Song 2: https://cdn1.suno.ai/f0badf4a-80e3-460c-9451-4ec580847066.mp3
[15:03:06] 🎛️ [03_leavemealone_Static_Grip_20260507] Step 3.5: 混音...
[15:03:23]    🎚️ [03_leavemealone_Static_Grip_20260507] Song 1: edm | 低87/中10/高3%
[15:03:57]    🎚️ [03_leavemealone_Static_Grip_20260507] Song 2: rock | 低79/中19/高2%
[15:03:57] ✅ [03_leavemealone_Static_Grip_20260507] Step 3.5: 50.5s | 2 songs mixed
[15:03:57] ⚠️  [03_leavemealone_Static_Grip_20260507] Step 4: http_403 (non-fatal)

======================================================================
SUMMARY | 566s (9.4min)
======================================================================
✅ Done: 4 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260507-143506-3a2f07 → +1 新增, ~3 更新 | 总计 635 首
[exit 0]

=== 2026-05-07 15:03:58 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-143506-3a2f07 ===
[Feishu] ✅ Exported 4 songs to: https://ccnu62373cgc.feishu.cn/sheets/N22bstLxih3f1stsFjUcL9dFnrd
[Feishu] ⏭️  Skip duplicate (complete): places to be (https://fileserver.yuchenhu.com/pipeline/batch-20260507-143506-3a2f07/01_places%20to%20be_Copper_Wire_20260507/song_pgc.mp3)
[Feishu] ⏭️  Skip duplicate (complete): leavemealone (https://fileserver.yuchenhu.com/pipeline/batch-20260507-143506-3a2f07/03_leavemealone_Static_Grip_20260507/song_pgc.mp3)
[Feishu] ⏭️  Skip duplicate (complete): you're a star (https://fileserver.yuchenhu.com/pipeline/batch-20260507-143506-3a2f07/04_you%27re%20a%20star_Bitter_Honey_20260507/song_pgc.mp3)
[Feishu] 📐 Expanded master sheet from 575 to 676 rows
[Feishu] ✅ Appended 1 new songs to master sheet (rows 576-576)
[MasterDB] ✅ 批次 batch-20260507-143506-3a2f07 → +1 新增, ~0 更新 | 总计 576 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/N22bstLxih3f
[15:04:07] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Copper Wire] topic head sent (message_id=om_x100b50f7d84c60f4b37e259aa60bb02)
[Feishu IM] ✅ [Copper Wire] Copper Wire_V1_raw.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V1_mixed.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V2_raw.mp3 replied
[Feishu IM] ✅ [Copper Wire] Copper Wire_V2_mixed.mp3 replied
[Feishu IM] ✅ [Salt & Skin] topic head sent (message_id=om_x100b50f7d957c8b4b2e935d4c4c74b3)
[Feishu IM] ✅ [Salt & Skin] Salt & Skin_V1_raw.mp3 replied
[Feishu IM] ✅ [Salt & Skin] Salt & Skin_V1_mixed.mp3 replied
[Feishu IM] ✅ [Salt & Skin] Salt & Skin_V2_raw.mp3 replied
[Feishu IM] ✅ [Salt & Skin] Salt & Skin_V2_mixed.mp3 replied
[Feishu IM] ✅ [Static Grip] topic head sent (message_id=om_x100b50f7d66f3080b2b42b430343fa3)
[Feishu IM] ✅ [Static Grip] Static Grip_V1_raw.mp3 replied
[Feishu IM] ✅ [Static Grip] Static Grip_V1_mixed.mp3 replied
[Feishu IM] ✅ [Static Grip] Static Grip_V2_raw.mp3 replied
[Feishu IM] ✅ [Static Grip] Static Grip_V2_mixed.mp3 replied
[Feishu IM] ✅ [Bitter Honey] topic head sent (message_id=om_x100b50f7d715e484b2efa7c8d2c7e04)
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V1_raw.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V1_mixed.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V2_raw.mp3 replied
[Feishu IM] ✅ [Bitter Honey] Bitter Honey_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-143506-3a2f07
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-143506-3a2f07

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