Mehrere Barcodes ohne bekanntes Nummernschema, die sich in der
Teilenummer widersprechen, durften bisher nicht mehr Vorrang vor der
per OCR gelesenen Teilenummer erhalten als ein einzelner Treffer -
der erste gewann ungeprueft. Jetzt gilt derselbe Massstab wie bei
verwertbaren Treffern: Vorrang nur bei Eindeutigkeit (ein Code, oder
mehrere mit derselben - via canonical() verwechslungstolerant
verglichenen - Teilenummer). Widersprechen sie sich, stuetzt sich das
Ergebnis allein auf die Texterkennung.
Zusaetzlich: ungueltige @param-Zeile fuer deps in recognize() korrigiert.
Die Barcode-Dekodierung selbst ist normalerweise schnell, doch beim ersten
Scan einer Sitzung muss der Barcode-Adapter sein WebAssembly-Modul laden,
was auf einem Handy mehrere Sekunden dauern kann. Die Zeitgrenze dient nicht
als Leistungserwartung, sondern als Absicherung gegen einen dauerhaft
hängenden Adapter — sie muss deshalb auch das einmalige Laden abdecken.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Barcode- und OCR-Adapter erhalten je eine eigene, ueberschreibbare
Zeitobergrenze (deps.barcodeTimeoutMs / deps.ocrTimeoutMs). Ein
Adapter, der nie einloest, blockiert recognize() damit nicht mehr
dauerhaft und faellt stattdessen auf den Ersatzwert zurueck, genau
wie bei einem geworfenen Fehler. Kein offener Timer bleibt zurueck.
- mergeCompatibleSpecs entfernt: vertraegliche verwertbare
Barcode-Treffer sind wegen der Kopplung von partNumber und den
uebrigen Feldern ohnehin identisch, der erste Treffer genuegt.
Test entsprechend umbenannt, um das tatsaechlich gepruefte
Verhalten zu benennen statt eine nicht mehr vorhandene
Auffuell-Semantik zu behaupten.
- Kommentar in pn-tables.js von einer inhaltlichen Wiederholung
befreit.
recognize() stuerzte ab, wenn decodeBarcodes() etwas anderes als eine Liste
zurueckgab (null/undefined/Objekt), da die for...of-Schleife nicht iterierbare
Werte nicht abfaengt. Nicht-Listen werden nun wie eine leere Liste behandelt,
ebenso wird eine nicht-string-wertige runOcr()-Rueckgabe wie leerer Text
behandelt.
Ausserdem gewann bei mehreren verwertbaren Barcodes im selben Bild bisher
ungeprueft der erste Treffer mit gruener Ampel. Jetzt werden alle verwertbaren
Codes gesammelt: genau einer bleibt gruen wie bisher, mehrere untereinander
vertraegliche werden zusammengefuehrt (spaeterer Treffer ueberschreibt kein
bereits gesetztes Feld) und bleiben gruen, mehrere unvertraegliche ergeben rot
mit leerem Spec statt eines geratenen Ergebnisses.
Korrigiert ausserdem den irrefuehrenden Warnkommentar in pn-tables.js: ein
falscher Tabelleneintrag faellt auf dem Barcode-Weg nicht automatisch auf, da
dort keine Texterkennung zum Abgleich laeuft.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>