What problem does it solve? Internal-only fields like gl_map, division, floors, and cost amounts leak to counterparties when redaction only deletes top-level payload keys, leaving fields nested inside arrays (such as lines[].gl_map) exposed on event reads and synchronous API responses. ## Core Features & Use Cases - Nested redaction helper: Provides stripInternalInPlace.ts, a structural recursion that deletes configured internal keys at any depth, mirroring coarsenGeoInPlace. - Completeness CI guard: Supplies a vitest matrix asserting every counterparty/public EventKind strips every internal field, including fields planted inside array elements. - Route-level lens branching: Extends the invariant to authed route responses, requiring per-role response shapes (e.g. portalPricedResponse) with exact-key-set allowlist assertions. - Use Case: When adding invoice.issued as a counterparty-visible event, use this Skill to catch that lines[].gl_map survives a flat REDACTIONS entry and fix it before the chart of accounts ships to customers. ## Quick Start Ask the AI to review the new counterparty-visible event kind for internal-field leaks and apply the nested redaction pattern from this skill.