_finalize_result collapses a non-unique canonical index via groupby().first(), silently dropping rows. Found in assets (PR #319): Iraq 2012 (durable_serial -> 25,248 rows) and Albania 2002 (479) silently lost household holdings while still passing is_this_feature_sane. Fixed per-country by summing within (t,i,j), but ANY feature whose source has multiple rows per canonical-index tuple is at risk of silent data loss. Suggest: warn/error on silent dedup, and/or a documented per-feature duplicate-aggregation policy (e.g. assets: Quantity=sum, Value=sum, Age=min).
_finalize_resultcollapses a non-unique canonical index viagroupby().first(), silently dropping rows. Found in assets (PR #319): Iraq 2012 (durable_serial -> 25,248 rows) and Albania 2002 (479) silently lost household holdings while still passingis_this_feature_sane. Fixed per-country by summing within (t,i,j), but ANY feature whose source has multiple rows per canonical-index tuple is at risk of silent data loss. Suggest: warn/error on silent dedup, and/or a documented per-feature duplicate-aggregation policy (e.g. assets: Quantity=sum, Value=sum, Age=min).