Manufacturer input maps to one canonical spelling (seed list plus
whatever the database and cache already use), so Philips is never
philips/PHILIPS. Identity fields no longer duplicate into the device
page specs (the site renders them from metrics.json); the weight scan
ignores index.md so a fresh run starts at weight 1.
Interactive loop around lamp_export.py: scan an EAN (checksum
validated, optional for barcode-less lamps), resolve it against
previous lamps / a local cache / upcitemdb.com, confirm
identification, record the packaging's advertised values, measure
per the published procedure, and commit the bundle to the
comparison-data repo with a device page stub for the web repo.
Every lamp is keyed by an internal ID (L0001, L0002, ...) so one EAN
can cover several versions (daylight/warm white variants) and
unbranded lamps work. lamp_export.py passes optional ean, variant,
and rated (advertised values) fields through into metrics.json.