{
  "schemaVersion": 1,
  "protocolId": "duck-yeah-trial-assistance-v2.1",
  "status": "frozen_for_synthetic_mvp",
  "frozenAt": "2026-09-29T14:22:08.627789Z",
  "dataKind": "synthetic_business_scenario",
  "boundary": "Invented business assumptions and outcomes. No MotherDuck internal data, customer results, buying intent, or demonstrated treatment efficacy. Real company-enrichment fixtures and execution receipts are separate.",
  "hypothesis": "Task-specific trial help and an optional qualified Sales handoff increase SQA28 while preserving activation, contact tolerance, and Sales capacity.",
  "seeds": {
    "base": 20260929,
    "baseline": 2026092901,
    "assignment": 2026092902,
    "validation": 2026092999
  },
  "randomness": {
    "method": "sha256_labelled_uniform_v1",
    "input": "UTF-8 seed|namespace|recordId|field, with literal vertical bars and decimal seed",
    "uniform": "Interpret the first 13 lowercase hexadecimal SHA-256 characters as an unsigned integer; divide by 4503599627370496.",
    "recordIds": "Zero-padded account-000001 onward within each separately named baseline or scenario namespace",
    "rule": "Generate every declared case once; retain all outputs. Never change seeds, parameters, labels, or sample after inspecting outcomes. A generator repair creates a recorded revision and retains the original failure."
  },
  "baseline": {
    "id": "synthetic-history-v2.0",
    "dataKind": "synthetic_historical_baseline",
    "seed": 2026092901,
    "startAt": "2026-01-01T00:00:00Z",
    "enrollmentWeeks": 12,
    "eligibleAccounts": 6000,
    "accountsPerWeek": 500,
    "completeFollowupDays": 28,
    "rates": {
      "sqa28": 0.1,
      "activation7": 0.25,
      "optout28": 0.01,
      "sharing7": 0.12
    },
    "salesMinutesPerAccount": 0.6,
    "analysisOrder": [
      "identity_and_maturity",
      "weekly_eligible_volume",
      "account_funnel",
      "source_and_task_segments",
      "time_to_value",
      "cost_and_sales_capacity",
      "candidate_priority_and_sample_feasibility"
    ],
    "priorityBoundary": "Analyze this separately versioned history before presenting the candidate play. Descriptive segment gaps are hypotheses, not causal effects or proof this is MotherDuck's best priority.",
    "feasibility": {
      "weeksFor8000AtBaseline": 16,
      "accountsIn42DaysAtBaseline": 3000,
      "fullScenarioVolumeIsHypothetical": true,
      "message": "At the modeled historical volume of 500 eligible accounts per week, 8,000 accounts would take 16 weeks. The six-week cap supplies only 3,000. Full-size cases assume a hypothetical 1,333.33 accounts per week and do not support a feasible launch recommendation at this baseline volume."
    }
  },
  "population": {
    "unit": "canonical_company_account",
    "target": "First-time SaaS-company trials with 1-200 employees, declared DuckDB use, and a declared need to share recurring analysis",
    "preAssignmentExclusions": [
      "existing_customer",
      "open_opportunity",
      "internal_or_test_account",
      "duplicate_canonical_account",
      "missing_required_contact_permission",
      "target_not_met"
    ],
    "identity": "Resolve company and workspace links before enrollment. Keep first eligible signup; order ties by canonical account ID. Existing assigned companies inherit assignment without a new observation. Unresolved cross-arm company collisions invalidate the analysis until repaired; never drop an arm selectively.",
    "denominator": "All randomized eligible canonical accounts, including unopened contacts and nonadherence"
  },
  "assignment": {
    "algorithm": "sha256_shuffled_blocks_v1",
    "seed": 2026092902,
    "blockSize": 10,
    "controlPerCompleteBlock": 5,
    "treatmentPerCompleteBlock": 5,
    "blockIndex": "Zero-based floor(enrollment_index / 10)",
    "shuffle": "For each block, sort tokens C0,C1,C2,C3,C4,T0,T1,T2,T3,T4 by SHA-256 of UTF-8 assignment_seed|scenario_id|block_index|token, ascending full hex; tie-break token ascending. Assign ordered arrivals to that token order.",
    "partialBlock": "Keep all enrolled accounts and actual arm sizes. Never discard the partial block to force equality.",
    "diagnostic": "Replay every assignment; require exact match and five of each arm in every completed block. Global arm difference must be at most five for a partial block. A generic binomial SRM p-value is not the correct null diagnostic for this blocked design."
  },
  "intervention": {
    "decisionDays": [
      1,
      3
    ],
    "maxProactiveContactsPerAccount": 2,
    "control": "General getting-started help plus an optional help/contact route on days 1 and 3",
    "treatment": "At the same two opportunities, select import, sharing, or team-evaluation help using evidence available at that moment. Offer Sales only with explicit team-evaluation evidence and an opted-in next step. Unknown intent receives general help.",
    "suppression": "Suppress every later contact after opt-out; an in-product and email duplicate counts as two contacts, not one opportunity.",
    "jev": "Classify timestamped task evidence with source IDs, rubric version, and unknown state. No access to outcome tables, future evidence, treatment success labels, or scenario parameters.",
    "estimand": "Intention-to-treat effect of the complete assistance policy. Does not isolate copy, Jev, a channel, or any individual contact.",
    "capacity": "Model separate arm capacity; do not let treatment workload displace control access. Real shared-queue interference would require redesign or an explicit changed estimand."
  },
  "windows": {
    "trialStartAt": "2026-05-01T00:00:00Z",
    "maxEnrollmentDays": 42,
    "targetTotalAccounts": 8000,
    "targetPerArm": 4000,
    "stopEnrollment": "First of 8000 assigned accounts or trialStartAt plus 42 days; no outcome-driven extension",
    "outcomeWindow": "Elapsed UTC time since assignment; event time must be at least assignment time and strictly before assignment plus the stated number of days",
    "finalAnalysisAt": "Last enrolled assignment time plus 28 days",
    "immature": "Pending, never a zero",
    "missing": "A zero requires completed ascertainment and confirmed absence. Missing review or telemetry stays missing and blocks a definitive decision."
  },
  "metrics": {
    "sqa28": {
      "role": "primary",
      "days": 28,
      "definition": "Documented company fit AND validated team use case AND agreed next step within the window, using the same rubric and ascertainment in both arms; blinded to assignment where feasible. A booking, route, enrichment, or click alone is insufficient.",
      "controlPlanningRate": 0.1,
      "alternativePlanningRate": 0.13,
      "observedPracticalThreshold": 0.015
    },
    "activation7": {
      "role": "noninferiority_guardrail",
      "days": 7,
      "definition": "Successful query against the account's own imported dataset followed by a successful query on a separate UTC date within the seven-day window",
      "controlPlanningRate": 0.25,
      "margin": -0.03
    },
    "optout28": {
      "role": "noninferiority_guardrail",
      "days": 28,
      "definition": "Any contact opt-out within 28 days, counted once per randomized account",
      "controlPlanningRate": 0.01,
      "margin": 0.01
    },
    "sharing7": {
      "role": "descriptive_secondary",
      "days": 7,
      "definition": "At least one successful query by a linked colleague within seven days; not a success gate"
    },
    "salesMinutesPerAssignedAccount": {
      "role": "operating_cap",
      "definition": "Sum of all account-linked Sales effort in each arm divided by all assigned accounts in that arm",
      "maximumTreatmentMinusControl": 0.5
    }
  },
  "analysis": {
    "difference": "treatment_minus_control",
    "rateUnits": "proportions; multiply differences by 100 only for percentage-point display",
    "interval": {
      "method": "newcombe",
      "level": 0.95,
      "z": 1.959963984540054,
      "continuityCorrection": false,
      "construction": "Wilson score intervals per arm, then Newcombe independent difference interval; no library default"
    },
    "finalPrimaryRule": "sqa28.ci.lower > 0 AND sqa28.delta >= 0.015",
    "guardrailBounds": "Use lower/upper endpoints of the 95% interval as one-sided 97.5% bounds",
    "marginalPlanningPower": 0.8,
    "planning": {
      "method": "normal_approximation_only",
      "primaryAlphaTwoSided": 0.05,
      "guardrailAlphaOneSided": 0.025,
      "primaryNPerArm": 1774,
      "activationNPerArm": 3271,
      "optoutNPerArm": 1555,
      "chosenNPerArm": 4000,
      "mde": 0.03,
      "verifiedJointPower": false
    },
    "validation": {
      "seed": 2026092999,
      "replicatesPerCondition": 100000,
      "nPerArm": 4000,
      "simulationRng": "NumPy PCG64 with seed 2026092999, pinned package version; independent streams by declared condition/model order. Aggregate multinomial draws with exactly equivalent endpoint probabilities are allowed. This validation stream never generates case records.",
      "conditions": [
        {
          "id": "planning_alternative_with_unchanged_guardrails",
          "controlRates": {
            "sqa28": 0.1,
            "activation7": 0.25,
            "optout28": 0.01
          },
          "treatmentRates": {
            "sqa28": 0.13,
            "activation7": 0.25,
            "optout28": 0.01
          }
        },
        {
          "id": "primary_null",
          "controlRates": {
            "sqa28": 0.1,
            "activation7": 0.25,
            "optout28": 0.01
          },
          "treatmentRates": {
            "sqa28": 0.1,
            "activation7": 0.25,
            "optout28": 0.01
          }
        },
        {
          "id": "activation_at_margin",
          "controlRates": {
            "sqa28": 0.1,
            "activation7": 0.25,
            "optout28": 0.01
          },
          "treatmentRates": {
            "sqa28": 0.13,
            "activation7": 0.22,
            "optout28": 0.01
          }
        },
        {
          "id": "optout_at_margin",
          "controlRates": {
            "sqa28": 0.1,
            "activation7": 0.25,
            "optout28": 0.01
          },
          "treatmentRates": {
            "sqa28": 0.13,
            "activation7": 0.25,
            "optout28": 0.02
          }
        }
      ],
      "dependenceModels": [
        "independent_endpoints",
        "shared_binary_propensity_as_specified"
      ],
      "operatingAssumption": "Mature complete outcomes, exact allocation and Sales cap passing; these assumptions scope statistical joint power only",
      "acceptance": {
        "planningJointAdvanceWilson95LowerAtLeast": 0.8,
        "primaryNullJointAdvanceWilson95UpperAtMost": 0.035,
        "boundaryGuardrailPassWilson95UpperAtMost": 0.04,
        "eachMetricCoverageWilson95LowerAtLeast": 0.94,
        "integrityFixtures": "Missing required outcome => invalid; immature => pending; under-enrollment without stop reason => inconclusive_insufficient_enrollment; no integrity fixture may advance",
        "failure": "Stop before case generation if any criterion fails in either dependence model. Retain validation and failure receipts. Any repair requires an explicit new protocol revision, with original seeds/results retained; never repair after viewing case outcomes."
      },
      "report": "Evaluate the actual complete interval/decision rule, gate pass rates, joint advance rate, interval coverage, Wilson Monte Carlo intervals and Monte Carlo standard errors. Test missingness separately as an integrity state. Report these simulation checks as checks at declared conditions, not universal guarantees."
    },
    "interim": "No interim efficacy testing or outcome-driven sample change; operational incident monitoring cannot establish a win",
    "segments": "Acquisition source and baseline task need are descriptive; no subgroup can replace the registered primary population",
    "causalLimit": "Modeled differences test decision behavior under assumed effects. They do not estimate a real product effect or prove real-world classification quality."
  },
  "decision": {
    "precedence": [
      "invalid",
      "pending",
      "stop",
      "inconclusive_insufficient_enrollment",
      "advance",
      "inconclusive"
    ],
    "invalid": "Any unresolved hard integrity failure or missing outcome/review/cost field needed by a gate",
    "pending": "Any account has not reached its full required observation window",
    "stop": "activation7.ci.upper < -0.03 OR optout28.ci.lower > 0.01 OR salesMinutesPerAssignedAccount.delta > 0.5 OR sqa28.ci.upper < 0.015; retain all applicable reason codes",
    "inconclusive_insufficient_enrollment": "Total assigned below 8000 at the 42-day cap, unless a preceding stop condition applies",
    "advance": "sqa28.ci.lower > 0 AND sqa28.delta >= 0.015 AND activation7.ci.lower > -0.03 AND optout28.ci.upper < 0.01 AND salesMinutesPerAssignedAccount.delta <= 0.5 AND target sample attained",
    "inconclusive": "Every other valid, mature result",
    "boundaryEquality": "Equality at a confidence-bound threshold does not pass its strict statistical gate. Sales cap equality passes. Observed practical threshold equality passes.",
    "advanceMeaning": "A modeled decision to attempt a bounded expansion; not proof the true SQA lift exceeds 1.5 points or permission for unlimited scaling"
  },
  "integrity": {
    "zeroTolerance": [
      "assignment_replay_mismatch",
      "completed_block_imbalance",
      "unresolved_cross_arm_company_collision",
      "duplicate_account_in_denominator",
      "duplicate_event_id_with_conflicting_payload",
      "outcome_before_assignment",
      "future_evidence_in_routing",
      "missing_required_outcome_ascertainment",
      "contact_after_optout",
      "more_than_two_proactive_contacts",
      "fixture_or_visitor_record_in_modeled_cohort",
      "unexplained_snapshot_or_protocol_hash_mismatch"
    ],
    "duplicateEvents": "Identical event-ID retries are idempotent; count once and report duplicate count. Conflicting payloads are invalid.",
    "allocation": "Exact assignment/block replay is mandatory for this blocked design; observed data must reconcile to the complete assignment ledger, including nonrecipients.",
    "exposure": "Ordinary nonreceipt, unopened messages, and nonadherence remain ITT. Missing/corrupt exposure records require repair; do not redefine the denominator.",
    "incidents": "One contact after opt-out, a third proactive contact, a duplicate paid fixture enrichment, or a duplicate Sales handoff stops that operational run and creates a retained incident receipt. No interim conversion-rate stopping rule.",
    "censoring": "Delay the final analysis until every assigned account matures. No complete-case deletion or conversion-only time-to-value calculation."
  },
  "generator": {
    "labelIndependence": "Outcome labels come only from the frozen scenario generator and shared latent propensity, never from Jev, routing decisions, Clay response, fixture feedback, or the desired displayed decision.",
    "enrollmentTiming": "For zero-based account index i, assign at startAt plus floor(i * enrollmentDays * 86400 / accounts) seconds; baseline uses 84 enrollment days. This fixes volume independently of outcomes.",
    "sharedPropensity": {
      "field": "propensity",
      "highProbability": 0.5,
      "activationAdjustment": 0.05,
      "sqaAdjustment": 0.02,
      "rule": "High propensity adds the adjustment, low subtracts it; use independent labelled outcome uniforms conditional on propensity. Opt-out uniform is independent."
    },
    "funnel": "One labelled activation uniform determines nested imported (u < p_activation + 0.35), first successful query (u < p_activation + 0.20), and activation (u < p_activation). Use a separate uniform for sharing, SQA and opt-out. SQA is a parallel downstream endpoint, not forced to be a subset of activation.",
    "eventTimes": "Imported on elapsed day 1 at hour 2; first query day 1 hour 3; repeat query day 2-6 selected by labelled day uniform at hour 3; sharing day 3-6 at hour 4; SQA day 8-27 at hour 5; opt-out day 1-27 at hour 1. Add assignment timestamp to these elapsed offsets; suppress later contacts. All non-events receive explicit completed-ascertainment records at day 28.",
    "metadata": {
      "acquisitionSource": {
        "product_community": 0.5,
        "content": 0.3,
        "direct": 0.2
      },
      "taskNeed": {
        "import": 0.35,
        "sharing": 0.35,
        "unknown": 0.3
      },
      "companySize": {
        "1-10": 0.5,
        "11-50": 0.35,
        "51-200": 0.15
      }
    },
    "metadataRule": "Draw baseline attributes with separately labelled uniforms. They are not downstream outcomes or validated predictors. All generated companies use reserved .test domains."
  },
  "costs": {
    "currency": "USD",
    "dataKind": "assumed_synthetic_costs",
    "acquisitionPerAssignedAccount": 6,
    "platformAllocationPerAssignedAccount": 0.01,
    "deliveryPerProactiveContact": 0.005,
    "contentOpsFixedPerArm": {
      "control": 120,
      "treatment": 240
    },
    "inferencePerAssignedAccount": {
      "control": 0,
      "treatment": 0.002
    },
    "salesHourlyRate": 60,
    "salesMinutes": "Scenario arm mean plus (labelled sales_effort uniform minus 0.5) times 0.2; never negative",
    "total": "Acquisition + allocated platform + actual modeled contact count times delivery rate + fixed content/operations + modeled inference + Sales minutes times hourly rate / 60",
    "ratios": "Report arm total cost per assigned account, activated account and SQA. Zero outcome denominator is null, not zero. Incremental cost/SQA is null unless estimated incremental SQA is positive, and remains uncertain when its interval includes zero.",
    "actualExecution": "Publish measured MotherDuck/Jev/Clay/hosting execution costs in separate receipts. Do not replace synthetic spend or assumed labor with actual provider charges, and do not represent these assumptions as vendor prices."
  },
  "scenarios": [
    {
      "id": "beneficial",
      "seed": 2026092911,
      "label": "Assumed downstream benefit",
      "accounts": 8000,
      "enrollmentDays": 42,
      "expectedEligibleAccountsPerWeek": 1333.3333333333333,
      "volumeKind": "higher_volume_sensitivity_demonstration",
      "controlRates": {
        "sqa28": 0.1,
        "activation7": 0.25,
        "optout28": 0.01,
        "sharing7": 0.12
      },
      "treatmentRates": {
        "sqa28": 0.13,
        "activation7": 0.28,
        "optout28": 0.01,
        "sharing7": 0.18
      },
      "salesMinutes": {
        "control": 0.6,
        "treatment": 0.9
      },
      "purpose": "Exercise every success gate; the sampled decision is not guaranteed."
    },
    {
      "id": "upstream_only",
      "seed": 2026092912,
      "label": "Upstream improvement without assumed SQA lift",
      "accounts": 8000,
      "enrollmentDays": 42,
      "expectedEligibleAccountsPerWeek": 1333.3333333333333,
      "volumeKind": "higher_volume_sensitivity_demonstration",
      "controlRates": {
        "sqa28": 0.1,
        "activation7": 0.25,
        "optout28": 0.01,
        "sharing7": 0.12
      },
      "treatmentRates": {
        "sqa28": 0.1,
        "activation7": 0.33,
        "optout28": 0.01,
        "sharing7": 0.22
      },
      "salesMinutes": {
        "control": 0.6,
        "treatment": 0.9
      },
      "purpose": "A tempting activation improvement cannot substitute for downstream benefit; retain whatever sampled decision occurs."
    },
    {
      "id": "harm",
      "seed": 2026092913,
      "label": "Assumed guardrail harm",
      "accounts": 8000,
      "enrollmentDays": 42,
      "expectedEligibleAccountsPerWeek": 1333.3333333333333,
      "volumeKind": "higher_volume_sensitivity_demonstration",
      "controlRates": {
        "sqa28": 0.1,
        "activation7": 0.25,
        "optout28": 0.01,
        "sharing7": 0.12
      },
      "treatmentRates": {
        "sqa28": 0.13,
        "activation7": 0.19,
        "optout28": 0.03,
        "sharing7": 0.15
      },
      "salesMinutes": {
        "control": 0.6,
        "treatment": 1.3
      },
      "purpose": "Possible SQA improvement cannot override activation/contact harm or an exceeded Sales budget."
    },
    {
      "id": "insufficient_enrollment",
      "seed": 2026092914,
      "label": "Baseline volume cannot reach the planned sample",
      "accounts": 3000,
      "enrollmentDays": 42,
      "expectedEligibleAccountsPerWeek": 500,
      "volumeKind": "synthetic_historical_volume",
      "controlRates": {
        "sqa28": 0.1,
        "activation7": 0.25,
        "optout28": 0.01,
        "sharing7": 0.12
      },
      "treatmentRates": {
        "sqa28": 0.13,
        "activation7": 0.28,
        "optout28": 0.01,
        "sharing7": 0.18
      },
      "salesMinutes": {
        "control": 0.6,
        "treatment": 0.9
      },
      "purpose": "Use baseline 500/week volume; insufficient enrollment prevents advancement even if the effect looks promising."
    }
  ],
  "fixtures": {
    "minimum": 3,
    "maximum": 5,
    "dataKind": "real_company_facts_with_synthetic_trial_context",
    "scope": "Owned or expressly selected public company domains; real Clay enrichment, a test Sales queue, and returned fixture feedback. No real prospect messages.",
    "acceptance": [
      "one_successful_enrichment_delivery_feedback_round_trip",
      "one_missing_evidence_hold",
      "one_repeated_trigger_with_no_duplicate_paid_enrichment_or_handoff"
    ],
    "separation": "Never union fixtures, queue feedback, page visitors, or real company facts into synthetic experiment outcomes. A fixture acceptance is not SQA or real buying intent."
  },
  "artifactContract": {
    "path": "/duck-yeah/experiment.json",
    "requiredTopLevel": [
      "schemaVersion",
      "protocolId",
      "protocolHash",
      "generatedAt",
      "dataKind",
      "baseline",
      "scenarios",
      "operationalFixtures",
      "receipts"
    ],
    "scenarioRequired": [
      "id",
      "seed",
      "label",
      "enrollment",
      "maturity",
      "integrity",
      "metrics",
      "costs",
      "decision",
      "cohorts",
      "funnel",
      "segments",
      "receipts"
    ],
    "metricShape": "{control:{events,total,rate},treatment:{events,total,rate},delta,ci:{method,level,lower,upper},gate}",
    "decisionShape": "{code,reasons,allGates,scope:'synthetic_case_only'}",
    "baselineShape": "{id,dataKind,seed,period,assumptions,cohorts,funnel,segments,volume,feasibility,priorityHypothesis,receipts}",
    "receiptShape": "{id,kind,status,runId,startedAt,finishedAt,sourcePath,sourceHash,scope,cost,limitations}",
    "hash": "SHA-256 of the exact UTF-8 experiment-protocol.json bytes; store the value in results and execution receipts, outside this file to avoid self-reference.",
    "publish": "Every declared scenario and retained failure; saved analytical outputs on page/MCP requests, without paid inference or fresh SQL per visitor"
  },
  "revision": {
    "previousProtocolId": "duck-yeah-trial-assistance-v2.0",
    "previousProtocolHash": "009f3fd701501169b99553284fa06363393b9ef3e556a13ef580f533dfd59109",
    "reason": "One of 32 pre-case validation checks failed: coverage.sqa28.wilson95Lower = 0.9398395206647528, required >= 0.94. Preserve the failed result. Marginal binomial coverage diagnostic is approximately 0.950103; the Monte Carlo validation lacked sufficient precision to clear its frozen gate.",
    "change": "One-time precision revision: 100000 replicates for every condition and dependence model, same seed, child stream order, scalar draw order, sample sizes, rates, case seeds, intervals, margins and decision rules. Original first 10000 outcomes per stream must reproduce the v2.0 counts. Stop if any revised check fails; no further automatic extensions.",
    "changedAfterCaseOutcomes": false,
    "priorProtocolUrl": "/duck-yeah/history/experiment-protocol-v2.0.json",
    "priorValidationUrl": "/duck-yeah/history/experiment-power-v2.0.json",
    "interpretation": "A documented pre-case validation revision, not independent replication or a passed original preregistration. Pointwise checks do not establish simultaneous coverage."
  }
}
