
=== 2026-06-01 15:20:14 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260601-152014-7fa36f --target-language zh --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260601-152014-7fa36f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260601-152014-7fa36f.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 | 2 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[15:20:16] 🏥 Health check...
[15:20:17] ✅ qishui: OK
[15:20:17] ✅ netease: OK
[15:20:17] ✅ qq: OK

[15:20:17] 🔍 [01_小半_20260601] Step 0: Fetching...
[15:20:17] 🔍 [02_主角_20260601] Step 0: Fetching...
[15:20:20] ✅ [01_小半_20260601] Step 0: netease | 722c lyrics
[15:20:20] ⬇️  [01_小半_20260601] Step 0.5: Download from netease...
[15:20:28] ✅ [01_小半_20260601] Step 0.5: 5830765 bytes | 297.3s
[15:20:28] 🔬 [01_小半_20260601] Step 0.75: Audio features...
[15:20:28] ✅ [02_主角_20260601] Step 0: qq | 589c lyrics
[15:20:28] ⬇️  [02_主角_20260601] Step 0.5: Download from qq...
[15:20:41] ✅ [02_主角_20260601] Step 0.5: 6831223 bytes | 300.3s
[15:20:41] 🔬 [02_主角_20260601] Step 0.75: Audio features...
[15:21:23] ✅ [02_主角_20260601] Step 0.75: BPM=147.8 Key=E minor (41.9s)
[15:21:23] 🧠 [02_主角_20260601] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-06-01T07:21:23.402Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "02_主角_20260601", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/02_主角_20260601/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:21:23] 🌐 Step 1: target_language=zh (injecting override directive)
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
[15:21:33] ✅ [01_小半_20260601] Step 0.75: BPM=163.91 Key=G major (65.3s)
[15:21:33] 🧠 [01_小半_20260601] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-06-01T07:21:33.630Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "01_小半_20260601", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601/song_pgc.mp3", "has_features": true}}
[15:21:33] 🌐 Step 1: target_language=zh (injecting override directive)
  ⚠️ 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...
[step1] stripped 'live' from prompt
  📊 Gemini official: 67s | prompt_tokens=13519 completion=1639
{"__trace__": true, "ts": "2026-06-01T07:22:57.242Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "01_小半_20260601", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 67.2, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-06-01T07:22:57.242Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "01_小半_20260601", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 83.612}
[15:22:57] ✅ [01_小半_20260601] Step 1: 67.2s | prompt=909c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 88s | prompt_tokens=13547 completion=1595
{"__trace__": true, "ts": "2026-06-01T07:22:58.168Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "02_主角_20260601", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 87.7, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-06-01T07:22:58.168Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "02_主角_20260601", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 94.766}
[15:22:58] ✅ [02_主角_20260601] Step 1: 87.7s | prompt=877c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 160s (2.7min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260601-152014-7fa36f → +0 新增, ~0 更新 | 总计 783 首
[exit 0]

=== 2026-06-01 15:22:59 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f --profile __runtime_batch-20260601-152014-7fa36f --resume-mode end --skip-feishu --target-language zh ===
[phase2] batch=batch-20260601-152014-7fa36f pending=2 groups=1
[phase2] group 1/1 -> 01_小半_20260601, 02_主角_20260601
[profile] ✅ Loaded profile '__runtime_batch-20260601-152014-7fa36f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260601-152014-7fa36f.yaml
[phase2] 🌐 01_小半_20260601: target_language=zh
[profile] ✅ Loaded profile '__runtime_batch-20260601-152014-7fa36f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260601-152014-7fa36f.yaml
[phase2] 🌐 02_主角_20260601: target_language=zh
[phase2] resume -> /usr/bin/python3 /srv/repos/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f --profile __runtime_batch-20260601-152014-7fa36f --skip-feishu
[15:22:59] 🌐 [01_小半_20260601] Step 2: target_language=zh → lang_mode=ZH | single-turn
[15:22:59] 🤖 [01_小半_20260601] Step 2 Turn 2: 16089 chars ≈ 4022 tokens → claude-sonnet-4-6
[15:22:59] 🌐 [02_主角_20260601] Step 2: target_language=zh → lang_mode=ZH | single-turn
[15:22:59] 🤖 [02_主角_20260601] Step 2 Turn 2: 16481 chars ≈ 4120 tokens → claude-sonnet-4-6
[15:24:00] ⚠️  [01_小半_20260601] Step 2 API: originality 78% < 85% | 0 copied phrases
[15:24:00] 🔄 [01_小半_20260601] Step 2 API: originality retry 1/3...
[15:24:01] ⚠️  [02_主角_20260601] Step 2 API: originality 73% < 85% | 2 copied phrases
          ❗ "emphasizes beat 1 of each bar.)" ~ "emphasizes beat 1 of each bar.)" (100%)
          ❗ ", powerful, raw, declamatory style. Unprocessed, as if in a large hall.)" ~ ", powerful, raw, declamatory style. Unprocessed, as if in a large hall.)" (100%)
[15:24:01] 🔄 [02_主角_20260601] Step 2 API: originality retry 1/3...
[15:24:48] ⚠️  [01_小半_20260601] Step 2 API retry 1: originality 78%
[15:24:48] 🔄 [01_小半_20260601] Step 2 API: originality retry 2/3...
[15:25:09] ⚠️  [02_主角_20260601] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[15:25:09] ⚠️  [02_主角_20260601] Step 2 API: best originality 73% after 3 retries
[15:25:09] ✅ [02_主角_20260601] Step 2 API: 《骨中灯》 engine=? | 61.8s | in=11449 out=2549 | ~$0.073
[15:25:37] ⚠️  [01_小半_20260601] Step 2 API retry 2: originality 81%
[15:25:37] 🔄 [01_小半_20260601] Step 2 API: originality retry 3/3...
[15:26:34] ⚠️  [01_小半_20260601] Step 2 API originality retry 3 failed: Expecting value: line 1 column 1 (char 0)
[15:26:34] ⚠️  [01_小半_20260601] Step 2 API: best originality 81% after 3 retries
[15:26:45] ⚠️  Step 2 title library fetch failed: 
[15:26:45] ✅ [01_小半_20260601] Step 2 API: 《过载》 engine=? | 157.7s | in=43928 out=7743 | ~$0.248
{"timestamp": "2026-06-01T15:22:59.264908+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f", "profile": "__runtime_batch-20260601-152014-7fa36f", "concurrency": 3, "resume_mode": "end", "pending_song_count": 2, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601", "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/02_主角_20260601"], "success_count": 2, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601/step2_json_b.json", "agent_summary": "API direct: 过载", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601/step2_json_b.json", "agent_summary": "API direct: 过载", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/02_主角_20260601", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/02_主角_20260601/step2_json_b.json", "agent_summary": "API direct: 骨中灯", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/02_主角_20260601", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/02_主角_20260601/step2_json_b.json", "agent_summary": "API direct: 骨中灯", "returncode": 0, "stderr": "", "attempt": 1}]}]}], "resume": {"status": "success", "returncode": 0, "stdout_tail": "\n======================================================================\nmusic-pipeline3000 v2 | 2 songs\n======================================================================\nGemini concurrency: 2 | Suno concurrency: 3\nOutput: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f\nSkip Suno: False | Step1 only: False | Version: v4\n======================================================================\n\n[15:26:47] 🏥 Health check...\n[15:26:50] ✅ qishui: OK\n[15:26:50] ✅ netease: OK\n[15:26:50] ✅ qq: OK\n\n  📝 [01_小半_20260601] lyrics stripped: 3957c → 3951c\n[15:26:50] 🎵 [01_小半_20260601] Step 3: Suno generation (weirdness=50, style_influence=50)...\n  📝 [02_主角_20260601] lyrics stripped: 4397c → 4391c\n[15:26:50] 🎵 [02_主角_20260601] Step 3: Suno generation (weirdness=50, style_influence=50)...\n  ✅ submitted: ['a99906b8', '4a7813f4']\n  ✅ submitted: ['1329eb1e', 'b7f8d51d']\n  🎵 a99906b8... → submitted\n  🎵 4a7813f4... → submitted\n  🎵 1329eb1e... → submitted\n  🎵 b7f8d51d... → submitted\n  🎵 a99906b8... → queued\n  🎵 4a7813f4... → queued\n  🎵 1329eb1e... → queued\n  🎵 b7f8d51d... → queued\n  🎵 a99906b8... → streaming\n  🎵 4a7813f4... → streaming\n  🎵 1329eb1e... → streaming\n  🎵 b7f8d51d... → streaming\n  🎵 4a7813f4... → complete\n  🎵 a99906b8... → complete\n[15:29:51]    🎧 [01_小半_20260601] Song 1: https://cdn1.suno.ai/a99906b8-0f58-4cee-905b-827a08a4d859.mp3\n[15:29:51]    🎧 [01_小半_20260601] Song 2: https://cdn1.suno.ai/4a7813f4-d93e-48b6-8457-415c3da6b757.mp3\n[15:29:51] 🎛️ [01_小半_20260601] Step 3.5: 混音...\n[15:30:15]    🎚️ [01_小半_20260601] Song 1: edm | 低60/中33/高7%\n  🎵 1329eb1e... → complete\n[15:30:36]    🎚️ [01_小半_20260601] Song 2: edm | 低45/中51/高4%\n[15:30:36] ✅ [01_小半_20260601] Step 3.5: 44.6s | 2 songs mixed\n  🎵 b7f8d51d... → complete\n[15:30:36]    🎧 [02_主角_20260601] Song 1: https://cdn1.suno.ai/1329eb1e-6fe9-465a-9728-759f4e30bb27.mp3\n[15:30:36]    🎧 [02_主角_20260601] Song 2: https://cdn1.suno.ai/b7f8d51d-28d1-46a3-8c4b-01373f8c9508.mp3\n[15:30:36] 🎛️ [02_主角_20260601] Step 3.5: 混音...\n[15:31:01]    🎚️ [02_主角_20260601] Song 1: pop | 低47/中49/高4%\n[15:31:26]    🎚️ [02_主角_20260601] Song 2: pop | 低60/中38/高2%\n[15:31:26] ✅ [02_主角_20260601] Step 3.5: 49.5s | 2 songs mixed\n\n======================================================================\nSUMMARY | 276s (4.6min)\n======================================================================\n✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0\n[MasterDB] ✅ 批次 batch-20260601-152014-7fa36f → +2 新增, ~0 更新 | 总计 785 首\n", "stderr_tail": "[profile] ✅ Loaded profile '__runtime_batch-20260601-152014-7fa36f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260601-152014-7fa36f.yaml\n", "summary": {"timestamp": "2026-06-01T15:31:26.151251+08:00", "wall_clock": 275.9, "total": 2, "success": 2, "awaiting_step2": 0, "failed": 0}}, "status": "success"}
[exit 0]

=== 2026-06-01 15:31:27 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/M9Ixs8PathYoYRtDdvyc90D1nKh
[Feishu] 📐 Expanded master sheet from 720 to 822 rows
[Feishu] ✅ Appended 2 new songs to master sheet (rows 721-722)
[MasterDB] ✅ 批次 batch-20260601-152014-7fa36f → +2 新增, ~0 更新 | 总计 722 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/M9Ixs8PathYo
[15:31:36] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [过载] topic head sent (message_id=om_x100b6ee71b5a0888b37d5b0ba7162e0)
[Feishu IM] ✅ [过载] 过载_V1_raw.mp3 replied
[Feishu IM] ✅ [过载] 过载_V1_mixed.mp3 replied
[Feishu IM] ✅ [过载] 过载_V2_raw.mp3 replied
[Feishu IM] ✅ [过载] 过载_V2_mixed.mp3 replied
[Feishu IM] ✅ [骨中灯] topic head sent (message_id=om_x100b6ee7186a6880b125d04a012a5e0)
[Feishu IM] ✅ [骨中灯] 骨中灯_V1_raw.mp3 replied
[Feishu IM] ✅ [骨中灯] 骨中灯_V1_mixed.mp3 replied
[Feishu IM] ✅ [骨中灯] 骨中灯_V2_raw.mp3 replied
[Feishu IM] ✅ [骨中灯] 骨中灯_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260601-152014-7fa36f
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f

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

=== 2026-06-01 15:48:52 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260601-152014-7fa36f --resume /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f --target-language zh ===
[profile] ✅ Loaded profile '__runtime_batch-20260601-152014-7fa36f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260601-152014-7fa36f.yaml

======================================================================
music-pipeline3000 v2 | 2 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f
Skip Suno: False | Step1 only: False | Version: v4
======================================================================

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

[15:48:56] 🧠 [01_小半_20260601] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-06-01T07:48:56.444Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "01_小半_20260601", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f/01_小半_20260601/song_pgc.mp3", "has_features": true}}
[step1] cache hit: song_pgc.mp3 → 520e744580f1 (saving 1 Gemini call)
[15:48:56] 🌐 Step 1: target_language=zh (injecting override directive)
{"__trace__": true, "ts": "2026-06-01T07:48:56.502Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "01_小半_20260601", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 67.2, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-06-01T07:48:56.502Z", "trace_id": "batch-20260601-152014-7fa36f", "song_key": "01_小半_20260601", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 0.058}
[15:48:56] ✅ [01_小半_20260601] Step 1: 67.2s | prompt=909c | prompt_ok=True lyrics_ok=True
[15:48:56] 🌐 [01_小半_20260601] Step 2: target_language=zh → lang_mode=ZH | single-turn
[15:48:56] 🤖 [01_小半_20260601] Step 2 Turn 2: 16089 chars ≈ 4022 tokens → claude-sonnet-4-6
[15:49:49] ⚠️  [01_小半_20260601] Step 2 API: originality 75% < 85% | 0 copied phrases
[15:49:49] 🔄 [01_小半_20260601] Step 2 API: originality retry 1/3...
[15:50:39] ⚠️  [01_小半_20260601] Step 2 API retry 1: originality 80%
[15:50:39] 🔄 [01_小半_20260601] Step 2 API: originality retry 2/3...
[15:51:29] ⚠️  [01_小半_20260601] Step 2 API retry 2: originality 77%
[15:51:29] 🔄 [01_小半_20260601] Step 2 API: originality retry 3/3...
[15:52:33] ⚠️  [01_小半_20260601] Step 2 API originality retry 3 failed: Expecting value: line 1 column 1 (char 0)
[15:52:33] ⚠️  [01_小半_20260601] Step 2 API: best originality 80% after 3 retries
[15:52:33] ✅ [01_小半_20260601] Step 2 API: 《软骨症》 engine=? | 153.3s | in=44014 out=7905 | ~$0.251
[15:52:33] ✅ [01_小半_20260601] Step 2.5: originality 80% ✓
[15:52:33] ✅ [01_小半_20260601] Step 2: 《软骨症》
[15:52:33] 📁 [01_小半_20260601] Renamed → 01_小半_软骨症_20260601
  📝 [01_小半_软骨症_20260601] lyrics stripped: 3990c → 3984c
[15:52:33] 🎵 [01_小半_软骨症_20260601] Step 3: Suno generation (weirdness=50, style_influence=50)...
  ✅ submitted: ['57579135', 'c4a87f3d']
  🎵 57579135... → submitted
  🎵 c4a87f3d... → submitted
  🎵 57579135... → queued
  🎵 c4a87f3d... → queued
  🎵 57579135... → streaming
  🎵 c4a87f3d... → streaming
  🎵 57579135... → complete
  🎵 c4a87f3d... → complete
[15:55:50]    🎧 [01_小半_软骨症_20260601] Song 1: https://cdn1.suno.ai/57579135-6366-4d94-b317-ca59e7e91743.mp3
[15:55:50]    🎧 [01_小半_软骨症_20260601] Song 2: https://cdn1.suno.ai/c4a87f3d-489f-4f3a-a9bb-dc5e342c0484.mp3
[15:55:50] 🎛️ [01_小半_软骨症_20260601] Step 3.5: 混音...
[15:56:12]    🎚️ [01_小半_软骨症_20260601] Song 1: edm | 低60/中33/高7%
[15:56:31]    🎚️ [01_小半_软骨症_20260601] Song 2: edm | 低45/中51/高4%
[15:56:31] ✅ [01_小半_软骨症_20260601] Step 3.5: 40.7s | 2 songs mixed

======================================================================
SUMMARY | 455s (7.6min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260601-152014-7fa36f → +0 新增, ~2 更新 | 总计 785 首
[exit 0]

=== 2026-06-01 15:56:32 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/YTCzsteslhpDzZt8ASncAaQenle
[Feishu] ⏭️  Skip duplicate (complete): 主角 (https://fileserver.yuchenhu.com/pipeline/batch-20260601-152014-7fa36f/02_%E4%B8%BB%E8%A7%92_20260601/song_pgc.mp3)
[Feishu] 📐 Expanded master sheet from 722 to 823 rows
[Feishu] ✅ Appended 1 new songs to master sheet (rows 723-723)
[MasterDB] ✅ 批次 batch-20260601-152014-7fa36f → +1 新增, ~0 更新 | 总计 723 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/YTCzsteslhpD
[15:56:42] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [软骨症] topic head sent (message_id=om_x100b6ee7fd61a8d4b11b81aec84c106)
[Feishu IM] ✅ [软骨症] 软骨症_V1_raw.mp3 replied
[Feishu IM] ✅ [软骨症] 软骨症_V1_mixed.mp3 replied
[Feishu IM] ✅ [软骨症] 软骨症_V2_raw.mp3 replied
[Feishu IM] ✅ [软骨症] 软骨症_V2_mixed.mp3 replied
[Feishu IM] ✅ [骨中灯] topic head sent (message_id=om_x100b6ee7fa7a58c4b29a8dc5b13a66c)
[Feishu IM] ✅ [骨中灯] 骨中灯_V1_raw.mp3 replied
[Feishu IM] ✅ [骨中灯] 骨中灯_V1_mixed.mp3 replied
[Feishu IM] ✅ [骨中灯] 骨中灯_V2_raw.mp3 replied
[Feishu IM] ✅ [骨中灯] 骨中灯_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260601-152014-7fa36f
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260601-152014-7fa36f

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