SUMMARY·5 steps·click to expand
VALIDATION SECTION
Taxonomy v1.0 — Merge/Removal Decisions & Discriminant Cross-Check
1. CODES MERGED (and why)
| Absorbed Code | Merged Into | Rationale |
|---|---|---|
| PARADOXICAL_QUESTION (4 freq) | CURIOSITY_OPEN | Sub-type of curiosity hook. A paradoxical question IS a curiosity opener; the question format doesn't change the structural function. Discriminant for CURIOSITY_OPEN already covers it ("creates a specific unanswered question or information gap"). |
| CONTRARIAN_HOOK (2 freq) | CURIOSITY_OPEN | Sub-type of curiosity opening via expectation violation. 2 occurrences only. A contrarian statement opens a curiosity loop by challenging expectations — same functional outcome. |
| SCROLL_STOP (0 freq) | CURIOSITY_OPEN | Platform-specific visual/auditory mechanic. In text transcripts (our processing format), scroll-stop IS the first curiosity beat. Cannot be detected from text alone. |
| CURIOSITY_AMPLIFIER (0 freq) | CURIOSITY_OPEN | Mid-ad curiosity re-opening is functionally another curiosity open at a different position. Not distinct enough to warrant a separate code at 0 frequency. |
| PAIN_AGITATE (0 freq) | PAIN_ARTICULATE | BR annotators consistently merged naming and amplifying pain. No corpus evidence of a distinct "agitation" step separate from articulation. |
| CONSEQUENCES_OF_PROBLEM (3 freq) | FEAR_DEEPEN | Describing downstream negative consequences IS fear deepening — same mechanism (escalating perceived danger). Discriminant for FEAR_DEEPEN covers "consequence that is WORSE than what the viewer was already aware of." |
| CONSPIRACY_LEAN (0 freq) | ENEMY_FRAME | Stronger version of enemy framing. At 0 frequency and functionally a subset of naming an external villain. The ENEMY_FRAME discriminant's "deliberately harming, deceiving, or profiting" covers conspiracy-adjacent framing. |
| IDENTITY_SPEAK (0 freq) | SELF_SELECT | "People like us" is a form of qualification by identity. 0 freq in corpus. SELF_SELECT's discriminant covers addressing "a specific type of person." |
| QUALIFY (0 freq) | SELF_SELECT | Same function as SELF_SELECT at a different position. Position is captured by typical_position field. No functional difference in text analysis. |
| MEDICAL_AUTHORITY (7 freq) | PROOF_AUTHORITY | Medical credentialing is a sub-type of authority proof. The discriminant for PROOF_AUTHORITY ("institutional credentials, media appearances, professional affiliations") covers medical credentials. Keeping both would cause >50% discriminant overlap. |
| TESTIMONIAL_PROOF (3 freq) | PROOF_SOCIAL | Named individual testimony IS social proof — just a more specific form. PROOF_SOCIAL's discriminant covers "citing experiences of OTHER PEOPLE — through numbers, testimonials, or named individuals." |
| PROOF_THAT_SOLUTION_WORKS (2 freq) | PROOF_SCIENTIFIC | Direct proof of MSOL working is typically delivered via scientific/clinical evidence. 2 freq and discriminant overlaps with PROOF_SCIENTIFIC ("clinically proven" language). |
| PROOF_SPECIFICITY (0 freq) | PROOF_SCIENTIFIC | Precise numbers/percentages are almost always from scientific contexts in DR ads. 0 freq in corpus. PROOF_SCIENTIFIC's discriminant covers "specific statistical data." |
| CREDIBILITY_SEED (0 freq) | EXPERT_PRESENT | An early credibility signal is typically the beginning of expert introduction. 0 freq. EXPERT_PRESENT handles the full range from initial credential drop to full introduction. |
| PRODUCT_BUILDING (2 freq) | EXPERT_PRESENT | Narrating the product's creation journey is the expert's origin story — functions as extended expert credentialing. 2 freq. |
| MARKETING_THESIS (1 freq) | REMOVED | See removals section. |
| CTA_EMOTIONAL (0 freq) | CTA_BUILD | An emotionally wrapped CTA is built through CTA_BUILD's framing function. The emotional layer is captured by co-occurring EMOTION codes, not a separate CTA code. |
| IDENTITY_CLOSE (0 freq) | CTA_BUILD | "You're the kind of person who..." at CTA is a form of CTA building through identity framing. 0 freq. |
| MOMENT_OF_TRUTH (3 freq) | CTA_BUILD | "Hora da verdade" is a dramatic variant of CTA_BUILD — the dramatic framing IS the build. Discriminant for CTA_BUILD covers "framing the moment of decision." |
| OFFER (2 freq) | OFFER_PRESENT | Renamed and kept as distinct code. The transactional frame (pricing/bonuses/guarantees) is functionally different from CTA_MECHANICAL (click instruction). |
| SOLUTION_2_0_BRIDGE (5 freq) | HOPE_BRIDGE | The "1.0 → 2.0" bridge is a specific form of the problem-to-solution pivot. HOPE_BRIDGE's discriminant covers "shifts from problem or fear to hope or solution." The invalidation component is captured by the co-occurring INVALIDATE_SOLUTIONS code. |
| GOSSIP_INTIMATE_TONE (3 freq) | STEALTH_FRAME | The "fofoca" register is a culture-specific variant of stealth framing — disguising sales as casual conversation. Same functional outcome: lowering ad-resistance filters. |
| RESULTADO_FINAL (4 freq) | PROMISE | Concrete end-state visualization IS the promise made tangible. PROMISE's discriminant covers "specific end result, transformation, or outcome." The visual concreteness is a style variant, not a distinct function. |
| EXCLUSIVITY_UNIQUENESS (2 freq) | DESIRE_MIRROR | Positioning the buyer as "elite" or "unique" is a form of desire mirroring — reflecting the viewer's desire for status and specialness. 2 freq. |
| ANALOGY (2 freq) | REMOVED | See removals section. |
2. CODES REMOVED (and why)
| Removed Code | Freq | Rationale |
|---|---|---|
| MARKETING_THESIS | 1 | Single occurrence across 31 ads. Meta-strategic explanation of marketing rationale. Not a discrete persuasion beat; it's a rare fourth-wall break. Fails the "≥3 occurrences OR clearly distinct function" test. |
| ANALOGY | 2 | Rhetorical device, not a structural function. Analogies are a delivery mechanism WITHIN MUP_EXPLAIN or MSOL_EXPLAIN, not a separate persuasive beat. 2 freq and overlaps with explanation codes. |
| EMOTIONAL_MOBILIZATION (0 freq) | 0 | Meta/emergent property — describes cumulative emotional intensity, not a discrete beat. Cannot be identified in a single sentence; it emerges from the entire sequence. |
| TRIBAL_MOBILIZATION (0 freq) | 0 | 0 freq in corpus. Not observed in health/beauty DR niche. Partially covered by SELF_SELECT and DESIRE_MIRROR. |
| VIRAL_TRIGGER (0 freq) | 0 | 0 freq. Irrelevant to paid direct-response ads. Shareability optimization is a different domain from conversion copywriting. |
| TRANSITION_PIVOT (0 freq) | 0 | Generic structural marker. In line-by-line annotation, every sentence transition is implicit. Not a persuasive function. 0 freq. |
| PAUSE_FOR_EMPHASIS (0 freq) | 0 | Audiovisual element undetectable in text transcripts. Our processing pipeline works from transcribed text. |
3. DISCRIMINANT DIFFERENTIATION: CONFUSABLE PAIRS
SPOILER_MUP vs. MUP_EXPLAIN
- SPOILER_MUP: "Is this sentence MENTIONING or HINTING at a hidden cause... WITHOUT fully explaining how it works?"
- MUP_EXPLAIN: "Is this sentence providing a COMPLETE explanation of HOW the problem mechanism works — with a cause-and-effect chain?"
- Test sentence: "Scientists found a toxic protein that eats your cartilage." → SPOILER_MUP ✅ (hints at cause, no chain). MUP_EXPLAIN ❌ (no cause-and-effect chain).
- Test sentence: "This protein attaches to the cartilage surface, breaks down collagen fibers, triggers inflammation, which accelerates bone erosion." → MUP_EXPLAIN ✅ (full chain). SPOILER_MUP ❌ (fully explained).
SPOILER_MSOL vs. SOLUTION_PRESENT vs. MSOL_EXPLAIN
- SPOILER_MSOL: "HINTING at or BRIEFLY MENTIONING the solution WITHOUT explaining how or why it works?"
- SOLUTION_PRESENT: "FORMALLY NAMING or INTRODUCING the solution for the first time — giving it a specific identity?"
- MSOL_EXPLAIN: "Providing a COMPLETE mechanistic explanation of HOW the solution works?"
- Test: "There's a simple morning trick using a common spice..." → SPOILER_MSOL ✅ (hint, no name).
- Test: "It's called NeuroCalm — developed at Johns Hopkins." → SOLUTION_PRESENT ✅ (formal naming). SPOILER_MSOL ❌ (has identity). MSOL_EXPLAIN ❌ (no mechanism).
- Test: "NeuroCalm works by binding to the receptor and blocking the inflammatory signal cascade." → MSOL_EXPLAIN ✅ (full mechanism).
ENEMY_FRAME vs. INVALIDATE_SOLUTIONS
- ENEMY_FRAME: "Naming an EXTERNAL ENTITY that is deliberately harming, deceiving, or profiting?"
- INVALIDATE_SOLUTIONS: "Stating a SPECIFIC method, product, or approach does NOT work?"
- Test: "Big Pharma doesn't want you to know about this." → ENEMY_FRAME ✅ (WHO is blamed). INVALIDATE_SOLUTIONS ❌ (no specific product attacked).
- Test: "Advil and Tylenol only mask the symptoms." → INVALIDATE_SOLUTIONS ✅ (WHAT doesn't work). ENEMY_FRAME ❌ (no villain entity blamed).
- Edge case: "The pharmaceutical industry keeps selling you drugs they know don't work." → BOTH could apply. Primary: ENEMY_FRAME (entity blamed). Secondary: INVALIDATE_SOLUTIONS (drugs don't work). In dual-tag scenarios, assign both.
FEAR_DEEPEN vs. PAIN_ARTICULATE vs. NEGATIVE_FUTURE_PACE
- PAIN_ARTICULATE: "NAMING a specific pain the viewer currently lives with?"
- FEAR_DEEPEN: "ESCALATING fear by describing a consequence WORSE than what the viewer was already aware of?"
- NEGATIVE_FUTURE_PACE: "Describing what will happen IF THEY DO NOT take action?"
- Test: "You wake up every morning with stiff, aching joints." → PAIN_ARTICULATE ✅ (names current pain). FEAR_DEEPEN ❌ (no escalation). NEGATIVE_FUTURE_PACE ❌ (no future projection).
- Test: "What most people don't realize is that this inflammation can also trigger heart attacks." → FEAR_DEEPEN ✅ (escalates to worse consequence). PAIN_ARTICULATE ❌ (not naming current experience). NEGATIVE_FUTURE_PACE ❌ (not conditional on inaction).
- Test: "If you don't address this now, in 5 years you could lose the ability to walk." → NEGATIVE_FUTURE_PACE ✅ (conditional future if no action). FEAR_DEEPEN ❌ (no new information, just projection). PAIN_ARTICULATE ❌ (not current pain).
PROOF_SOCIAL vs. PROOF_PERSONAL vs. PROOF_SCIENTIFIC
- PROOF_SOCIAL: "Citing experiences of OTHER PEOPLE — through numbers, testimonials, or named individuals?"
- PROOF_PERSONAL: "The SPEAKER sharing their OWN personal experience — using first-person 'I'?"
- PROOF_SCIENTIFIC: "Citing a STUDY, CLINICAL TRIAL, RESEARCH INSTITUTION, or SPECIFIC STATISTICAL DATA?"
- Test: "Over 127,000 people have used this." → PROOF_SOCIAL ✅. PROOF_PERSONAL ❌. PROOF_SCIENTIFIC ❌.
- Test: "I personally lost 40 pounds using this method." → PROOF_PERSONAL ✅. PROOF_SOCIAL ❌ (speaker, not others). PROOF_SCIENTIFIC ❌.
- Test: "A 2023 Stanford study found 87% reduction." → PROOF_SCIENTIFIC ✅. PROOF_SOCIAL ❌ (study, not people stories). PROOF_PERSONAL ❌.
CTA_MECHANICAL vs. CTA_BUILD
- CTA_BUILD: "PREPARING the viewer for the CTA — describing what they'll see or framing the moment — WITHOUT the direct instruction?"
- CTA_MECHANICAL: "Giving a DIRECT INSTRUCTION to take a specific physical action?"
- Test: "On the next page, you'll see everything you need." → CTA_BUILD ✅ (describes what's next). CTA_MECHANICAL ❌ (no instruction).
- Test: "Click the button below right now." → CTA_MECHANICAL ✅ (direct instruction). CTA_BUILD ❌ (no framing, pure command).
SCARCITY_INFO vs. SCARCITY_OFFER
- SCARCITY_INFO: "Claiming the INFORMATION or VIDEO may be removed or censored?"
- SCARCITY_OFFER: "Claiming the OFFER, PRICE, or AVAILABILITY is limited?"
- Test: "This video may be taken down at any moment." → SCARCITY_INFO ✅. SCARCITY_OFFER ❌.
- Test: "We only have 500 bottles left." → SCARCITY_OFFER ✅. SCARCITY_INFO ❌.
CURIOSITY_OPEN vs. INVALIDATE_BELIEF
- CURIOSITY_OPEN: "Creates a specific UNANSWERED QUESTION or information gap?"
- INVALIDATE_BELIEF: "States something the viewer BELIEVES is actually WRONG?"
- Test: "What does a lunch lady have to do with wrinkles?" → CURIOSITY_OPEN ✅ (question creating gap). INVALIDATE_BELIEF ❌ (no belief attacked).
- Test: "Fiber is actually making your constipation worse." → INVALIDATE_BELIEF ✅ (breaks belief). CURIOSITY_OPEN ❌ (no open question, it's a statement).
- Edge case: "What if everything you've been taught about joint pain is completely wrong?" → BOTH. Primary: INVALIDATE_BELIEF (challenges belief). Secondary: CURIOSITY_OPEN (creates question). Assign both if applicable.
INVALIDATE_SOLUTIONS vs. SOLUTION_DIFFERENTIATE
- INVALIDATE_SOLUTIONS: "Stating a method DOES NOT WORK or is insufficient?"
- SOLUTION_DIFFERENTIATE: "CONTRASTING the product with alternatives to show SUPERIORITY on a feature?"
- Test: "Those creams can't penetrate deep enough." → INVALIDATE_SOLUTIONS ✅ (doesn't work). SOLUTION_DIFFERENTIATE ❌ (no contrast with own product).
- Test: "Unlike regular olive oil, ours retains 10x the polyphenols." → SOLUTION_DIFFERENTIATE ✅ (superiority claim). INVALIDATE_SOLUTIONS ❌ (doesn't say alternatives fail).
METHOD_SIMPLE vs. RAPID_RESULT
- METHOD_SIMPLE: "Emphasizing how EASY or EFFORTLESS the method is?"
- RAPID_RESULT: "Emphasizing HOW FAST results appear with a concrete timeframe?"
- Test: "All you do is mix one teaspoon into water — that's it." → METHOD_SIMPLE ✅ (ease). RAPID_RESULT ❌ (no time claim).
- Test: "You'll see results in just 7 days." → RAPID_RESULT ✅ (speed with timeframe). METHOD_SIMPLE ❌ (no ease claim).
- Edge case: "In 30 seconds a day, you'll see results within a week." → BOTH. METHOD_SIMPLE (30 seconds = easy). RAPID_RESULT (within a week = fast).
PROMISE vs. FUTURE_PACE vs. BENEFITS
- PROMISE: "Stating a SPECIFIC end result or transformation the viewer WILL achieve?"
- FUTURE_PACE: "Asking the viewer to IMAGINE their positive future state?"
- BENEFITS: "Listing specific positive outcomes as enumerated selling points?"
- Test: "You will be pain-free within 30 days." → PROMISE ✅ (core transformation). FUTURE_PACE ❌ (not asking to imagine). BENEFITS ❌ (core promise, not enumerated list).
- Test: "Imagine waking up full of energy, pain-free." → FUTURE_PACE ✅ (visualization). PROMISE ❌ (imagining, not promising). BENEFITS ❌ (not listing).
- Test: "It boosts metabolism, reduces inflammation, and improves sleep." → BENEFITS ✅ (enumerated list). PROMISE ❌ (not the core commitment). FUTURE_PACE ❌ (not visualization).
WORKS_FOR_ALL vs. AUDIENCE_EXPAND
- WORKS_FOR_ALL: "Claiming the method works for EVERYONE using universal language?"
- AUDIENCE_EXPAND: "Listing ADDITIONAL problems or conditions BEYOND the primary one?"
- Test: "This works for anyone, regardless of age or body type." → WORKS_FOR_ALL ✅ (universal claim). AUDIENCE_EXPAND ❌ (no new conditions listed).
- Test: "It's not just for joint pain — it also helps with back pain, stiffness, and arthritis." → AUDIENCE_EXPAND ✅ (new conditions listed). WORKS_FOR_ALL ❌ (not universal claim, specific conditions).
4. UNCERTAINTY FLAGS
STORY_TRANSPORT — position ambiguity
The code appears in early position but can extend across many sentences. As a delivery VEHICLE rather than a discrete beat, its annotation may overlap with PAIN_ARTICULATE (story about pain) or PROOF_PERSONAL (personal story as proof). Resolution: STORY_TRANSPORT should be tagged when the PRIMARY function of the sentence is NARRATIVE TRANSPORT (telling a story) rather than pain articulation or proof delivery. If the story is clearly serving as proof of the product working, tag PROOF_PERSONAL instead. If it's articulating pain through narrative, tag PAIN_ARTICULATE.
VALUE_FRAME vs. INVALIDATE_ON_PRICE — boundary cases
VALUE_FRAME positively frames OWN price. INVALIDATE_ON_PRICE attacks competitor price. When a sentence does BOTH ("Unlike $500 surgeries, this is just $49"), it should receive both tags. The discriminants are designed to be complementary, not mutually exclusive, in this case.
SELF_SELECT — absorbed too many codes?
SELF_SELECT absorbed QUALIFY, IDENTITY_SPEAK, and IDENTITY_CLOSE. The concern is that qualification early in the ad serves a different strategic purpose than qualification near the CTA. Resolution: The typical_position field is "first" because that's the FIRST typical appearance, but the code can appear at any position. Annotators should note position context. A future v2.0 could re-split if position data reveals distinct functions.
HOPE_BRIDGE — absorbed SOLUTION_2_0_BRIDGE
The "1.0 → 2.0" pattern is culturally specific to Brazilian DR and represents a distinct rhetorical move (explicitly naming the upgrade). Absorbing it into HOPE_BRIDGE may lose this nuance. Resolution: For v1.0, the merge is justified because the structural function (pivot from problem to solution) is identical. If Brazilian-specific analysis needs to distinguish "generic hope bridge" from "explicit 2.0 upgrade," a future version could re-introduce it.
5. FINAL CODE COUNT BY CATEGORY
| Category | Codes | Code Names |
|---|---|---|
| ATTENTION (4) | 4 | CURIOSITY_OPEN, INVALIDATE_BELIEF, THE_ONE_THING, STORY_TRANSPORT |
| QUALIFICATION (3) | 3 | SELF_SELECT, WORKS_FOR_ALL, AUDIENCE_EXPAND |
| PROBLEM (6) | 6 | PAIN_ARTICULATE, SPOILER_MUP, MUP_EXPLAIN, ROOT_CAUSE_REVEAL, COMMON_ERROR, REASON_WHY |
| INVALIDATION (2) | 2 | INVALIDATE_SOLUTIONS, INVALIDATE_ON_PRICE |
| SOLUTION (11) | 11 | SPOILER_MSOL, SOLUTION_PRESENT, MSOL_EXPLAIN, METHOD_SIMPLE, METHOD_NATURAL, RAPID_RESULT, PROMISE, BENEFITS, VALUE_FRAME, OBJECTION_HANDLE, SOLUTION_DIFFERENTIATE |
| PROOF (8) | 8 | PROOF_SOCIAL, PROOF_PERSONAL, PROOF_DEMONSTRATION, PROOF_SCIENTIFIC, DISCOVERY_FRAME, EXPERT_PRESENT, PROOF_AUTHORITY, SUPERSTRUCTURE |
| EMOTION (5) | 5 | FEAR_DEEPEN, ENEMY_FRAME, FUTURE_PACE, NEGATIVE_FUTURE_PACE, DESIRE_MIRROR |
| CTA (3) | 3 | CTA_BUILD, CTA_MECHANICAL, OFFER_PRESENT |
| SCARCITY (2) | 2 | SCARCITY_OFFER, SCARCITY_INFO |
| PACING (5) | 5 | SKEPTICISM_DISARM, HOPE_BRIDGE, BULLET_STACK, STEALTH_FRAME, FUNNEL_BRIDGE |
| META (1) | 1 | VIEWER_PSYCHOLOGY |
| TOTAL | 50 |
End of Validation Section Taxonomy v1.0 — 50 operational codes from 78 analytical codes 78 → 50: 21 merges, 7 removals