概要
adapters/harness/jsonl_source.py の _extract_artifacts に複数のバグがあるが、現状 loci index の実経路では未使用 (registry は .detect()/.id のみ利用、実取り込みは index_file/index_opencode_db)。有効化時に顕在化する地雷として先行修正しておく。
詳細 (jsonl_source.py:116-128)
[json.loads(l) for l in read_text().splitlines()] は空行/1行破損でセッション全 touch/rename を無言喪失 (except (OSError, JSONDecodeError): return ())。実ログは末尾空行/切詰め行を含みうる。
- 座標空間の食い違い:
read_text().splitlines() は空行/不正行を含むが、ply_start/ply_end は _load_raw_entries (空行/不正行スキップ) 由来。先行する空行/欠落で entry_slice がズレ、誤った entry から touch/rename を抽出。
read_text()/fetch_verbatim が既定エンコーディング (非UTF-8ロケールで破損)。
修正案
概要
adapters/harness/jsonl_source.pyの_extract_artifactsに複数のバグがあるが、現状loci indexの実経路では未使用 (registry は.detect()/.idのみ利用、実取り込みはindex_file/index_opencode_db)。有効化時に顕在化する地雷として先行修正しておく。詳細 (
jsonl_source.py:116-128)[json.loads(l) for l in read_text().splitlines()]は空行/1行破損でセッション全 touch/rename を無言喪失 (except (OSError, JSONDecodeError): return ())。実ログは末尾空行/切詰め行を含みうる。read_text().splitlines()は空行/不正行を含むが、ply_start/ply_endは_load_raw_entries(空行/不正行スキップ) 由来。先行する空行/欠落で entry_slice がズレ、誤った entry から touch/rename を抽出。read_text()/fetch_verbatimが既定エンコーディング (非UTF-8ロケールで破損)。修正案
_load_raw_entriesの出力を artifact 抽出にも再利用 (index_file と同様)read_text(encoding="utf-8")