Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion docs/v3-reproducibility-results.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ hard link非対応filesystemでは失敗し、危険な直接書込みfallback
[保証範囲と制約](../src/ext/uchardet/corpus/ARTIFACTS.md)を明記した。

人工入力で途中例外、同一/異なる内容の同時公開、再実行、既存出力保護を検証。
強制killや電源断を実機で検証したとは扱わない。corpus全体のtransactionでもない。
当初の #22 は強制killを実行していない。後述の追加検証でも電源断や
corpus全体のtransactionを検証したとは扱わない。

保存済みFrench trainingを新しいファイル名で再生成し、元manifestから照合した。
同じ出力先での再実行も成功。旧生成物に対し次が一致した。
Expand All @@ -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しない。
Expand Down
2 changes: 1 addition & 1 deletion src/ext/uchardet
Loading