{
  "protocol_id": "desiremetric-private-sample-v2",
  "status": "planned_not_collected",
  "purpose": "Compare documented private-session entry costs under matched collection conditions; not a population estimate or overall platform ranking.",
  "platforms": [
    "Chaturbate",
    "Stripchat"
  ],
  "target_rooms_per_platform": 50,
  "selection": {
    "category": "Women / Female / Girls: platform-native labels recorded exactly",
    "ranking": "Default unfiltered listing, no price sort or additional filters. Record exact label and listing URL; different platform algorithms remain a limitation.",
    "order": "Freeze the first 50 distinct displayed room URLs and positions before inspecting prices. Do not replace unavailable or unpriced rooms.",
    "promoted_cards": "Record visible promoted/sponsored labels; retain position and flag rather than silently excluding.",
    "session": "Same browser region and login state per platform; record state, never account identifier or credentials.",
    "time": "Select both lists within 10 minutes. Alternate batches of 5 rooms across platforms; target a 60-minute run. If exceeded, flag temporal mismatch; do not claim synchronized observations."
  },
  "required_run_fields": [
    "run_id",
    "platform",
    "category_label",
    "ranking_label",
    "listing_url",
    "selected_at_utc",
    "started_at_utc",
    "ended_at_utc",
    "login_state",
    "region_if_known",
    "selection_method",
    "deviations"
  ],
  "required_room_fields": [
    "run_id",
    "sample_position",
    "source_url",
    "observed_at_utc",
    "room_status",
    "private_tokens_per_minute",
    "minimum_private_minutes",
    "spy_tokens_per_minute",
    "interactive_indicator",
    "missing_reason_by_field",
    "evidence_reference"
  ],
  "collection_rules": [
    "Capture rate and minimum from the same dialog/check; do not combine across revisits.",
    "Do not press Request or Start, buy tokens or create a paid account.",
    "Unavailable values are null with a reason, never zero.",
    "Keep Spy in a separate sample because its listing conditions differ.",
    "Record package prices before checkout with payment method, currency evidence, exact timestamp, source URL and promotion flag.",
    "Keep full history; a later check is a new record.",
    "Capture total live count and category count only if explicitly labelled; do not infer them from loaded cards."
  ],
  "analysis": [
    "Report selected, inspected, rate-known, minimum-known, jointly-known and qualifying counts separately.",
    "Report observed entry-package thresholds and ranges; do not interpret sample maxima as typical value.",
    "Report missingness and ranking/time deviations alongside estimates.",
    "Only promote a new snapshot after validating source URLs, timestamps, currencies, paired values, duplicates, page dates and reference scenarios."
  ],
  "supabase_write_authorized": false,
  "release_policy": "Current build is deliberately pinned to October 5. A new dataset requires a reviewed version and updated page dates; it must not silently overwrite historical evidence."
}