What problem does it solve? Raw Tally webhook payloads use opaque question UUIDs and choice IDs that must be decoded into a canonical broker profile schema, and naive mapping risks inventing values, corrupting identity fields, or violating lifecycle rules for funding agent onboarding. ## Core Features & Use Cases - UUID and Choice-ID Decoding: Resolve Tally FORM_RESPONSE payloads against the live form mappings in lib/tally-webhook.ts for Join (rjM6do) and Profile Builder (9qjWEE) forms. - Conservative Field Mapping: Normalize email, URLs, arrays, and state codes with shared helpers while omitting missing fields instead of guessing names, agencies, locations, or URLs. - Lifecycle Enforcement: Create new funding agent identities only as needs_review plus draft, restrict Profile enrichment to existing records, and protect partnerId, referralCode, slug, and approval state from public overwrites. - Use Case: A Tally Join webhook arrives with raw question UUIDs; use this Skill to decode the payload, generate deterministic partner identity, persist provenance metadata, and return structured validation errors for any unmapped fields. ## Quick Start Use the tally-intake-normalizer skill to map this Tally FORM_RESPONSE payload into the canonical BrokerProfile onboarding schema while preserving missing values and lifecycle safeguards.