
=== 2026-05-07 14:33:13 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-143313-671371 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-143313-671371 --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-143313-671371' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143313-671371.yaml
[step075] cache hit: song_pgc.mp3 → 82cd6cf562e8

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

[14:33:14] 🏥 Health check...
[14:33:16] ✅ qishui: OK
[14:33:16] ✅ netease: OK
[14:33:16] ✅ qq: OK

[14:33:16] 🔍 [01_Đắm Chìm (沦陷)_20260507] Step 0: Fetching...
[14:33:16] 🔍 [02_离开我的依赖（DJ铁柱）_20260507] Step 0: Fetching...
[14:33:16] 🔍 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 0: Fetching...
[14:33:16] 🔍 [04_琵琶曲（东船与西舫）_20260507] Step 0: Fetching...
[14:33:20] ✅ [01_Đắm Chìm (沦陷)_20260507] Step 0: netease | 1046c lyrics
[14:33:20] ⬇️  [01_Đắm Chìm (沦陷)_20260507] Step 0.5: Download from netease...
[14:33:20] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 0: netease | 380c lyrics
[14:33:20] ⬇️  [02_离开我的依赖（DJ铁柱）_20260507] Step 0.5: Download from netease...
[14:33:20] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 0: netease | 293c lyrics
[14:33:20] ⬇️  [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 0.5: Download from netease...
[14:33:22] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 0: netease | 600c lyrics
[14:33:22] ⬇️  [04_琵琶曲（东船与西舫）_20260507] Step 0.5: Download from netease...
[14:33:26] ✅ [01_Đắm Chìm (沦陷)_20260507] Step 0.5: 3928934 bytes | 202.8s
[14:33:26] 🔬 [01_Đắm Chìm (沦陷)_20260507] Step 0.75: Audio features...
[14:33:26] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 0.5: 3808432 bytes | 187.5s
[14:33:26] 🔬 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 0.75: Audio features...
[14:33:26] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 0.75: BPM=128.0 Key=F# minor (28.3s)
[14:33:26] 🧠 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:33:26.343Z", "trace_id": "batch-20260507-143313-671371", "song_key": "03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507/song_pgc.mp3", "has_features": true}}
[step1] cache hit: song_pgc.mp3 → 7ad342bd0654 (saving 1 Gemini call)
{"__trace__": true, "ts": "2026-05-07T06:33:26.393Z", "trace_id": "batch-20260507-143313-671371", "song_key": "03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 42.4, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:33:26.393Z", "trace_id": "batch-20260507-143313-671371", "song_key": "03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 0.05}
[   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
/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:33:26] ⚠️  [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 1.5: prompt 1096c > 1000c, compressing...
  📏 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] prompt 1096c → 986c (smart truncate)
[14:33:26] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 1.5: prompt compressed 1096c → 986c
[14:33:26] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 1: 42.4s | prompt=986c | prompt_ok=True lyrics_ok=True
[14:33:26] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 0.5: 2519768 bytes | 130.1s
[14:33:26] 🔬 [04_琵琶曲（东船与西舫）_20260507] Step 0.75: Audio features...
[14:33:34] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 0.5: 4892932 bytes | 234.4s
[14:33:39] 🔬 [02_离开我的依赖（DJ铁柱）_20260507] Step 0.75: Audio features...
[14:33:56] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 0.75: BPM=108.67 Key=A major (29.7s)
[14:33:56] 🧠 [04_琵琶曲（东船与西舫）_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:33:56.607Z", "trace_id": "batch-20260507-143313-671371", "song_key": "04_琵琶曲（东船与西舫）_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/04_琵琶曲（东船与西舫）_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')
[14:34:08] ✅ [01_Đắm Chìm (沦陷)_20260507] Step 0.75: BPM=128.05 Key=F# major (42.8s)
[14:34:08] 🧠 [01_Đắm Chìm (沦陷)_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:34:08.991Z", "trace_id": "batch-20260507-143313-671371", "song_key": "01_Đắm Chìm (沦陷)_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/01_Đắm Chìm (沦陷)_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')
  ⚠️ 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...
[14:34:26] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 0.75: BPM=127.99 Key=G minor (29.8s)
[14:34:26] 🧠 [02_离开我的依赖（DJ铁柱）_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T06:34:26.443Z", "trace_id": "batch-20260507-143313-671371", "song_key": "02_离开我的依赖（DJ铁柱）_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/02_离开我的依赖（DJ铁柱）_20260507/song_pgc.mp3", "has_features": true}}
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/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: 38s | prompt_tokens=7742 completion=1390
{"__trace__": true, "ts": "2026-05-07T06:35:10.480Z", "trace_id": "batch-20260507-143313-671371", "song_key": "04_琵琶曲（东船与西舫）_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 38.1, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:35:10.480Z", "trace_id": "batch-20260507-143313-671371", "song_key": "04_琵琶曲（东船与西舫）_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 73.873}
[14:35:10] ⚠️  [04_琵琶曲（东船与西舫）_20260507] Step 1.5: prompt 1219c > 1000c, compressing...
  📏 [04_琵琶曲（东船与西舫）_20260507] prompt 1219c → 927c (smart truncate)
[14:35:10] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 1.5: prompt compressed 1219c → 927c
[14:35:10] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 1: 38.1s | prompt=927c | prompt_ok=True lyrics_ok=True
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  📊 Gemini official: 41s | prompt_tokens=10867 completion=1030
{"__trace__": true, "ts": "2026-05-07T06:36:01.199Z", "trace_id": "batch-20260507-143313-671371", "song_key": "02_离开我的依赖（DJ铁柱）_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 40.7, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:36:01.199Z", "trace_id": "batch-20260507-143313-671371", "song_key": "02_离开我的依赖（DJ铁柱）_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 94.756}
[14:36:01] ⚠️  [02_离开我的依赖（DJ铁柱）_20260507] Step 1.5: prompt 1195c > 1000c, compressing...
  📏 [02_离开我的依赖（DJ铁柱）_20260507] prompt 1195c → 852c (smart truncate)
[14:36:01] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 1.5: prompt compressed 1195c → 852c
[14:36:01] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 1: 40.7s | prompt=852c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 60s | prompt_tokens=10042 completion=1233
{"__trace__": true, "ts": "2026-05-07T06:36:21.017Z", "trace_id": "batch-20260507-143313-671371", "song_key": "01_Đắm Chìm (沦陷)_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 60.5, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T06:36:21.017Z", "trace_id": "batch-20260507-143313-671371", "song_key": "01_Đắm Chìm (沦陷)_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 132.025}
[14:36:21] ✅ [01_Đắm Chìm (沦陷)_20260507] Step 1: 60.5s | prompt=920c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 184s (3.1min)
======================================================================
✅ Done: 4 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260507-143313-671371 → +0 新增, ~0 更新 | 总计 626 首
[exit 0]

=== 2026-05-07 14:36:22 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260507-143313-671371 --profile __runtime_batch-20260507-143313-671371 --resume-mode each --skip-feishu ===
[phase2] batch=batch-20260507-143313-671371 pending=4 groups=2
[phase2] group 1/2 -> 01_Đắm Chìm (沦陷)_20260507, 02_离开我的依赖（DJ铁柱）_20260507, 03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507
[profile] ✅ Loaded profile '__runtime_batch-20260507-143313-671371' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143313-671371.yaml
[phase2] 🌐 01_Đắm Chìm (沦陷)_20260507: target_language=auto
[profile] ✅ Loaded profile '__runtime_batch-20260507-143313-671371' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143313-671371.yaml
[phase2] 🌐 02_离开我的依赖（DJ铁柱）_20260507: target_language=auto
[profile] ✅ Loaded profile '__runtime_batch-20260507-143313-671371' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143313-671371.yaml
[phase2] 🌐 03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507: target_language=auto
[phase2] resume -> /usr/bin/python3 /srv/repos/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260507-143313-671371 --profile __runtime_batch-20260507-143313-671371 --skip-feishu
[phase2] group 2/2 -> all songs already handled, skipping
[14:36:22] 🌐 [01_Đắm Chìm (沦陷)_20260507] Step 2: target_language=auto → lang_mode=AUTO
[14:36:22] 🤖 [01_Đắm Chìm (沦陷)_20260507] Step 2 API: 13145 chars ≈ 3286 tokens → claude-sonnet-4-6
[14:36:22] 🌐 [02_离开我的依赖（DJ铁柱）_20260507] Step 2: target_language=auto → lang_mode=AUTO
[14:36:22] 🤖 [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API: 12811 chars ≈ 3202 tokens → claude-sonnet-4-6
[14:36:22] 🌐 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 2: target_language=auto → lang_mode=AUTO
[14:36:22] 🤖 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 2 API: 13733 chars ≈ 3433 tokens → claude-sonnet-4-6
[14:36:53] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 2 API: 《你走那年 山河还在下雪》 | 31.4s | in=10076 out=2125 | ~$0.062
[14:36:59] ⚠️  [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API: originality 81% < 85% | 0 copied phrases
[14:36:59] 🔄 [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API: originality retry 1/3...
[14:37:04] ⚠️  [01_Đắm Chìm (沦陷)_20260507] Step 2 API: originality 77% < 85% | 0 copied phrases
[14:37:04] 🔄 [01_Đắm Chìm (沦陷)_20260507] Step 2 API: originality retry 1/3...
[14:37:21] ⚠️  [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API retry 1: originality 80%
[14:37:21] 🔄 [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API: originality retry 2/3...
[14:37:44] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API retry 2: originality 85% ✓
[14:37:44] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 2 API: 《散场以后只剩我一个》 | 82.5s | in=35551 out=5581 | ~$0.190
[14:37:45] ⚠️  [01_Đắm Chìm (沦陷)_20260507] Step 2 API retry 1: originality 81%
[14:37:45] 🔄 [01_Đắm Chìm (沦陷)_20260507] Step 2 API: originality retry 2/3...
[14:38:26] ⚠️  [01_Đắm Chìm (沦陷)_20260507] Step 2 API retry 2: originality 84%
[14:38:26] 🔄 [01_Đắm Chìm (沦陷)_20260507] Step 2 API: originality retry 3/3...
[14:39:10] ⚠️  [01_Đắm Chìm (沦陷)_20260507] Step 2 API retry 3: originality 80%
[14:39:10] ⚠️  [01_Đắm Chìm (沦陷)_20260507] Step 2 API: best originality 84% after 3 retries
[14:39:20] ⚠️  Step 2 title library fetch failed: 
[14:39:20] ✅ [01_Đắm Chìm (沦陷)_20260507] Step 2 API: 《偏偏记得你说过不爱我》 | 168.0s | in=54814 out=8691 | ~$0.295
{"timestamp": "2026-05-07T14:36:22.211197+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371", "profile": "__runtime_batch-20260507-143313-671371", "concurrency": 3, "resume_mode": "each", "pending_song_count": 4, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/01_Đắm Chìm (沦陷)_20260507", "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/02_离开我的依赖（DJ铁柱）_20260507", "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507"], "success_count": 3, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/01_Đắm Chìm (沦陷)_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/01_Đắm Chìm (沦陷)_20260507/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-20260507-143313-671371/01_Đắm Chìm (沦陷)_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/01_Đắm Chìm (沦陷)_20260507/step2_json_b.json", "agent_summary": "API direct: 偏偏记得你说过不爱我", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/02_离开我的依赖（DJ铁柱）_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/02_离开我的依赖（DJ铁柱）_20260507/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-20260507-143313-671371/02_离开我的依赖（DJ铁柱）_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/02_离开我的依赖（DJ铁柱）_20260507/step2_json_b.json", "agent_summary": "API direct: 散场以后只剩我一个", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507/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-20260507-143313-671371/03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-143313-671371/03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507/step2_json_b.json", "agent_summary": "API direct: 你走那年 山河还在下雪", "returncode": 0, "stderr": "", "attempt": 1}]}]}], "resume": {"status": "success", "returncode": 0, "stdout_tail": "14:40:28] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 2 API: 《你走后 长安下了雪》 | 31.8s | in=10045 out=2170 | ~$0.063\n[14:40:28] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 2.5: originality 79% ✓\n[14:40:28] ✅ [04_琵琶曲（东船与西舫）_20260507] Step 2: 《你走后 长安下了雪》\n[14:40:28] 📁 [04_琵琶曲（东船与西舫）_20260507] Renamed → 04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507\n  📝 [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] lyrics stripped: 3199c → 3191c\n[14:40:28] 🎵 [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[14:40:28] 🎨 [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Step 4: SeeDream cover (parallel)...\n  ✅ submitted: ['fba33f79', '87da3151']\n  🎵 fba33f79... → submitted\n  🎵 87da3151... → submitted\n  🎵 fba33f79... → queued\n  🎵 87da3151... → queued\n  🎵 fba33f79... → streaming\n  🎵 87da3151... → streaming\n  ✅ submitted: ['70460cf6', '271c37cf']\n  🎵 70460cf6... → submitted\n  🎵 271c37cf... → submitted\n  🎵 70460cf6... → queued\n  🎵 271c37cf... → queued\n  🎵 70460cf6... → streaming\n  🎵 271c37cf... → streaming\n  🎵 0ef66313... → complete\n  🎵 3f314256... → complete\n[14:42:53]    🎧 [01_Đắm Chìm (沦陷)_20260507] Song 1: https://cdn1.suno.ai/3f314256-c4a2-42b3-8c35-942e550930b6.mp3\n[14:42:53]    🎧 [01_Đắm Chìm (沦陷)_20260507] Song 2: https://cdn1.suno.ai/0ef66313-cd81-4de7-88bb-a9ae81e968a4.mp3\n[14:42:53] 🎛️ [01_Đắm Chìm (沦陷)_20260507] Step 3.5: 混音...\n[14:43:13]    🎚️ [01_Đắm Chìm (沦陷)_20260507] Song 1: edm | 低71/中23/高6%\n  ✅ submitted: ['c27bbee4', '98d6265e']\n  🎵 fba33f79... → complete\n  🎵 87da3151... → complete\n[14:43:14]    🎧 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Song 1: https://cdn1.suno.ai/fba33f79-973a-4f2d-83cf-dd816669f6c6.mp3\n[14:43:14]    🎧 [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Song 2: https://cdn1.suno.ai/87da3151-898b-4967-aa54-800873bb030e.mp3\n[14:43:14] 🎛️ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 3.5: 混音...\n  🎵 c27bbee4... → queued\n  🎵 98d6265e... → queued\n[14:43:31]    🎚️ [01_Đắm Chìm (沦陷)_20260507] Song 2: edm | 低63/中33/高4%\n[14:43:31] ✅ [01_Đắm Chìm (沦陷)_20260507] Step 3.5: 37.9s | 2 songs mixed\n[14:43:31] ⚠️  [01_Đắm Chìm (沦陷)_20260507] Step 4: http_403 (non-fatal)\n[14:43:47]    🎚️ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Song 1: hip_hop | 低35/中59/高5%\n  🎵 70460cf6... → complete\n  🎵 c27bbee4... → streaming\n  🎵 98d6265e... → streaming\n[14:44:03]    🎚️ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Song 2: edm | 低49/中47/高4%\n[14:44:03] ✅ [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 3.5: 49.5s | 2 songs mixed\n[14:44:03] ⚠️  [03_青衣 (DJ我为你唱一曲如游丝的气息)_20260507] Step 4: http_403 (non-fatal)\n  🎵 271c37cf... → complete\n[14:44:51]    🎧 [02_离开我的依赖（DJ铁柱）_20260507] Song 1: https://cdn1.suno.ai/70460cf6-82f2-4a39-9634-c2a1f25cdfe2.mp3\n[14:44:51]    🎧 [02_离开我的依赖（DJ铁柱）_20260507] Song 2: https://cdn1.suno.ai/271c37cf-285d-4cda-a05c-4c5df20a4ae8.mp3\n[14:44:51] 🎛️ [02_离开我的依赖（DJ铁柱）_20260507] Step 3.5: 混音...\n[14:45:05]    🎚️ [02_离开我的依赖（DJ铁柱）_20260507] Song 1: edm | 低68/中26/高6%\n[14:45:21]    🎚️ [02_离开我的依赖（DJ铁柱）_20260507] Song 2: edm | 低69/中25/高6%\n[14:45:21] ✅ [02_离开我的依赖（DJ铁柱）_20260507] Step 3.5: 30.7s | 2 songs mixed\n[14:45:21] ⚠️  [02_离开我的依赖（DJ铁柱）_20260507] Step 4: http_403 (non-fatal)\n  🎵 98d6265e... → complete\n  🎵 c27bbee4... → complete\n[14:46:35]    🎧 [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Song 1: https://cdn1.suno.ai/c27bbee4-9442-480e-8c01-ce24ed2f47c0.mp3\n[14:46:35]    🎧 [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Song 2: https://cdn1.suno.ai/98d6265e-75fd-4105-a37a-7a040fe1f962.mp3\n[14:46:35] 🎛️ [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Step 3.5: 混音...\n[14:46:52]    🎚️ [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Song 1: pop | 低46/中50/高5%\n[14:47:07]    🎚️ [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Song 2: pop | 低40/中55/高5%\n[14:47:07] ✅ [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Step 3.5: 32.4s | 2 songs mixed\n[14:47:07] ⚠️  [04_琵琶曲（东船与西舫）_你走后_长安下了雪_20260507] Step 4: http_403 (non-fatal)\n\n======================================================================\nSUMMARY | 464s (7.7min)\n======================================================================\n✅ Done: 4 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0\n[MasterDB] ✅ 批次 batch-20260507-143313-671371 → +4 新增, ~0 更新 | 总计 630 首\n", "stderr_tail": "[profile] ✅ Loaded profile '__runtime_batch-20260507-143313-671371' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-143313-671371.yaml\n", "summary": {"timestamp": "2026-05-07T14:47:07.572248+08:00", "wall_clock": 464.2, "total": 4, "success": 4, "awaiting_step2": 0, "failed": 0}}, "status": "success"}
[exit 0]

=== 2026-05-07 14:47:08 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-143313-671371 ===
[Feishu] ✅ Exported 4 songs to: https://ccnu62373cgc.feishu.cn/sheets/WedqsEICehuGM5tPv2kcY4htnPf
[Feishu] 📐 Expanded master sheet from 567 to 671 rows
[Feishu] ✅ Appended 4 new songs to master sheet (rows 568-571)
[MasterDB] ✅ 批次 batch-20260507-143313-671371 → +4 新增, ~0 更新 | 总计 571 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/WedqsEICehuG
[14:47:18] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [偏偏记得你说过不爱我] topic head sent (message_id=om_x100b50f719bf5500b2910a4f8e90766)
[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_x100b50f7160cccacb4a0d66d6a91191)
[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_x100b50f7176cc0acb27ca05fe8a5e2f)
[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_x100b50f714476cb8b3d29ee3e6fbb61)
[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-20260507-143313-671371
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-143313-671371
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-143313-671371

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