今日の作業は、かなり地味だった。
画面に派手な新機能が増えたわけではない。ボタンを押したら何かが保存される、という段階にもまだ進んでいない。むしろ今日は、その逆をやっていた。保存できそうな場所まで処理を近づけておきながら、最後の最後で必ず止める。その仕組みを何重にも作った。
NORNSS2では、トリプリシテ周期のプロファイルを扱う。これは、歴史的な占星術計算を研究するための設定ファイルのようなものだ。アブー・マアシャルの体系も扱うが、専用機能にはしない。あくまで汎用的な「トリプリシテ周期計算」の一例として扱う。特定の人物や文献だけに閉じた道具にしてしまうと、あとで別の資料に広げにくくなる。
今回進めたのは、そのプロファイルを将来的に「ユーザー定義プロファイル」として昇格させるための準備だ。
普通の開発なら、「保存ボタンを作る」「ファイルを書き出す」「動いたらOK」で進めたくなるが、研究用ツールではそれが危ない。既存データを書き換えたり、参照用の値が本線の値に混ざったりすると、あとから検証不能になる。とくにNORNSS2では、historical-reproduction runtime や Alfonsine 系のデータを原則固定している。ここを不用意に触ると、どこまでが歴史的再現で、どこからが補正や試作なのか分からなくなる。
だから今日は、書くための実装ではなく、「まだ書かないことを証明する実装」を進めた。
具体的には、保存に必要な条件を一つずつ定義した。確認トークン、上書き禁止、新規ファイル限定、監査記録、ロールバック計画、書き込み後の検証。さらに、実際の書き込みに近い形の処理を作り、正しいトークンや実行条件が揃っても、最終ガードで必ず止まることを確認した。
面倒に見えるが、この段階が後で効く。
机の上に原稿を置き、封筒を用意し、宛名を書き、切手まで貼る。だが、まだ投函箱には入れない。入れる前に、宛先、本文、控え、取消手順をすべて確認する。今日の作業はその感覚に近い。
途中で小さな事故もあった。ZIPに不要な __pycache__ や .pyc が混ざり、Windowsのパス問題が出た。また、出力確認の順序が悪く、まだ書き出していない summary ファイルを「存在しない」と判定する場面もあった。どちらも本線には影響しない問題だったが、こういう細部が後で大きな差になる。梱包物に余計なファイルを入れないこと、出力パスを短くすること、確認処理の順序を間違えないこと。地味だが、運用時にはかなり重要だ。
最終的に、TGC066まで到達した。
ここまでで、実書き込みにかなり近い controlled executor の形まで進んだ。ただし、まだ何も保存していない。user_defined フォルダは作られていない。プロファイルも書き込まれていない。本線の raw 値も、Macro/Search JSON も、Alfonsine データも変更していない。
これは「まだ完成していない」というより、「書いてよい状態に近づけるために、書かない状態を固定した」という段階だ。
次は TGC067 から進める。いよいよ controlled actual write executor の write-capable implementation design に入る。ただし、そこでもいきなり保存はしない。設計、no-write scaffold、台帳化。この順序を崩さずに進める。
保存機能を作るのは簡単ではない。正確には、保存するだけなら簡単だ。難しいのは、保存してはいけない時に絶対に保存しないことだ。今日の作業は、そのための土台作りだった。

コメント