{
  "schema_version": 1,
  "id": "ext_qualifying_threshold_comparison",
  "question_id": "r18_bq_rule_changes",
  "title": "Do qualifying rules change how people race?",
  "status": "ready",
  "as_of": "2026-09-12T14:13:07Z",
  "n": 854,
  "input_export_id": "private-20260912-0934",
  "input_as_of": "2026-09-12T13:37:16Z",
  "live_json_as_of": "2026-09-12T04:11:06Z",
  "input_asset_sha256": "cb4e0ab7432010de29755ec5d75ca3b370e64e481eda5b20c44b359f39552204",
  "input_manifest_sha256": "a6f534d40bac291e0a1bc2eeb70633660acd00a710a090320876736de9c30f4d",
  "analysis_script_sha256": "4a26017aa2c2b2796e8d5f3498ea5e0a2f3c1e691a7332ef20cdbc256d4cdd42",
  "analysis_version": 2,
  "engine": "DuckDB 1.4.4",
  "corpus": {
    "n_records": 4462379,
    "n_cities": 34,
    "n_race_years": 256
  },
  "cohort": {
    "deduplicated": 4462379,
    "complete": 3830211,
    "increasing": 3604993,
    "timing_eligible": 3595426,
    "eligible": 3517336,
    "source_quality_excluded": 78090,
    "raw": 4462379,
    "duplicates_removed": 0,
    "missing_or_unparsed": 632168,
    "non_increasing": 225218,
    "outside_quality_bounds": 9567
  },
  "methodology_prose": [
    "The B.A.A. history lists 18\u201334 standards of 3:05 for men and 3:35 for women for 2013\u20132019 Boston races; the 2020 standards became 3:00 and 3:30, announced in September 2018. Compare 2016\u20132017 performances with 2019, excluding the transition year. Exact ages 18\u201331 avoid crossing the 35-year boundary within the next two years.",
    "Around each fixed old/new benchmark, select finishes within \u00b12 minutes. Within each city and period, calculate the share at or below the benchmark. Keep cities with at least 20 close finishes in both periods and weight both periods by the smaller city-period count. Report at least 100 observed finishes per displayed period.",
    "Acceptance cutoffs, declared intentions, age on a future Boston race day, certification and qualifying windows are not assigned to individuals. Round-number appeal, historical field changes and anticipatory behavior can explain bunching. This is not a difference-in-differences causal estimate, and the comparison does not cover every rule change.",
    "Official sources: https://www.baa.org/races/boston-marathon/qualify/ ; https://www.baa.org/news/2020-boston-marathon-qualifier-acceptances-announced/ . Historical values verified 2026-09-08.",
    "Use complete, strictly increasing elapsed checkpoints at 5, 10, 15, 20, 25, 30, 35, 40 and 42.195 km. Clock strings must parse as H:MM:SS or M:SS. No missing splits are interpolated.",
    "Remove exact duplicate race records, ignoring database IDs, ingestion timestamps and source URLs. Retain finishes from 90 minutes to 12 hours with every section between 2 and 20 minutes per km. These quality filters can exclude genuine unusual performances; the analysis describes this eligible cohort, not every entrant.",
    "Full source records are available in public GitHub Releases. These chart tables require at least 100 eligible observations per cell for estimate reliability. Counts refer to finishes, linked pairs or event observations as specified in that answer.",
    "These are observational results. Fitness changes, intentions, training, selection into the dataset and unmeasured conditions can explain differences. Outcome percentiles describe variation among performances, not confidence intervals or advice about the best strategy.",
    "Apply the reviewed source-quality edition exclusions for this exact export after the timing checks. Known invalid split grids, incomplete ingestion, unreconciled HOLD editions and a selected top-finisher field do not contribute to the analyses or prior benchmarks. Report source exclusions separately; an already invalid timing row is not counted twice. Missing age or recorded gender alone does not exclude an otherwise eligible finish from the overall cohort. Other sparse editions are not declared incomplete merely from their size."
  ],
  "observational": true,
  "minimum_public_cell": 100,
  "source_quality": {
    "version": 1,
    "release_tag": "private-export-20260912-0934",
    "reviewed_edition_policy": true,
    "editions": [
      {
        "city": "Honolulu",
        "year": 2016,
        "category": "invalid_split_grid",
        "reason": "Producer explicitly force-dropped this incomplete 5 km grid.",
        "raw_records": 20118,
        "deduplicated_records": 20118,
        "timing_eligible_excluded": 0
      },
      {
        "city": "Rotterdam",
        "year": 2012,
        "category": "invalid_split_grid",
        "reason": "Producer explicitly force-dropped this incomplete 5 km grid.",
        "raw_records": 7542,
        "deduplicated_records": 7542,
        "timing_eligible_excluded": 0
      },
      {
        "city": "Eindhoven",
        "year": 2009,
        "category": "invalid_split_grid",
        "reason": "Producer explicitly force-dropped this incomplete 5 km grid.",
        "raw_records": 1407,
        "deduplicated_records": 1407,
        "timing_eligible_excluded": 0
      },
      {
        "city": "Eindhoven",
        "year": 2010,
        "category": "invalid_split_grid",
        "reason": "Producer explicitly force-dropped this incomplete 5 km grid.",
        "raw_records": 1462,
        "deduplicated_records": 1462,
        "timing_eligible_excluded": 0
      },
      {
        "city": "Frankfurt",
        "year": 2019,
        "category": "invalid_split_grid",
        "reason": "Producer explicitly force-dropped this 5 km grid; numerically plausible rows are not reinstated.",
        "raw_records": 12513,
        "deduplicated_records": 12513,
        "timing_eligible_excluded": 10624
      },
      {
        "city": "New York",
        "year": 2008,
        "category": "unreconciled_hold",
        "reason": "Previously partial ingestion has grown to 38,047 records, but source-total reconciliation and explicit completion evidence are absent; keep the prior hold pending review.",
        "raw_records": 38047,
        "deduplicated_records": 38047,
        "timing_eligible_excluded": 37387
      },
      {
        "city": "Chicago",
        "year": 2016,
        "category": "incomplete_ingestion",
        "reason": "Producer handoff identifies this 6,512-record edition as incomplete and on HOLD.",
        "raw_records": 6512,
        "deduplicated_records": 6512,
        "timing_eligible_excluded": 6506
      },
      {
        "city": "Tokyo",
        "year": 2026,
        "category": "selected_field",
        "reason": "Source notes identify top-500 PDFs, not a representative full marathon field.",
        "raw_records": 353,
        "deduplicated_records": 353,
        "timing_eligible_excluded": 353
      },
      {
        "city": "Amsterdam",
        "year": 2025,
        "category": "unreconciled_hold",
        "reason": "Source audit marks HOLD: 23,328 listed versus 23,325 retrieved. This conservative hold does not establish a large bias from the three missing records.",
        "raw_records": 23325,
        "deduplicated_records": 23325,
        "timing_eligible_excluded": 23220
      },
      {
        "city": "Valencia",
        "year": 2017,
        "category": "incomplete_ingestion",
        "reason": "Source audit marks HOLD: 3,373 listed detail pages missing; the observed records also lack 20 km.",
        "raw_records": 12485,
        "deduplicated_records": 12485,
        "timing_eligible_excluded": 0
      },
      {
        "city": "Valencia",
        "year": 2018,
        "category": "incomplete_ingestion",
        "reason": "Producer handoff retains an incomplete/HOLD status; the edition also lacks the observed 20 km checkpoint.",
        "raw_records": 19236,
        "deduplicated_records": 19236,
        "timing_eligible_excluded": 0
      }
    ],
    "policy_sha256": "c08e83c993025dc41c0344be7b5442d74b3fb0588c38949481d5bc0a08f45fa0",
    "script_sha256": "433e8b9566b5afd809f4de1180fab222e63ad40678a33f6c93f08712cf820c77"
  },
  "source_quality_script_sha256": "433e8b9566b5afd809f4de1180fab222e63ad40678a33f6c93f08712cf820c77",
  "observation_unit": "eligible finishes",
  "evidence_scope": "partial comparison",
  "supporting_script_sha256": "7c6959b427fa1b06bb9600bb3377ecb226257d14aa0ec61a71a63f42bc87a3dd",
  "source_links": [
    {
      "href": "https://www.baa.org/races/boston-marathon/qualify/",
      "label": "B.A.A. historical qualifying standards"
    },
    {
      "href": "https://www.baa.org/news/2020-boston-marathon-qualifier-acceptances-announced/",
      "label": "B.A.A. 2020 standards and acceptance announcement"
    }
  ],
  "linkage_audit": {
    "feature_rows": 4462379,
    "safe_identity_groups": 2892236,
    "record_join_method": "canonical_record_id",
    "canonical_id_contract_verified": true,
    "candidate_link_rows": 3194070,
    "natural_key_candidate_rows": 0,
    "canonical_id_candidate_rows": 3194070,
    "ambiguous_cross_export_matches": 0,
    "linked_eligible_finishes": 3194070,
    "recent_benchmark_finishes": 555437,
    "consecutive_cross_year_pairs": 583670,
    "linked_with_supplied_date": 3185321
  },
  "narrative_script_sha256": "a9c6755fe727caa6c5a3994bd565e615067ec09c9c6f31e4e076622b810b5dcf"
}
