Skip to content

v0.4.2 - lite jsonl race fix

Choose a tag to compare

@Sora-bluesky Sora-bluesky released this 22 Apr 06:55
· 8 commits to main since this release
8c49f11

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 lite archive + 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