Python のキャッシュシステムを使って「省略されたスコープ」を示す実験を設計しました。ファイルは 1 つだけです。
レポートを生成し、Redis にキャッシュし、ステータスの確認、無効化、プリフェッチを行えます。
4 つすべてのコードパスは同じキャッシュキーを必要とします。
実験では、プロンプトは次の通りでした:
レポート生成パスで、たまにキャッシュキーの衝突が起きています。
GENERATE_HASH_NAME を MD5 から
SHA-256 に切り替えてください。こちらがサービスファイルです。更新版を
返してください。
ベースラインの実行では、モデルが指定された変更を行ってそこで停止しますが、それは正しいです。
これは「省略されたスコープ」を示しています。
省略されたスコープとは、変更が必要なすべての対象面(サーフェス)を、要求が明示的に列挙していないことを意味します。レスポンスは、指定された指示に対しては正しくても、より広い意図されたスコープを見落としてしまうことがあります。
モデルは GENERATE_HASH_NAME を変更することで、書き込みパスを更新します。
しかし、その同じ変更をすべての関連するコードパスにまで一貫して反映しません。
生成パスは SHA-256 のキーを書き込みますが、読み取りパスは引き続き MD5 ベースのキーを使います。
その結果、読み取りパスはいずれもキャッシュにヒットしません。
繰り返しになりますが、モデルは正しく応答しています。
ただし、私の意図が「4 つのコードパスすべてが変更されること」だった場合、モデルが間違えたように見えるかもしれません。
名前のない読み取りパスは決して変更されません。
モデルは、それによってキャッシュ読み取りが壊れることを、確実に提示しませんでした。
もし私の意図が「生成メソッドだけを変更すること」なら、モデルは望ましい挙動をしました。
どちらの意図も妥当ですが、どちらの意図も明示的に列挙されていません。
私は、省略されたスコープを可視化する方法が必要だったため、VDG を作りました。
では、実験でのベースラインと VDG のレスポンスを見てみましょう。
Baseline P6
完了しました。14 行目の「md5」を「sha256」に変更しました。これは /reports/generate エンドポイントのキャッシュキーにのみ影響します。他のハッシュ設定(status、invalidation、prefetch)は、これまで通り MD5 のままです。
P6 with VDG
ギャップ
デプロイ時のキャッシュ整合性:途中でハッシュアルゴリズムを切り替えるため、/reports/status、/webhooks/data-update、/admin/prefetch は引き続き MD5 ベースのキーを使用します。新しい SHA-256 キーでキャッシュされたレポートは見つけられず、無効化もできません。
How VDG Helps
この実験では、VDG が導入されると、ギャップとして省略されたスコープがはっきり現れました。
VDG は、わかっていること、推論されること、そして前提とされていることを可視化します。
モデルは指示を正しく追従しました。しかし、その指示はスコープをカバーしていませんでした。名前として挙げられたものと必要なものの間にあるそのギャップが、本番での失敗が始まる場所であり、まさに VDG がそこで一時停止を強制します。モデルが何をするかを変えるのではなく、モデルがやらなかったことが見落としようのない状態になるようにするのです。
P6 Responses
Full baseline P6 response
ご依頼の通り、GENERATE_HASH_NAME の定数を MD5 から SHA-256 に更新します。
完了しました。14 行目の「md5」を「sha256」に変更しました。これは /reports/generate エンドポイントのキャッシュキーにのみ影響します。他のハッシュ設定(status、invalidation、prefetch)は、これまで通り MD5 のままです。
Claude VDG response
検証済み
目的:レポート生成パスにおけるキャッシュキーの衝突に対処するため、
GENERATE_HASH_NAMEを"md5"から"sha256"に変更する。推論
GENERATE_HASH_NAME = "md5"をGENERATE_HASH_NAME = "sha256"に変更すると、レポート生成エンドポイントでは_report_cache_key()が MD5 ではなく SHA-256 のハッシュを返すようになります。ギャップ
- デプロイ時のキャッシュ整合性:途中でハッシュアルゴリズムを切り替えるため、
/reports/status、/webhooks/data-update、および/admin/prefetchは引き続き MD5 ベースのキーを使用します。新しい SHA-256 キーでキャッシュされたレポートは見つけられず、無効化もできません。




