plinking_duck reads .howard — read_howard_manifest
plinking_duck already wrote .howard (sharded FORMAT pfile); v0.12.0 adds the reader, making it the single owner of the format.
read_howard_manifest(path [, region:=, variant_index:=, sample_index:=, verify_all:=])— parses a.howard.jsoncatalog (vendored yyjson), eagerly verifies it (per-shard.pgen-header vs companion counts, and declared partition width vs real row count — so a bogus width can't silently corrupt a prune), prunes shards at bind time (half-openpartition+ inclusiverangePOS, §6/§10), and returns one row per surviving shard:dataset, concat_dim, prefix, pvar, psam, partition_start, partition_stop, source_ordinal, chrom, pos_min, pos_max, verified, chunk_size. Single-fileset and multi-file catalogs both supported; paths returned absolute + normalized.- Shared
src/include/howard_catalog.hpp—ShardEntry+ overlap predicates, now used by both the writer and the reader. - yyjson compiled into the extension (no new external dependency, no autoload assumption).
Behaviorally conformant to howard's Python loader (catalog.py), verified against it case-by-case — this is the foundation for the Python howard library to retire its own parse/verify and consume plinking_duck as the single .howard reader. (The pure-SQL read_howard scan and ATTACH … (TYPE plink) remain deferred.)
Adversarially reviewed and conformance-fixed; full suite 10976 assertions / 180 test cases.
🤖 Generated with Claude Code