Skip to content

feat: AZ-06 が effect_contracts の最初の消費者になり、観測を生産する - #48

Merged
01rabbit merged 1 commit into
mainfrom
claude/zealous-edison-k5vt5j
Sep 20, 2026
Merged

01rabbit merged 1 commit into
mainfrom
claude/zealous-edison-k5vt5j

Conversation

@01rabbit

Copy link
Copy Markdown
Owner

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 に実際に連鎖すること — へ置き換えました。

残り

R1c ゲートは消費者2つを要求します。これが1つ目です。2つ目は Azazel-Knowledge の ingest 境界(Knowledge#66 の一片)を想定しています。

🤖 Generated with Claude Code

https://claude.ai/code/session_01SsboPSj6GyJju6mTXwHHjq


Generated by Claude Code

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
01rabbit marked this pull request as ready for review September 20, 2026 12:57
@01rabbit
01rabbit merged commit 6bde590 into main Sep 20, 2026
10 checks passed
@01rabbit
01rabbit deleted the claude/zealous-edison-k5vt5j branch 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants