XPerf
Guides

Rule ID map (historical — numeric → slug)

Aliases are not implemented. Canonical ids are semantic slugs only. This file is a one-time migration reference from the 2026-10-22 rename; CLIs do not accept the left-hand numeric codes.

Removed ids (jitter 2026-10-22) have no slug and must not be reused: CX001, CX003, CX004, BE002, KT004, OC001, OC004, PP004.

arktsperf

OldSlug
AT001at-alloc-hot
AT002at-object-delete
AT003at-console-hot
AT004at-includes-hot
AT005at-json-hot

beamperf

OldSlug
BE001be-list-concat-reduce
BE003be-io-puts-hot
BE004be-map-merge-hot
BE005be-enum-map-filter-chain

Removed (tombstone only):

  • BE002

cperf

OldSlug
CP001cp-alloc-hot
CP002cp-realloc-grow-one
CP003cp-printf-hot
CP004cp-strlen-in-cond
CP005cp-strcat-hot

cppperf

OldSlug
CX002cx-string-append-unreserved

Removed (tombstone only):

  • CX001
  • CX003
  • CX004

csharpperf

OldSlug
CS001cs-list-add-no-capacity
CS002cs-string-plus-hot
CS003cs-console-hot
CS004cs-regex-hot

dartperf

OldSlug
DT001dt-list-add-empty
DT002dt-string-plus-hot
DT003dt-print-hot
DT004dt-growable-add-empty

goperf

OldSlug
GP001gp-make-hot
GP002gp-string-plus-hot
GP003gp-fmt-hot
GP004gp-append-nil-slice
GP005gp-defer-hot

jsperf

OldSlug
JP001jp-alloc-hot
JP002jp-console-hot
JP003jp-delete-shape
JP004jp-delete-array-hole
JP005jp-string-plus-in-loop
JP006jp-map-filter-chain

jvmperf

OldSlug
JP001jp-boxed-primitive-collection
JP002jp-string-concat-hot
JP003jp-regex-hot
JP004jp-format-hot
JP005jp-unpresized-collection
JP006jp-boxed-stream
JP007jp-exception-control-flow
JP008jp-legacy-synchronized-type
JP009jp-many-boolean-fields
JP010jp-enum-key-hash-collection
JP011jp-collection-chain
JP012jp-value-class-boxing
JP013jp-lambda-to-non-inline-hot
JP014jp-lazy-default-mode
JP015jp-data-copy-hot
JP016jp-android-sparse-array
JP017jp-log-hot
JP018jp-sleep-polling
JP019jp-finalize
JP020jp-expensive-alloc-hot
JP021jp-hot-heavy-alloc
JP022jp-hot-format-log
JP023jp-hot-system-call
JP024jp-bitmap-decode-no-reuse
JP025jp-hot-post-lambda
JP026jp-ui-text-append
JP027jp-baos-tobytearray-copy
JP028jp-hot-payload-copy
JP030jp-client-factory-recreate
JP031jp-string-intern-hot
JP032jp-non-static-field-updater

kotlinperf

OldSlug
KT001kt-list-add-hot
KT002kt-string-plus-hot
KT003kt-println-hot

Removed (tombstone only):

  • KT004

luaperf

OldSlug
LU001lu-table-insert-hot
LU002lu-string-concat-hot
LU003lu-print-hot

nimperf

OldSlug
NM001nm-seq-add-hot
NM002nm-string-amp-in-loop (removed, tombstone)
NM003nm-echo-hot
NM004nm-seq-no-capacity

objcperf

OldSlug
OC002oc-nsstring-append-hot
OC003oc-nslog-hot

Removed (tombstone only):

  • OC001
  • OC004

phpperf

OldSlug
PH001ph-string-dot-hot
PH002ph-array-merge-rebind
PH003ph-echo-hot

pyperf

OldSlug
PP001pp-str-plus-hot
PP002pp-list-plus-rebind
PP003pp-print-hot

Removed (tombstone only):

  • PP004

rubyperf

OldSlug
RB001rb-string-plus-hot
RB002rb-array-plus-rebind
RB003rb-puts-hot
RB004rb-hash-merge-in-loop (removed, tombstone)

rustperf

OldSlug
RS001rs-alloc-hot
RS002rs-string-plus-in-loop
RS003rs-println-hot
RS004rs-format-rebind-hot
RS005rs-vec-no-capacity
RS006rs-collect-vec-hot

swiftperf

OldSlug
SP001sp-force-unwrap-in-loop
SP002sp-string-plus-in-loop
SP003sp-print-hot
SP004sp-array-no-reserve
SP005sp-map-joined-chain

zperf

OldSlug
ZP001zp-alloc-hot
ZP002zp-append-without-reserve
ZP003zp-page-allocator-small
ZP004zp-debug-allocator
ZP005zp-large-struct-by-value
ZP006zp-print-hot
ZP007zp-unbuffered-io
ZP008zp-missing-free
ZP009zp-extern-struct-padding
ZP010zp-broad-runtime-safety
ZP011zp-packable-bools
ZP012zp-usize-index-field
ZP013zp-aos-single-field
ZP014zp-catch-unreachable-alloc
ZP015zp-oversized-enum-tag
ZP016zp-optional-scalar-field
ZP017zp-bool-array
ZP018zp-static-string-map
ZP019zp-runtime-div-hot
ZP020zp-queue-ordered-remove
ZP021zp-shift-on-read
ZP022zp-per-packet-alloc
ZP023zp-invariant-float-div
ZP024zp-map-put-without-ensure
ZP025zp-catch-unreachable-io
ZP026zp-arena-reset-free-all
ZP027zp-create-destroy-hot
ZP028zp-fixed-size-alloc-hot

2026-10-27 scope rename (*-in-loop → *-hot)

Default matching is now --scope all (report outside loops too). Slugs that contained in-loop were renamed so names do not imply loop-only scope. Old slugs are tombstoned under each kit's evidence/_removed/*.REMOVED.md and must never be reused. Active ids are listed in each kit's docs/rule-ids.md. Opt in to --scope loop for the former in-loop-only match where the kit supports it.

The numeric → slug rows above remain the historical 2026-10-22 mapping (many targets were later renamed again on 2026-10-27).