Add _source field + ctor parameter (between freeplay and log) to InventoryTransaction; pass loadCfg.Source from InventoryService.BeginAsync. Field is captured but not yet consumed — Task 6 wires it into history rows. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>