Hop atlas home · Overview · Changelog · Architecture · Adding_Data · Introgression · Ribbon · Dosage · Phylogeny · Bundle · Ingest · Ingest_Gbs · Ingest_Wgs · Ingest_Grasdi · Ingest_Rnaseq · Ingest_Assembly
Rendered from hop_atlas/CHANGELOG.md (2026-10-13)
Dated record of changes to what is served. All components are tentative. The newest entries are first. Entries before 2026-10-08 are reconstructed from sync records and backups; their sources are given.
components/INTROGRESSION.md overview, patch-marker table and "How haplotypes are assigned"; ARCHITECTURE.md progress table; ADDING_DATA.md and ingest/README.md for Carey 2026 live, Zhang opt-in, manifests, per-reference calls); docs re-rendered (new /hop_atlas/docs/BUNDLE.html). New hop_atlas/tools/package_atlas_bundle.py (+ bundle_assets/, guide components/BUNDLE.md) builds the self-contained introgression-atlas zip with a generated CLAUDE.md. No atlas page or data changed.*.bak_2026-10-13_1658_frames): the "Display coordinates" control is now Reference (?ref=<key>, default 21110M), and the old liftover is removed.atlas_native_<res>.json per-bin g; atlas_data.json len/utile/notes.frame of non-21110M frames, ulen, coverage).build_frames.py). Each non-21110M reference carries the Zenith x 21058M calls re-made on it (126 plants; record sync/2026-10-13/per_frame_ancestry/).frames/frames.json (17 entries: 21110M composite, 13 panel haplotypes with Saaz/HL1012 pseudo-haploid marked deprecated and never offered, Saaz hap1, 10-12 hap1, Cascade). The per-frame Saaz hap1 / 10-12 hap1 are their own entries (not the panel sequences).hop_atlas/tools/build_frames.py, patch_frames.py (/*frames*/, 40 hooks), frames_assets/frames.js; guide components/INTROGRESSION.md §8e.?sample=; 21110M canvas byte-identical to the served 21110M frame before the change (5 Mb, 500 kb); default canvas probe paints. Suites not run.havill and sample keys, so links and data keep working.hop_atlas/tools/relabel_havill.py (idempotent; 1,045 replacements); the evidence-page builder sources were updated too.*.bak_2026-10-12_1750_zenith_label.hop_atlas/tools/patch_wgsv_fill_default.py (/*wfill*/). Backup lineage.js.bak_2026-10-10_1858_wgsv_fill./phylogeny/, served from scratch_plots/phylogeny → /data/hop_data/hop_atlas/phylogeny/ (2.8 MB).hop_atlas/tools/build_phylogeny_view.py (page source hop_atlas/tools/phylogeny_view/); guide components/PHYLOGENY.md. Source record sync/2026-10-10/hop_phylogeny/.www/nav.js and a card to www/index.html (backups *.bak_2026-10-10_phylogeny).?sample=<key or name> opens that sample's row (hook /*urlsample*/, tools/patch_url_sample.py; stage/deploy, backup index.html.bak_2026-10-10_1804_2026-10-10_url_sample). Used by the Phylogeny tip links.*.bak_2026-10-10_1749_wgs_variants, *.bak_2026-10-10_1750_wgs_variants_legendfix): new haplotype-resolution option "WGS subspecies (variants: lupulus/lupuloides/neomexicanus/pubescens/cordifolius)" (level key Lw).wgsv/ → /data2/hop_data/wgs_subspecies_variants/viewer_wgsv_20261010 (merged into the lineage JSON at load; the lineage/ data dir is unchanged). Hooks /*wgsv:1..16*/ (index.html + lineage.js) + wgsv.js (hop_atlas/tools/patch_wgsv_level.py).sync/2026-10-10/wgs_subspecies_variants/.lineage.js.bak_2026-10-09_2219_halves_phase): tile halves in the haplotype-resolution views (NA/EU BAM re-call, Subspecies, Lineage, Subspecies + cordifolius) are now ordered for display./*hphase:1..6*/ in lineage.js (hop_atlas/tools/patch_halves_phase.py). Before/after screenshots: sync/2026-10-09/halves_phase/figs/. Checks: page loads with no script errors; suites not run.*.bak_2026-10-09_2142_cordifolius_group): new EXPERIMENTAL haplotype-resolution option "Subspecies + cordifolius (experimental)".tagspace/calls/<coh>_t4c); the Subspecies tile everywhere else.lineage/ → viewer_lineage_20261009_cordifolius (adds L1c), subevc/ → viewer_subspecies_evidence_20261009_cordifolius./*cordi:1..9*/ in lineage.js and /*cordi:s1..s8*/ in subev.js (hop_atlas/tools/patch_cordifolius_level.py). The builder has a new --modes tagc.sync/2026-10-09/cordifolius_lineage/.build_subspecies_evidence.py --cohorts carey2026; carey2026 added to the builder with the apollo_bam parameter set, as KR and the Carey calls use.viewer_subspecies_evidence_20261009_full without overwriting; run settings merged into its build.json (backup build.json.bak_2026-10-09_pre_carey).*.bak_2026-10-09_1857_carey2026_20261009c): Carey 2026 WGS panel (PRJNA1437418, 22 plants) built on stage /data/hop_data/lineage_refinement/stages/carey2026_20261009c from the current served atlas (includes /*sclear*/ and /*subev*/).?preset=wild_wgs), 90 rows: the 15 non-lupulus Carey plants, KR, and divpanel "H. neomexicanus" / "wild-collected N. American" / "US wild" (21 / 20 / 33).atlas_layers.py deploy <stage> --yes. Record: /data/hop_data/cohorts/carey2026/HANDOFF_INTROGRESSION.md §8, sync/2026-10-09/carey2026_hop_wgs/.The Lineage view adds the European-lineage block (SNP layer v6). Zhang 2017 and Pilgrim rows say "no subspecies calls for this cohort (no reads)". The numbers are re-derived from the callers' own inputs and settings, with no new calls. Of 35.5 M exported bins, all but 2,468 match the stored call exactly; those 2,468 are uncalled L2 bins (posterior ≤ 0.469) where several states tie on posterior and the tie was broken differently. Data subev/ → /data/hop_data/lineage_refinement/viewer_subspecies_evidence_20261009_full (2,098 samples × 4 resolutions, 2.8 GB). Tools build_subspecies_evidence.py, patch_subspecies_evidence.py (/*subev:1..4*/), subev_assets/subev.js. Feature check on the stage 33/33 (incl. must-fail: no subspecies fields at the NA/EU level; Zhang row line). Canvas probe: default view unchanged (2,372 rows, painted). Viewer suites not run. Backup *.bak_2026-10-09_1821_subspecies_evidence3. Record sync/2026-10-09/subspecies_evidence/.
- Introgression: the sample search can be unset (PI). A Clear button next to "Show sample", and Esc in the search box, empty the search, forget the selected sample and return to the previous view. Patch hop_atlas/tools/patch_sample_clear.py (marker /*sclear*/, idempotent). Checked on the stage: Clear → panels (2,277 rows); Esc → previous view; no page errors; default view still paints. Backup *.bak_2026-10-09_*_sample_clear.
evidence/index.html, with one entry per badge type (prose by Fable, hop_atlas/evidence/BADGES.md).evidence/osu_paternity.html?s=<seedling> (prose hop_atlas/evidence/osu_paternity.md), with ranked OH and flip statistics with block-bootstrap intervals, histograms, the evidence strip along the genome, atlas bins vs SNP evidence, and a card for the clicked seedling.father≠19058m · <grade> on 73 OSU seedlings (strong 67, moderate 5, possible 1; data from sync/2026-10-08/osu_paternity_uncertainty/).build_paternity_badges.py, patch_evbadge.py and build_evidence_pages.py.?preset=not_19058m 72 rows, painted). The feature test passed 28/28 on the first stage. Backups *.bak_2026-10-08_2347_evidence_badges2.zhang2017, 4,453 GBS libraries, 37 sections, 5 Mb + 2 Mb). New Datasets drawer: only selected cohorts are drawn; default = all except Zhang; selection in ?ds= and per browser. Presets preselect their cohorts; new preset "Zhang 2017 HapMap". Zhang rows load only when selected (+18.5 MB at 5 Mb). New canvas guard in every view folds the largest sections (or clamps) instead of drawing a blank canvas past the 32,000 px browser limit. Default view unchanged (2,372 rows). Tools: zhang_regroup.py, patch_datasets_guard.py, probe_canvas.py; record sync/2026-10-08/zhang2017_atlas_ingest/. Probe on :8900: default view unchanged (2,372 rows, 29,187 px, painted, 9.3 MB); ?preset=zhang2017 2,415 Zhang rows, 30,591 px, painted, 27.8 MB. Backups *.bak_2026-10-08_2346_zhang2017_hapmap. Known: ?ds=all is not recognised (empty view). Record sync/2026-10-08/zhang2017_atlas_ingest/.hop_atlas/cohorts/saaz/cohort.yaml, scope progeny) read through hop_atlas/ingest/pipeline/exclusions.py; 14 files in 13 recurrent scripts corrected. Served changes are Saaz only (20 files): 6 cultivars relabelled non-progeny; transmission / B-frequency on 243 plants (was 249); 500 kb phase blocks + concordance (55 plants changed; 1–5 Mb unchanged); Saaz similarity-sort panels re-clustered; pedigree progeny node 249 → 243. Every non-Saaz entry byte-identical (349/349). Exclusion test 8/8 incl. must-fail; load check 21/21 HTTP 200, no 404s; viewer suites not run (PI: on request). Backup *.bak_2026-10-08_2215_saaz_excl2. Record hop_atlas/ingest/SAAZ_EXCLUSIONS.md, sync/2026-10-08/saaz_exclusions/.sex:disagree = 138 rows. v05 30/30 on stage and :8900; 7/7 suites on stage. Backup *.bak_2026-10-08_2129_saaz_sexbadge. Record sync/2026-10-08/saaz_sex_badges/.hop_atlas/ingest/ (GBS ×3 kinds, WGS, GRAS-Di, RNA-seq, assemblies), reconstructed from the dated records, plus ingest/README.md (common stage skeleton, rules, PI decisions D1–D7, record errors, pipeline plan). Rendered at /hop_atlas/docs/INGEST.html. components/DOSAGE.md corrected: hop_adosage was merged in 029bf81./). The former bare directory listing of scratch_plots/ is replaced by /hop_atlas/files.html. A shared nav bar was added to every page of all three atlases and the docs via stage → test → deploy: introgression 7/7 suites, ribbon 7/7, dosage 3/3; check_nav.py 11/11 pages on :8900. Backups *.bak_2026-10-08_1908_nav_2026-10-08.ADDING_DATA.md, a data type × atlas audit of the workflows for adding samples (answer: no generic workflow yet; gaps listed).structural_atlas/similarity.html (ranking / one vs all chromosomes / matrix, from the existing pair_distances_v2.tsv; no recomputation). Tests: 12/12 plus the 6 existing verifiers on the stage, then deployed (backups *.bak_2026-10-08_1834_similarity_2026-10-08)./data/hop_data/lineage_refinement/stage_viewer{,_v2,_v3,_v4}, lineage_refinement/stages, /data/hop_data/atlas_stages; about 4 GB), each logged as removed in data_products.tsv. They were checked first: no served symlink, process or reference used them, and the served viewer_lineage is byte-identical to the v2 copy;hop_atlas/ (this folder) for the three components.annevo_eval/docs/*_ATLAS_UPDATES.md (stubs left).annevo_eval/scripts/ (forwarding stubs left).:8900/hop_atlas/.sync/ onto :8900 (/dosage_atlas/).scratch_plots/dosage_atlas/.sync/ folders were moved byte-for-byte to /data/hop_data/hop_atlas/dosage_sources/ (checksum manifests; .MOVED.txt pointers).family_shared_site_dosage link was fixed.?ped=);*.bak_2026-10-08_prelineage, *.bak_2026-10-08_prepedigree.atlas_deploy.py (all components) and update guides for the ribbon and dosage atlases. Ribbon 6/6 verifiers and dosage browser checks pass on stages, with must-fail controls.pilgrim_wye preset (source: sync/2026-10-07/pilgrim_in_atlases/).START_HERE.html.bak_2026-10-07).sync/2026-10-05/dosage_explorer_v2_sexpanel/).sync/2026-10-04/dosage_explorer_v2/).osu_PRJNA1424574_introgression_atlas; backups *.bak_2026-10-03*).structural_atlas/PIPELINE_{CASCADE_ROW,CANDIDATES,GENOMEWIDE,JUNCTIONS}.sh).sync/2026-10-02/osu_introgression_atlas/; backups *.bak_2026-10-02_osu).structural_atlas/PROVENANCE_V2.md).sync/2026-09-28/dosage_explorer/, now archived).annevo_eval/docs/INTROGRESSION_ATLAS_TECHNICAL.md).