Repository navigation
Add Hi-C, Strand-seq and Iso-Seq assay terms, declared from HPRC's submitter tables (#399) - #764
Merged
Merged
Conversation
…PRC's tables (#399) - assay_type_enum: Hi-C (EFO:0007693) and Strand-seq (EFO:0008952), with no parent among the values; Iso-Seq, OBI's isoform sequencing (OBI:0002575) under RNA-seq, since EFO has no long-read RNA term (EBISPOT/efo#2842 open). The term's description records why. - value_map: assay_type.hi_c declares Hi-C beside its modality; assay_type.isoseq authored (Iso-Seq, transcriptomic); assay_type.strandseq new (Strand-seq, genomic). - slot map: ANVIL_HPRC's sample.strandseq gives assay_type from its column name; evidence re-imported as generation 20261027T015110Z (+1,728 strandseq lines, nothing else changed). - consistency rule assay_for_genomic admits Strand-seq; manifest survey's name tokens give hic and strandseq their terms; CLAUDE.md's assay_type_enum note. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS
Against main's run 20261026_120218 (bdf43ce): assay_type +768 Hi-C and +1,728 Strand-seq in ANVIL_HPRC, +3,002 Hi-C and +230 Iso-Seq in AnVIL_HPRC_R2; data_modality +1,728 genomic in ANVIL_HPRC (Strand-seq), and the 230 Iso-Seq files' transcriptomic now credited to the submitter table beside inference. Inference output is unchanged. The review queue loses `isoseq`; the unprocessable report's ANVIL_T2T examples are another five of the same 23 (#732). docs/sample-conflicts.tsv is left as main's (same lines, worker order, #750). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS
…ree docstring - The Iso-Seq row's reason cites the term's description for why OBI, instead of restating it; the Strand-seq row's and the consistency rule's descriptions drop the method restated from the term's; the Iso-Seq term's description ends without restating the EFO request. - test_consistency: the WGS case joins the parametrized assay/modality test. - test_value_map's docstring names SEEDED_IN_BUNDLED_TABLE rather than counting it. - Rules report and review queue regenerated for the reworded reasons. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS Co-authored-by: cc-claude-tools <cc-claude-tools@clevercanary.com>
…eason is the information measured, no stale "Hi-C has no term" - validation_maps: HPRC's isoseq / Iso-Seq map to the enum term `Iso-Seq`, not `ISO-seq`; the comment no longer says Hi-C and Iso-Seq have no term. - value_map: the Strand-seq reason argues from what is measured (the DNA sequence and its structure), not the molecule sequenced, which the table refuses as modality evidence. - Tests whose comments or example raw values called Hi-C a vocabulary gap use CenSat. - assay_type_enum's description scopes "nearest EFO ancestor" to name Iso-Seq's OBI-based parent; the Iso-Seq description scopes "the one term" to EFO and OBI. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS Co-authored-by: cc-claude-tools <cc-claude-tools@clevercanary.com>
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Final human review should confirm the ontology choices and externally stored evidence generation’s provenance.
No open issues 🎉
What changed in this PR
Adds Hi-C, Strand-seq, and Iso-Seq to Meta-disco’s assay vocabulary, addressing the assay-term portion of #399 through submitter-evidence translations rather than new inference rules.
Changes:
- Defines the three assay terms and ontology identifiers, with Iso-Seq under RNA-seq.
- Updates evidence routing, translations, consistency checks, and lookup tables.
- Adjusts vocabulary tests and refreshes reports showing 5,728 newly classified assay values.
| File | Description |
|---|---|
tests/test_value_map.py |
Updates vocabulary-gap fixtures and remaining queue expectations. |
tests/test_source_evidence.py |
Uses CenSat as the raw vocabulary-gap example. |
tests/test_rule_engine.py |
Replaces the Hi-C state-claim example with CenSat. |
tests/test_hprc_validation.py |
Expects canonical Iso-Seq spelling. |
tests/test_consistency.py |
Checks Strand-seq and Iso-Seq modality compatibility. |
tests/test_claim_record.py |
Removes Hi-C from a vocabulary-gap comment. |
tests/test_assay_type_vocabulary.py |
Pins new terms’ ontology identifiers and parents. |
src/meta_disco/validation_maps.py |
Maps HPRC Iso-Seq spellings to the canonical term. |
src/meta_disco/sources/anvil_slot_map.yaml |
Routes the Strand-seq column to assay evidence. |
src/meta_disco/schema/classification.yaml |
Defines the new assay terms and their rationale. |
src/meta_disco/schema/classification_model.py |
Updates the generated assay enum and documentation. |
src/meta_disco/rules/value_map.yaml |
Declares assay and modality translations. |
src/meta_disco/rules/consistency_rules.yaml |
Allows Strand-seq for genomic data. |
src/meta_disco/manifest_survey.py |
Recognizes Hi-C and Strand-seq name tokens. |
schema/tests/test_output_validation.py |
Updates the unrestricted raw-evidence example. |
docs/unprocessable-report.md |
Refreshes the run reference and failure examples. |
docs/rules-report.md |
Reports new declarations and application counts. |
docs/review-queue.html |
Refreshes the queue and authored translation display. |
docs/review-queue-report.md |
Removes translated Iso-Seq values from the queue. |
docs/reconcile-report.md |
Records classification gains and evidence counts. |
docs/consistency-report.md |
Refreshes the inference consistency run reference. |
CLAUDE.md |
Documents the expanded assay vocabulary. |
Review effort: Balanced
Same counts as run 20261026_185725 against main's 20261026_120218: assay_type Hi-C +3,770, Strand-seq +1,728, Iso-Seq +230; data_modality genomic +1,728. What moves is the run named, the Strand-seq reason's wording, and tie order (#732, #750). docs/sample-conflicts.tsv is left as main's. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS Co-authored-by: cc-claude-tools <cc-claude-tools@clevercanary.com>
…t EFO parents, accurate reasons - Iso-Seq keeps OBI's isoform sequencing (Dave, 2026-10-27); its description, the enum's and CLAUDE.md now name EFO's FL-cDNA (EFO:0003755) as the nearest EFO term and why it was not taken (broader, SRA's Sanger-era cDNA strategy too, under RNA assay not RNA-seq), instead of saying EFO has none. - Hi-C's and Strand-seq's descriptions list their direct EFO parents. - Reasons: hi_c's `hic` is a table- or column-name span; isoseq quotes the kinnex table's design_description; strandseq says what is read (template strands) and so what is measured. - validation_maps' docstring drops "its own spelling where our vocabulary has no term"; assay_for_genomic says Strand-seq cannot reach it yet (the linter reads inference output). - Synthetic test rows declaring Hi-C genomic use WGS instead. - Rules report and review queue regenerated for the reworded reasons. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS Co-authored-by: cc-claude-tools <cc-claude-tools@clevercanary.com>
…and translation-table hash are the PR's (#399) Classified at 6edf390 (inference unchanged since: only reasons, descriptions and tests moved), reconciled at e6bf23f. Every count is unchanged; only the provenance lines move. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS Co-authored-by: cc-claude-tools <cc-claude-tools@clevercanary.com>
Collaborator
Author
|
Findings from the no-context review with no review thread, and what became of each: Fixed (e6bf23f):
Declined (Dave, 2026-10-27):
🐦 Built with cc-claude-tools |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #399 (its assay terms only; Bionano, seqspec, chains and GRCm39 stay open there)
What changed
assay_type_enum(src/meta_disco/schema/classification.yaml, generated model regenerated):Hi-C: EFO:0007693. No parent among our values; its EFO parents, the chromosome conformation capture terms, aren't values here.Strand-seq: EFO:0008952. No parent among our values.Iso-Seq, titled "Isoform sequencing": OBI:0002575, underRNA-seq. EFO has no long-read RNA term, so this uses OBI's; the term's description records why (see Assumptions).rules/value_map.yaml):assay_type.hi_cnow declaresassay_type: Hi-Cbeside its existing modality.assay_type.isoseqis authored for the first time:Iso-Seq,transcriptomic.assay_type.strandseq:Strand-seq,genomic.sample.strandseqcolumn now givesassay_typefrom its name, assample.hicalready does.20261027T015110Z. The only difference from20261012T192136Zis 1,728 newstrandseqassay lines.assay_for_genomicadmitsStrand-seq.hicandstrandseqtheir terms, and HPRC validation mapsisoseqtoIso-Seq.assay_type_enumnote.Why
AnVIL's HPRC submitter tables already state these assays: HPRC_R2's
hicandkinnextables, and thehicandstrandseqcolumns of ANVIL_HPRC'ssampletable. Their files stayed unclassified for assay type only because our vocabulary had no term to translate them into. #399 recorded these as vocabulary decisions owed; this change makes the three assay decisions.Assumptions I made
Iso-Seq's id comes from OBI, not EFO. I compared how others name this data:
FL-cDNA(EFO:0003755), any sequencing of full-length cDNA. It is broader (SRA uses it for Sanger-era cDNA libraries too) and sits under EFO's RNA assay rather than RNA-seq. The no-context review found it; Dave kept OBI's term (2026-10-27), and the term's description records why FL-cDNA was not taken.isoform sequencingis defined as sequencing a cDNA library enriched for full-length reads. That fits PacBio's Iso-Seq and Kinnex and names the method rather than a vendor's kit. Direct RNA sequencing has its own OBI term, so it stays separate.long read RNA-seq, under its own placeholder idNTR:0000445.Dave chose OBI's id over a term of our own with no id. The value is
Iso-Seqand the title "Isoform sequencing", the same pattern asWGS/ "Whole genome sequencing". If EFO imports the term, itsmeaningcan move to EFO's id.Hi-C and Strand-seq sit at the top level, as
Methylation arrayandGenotyping arraydo: none of their EFO parents is one of our values.Strand-seq's modality is
genomic: it measures the DNA sequence and its structure, from template strands phased into haplotypes and inversions. MODAL'sgenomichas no child after Drop data_modality terms that name a method, not a biological signal (genomic.assembly and its siblings) #756. The reason argues from what is measured, not from the molecule sequenced, which the table already refuses as modality evidence for SRA'sGENOMIC.Iso-Seq's row also declares
transcriptomic. This agrees with inference's existing answer on all 230 files.Translation rows only. No inference rule claims these assays. The consistency linter reads inference output, so a Hi-C ↔ modality rule would never fire; that belongs with Run the consistency linter over the reconciled run, not only inference output #597.
docs/manifest-survey.mdis not regenerated. It still says Hi-C has no term, but regenerating it would also pull in unrelated changes from a newer manifest download (aduos_dataset_registrationtable, afile_pathcolumn).The evidence re-import writes into the shared
data/folder. Until this merges, a run from main in another clone would liststrandseqin the review queue, because main has no row for it. The PRIMED change (Read a PLINK .psam's sample IDs as its fileset's samples: PRIMED's 11,414 genotype files #751) did the same.How to verify
make test-all lint-all format-check validate-metadata. Everything should pass.src/meta_disco/schema/classification.yaml, findHi-C(EFO:0007693),Strand-seq(EFO:0008952) andIso-Seq(OBI:0002575,is_a: RNA-seq). Iso-Seq's description should say why the id is OBI's.tests/test_assay_type_vocabulary.pypins all three.make review-queue. Indocs/review-queue-report.md,isoseqshould no longer be queued, and the rowsassay_type.hi_c,assay_type.strandseqandassay_type.isoseqshould show what they declare.ls data/source_evidence/anvil/anvil15/ANVIL_HPRC/should list20261027T015110Z. Compared with20261012T192136Z, itssample.ndjsonshould add exactly 1,728 lines, allassay_typestrandseq, and the other three files should be identical.20261026_194027, classified at6edf390, reconciled ate6bf23f; since then only reasons, descriptions and tests changed, so the inference output stands): runmake classify, then compare itsreconciled/reconcile_report.jsonvalueswith main's run20261026_120218(mainbdf43ce). You should see:assay_typeHi-C +768 and Strand-seq +1,728;data_modalitygenomic +1,728.assay_typeHi-C +3,002 and Iso-Seq +230.#399's definition of done, for the three tokens this covers:
hicandHi-C→Hi-C,isoseq→Iso-Seq,strandseq→Strand-seq.Review findings declined (Dave, 2026-10-27), recorded in a PR comment:
strandseqline.docs/manifest-survey.mdis not regenerated (see Assumptions).🤖 Generated with Claude Code
https://claude.ai/code/session_01VF7tbFa5ZTmYWZ6JWKiBBS
🐦 Built with cc-claude-tools