Mutalyzer normalizer test fixtures
==================================

Source:  https://github.com/mutalyzer/mutalyzer
Commit:  00045d63feba04ccff18a4d95f4245ad5d8d3092
License: MIT (Leiden University Medical Center)

cases.json is generated by scripts/refresh-mutalyzer-fixtures.py from
tests/variants_set.py in the upstream repo at the pinned commit above,
AND hand-curated thereafter. Hand curation now includes: the clusters
taxonomy, comparator_provenance, all per-case dispositions, and
hand-derived cases whose first keyword begins "ferro-hand-derived:".

Refresh MERGES rather than replaces. build_refresh_payload() takes each
fresh upstream row as the base, matches it to the existing row with the
same `input`, and overlays that row's per-case dispositions
(spec_citation, accepted_divergence, known_bug, improvement,
reference_unavailable, accepted_rejection) plus any expected-value field
we had hand-corrected away from upstream (normalized, genomic,
protein_description, coding_protein_descriptions, rna_description,
noncoding, errors, infos) — including a field we deliberately REMOVED,
which is dropped again rather than resurrected. Keyword annotations the
curated row added are appended to upstream's keywords. New upstream
fields therefore still arrive. Hand-added rows and corpus-level curation
are carried forward verbatim. Rows are paired on `input` and on
occurrence order within a duplicated `input`.

The script still REFUSES to run while curation is present, listing what
is at stake, so the merge is reviewed rather than assumed. --force is the
override for when you have reconciled the merge — NOT the routine path.

Expected values for hand-derived cases are DERIVED FROM THE PINNED
COMPARATOR (mutalyzer 3.1.1 / mutalyzer-hgvs-parser 0.4.0), never copied
from upstream or invented — see comparator_provenance.note.

To refresh against a newer upstream commit:
    1. Update MUTALYZER_SHA in scripts/refresh-mutalyzer-fixtures.py
    2. pixi run python scripts/refresh-mutalyzer-fixtures.py refresh
       It will refuse and enumerate the curation at stake. Review that
       list; once you are satisfied the merge is correct, rerun with
       --force to apply it.
    3. Re-run the mutalyzer-normalize tests; annotate any new xfails via:
         pixi run python scripts/refresh-mutalyzer-fixtures.py annotate-xfails \
           --axis <axis> --from /tmp/ferro-xfail/<axis>.txt
    4. Commit cases.json + NOTICE in a single commit.

The upstream MIT license requires attribution; this file satisfies that
requirement. See the upstream LICENSE for the full text.
