Skip to content

feat: Edge が AZ-06 の EffectObservation を読み、契約が往復する - #421

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

F-05 の消費者2つ目です。effect_contracts は生産者2つを持ちながら消費者が0で、レコードはシリアライズされたことしかありませんでした。

Edge が effect を構築し(effect_export)、AZ-06 が実体化して観測を述べ(Azazel-Deception#48)、Edge がそれを読み返します。これで往復が閉じます。

engagement_advisory_client を意図的に写しています。権限境界が同じだからです:

規律 内容
レコード検証 fail-CLOSED。 正準な Fabric の EffectObservation か、さもなくば拒否
可用性 fail-OPEN。 AZ-06 は任意。不在・沈黙・誤りはすべて「何も観測されていない」へ縮退し、決定論アービタの判断を変えない

⚠️ Fabric がしない narrowing を2つ加えた(実測に基づく)

観測は decision の権限を名乗れない — 契約側に穴があります

DefensiveEffectRef は observed_fact と active_materialized を明示的に拒否します(「それは観測の主張であって effect 参照の主張ではない」)。

対称の拒否が EffectObservation にありません。 実測結果:

status=completed  authority=observed_fact          -> 通る  (正当)
status=completed  authority=producer_decision_ref  -> 通る  ← 問題
status=completed  authority=advisory_inference     -> 通る  ← 問題
status=completed  authority=planned_shadow         -> 通る  ← 問題
status=completed  authority=stale_or_unknown       -> 通る  ← 問題
status=active     authority=active_materialized    -> 通る  (正当)

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
compileall(CI と同じ静的検査)                     OK

12件の失敗は main と完全に同一です(FAILED 集合を比較して確認)。1件も増やしていません。原因は #420 の gh 依存です。

変異 結果
観測が decision の権限を名乗るのを許す CAUGHT (4)
Edge 自身の観測を読み戻す CAUGHT
OBSERVER_AUTHORITY_CLASSES を Fabric の enum から導出 CAUGHT (5)
連鎖・窓の検査を外す CAUGHT (3)
availability が fail-open でなくなる CAUGHT (7)
不在と拒否を同じ reason に畳む CAUGHT (6)

3番目は「派生させてはならない」ことの検査です。Fabric の enum から導出した集合は、narrowing すべき対象そのものになります。

🤖 Generated with Claude Code

https://claude.ai/code/session_01SsboPSj6GyJju6mTXwHHjq


Generated by Claude Code

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
01rabbit marked this pull request as ready for review September 20, 2026 13:03
@01rabbit
01rabbit merged commit e44eb68 into main Sep 20, 2026
5 checks passed
@01rabbit

Copy link
Copy Markdown
Owner Author

Fabric contract defect Fabric #52 を登録しました。EffectObservation は rc4 から observed_fact / active_materialized だけを許可し、decision/advisory/planning/stale の authority class を拒否する予定です。

本 PR の reader 側拒否は defence-in-depth として正しいため維持してください。ただし、Fabric 修正が出るまでは legacy producer の不正 payload を入力境界で拒否し、受理した observation が decision authority を持つような解釈をしないことを明示してください。rc4 pin への移行時に contract compatibility/negative tests を追加します。

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