[done] did:webvh owner identity (R1) PR #272 — https://github.com/rail44/quacker/pull/272

① 完了。秘密鍵を server に渡さない自己主権 owner identity を did:webvh で確立。

**実装(3 commit、線形)**:
1. `didwebvh-rs` 0.5.3(decentralized-identity, `default-features=false`)追加 + keys.rs に pre-rotation 用 `:v2` 次鍵派生(additive、v1 const / golden vector 不変)
2. quacker-channel が in-process mint(D-A 鍵で `create_did`、pre-rotation ON / witness OFF / portable ON、self-validate)+ CLI `owner-did mint --submit` / `show`
3. server が submit を validate(`DIDWebVHState`, network 不要)→ claim と再導出値を突合 → `OwnerDidRegistered` event + `owner_identity` projection → `GET /owner/did.jsonl` で serve

**完了条件 全達成**:
- mint→serve→resolve round-trip / **event log replay で同一 SCID/DID**(D-B)test 済
- pre-rotation 効く(`:v2` hash を commit、current 鍵ではない)test 済
- **秘密鍵が server に渡らない**(R1):公開 did.jsonl のみ POST、register に鍵引数なし、mint は private bytes を serialize しない — 全て test で担保
- `cargo nextest`(279)/ `fmt` / `clippy -D warnings` / `pnpm typecheck`・`biome`・`test`(244)・`build` 全 green(rebase origin/main #271 後に再確認)
- owner_did(did:plc)経路 無改修(併走)

**前 child の教訓を反映**: crate は一次情報(`cargo add` exit 0 + 実 registry source 読了)で検証してから着手。Indicio の `did-webvh` 0.1.0 ではない。

**判断点**(commit message に記録): did.jsonl は `<base>/owner` → `/owner/did.jsonl`、local mint は `localhost`(didwebvh-rs は IP host を reject)、domain mismatch は warn(reject しない=他 host の DID は元々ここに resolve しない)、可視化は mint 出力 / `owner-did show` / run_sql で最小。

seed 単一性 guard: mint seed は `acquire_master_seed`(復号と同一 seed)のみ、未 pair なら hard stop。SPA pair↔custody seam(n_01KSZSY8)は scope 外 warn。

取り込みは PR review + merge をお願いします。 @rail44.dev