UniProt Q5BKX5 (ACTMP_HUMAN), HGNC:24758, 351 aa (canonical isoform 1, MANE-Select
ENST00000378313.7), chromosome 19. PE 1: Evidence at protein level. Formerly C19orf54;
renamed ACTMAP after the 2022 identification of its activity.
Reviewed 2026-07-26 (PAINT + affinage campaign). Sources used: ACTMAP-uniprot.txt,
ACTMAP-goa.tsv, ACTMAP-deep-research-affinage.md (gates_passed: True, faith 100%),
three primary/secondary PMIDs, QuickGO, IntAct, PANTHER PTHR28631, and the computed audit in
ACTMAP-bioinformatics/RESULTS.md.
ACTMAP is the protease that performs the noncanonical, post-translational step of actin
N-terminal maturation. The initiator methionine of cytoplasmic actin is not removed
co-translationally by methionine aminopeptidase; it is Nt-acetylated and then excised, as a whole
Nα-acetyl-methionine, by ACTMAP:
So the pathway order is: translation → Nt-acetylation of Met1 → ACTMAP cleaves acetyl-Met1 →
NAA80 re-acetylates the newly exposed Asp2/Glu2 → mature actin. For muscle α-actins the initiator
Met is removed canonically and ACTMAP then removes the acetylated Cys.
UniProt records four Rhea reactions for this, all of which release a substituted amino acid,
not a free one:
N-acetyl-L-methionine (Rhea:74571)UniProt's own EC assignment is deliberately unspecific:
[file:human/ACTMAP/ACTMAP-uniprot.txt "EC=3.4.11.- {ECO:0000269|PubMed:36173861}"] — i.e. not
EC 3.4.11.18.
REGION 124..244 [file:human/ACTMAP/ACTMAP-uniprot.txt "/note=\"Peptidase C39-like\""] and ACT_SITE 132.ECO:0000269|PubMed:36173861).Conclusion: the protease call is not domain-name-derived. It is a mutated-residue call
supported twice by independent labs and methods. GO:0070005 cysteine-type aminopeptidase
activity is therefore well earned on the mechanism axis.
GO:0004239 is the wrong term, and it is a term-scoping problem, not a curator errorGO:0004239 initiator methionyl aminopeptidase activity is annotated to ACTMAP twice (IDA by
UniProt from PMID:36173861; IEA by Ensembl ortholog projection). Three computed observations, all
in ACTMAP-bioinformatics/RESULTS.md:
3.4.11.18 — theN-acetyl-L-methionine, and UniProt gives it EC 3.4.11.-, explicitly not 3.4.11.18. TheGO:0004239 and GO:0070005 are descendants of GO:0008238 exopeptidase activity, whoseGO:0008242 omega peptidase
activity (EC 3.4.19.-, 3.4.19.1 acylaminoacyl-peptidase) is not under exopeptidase andGO:0016920 pyroglutamyl-peptidase
activity releases a single N-terminal residue whose α-amino group is blocked, and it sits underGO:0008242 + GO:0008234 (cysteine-type peptidase) and not under GO:0004177under omega peptidase: True, under cysteine type
peptidase: True, under aminopeptidase: False.9606,10090,7227,7955,559292): 86 annotations on 74 gene products, of whichQ5BKX5, mouse J3QPC3, zebrafish B0V3H4,Q9VCE8) and 70 are not — METAP1, METAP1D, METAP2, yeast MAP1/MAP2,RNPEPL1, fly MAP1A/MAP1B/und. So one term is being used both for the cobalt/manganeseCorrection to my own first pass (see §13): the five-taxon census understates the family,
because bovine and Xenopus sit outside those taxa. Querying each reviewed PTHR28631 member
directly gives 6 of 6 carrying GO:0004239 — A6QQD2 (bovine, ISS), B0BM95 (Xenopus,
ISS), B0V3H4 (zebrafish, ISS), J3QPC3 (mouse, IDA+ISS+ISO+IEA), Q5BKX5 (human, IDA+IEA),
Q9VCE8 (Drosophila, ISS). Every non-human one is an ISS/ISO/IEA descendant of the human
annotation.
The right fix is a new term (a cysteine-type omega peptidase for Nα-acetylamino-acid release
from actin), which would correct 6 gene products in 6 species in one edit. Note the term's own
history: GO:0004239 was obsoleted in 2015 and reinstated on 2023-03-14 with the narrow
"initiator methionine" definition (QuickGO comment: This term was reinstated from obsolete);
UniProt's ACTMAP IDA is dated 2023-03-31, 17 days later. So the term choice was a deliberate,
recent curator decision made when nothing better existed — this is a gap in the ontology, not
sloppy curation, and it should be raised as a term request rather than pinned on the curator.
GO:0004239 and GO:0016485 each appear twice: once IDA from PMID:36173861, once IEA
(GO_REF:0000107, Ensembl Compara) with WITH/FROM = UniProtKB:J3QPC3 | ensembl:ENSMUSP00000137189.
Resolved: J3QPC3 → ACTMP_MOUSE, mouse Actmap, 361 aa, Swiss-Prot reviewed, requested accession
returns itself (so not a dead/merged entry). The donor does carry its own experimental
annotation — but from the same publication:
| row term | mouse donor's own evidence | donor WITH/FROM points back at Q5BKX5? |
|---|---|---|
| GO:0004239 | IDA (PMID:36173861), ISS (GO_REF:0000024), ISO (GO_REF:0000119), IEA (GO_REF:0000107) | yes — GO_REF:0000024, :0000107, :0000119 |
| GO:0016485 | IDA (PMID:36173861), ISO (GO_REF:0000119), IEA (GO_REF:0000107) | yes — GO_REF:0000107, :0000119 |
Haahr et al. assayed both the human protein and a mouse knockout, so mouse and human each hold an
independent IDA from the same paper; and three of the mouse donor's four annotations to the term
are themselves projections from human Q5BKX5. The human IEA row therefore adds no evidence
independent of the human IDA it sits beside. It is not wrong — the donor is the true 1:1 ortholog —
so it is kept, but it must not be counted as a second line of support.
ACTMAP acts on actin, so the obvious risk was that actin's own cell-biology terms would leak onto
it (the ROLE_CONFLATION shape that hit ACTL8, where 10 of 11 IBA rows were transfers of β-actin's
specific biology). Checked and refuted: ACTMAP's entire GOA record is 6 rows — cytoplasm, two
protease MF terms, and protein processing. There is no actin-binding, actin-cytoskeleton,
actin-filament, sarcomere or cell-motility term, and no GO:0005515. The conflation that did
occur is at the term level (the MetAP-family term above), not the substrate level.
Also checked, and also negative:
- No IBA rows at all. DR PAN-GO; Q5BKX5; 0 GO annotations based on evolutionary models — PAN-GO
has not annotated ACTMAP despite PTHR28631 being a clean single-subfamily family (1109 proteins,
845 proteomes, 2999 taxa, subfamily PTHR28631:SF1 "ACTIN MATURATION PROTEASE") whose human
member has IDA-grade evidence. That is a PAINT gap, not a PAINT error.
- No paralog problem. PTHR28631 has one subfamily and six reviewed members, one per species
(bovine, Xenopus, zebrafish, mouse, human, Drosophila CG33108) — there is no paralog to
mis-transfer from.
- The renaming did not split the literature. PubMed returns 3 records for C19orf54 and 5 for
ACTMAP; the 3 are a subset of the 5, and the 2 extra are one unrelated paper (a GPS
"ActMAP framework" in Health & Place) plus the JACS study. The old name persists only in
resource metadata (PANTHER family name "UPF0692 PROTEIN C19ORF54", BioMuta; C19orf54), not in
the primary literature.
UniProt's CC INTERACTION block lists 66 partners, and every one is recorded against isoform
Q5BKX5-3. Isoform 3 carries VSP_039884, which replaces residues 1..216 with a 35-residue
alternative N-terminus — deleting ACT_SITE 132 and most of the Peptidase C39-like region
(124..244). Isoforms 2 and 3 therefore cannot be catalytically active.
IntAct directly (/intact/ws/interaction/findInteractions/Q5BKX5, 220 records): 212 of the 216
ACTMAP-side records are against Q5BKX5-3; 197 records have S. cerevisiae as host organism and
are logged as two hybrid array (70) + two hybrid prey pooling approach (70) + validated two
hybrid (67) — i.e. the ACRV1 pattern, three sub-methods of one Y2H screen, so a UniProt
NbExp=3 here is one experiment counted three ways. Only 4 records are anti tag coip in human
cells. Profilin appears nowhere in the IntAct set.
GO has imported none of this, which is the right call. The profilin interaction, by contrast, is
from the primary paper and is well supported:
[file:human/ACTMAP/ACTMAP-uniprot.txt "Interacts (via N-terminus) with PFN2 isoforms IIa and IIb; the"]
… [file:human/ACTMAP/ACTMAP-uniprot.txt "interactions may facilitate efficient cleavage of the acetylated N-"]terminus of
immature actin, and [file:human/ACTMAP/ACTMAP-uniprot.txt "Interacts with PFN1"]; the binding
surface is mapped to [file:human/ACTMAP/ACTMAP-uniprot.txt "The N-terminal proline-rich disordered region contributes to"]
the interaction with PFN2. Corroborated independently:
PMID:42159598.
GO:0005522 profilin binding exists and is informative, and GOA has no interaction annotation at
all — so this is a concrete, fillable gap. Note the caveat: the "may facilitate efficient cleavage"
mechanism is UniProt's hypothesis, so annotate the binding, not a substrate-delivery function.
PMID:36173861
PMID:36173861
PMID:36173861
Despite that knockout being in the same paper, MGI still carries root ND (no data) annotations for
mouse Actmap in all three aspects (GO:0003674, GO:0008150, GO:0005575, GO_REF:0000015). The
sarcomere/muscle-function phenotype is therefore uncurated. It is deliberately not proposed as a
human annotation here: the phenotype is mouse-only and the human evidence is biochemical.
CommentsCorrections via E-utilities for all three PMIDs:36173861 has none; 42159598 is UpdateOf 41757055 and 41757055 is UpdateIn 42159598.42159598) and records 41757055 as LOW relevance / the preprint.PMID:bio_* pseudo-PMIDs in the citation list; all three ids are numeric and resolve.GO:0140096, GO:0016787, GO:0005829) was not imported, per| # | term | evidence | action | why |
|---|---|---|---|---|
| 1 | GO:0005737 cytoplasm | IEA (SubCell) | ACCEPT | faithful mapping of UniProt's own Cytoplasm call; both papers describe ACTMAP as cytosolic, so GO:0005829 is plausible but I could not verify a fractionation/imaging experiment (Science full text unavailable) — raised as a question instead |
| 2 | GO:0004239 initiator methionyl aminopeptidase | IEA (Ensembl) | MODIFY | same term problem as row 5, plus reciprocally circular (§4) |
| 3 | GO:0016485 protein processing | IEA (Ensembl) | ACCEPT | term correct; redundant/circular with row 6, recorded but not a defect in the term |
| 4 | GO:0070005 cysteine-type aminopeptidase | IDA (FlyBase) | ACCEPT | best available MF; mechanism twice-tested (§2); has_input ACTB/ACTG1 added. Verified about the odd assigner: FlyBase holds GO:0070005 and GO:0016485 ISS on fly Q9VCE8 with WITH/FROM UniProtKB:Q5BKX5; that the human IDA was created as the ISS source is inference. It is the only row in GOA capturing the cysteine mechanism, since UniProt annotated only GO:0004239 |
| 5 | GO:0004239 initiator methionyl aminopeptidase | IDA (UniProt) | MODIFY | wrong released product and wrong EC, plus family conflation (§3); the branch argument does not discriminate the replacement and motivates the term request instead |
| 6 | GO:0016485 protein processing | IDA (UniProt) | ACCEPT | core biological process; has_input ACTB/ACTG1 added, which is what records the substrate (§10) |
| 7 | GO:0005522 profilin binding | IPI (proposed) | NEW | §6 |
(Journal order: the case for a process term is recorded first, then the objections that killed it.
The conclusion is the "What replaced it" paragraph — no GO:0030047 annotation is proposed.)
Nothing in ACTMAP's GOA record says the protein it processes is actin. GO:0030047 actin
modification ("Covalent modification of an actin molecule") says it exactly, and the precedent is
already set one step downstream: NAA80 carries GO:0030047 by IDA from three separate papers
(PMID:29581253, PMID:29581307, PMID:30028079; verified via QuickGO for Q93015), alongside
GO:0017190 and GO:0018002 for the N-terminal Asp/Glu acetylation it performs. Human evidence for
ACTMAP is loss-of-function and directly quotable, hence IMP:
PMID:42159598
and PMID:42159598 on
covalent Cys132 engagement.
Withdrawn after review (see §14). Two objections, and the second is decisive:
GO:0030047's ancestors include GO:0030036 actin cytoskeleton organization andGO:0030029 actin filament-based process, so the term hands a substrate-directed enzymeis_a structure rather than through theGO:0016485 protein processing is under GO:0006508 proteolysis and not underGO:0036211 protein modification process; GO:0030047 actin modification is under GO:0036211GO:0006508. So a proteolytic event has no place in the modification branch atGO:0007014 actin ubiquitination, isWhat replaced it. The substrate is recorded with RO:0002233 has_input extensions to ACTB
(UniProtKB:P60709) and ACTG1 (UniProtKB:P63261) on both the accepted GO:0070005 MF row and
the accepted GO:0016485 BP row. That states the same fact with no branch violation and no unwanted
ancestry. The definitional question — whether GO intends "covalent modification" to include
hydrolytic removal — is now the primary suggested_questions item, with the placement question
secondary to it.
ACTR5 and ACTR8 merged into main while this review was in progress (PRs #2290, #2291, #2293),ACTRT3 during round 2 (#2296). Re-checked each time: none mentions ACTMAP, actin maturation,*-ai-review.yaml in the repo for GO:0004239 and GO:0030047: ACTMAP is theACTB, ACTL7A, ACTL7B, ACTL8, ACTR1A, ACTR1B, ACTR10 were checked for statements aboutACTL7A's N-terminal-extension materialcheckquotes.py: all supported_by/provenance/findings quotes in the review verified verbatim,file: quote was additionally required to be anCC continuation line. Clean on every run; the figure is deliberatelyjust validate human ACTMAP: ✓ Valid, one warning left standing deliberately - "No annotationssupporting_text for a mechanistic claim, so citing it would be decorative.cache/go/terms.csv: 0 deletions versus origin/main; exactly 1 addition (GO:0070005) appendedGO:0030047 was removed again when that annotation was withdrawn. Note that just validate de-duplicatedGO:0001675 and GO:0009566, main's two known pre-existing duplicates; that unrelated change wasmain has them.RESULTS.md reproduces exactly and results.json is identical.My first pass wrote "would correct 4 gene products in 4 species", taken from the taxon-restricted
census. That census covers 9606,10090,7227,7955,559292, so it cannot see the bovine (A6QQD2)
and Xenopus (B0BM95) members of PTHR28631, both of which carry GO:0004239 by ISS. The true
figure is 6 of 6 reviewed family members. The number was not wrong as scoped, but the sentence
built on it understated the scope of the fix, which is the load-bearing part of the argument.
Caught by asking each PANTHER-reviewed accession directly rather than reading the census total — the
same "the denominator is set by my query, not by the biology" mistake the campaign has hit before.
The fix is now computed by family_wide_usage() in the script and printed as its own table, so the
two numbers (taxon-restricted census, family-wide count) are visibly different quantities instead of
one being mistaken for the other. All four assertion sites were corrected together
(review.reason, review.knowledge_gaps[0].resolution, suggested_questions[0].question, and these
notes) using a script that asserts each anchor is present before replacing, re-greps afterwards, and
checks that exactly the intended leaf values changed and no structure did. The PR body was the fifth
site and was patched too.
ai4c-reviewer requested changes on one item: GO:0030047 actin modification is a
covalent-modification term proposed for a proteolytic event, the NAA80 precedent is acetylation and
does not transfer, and this very file already demonstrated the side-effect-free alternative —
RO:0002233 has_input extensions.
Checked before conceding, and the check went against me and beyond the reviewer's own argument:
GO:0016485 protein processing is under GO:0006508 proteolysis and not under
GO:0036211 protein modification process, while GO:0030047 is under GO:0036211 and not under
GO:0006508. The branches are disjoint, so this is not a matter of how loosely "covalent
modification" reads — GO's structure already says a proteolytic process does not live there. The
annotation was withdrawn and the substrate moved onto has_input extensions on the two accepted rows.
Both facts are now computed by process_branch_audit() in the script, so the ancestry and NAA80-IDA
claims are no longer the only uncomputed ones.
Four non-blocking suggestions, all taken:
GO:0004239 andGO:0070005 are both under GO:0008238, so ground 2 cannot motivate replacing one with the other.GO:0070005 and GO:0016485 ISS annotations on fly Q9VCE8 with WITH/FROM UniProtKB:Q5BKX5, nowcore_functions.substrates listed ACTA1 where the extensions listed only ACTB/ACTG1. ACTA1description and the core-function description: established for mouse, inferred for human byECO:0000250|UniProtKB:J3QPC3).The reviewer found a genuine bug in the round-2 edit. Adding provenance to the accepted
GO:0016485 row produced two supported_by: keys in the same mapping. PyYAML keeps the last
value for a repeated key, so the two RESULTS.md entries were deleted before any consumer saw them -
the validator, the renderer, the exporters, checkquotes.py, and my own invariant harness alike.
Merged into a single four-entry list; verified by counting supported_by entries on that row (2 → 4)
and by loading the whole file through a duplicate-key-rejecting loader.
The part worth recording is how it hid. The file holds 27 reference_id: file: lines while
the parsed exact-substring check reported 25, and the notes still carried the round-1 figure of
26. I had written "the count moved from 26 to 25 when the GO:0030047 annotation was withdrawn" -
which is arithmetically true (that row carried one file: quote) and wrong as an explanation,
because the same round also added two entries that should have taken it to 27. The coincidence made a
rationalisation look like a reconciliation. This is the campaign's own "do not rationalise a numeric
discrepancy - investigate it" rule, failed on the very number I had just edited.
It is also the "detector and mutator must agree on scope" failure in a new guise: every quote gate
in this repo walks the parsed document, so none of them can see a quote that parsing removed. The
gate reporting clean was not weak, it was blind.
Two guards added so the class cannot recur silently here:
audit_actmap_claims.py now loads the review through a _StrictLoader that raises on areference_id: file: lines in the textsafe_load - so a discarded entry is reported as an arithmeticWhether a duplicate-key-rejecting loader belongs in the shared validator is a good question and
deliberately not answered here: src/ai_gene_review/validation/ is shared infrastructure and out of
scope for a gene PR. Nothing in the repo would flag this today, so it is worth raising separately.
Two further reviewer suggestions, both taken:
render() had its boolean interpolated but its explanatory clauseFalse next to prose asserting theTrue case. The clause is now generated from the per-term flags, with an explicit warning appendedcensus() and family_wide_usage() read numberOfHits for a total but derived their breakdownsresults page. Nothing was truncated at 86 and 6 hits, but the script's contract isassert_complete_page() refuses any response wherelen(results) != numberOfHits and names the fix. Verified by feeding it a synthetic truncated/annotation/search call sitessource_evidence(), the NAA80 probe, the fly-ortholog query and curation_state() were stillsource_evidence() because that is what backs theCIRCULAR_PROPAGATION disposition. The one deliberately unguarded call is the limit=1 probe thatnumberOfHits, where the guard would correctly abort; it is commented as such.Approved in round 3, with three suggestions. Two were accuracy defects in committed files rather than
polish, so they were fixed rather than deferred.
source_evidence() is precisely what theCIRCULAR_PROPAGATION disposition rests on. All six /annotation/search calls now go throughassert_complete_page(); §15 states the coverage and names the single deliberate exception.supporting_text was truthy,reference_id: file: line. All 27 currently carry a quote, butsupporting_text is optional in the schema, so a future bare file: provenance entry would havereference_id alone. Round 5 made that verification reproducible from the repo rather thanfile:The approving review added two observations about the raw-vs-parsed cross-check. Both were right, and
between them they were the last places where this gene's tooling claimed more than it demonstrated.
The self-test could not reach it. Case 7 reintroduces the duplicate supported_by key, but
_StrictLoader raises on it and check_structural() returns before the arithmetic below runs — so
the one check whose whole purpose is to survive a bypass of the loader had no case that fired it, in a
file whose stated standard is "prove every check can actually fire". Worse, §16 recorded a
verification "on a synthetic document" that existed only in a throwaway command, i.e. not reproducible
from the repo — the same defect as the §15 coverage sentence fixed one round earlier. Fixed by
factoring the comparison into _cross_check(raw, doc) and adding a case 8 that calls it directly
on a synthetic (raw, parsed) pair: silent on a matched pair, reporting on a lossy one. Eight cases now,
all firing, clean baseline silent.
The arithmetic covered only file: references. Restricting to file: left the PMID and GO_REF
reference_ids outside it, so a duplicate key discarding a PMID-only supported_by list would have been
invisible to the arithmetic — and the arithmetic exists to back up the loader, not to duplicate a
subset of its coverage. Now counts every reference_id on both sides.
A measurement correction, found by making the check work. The review cites "46 reference_id
lines"; a bare grep -c reference_id: does report 46, and my own grep had agreed. But 7 of those are
original_reference_id: — a different key, naming the annotation's own GOA reference, carrying no
supporting_text and belonging to no list. The honest total is 39, and raw 39 now equals parsed 39.
Two real bugs surfaced from insisting the numbers reconcile rather than adopting the quoted figure:
the first regex omitted the - list marker and matched nothing (reporting a spurious 39-entry
loss), and the same omission made the synthetic self-test assertion fail. Both were visible only
because the check was made to run on real input instead of being reasoned about.
Stopping here. The curation content has been settled since round 2 and the remaining rounds have all
been about the tooling that guards it; the working tree is clean and nothing is outstanding.