- tools/seed_mock.py: idempotent additive mock data (uuid5 ids) covering all
tables (units, brands, specs, suppliers, materials + EAV/brand/unit links,
projects, warehouses, inventory, quotes with termsheets/line items/decisions,
receipts) so phases 6-7 can be exercised end-to-end
- tools/calibrate_matching.py: A/B difflib vs Jev on 35 scenarios (31 positive
+ 4 negative); collects RAW picks with widened bands, classifies against the
configured thresholds, sweeps EXACT 0.55-0.95 (negatives count as binds),
recommends FLOOR strictly above the highest wrong pick with margin for
±0.05 run-to-run confidence jitter; markdown report + real traces
- matching.py: below-FLOOR picks no longer suppress difflib — they log a
routing.decision event (source=jev-lowtrust) and leave no result so the
existing difflib path keeps its chance (0.54 «پردیس» was lost to «new»)
- config.py: JEV_CONF_FLOOR 0.60 -> 0.65 (removes the جعبه→بسته @0.61 wrong
candidate offer; correct sub-floor picks باق اسپارت/کیلو are difflib-covered)
- test_matching.py: +2 low-trust cases (13/13 mock, 16/16 live)
- docker-compose.yml: mount bot/tools into the bot container