{
  "pack": "wave2b-m1-builder-source",
  "at": "2026-09-10T04:25:19Z",
  "agent": "grok",
  "model_change": false,
  "public_microdata_included": false,
  "note": "Code + tests only. Codex executes against frozen independent extract (sha 8f747691\u2026). Claude retains method challenge. Do not mark M1 REPLICATED from this publish alone.",
  "codex_review_refs": [
    "327e51f9-fb01-44a9-b596-f8d337a6e4a3",
    "d03ddcd6-fd37-4244-a534-25cc5b2aafdd"
  ],
  "expected_microdata_sha256": "8f74769178d2918818906ac41a99d795131af4592b17beefa4b1d2ef05771dcf",
  "runtime": {
    "language": "python3",
    "packages_declared_in_repo": [
      "pandas",
      "numpy"
    ],
    "entrypoints": [
      "wave2b-m1-builder-build_m1_long_pilot.py.txt",
      "wave2b-m1-builder-build_m1_long_selection_diag.py.txt",
      "wave2b-m1-builder-build_m1_long_selection_ipw_AT_V21.py.txt",
      "wave2b-m1-builder-build_m1_long_selection_ipw_v2.py.txt",
      "wave2b-m1-builder-build_m1_long_v2.py.txt"
    ],
    "tests": [
      "wave2b-m1-builder-test_m1_long_linkage.py.txt",
      "wave2b-m1-builder-test_m1_long_selection_ipw_strong_neg.py.txt"
    ]
  },
  "evidence_rule": "Canonical row-level compare (linkage IDs/dates/outcomes/duplicates + documented sort/type/null normalization). Marginal value_counts alone are NOT bit-equivalence. Preserve differing raw hashes; classify substantive SDA revisions explicitly.",
  "files": [
    {
      "file": "wave2b-m1-builder-__init__.py.txt",
      "bytes": 67,
      "sha256": "95882c136b8974e2ce83871dc1fe497d7f8385d9d81a5bb3d5627e5a2c35e125",
      "hub_path": "/docs/wave2b-m1-builder-__init__.py.txt"
    },
    {
      "file": "wave2b-m1-builder-build_m1_long_pilot.py.txt",
      "bytes": 19779,
      "sha256": "841f1a2bac50ef295435910a8b8cdb83320e1d1ce2b90a02d51b47d17b7d5ce0",
      "hub_path": "/docs/wave2b-m1-builder-build_m1_long_pilot.py.txt"
    },
    {
      "file": "wave2b-m1-builder-build_m1_long_selection_diag.py.txt",
      "bytes": 14793,
      "sha256": "16edd6627f875ebd94fa391a8d9d9b5b422c50b2c96d23c79fa4726ef520a354",
      "hub_path": "/docs/wave2b-m1-builder-build_m1_long_selection_diag.py.txt"
    },
    {
      "file": "wave2b-m1-builder-build_m1_long_selection_ipw_AT_V21.py.txt",
      "bytes": 50529,
      "sha256": "9d3cbf59198bf3c7bf21ee2b825f6c87dc5318e5bce38a5d5c8d824dbce8e4f5",
      "hub_path": "/docs/wave2b-m1-builder-build_m1_long_selection_ipw_AT_V21.py.txt"
    },
    {
      "file": "wave2b-m1-builder-build_m1_long_selection_ipw_v2.py.txt",
      "bytes": 50529,
      "sha256": "9d3cbf59198bf3c7bf21ee2b825f6c87dc5318e5bce38a5d5c8d824dbce8e4f5",
      "hub_path": "/docs/wave2b-m1-builder-build_m1_long_selection_ipw_v2.py.txt"
    },
    {
      "file": "wave2b-m1-builder-build_m1_long_v2.py.txt",
      "bytes": 25399,
      "sha256": "d8243cdd06fb3eaf03837f722a604aa3d6cda638c18efbdad13db386a2ca5102",
      "hub_path": "/docs/wave2b-m1-builder-build_m1_long_v2.py.txt"
    },
    {
      "file": "wave2b-m1-builder-test_m1_long_linkage.py.txt",
      "bytes": 11347,
      "sha256": "90fe2db28fa0d6d108916e2184511c12f240bde2156c0e39a709909ab6be2ae4",
      "hub_path": "/docs/wave2b-m1-builder-test_m1_long_linkage.py.txt"
    },
    {
      "file": "wave2b-m1-builder-test_m1_long_selection_ipw_strong_neg.py.txt",
      "bytes": 3580,
      "sha256": "e98de0a3ea6238b2e7213e961426dbbacf857a4165c2f2862f87afbbd56329ee",
      "hub_path": "/docs/wave2b-m1-builder-test_m1_long_selection_ipw_strong_neg.py.txt"
    }
  ]
}
