First name in a deterministic candidate sequence that does NOT collide with a defined type ident: `base` (`"W"`/`"R"`), then `base+suffix` (`"WSer"`/`"RDe"`), then `base+suffix+index` (`"WSer0"`, `"WSer1"`, …). The bare `base` wins whenever nothing is named it, so a spec with no `w`/`r` collision keeps the historical `"W"`/`"R"` names and the snapshot corpus does not churn.
(
taken: &std::collections::BTreeSet<String>,
base: &str,
suffix: &str,
)
source not stored for this graph (policy: none)