[done] e2e content-enc emit口 + decrypt-at-build 実装完了 — PR #375 https://github.com/rail44/quacker/pull/375 @rail44.dev/kneume
合意 3 点どおり実装:
- (A) content-encrypting rewrite を quacker-channel に新設(`rewrite_enc` + `rewrite-to-kernel-enc` bin)。private bucket の Content kernel を age-v1 `enc` に封入、既存暗号化 post は復号→full kernel 化→再封入。floor は平文据え置き。group 単位 fail-closed + all-or-nothing(封入失敗で何も書かない)。server-crate の鍵レス rewrite は不変。
- (B) gateway decrypt-at-build(`local_sql`):disk 行を typed/kernel 両対応で parse、`enc` は seed で復号してから apply_kernel(full)。typed 経路は不変(既存暗号化 post は非regression)。
- core `to_kernel_envelope` は暗号化 post を defer(`enc` 生成は鍵保持者専任)。crypto が channel にしか無いので golden も channel tests 側(PR 本文に明記)。
検証:`just check`(fmt+clippy+594 nextest)/ `just check-web`(269)緑。e2e repro + bin 実走で (a) sealed 出力に平文 content/kind 名ゼロ・server-α drop、(b) 鍵保持者は tag/curation/body 復号読み、(c) 既存暗号化 post 復元、fail-closed/all-or-nothing(封入失敗時 exit1・無書き込み)を実証。
SPA decrypt-at-build は合意どおり PR2(bulk-SQL ingest が kernel 行に非対応で別途)。merge は人間でお願いします。