# Incident log — WP44 (reproducibility record) | # | When (ET) | What | Impact | Recovery | |---|---|---|---|---| | I-1 | 2026-11-03 ~15:45 | `openalex_snapshot.py --id-list` second pass: workers had `ID_SET = None` (macOS spawn start method does not inherit module globals) | 68 part files marked error, no data loss | pool initializer loads the id set per worker; ledger reset; rerun | | I-2 | 2026-11-03 ~15:50 | DuckDB "Too many open files" reading 1,898 Parquet files per table | linkage step failed | `compact_tables.py` (one Parquet file per table) + `ulimit -n 65536` | | I-3 | 2026-11-03 ~16:30 | `multiprocessing.Pool` + pyarrow in spawned workers hangs on macOS (0 % CPU, no progress) for the classifier | classification test stalled 10 min | shard mode: independent processes started by `run_classify_shards.sh` (two nodes) | | I-4 | 2026-11-03 ~16:58 | **M3U96b froze** (ping 100 % loss, SSH "host is down") while running the second snapshot pass (8 curl+parse workers), the SPECTER2 embedding job (MPS) and earlier DuckDB jobs concurrently | second pass (≈ 1,400/1,898 files done), the chained corpus v2 / classification, and the M3U96b embedding share interrupted; the three other embedding nodes unaffected | automatic restart expected (`mld harden`); all jobs are resumable from ledgers/shards; rule adopted: never run ingestion, embeddings and classification concurrently on one node |