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

[15:27:37] 🏥 Health check...
[15:27:39] ✅ qishui: OK
[15:27:39] ✅ netease: OK
[15:27:39] ✅ qq: OK

[15:27:39] 🔍 [01_奢香夫人_20260507] Step 0: Fetching...
[15:27:39] 🔍 [02_我期待的不是雪_20260507] Step 0: Fetching...
[15:27:39] 🔍 [03_晚安_20260507] Step 0: Fetching...
[15:27:40] ✅ [qishui] Direct ID fetch: '晚安' id=7053911718195365890
[15:27:40] 🔄 [03_晚安_20260507] Step 0: retry 1/2 in 5s (no lyrics yet)...
[15:27:40] ✅ [qishui] Direct ID fetch: '奢香夫人' id=7158516728224286731
[15:27:40] ✅ [01_奢香夫人_20260507] Step 0: qishui | 601c lyrics
[15:27:40] ⬇️  [01_奢香夫人_20260507] Step 0.5: Download from qishui...
[15:27:42] ✅ [02_我期待的不是雪_20260507] Step 0: netease | 47c lyrics
[15:27:42] ⬇️  [02_我期待的不是雪_20260507] Step 0.5: Download from netease...
[15:27:45] ⚠️  [01_奢香夫人_20260507] Step 0.5: Only 60.0s preview (expected 259s)
[15:27:45] 🔒 [01_奢香夫人_20260507] Step 0.5: source_id locked, skipping cross-platform fallback
[15:27:45] ❌ [01_奢香夫人_20260507] Step 0.5: All platforms returned preview (60.0s), skipping song
[15:27:45] ✅ [qishui] Direct ID fetch: '晚安' id=7053911718195365890
[15:27:45] 🔄 [03_晚安_20260507] Step 0: retry 2/2 in 10s (no lyrics yet)...
[15:27:48] ✅ [02_我期待的不是雪_20260507] Step 0.5: 3116742 bytes | 170.0s
[15:27:48] 🔬 [02_我期待的不是雪_20260507] Step 0.75: Audio features...
[15:27:57] ✅ [qishui] Direct ID fetch: '晚安' id=7053911718195365890
[15:27:57] ⚠️  [03_晚安_20260507] Step 0: No lyrics found — proceeding without (Gemini will generate from audio)
[15:27:57] ✅ [03_晚安_20260507] Step 0: qishui | 0c lyrics
[15:27:57] ⬇️  [03_晚安_20260507] Step 0.5: Download from qishui...
[15:27:59] ⚠️  [03_晚安_20260507] Step 0.5: Only 30.0s preview (expected 267s)
[15:27:59] 🔒 [03_晚安_20260507] Step 0.5: source_id locked, skipping cross-platform fallback
[15:27:59] ❌ [03_晚安_20260507] Step 0.5: All platforms returned preview (30.0s), skipping song
[15:28:12] ✅ [02_我期待的不是雪_20260507] Step 0.75: BPM=112.79 Key=C minor (23.4s)
[15:28:12] 🧠 [02_我期待的不是雪_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:28:12.217Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146/02_我期待的不是雪_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 #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-07T07:28:42.219Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 4.4, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:28:42.220Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 30.002}
[15:28:42] ❌ [02_我期待的不是雪_20260507] Step 1: http_503 (4.4s)

======================================================================
SUMMARY | 63s (1.0min)
======================================================================
✅ Done: 0 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 3
[exit 0]

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

=== 2026-05-07 15:28:42 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-152735-66b146 ===
[Feishu] No successful songs to export.
[exit 0]

=== 2026-05-07 15:37:52 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-152735-66b146 --resume /srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146 ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-152735-66b146' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-152735-66b146.yaml
[step05] cache hit: b2a8dfe3186f → song_pgc.mp3

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

[15:37:54] 🏥 Health check...
[15:37:58] ✅ qishui: OK
[15:37:58] ✅ netease: OK
[15:37:58] ✅ qq: OK

[15:37:58] ⬇️  [01_奢香夫人_20260507] Step 0.5: Download from qishui...
[15:37:58] ⚠️  [01_奢香夫人_20260507] Step 0.5: Only 60.0s preview (expected 259s)
[15:37:58] 🔒 [01_奢香夫人_20260507] Step 0.5: source_id locked, skipping cross-platform fallback
[15:37:58] ❌ [01_奢香夫人_20260507] Step 0.5: All platforms returned preview (60.0s), skipping song
[15:37:58] 🧠 [02_我期待的不是雪_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:37:58.093Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146/02_我期待的不是雪_20260507/song_pgc.mp3", "has_features": true}}
[step05] cache hit: feb6ea1ef6b4 → song_pgc.mp3
[15:37:58] ⬇️  [03_晚安_20260507] Step 0.5: Download from qishui...
[15:37:58] ⚠️  [03_晚安_20260507] Step 0.5: Only 30.0s preview (expected 267s)
[15:37:58] 🔒 [03_晚安_20260507] Step 0.5: source_id locked, skipping cross-platform fallback
[15:37:58] ❌ [03_晚安_20260507] Step 0.5: All platforms returned preview (30.0s), skipping song
  ⚠️ 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-07T07:38:26.583Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 2.5, "cost_usd": null, "status": "http_503"}
{"__trace__": true, "ts": "2026-05-07T07:38:26.584Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 28.491}
[15:38:26] ❌ [02_我期待的不是雪_20260507] Step 1: http_503 (2.5s)

======================================================================
SUMMARY | 28s (0.5min)
======================================================================
✅ Done: 0 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 3
[exit 0]

=== 2026-05-07 15:38:26 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-152735-66b146 ===
[Feishu] No successful songs to export.
[exit 0]

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

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

[15:38:28] 🏥 Health check...
[15:38:30] ✅ qishui: OK
[15:38:30] ✅ netease: OK
[15:38:30] ✅ qq: OK

[15:38:30] 🔬 [01_奢香夫人_20260507] Step 0.75: Audio features...
[15:38:30] 🧠 [02_我期待的不是雪_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:38:30.103Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146/02_我期待的不是雪_20260507/song_pgc.mp3", "has_features": true}}
[   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
/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:38:30] 🔬 [03_晚安_20260507] Step 0.75: Audio features...
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
[15:38:40] ✅ [01_奢香夫人_20260507] Step 0.75: BPM=82.94 Key=C# minor (10.8s)
  ⚠️ Gemini official error: Server disconnected
  🔄 Retry 2/4 in 20s...
{"__trace__": true, "ts": "2026-05-07T07:38:40.940Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_end", "status": "failed", "duration_sec": 10.837, "error": "CancelledError: "}
[   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')
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 365, in run_song
    lyrics = (song_dir / "lyrics.txt").read_text()
  File "/usr/lib/python3.13/pathlib/_local.py", line 548, in read_text
    return PathBase.read_text(self, encoding, errors, newline)
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_abc.py", line 632, in read_text
    with self.open(mode='r', 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-152735-66b146/01_奢香夫人_20260507/lyrics.txt'
[exit 1]

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

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

[15:38:45] 🏥 Health check...
[15:38:47] ✅ qishui: OK
[15:38:47] ✅ netease: OK
[15:38:47] ✅ qq: OK

[15:38:47] 🧠 [02_我期待的不是雪_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:38:47.685Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146/02_我期待的不是雪_20260507/song_pgc.mp3", "has_features": true}}
[15:38:47] 🔬 [03_晚安_20260507] Step 0.75: Audio features...
{"__trace__": true, "ts": "2026-05-07T07:38:47.753Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_end", "status": "failed", "duration_sec": 0.068, "error": "CancelledError: "}
[   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
/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')
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 365, in run_song
    lyrics = (song_dir / "lyrics.txt").read_text()
  File "/usr/lib/python3.13/pathlib/_local.py", line 548, in read_text
    return PathBase.read_text(self, encoding, errors, newline)
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_abc.py", line 632, in read_text
    with self.open(mode='r', 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-152735-66b146/01_奢香夫人_20260507/lyrics.txt'
[exit 1]

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

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

[15:45:33] 🏥 Health check...
[15:45:34] ✅ qishui: OK
[15:45:34] ✅ netease: OK
[15:45:34] ✅ qq: OK

[15:45:34] 🧠 [02_我期待的不是雪_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:45:34.914Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-152735-66b146/02_我期待的不是雪_20260507/song_pgc.mp3", "has_features": true}}
[15:45:34] 🔬 [03_晚安_20260507] Step 0.75: Audio features...
{"__trace__": true, "ts": "2026-05-07T07:45:34.968Z", "trace_id": "batch-20260507-152735-66b146", "song_key": "02_我期待的不是雪_20260507", "step": "step1", "type": "step_end", "status": "failed", "duration_sec": 0.054, "error": "CancelledError: "}
[   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
/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')
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 365, in run_song
    lyrics = (song_dir / "lyrics.txt").read_text()
  File "/usr/lib/python3.13/pathlib/_local.py", line 548, in read_text
    return PathBase.read_text(self, encoding, errors, newline)
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/pathlib/_abc.py", line 632, in read_text
    with self.open(mode='r', 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-152735-66b146/01_奢香夫人_20260507/lyrics.txt'
[exit 1]
