{"data":[{"id":"000f81d4-8da7-4e63-91fb-ad59469af842","cards":[{"id":"gate","speak":"Tap the phone number to dial.","stage":"gate","choices":[{"id":"connected","next":"storm_recall_open","label":"✓ They answered"},{"id":"no_answer","exit":"no_answer","label":"No Answer"},{"id":"voicemail","exit":"voicemail","label":"Voicemail"},{"id":"wrong_number","exit":"wrong_number","label":"Wrong #"},{"id":"dnc","next":"dnc_remove","label":"DNC / Remove"}],"coachTip":"Let it ring 5–6 times. Storm-recall opener — never say \"quick reason for the call.\""},{"id":"storm_recall_open","speak":"Hi {{firstName}}, it's {{repName}} with {{companyName}}. You remember that {{hailSize}} hailstorm in {{city}} on {{stormDate}}, right?","stage":"hook","choices":[{"id":"storm_yes","next":"storm_remembered_offer","label":"✓ Yes, they remember"},{"id":"storm_no","next":"storm_not_remembered_context","label":"No / not sure"},{"id":"who_is_this","next":"obj_who_is_this","label":"\"Who is this?\""},{"id":"where_info","next":"obj_where_info","label":"\"Where'd you get my info?\""},{"id":"not_interested","next":"obj_not_interested_early","label":"\"Not interested\""},{"id":"remove_me","next":"dnc_remove","label":"\"Remove me\""}],"coachTip":"Goal is recall only. Do NOT explain the offer yet. Let them remember the storm first."},{"id":"hook_intro","speak":"Hi {{firstName}}, it's {{repName}} with {{companyName}}. You remember that {{hailSize}} hailstorm in {{city}} on {{stormDate}}, right?","stage":"hook","choices":[{"id":"storm_yes","next":"storm_remembered_offer","label":"✓ Yes, they remember"},{"id":"storm_no","next":"storm_not_remembered_context","label":"No / not sure"},{"id":"who_is_this","next":"obj_who_is_this","label":"\"Who is this?\""},{"id":"where_info","next":"obj_where_info","label":"\"Where'd you get my info?\""},{"id":"not_interested","next":"obj_not_interested_early","label":"\"Not interested\""},{"id":"remove_me","next":"dnc_remove","label":"\"Remove me\""}],"coachTip":"Same as storm_recall_open. Recall first. No permission ask. No \"quick reason.\""},{"id":"hook_permission","speak":"Hi {{firstName}}, it's {{repName}} with {{companyName}}. You remember that {{hailSize}} hailstorm in {{city}} on {{stormDate}}, right?","stage":"hook","choices":[{"id":"storm_yes","next":"storm_remembered_offer","label":"✓ Yes, they remember"},{"id":"storm_no","next":"storm_not_remembered_context","label":"No / not sure"},{"id":"not_interested","next":"obj_not_interested_early","label":"\"Not interested\""}],"coachTip":"No permission asks. Recall first."},{"id":"storm_remembered_offer","speak":"That's the one. Because your home showed in that hail path, we're offering a no-cost storm damage report: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"spouse","next":"obj_spouse","label":"\"Need to ask spouse\""},{"id":"skeptic","next":"obj_scam","label":"Skeptical / scam"},{"id":"cost","next":"obj_cost","label":"Cost question"}],"coachTip":"First full context card. Define the report before asking whether they have one."},{"id":"storm_not_remembered_context","speak":"No problem — even if the date doesn't ring a bell, your area still showed in the hail path from {{stormDate}}. That's why we're offering a no-cost storm damage report: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"storm_not_bad","next":"obj_storm_not_bad","label":"\"Storm wasn't bad\""},{"id":"not_interested","next":"obj_not_interested","label":"\"Not interested\""},{"id":"skeptic","next":"obj_scam","label":"Skeptical"}],"coachTip":"Do not argue about storm memory. Explain why this address is in the flow, define the report, then ask the report question."},{"id":"hook_storm_context","speak":"Your area showed in the hail path from {{stormDate}}, so we're offering a no-cost storm damage report: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"}],"coachTip":"Define the report every time this card can be reached from a context branch."},{"id":"hook_offer","speak":"We're offering a no-cost storm damage report for homes in that hail path: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"skeptic","next":"obj_scam","label":"Skeptical"},{"id":"cost","next":"obj_cost","label":"Cost question"}],"coachTip":"Short but complete. The report is not assumed; define it."},{"id":"report_schedule_pitch","speak":"Easy. The report flight is done from the driveway, nobody walks the roof, and it costs you nothing. Morning or afternoon better this week?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_home","next":"obj_not_home","label":"Not home"},{"id":"cost","next":"obj_cost","label":"Cost question"},{"id":"spouse","next":"obj_spouse","label":"Need spouse"},{"id":"think","next":"obj_think","label":"Think about it"},{"id":"skeptic","next":"obj_scam","label":"Skeptical"}],"coachTip":"First real close after they understand the report. Keep it short and tied to the report flight."},{"id":"hook_micro_yes","speak":"Easy. The report flight is done from the driveway, nobody walks the roof, and it costs you nothing. Morning or afternoon better this week?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"spouse","next":"obj_spouse","label":"Need spouse"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"After the yes, move to a simple time window. Do not reopen the pitch."},{"id":"hook_reassure","speak":"No catch. The storm damage report costs you nothing — no payment, no signature, nobody walks the roof. It's just aerial photos for your records. Morning or afternoon better this week?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"still_skeptic","next":"obj_scam","label":"Still skeptical"}],"coachTip":"Risk removal plus one plain definition of the deliverable."},{"id":"already_has_report","speak":"Good — was it an aerial storm damage report with roof photos you received, or more of a ground look?","stage":"hook","choices":[{"id":"aerial","exit":"already_has_report","label":"Aerial report"},{"id":"ground","next":"ground_look_reframe","label":"Ground look only"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"contractor","next":"obj_have_contractor","label":"Their contractor checked"}],"coachTip":"Create the gap without insulting whoever checked it. A report means delivered photos, not just someone looking."},{"id":"ground_look_reframe","speak":"Got it. A ground look is useful, but hail evidence is usually on the roof surface. The aerial report gives you dated roof photos too. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"skeptic","next":"obj_scam","label":"Skeptical"},{"id":"think","next":"obj_think","label":"Think about it"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Simple 180: ground check means the aerial report still has value."},{"id":"obj_checked_ground_pivot","speak":"Got it. A ground look is useful, but hail evidence is usually on the roof surface. The aerial report gives you dated roof photos too. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"Same as ground_look_reframe."},{"id":"not_sure_if_report","speak":"If nobody handed or texted you aerial roof photos, you probably don't have the report we're talking about. We can get that done this week. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_home","next":"obj_not_home","label":"Not home"},{"id":"spouse","next":"obj_spouse","label":"Need spouse"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"Uncertainty means define the deliverable again, then schedule."},{"id":"schedule_confirm_report","speak":"Perfect. I've got you down for {{appointmentDay}} {{appointmentWindow}}. You'll get a confirmation text, then the storm damage report after the flight.","stage":"close","choices":[{"id":"confirmed","exit":"appointment_set","label":"✅ Confirmed"},{"id":"change","next":"book_time_pref","label":"Change time"}],"coachTip":"Short close. Confirm the deliverable."},{"id":"close_confirm","speak":"Perfect. I've got you down for {{appointmentDay}} {{appointmentWindow}}. You'll get a confirmation text, then the storm damage report after the flight.","stage":"close","choices":[{"id":"confirmed","exit":"appointment_set","label":"✅ Confirmed"},{"id":"change","next":"book_time_pref","label":"Change time"}],"coachTip":"Short close. Confirm the deliverable."},{"id":"dnc_remove","speak":"Understood. I'll mark you as do-not-contact.","stage":"close","choices":[{"id":"dnc_done","exit":"dnc","label":"✓ Marked DNC"}],"coachTip":"No rebuttal after remove-me language. Mark DNC and end the call."},{"id":"obj_who_is_this","speak":"{{repName}} with {{companyName}}. We're calling because your home showed in the {{stormDate}} hail path, and we're offering a no-cost storm damage report with aerial roof photos for your records.","stage":"hook","choices":[{"id":"ok","next":"storm_remembered_offer","label":"✓ Continue"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Short ID. Then route back to the report pitch.","objection":"Who is this?","speakLong":"No payment, no signature, nobody walks the roof. The report is dated aerial photos from after the storm so you have documentation if anything shows up later."},{"id":"obj_where_info","speak":"Public storm data and county property records. Storm data shows the hail path; property records show which homes sit inside it. That's why this address came up for the no-cost storm damage report with aerial roof photos — nothing private and nothing bought.","stage":"hook","choices":[{"id":"ok","next":"storm_remembered_offer","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Short and direct. Pivot back to the report.","objection":"Where did you get my info?","speakLong":"Your home showed inside the hail path from the {{stormDate}} storm, so we're reaching out while report flights are already being routed in {{city}}."},{"id":"obj_not_interested","speak":"Got it, {{firstName}} — I won't keep pushing. The reason I'd still flag it is simple: the no-cost storm damage report gives you dated aerial roof photos from after the {{stormDate}} hailstorm, so if a leak or ceiling stain shows up later you're not starting from zero. I can add you to this week's report route with no payment, no signature, and nobody walking the roof — or I can mark it no.","stage":"hook","choices":[{"id":"add_me","next":"report_schedule_pitch","label":"✓ Add me to the route"},{"id":"maybe_context","next":"storm_remembered_offer","label":"What exactly is the report?"},{"id":"final_no","exit":"not_interested","label":"Final no"},{"id":"remove_me","next":"dnc_remove","label":"Remove me"}],"coachTip":"Use after the report has already been introduced. For early no's, route to obj_not_interested_early so the homeowner gets context first.","objection":"Not interested","speakLong":"This is not asking you to file a claim or hire anyone. It's just aerial photos and roof-condition documentation you keep for your own records."},{"id":"obj_storm_not_bad","speak":"That may be true from the ground. Hail damage often hides on the roof surface — granule loss, lifted edges, vents, flashing. The report is just aerial photos so you can see what the driveway can't.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"what_damage","next":"obj_what_damage","label":"What damage would show?"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Short. Then route back to scheduling.","objection":"Storm wasn't that bad","speakLong":"If the photos show nothing, great — you still have dated proof of condition after the storm."},{"id":"obj_no_leaks","speak":"That's good. The report is for catching roof issues before they become leaks — if the photos show nothing, you just have dated proof that the roof looked okay after the storm.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Validate. Then route back.","objection":"No leaks though","speakLong":"No leaks is good. But hail damage usually starts on the roof before it shows inside. The report gives you aerial photos now, before you're dealing with ceiling stains or interior damage."},{"id":"obj_cost","speak":"The storm damage report costs you nothing. No payment, no signature, nobody walks the roof — it's just aerial roof photos for your records.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"One clear answer, then return to scheduling.","objection":"How much?","speakLong":"The report costs you nothing. It includes aerial photos and roof condition documentation. If tarping is ever needed later, that gets explained and authorized before anything moves forward."},{"id":"obj_scam","speak":"You should be careful — storms bring out bad actors. Here's the difference: no payment, no signature, nobody walks your roof, and the deliverable is just a storm damage report with aerial photos you keep. Look us up while I'm on the phone.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"looking_up","next":"hook_reassure","label":"Looking us up"},{"id":"not_interested","next":"obj_not_interested","label":"Still not interested"}],"coachTip":"Validate caution, define the deliverable, remove payment/signature pressure, and give them control.","objection":"Sounds like a scam","speakLong":"If it checks out, we can put you on this week's report route. If not, I'll mark it no and end the call."},{"id":"obj_bad_time","speak":"Got it, {{firstName}}. Since the no-cost storm damage report flight is exterior-only aerial photos, you don't have to be home. I can hold a morning or afternoon window this week — or set a callback if you'd rather talk later.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"callback","exit":"callback","label":"Call back later"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Don't apologize. Pivot to a time.","objection":"Bad time"},{"id":"obj_already_checked","speak":"Good — was it an aerial photo report, or did someone just look from the ground?","stage":"hook","choices":[{"id":"aerial","exit":"already_has_report","label":"Aerial report"},{"id":"ground","next":"ground_look_reframe","label":"Ground look only"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"contractor","next":"obj_have_contractor","label":"Contractor checked"}],"coachTip":"Don't attack. Create the distinction: aerial vs ground.","objection":"Already had it checked","speakLong":"Good that someone looked. The key is whether you got aerial photos and a storm report, or just a ground-level check. Hail damage usually shows on the roof surface, not from the driveway."},{"id":"obj_checked_recently","speak":"Was it an aerial photo report, or a ground-level look? If nobody handed you roof photos, this still fills the gap.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"ground","next":"ground_look_reframe","label":"Ground only"}],"coachTip":"Same distinction."},{"id":"obj_have_contractor","speak":"Good — keep your contractor. The report gives them aerial roof photos to work from too, so it's additive, not replacing them. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"no_thanks","next":"obj_not_interested","label":"No thanks"}],"coachTip":"Don't threaten the relationship. Report = better info for everyone.","objection":"I have a contractor","speakLong":"Having someone you trust is good. This report does not replace them. It gives you aerial roof photos from after the storm, and you can share it with whoever you already trust."},{"id":"obj_checked_contractor_reframe","speak":"Good — keep your contractor. The report gives them aerial roof photos to work from too, so it's additive, not replacing them. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"no_thanks","next":"obj_not_interested","label":"No thanks"}],"coachTip":"Same as obj_have_contractor."},{"id":"obj_already_filed_claim","speak":"Then the report helps your file. Independent aerial photos, dated.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"Independent documentation strengthens the file.","objection":"Already filed a claim","speakLong":"If insurance is already involved, documentation matters even more. The report gives you aerial photos to compare against anything the carrier or adjuster already has."},{"id":"obj_checked_insurance_reframe","speak":"Then the report helps your file. Independent aerial photos, dated.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"}],"coachTip":"Same."},{"id":"obj_spouse","speak":"Makes sense. The report gives both of you photos to look at. I'll hold {{appointmentDay}} — confirm with them tonight and text yes or no.","stage":"qualify","choices":[{"id":"hold_slot","next":"schedule_confirm_report","label":"✓ Hold the slot"},{"id":"release","exit":"spouse_pending","label":"Release it"}],"coachTip":"Soft hold. Spouse review of photos > over-the-phone decision.","objection":"Need to ask spouse","speakLong":"That's exactly why the report helps. You're not deciding off a phone call. You both get the aerial photos, then decide if anything needs attention."},{"id":"qualify_spouse","speak":"Makes sense. The report gives both of you photos to look at. I'll hold a slot — confirm with them tonight.","stage":"qualify","choices":[{"id":"hold_slot","next":"book_capture_address","label":"✓ Hold a slot"},{"id":"callback","next":"obj_think","label":"Call back tomorrow"}],"coachTip":"Soft hold."},{"id":"obj_spouse_reintro","speak":"Makes sense. The report gives both of you photos to look at. I'll hold {{appointmentDay}} — confirm with them tonight and text yes or no.","stage":"qualify","choices":[{"id":"hold_slot","next":"schedule_confirm_report","label":"✓ Hold the slot"},{"id":"release","exit":"spouse_pending","label":"Release it"}],"coachTip":"Same as obj_spouse."},{"id":"obj_think","speak":"Fair. The report is the no-decision step — aerial photos first, then you decide if anything matters. I can hold a report slot this week so it's there if you want it, or mark it no.","stage":"hook","choices":[{"id":"hold_slot","next":"book_capture_address","label":"✓ Hold a slot"},{"id":"need_context","next":"storm_remembered_offer","label":"Explain the report again"},{"id":"final_no","exit":"not_interested","label":"Final no"}],"coachTip":"They're deciding whether to accept proof, not whether to do work.","objection":"Let me think about it","speakLong":"You're not deciding on work. You're deciding whether to get proof. The report gives you aerial photos first, then you decide if anything needs attention."},{"id":"obj_think_about_it","speak":"Fair. The report is the no-decision step — aerial photos first, then you decide if anything matters. I can hold a report slot this week so it's there if you want it, or mark it no.","stage":"hook","choices":[{"id":"hold_slot","next":"book_capture_address","label":"✓ Hold a slot"},{"id":"need_context","next":"storm_remembered_offer","label":"Explain the report again"},{"id":"final_no","exit":"not_interested","label":"Final no"}],"coachTip":"Same as obj_think.","objection":"Let me think about it"},{"id":"obj_think_reframe","speak":"Fair. The report is the no-decision step — photos first. I'll hold {{appointmentDay}} {{appointmentWindow}} — confirm by text tonight.","stage":"hook","choices":[{"id":"lock","next":"schedule_confirm_report","label":"Lock it in"},{"id":"release","exit":"not_interested","label":"Release it"}],"coachTip":"Soft hold close."},{"id":"obj_not_home","speak":"No problem. You don't have to be home — the no-cost storm damage report is exterior-only aerial photos from the driveway.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"think","next":"obj_think","label":"Think about it"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Remove the friction. Then route back.","objection":"I'm not home","speakLong":"You don't need to be home for the report. If exterior access is clear, we can complete the aerial photos and send the report after."},{"id":"obj_no_roof","speak":"Nobody walks the roof. The no-cost storm damage report is drone-only aerial photos — no ladders, no foot traffic.","stage":"hook","choices":[{"id":"ok","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Direct. Route back.","objection":"Don't walk on my roof","speakLong":"The drone flies from the driveway or exterior, captures the roof photos, and lands. No ladder against the gutter. No one walking across shingles."},{"id":"obj_what_damage","speak":"Hail damage usually isn't obvious from the driveway. The aerial photos look for bruising, granule loss, lifted edges, vents, and flashing — the roof-surface issues that can turn into leaks later.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"no_leaks","next":"obj_no_leaks","label":"No leaks right now"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"One-line education. Then route back.","speakLong":"The report doesn't claim there's damage before we see it. It gives you dated photos so you know what is actually there."},{"id":"obj_renter","speak":"The owner is who needs the no-cost storm damage report with aerial roof photos. What's the best number for them?","stage":"qualify","choices":[{"id":"share_contact","exit":"renter_owner_referred","label":"✓ Got owner contact"},{"id":"leave_number","exit":"renter_pass_along","label":"Leave our number"},{"id":"no","exit":"not_qualified","label":"No"}],"coachTip":"Renter is not the decision maker. Get owner contact.","objection":"I'm renting","speakLong":"Anything roof-related has to go through the owner. The report documents the roof after the hailstorm, so it's useful for whoever owns the property."},{"id":"disqualify_renter","speak":"The owner is who needs the no-cost storm damage report with aerial roof photos. What's the best number for them?","stage":"qualify","choices":[{"id":"share_contact","exit":"renter_owner_referred","label":"✓ Got owner contact"},{"id":"leave_number","exit":"renter_pass_along","label":"Leave our number"},{"id":"no","exit":"not_qualified","label":"No"}],"coachTip":"Same as obj_renter."},{"id":"obj_new_roof","speak":"New roofs still take hail hits. The no-cost storm damage report gives you dated aerial photos and a clean baseline after the storm.","stage":"qualify","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"no_thanks","next":"obj_not_interested","label":"No thanks"}],"coachTip":"Hail doesn't care about roof age.","objection":"My roof is only a few years old","speakLong":"Newer roofs usually hold up better, but hail still leaves marks. The report gives you a clean baseline after the storm so you're not guessing later."},{"id":"obj_insurance_skeptic","speak":"That's exactly why documentation matters. Dated photos before the next storm muddies the picture.","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Flip the skepticism into a reason to accept the report."},{"id":"obj_call_later","speak":"I can do that. I'll hold a report slot too while crews are routing {{city}}.","stage":"hook","choices":[{"id":"hold_slot","next":"schedule_confirm_report","label":"✓ Hold a slot"},{"id":"callback_only","exit":"callback","label":"Callback only"}],"coachTip":"Soft hold while honoring the callback.","objection":"Call me later","speakLong":"Holding a slot doesn't commit you to work. It just keeps the route open if you decide you want the aerial photos."},{"id":"transition_pa_value","speak":"The report itself costs you nothing. If anything later needs tarping, billing is handled through the insurance claim documentation and explained before anything moves forward.","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"cost_q","next":"faq_cost_answer","label":"More on cost"}],"coachTip":"Approved billing language only. No \"we bill directly,\" no \"no deductible,\" no \"covered.\""},{"id":"value_bridge","speak":"The report is the value: aerial photos, dated documentation, no payment, no signature, nobody walks the roof. Morning or afternoon better?","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"}],"coachTip":"Value bridge = report + proof. No PA. No insurance-first."},{"id":"book_assumptive","speak":"Perfect. We've got report flights in {{city}} this week. Morning or afternoon better?","stage":"book","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"}],"coachTip":"Assumptive close to a time window."},{"id":"book_time_pref","speak":"We've got report flights in {{city}} this week. Morning or afternoon better?","stage":"book","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"spouse","next":"obj_spouse_reintro","label":"Need spouse"}],"coachTip":"Two-option close. The deliverable is the report."},{"id":"faq_cost_answer","speak":"The report costs you nothing. If anything later needs tarping, billing is handled through the insurance claim documentation and explained before anything moves forward.","stage":"faq","choices":[{"id":"back","next":"report_schedule_pitch","label":"Back to script"},{"id":"book","next":"book_time_pref","label":"Book a flight"}],"coachTip":"Approved billing language only."},{"id":"faq_insurance_answer","speak":"The report is yours to keep regardless. If tarping is ever needed, billing for that step is handled through the insurance claim documentation and explained before anything moves forward.","stage":"faq","choices":[{"id":"back","next":"report_schedule_pitch","label":"Back to script"},{"id":"book","next":"book_time_pref","label":"Book a flight"}],"coachTip":"Insurance is downstream. Report comes first."},{"id":"faq_duration_answer","speak":"The flight takes a few minutes. The report with aerial photos comes after.","stage":"faq","choices":[{"id":"back","next":"report_schedule_pitch","label":"Back to script"},{"id":"book","next":"book_time_pref","label":"Book a flight"}],"coachTip":"Short."},{"id":"obj_storm_not_remembered","speak":"No problem. Your area still showed in the hail path, which is why we're offering the no-cost storm damage report with aerial roof photos.","stage":"hook","choices":[{"id":"ok","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Don't argue. Calm pivot — the report is what matters, not their memory.","objection":"I don't remember any storm","speakLong":"No problem. These storms move fast. Even if you don't remember the hail, your area still showed in the storm path. The report gives you aerial photos so you're not relying on memory or guessing from the ground."},{"id":"obj_not_signing","speak":"Nothing to sign for the no-cost storm damage report — it's just aerial photos for your records.","stage":"hook","choices":[{"id":"ok","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Validate the rule. Then route back — report is sign-free.","objection":"I don't sign anything on the phone","speakLong":"Good rule — nothing gets signed for the storm damage report. No contract, no payment, no authorization on this call. If anything needs work later, that's explained separately before anything moves forward."},{"id":"obj_insurance_wont_help","speak":"That's exactly why documentation matters.","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Flip the skepticism. Dated photos help even if they never file a claim.","objection":"Insurance never pays for this stuff","speakLong":"Even if you never file anything, dated photos help. The report gives you roof documentation after this storm, before another storm makes everything harder to prove. You keep it either way."},{"id":"obj_not_interested_early","speak":"Got it, {{firstName}}. Before I mark it no, quick context: we're reaching out because your home showed in the {{stormDate}} hail path. The offer is just a no-cost storm damage report with aerial roof photos — no payment, no signature, nobody walks the roof. If you still want no contact, I'll mark it no.","stage":"hook","choices":[{"id":"early_context_ok","next":"storm_remembered_offer","label":"✓ Okay, what is it?"},{"id":"early_route","next":"report_schedule_pitch","label":"Add me to the route"},{"id":"early_final_no","exit":"not_interested","label":"Still no"},{"id":"early_remove","next":"dnc_remove","label":"Remove me"}],"coachTip":"Use this only when they say no before the report has been explained. Define the offer first; do not reference 'the report' as if they already know what it is.","objection":"Not interested before offer context","speakLong":"The report gives you dated aerial photos from after the hailstorm so you're not guessing later if a leak or ceiling stain shows up. It is not a roofing contract and it does not require you to file anything."}],"notes":"Phase 3 SCE seed — 57 cards captured byte-for-byte from JSON override. Lint blocking=2, warn=1, info=49.","status":"draft","metadata":{"notes":"Seeded by Phase 3. Runtime still loads from the JSON path; this row is dormant until Phase 4 enables the DB resolver.","counts":{"cards":57,"rebuttals":21},"hashes":{"cards":"bd6425ac993667be07ec37bb74cbc64c443f179ae5114891d273477fa43fbd7f","combined":"92d31fc046c04140b21dcbc279b26e403f0e7ea82bcac1a68dafc145df4f2411","rebuttals":"d38b53072e8d51c2a37bdcd1964a839d407a1c101b0e31abe4040d8693772f64"},"source":{"cards":{"file":"src/data/workflows/tenant-overrides/space-coast-emergency-tarping.json","note":"Today the runtime falls back to this JSON when no admin DB site_config row exists. AdventureWorkflow/MobileWorkflowV3 use baseCards.ts + MITIGATION_OVERRIDES separately; this snapshot captures the JSON-resolved variant per Phase 0 audit.","origin":"code-default-tenant-override","resolverPath":"CODE_TENANT_OVERRIDES[a2929648-19db-46c8-9e93-07378ed1aa5f]","resolverModule":"src/lib/workflows/workflowManager.ts"},"rebuttals":{"filter":{"is_active":true,"tenancy_type":"mitigation","tenant_org_id":"a2929648-19db-46c8-9e93-07378ed1aa5f"},"origin":"tenant_rebuttals (DB)"}},"captured_at":"2026-05-11T17:24:38.393Z","snapshot_id":"sce-storm-recall-v9-2026-05-11T17:24:38.393Z","migration_phase":"phase-3","original_json_path":"src/data/workflows/tenant-overrides/space-coast-emergency-tarping.json"},"created_at":"2026-05-11T17:25:54.939004+00:00","created_by":null,"archived_at":null,"lint_report":{"hits":[{"cardId":"gate","ruleId":"sce.forbidden.quick-reason","message":"\"quick reason for the call\" is banned in SCE v9 — opens cold and apologetic.","blocking":true,"severity":"blocking","fieldPath":"cards[gate].coachTip","matchedText":"quick reason for the call","replacementHint":"Lead with the no-cost storm damage report and the specific hailstorm hook."},{"cardId":"transition_pa_value","ruleId":"sce.forbidden.no-deductible","message":"\"no deductible\" is banned (illegal/non-compliant claim).","blocking":true,"severity":"blocking","fieldPath":"cards[transition_pa_value].coachTip","matchedText":"no deductible"},{"cardId":"obj_not_signing","ruleId":"sce.forbidden.free-generic","message":"Avoid \"free\" — SCE preference is \"no cost\", \"zero cost to you\", or \"costs you nothing\".","blocking":false,"severity":"warn","fieldPath":"cards[obj_not_signing].coachTip","matchedText":"free","replacementHint":"Replace \"free\" with \"no cost\"."},{"cardId":"storm_remembered_offer","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[storm_remembered_offer].speak","matchedText":"hail"},{"cardId":"storm_not_remembered_context","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[storm_not_remembered_context].speak","matchedText":"hail"},{"cardId":"hook_storm_context","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[hook_storm_context].speak","matchedText":"hail"},{"cardId":"hook_offer","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[hook_offer].speak","matchedText":"hail"},{"cardId":"ground_look_reframe","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[ground_look_reframe].speak","matchedText":"hail"},{"cardId":"obj_checked_ground_pivot","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_checked_ground_pivot].speak","matchedText":"hail"},{"cardId":"obj_who_is_this","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_who_is_this].speak","matchedText":"hail"},{"cardId":"obj_where_info","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_where_info].speak","matchedText":"hail"},{"cardId":"obj_where_info","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_where_info].speakLong","matchedText":"hail"},{"cardId":"obj_storm_not_bad","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_storm_not_bad].speak","matchedText":"Hail"},{"cardId":"obj_no_leaks","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_no_leaks].speakLong","matchedText":"hail"},{"cardId":"obj_already_checked","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_already_checked].speakLong","matchedText":"Hail"},{"cardId":"obj_what_damage","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_what_damage].speak","matchedText":"Hail"},{"cardId":"obj_new_roof","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_new_roof].speak","matchedText":"hail"},{"cardId":"obj_new_roof","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_new_roof].speakLong","matchedText":"hail"},{"cardId":"obj_new_roof","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_new_roof].coachTip","matchedText":"Hail"},{"cardId":"obj_storm_not_remembered","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_storm_not_remembered].speak","matchedText":"hail"},{"cardId":"obj_storm_not_remembered","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_storm_not_remembered].speakLong","matchedText":"hail"},{"cardId":"obj_not_interested_early","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_not_interested_early].speak","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[239dc20a-f816-4a96-a327-817fae858686].short_text","rebuttalId":"239dc20a-f816-4a96-a327-817fae858686","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[239dc20a-f816-4a96-a327-817fae858686].normal_text","rebuttalId":"239dc20a-f816-4a96-a327-817fae858686","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[239dc20a-f816-4a96-a327-817fae858686].long_text","rebuttalId":"239dc20a-f816-4a96-a327-817fae858686","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[980e9ee6-9096-4c0b-a86c-968c179bfc04].short_text","rebuttalId":"980e9ee6-9096-4c0b-a86c-968c179bfc04","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[980e9ee6-9096-4c0b-a86c-968c179bfc04].normal_text","rebuttalId":"980e9ee6-9096-4c0b-a86c-968c179bfc04","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[980e9ee6-9096-4c0b-a86c-968c179bfc04].long_text","rebuttalId":"980e9ee6-9096-4c0b-a86c-968c179bfc04","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[f34550e1-afff-4afa-8238-f4daf0d669a2].normal_text","rebuttalId":"f34550e1-afff-4afa-8238-f4daf0d669a2","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[f34550e1-afff-4afa-8238-f4daf0d669a2].long_text","rebuttalId":"f34550e1-afff-4afa-8238-f4daf0d669a2","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].short_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].normal_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].long_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].long_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[67a7fd18-eee9-4b32-9f92-25fb992cd793].normal_text","rebuttalId":"67a7fd18-eee9-4b32-9f92-25fb992cd793","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[67a7fd18-eee9-4b32-9f92-25fb992cd793].long_text","rebuttalId":"67a7fd18-eee9-4b32-9f92-25fb992cd793","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[9853839e-25b5-424c-944c-25ecb18039b1].short_text","rebuttalId":"9853839e-25b5-424c-944c-25ecb18039b1","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[9853839e-25b5-424c-944c-25ecb18039b1].normal_text","rebuttalId":"9853839e-25b5-424c-944c-25ecb18039b1","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[9853839e-25b5-424c-944c-25ecb18039b1].long_text","rebuttalId":"9853839e-25b5-424c-944c-25ecb18039b1","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[2aa88045-c71d-44a2-b135-9db874c16c12].short_text","rebuttalId":"2aa88045-c71d-44a2-b135-9db874c16c12","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[2aa88045-c71d-44a2-b135-9db874c16c12].normal_text","rebuttalId":"2aa88045-c71d-44a2-b135-9db874c16c12","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[2aa88045-c71d-44a2-b135-9db874c16c12].long_text","rebuttalId":"2aa88045-c71d-44a2-b135-9db874c16c12","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[acaac516-d070-4d01-8233-68815b7f1bb6].normal_text","rebuttalId":"acaac516-d070-4d01-8233-68815b7f1bb6","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[acaac516-d070-4d01-8233-68815b7f1bb6].long_text","rebuttalId":"acaac516-d070-4d01-8233-68815b7f1bb6","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].short_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].short_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].normal_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].normal_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].normal_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].long_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].long_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].long_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"}],"ranAt":"2026-05-11T17:24:38.392Z","infoCount":49,"warnCount":1,"publishable":false,"blockingCount":2},"template_id":"2fb5a0f6-cb93-40d7-b351-d7fb9bd9654e","published_at":null,"published_by":null,"version_number":1,"rollback_parent_version_id":null},{"id":"b23e3a29-10d4-4f52-9596-3d5856b1429c","cards":[{"id":"gate","speak":"Tap the phone number to dial.","stage":"gate","choices":[{"id":"connected","next":"storm_recall_open","label":"✓ They answered"},{"id":"no_answer","exit":"no_answer","label":"No Answer"},{"id":"voicemail","exit":"voicemail","label":"Voicemail"},{"id":"wrong_number","exit":"wrong_number","label":"Wrong #"},{"id":"dnc","next":"dnc_remove","label":"DNC / Remove"}],"coachTip":"Let it ring 5–6 times. Storm-recall opener only — avoid weak/apologetic openers. Lead with the no-cost storm damage report and the specific hailstorm hook."},{"id":"storm_recall_open","speak":"Hi {{firstName}}, it's {{repName}} with {{companyName}}. You remember that {{hailSize}} hailstorm in {{city}} on {{stormDate}}, right?","stage":"hook","choices":[{"id":"storm_yes","next":"storm_remembered_offer","label":"✓ Yes, they remember"},{"id":"storm_no","next":"storm_not_remembered_context","label":"No / not sure"},{"id":"who_is_this","next":"obj_who_is_this","label":"\"Who is this?\""},{"id":"where_info","next":"obj_where_info","label":"\"Where'd you get my info?\""},{"id":"not_interested","next":"obj_not_interested_early","label":"\"Not interested\""},{"id":"remove_me","next":"dnc_remove","label":"\"Remove me\""}],"coachTip":"Goal is recall only. Do NOT explain the offer yet. Let them remember the storm first."},{"id":"hook_intro","speak":"Hi {{firstName}}, it's {{repName}} with {{companyName}}. You remember that {{hailSize}} hailstorm in {{city}} on {{stormDate}}, right?","stage":"hook","choices":[{"id":"storm_yes","next":"storm_remembered_offer","label":"✓ Yes, they remember"},{"id":"storm_no","next":"storm_not_remembered_context","label":"No / not sure"},{"id":"who_is_this","next":"obj_who_is_this","label":"\"Who is this?\""},{"id":"where_info","next":"obj_where_info","label":"\"Where'd you get my info?\""},{"id":"not_interested","next":"obj_not_interested_early","label":"\"Not interested\""},{"id":"remove_me","next":"dnc_remove","label":"\"Remove me\""}],"coachTip":"Same as storm_recall_open. Recall first. No permission ask. No \"quick reason.\""},{"id":"hook_permission","speak":"Hi {{firstName}}, it's {{repName}} with {{companyName}}. You remember that {{hailSize}} hailstorm in {{city}} on {{stormDate}}, right?","stage":"hook","choices":[{"id":"storm_yes","next":"storm_remembered_offer","label":"✓ Yes, they remember"},{"id":"storm_no","next":"storm_not_remembered_context","label":"No / not sure"},{"id":"not_interested","next":"obj_not_interested_early","label":"\"Not interested\""}],"coachTip":"No permission asks. Recall first."},{"id":"storm_remembered_offer","speak":"That's the one. Because your home showed in that hail path, we're offering a no-cost storm damage report: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"spouse","next":"obj_spouse","label":"\"Need to ask spouse\""},{"id":"skeptic","next":"obj_scam","label":"Skeptical / scam"},{"id":"cost","next":"obj_cost","label":"Cost question"}],"coachTip":"First full context card. Define the report before asking whether they have one."},{"id":"storm_not_remembered_context","speak":"No problem — even if the date doesn't ring a bell, your area still showed in the hail path from {{stormDate}}. That's why we're offering a no-cost storm damage report: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"storm_not_bad","next":"obj_storm_not_bad","label":"\"Storm wasn't bad\""},{"id":"not_interested","next":"obj_not_interested","label":"\"Not interested\""},{"id":"skeptic","next":"obj_scam","label":"Skeptical"}],"coachTip":"Do not argue about storm memory. Explain why this address is in the flow, define the report, then ask the report question."},{"id":"hook_storm_context","speak":"Your area showed in the hail path from {{stormDate}}, so we're offering a no-cost storm damage report: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"}],"coachTip":"Define the report every time this card can be reached from a context branch."},{"id":"hook_offer","speak":"We're offering a no-cost storm damage report for homes in that hail path: aerial roof photos, dated after the storm, that you keep for your records. Has anyone gotten you that kind of report yet?","stage":"hook","choices":[{"id":"no_report","next":"report_schedule_pitch","label":"No report yet"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"skeptic","next":"obj_scam","label":"Skeptical"},{"id":"cost","next":"obj_cost","label":"Cost question"}],"coachTip":"Short but complete. The report is not assumed; define it."},{"id":"report_schedule_pitch","speak":"Easy. The report flight is done from the driveway, nobody walks the roof, and it costs you nothing. Morning or afternoon better this week?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_home","next":"obj_not_home","label":"Not home"},{"id":"cost","next":"obj_cost","label":"Cost question"},{"id":"spouse","next":"obj_spouse","label":"Need spouse"},{"id":"think","next":"obj_think","label":"Think about it"},{"id":"skeptic","next":"obj_scam","label":"Skeptical"}],"coachTip":"First real close after they understand the report. Keep it short and tied to the report flight."},{"id":"hook_micro_yes","speak":"Easy. The report flight is done from the driveway, nobody walks the roof, and it costs you nothing. Morning or afternoon better this week?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"spouse","next":"obj_spouse","label":"Need spouse"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"After the yes, move to a simple time window. Do not reopen the pitch."},{"id":"hook_reassure","speak":"No catch. The storm damage report costs you nothing — no payment, no signature, nobody walks the roof. It's just aerial photos for your records. Morning or afternoon better this week?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"still_skeptic","next":"obj_scam","label":"Still skeptical"}],"coachTip":"Risk removal plus one plain definition of the deliverable."},{"id":"already_has_report","speak":"Good — was it an aerial storm damage report with roof photos you received, or more of a ground look?","stage":"hook","choices":[{"id":"aerial","exit":"already_has_report","label":"Aerial report"},{"id":"ground","next":"ground_look_reframe","label":"Ground look only"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"contractor","next":"obj_have_contractor","label":"Their contractor checked"}],"coachTip":"Create the gap without insulting whoever checked it. A report means delivered photos, not just someone looking."},{"id":"ground_look_reframe","speak":"Got it. A ground look is useful, but hail evidence is usually on the roof surface. The aerial report gives you dated roof photos too. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"skeptic","next":"obj_scam","label":"Skeptical"},{"id":"think","next":"obj_think","label":"Think about it"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Simple 180: ground check means the aerial report still has value."},{"id":"obj_checked_ground_pivot","speak":"Got it. A ground look is useful, but hail evidence is usually on the roof surface. The aerial report gives you dated roof photos too. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"Same as ground_look_reframe."},{"id":"not_sure_if_report","speak":"If nobody handed or texted you aerial roof photos, you probably don't have the report we're talking about. We can get that done this week. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_home","next":"obj_not_home","label":"Not home"},{"id":"spouse","next":"obj_spouse","label":"Need spouse"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"Uncertainty means define the deliverable again, then schedule."},{"id":"schedule_confirm_report","speak":"Perfect. I've got you down for {{appointmentDay}} {{appointmentWindow}}. You'll get a confirmation text, then the storm damage report after the flight.","stage":"close","choices":[{"id":"confirmed","exit":"appointment_set","label":"✅ Confirmed"},{"id":"change","next":"book_time_pref","label":"Change time"}],"coachTip":"Short close. Confirm the deliverable."},{"id":"close_confirm","speak":"Perfect. I've got you down for {{appointmentDay}} {{appointmentWindow}}. You'll get a confirmation text, then the storm damage report after the flight.","stage":"close","choices":[{"id":"confirmed","exit":"appointment_set","label":"✅ Confirmed"},{"id":"change","next":"book_time_pref","label":"Change time"}],"coachTip":"Short close. Confirm the deliverable."},{"id":"dnc_remove","speak":"Understood. I'll mark you as do-not-contact.","stage":"close","choices":[{"id":"dnc_done","exit":"dnc","label":"✓ Marked DNC"}],"coachTip":"No rebuttal after remove-me language. Mark DNC and end the call."},{"id":"obj_who_is_this","speak":"{{repName}} with {{companyName}}. We're calling because your home showed in the {{stormDate}} hail path, and we're offering a no-cost storm damage report with aerial roof photos for your records.","stage":"hook","choices":[{"id":"ok","next":"storm_remembered_offer","label":"✓ Continue"},{"id":"have_report","next":"already_has_report","label":"Already got one"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Short ID. Then route back to the report pitch.","objection":"Who is this?","speakLong":"No payment, no signature, nobody walks the roof. The report is dated aerial photos from after the storm so you have documentation if anything shows up later."},{"id":"obj_where_info","speak":"Public storm data and county property records. Storm data shows the hail path; property records show which homes sit inside it. That's why this address came up for the no-cost storm damage report with aerial roof photos — nothing private and nothing bought.","stage":"hook","choices":[{"id":"ok","next":"storm_remembered_offer","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Short and direct. Pivot back to the report.","objection":"Where did you get my info?","speakLong":"Your home showed inside the hail path from the {{stormDate}} storm, so we're reaching out while report flights are already being routed in {{city}}."},{"id":"obj_not_interested","speak":"Got it, {{firstName}} — I won't keep pushing. The reason I'd still flag it is simple: the no-cost storm damage report gives you dated aerial roof photos from after the {{stormDate}} hailstorm, so if a leak or ceiling stain shows up later you're not starting from zero. I can add you to this week's report route with no payment, no signature, and nobody walking the roof — or I can mark it no.","stage":"hook","choices":[{"id":"add_me","next":"report_schedule_pitch","label":"✓ Add me to the route"},{"id":"maybe_context","next":"storm_remembered_offer","label":"What exactly is the report?"},{"id":"final_no","exit":"not_interested","label":"Final no"},{"id":"remove_me","next":"dnc_remove","label":"Remove me"}],"coachTip":"Use after the report has already been introduced. For early no's, route to obj_not_interested_early so the homeowner gets context first.","objection":"Not interested","speakLong":"This is not asking you to file a claim or hire anyone. It's just aerial photos and roof-condition documentation you keep for your own records."},{"id":"obj_storm_not_bad","speak":"That may be true from the ground. Hail damage often hides on the roof surface — granule loss, lifted edges, vents, flashing. The report is just aerial photos so you can see what the driveway can't.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"what_damage","next":"obj_what_damage","label":"What damage would show?"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Short. Then route back to scheduling.","objection":"Storm wasn't that bad","speakLong":"If the photos show nothing, great — you still have dated proof of condition after the storm."},{"id":"obj_no_leaks","speak":"That's good. The report is for catching roof issues before they become leaks — if the photos show nothing, you just have dated proof that the roof looked okay after the storm.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Validate. Then route back.","objection":"No leaks though","speakLong":"No leaks is good. But hail damage usually starts on the roof before it shows inside. The report gives you aerial photos now, before you're dealing with ceiling stains or interior damage."},{"id":"obj_cost","speak":"The storm damage report costs you nothing. No payment, no signature, nobody walks the roof — it's just aerial roof photos for your records.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"One clear answer, then return to scheduling.","objection":"How much?","speakLong":"The report costs you nothing. It includes aerial photos and roof condition documentation. If tarping is ever needed later, that gets explained and authorized before anything moves forward."},{"id":"obj_scam","speak":"You should be careful — storms bring out bad actors. Here's the difference: no payment, no signature, nobody walks your roof, and the deliverable is just a storm damage report with aerial photos you keep. Look us up while I'm on the phone.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"looking_up","next":"hook_reassure","label":"Looking us up"},{"id":"not_interested","next":"obj_not_interested","label":"Still not interested"}],"coachTip":"Validate caution, define the deliverable, remove payment/signature pressure, and give them control.","objection":"Sounds like a scam","speakLong":"If it checks out, we can put you on this week's report route. If not, I'll mark it no and end the call."},{"id":"obj_bad_time","speak":"Got it, {{firstName}}. Since the no-cost storm damage report flight is exterior-only aerial photos, you don't have to be home. I can hold a morning or afternoon window this week — or set a callback if you'd rather talk later.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"callback","exit":"callback","label":"Call back later"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Don't apologize. Pivot to a time.","objection":"Bad time"},{"id":"obj_already_checked","speak":"Good — was it an aerial photo report, or did someone just look from the ground?","stage":"hook","choices":[{"id":"aerial","exit":"already_has_report","label":"Aerial report"},{"id":"ground","next":"ground_look_reframe","label":"Ground look only"},{"id":"not_sure","next":"not_sure_if_report","label":"Not sure"},{"id":"contractor","next":"obj_have_contractor","label":"Contractor checked"}],"coachTip":"Don't attack. Create the distinction: aerial vs ground.","objection":"Already had it checked","speakLong":"Good that someone looked. The key is whether you got aerial photos and a storm report, or just a ground-level check. Hail damage usually shows on the roof surface, not from the driveway."},{"id":"obj_checked_recently","speak":"Was it an aerial photo report, or a ground-level look? If nobody handed you roof photos, this still fills the gap.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"ground","next":"ground_look_reframe","label":"Ground only"}],"coachTip":"Same distinction."},{"id":"obj_have_contractor","speak":"Good — keep your contractor. The report gives them aerial roof photos to work from too, so it's additive, not replacing them. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"no_thanks","next":"obj_not_interested","label":"No thanks"}],"coachTip":"Don't threaten the relationship. Report = better info for everyone.","objection":"I have a contractor","speakLong":"Having someone you trust is good. This report does not replace them. It gives you aerial roof photos from after the storm, and you can share it with whoever you already trust."},{"id":"obj_checked_contractor_reframe","speak":"Good — keep your contractor. The report gives them aerial roof photos to work from too, so it's additive, not replacing them. Morning or afternoon better?","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"no_thanks","next":"obj_not_interested","label":"No thanks"}],"coachTip":"Same as obj_have_contractor."},{"id":"obj_already_filed_claim","speak":"Then the report helps your file. Independent aerial photos, dated.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"Independent documentation strengthens the file.","objection":"Already filed a claim","speakLong":"If insurance is already involved, documentation matters even more. The report gives you aerial photos to compare against anything the carrier or adjuster already has."},{"id":"obj_checked_insurance_reframe","speak":"Then the report helps your file. Independent aerial photos, dated.","stage":"hook","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"}],"coachTip":"Same."},{"id":"obj_spouse","speak":"Makes sense. The report gives both of you photos to look at. I'll hold {{appointmentDay}} — confirm with them tonight and text yes or no.","stage":"qualify","choices":[{"id":"hold_slot","next":"schedule_confirm_report","label":"✓ Hold the slot"},{"id":"release","exit":"spouse_pending","label":"Release it"}],"coachTip":"Soft hold. Spouse review of photos > over-the-phone decision.","objection":"Need to ask spouse","speakLong":"That's exactly why the report helps. You're not deciding off a phone call. You both get the aerial photos, then decide if anything needs attention."},{"id":"qualify_spouse","speak":"Makes sense. The report gives both of you photos to look at. I'll hold a slot — confirm with them tonight.","stage":"qualify","choices":[{"id":"hold_slot","next":"book_capture_address","label":"✓ Hold a slot"},{"id":"callback","next":"obj_think","label":"Call back tomorrow"}],"coachTip":"Soft hold."},{"id":"obj_spouse_reintro","speak":"Makes sense. The report gives both of you photos to look at. I'll hold {{appointmentDay}} — confirm with them tonight and text yes or no.","stage":"qualify","choices":[{"id":"hold_slot","next":"schedule_confirm_report","label":"✓ Hold the slot"},{"id":"release","exit":"spouse_pending","label":"Release it"}],"coachTip":"Same as obj_spouse."},{"id":"obj_think","speak":"Fair. The report is the no-decision step — aerial photos first, then you decide if anything matters. I can hold a report slot this week so it's there if you want it, or mark it no.","stage":"hook","choices":[{"id":"hold_slot","next":"book_capture_address","label":"✓ Hold a slot"},{"id":"need_context","next":"storm_remembered_offer","label":"Explain the report again"},{"id":"final_no","exit":"not_interested","label":"Final no"}],"coachTip":"They're deciding whether to accept proof, not whether to do work.","objection":"Let me think about it","speakLong":"You're not deciding on work. You're deciding whether to get proof. The report gives you aerial photos first, then you decide if anything needs attention."},{"id":"obj_think_about_it","speak":"Fair. The report is the no-decision step — aerial photos first, then you decide if anything matters. I can hold a report slot this week so it's there if you want it, or mark it no.","stage":"hook","choices":[{"id":"hold_slot","next":"book_capture_address","label":"✓ Hold a slot"},{"id":"need_context","next":"storm_remembered_offer","label":"Explain the report again"},{"id":"final_no","exit":"not_interested","label":"Final no"}],"coachTip":"Same as obj_think.","objection":"Let me think about it"},{"id":"obj_think_reframe","speak":"Fair. The report is the no-decision step — photos first. I'll hold {{appointmentDay}} {{appointmentWindow}} — confirm by text tonight.","stage":"hook","choices":[{"id":"lock","next":"schedule_confirm_report","label":"Lock it in"},{"id":"release","exit":"not_interested","label":"Release it"}],"coachTip":"Soft hold close."},{"id":"obj_not_home","speak":"No problem. You don't have to be home — the no-cost storm damage report is exterior-only aerial photos from the driveway.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"think","next":"obj_think","label":"Think about it"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Remove the friction. Then route back.","objection":"I'm not home","speakLong":"You don't need to be home for the report. If exterior access is clear, we can complete the aerial photos and send the report after."},{"id":"obj_no_roof","speak":"Nobody walks the roof. The no-cost storm damage report is drone-only aerial photos — no ladders, no foot traffic.","stage":"hook","choices":[{"id":"ok","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Direct. Route back.","objection":"Don't walk on my roof","speakLong":"The drone flies from the driveway or exterior, captures the roof photos, and lands. No ladder against the gutter. No one walking across shingles."},{"id":"obj_what_damage","speak":"Hail damage usually isn't obvious from the driveway. The aerial photos look for bruising, granule loss, lifted edges, vents, and flashing — the roof-surface issues that can turn into leaks later.","stage":"hook","choices":[{"id":"continue","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"no_leaks","next":"obj_no_leaks","label":"No leaks right now"},{"id":"think","next":"obj_think","label":"Think about it"}],"coachTip":"One-line education. Then route back.","speakLong":"The report doesn't claim there's damage before we see it. It gives you dated photos so you know what is actually there."},{"id":"obj_renter","speak":"The owner is who needs the no-cost storm damage report with aerial roof photos. What's the best number for them?","stage":"qualify","choices":[{"id":"share_contact","exit":"renter_owner_referred","label":"✓ Got owner contact"},{"id":"leave_number","exit":"renter_pass_along","label":"Leave our number"},{"id":"no","exit":"not_qualified","label":"No"}],"coachTip":"Renter is not the decision maker. Get owner contact.","objection":"I'm renting","speakLong":"Anything roof-related has to go through the owner. The report documents the roof after the hailstorm, so it's useful for whoever owns the property."},{"id":"disqualify_renter","speak":"The owner is who needs the no-cost storm damage report with aerial roof photos. What's the best number for them?","stage":"qualify","choices":[{"id":"share_contact","exit":"renter_owner_referred","label":"✓ Got owner contact"},{"id":"leave_number","exit":"renter_pass_along","label":"Leave our number"},{"id":"no","exit":"not_qualified","label":"No"}],"coachTip":"Same as obj_renter."},{"id":"obj_new_roof","speak":"New roofs still take hail hits. The no-cost storm damage report gives you dated aerial photos and a clean baseline after the storm.","stage":"qualify","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"no_thanks","next":"obj_not_interested","label":"No thanks"}],"coachTip":"Hail doesn't care about roof age.","objection":"My roof is only a few years old","speakLong":"Newer roofs usually hold up better, but hail still leaves marks. The report gives you a clean baseline after the storm so you're not guessing later."},{"id":"obj_insurance_skeptic","speak":"That's exactly why documentation matters. Dated photos before the next storm muddies the picture.","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Flip the skepticism into a reason to accept the report."},{"id":"obj_call_later","speak":"I can do that. I'll hold a report slot too while crews are routing {{city}}.","stage":"hook","choices":[{"id":"hold_slot","next":"schedule_confirm_report","label":"✓ Hold a slot"},{"id":"callback_only","exit":"callback","label":"Callback only"}],"coachTip":"Soft hold while honoring the callback.","objection":"Call me later","speakLong":"Holding a slot doesn't commit you to work. It just keeps the route open if you decide you want the aerial photos."},{"id":"transition_pa_value","speak":"The report itself costs you nothing. If anything later needs tarping, billing is handled through the insurance claim documentation and explained before anything moves forward.","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"cost_q","next":"faq_cost_answer","label":"More on cost"}],"coachTip":"Approved billing language only. Do not make deductible promises or imply direct-billing/coverage. Stay focused on the report, photos, and emergency tarping need."},{"id":"value_bridge","speak":"The report is the value: aerial photos, dated documentation, no payment, no signature, nobody walks the roof. Morning or afternoon better?","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"}],"coachTip":"Value bridge = report + proof. No PA. No insurance-first."},{"id":"book_assumptive","speak":"Perfect. We've got report flights in {{city}} this week. Morning or afternoon better?","stage":"book","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"}],"coachTip":"Assumptive close to a time window."},{"id":"book_time_pref","speak":"We've got report flights in {{city}} this week. Morning or afternoon better?","stage":"book","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"spouse","next":"obj_spouse_reintro","label":"Need spouse"}],"coachTip":"Two-option close. The deliverable is the report."},{"id":"faq_cost_answer","speak":"The report costs you nothing. If anything later needs tarping, billing is handled through the insurance claim documentation and explained before anything moves forward.","stage":"faq","choices":[{"id":"back","next":"report_schedule_pitch","label":"Back to script"},{"id":"book","next":"book_time_pref","label":"Book a flight"}],"coachTip":"Approved billing language only."},{"id":"faq_insurance_answer","speak":"The report is yours to keep regardless. If tarping is ever needed, billing for that step is handled through the insurance claim documentation and explained before anything moves forward.","stage":"faq","choices":[{"id":"back","next":"report_schedule_pitch","label":"Back to script"},{"id":"book","next":"book_time_pref","label":"Book a flight"}],"coachTip":"Insurance is downstream. Report comes first."},{"id":"faq_duration_answer","speak":"The flight takes a few minutes. The report with aerial photos comes after.","stage":"faq","choices":[{"id":"back","next":"report_schedule_pitch","label":"Back to script"},{"id":"book","next":"book_time_pref","label":"Book a flight"}],"coachTip":"Short."},{"id":"obj_storm_not_remembered","speak":"No problem. Your area still showed in the hail path, which is why we're offering the no-cost storm damage report with aerial roof photos.","stage":"hook","choices":[{"id":"ok","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Don't argue. Calm pivot — the report is what matters, not their memory.","objection":"I don't remember any storm","speakLong":"No problem. These storms move fast. Even if you don't remember the hail, your area still showed in the storm path. The report gives you aerial photos so you're not relying on memory or guessing from the ground."},{"id":"obj_not_signing","speak":"Nothing to sign for the no-cost storm damage report — it's just aerial photos for your records.","stage":"hook","choices":[{"id":"ok","next":"report_schedule_pitch","label":"✓ Continue"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Validate the rule. Then route back — report is sign-free.","objection":"I don't sign anything on the phone","speakLong":"Good rule — nothing gets signed for the storm damage report. No contract, no payment, no authorization on this call. If anything needs work later, that's explained separately before anything moves forward."},{"id":"obj_insurance_wont_help","speak":"That's exactly why documentation matters.","stage":"transition","choices":[{"id":"morning","next":"book_capture_address","label":"🌅 Morning"},{"id":"afternoon","next":"book_capture_address","label":"☀️ Afternoon"},{"id":"not_interested","next":"obj_not_interested","label":"Not interested"}],"coachTip":"Flip the skepticism. Dated photos help even if they never file a claim.","objection":"Insurance never pays for this stuff","speakLong":"Even if you never file anything, dated photos help. The report gives you roof documentation after this storm, before another storm makes everything harder to prove. You keep it either way."},{"id":"obj_not_interested_early","speak":"Got it, {{firstName}}. Before I mark it no, quick context: we're reaching out because your home showed in the {{stormDate}} hail path. The offer is just a no-cost storm damage report with aerial roof photos — no payment, no signature, nobody walks the roof. If you still want no contact, I'll mark it no.","stage":"hook","choices":[{"id":"early_context_ok","next":"storm_remembered_offer","label":"✓ Okay, what is it?"},{"id":"early_route","next":"report_schedule_pitch","label":"Add me to the route"},{"id":"early_final_no","exit":"not_interested","label":"Still no"},{"id":"early_remove","next":"dnc_remove","label":"Remove me"}],"coachTip":"Use this only when they say no before the report has been explained. Define the offer first; do not reference 'the report' as if they already know what it is.","objection":"Not interested before offer context","speakLong":"The report gives you dated aerial photos from after the hailstorm so you're not guessing later if a leak or ceiling stain shows up. It is not a roofing contract and it does not require you to file anything."}],"notes":"Phase 3B: clean published candidate. Sanitized internal coach tips only; lint blocking=0.","status":"published","metadata":{"notes":"Phase 3B: v2 only sanitizes 2 internal coach tips for lint compliance. No customer-facing script changes. Card/choice/exit IDs preserved byte-for-byte.","counts":{"cards":57,"rebuttals":21},"hashes":{"cards":"9fad5860ba41f5d4c9906349f3e88082eb7d9cd074d45f5c43b17a05774abf39","combined":"0609dc37afd73b060a3a773eed3dae3afdaccf0e71a97889ed0d690a731fb8da","rebuttals":"ce9a0af03a7fa8cb546fbc8c547bc1583f6eb31f6385cc3c5faa36e1ed3d305d"},"source":{"cards":{"file":"src/data/workflows/tenant-overrides/space-coast-emergency-tarping.json","note":"Today the runtime falls back to this JSON when no admin DB site_config row exists. AdventureWorkflow/MobileWorkflowV3 use baseCards.ts + MITIGATION_OVERRIDES separately; this snapshot captures the JSON-resolved variant per Phase 0 audit.","origin":"code-default-tenant-override","resolverPath":"CODE_TENANT_OVERRIDES[a2929648-19db-46c8-9e93-07378ed1aa5f]","resolverModule":"src/lib/workflows/workflowManager.ts"},"rebuttals":{"filter":{"is_active":true,"tenancy_type":"mitigation","tenant_org_id":"a2929648-19db-46c8-9e93-07378ed1aa5f"},"origin":"tenant_rebuttals (DB)"}},"created_at":"2026-05-11T17:32:56.039Z","captured_at":"2026-05-11T17:24:38.393Z","snapshot_id":"sce-storm-recall-v9-2026-05-11T17:24:38.393Z","migration_phase":"phase-3b","original_json_path":"src/data/workflows/tenant-overrides/space-coast-emergency-tarping.json","coachtip_sanitization":[{"after":"Let it ring 5–6 times. Storm-recall opener only — avoid weak/apologetic openers. Lead with the no-cost storm damage report and the specific hailstorm hook.","before":"Let it ring 5–6 times. Storm-recall opener — never say \"quick reason for the call.\"","cardId":"gate"},{"after":"Approved billing language only. Do not make deductible promises or imply direct-billing/coverage. Stay focused on the report, photos, and emergency tarping need.","before":"Approved billing language only. No \"we bill directly,\" no \"no deductible,\" no \"covered.\"","cardId":"transition_pa_value"}],"derived_from_version_id":"000f81d4-8da7-4e63-91fb-ad59469af842"},"created_at":"2026-05-11T17:32:56.213878+00:00","created_by":null,"archived_at":null,"lint_report":{"hits":[{"cardId":"obj_not_signing","ruleId":"sce.forbidden.free-generic","message":"Avoid \"free\" — SCE preference is \"no cost\", \"zero cost to you\", or \"costs you nothing\".","blocking":false,"severity":"warn","fieldPath":"cards[obj_not_signing].coachTip","matchedText":"free","replacementHint":"Replace \"free\" with \"no cost\"."},{"cardId":"storm_remembered_offer","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[storm_remembered_offer].speak","matchedText":"hail"},{"cardId":"storm_not_remembered_context","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[storm_not_remembered_context].speak","matchedText":"hail"},{"cardId":"hook_storm_context","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[hook_storm_context].speak","matchedText":"hail"},{"cardId":"hook_offer","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[hook_offer].speak","matchedText":"hail"},{"cardId":"ground_look_reframe","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[ground_look_reframe].speak","matchedText":"hail"},{"cardId":"obj_checked_ground_pivot","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_checked_ground_pivot].speak","matchedText":"hail"},{"cardId":"obj_who_is_this","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_who_is_this].speak","matchedText":"hail"},{"cardId":"obj_where_info","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_where_info].speak","matchedText":"hail"},{"cardId":"obj_where_info","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_where_info].speakLong","matchedText":"hail"},{"cardId":"obj_storm_not_bad","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_storm_not_bad].speak","matchedText":"Hail"},{"cardId":"obj_no_leaks","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_no_leaks].speakLong","matchedText":"hail"},{"cardId":"obj_already_checked","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_already_checked].speakLong","matchedText":"Hail"},{"cardId":"obj_what_damage","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_what_damage].speak","matchedText":"Hail"},{"cardId":"obj_new_roof","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_new_roof].speak","matchedText":"hail"},{"cardId":"obj_new_roof","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_new_roof].speakLong","matchedText":"hail"},{"cardId":"obj_new_roof","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_new_roof].coachTip","matchedText":"Hail"},{"cardId":"obj_storm_not_remembered","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_storm_not_remembered].speak","matchedText":"hail"},{"cardId":"obj_storm_not_remembered","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_storm_not_remembered].speakLong","matchedText":"hail"},{"cardId":"obj_not_interested_early","ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"cards[obj_not_interested_early].speak","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[239dc20a-f816-4a96-a327-817fae858686].short_text","rebuttalId":"239dc20a-f816-4a96-a327-817fae858686","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[239dc20a-f816-4a96-a327-817fae858686].normal_text","rebuttalId":"239dc20a-f816-4a96-a327-817fae858686","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[239dc20a-f816-4a96-a327-817fae858686].long_text","rebuttalId":"239dc20a-f816-4a96-a327-817fae858686","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[980e9ee6-9096-4c0b-a86c-968c179bfc04].short_text","rebuttalId":"980e9ee6-9096-4c0b-a86c-968c179bfc04","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[980e9ee6-9096-4c0b-a86c-968c179bfc04].normal_text","rebuttalId":"980e9ee6-9096-4c0b-a86c-968c179bfc04","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[980e9ee6-9096-4c0b-a86c-968c179bfc04].long_text","rebuttalId":"980e9ee6-9096-4c0b-a86c-968c179bfc04","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[f34550e1-afff-4afa-8238-f4daf0d669a2].normal_text","rebuttalId":"f34550e1-afff-4afa-8238-f4daf0d669a2","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[f34550e1-afff-4afa-8238-f4daf0d669a2].long_text","rebuttalId":"f34550e1-afff-4afa-8238-f4daf0d669a2","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].short_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].normal_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].long_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[be5aa765-1890-4b44-a772-567bf4135189].long_text","rebuttalId":"be5aa765-1890-4b44-a772-567bf4135189","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[67a7fd18-eee9-4b32-9f92-25fb992cd793].normal_text","rebuttalId":"67a7fd18-eee9-4b32-9f92-25fb992cd793","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[67a7fd18-eee9-4b32-9f92-25fb992cd793].long_text","rebuttalId":"67a7fd18-eee9-4b32-9f92-25fb992cd793","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[9853839e-25b5-424c-944c-25ecb18039b1].short_text","rebuttalId":"9853839e-25b5-424c-944c-25ecb18039b1","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[9853839e-25b5-424c-944c-25ecb18039b1].normal_text","rebuttalId":"9853839e-25b5-424c-944c-25ecb18039b1","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[9853839e-25b5-424c-944c-25ecb18039b1].long_text","rebuttalId":"9853839e-25b5-424c-944c-25ecb18039b1","matchedText":"Hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[2aa88045-c71d-44a2-b135-9db874c16c12].short_text","rebuttalId":"2aa88045-c71d-44a2-b135-9db874c16c12","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[2aa88045-c71d-44a2-b135-9db874c16c12].normal_text","rebuttalId":"2aa88045-c71d-44a2-b135-9db874c16c12","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[2aa88045-c71d-44a2-b135-9db874c16c12].long_text","rebuttalId":"2aa88045-c71d-44a2-b135-9db874c16c12","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[acaac516-d070-4d01-8233-68815b7f1bb6].normal_text","rebuttalId":"acaac516-d070-4d01-8233-68815b7f1bb6","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[acaac516-d070-4d01-8233-68815b7f1bb6].long_text","rebuttalId":"acaac516-d070-4d01-8233-68815b7f1bb6","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].short_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].short_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].normal_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].normal_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].normal_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].long_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].long_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"},{"ruleId":"sce.info.hail-specificity","message":"Good — make sure the specific hailstorm is named (e.g. ping-pong-ball-sized or half-dollar-sized hail).","blocking":false,"severity":"info","fieldPath":"rebuttals[bb7d55e1-2eeb-4398-b846-938a668d8e4a].long_text","rebuttalId":"bb7d55e1-2eeb-4398-b846-938a668d8e4a","matchedText":"hail"}],"ranAt":"2026-05-11T17:32:56.039Z","infoCount":49,"warnCount":1,"publishable":true,"blockingCount":0},"template_id":"2fb5a0f6-cb93-40d7-b351-d7fb9bd9654e","published_at":"2026-05-11T17:32:56.213878+00:00","published_by":null,"version_number":2,"rollback_parent_version_id":"000f81d4-8da7-4e63-91fb-ad59469af842"}],"rows":2,"limit":200,"table":"workflow_template_versions","format":"knocklaunch-table-chunk-v1","offset":0,"schema":"public"}