Tier 2 — Consolidate. src/Fallout.Utilities/Collections/ (~900 LOC, 23 files) contains many LINQ-like helpers that duplicate MoreLINQ: Enumerable.Distinct.cs (DistinctBy), Enumerable.Random.cs (Random/Shuffle), Enumerable.TakeUntil.cs, Enumerable.ForEach.cs.
Action
Add MoreLINQ; delete the duplicated helpers and redirect call sites.
Keep (genuinely Fallout-specific — do NOT delete)
Enumerable.TopologicalSort.cs (cycle-detecting sort used for target ordering)
LookupTable.cs (mutable ILookup — no BCL/MoreLINQ equivalent)
Enumerable.SingleOrDefaultOrError.cs / Enumerable.ToDictionary.cs (custom diagnostic messages)
⚠️ Breaking change
These are public extension methods. Removal breaks consumers → breaking-change, experimental, batched to yearly major, CHANGELOG migration note. Where feasible, keep [Obsolete] forwarders.
Acceptance
From dependency-consolidation audit, 2026-06-02.
Tier 2 — Consolidate.
src/Fallout.Utilities/Collections/(~900 LOC, 23 files) contains many LINQ-like helpers that duplicate MoreLINQ:Enumerable.Distinct.cs(DistinctBy),Enumerable.Random.cs(Random/Shuffle),Enumerable.TakeUntil.cs,Enumerable.ForEach.cs.Action
Add MoreLINQ; delete the duplicated helpers and redirect call sites.
Keep (genuinely Fallout-specific — do NOT delete)
Enumerable.TopologicalSort.cs(cycle-detecting sort used for target ordering)LookupTable.cs(mutableILookup— no BCL/MoreLINQ equivalent)Enumerable.SingleOrDefaultOrError.cs/Enumerable.ToDictionary.cs(custom diagnostic messages)These are public extension methods. Removal breaks consumers →
breaking-change,experimental, batched to yearly major, CHANGELOG migration note. Where feasible, keep[Obsolete]forwarders.Acceptance
Directory.Packages.propsDistinct/Random/TakeUntil/ForEachhelpers removed or obsoletedFrom dependency-consolidation audit, 2026-06-02.