env_reference --check and the Conventions env-reference rule took any
backticked APS5_*/ANYPS5_* name in docs/dev/ENVIRONMENT.md as a row.
A name mentioned in another row's description, or in prose, was taken
as documented: deleting the APS5_PROFILE_DRAW row still passed because
the APS5_VERIFY_MASKED_RESULT_MEMO row mentions it, and a description
naming a variable the code no longer reads was reported as a stale row.
Match the name only in the first cell of a table row. Every name in
ENVIRONMENT.md today has its own row, so the check still passes on main.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Q3BmiDsmpK7YCTNK2H4tzm
env_reference --check reported APS5_PAD_SPEAKER_FALLBACK_DB as stale on upstream main: its row in docs/dev/ENVIRONMENT.md was correct, but the reader in core/libs/prx/libSceAudioOut/src/AudioOut2PadMix.cpp calls std::getenv(AUDIO_PAD_SPEAKER_FALLBACK_ENV), and the name is only a constant (core/libs/prx/libSceAudioOut/src/AudioOut2PadMix.hpp, https://github.com/boykopovar/AnyPS5/blob/b1b5353cfcee098ed17e3ba8a6e616bee97c9215/core/libs/prx/libSceAudioOut/src/AudioOut2PadMix.hpp#L16). The scanner only matched literal names.
Now a string constant declared as NAME = "APS5_..." or "ANYPS5_..." is collected across all scanned files, and a getenv-family reader whose argument is that identifier counts as a read of the name. An identifier bound to two different names is ignored, so no name is invented. Literal reads are unchanged.
The Windows crash report reads APS5_CRASH_STACK_BYTES through
EnvironmentNumber, which env_reference did not recognize, so the name had
no row in docs/dev/ENVIRONMENT.md and neither the reference check nor the
conventions check reported it. Recognize the reader as an integer reader
and add the row.
A mistyped --root (or running from another directory) was skipped silently,
so --check reported every documented name as stale.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
source_files compared every component of the absolute path against SKIP,
so a --root inside a directory named build or 3rdparty yielded no files.
Only components below the scan root are compared now.
Co-Authored-By: Claude Opus 5.5 <[email protected]>