feat: AZ-06 が effect_contracts の最初の消費者になり、観測を生産する - #48
Merged
Merged
Conversation
F-05。effect_contracts は生産者2つ(Deception の PresentedTerrainRef、 Edge の DefensiveEffectRef)を持ちながら**消費者が0**だった。契約は一度も 読まれておらず、相互運用は未知のままだった。R1c ゲートが問うているのは 「シリアライズできるか」ではなく「受け取った側と食い違わないか」であり、 **最初の読み取りこそが食い違いの表面化する場所**である。 runtime/effect_projection.py が Edge の DefensiveEffectRef を受理し、 それに対する EffectObservation を出す。これは同時に、本 repo が 「生産者が存在しえない」と記録していた穴を塞ぐ: 観測は effect: 型 id を 鍵にするが、シリーズの誰もそれを発行していなかった。Azazel-Edge#419 が 発行するようになった。 ## 拒否は教義であって好みではない AZ-06 は Edge が承認した環境を実体化する。よって: **decision を伴わない effect を拒否する。** advisory_inference は助言、 planned_shadow は検討であって承認ではない。実体化すれば AZ-06 が 「示唆を環境に変える段」になる。まさに持っていない権限である。 **redirection 以外を拒否する。** network_isolation や notify_only の背後に AZ-06 が提示するものは無い。producer_evidence が redirection 機構のみを 受理するのと同じ理由である。 **自分が作った effect を拒否する。** 自分の生産物が指示として戻ってくれば、 authority_class が何であれ、それは自分が決定していることになる。 ## 観測は trace を呼び出し側から受け取らない effect から取る。呼び出し側が trace を名乗れる観測は、無関係なインシデントに 紐付けられる。しかも連鎖検査は通る — 両半分が互いに一致し、他の何とも 一致しないからである。 authority_class も status から導出する。Fabric は live な status に active_materialized を要求し、それ以外では禁止するので、呼び出し側が渡せる 値は「一致するか拒否されるか」しかない。導出すれば、正しい値が1つしかない フィールドが消える。 ## 連鎖検査は到達不能な backstop ではない — 測定した 現在の構成では失敗しえない(trace も effect_ref も effect から読む)。 しかし trace_id を呼び出し側パラメータにする変異を当てると、 **この呼び出しがある状態で11件、無い状態で3件**が失敗する。 8件はこの検査が捕まえている。trace を交渉不能にしているのはこれである。 コメントを測定結果に合わせた。 ## 検証 590 passed, 8 skipped (574 → 590) | 変異 | 結果 | |---|---| | decision を伴わない effect を受け入れる | CAUGHT | | redirection 以外も materialize する | CAUGHT | | 自分が作った effect を受け入れる | CAUGHT | | 観測の trace を呼び出し側から受け取る | CAUGHT (11) | | live でない status に active_materialized を付ける | CAUGHT (4) | | 期限切れの live 観測を許す | CAUGHT | | 観測 id が status と時刻を無視する | CAUGHT | | 連鎖検査を外す | 単独では無変化(上記のとおり構成上失敗しえない) | 役目を終えたガード (test_nothing_in_the_series_mints_an_effect_id_so_observations_are_blocked)は 削除せず、次に重要な不変条件 — AZ-06 の観測が名指す effect に実際に連鎖する こと — へ置き換えた。 Refs 01rabbit/Azazel-Edge#419, 01rabbit/Azazel-Fabric#15 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SsboPSj6GyJju6mTXwHHjq
01rabbit
marked this pull request as ready for review
September 20, 2026 12:57
01rabbit
pushed a commit
to 01rabbit/Azazel-Edge
that referenced
this pull request
Sep 20, 2026
F-05 の消費者2つ目。effect_contracts は生産者2つを持ちながら消費者が0で、 レコードはシリアライズされたことしかなかった。R1c ゲートが問うているのは 両側が食い違わないかであり、**最初の読み取りこそが食い違いの表面化する場所** である。 Edge が effect を構築し(effect_export)、AZ-06 が実体化して観測を述べ (Azazel-Deception#48)、Edge がそれを読み返す。これで往復が閉じる。 engagement_advisory_client を意図的に写している。権限境界が同じだからである: - **レコード検証は fail-CLOSED。** 正準な Fabric の EffectObservation か、 さもなくば拒否。extra="forbid" により、持つことを許されていないフィールドを 帯びた観測は到達できない - **可用性は fail-OPEN。** AZ-06 は任意である。不在・沈黙・誤りはすべて 「何も観測されていない」へ縮退し、呼び出し側に例外として届かず、 決定論アービタの判断を変えない ## Fabric がしない narrowing を2つ加えた。どちらも実測に基づく **観測は decision の権限を名乗れない。** DefensiveEffectRef は observed_fact と active_materialized を明示的に拒否する (「それは観測の主張であって effect 参照の主張ではない」)。**対称の拒否が EffectObservation に無い。** 実測したところ Fabric は observation に producer_decision_ref / advisory_inference / planned_shadow / stale_or_unknown を すべて受理する。materializer の観測が決定の権限を帯びるのは、 authority_class がまさに防ぐために存在する混同である。 ここで局所的に拒否し、契約側の穴は別途報告する。黙って回避はしない。 **生産者は自分を証拠に観測できない。** materialization_producer が azazel-edge の観測は、他者の陳述を運ぶための契約を使って Edge が 自分の実体化を裏書きすることになる。 ## 3つの結果であって2つではない 「AZ-06 が答えて報告が無い」と「AZ-06 が居ない」は別の事実であり、 オペレータは区別する必要がある。engagement_advisory_client が no_advisory で 拒む畳み込みと同じ理由である。 ## 検証 tests/test_outcome_effect_observation_reader.py 20 passed tests 全体: 12 failed, 828 passed → 12 は main と**完全に同一**(集合比較で確認)。1件も増やしていない compileall(CI と同じ静的検査) OK | 変異 | 結果 | |---|---| | 観測が decision の権限を名乗るのを許す | CAUGHT (4) | | Edge 自身の観測を読み戻す | CAUGHT | | OBSERVER_AUTHORITY_CLASSES を Fabric の enum から導出 | CAUGHT (5) | | 連鎖・窓の検査を外す | CAUGHT (3) | | availability が fail-open でなくなる | CAUGHT (7) | | 不在と拒否を同じ reason に畳む | CAUGHT (6) | Refs 01rabbit/Azazel-Deception#48, 01rabbit/Azazel-Fabric#15 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SsboPSj6GyJju6mTXwHHjq
01rabbit
added a commit
to 01rabbit/Azazel-Edge
that referenced
this pull request
Sep 20, 2026
F-05 の消費者2つ目。effect_contracts は生産者2つを持ちながら消費者が0で、 レコードはシリアライズされたことしかなかった。R1c ゲートが問うているのは 両側が食い違わないかであり、**最初の読み取りこそが食い違いの表面化する場所** である。 Edge が effect を構築し(effect_export)、AZ-06 が実体化して観測を述べ (Azazel-Deception#48)、Edge がそれを読み返す。これで往復が閉じる。 engagement_advisory_client を意図的に写している。権限境界が同じだからである: - **レコード検証は fail-CLOSED。** 正準な Fabric の EffectObservation か、 さもなくば拒否。extra="forbid" により、持つことを許されていないフィールドを 帯びた観測は到達できない - **可用性は fail-OPEN。** AZ-06 は任意である。不在・沈黙・誤りはすべて 「何も観測されていない」へ縮退し、呼び出し側に例外として届かず、 決定論アービタの判断を変えない ## Fabric がしない narrowing を2つ加えた。どちらも実測に基づく **観測は decision の権限を名乗れない。** DefensiveEffectRef は observed_fact と active_materialized を明示的に拒否する (「それは観測の主張であって effect 参照の主張ではない」)。**対称の拒否が EffectObservation に無い。** 実測したところ Fabric は observation に producer_decision_ref / advisory_inference / planned_shadow / stale_or_unknown を すべて受理する。materializer の観測が決定の権限を帯びるのは、 authority_class がまさに防ぐために存在する混同である。 ここで局所的に拒否し、契約側の穴は別途報告する。黙って回避はしない。 **生産者は自分を証拠に観測できない。** materialization_producer が azazel-edge の観測は、他者の陳述を運ぶための契約を使って Edge が 自分の実体化を裏書きすることになる。 ## 3つの結果であって2つではない 「AZ-06 が答えて報告が無い」と「AZ-06 が居ない」は別の事実であり、 オペレータは区別する必要がある。engagement_advisory_client が no_advisory で 拒む畳み込みと同じ理由である。 ## 検証 tests/test_outcome_effect_observation_reader.py 20 passed tests 全体: 12 failed, 828 passed → 12 は main と**完全に同一**(集合比較で確認)。1件も増やしていない compileall(CI と同じ静的検査) OK | 変異 | 結果 | |---|---| | 観測が decision の権限を名乗るのを許す | CAUGHT (4) | | Edge 自身の観測を読み戻す | CAUGHT | | OBSERVER_AUTHORITY_CLASSES を Fabric の enum から導出 | CAUGHT (5) | | 連鎖・窓の検査を外す | CAUGHT (3) | | availability が fail-open でなくなる | CAUGHT (7) | | 不在と拒否を同じ reason に畳む | CAUGHT (6) | Refs 01rabbit/Azazel-Deception#48, 01rabbit/Azazel-Fabric#15 Claude-Session: https://claude.ai/code/session_01SsboPSj6GyJju6mTXwHHjq Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
effect_contractsは生産者2つ(Deception のPresentedTerrainRef、Edge のDefensiveEffectRef)を持ちながら消費者が0でした。契約は一度も読まれておらず、相互運用は未知のままです。R1c ゲートが問うているのは「シリアライズできるか」ではなく「受け取った側と食い違わないか」であり、最初の読み取りこそが食い違いの表面化する場所です。
runtime/effect_projection.pyが Edge のDefensiveEffectRefを受理し、それに対するEffectObservationを出します。これは同時に、本 repo が「生産者が存在しえない」と記録していた穴を塞ぎます — 観測はeffect:型 id を鍵にしますが、シリーズの誰もそれを発行していませんでした。Azazel-Edge#419 が発行するようになりました。拒否は教義であって好みではない
AZ-06 は Edge が承認した環境を実体化します。よって:
advisory_inferenceは助言、planned_shadowは検討であって承認ではない。実体化すれば AZ-06 が「示唆を環境に変える段」になる。まさに持っていない権限network_isolationやnotify_onlyの背後に AZ-06 が提示するものは無い。producer_evidenceが redirection 機構のみを受理するのと同じ理由authority_classが何であれ、それは自分が決定していることになる観測は trace を呼び出し側から受け取らない
effect から取ります。呼び出し側が trace を名乗れる観測は、無関係なインシデントに紐付けられます。 しかも連鎖検査は通ります — 両半分が互いに一致し、他の何とも一致しないからです。
authority_classも status から導出します。Fabric は live な status にactive_materializedを要求し、それ以外では禁止するので、呼び出し側が渡せる値は「一致するか拒否されるか」しかありません。導出すれば、正しい値が1つしかないフィールドが消えます。連鎖検査は到達不能な backstop ではない — 測定した
現在の構成では失敗しえません(trace も
effect_refも effect から読む)。しかしtrace_idを呼び出し側パラメータにする変異を当てると:8件はこの検査が捕まえています。 trace を交渉不能にしているのはこれです。コメントを測定結果に合わせました(「到達不能」と書かずに済みました)。
検証
active_materializedを付ける役目を終えたガード(
test_nothing_in_the_series_mints_an_effect_id_so_observations_are_blocked)は削除せず、次に重要な不変条件 — AZ-06 の観測が名指す effect に実際に連鎖すること — へ置き換えました。残り
R1c ゲートは消費者2つを要求します。これが1つ目です。2つ目は Azazel-Knowledge の ingest 境界(Knowledge#66 の一片)を想定しています。
🤖 Generated with Claude Code
https://claude.ai/code/session_01SsboPSj6GyJju6mTXwHHjq
Generated by Claude Code