This file is hand-written, not generated. It records and interprets the output of the
committed scripts in this folder; the machine-readable outputs (withfrom_resolution.json,
reference_projection.json, corrections.json) are the artifacts a re-run reproduces. Writing
it by hand deliberately avoids the regeneration trap where a hand-edit to a generated report is
silently reverted by the next run — the JSON is the claim, this prose interprets it.
Reproduce with:
uv run python genes/human/AFF3/AFF3-bioinformatics/resolve_withfrom.py
uv run python genes/human/AFF3/AFF3-bioinformatics/reference_projection.py
uv run python genes/human/AFF3/AFF3-bioinformatics/term_relations.py
uv run python genes/human/AFF3/AFF3-bioinformatics/corrections_check.py
uv run python genes/human/AFF3/AFF3-bioinformatics/intact_partners.py
uv run python genes/human/AFF3/AFF3-bioinformatics/audit_claims.py --self-test
uv run python genes/human/AFF3/AFF3-bioinformatics/verify_file_quotes.py
fix_intact_counts.py, fix_sign_claim.py, fix_pmid_count.py, apply_review_round1.py and
apply_review_round2.py are one-shot repairs, already applied. They are committed so that every correction this review made
to itself is reproducible and auditable rather than an untraceable hand-edit, and because each
one records in its docstring what was wrong and how the wrong version arose. Each asserts its
anchors are present before replacing, re-greps afterwards, and asserts detected == changed.
resolve_withfrom.py)Every token on all five IBA rows, resolved through UniProt (with primaryAccession asserted
equal to the requested accession, size=10 so an ambiguous xref is reported rather than
silently reduced, and reviewed status tested with entryType.startswith("UniProtKB reviewed")),
then queried in QuickGO for its own evidence on the propagated term.
| token | accession | entry | status | organism / gene | candidates returned | own EXP codes for the propagated term |
|---|---|---|---|---|---|---|
MGI:MGI:106927 |
P51827 | AFF3_MOUSE | Swiss-Prot | mouse Aff3 — true orthologue | 10 | IDA, IMP |
MGI:MGI:1100819 |
O88573 | AFF1_MOUSE | Swiss-Prot | mouse Aff1 — paralogue | 10 | IDA |
MGI:MGI:1202294 |
O55112 | AFF2_MOUSE | Swiss-Prot | mouse Aff2 — paralogue | 3 | IMP |
FB:FBgn0041111 |
Q9VQI9 | AFFL_DROME | Swiss-Prot | Drosophila lilli — sole fly AFF | 3 | IMP, IGI, IPI |
UniProtKB:P51825 |
P51825 | AFF1_HUMAN | Swiss-Prot | human AFF1 — paralogue of the recipient | 1 | EXP, IMP |
PANTHER:PTN000829417 |
— | — | n/a | PANTHER tree node, not a protein | — | unqueryable |
Per-row donor counts, exactly as GOA gives them:
| row | tokens | protein tokens | donors with own experimental evidence |
|---|---|---|---|
GO:0006355 regulation of DNA-templated transcription |
5 | 4 | 4 |
GO:0003712 transcription coregulator activity |
2 | 1 | 1 |
GO:0006354 DNA-templated transcription elongation |
2 | 1 | 1 |
GO:0050877 nervous system process |
3 | 2 | 2 |
GO:0032783 super elongation complex |
2 | 1 | 1 |
So the "these donors only carry the same family-level inference" objection is false on every
row — it is testable here, and it fails, which is the expected outcome given that IBA
WITH/FROM lists experimentally-annotated members by construction.
Which term each donor actually holds (the ACRV1 question — not merely whether it holds one):
| row | donor | donor's own term | verdict on precision |
|---|---|---|---|
GO:0006355 |
mouse Aff3 P51827 | GO:0006355 (IDA+IMP, PMID:25162227) |
lands exactly on the donor's term |
GO:0006355 |
mouse Aff1 O88573 | GO:0045893 (IDA, PMID:9365243) |
donor is one level below; sign-specific |
GO:0006355 |
human AFF1 P51825 | GO:0032786, GO:0032968 (IMP) |
donors below; two different children |
GO:0003712 |
lilli Q9VQI9 | GO:0003712 (IMP, PMID:11171404) |
lands exactly on the donor's term |
GO:0006354 |
human AFF1 P51825 | GO:0006354 (EXP, PMID:22547686) |
lands exactly, but the donor's paper measured Pol II |
GO:0050877 |
mouse Aff2 O55112 | GO:0007611 (IMP, PMID:11923441) |
donor is two levels below |
GO:0050877 |
lilli Q9VQI9 | GO:0007611 (IMP, PMID:18310460) |
donor is two levels below |
GO:0032783 |
lilli Q9VQI9 | GO:0032783 (IPI, PMID:22195968) |
lands exactly on the donor's term |
RETRACTED, and corrected here rather than deleted. An earlier draft of §1 stated that the
GO:0006355 donors disagree in sign — reading GO:0032786 as negative-branch by proximity to
GO:0032785. §3 refutes it: GO:0032786 is positive regulation of transcription elongation,
a descendant of GO:0045893, so every signed donor on that row points the same way, and
GO:0045893 is itself a descendant of GO:0006355, i.e. a positive child was available and
unused. The AEBP2 donor-disagreement test therefore does not apply.
What keeps the row at the unsigned parent is the recipient, not the donors: AFF3's own output
runs both ways — it represses XIST from the silent allele in HEK293T and IMR-90, while with
ZFP281 it establishes a permissive chromatin state at the Meg3 enhancer and its over-expression
raises 84% of the transcripts it changes in mouse cortical cells. A positive-only term would be
false for the repressive half. The specific negative instance is proposed as a separate
GO:0045892 row instead of by refining this one.
The GO:0050877 donors, by contrast, agree on GO:0007611 and the row sits two levels
above it. That is a granularity mismatch relative to the donors — but the specific term is not
supported for AFF3 itself, so the row is kept general rather than refined.
AFF3's own human nervous-system evidence then splits across the branch boundary, and §3 measures
where the boundary falls. GO:0050890 cognition is under GO:0050877, so the intellectual
disability, seizures and the GCC-expansion education association are inside the term and do
corroborate the row; GO:0021795 and GO:0001764 are not, so the cortical-migration evidence
is outside it and belongs on the separately proposed row. Offering both halves together as the
row's grounding — which an earlier draft did — conflates on-branch corroboration with off-branch
evidence, and that is what review round 1 caught.
GO:0006354 carries PANTHER:PTN000829417|UniProtKB:P51825 on AFF1, AFF4 and AFF3 —
identical bytes in all three GOA records.
| recipient | is P51825 the recipient? |
evidential status of the row |
|---|---|---|
| AFF1 (P51825) | yes | self-referential: a PAINT curator judging the function core |
| AFF4 (Q9UHB7) | no | paralogue-derived |
| AFF3 (P51826) | no | paralogue-derived |
term_relations.py)22 claims, all verified against QuickGO with relations=is_a,part_of only (so regulates
edges cannot be mistaken for subsumption). The script exits non-zero if any claim is wrong.
| claim | result |
|---|---|
GO:0006368 is a descendant of GO:0006354 |
true — the MODIFY is a downward move |
GO:0006355 is a descendant of GO:0010468 |
true — the InterPro row is a redundant ancestor |
GO:0007611 is a descendant of GO:0050877 |
true — the donors sit below the propagated term |
GO:0001764 is a descendant of GO:0050877 |
false — the developmental branch is unreachable from this term |
GO:0016607 is a descendant of GO:0005654 |
true — nuclear speck refines the nucleoplasm IDA |
GO:0003700 is a descendant of GO:0003712 |
false |
GO:0003712 is a descendant of GO:0003700 |
false — the two are SIBLINGS, so this is a wrong term, not a coarse one |
GO:0030674 is a descendant of GO:0005515 |
false |
GO:0030674 is a descendant of GO:0060090 |
true — adaptor activity is a separate MF branch, not a refinement of protein binding |
GO:0035116 is a descendant of GO:0030326 |
true |
GO:0003712 is a descendant of GO:0140110 |
true |
GO:0045190 is a descendant of GO:0002443 |
true |
GO:0032786 is a descendant of GO:0045893 |
true — it is in the POSITIVE branch |
GO:0032786 is a descendant of GO:0045892 |
false — which is what the retracted §1 premise assumed |
GO:0045893 is a descendant of GO:0006355 |
true — a positive child was available and unused |
GO:0050890 is a descendant of GO:0050877 |
true — cognition IS on-branch, so the ID phenotype is valid grounding |
GO:0007611 is a descendant of GO:0050890 |
true — the donors' term sits one step under cognition |
GO:0021795 is a descendant of GO:0050877 |
false — the migration evidence is the off-branch half |
GO:0003711 is a descendant of GO:0140110 |
true — closes the sibling claim's second leg |
GO:0032968 is a descendant of GO:0045893 |
true — the third signed donor term is positive too |
GO:0003711 is a descendant of GO:0003712 |
false |
GO:0003712 is a descendant of GO:0003711 |
false — the reciprocal pair, so the sibling claim is checked in both directions |
This guard has now caught two of my own claims, which is the argument for having it.
GO:0030674/GO:0005515 claim was written the wrong way round on the first pass.GO:0032786 rows were added after the review was written, to check the §1GO:0032786 is positive, not negative, so theGO:0006355 unsigned was false. TheGO:0050877 reason — the row was grounded in AFF3's human genetics, while theGO:0050890 cognition is under GO:0050877, so theGO:0021795 is not, so the migration evidence is the off-branch half. The reasonGO:0003711/GO:0003712 sibling claim, which the reasonreference_projection.py)Distinct gene products per reference (entities, not annotations; pagination asserted against
len(results), never against a page-size constant).
| reference | annotations | distinct entities | terms | projection? |
|---|---|---|---|---|
PMID:20444755 |
1 | 1 | GO:0034612 IMP on P51826 |
no |
PMID:18616733 |
2 | 2 | GO:0035116 IMP on P51826; GO:0035116 IEP on P51827 |
no — two codes for two observations |
PMID:8555498 |
2 | 2 | GO:0005634 IDA on P51826 and P51827 |
no |
PMID:22547686 |
1 | 1 | GO:0006354 EXP on P51825 (AFF1) |
no — see below |
The finding. PMID:22547686 is the paper that isolated the AFF3-containing SEC-L3, and
its only annotation in all of GOA is on AFF1, the paralogue it contrasts SEC-L3 against.
AFF3 receives the term back as an IBA pointing at AFF1. This is the second instance of the
shape in this family: AFF4's review found PMID:20159561, titled for AFF4, likewise produced
one annotation and it was on AFF1.
The PMID:18616733 result is worth recording as a clean negative: the split is correct
curation, IEP for the mouse embryo in-situ and IMP for the human patient deletion, assigned
to the right species each.
InterPro2GO — each of AFF3's three signatures, mapping fetched individually:
| signature | name | proteins | interpro2go mapping |
|---|---|---|---|
IPR007797 |
AF4/FMR2 family | 5800 | GO:0010468 regulation of gene expression |
IPR043640 |
AF4/FMR2, C-terminal homology domain | 4950 | GO:0005634 nucleus |
IPR043639 |
AF4 interaction motif | 3235 | none |
This reproduces AFF4's committed measurement exactly. No molecular-function term is produced
by any signature, so the fold-to-activity hypothesis does not confirm on AFF3 — reported as a
non-confirmation, not manufactured into a GO action.
ARBA — ARBA00026330, named in the GO_REF:0000120 row's WITH/FROM, has 1309 condition
sets; exactly one reaches AFF3:
IPR007797 AND IPR043640 AND taxon Eukaryota -> GO:0005634
The combinatorial reference is not three independent witnesses. GO_REF:0000120's tokens
are ARBA:ARBA00026330 | InterPro:IPR043640 | UniProtKB-SubCell:SL-0191. The ARBA rule's own
condition set is IPR007797 + IPR043640, so IPR043640 is counted twice; and SL-0191
derives from UniProt's own SUBCELLULAR LOCATION: Nucleus. line, which carries no evidence
tag. One signature, counted twice, plus UniProt citing itself. The row is still correct — AFF3
has its own nucleus IDA — but the apparent triple corroboration is illusory.
QuickGO returns exactly 11 annotations for UniProtKB:P51826, matching the 11 rows of
AFF3-goa.tsv. UniProt's DR GO lines additionally carry two Ensembl-Compara projections:
| term | UniProt route | verdict |
|---|---|---|
GO:0003690 double-stranded DNA binding |
IEA:Ensembl |
correct and missing from GOA — proposed as a NEW row on the human in vitro assay (PMID:8555498) |
GO:0003700 DNA-binding transcription factor activity |
IEA:Ensembl |
wrong for AFF3 — filed as a UniProt/Ensembl correction, not a GO action |
GO:0003700 requires binding "a specific double-stranded genomic DNA sequence (sometimes
referred to as a motif) within a cis-regulatory region", and its usage comment warns against
this exact case. AFF3 is recruited by ZFP281/ZFP57 and its own DNA binding is non-specific.
The mouse source rows (PMID:25162227, IDA + IMP) rest on ChIP-qPCR of over-expressed HA-tagged
Laf4 at a single promoter, framed by the authors as testing a "potential direct transcriptional
regulator".
Correction to a sibling review's premise. AFF4's merged review states that AFF3's only
experimental molecular function is DNA-binding transcription factor activity. Read from AFF3's
own record, human AFF3 has no experimental molecular-function annotation at all — its only
MF row is the GO:0003712 IBA. The GO:0003700 IDA is on mouse Aff3.
A related stale projection, found while querying the donor: mouse Aff3 holds
GO:0016604 nuclear body and GO:0005829 cytosol by ISO GO_REF:0000119 from human
P51826, while human AFF3 currently carries neither.
corrections_check.py)31 PMIDs cited anywhere in the review, the notes or the affinage record, checked by two routes:
PublicationType on the article, and CommentsCorrections/RefType on the article's own record
(the second catches Errata and Publisher Corrections that a publication-type search cannot see).
1 of 31 flagged; no retractions and no expressions of concern.
PMID:20444755 carries an ErratumIn reference to Ann Rheum Dis. 2011 Aug;70(8):1519 whose
PubMed id is null. Not resolvable by the two fallback routes either: Crossref returns empty
relation, update-to and updated-by for 10.1136/ard.2009.118406, and Europe PMC returns 0
hits both for that journal/year/page and for a citing Published Erratum. Its scope is therefore
unestablished — and the REMOVE verdict on that row deliberately does not rest on it.
GO:0005515 adjudication: AFF3 has no GO:0005515 rows in GOA, so thereintact_partners.py / intact_partners.json:| partner | records | publications | methods | MI scores |
|---|---|---|---|---|
| CDK9 (P50750) | 6 | 5 | 3 | 0.35 and 0.73 |
| PIP4K2A (P48426) | 2 | 2 | 1 | 0.35 |
| MLLT1 (Q03111) | 2 | 1 | 1 | 0.35 |
| TFRC (P02786) | 1 | 1 | 1 | 0.4 |
| ERP29 (P30040) | 1 | 1 | 1 | 0.4 |
| SYT2 (Q8N9I0) | 1 | 1 | 1 | 0.35 |
| DISC1 (Q9NRI5) | 1 | 1 | 1 | 0.37 |
The two SEC modules AFF3 bridges, CDK9 and MLLT1/ENL, are both present and GOA has curated
neither - an under-curation datum, not an over-annotation one. The scale of the gap,
measured across the family in one QuickGO call so a zero cannot be a rejected query:
| gene | GO:0005515 rows in GOA |
|---|---|
| AFF4 (Q9UHB7) | 15 |
| AFF1 (P51825) | 3 |
| AFF3 (P51826) | 0 |
The two paralogues are the positive controls: the endpoint works and the term is alive for
them in the same request, so AFF3's zero is a real absence. It is a curation asymmetry rather
than a biological one — AFF3's CDK9 contact is the most replicated of the three in IntAct. The first version of this
section was hand-counted and said "5 records across 4 distinct publications and 4 distinct
methods with MI 0.73" for CDK9. All four numbers were wrong. That is why the counts are now
derived from a committed script and quoted from its output table rather than written in prose.
- GOA-stub under-seeding (the ADAMTSL5 failure mode): the GOA TSV has 11 data rows and the
fetch-gene stub seeded 11 entries. They reconcile exactly; no GO:0005515 or
same-term/different-assigner rows were collapsed.
- Fold-to-activity propagation: not confirmed (§5). Fourth consecutive non-confirmation of
that lead in this campaign.