{
  "timestamp": "2026-05-07T14:42:29.452079+08:00",
  "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-144059-fe50f0",
  "profile": "__runtime_batch-20260507-144059-fe50f0",
  "concurrency": 3,
  "resume_mode": "each",
  "pending_song_count": 1,
  "groups": [
    {
      "group_index": 1,
      "songs": [
        "/srv/music-files-platform-next/pipeline/batch-20260507-144059-fe50f0/02_乌兰巴托的夜_20260507"
      ],
      "success_count": 1,
      "failed_count": 0,
      "results": [
        {
          "status": "success",
          "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-144059-fe50f0/02_乌兰巴托的夜_20260507",
          "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-144059-fe50f0/02_乌兰巴托的夜_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-144059-fe50f0/02_乌兰巴托的夜_20260507",
              "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-144059-fe50f0/02_乌兰巴托的夜_20260507/step2_json_b.json",
              "agent_summary": "API direct: 草原没有留下我",
              "returncode": 0,
              "stderr": "",
              "attempt": 1
            }
          ]
        }
      ]
    }
  ],
  "resume": {
    "status": "success",
    "returncode": 0,
    "stdout_tail": "\n======================================================================\nmusic-pipeline3000 v2 | 5 songs\n======================================================================\nGemini concurrency: 2 | Suno concurrency: 3\nOutput: /srv/music-files-platform-next/pipeline/batch-20260507-144059-fe50f0\nSkip Suno: False | Step1 only: False | Version: v4\n======================================================================\n\n[14:43:45] 🏥 Health check...\n[14:43:46] ✅ qishui: OK\n[14:43:46] ✅ netease: OK\n[14:43:46] ✅ qq: OK\n\n[14:43:46] 🔍 [01_站在草原望北京_20260507] Step 0: Fetching...\n[14:43:46] 🔍 [03_我的楼兰_20260507] Step 0: Fetching...\n[14:43:46] 🔍 [04_孤独的牧羊人_20260507] Step 0: Fetching...\n[14:43:46] 🔍 [05_鸿雁_20260507] Step 0: Fetching...\n  📝 [02_乌兰巴托的夜_20260507] lyrics stripped: 3068c → 3063c\n[14:43:46] 🎵 [02_乌兰巴托的夜_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[14:43:46] 🎨 [02_乌兰巴托的夜_20260507] Step 4: SeeDream cover (parallel)...\n  ✅ submitted: ['fb10453a', '882cc37b']\n  🎵 fb10453a... → submitted\n  🎵 882cc37b... → submitted\n[14:43:49] ⚠️  [netease] No audio URL for '站在草原望北京', likely no license\n[14:43:49] 🔄 [01_站在草原望北京_20260507] Step 0: retry 1/2 in 5s...\n[14:43:50] ⚠️  [netease] No audio URL for '我的楼兰', likely no license\n[14:43:50] 🔄 [03_我的楼兰_20260507] Step 0: retry 1/2 in 5s...\n[14:43:50] ⚠️  [netease] No audio URL for '孤独的牧羊人', likely no license\n[14:43:50] 🔄 [04_孤独的牧羊人_20260507] Step 0: retry 1/2 in 5s...\n[14:43:52] ⚠️  [netease] No audio URL for '鸿雁', likely no license\n[14:43:52] 🔄 [05_鸿雁_20260507] Step 0: retry 1/2 in 5s...\n[14:43:58] ⚠️  [netease] No audio URL for '我的楼兰', likely no license\n[14:43:58] 🔄 [03_我的楼兰_20260507] Step 0: retry 2/2 in 10s...\n[14:43:58] ⚠️  [netease] No audio URL for '站在草原望北京', likely no license\n[14:43:58] 🔄 [01_站在草原望北京_20260507] Step 0: retry 2/2 in 10s...\n[14:43:58] ⚠️  [netease] No audio URL for '孤独的牧羊人', likely no license\n[14:43:58] 🔄 [04_孤独的牧羊人_20260507] Step 0: retry 2/2 in 10s...\n  🎵 fb10453a... → queued\n  🎵 882cc37b... → queued\n[14:44:00] ⚠️  [netease] No audio URL for '鸿雁', likely no license\n[14:44:00] 🔄 [05_鸿雁_20260507] Step 0: retry 2/2 in 10s...\n  🎵 fb10453a... → streaming\n  🎵 882cc37b... → streaming\n[14:44:10] ⚠️  [netease] No audio URL for '我的楼兰', likely no license\n[14:44:10] ❌ [03_我的楼兰_20260507] Step 0: No audio URL\n[14:44:11] ⚠️  [netease] No audio URL for '孤独的牧羊人', likely no license\n[14:44:11] ❌ [04_孤独的牧羊人_20260507] Step 0: No audio URL\n[14:44:11] ⚠️  [netease] No audio URL for '站在草原望北京', likely no license\n[14:44:11] ❌ [01_站在草原望北京_20260507] Step 0: No audio URL\n[14:44:13] ⚠️  [netease] No audio URL for '鸿雁', likely no license\n[14:44:13] ❌ [05_鸿雁_20260507] Step 0: No audio URL\n  🎵 fb10453a... → complete\n  🎵 882cc37b... → complete\n[14:46:43]    🎧 [02_乌兰巴托的夜_20260507] Song 1: https://cdn1.suno.ai/fb10453a-dbd5-4ace-af3e-3bfad573cdf3.mp3\n[14:46:43]    🎧 [02_乌兰巴托的夜_20260507] Song 2: https://cdn1.suno.ai/882cc37b-5a53-4754-a5ad-7c53ecb93ff4.mp3\n[14:46:43] 🎛️ [02_乌兰巴托的夜_20260507] Step 3.5: 混音...\n[14:47:04]    🎚️ [02_乌兰巴托的夜_20260507] Song 1: pop | 低38/中60/高1%\n[14:47:20]    🎚️ [02_乌兰巴托的夜_20260507] Song 2: pop | 低39/中57/高3%\n[14:47:20] ✅ [02_乌兰巴托的夜_20260507] Step 3.5: 37.2s | 2 songs mixed\n[14:47:20] ⚠️  [02_乌兰巴托的夜_20260507] Step 4: http_403 (non-fatal)\n\n======================================================================\nSUMMARY | 214s (3.6min)\n======================================================================\n✅ Done: 1 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 4\n[MasterDB] ✅ 批次 batch-20260507-144059-fe50f0 → +1 新增, ~0 更新 | 总计 631 首\n",
    "stderr_tail": "[profile] ✅ Loaded profile '__runtime_batch-20260507-144059-fe50f0' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-144059-fe50f0.yaml\n",
    "summary": {
      "timestamp": "2026-05-07T14:47:20.535958+08:00",
      "wall_clock": 213.6,
      "total": 5,
      "success": 1,
      "awaiting_step2": 0,
      "failed": 4
    }
  },
  "status": "success"
}