外部状態正本を使うAI定期実行の要再確認 資料内の該当箇所/cursor 以前の状態へ戻す操作境界
記事状態: 公開 · 最終確認: 2026-10-25
要点
外部状態は再開の正本になり得るが、それだけで安全にはならない。cursorは対象主体の識別とgenerationに結び付け、要再確認 writerを拒否する。task-body バージョンや業務改訂版 IDをpersisted-state データ形式の定義 主体の識別の代替にしない。migrationの構文の読み取り成功を意味上の correctnessと同一視しない。状態 以前の状態へ戻す操作を既発生の外部副作用の取消しとみなさない。exactly-onceは、実証されたtransactional/重複実行を防ぐ性質境界についてのみ主張する。
現在の判断
外部状態は再開の正本になり得るが、それだけで安全にはならない。cursorは対象主体の識別とgenerationに結び付け、要再確認 writerを拒否する。task-body バージョンや業務改訂版 IDをpersisted-state データ形式の定義 主体の識別の代替にしない。migrationの構文の読み取り成功を意味上の correctnessと同一視しない。状態 以前の状態へ戻す操作を既発生の外部副作用の取消しとみなさない。exactly-onceは、実証されたtransactional/重複実行を防ぐ性質境界についてのみ主張する。
どこまで当てはまるか
外部状態正本を使うAI定期実行の要再確認 資料内の該当箇所/cursor 以前の状態へ戻す操作境界
詳しく理解する
要点と前提
長時間・定期実行するAI処理では、会話履歴やモデル内部の記憶ではなく、外部状態を再開位置の正本にする設計が有効である。ただし、外部状態を置いただけでは再開安全性は成立しない。保存されたcursorや資料内の該当箇所が、どの対象・どの実行・どの世代に属する値かを失うと、古い実行が新しい進捗を上書きしたり、別の対象へ位置値を誤適用したり、以前の状態へ戻す操作後に既処理範囲を再実行したりする。
主要な境界は三つに分けて扱う必要がある。第一はcursor/資料内の該当箇所の主体の識別境界である。cursorは単なる数値や行番号ではなく、対象object・stream・partition・logical job・実行/attempt・担当者 generation等と結合して解釈する。Kafkaの利用側 offsetがpartitionと結び付いて管理され、古い利用側がgeneration/epoch検査でfenceされるように、外部状態でもstate_object_identity、cursor、generationまたは担当者 epoch、last committed 実行を一体として扱う必要がある。mutableなpathや名前だけを資料内の該当箇所にすると、同名差替え後に古い対象を継続しているのか、新しい対象へ進んだのかを判定できない。
第二はpersisted-state データ形式の定義の互換性境界である。task 本文のバージョンや研究改訂版のIDは、永続状態自体のデータ形式の定義 主体の識別とは別物である。列や状態値の意味が変わったとき、旧rowを構文上読めたとしても、意味上の migrationが正しいとは限らない。未知の状態値を旧readerが丸めたり、OPEN_UNKNOWNや出典・来歴 資料内の該当箇所を削除したりすれば、構文の読み取りは成功しても監査可能性や未解決事項が失われる。migrationでは、少なくとも旧状態のbefore-image、データ形式の定義 主体の識別、migration 主体の識別、compatibility result、post-migration 結果の照合、旧状態を使ったrestore/replay testを保持する。downgradeがlossyなら、その事実と失われるfieldを明示する。未知または新しいデータ形式の定義を黙ってcoerceするより、互換性未確認として拒否する方が安全である。
第三は外部副作用の境界である。状態を巻き戻しても、既に作成されたcandidate package、queue entry、repository変更、配備、publication、外部API操作などは自動的には巻き戻らない。cursor commitと外部副作用が異なるtransaction domainにある場合、cursorを先に進めればcrash後に副作用を飛ばす可能性があり、副作用を先に実行すればcrash/再試行で重複する可能性がある。transactional outboxはローカル環境の 状態とeffect intentを同一transactionへ入れることでこの窓を縮められるが、下流deliveryまで一般的なexactly-onceにするものではない。外部effect側には重複実行を防ぐ性質 key、deduplication、transaction、または明示的なreconciliationが別途必要になる。
以前の状態へ戻す操作は通常の進捗更新と同一視しない。offset 初期化やdisaster 復旧のように、以前の状態へ戻す操作自体が正当な運用操作である場合もある。その場合はoperator intent、対象主体の識別、以前の状態へ戻す操作前状態、適用するgeneration、再処理範囲を明示し、通常実行の要再確認 書込みと区別する。遅延した旧実行が以前の状態へ戻す操作後または新実行開始後に戻ってきても、generation/epoch 実行前の条件で拒否できることが重要である。
実装上は、外部状態 recordへlogical_job_id、state_object_identity、状態/データ形式の定義 主体の識別、cursorまたは途中状態の保存地点、担当者/実行 generation、last_committed_run_id、必要な出典・来歴を束縛し、更新をcompare-and-set相当の実行前の条件付きにする。再開時は「保存値が存在する」ことではなく、対象主体の識別・データ形式の定義 compatibility・担当者 generation・外部effectのauthoritative 結果の照合が現在の世界と整合していることを確認する。長時間実行では、同じlogical jobを継続することと、同じ実行 instanceを継続することも分離する。
失敗として典型的なのは、cursorだけを保存して対象主体の識別を保存しない、担当者 epochなしで旧実行の書込みを許す、処理完了前にcursorをcommitして未処理範囲を飛ばす、処理完了後もcommitせず再試行で重複する、データ形式の定義変更後に旧readerが新しい意味を黙って捨てる、状態 以前の状態へ戻す操作を外部effect 以前の状態へ戻す操作と誤認する、といったケースである。特に「このeffect IDは未処理か確認してから外部APIを呼び、その後に完了を記録する」というcheck-then-actだけでは、並行duplicate attemptが同時に未処理判定を通過できるため十分ではない。
適用境界として、すべての外部状態 storeやschedulerが同じCAS、transaction、delivery保証を持つわけではない。Google Docsのrevision-aware 書込み 制御のように要再確認 改訂版を拒否できる仕組みは存在するが、その改訂版 IDを永続状態 データ形式の定義 バージョンとして流用できるとは限らない。またschedulerのscheduled timeやcron式だけからexactly-onceやmutual exclusionを推論してはならない。保証は具体的な状態 store、scheduler、effect 提供元の契約単位で確認する。
主要出典・来歴
EA-1005 根拠 Packet 2026-10-23(AWS Step Functions Redrive、Temporal イベント 履歴/Continue-As-New、Kafka/Confluent offset・generation、Google Docs revision-aware 書込み 制御、AWS/Microsoft transactional outbox/idempotent 利用側、Flink 状態 compatibility/savepoint、Kubernetes storage-version migration、およびlive TASK-EA-RESEARCH / EA_MASTER / EA_REVISION_LEDGER 結果の照合を統合)。
まだ確認できていないこと
- EA-1005-UNKNOWN-01
TASK-EA-RESEARCH/EA_MASTER/EA_REVISION_LEDGERに対するauthoritativeなpersisted-state データ形式の定義 主体の識別とmigration compatibility 対応付けは、確認済み正本群では見つかっていない。compaction/tombstoneとdowngrade compatibility、lossy migration後に最低限保持すべき変更・継承の履歴/出典・来歴、各external-effect 提供元固有の重複実行を防ぐ性質/transaction semanticsも未確定である。これらは不存在と断定せず、実在する正本または具体的提供元契約で確認されるまでOPENとして扱う。
根拠資料
この記事には、直接開ける外部出典が登録されていません。出典IDや検証情報は末尾で確認できます。
更新履歴
EA-1005-R1-20261023: 正式な 監査/publication 対応付け
出典ID・検証情報・機械可読データ
根拠の種類と情報の鮮度は、ラベルとアイコンで確認できます。
- 記事ID
- EA-1005
- 最終確認日
- 2026-10-25
- 提供元・モデル・プラン・利用環境
- —
- 対象地域
- —
元資料の全文と収録照合記録
要点と前提
長時間・定期実行するAI処理では、会話履歴やモデル内部の記憶ではなく、外部STATEを再開位置の正本にする設計が有効である。ただし、外部STATEを置いただけでは再開安全性は成立しない。保存されたcursorやlocatorが、どの対象・どのrun・どの世代に属する値かを失うと、古い実行が新しい進捗を上書きしたり、別の対象へ位置値を誤適用したり、rollback後に既処理範囲を再実行したりする。
主要な境界は三つに分けて扱う必要がある。第一はcursor/locatorのidentity境界である。cursorは単なる数値や行番号ではなく、対象object・stream・partition・logical job・run/attempt・owner generation等と結合して解釈する。Kafkaのconsumer offsetがpartitionと結び付いて管理され、古いconsumerがgeneration/epoch検査でfenceされるように、外部STATEでもstate_object_identity、cursor、generationまたはowner epoch、last committed runを一体として扱う必要がある。mutableなpathや名前だけをlocatorにすると、同名差替え後に古い対象を継続しているのか、新しい対象へ進んだのかを判定できない。
第二はpersisted-state schemaの互換性境界である。task bodyのversionや研究revisionのIDは、永続STATE自体のschema identityとは別物である。列や状態値の意味が変わったとき、旧rowを構文上読めたとしても、semantic migrationが正しいとは限らない。未知のstatus値を旧readerが丸めたり、OPEN_UNKNOWNやprovenance locatorを削除したりすれば、parseは成功しても監査可能性や未解決事項が失われる。migrationでは、少なくとも旧stateのbefore-image、schema identity、migration identity、compatibility result、post-migration readback、旧stateを使ったrestore/replay testを保持する。downgradeがlossyなら、その事実と失われるfieldを明示する。未知または新しいschemaを黙ってcoerceするより、互換性未確認として拒否する方が安全である。
第三は外部副作用の境界である。STATEを巻き戻しても、既に作成されたcandidate package、queue entry、repository変更、deployment、publication、外部API操作などは自動的には巻き戻らない。cursor commitと外部副作用が異なるtransaction domainにある場合、cursorを先に進めればcrash後に副作用を飛ばす可能性があり、副作用を先に実行すればcrash/retryで重複する可能性がある。transactional outboxはlocal stateとeffect intentを同一transactionへ入れることでこの窓を縮められるが、下流deliveryまで一般的なexactly-onceにするものではない。外部effect側にはidempotency key、deduplication、transaction、または明示的なreconciliationが別途必要になる。
rollbackは通常の進捗更新と同一視しない。offset resetやdisaster recoveryのように、rollback自体が正当な運用操作である場合もある。その場合はoperator intent、対象identity、rollback前state、適用するgeneration、再処理範囲を明示し、通常runのstale writeと区別する。遅延した旧runがrollback後または新run開始後に戻ってきても、generation/epoch preconditionで拒否できることが重要である。
実装上は、外部STATE recordへlogical_job_id、state_object_identity、state/schema identity、cursorまたはcheckpoint、owner/run generation、last_committed_run_id、必要なprovenanceを束縛し、更新をcompare-and-set相当のprecondition付きにする。再開時は「保存値が存在する」ことではなく、対象identity・schema compatibility・owner generation・外部effectのauthoritative readbackが現在の世界と整合していることを確認する。長時間runでは、同じlogical jobを継続することと、同じrun instanceを継続することも分離する。
failureとして典型的なのは、cursorだけを保存して対象identityを保存しない、owner epochなしで旧runのwriteを許す、処理完了前にcursorをcommitして未処理範囲を飛ばす、処理完了後もcommitせずretryで重複する、schema変更後に旧readerが新しい意味を黙って捨てる、state rollbackを外部effect rollbackと誤認する、といったケースである。特に「このeffect IDは未処理か確認してから外部APIを呼び、その後に完了を記録する」というcheck-then-actだけでは、並行duplicate attemptが同時に未処理判定を通過できるため十分ではない。
適用境界として、すべての外部STATE storeやschedulerが同じCAS、transaction、delivery保証を持つわけではない。Google Docsのrevision-aware write controlのようにstale revisionを拒否できる仕組みは存在するが、そのrevision IDを永続STATE schema versionとして流用できるとは限らない。またschedulerのscheduled timeやcron式だけからexactly-onceやmutual exclusionを推論してはならない。保証は具体的なstate store、scheduler、effect providerの契約単位で確認する。
SAFE_WORDING
外部STATEは再開の正本になり得るが、それだけで安全にはならない。cursorは対象identityとgenerationに結び付け、stale writerを拒否する。task-body versionや業務revision IDをpersisted-state schema identityの代替にしない。migrationのparse成功をsemantic correctnessと同一視しない。STATE rollbackを既発生の外部副作用の取消しとみなさない。exactly-onceは、実証されたtransactional/idempotency境界についてのみ主張する。
OPEN_UNKNOWN
TASK-EA-RESEARCH/EA_MASTER/EA_REVISION_LEDGERに対するauthoritativeなpersisted-state schema identityとmigration compatibility bindingは、確認済み正本群では見つかっていない。compaction/tombstoneとdowngrade compatibility、lossy migration後に最低限保持すべきlineage/provenance、各external-effect provider固有のidempotency/transaction semanticsも未確定である。これらは不存在と断定せず、実在する正本または具体的provider契約で確認されるまでOPENとして扱う。
主要provenance
EA-1005 Evidence Packet 2026-10-23(AWS Step Functions Redrive、Temporal Event History/Continue-As-New、Kafka/Confluent offset・generation、Google Docs revision-aware write control、AWS/Microsoft transactional outbox/idempotent consumer、Flink state compatibility/savepoint、Kubernetes storage-version migration、およびlive TASK-EA-RESEARCH / EA_MASTER / EA_REVISION_LEDGER readbackを統合)。
EA-1005-CURRENT-APPROVAL研究資料研究資料根拠の出所: AUDITED_CANONICAL_RESEARCH_PACKET現行本文の監査・revision対応
- 裏付ける内容
- 現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。
- 確認日
- —
- 出典・実験ID
- AIFIN-EA-RESEARCH-60d1b96e889e61ad448951b9
- 検証箇所
- 1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER!A700:U700 · EA_REVISION_LEDGER!A700:U700 · EA-1005-R1-20261023
- 適用範囲
- —
- 出典・来歴
- CURRENT_CANONICAL_APPROVAL_READBACK
- 限界
- 監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。
EA-1005-CURRENT-BODY-READBACK実装資料実装資料根拠の出所: IMPLEMENTATION_READBACK現行本文の収録照合
- 裏付ける内容
- 公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。
- 確認日
- 2026-10-27
- 出典・実験ID
- BODY-SHA256:51119a7eeebb9efc787c75ebce23ef56f63a2da4ea35a53904616eb11611c491
- 検証箇所
- content/staging/EA-1005.md · 51119a7eeebb9efc787c75ebce23ef56f63a2da4ea35a53904616eb11611c491 · EA-1005-R1-20261023
- 適用範囲
- —
- 出典・来歴
- CURRENT_APPROVED_BODY_HASH_MATCH
- 限界
- 本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。
- 出典ID
- AIFIN-EA-RESEARCH-60d1b96e889e61ad448951b9, BODY-SHA256:51119a7eeebb9efc787c75ebce23ef56f63a2da4ea35a53904616eb11611c491
- 追跡中のUNKNOWN ID
- EA-1005-UNKNOWN-01
- 再確認のきっかけ
- 正式な 改訂版/publication 状態 change · 本文 成果物 hash change · 出典 現行性 change · new contradiction or 実装 結果の照合
機械検査: 通過 — 機械検査の結果です。情報の正確性や実行の承認を保証するものではありません。
同じ記事IDの機械可読データです。