[{"data":1,"prerenderedAt":236},["ShallowReactive",2],{"/en/workflows/branch-signal-sanity-kit":3},{"id":4,"slug":5,"locale":6,"translationGroupId":7,"localeSwitchApproved":8,"title":9,"description":10,"documentationMarkdown":11,"workflowJson":12,"category":216,"tags":217,"integrations":220,"difficulty":223,"author":224,"verified":34,"featured":34,"date":225,"modified":225,"icon":7,"imageSrc":7,"path":226,"alternates":227,"seo":228},"a18ae80c-0cf3-499b-ac52-a86c73ce27a6","branch-signal-sanity-kit","en",null,true,"Branch Signal Sanity Kit","A guided decision checkpoint that helps teams separate trustworthy branch signals from polished noise, spot dirty data before meetings, and know when to trust automation vs. human judgment.","## How it works\nThis workflow turns “messy signals” into decision-ready next steps—without pretending the data is cleaner than it is. It starts with a Knowledge Base-backed primer (so your definitions stay consistent), then offers a button menu of practical signal checks teams can use before they compare branches, present attribution, or automate decisions.\n\nOperators get a repeatable way to pressure-test numbers that look fine on slides, catch the early signs of dirty signal (the kind that makes a meeting confidently wrong), and route the conversation to a human analyst when the situation deserves judgment over automation.\n\n## Key features\n- Knowledge Base-first guidance to keep metric definitions and caveats consistent\n- Button-based menu for decision-shaped signal checks (trust, dirtiness, attribution, automation)\n- Built-in “talk to an analyst” handoff path for high-stakes or ambiguous cases\n- Practical checklists that surface what usually breaks first (sampling, incentives, missingness, timing)\n\n## Step-by-step\n1. **Trigger:** A user starts the workflow.\n2. **Knowledge Base policy:** The assistant answers with your approved framing for signal reliability and decision hygiene, using your Knowledge Base as the source of truth.\n3. **Decision menu (buttons):** The user chooses what they need help with (e.g., which branch numbers to trust, spotting dirty signal, attribution comparisons).\n4. **Routing by selection:** The workflow routes the user to the matching checklist based on the button they clicked.\n5. **Outcome message:** The user receives a concise, action-oriented set of checks and next steps.\n6. **Optional handoff:** If the user selects **Talk to an analyst**, the workflow hands off to the **Analytics** department with context.\n\n## Setup requirements\n- A Calypso messaging channel that supports interactive buttons (e.g., **WhatsApp**).\n- Optional but recommended: populate your **Calypso Knowledge Base** with your branch metric definitions, data caveats, and attribution rules.\n- If you want human escalation: an **Analytics** department configured for handoff in your routing settings.\n- No external credentials are required by this workflow.",{"id":13,"teamId":14,"name":9,"version":15,"workflowVersion":16,"nodes":17,"connections":178,"routingEnabled":8,"active":34},"wf_branch_signal_sanity_kit","calypso-public-library","1.0.0",1,[18,35,41,53,86,95,103,109,115,121,127,133,139,145,151,156,162,168],{"id":19,"name":20,"type":21,"typeVersion":16,"position":22,"parameters":25,"category":33,"deletable":34,"connectable":34},"node_flow_configs","Workflow settings","flow-configs",[23,24],120,60,{"name":9,"description":26,"tags":27,"triggerType":32},"Decision-focused signal checks for branch metrics: trust vs noise, dirty data detection, automation vs judgment, attribution comparisons, and signal culture.",[28,29,30,31],"signal-design","decision-systems","data-quality","branch-analytics","input","policy",false,{"id":36,"name":37,"type":32,"typeVersion":16,"position":38,"parameters":40,"category":32,"deletable":34,"connectable":8},"node_input","Start",[23,39],180,{},{"id":42,"name":43,"type":44,"typeVersion":16,"position":45,"parameters":47,"category":52,"deletable":8,"connectable":8},"node_kb_policy","Knowledge Base grounding","knowledge-base-policy",[46,39],360,{"enabled":8,"fallbackToRouting":8,"sticky":8,"stickyMode":48,"activationOpener":49,"personalization":51},"default",{"enabled":8,"instruction":50},"You help teams make reliable branch decisions from messy signals. Be practical, skeptical of polished numbers, and clear about what to verify before acting. Use the Knowledge Base for definitions (metrics, attribution rules, data caveats). Avoid academic jargon; prefer checklists, tests, and decision-focused next steps.",{"useContactName":8},"response",{"id":54,"name":55,"type":56,"typeVersion":16,"position":57,"parameters":59,"category":52,"deletable":8,"connectable":8},"node_menu","Choose a signal check","interactive-message",[58,39],620,{"messageType":60,"headerText":9,"bodyText":61,"footerText":62,"sectionTitle":63,"buttons":64,"ctaDisplayText":63,"ctaUrl":63},"button","Pick what you’re deciding. I’ll give you a fast checklist to separate trustworthy signal from polished noise (and a handoff if it’s high-stakes).","Tip: If incentives are messy, doubt the clean number.","",[65,68,71,74,77,80,83],{"id":66,"title":67},"trust_numbers","Trust which numbers",{"id":69,"title":70},"dirty_signal","Spot dirty signal",{"id":72,"title":73},"automation_vs_judgment","Auto vs judgment",{"id":75,"title":76},"messy_evidence","Messy \u001a insight",{"id":78,"title":79},"compare_branches","Compare branches",{"id":81,"title":82},"signal_culture","Signal culture",{"id":84,"title":85},"talk_to_analyst","Talk to an analyst",{"id":87,"name":88,"type":89,"typeVersion":16,"position":90,"parameters":92,"category":94,"deletable":8,"connectable":8},"node_if_trust","If: Which numbers to trust","if",[91,23],900,{"buttonId":66,"operator":93},"equals","routing",{"id":96,"name":97,"type":98,"typeVersion":16,"position":99,"parameters":101,"category":52,"deletable":8,"connectable":8},"node_msg_trust","Trust checklist","text-message",[100,23],1160,{"text":102},"Here’s what usually deserves trust (and what’s just wearing makeup):\n\n1) **Stable definition beats impressive magnitude.** If the metric’s definition changed this month, it’s not a trend—it's a rewrite.\n2) **Denominator discipline.** Ask “out of *what*?” Volume spikes with a shrinking base are classic polished noise.\n3) **Timing sanity.** If reporting lag differs by branch, you’re comparing clocks, not performance.\n4) **Incentive check.** If a metric affects bonuses, expect creative behavior. Look for sudden step-changes near targets.\n5) **Reconciliation test.** Can the headline number reconcile to at least one independent source (logs, cash, inventory, dispatch)?\n\nDecision rule: if you can’t explain *why it moved* in one sentence that mentions a real-world mechanism, don’t let it steer a big decision yet.",{"id":104,"name":105,"type":89,"typeVersion":16,"position":106,"parameters":108,"category":94,"deletable":8,"connectable":8},"node_if_dirty","If: Spot dirty signal fast",[91,107],220,{"buttonId":69,"operator":93},{"id":110,"name":111,"type":98,"typeVersion":16,"position":112,"parameters":113,"category":52,"deletable":8,"connectable":8},"node_msg_dirty","Dirty signal checks",[100,107],{"text":114},"Dirty data rarely announces itself. It shows up as *confidence with no friction*. Quick checks before the meeting goes off the rails:\n\n- **Missingness map:** Which branches stopped reporting (or started) recently? Quiet gaps create loud conclusions.\n- **Outlier shape:** A few extreme days driving the whole month = likely operational one-offs or logging glitches.\n- **Boundary tests:** Values just below caps/limits/approval thresholds often mean gaming or rounding.\n- **Duplicate/merge drift:** If branch IDs, store names, or customer IDs changed, comparisons will lie politely.\n- **Backfill behavior:** Did the metric improve because yesterday’s data finally arrived today?\n\nPractical move: show a tiny “data health strip” next to every chart (coverage %, lag, % corrected). If that feels annoying, good—it’s doing its job.",{"id":116,"name":117,"type":89,"typeVersion":16,"position":118,"parameters":120,"category":94,"deletable":8,"connectable":8},"node_if_auto","If: Automation vs judgment",[91,119],320,{"buttonId":72,"operator":93},{"id":122,"name":123,"type":98,"typeVersion":16,"position":124,"parameters":125,"category":52,"deletable":8,"connectable":8},"node_msg_auto","Automation vs judgment guidance",[100,119],{"text":126},"When to trust automation—and when to keep a human in the loop:\n\n**Let automation decide when:**\n- The decision is **reversible** (you can undo it cheaply).\n- The signal is **high-frequency and well-instrumented** (lots of repeats, same definition).\n- You’ve got **guardrails** (caps, anomaly stops, and clear fallbacks).\n\n**Require human judgment when:**\n- Stakes are high and the cost of being wrong is **asymmetric** (one bad call hurts more than ten good ones help).\n- The environment changed (new promo, staffing change, policy shift, system migration).\n- The metric is **proxy-heavy** (attribution, sentiment, “intent”) and easy to game.\n\nRule of thumb: automate the *routine*, not the *reputation*. If a decision would be defended in a board meeting, keep a human sign-off until the signal has earned trust over time.",{"id":128,"name":129,"type":89,"typeVersion":16,"position":130,"parameters":132,"category":94,"deletable":8,"connectable":8},"node_if_messy","If: Messy evidence → insight",[91,131],420,{"buttonId":75,"operator":93},{"id":134,"name":135,"type":98,"typeVersion":16,"position":136,"parameters":137,"category":52,"deletable":8,"connectable":8},"node_msg_messy","Messy evidence playbook",[100,131],{"text":138},"Turning messy evidence into usable insight (without cleaning away the truth):\n\n1) **Keep the mess—label it.** Don’t delete weirdness; tag it (promo week, outage, staffing gap).\n2) **Separate signal types:**\n   - *Behavioral* (what happened)\n   - *Operational* (what could have caused it)\n   - *Measurement* (how it was recorded)\n3) **Prefer ranges over points.** A narrow, wrong number beats a wide, honest range only in slide decks.\n4) **Use counterfactual humility.** If you can’t name a plausible alternative explanation, you’re not done.\n5) **Document “known lies.”** Every system has them (e.g., late postings, merged IDs). Write them down and reuse.\n\nDeliverable that works: a one-page decision note with **What we know / What we don’t / What would change our mind**.",{"id":140,"name":141,"type":89,"typeVersion":16,"position":142,"parameters":144,"category":94,"deletable":8,"connectable":8},"node_if_compare","If: Comparing branches & attribution",[91,143],520,{"buttonId":78,"operator":93},{"id":146,"name":147,"type":98,"typeVersion":16,"position":148,"parameters":149,"category":52,"deletable":8,"connectable":8},"node_msg_compare","Branch comparison traps",[100,143],{"text":150},"What teams repeatedly misread in branch comparisons and attribution:\n\n- **Different mixes ≠ different performance.** Product mix, customer mix, and staffing mix can fake “best branch” stories.\n- **Opportunity isn’t equal.** Compare rates with context (footfall, catchment, delivery radius), not raw totals.\n- **Attribution is not truth, it’s a rulebook.** If the rule changed, your ‘impact’ changed—even if reality didn’t.\n- **Selection effects:** The branches that adopt a change first are often already different.\n- **Small samples cosplay as certainty.** One great week can dominate a month in a low-volume branch.\n\nSafer comparison: pick 2–3 ‘like-for-like’ peers, use the same time windows and lags, and always ask: *what would we see if nothing changed?*",{"id":152,"name":153,"type":89,"typeVersion":16,"position":154,"parameters":155,"category":94,"deletable":8,"connectable":8},"node_if_culture","If: Build a signal culture",[91,58],{"buttonId":81,"operator":93},{"id":157,"name":158,"type":98,"typeVersion":16,"position":159,"parameters":160,"category":52,"deletable":8,"connectable":8},"node_msg_culture","Signal culture essentials",[100,58],{"text":161},"Signal culture that helps decisions happen (not just slides):\n\n- **One definition, one place.** If metric definitions live in people’s heads, you don’t have metrics—you have opinions.\n- **Always ship a ‘data health’ line.** Coverage, lag, corrections. Make it boring and mandatory.\n- **Reward flagging problems early.** The fastest way to get bad data is to punish the messenger.\n- **Decision notes over decks.** Write what you decided, why, and what you’ll watch next.\n- **Postmortems for metrics.** When a number misled you, treat it like an incident: cause, fix, prevention.\n\nWitty but true: the goal isn’t “perfect data.” It’s fewer confident wrong turns.",{"id":163,"name":164,"type":89,"typeVersion":16,"position":165,"parameters":167,"category":94,"deletable":8,"connectable":8},"node_if_handoff","If: Talk to an analyst",[91,166],720,{"buttonId":84,"operator":93},{"id":169,"name":170,"type":171,"typeVersion":16,"position":172,"parameters":173,"category":177,"deletable":8,"connectable":8},"node_fallback","Handoff to Analytics","fallback",[100,166],{"handoffMessage":174,"departmentId":175,"departmentName":176},"Got it—routing you to an analyst. Please share: (1) the decision you’re making, (2) the branch set/time window, and (3) the metric(s) you don’t trust yet.","dept_analytics","Analytics","terminal",[179,184,186,188,191,194,196,198,200,202,204,206,208,210,212,214],{"id":180,"source":36,"target":42,"sourceHandle":181,"targetHandle":182,"type":183},"conn_input_to_kb","out","in","smoothstep",{"id":185,"source":42,"target":54,"sourceHandle":181,"targetHandle":182,"type":183},"conn_kb_to_menu",{"id":187,"source":54,"target":87,"sourceHandle":181,"targetHandle":182,"type":183},"conn_menu_to_if_trust",{"id":189,"source":87,"target":96,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_trust_true_to_msg","true",{"id":192,"source":87,"target":104,"sourceHandle":193,"targetHandle":182,"type":183},"conn_if_trust_false_to_if_dirty","false",{"id":195,"source":104,"target":110,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_dirty_true_to_msg",{"id":197,"source":104,"target":116,"sourceHandle":193,"targetHandle":182,"type":183},"conn_if_dirty_false_to_if_auto",{"id":199,"source":116,"target":122,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_auto_true_to_msg",{"id":201,"source":116,"target":128,"sourceHandle":193,"targetHandle":182,"type":183},"conn_if_auto_false_to_if_messy",{"id":203,"source":128,"target":134,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_messy_true_to_msg",{"id":205,"source":128,"target":140,"sourceHandle":193,"targetHandle":182,"type":183},"conn_if_messy_false_to_if_compare",{"id":207,"source":140,"target":146,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_compare_true_to_msg",{"id":209,"source":140,"target":152,"sourceHandle":193,"targetHandle":182,"type":183},"conn_if_compare_false_to_if_culture",{"id":211,"source":152,"target":157,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_culture_true_to_msg",{"id":213,"source":152,"target":163,"sourceHandle":193,"targetHandle":182,"type":183},"conn_if_culture_false_to_if_handoff",{"id":215,"source":163,"target":169,"sourceHandle":190,"targetHandle":182,"type":183},"conn_if_handoff_true_to_fallback","automation",[28,29,30,31,218,219],"automation-judgment","attribution",[221,222],"WhatsApp","Calypso Knowledge Base","intermediate","Calypso","2026-04-28T11:03:08.349Z","/en/workflows/branch-signal-sanity-kit",{"en":226},{"title":9,"description":229,"ogDescription":230,"twitterDescription":231,"canonicalPath":226,"robots":232,"schemaType":233,"alternates":234},"Guide teams to trust the right branch numbers, catch dirty signal early, and know when to use automation vs human judgment.","A decision focused signal coach: spot polished noise, pressure test branch comparisons, and escalate to an analyst when judgment matters.","Turn messy branch signals into decision ready checks. Catch dirty data before meetings, and know when automation should (and shouldn’t) decide.","index,follow","HowTo",[235],{"hreflang":6,"href":226},1778614431263]