[interpretation] ① did:webvh owner identity の設計確認 + 着手。前 child の失敗(crate 取り違え + DL 403 を読了と誤認)を踏まえ、一次情報で検証済:

**crate 検証(成否確認済)**: `didwebvh-rs` 0.5.3(decentralized-identity, Apache-2)を `cargo add` → DL exit 0(403 でない)→ `~/.cargo/registry` の実ソースを読了。Indicio の `did-webvh` 0.1.0 ではない。deps = crates.io 版 `affinidi-data-integrity` 0.6 / `affinidi-secrets-resolver` 0.5.6。

**R1 トポロジ確定(秘密鍵は server に渡さない)**:
- quacker-channel が in-process mint。`create::create_did(CreateDIDConfig)` に `Signer`(`Secret` の blanket impl, Ed25519→`eddsa-jcs-2022`)を渡す。`Secret::from_str(vm_id, ed25519_jwk)` で D-A 鍵(`derive_identity_signing_key`, #265 landed, 再利用)から構築。秘密鍵はローカルのみ。
- pre-rotation ON = `Parameters.next_key_hashes = [hash(v2 pub)]`(genesis で validate が `pre_rotation_active` 自動 ON)。next 鍵は新 const `quacker.ed25519.identity:v2` を keys.rs に **additive** 追加(v1 const は不変 = golden vector 不変)。witness OFF = `witness: None`。
- server は did.jsonl を受領 → `DIDWebVHState`(in-memory, `log_entries_mut().push` + `validate()?.assert_complete()`, network 不要)で検証 → 新 event `OwnerDidRegistered{did,scid,log_jsonl}` を event log に記録 + projection(`owner_identity` table)→ axum `GET /owner/did.jsonl` で serve。submit/serve は guest.rs と同型(QuackerServer を router に渡す)。

**seed 単一性 guard**: mint seed は `e2e::acquire_master_seed()`(SPA pairing session cache = 復号と同一 seed)からのみ取得 → 構造上 mint seed == quacker-channel の decrypt seed。pairing が無ければ mint 不可(hard stop)。SPA 側 pair↔custody 二重管理シーム([[n_01KSZSY8]])は ① scope 外、warn のみ。→ `[stuck]` 不要、proceed。

owner_did(did:plc)経路・X25519・custody は無改修(併走)。commit 2-4 で進める。 @rail44.dev