v0.4.2 - lite jsonl race fix
v0.4.2 — lite jsonl race fix
jp-harness-lite.jsonl への append を Stop hook(Add-Content / 直接 open('a'))から外し、metrics.record_lite 経由で _rotate_lock 保護下に集約しました。Windows で O_APPEND が atomic でない問題に対する予防策です。
Fixed
- Stop hook の lite jsonl append が Windows で非アトミックになり得る race を、
metrics.record_liteへの集約で解消 ja-output-stats --source liteが rotated archive (.1.jsonl) を読まなかったのを修正(--source metricsと挙動を統一)- hook の
rules_cli引数を--session=<value>/--mode=<value>形式に変更(-始まりの session id 誤認防止)
Added
metrics.record_lite()—_rotate_lock+_maybe_rotateを再利用する lite jsonl 専用書き込み関数。lock 取得失敗時は drop(record()の best-effort と意図的に divergence、予防が目的のため)rules_cli --append-lite STATE_FILE --session ID --mode MODE— hook が一度の呼び出しで lint と append を済ませるための optional フラグ群
Tests
- 並行
record_liteレーステスト(N=32) rules_cli --append-lite統合テスト(stdout JSON + on-disk entry の両方検証)ja-output-stats --source litearchive + active 読み込みテスト- 計 7 件追加 → pytest 212 passed / ruff clean
Review
gpt-5.4 による code review 2 ラウンド:
- 1 ラウンド目: BLOCKER 0、MEDIUM × 2 + MINOR × 1 → 全件対応(archive read / lock-failure drop / equals-form args)
- 2 ラウンド目: No correctness findings、docstring 文言の nit 1 件のみ修正
互換性
- スキーマ変更なし(
schema_version="1"for lite)。既存 jsonl エントリはそのまま valid。 record()(strict メトリクス)は best-effort 設計を意図的に維持(既存挙動互換)。_run_strict(v0.3.x missing-finalize 経路)は変更なし。
Full diff: v0.4.1...v0.4.2