← All findingssource · memory/sportlib_is_source_of_truth.md
Known duplicates in scout-service (as of 2026-05-08):
src/batch/plugins/nba/services/prop_prediction_generator.py—PROP_STAT_TYPES+COMBO_STAT_TYPESsrc/batch/plugins/nba/services/combo_props_generator.py—COMBO_TYPESsrc/batch/plugin.py—prop_types()abstract method
Note: scout's NBA prop list is NOT identical to sportlib's NBA props.
Scout has model-internal targets (three_pm, three_pa, ftm, fta,
pra listed as a base prop) that sportlib doesn't enumerate as base props
(sportlib has pra only as a combo). A swap requires reconciling the
two lists, not just substituting.
Plan to fix (when the user says go): vendor registry.json into
src/batch/sportlib/registry.json, add a ~40-line loader, refactor the
three duplicates. Each new league plugin (WNBA, NCAAB) then gets
prop_types() for free.
Why: Hand-coded tables in scout drift from sportlib silently. Every new league plugin re-introduces the same duplication. The user explicitly called this out as the highest-ROI fix.
How to apply: When adding a new league or touching prop-type tables in scout-service, route through sportlib's registry.json. Don't propose a "plugins/basketball/" shared core or any other refactor that sidesteps sportlib — the user has already rejected that direction. Service is sport-agnostic by plugin design; the fix is making plugins consume sportlib, not creating a basketball super-class.