fix: harden audit-fix modules per adversarial review (22 confirmed findings)
- titleOptimizer: word-dedupe removed entirely — it corrupted real names
('BOSS Hugo Boss', 'Johnson & Johnson', 'Duran Duran'); token containment
now whole-word so one-letter sizes append correctly; no leading space on
empty titles
- aspects: placeholder regex narrowed so 'See by Chloé' / 'Check Print' /
'Not Rated' survive; value-splitting requires every part >= 3 chars so
'AC/DC', 'H&M', 'Texas A&M', '9 1/2', 'S/M' stay whole; Features stays
multi-value even when absent from the category schema
- publish: no-schema path collapses multi-values to the safe single-value
behavior; 'already published' recovery keeps quality warnings; 25005
recovery re-queries taxonomy when the suggestion call originally failed;
catalog matching additionally requires a media/hard_goods item profile
- measurements: ranges before a unit keep the right unit ('70-72 cm' no
longer becomes '70 in')
- comps: dropped the 'x 12' lot heuristic (false-positived on dimension
titles like '16 x 20'); added a 10-min in-memory result cache
- identifiers: all-zero barcodes rejected despite passing the GS1 checksum
- aspectFill: ' and ' added to the compound-value rejoin list ('Trinidad
and Tobago'); every prompt-embedded listing field is length-bounded
- ListingCard: zero-price listings show 'needs a price' + warning instead
of '✅ $0.00 · ready'
Tests: 79 passing (regression tests added for each confirmed finding) A
ashnicholes-droid committed
4971657157c25a2f0acfb4b545c4af950eef5da3
Parent: 5f1797c