diff --git a/docs/v3-reproducibility-results.md b/docs/v3-reproducibility-results.md index 6edd255..df0ac7e 100644 --- a/docs/v3-reproducibility-results.md +++ b/docs/v3-reproducibility-results.md @@ -51,7 +51,8 @@ hard link非対応filesystemでは失敗し、危険な直接書込みfallback [保証範囲と制約](../src/ext/uchardet/corpus/ARTIFACTS.md)を明記した。 人工入力で途中例外、同一/異なる内容の同時公開、再実行、既存出力保護を検証。 -強制killや電源断を実機で検証したとは扱わない。corpus全体のtransactionでもない。 +当初の #22 は強制killを実行していない。後述の追加検証でも電源断や +corpus全体のtransactionを検証したとは扱わない。 保存済みFrench trainingを新しいファイル名で再生成し、元manifestから照合した。 同じ出力先での再実行も成功。旧生成物に対し次が一致した。 @@ -68,6 +69,34 @@ helperが依存hashへ加わったため、artifactと契約provenanceのhashは [集計とhash](benchmarks/v3-reproducibility-2026-09-21.json)を公開する。 本文・archive・生成model自体はGit管理外に保持する。 +## 子Pythonプロセスの公開境界での強制終了 + +[uchardet #28](https://github.com/PyYoshi/uchardet/pull/28)で、実際の子プロセスを +hard link公開の直前・直後で停止するテストを追加した。対象はテスト自身が起動した +Pythonと一時ディレクトリだけ。engine、model、公開helperの実装は変更していない。 + +時刻だけを頼りにkillせず、子が公開境界に到達したことを同期してから強制終了する。 +finallyによるcleanupを通らない場合に、次を確認する。 + +- 公開前なら最終名は存在せず、公開後なら完全なbyte列だけが存在する。 +- 完全な内容の残留一時ファイルが存在していても、同じ生成物を再公開できる。 +- 再実行後のmtimeを維持し、異なる内容での上書きを拒否する。 +- 他プロセス由来となった残留一時ファイルを自動削除しない。 + +ローカルCPython 3.14でartifact test 8件、corpus test全49件成功。 +native CI [35534305092](https://github.com/PyYoshi/uchardet/actions/runs/35534305092) +も全11件成功し、Linux/macOS/Windowsのcorpus testで追加検証を通過した。 +統合固定点は`15061ae3f9d07906ddd53c84cf87b4ffc52f1628`。 +再現: native repositoryで以下を実行する。 + +```sh +uv run --no-project python -m unittest discover -s corpus -p test_artifact.py -v +``` + +これは二つの公開境界の検証であり、書込み中の任意位置、OS停止、電源断、 +directory永続化、分散filesystem、training pipeline全体のcheckpoint/restart保証ではない。 +P01のnative安全性調査・BOM試作評価・独立holdout予測は再開していない。 + ## 残る境界 今回の進捗だけで #116 / #123 / #124 はcloseしない。 diff --git a/src/ext/uchardet b/src/ext/uchardet index 04f3bc4..15061ae 160000 --- a/src/ext/uchardet +++ b/src/ext/uchardet @@ -1 +1 @@ -Subproject commit 04f3bc4a927d116da12a8e161273239a804e21c5 +Subproject commit 15061ae3f9d07906ddd53c84cf87b4ffc52f1628