Skip to content

Releases: carstenerickson/aadr-resolve

v0.4.2

12 Jun 19:53
29ff7f3

Choose a tag to compare

Patch release — bug fixes from the full-project code review.

Fixed

  • Dirty integer cells no longer crash the load. date_calbp, date_sd_bp, persistent_genetic_id, and snps_hit_1240k coerce any non-integer, fractional, or infinite cell to <NA> instead of raising — a malformed value in a future/non-public release degrades gracefully.
  • The cross-version flows reject two files that share a version label (cohort, join, lookup). Previously a same-class collision (e.g. a release and its .p1 patch, which infer the same label) silently overwrote one panel's per-version data.
  • Output-write I/O errors exit 2 (IO_FAILURE), not 3. An unwritable -o path or disk-full report write now maps to a clean message instead of a traceback + invariant-violation exit.
  • The stdout group-change histogram no longer omits convention_restructure_prefix_drop (now derived from the enum so a new class can't be silently dropped).
  • The --schema-override hint and help list every registered class (derived from the registry, can't go stale).

Full changelog: https://github.com/carstenerickson/aadr-resolve/blob/v0.4.2/CHANGELOG.md

v0.4.1

12 Jun 16:58
59367f9

Choose a tag to compare

Fixed

  • v54.1 trailing-tab files loaded with every field shifted one column right. The published v54.1 .anno (1240K + HO) carries a trailing tab on the header and every data row, so the loader consumed the first data column as a row index — genetic_id returned the Master ID and date_calbp the date SD (e.g. ElMiron resolved to date_calbp=39 instead of 18775). Silent corruption across the whole v54.1 release; completes the v54.1 story from 0.3.1 (#4), which made the file load but left the data shifted. (#15)

Changed

  • Hardened header-based layout selection against truncated headers (an override is only chosen when the headers can actually contain its relocated columns), and unified the override-key lookup. (#9)
  • Documented class F coverage as a cross-panel proxy — the HO panel (~600K sites) is mapped to coverage_1240k/snps_hit_1240k, so 1240k-calibrated thresholds shouldn't be applied unadjusted. No behavior change. (#10)

Docs

  • Added docs/RELEASE.md (release + trusted-publishing process). (#11)

Full changelog: https://github.com/carstenerickson/aadr-resolve/blob/v0.4.1/CHANGELOG.md

v0.4.0

12 Jun 02:32
cd096a2

Choose a tag to compare

Added

  • Per-version column overrides. One schema class can serve AADR releases that place fields at different columns under a shared detection signature. The layout is selected from the file's actual header content (not its filename version label), so a release with a shifted layout reads correctly even when its label is wrong or can't be inferred; overrides are validated at load time, and the schema diagnostic reports the header-detected layout.
  • Class F: the early Human Origins schema (v44.3, v50.0 HO) — an 18-column minimal layout, previously unloadable.
  • Guard against cross-panel version-label collisions (the 1240K and HO panels of one release): cohort/lookup now fail with a clear error instead of silently dropping a panel's data.

Fixed

  • v50.0 1240K dates were read from the wrong column (I0626_all resolved to date_calbp=173 instead of 3850). Fixed via a class-A version_overrides entry for v50.0.

Full changelog: https://github.com/carstenerickson/aadr-resolve/blob/v0.4.0/CHANGELOG.md

v0.3.1

11 Jun 21:01
ba1086f

Choose a tag to compare

Fixed

  • Class C now loads the published v54.1 .anno files. The released v54.1 1240K and HO annotations carry a trailing tab, so the loader drops the phantom column and detection sees 35 columns — but class C accepted only 36, so real public files failed with SchemaDetectionError. Class C now accepts n_columns: [35, 36]; the trailing column is unmapped, so every field stays at the same position. The schema generator and .anno fixtures were brought in line, and a regression test covers the 35-column trailing-tab form.

Changed

  • Documented the pip 23+ / setuptools 61+ requirement for editable installs.
  • The PyPI publish workflow now refuses to release unless the ci.yml run for the released commit concluded successfully.

Full changelog: https://github.com/carstenerickson/aadr-resolve/blob/v0.3.1/CHANGELOG.md

v0.2.0

12 May 18:26

Choose a tag to compare

Reporting layer + polish minor. Builds on v0.1.0 to close the biggest doc/code gap: the HLD-pinned stdout summary block, per-event TSV streaming sidecar, and run-level JSON summary sidecar are now implemented end-to-end on cohort + diff.

See CHANGELOG.md for the full feature list and docs/REPORT_JSON_SCHEMA.md for the JSON sidecar schema.

Highlights

  • Stdout summary block on cohort + diff: rich multi-section run summary (loaded files, bridge counts, resolution / event histograms, group-change histogram, turnover verdict, elapsed time). Suppress with --quiet.
  • --report-json PATH sidecar on cohort + diff: ~few-KB run-level JSON, loads cheaply via json.load. Written even on gate failures so CI can inspect failure shapes.
  • --report PATH streamed per-event TSV sidecar on diff, constant memory regardless of corpus size.
  • Per-adjacent-pair group_id_change_class_v{old}_to_v{new} columns in the cohort manifest (LLD §4.1 step 11d).
  • CI coverage gate at 85% (LLD §5.6; actual 91.7%).
  • Actions bumped past Node.js 20 deprecation (June 2026 cutover).

Bug fixes

  • diff --report PATH sidecar no longer backslash-escapes embedded JSON quotes; output now matches the v0.1 inline --tsv mode.

Install

pip install --upgrade aadr-resolve

Requires Python 3.11+.

v0.1.0

12 May 15:13

Choose a tag to compare

Initial release of aadr-resolve — AADR cross-version GeneticID / MasterID join utility for ancient-DNA and population-genetics workflows.

See README.md for usage and CHANGELOG.md for the full feature list.

Highlights

  • Five subcommands: lookup, cohort, diff, join, schema
  • Five bench-verified schema classes A–E covering v44.3 → v66.0
  • MID-rename bridge: GID-stable auto-detection + manual override
  • Library-token chain algorithm preserving multi-row-per-individual semantics
  • Six-class Group ID change classifier
  • Three exit-1 validation gates: turnover, substantive-regroup, cohort-coverage
  • Library API: AnnoFrame + resolve_master_ids + resolve_genetic_ids + full 8-class exception hierarchy
  • Stable 5-exit-code contract
  • CI matrix: Ubuntu + macOS × Python 3.11/3.12/3.13
  • 153 passing tests including a WHGA self-dogfood pass against a hand-built v44.3 → v66.0 cross-reference

Install

pip install aadr-resolve

Requires Python 3.11+.