mirror of
https://github.com/block/buzz.git
synced 2026-10-31 14:31:02 +00:00
F2: Replace the dead `/params/subject` string pointer with `description_from_request_permission`, a pure helper that tries the three real wire shapes in priority order: 1. `params.title` — buzz-agent v2 top-level string. 2. `params.subject.toolCall.title` — v2 nested fallback. 3. `params.toolCall.title` — buzz-agent v1 + codex-acp. The old pointer hit an OBJECT (v2) or nothing (v1/codex) — description was always null in production. Extracted as `pub(crate)` so tests can call it directly with verbatim wire shapes from `wire.rs`. Two new Rust tests use the exact v2 and v1 shapes; if the pointer changes either goes red. NIP-AO updated to cite the three real source fields. F3: Replace the shape-only `isTrustedPermissionRequestSentinel` helper with `hasPermissionRequestCard`, which delegates to `computePermissionRequest` with the exact same arguments the block uses. Prose suppression in MessageRow now holds iff the card renders — closing the blank-row gap for every case `computePermissionRequest` rejects: forged signer, born-resolved-no-provenance, and correlation-mismatch resolved body. Tests added for all three rejection shapes. Mutation: re-point description extraction back to `/params/subject` string → v2-shape test goes red. Remove `editSignerPubkey` from `hasPermissionRequestCard`'s computePermissionRequest call → born-resolved-no-provenance test goes red. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>