# Retired identifiers: <regex><TAB><what to use instead>
#
# A row is added by the commit that retires the name, and it only ever holds
# at zero occurrences -- see scripts/check_retired_names.py for why this is
# data rather than vigilance.
#
# doppler#828: `fec` named the CCSDS-specific half of the coding chain, which
# read as FEC == CCSDS once `conv` and `rs` held the general codes. The
# component is `ccsds_tm` (131.0-B-3) and the prefix follows it. FEC remains
# the honest word for the general subject in prose -- these patterns match the
# IDENTIFIER forms only, which is why `docs/design/fec-receive.md` and "no
# FEC" in a docstring are untouched.
\bfec_[a-z0-9_]+	the ccsds_tm_ prefix (or conv_/rs_ for the general codes)
\bFEC_[A-Z0-9_]+	the CCSDS_TM_ prefix (or CONV_/RS_ for the general codes)

# doppler: `MpskReceiver` and `MpskReceiverR` collapsed into one object with a
# tagged front end, so every `mpsk_receiver_r_*` C symbol is gone -- the
# constructor is `mpsk_receiver_create_real()` and the block API
# `mpsk_receiver_steps_real()` / `_bits_real()`.
#
# The suffix alternation is not verbosity. `mpsk_receiver_r` is a literal
# prefix of the LIVE `mpsk_receiver_reset`, so a bare `\bmpsk_receiver_r`
# would condemn twelve working call sites; and `MPSK_RECEIVER_R_STATE_MAGIC`
# survives DELIBERATELY, keyed on the face so a real blob is refused by the
# complex receiver at the envelope. Matching the identifier forms only also
# leaves the design record's own measurement alone -- mpsk-refactor.md S1-7
# names `mpsk_receiver_r_core.c` because that is what was measured, and a
# rename must not edit history to satisfy itself.
\bmpsk_receiver_r_(create|destroy|reset|steps|bits|get_|set_|configure_|state_)	mpsk_receiver_* (create_real / steps_real / bits_real for the real face)

# doppler#887 follow-through: the bespoke pinned-doxygen image is retired in
# favour of $(CI_IMAGE), which CI's doxygen job actually runs inside. Two
# things answered "give me CI's doxygen" and only one could answer it by
# construction; keeping the loser around invites a second, drifting pin.
doxygen-pin-image	make doxygen-check / gen-c-api, which shim $(CI_IMAGE)
DOXYGEN_PIN_IMAGE	CI_IMAGE (.github/ci-images.env)
doppler-doxygen:	the CI image — see deploy/docker/README.md

# doppler#1312: `next_pow2` was FIVE identical private statics -- det_private.h,
# delay_core.c, psd_core.c, specan_core.c, ppe_core.c -- none reachable from
# the others, none guarding the overflow that makes the doubling loop spin
# forever. The primitive is `next_pow_two` in util_core.h (header-only,
# JM_FORCEINLINE, so including the header is the whole cost). This row is what
# stops a sixth copy: a private one has to name itself something, and the
# obvious name is now refused.
\bnext_pow2\b	next_pow_two (native/inc/util/util_core.h)
# ...and the OTHER spelling, which is how two of the seven stayed hidden from
# a grep for the first: `burst_capture_pow2_ceil` and `dsss_br_pow2_ceil` were
# the same function again, module-prefixed. A name-based gate only works if it
# covers the names people actually reach for.
\b[a-z0-9_]*pow2_ceil\b	next_pow_two (native/inc/util/util_core.h)
