モデルが過去を全部見ていれば、新しい出来事が新規なのか、既存の続きなのかは分かるように思えます。入力は、その前提に耐えません。記録は増えます。窓は、関係の薄い行で先に埋まります。検索の前に作成と決めると、同じ作業がもう一行できます。検索の前に更新と決めると、当たっていない行を書き換えます。
この構成では、正本の記録と、検索して渡す記憶を分けます。モデルの入力は、その場で取り出した切片だけにします。新しい出来事を作成にするか更新にするかは、記憶を検索してから決めます。
課題
正本は、作業の行、出来事の行、人の行です。これが消えると、作業が消えます。モデルに渡す文章は、その複製ではありません。複製を正にすると、言い換え、切り捨て、書きそこないが、作業そのものになります。
新しい出来事は、どちらにも読めます。初めての依頼かもしれません。昨日の作業への追記かもしれません。完了の報告かもしれません。作業ではない雑談かもしれません。文面だけ見て操作を選ぶと、重複と、誤った更新が同じ入力から出ます。
検索にも穴があります。直前に書いた行は、索引にまだありません。索引が空なのは、世界に何も無いことと同じではありません。空を「新規」と読むと、同じ流れの二通目がもう一件の作業になります。空を「判断できない」と読んで処理を止めると、索引の遅れが沈黙になります。
記憶を一枚の要約に畳む方式は、別の圧力を受けます。未処理の出来事を一回の呼び出しに積むと、呼び出しは大きくなり、失敗しやすくなります。失敗した位置でカーソルを止めると、次の回は同じ塊がさらに大きくなります。止めたままは、凍ります。失敗した分を、それらしい文章で埋めると、無かった経緯が正本の隣に残ります。
開いている作業を毎回全部読む方式は、少ないうちは動きます。増えると、関係の無い行が、当たっている一行を押し出します。先に全部読むと、検索する理由が消えます。
制約
この構成が置いた制約は、次のとおりです。
正本への作成と更新は、記憶を検索したあとの操作だけです。新しい出来事の文面は、操作の種類をまだ持ちません。
モデルに渡すのは、検索した切片です。正本の全件、全文、全履歴は渡しません。問い合わせの数も、各切片の長さも、上限を持ちます。上限を超えた分は、黙って末尾を足しません。
検索が空であることは、既存が無いことではありません。有界の控えを、正本から別に渡してよいです。控えは、最近の行と、その出来事に関係する人の行に限ります。全件の読み直しではありません。操作は、検索の切片と、その控えを見たあとに決めます。
同じ流れの中で直前に書いた行は、索引を待ちません。発生源の同一性で、正本を直接引きます。これは検索の代わりに履歴を足すことではありません。その流れの中の行だけを見ます。
要約は、記憶の一種です。正本ではありません。作業の配送のキューでもありません。要約の失敗は、正本の行を消しません。失敗した塊を、捏造した文章で埋めません。カーソルは、再試行の上限のあと、その塊を越えて進みます。進めたあとに戻る手段はありません。だから要約に、個別の作業の到達保証を持たせません。
モデルが書いた文章は、正本の本文を置き換えません。検索結果は入力です。書き戻すときは、正本の行に対する作成か更新か、何もしないかです。
採らなかった方式
履歴を入力に連結する
未処理の出来事と、開いている作業と、人の一覧を、一回の入力へ積む方式です。小さなうちは、検索より単純に見えます。増えると、窓の中の位置が結果を決めます。関係する一行が、新しい出来事から遠い位置に落ちます。同じ呼び出しが要約と操作の両方を兼ねると、要約の失敗が操作の失敗になります。この構成では、正本を入力に展開しません。
開いている作業を、先に全部読む
検索の前に、未完了を全部載せる方式です。重複を防ぐつもりが、無関係な題名で入力を埋めます。会議のように長い文字を同時に渡すと、未完了の一覧が文字を圧迫し、末尾の引き受けが見えなくなります。先に読む量を固定すると、古い重要な行が、新しい薄い行に負けます。検索してから渡す、に戻しました。
文面だけで、作成か更新かを決める
新しい出来事を読んだ時点で、作成か更新かを決めてから、当たる行を探す方式です。作成と決めたあとの検索は、重複の確認にしかなりません。更新と決めたあとの検索は、先に選んだ操作に合う行を探しにいきます。どちらも、検索が操作を決めていません。空だったときに作成へ倒すと、索引の穴が新しい行になります。この構成では、操作の種類は検索の結果が揃ってから書きます。
要約を正本にする
一枚の文章を、作業場の過去そのものにする方式です。人が読めて、モデルにも渡しやすいです。ただし要約は欠けます。切り捨ての位置は、モデルの窓と、失敗した呼び出しで決まります。その文章を作業の行だとみなすと、要約されなかった引き受けは存在しなかったことになります。人がその文章を編集し、モデルも同じ文章を書き換えると、最後の書き込みが過去を決めます。この構成では、要約は渡してよい切片の一つに留めます。作業が存在するかどうかは、正本の行だけが決めます。
記録ごとに文書を作り、その集まりを入力にする
正本の行を、モデルが読む文書へ投影し、判断のたびに集まりを展開する方式です。名前は変わります。経路を入力に焼くと、改名が過去の参照を壊します。集まりを毎回全部渡すと、履歴を連結したのと同じ窓の問題に戻ります。その文章を正本に書き戻すと、モデルの言い換えが作業の本文になります。この構成では、投影した文書を正本にしません。読むときは、検索か、明示した一件の読みです。
検索の失敗を、無いにする
問い合わせが失敗した、上限で切った、索引が遅れた、を同じ「該当なし」にする方式です。該当なしは、作成してよい、に近くなります。失敗は、見えていないだけです。この構成では、失敗、空、上限で切った、を同じ成功にしません。空のときは有界の控えを足し、それでも操作は見たあとに決めます。失敗のまま操作を確定しません。
索引が追いつくまで待つ
直前の行が検索に出るまで、次の出来事を止める方式です。索引の遅れが、作業の遅れになります。同じ流れの二通目は、発生源が分かっています。待つ必要は、その流れの中にはありません。待ちを外の検索にだけ残し、同じ流れは正本を直接引きます。
採用した形
記憶は三層に分けました。正本の行、検索して渡す切片、操作の決定、です。
検索は、正本から切片を取り、その切片を渡します。作成か、更新か、何もしないかは、切片を見てから決めます。決定が書くとき、矢印は正本へ戻ります。切片へは書きません。文面は、検索の前に操作を決めません。検索が空であることは、それだけでは作成になりません。同じ流れで直前に書いた行は、索引を待たず、正本から直接読みます。
正本は、行のまま置く
作業、出来事、人は、それぞれの行です。モデルの入力に展開した時点の写しを、最新だとみなしません。行を消す、行を更新する、行を作る、は正本への操作です。検索結果への追記ではありません。
要約を更新する処理は、この行を書き換えません。要約の呼び出しが失敗しても、行は残ります。再試行の上限を超えた塊は、要約には寄与しないままカーソルを進めます。その欠落は、要約が欠けることであり、作業が消えることではありません。未分類の失敗は、カーソルを進めません。知らない失敗で、見ていた範囲を捨てません。
渡すのは、検索した切片だけです
判断の入力は、その出来事に対して検索した切片です。問い合わせは、出来事を見たうえで計画します。固定の「未完了を全部」ではありません。問い合わせの数には上限を置きます。一件が広すぎる問いを、扇のように増やしません。
各切片は短く切ります。題名、状態、期日、本文の先頭、で足ります。本文の全文を、候補の数だけ繰り返しません。検索した切片は、控えより先に置きます。控えが窓を埋めて、当たった一行が落ちる、を避けます。
要約を渡すときは、それも切片です。全文の保証はありません。正本の行が言うことと、要約が言うことが食い違ったときは、行を信じます。
読む側が複数の文書を持っている場合も、その集まりは入力に展開しません。一覧、検索、一件の読みで、必要なものだけを取ります。ある処理が特定の文書に依存するなら、その文書を名指しで読みます。集まりをまとめて渡すことは、その名指しの代わりにしません。
作成か更新かは、切片のあとで決める
新しい出来事は、検索が終わるまで操作を持ちません。当たった行が、同じ作業の続きなら更新です。当たる行が無く、依頼として立つなら作成です。報告、相槌、既に終わっていることの繰り返しなら、何もしません。三つは、同じ入力を見たあとの選択です。
更新は、検索で見えた行に対してだけ行います。識別子を、文面から推測して埋めません。見えていない行は、更新の対象にできません。作成は、何もしないを検討したあとに残します。検索が空だったことだけでは、作成にしません。控えを見たあとも当たる行が無い、というところまでいって、作成にします。
同じ流れで直前にできた行は、検索の切片に加えて、発生源の照合で渡します。二通目は、その行を見たうえで、更新か、何もしないかを選びます。索引が遅れていても、もう一件の作成に倒れません。
一回の出来事が複数の作業に触れるときは、操作を分けて書きます。一つの作成に、関係の無い引き受けを混ぜません。各操作は、どの切片を根拠にしたかを残します。根拠が無い更新は、実行しません。
正本へ書くのは、決定のあとだけです
決定は、作成、更新、何もしない、のどれかです。何もしないは、失敗ではありません。既存に当たったから何もしない、と、作業ではないから何もしない、は分けて残します。前者は当たった行を指します。後者は行を指しません。
書くときは正本の行へ書きます。検索の切片へは書きません。要約へは書きません。モデルが返した文章を、作業の本文として丸ごと置き換えません。更新が変えてよいのは、決定が名指しした項目だけです。
何が解けるようになったか
過去が増えても、判断の入力は切片のままです。窓の位置ではなく、検索が、どの行を見せるかを決めます。無関係な未完了が、新しい引き受けを押し出しません。
同じ出来事が、あるときは作成になり、あるときは更新になります。どちらになるかは、検索してから決まります。文面が似ていることだけで、新しい行は増えません。見えていない行は、更新されません。
直前の行は、索引を待たなくても、同じ流れの中では見えます。二通目が、もう一件の作業になりません。
要約が失敗しても、作業の行は残ります。要約が凍って、それ以降の出来事を拒み続けることもありません。要約に入らなかったことは、要約の欠落として残り、正本の欠落にはなりません。
正本と、検索して渡す記憶を一つにすると、言い換え、切り捨て、索引の遅れ、操作の早さが、同じ文章の上で同時に効きます。分けたのは、記憶が欠けても作業は残り、作業を書く前に、何が見えていたかを残せるからです。