Skip to content

Conversation

@teolemon
Copy link
Member

@teolemon teolemon commented Oct 30, 2025

What

  • feat: Match QFDMO with the categories taxonomy to make it possible to give customized and local circular advice in France

@github-project-automation github-project-automation bot moved this to To discuss and validate in 🍊 Open Food Facts Server issues Oct 30, 2025
@github-actions github-actions bot added 🧬 Taxonomies https://wiki.openfoodfacts.org/Global_taxonomies 📸 Open Products Facts Our project to increase the lifespan of objects. https://world.openproductsfacts.org labels Oct 30, 2025
@teolemon
Copy link
Member Author

@copilot can you add properties qfdmo_name_fr: and identifiant_qfdmo: from taxonomies/product/qfdmo_additional_categories.txt into taxonomies/product/categories.txt on exact match on one of the fr: synonyms ?

Copy link
Contributor

Copilot AI commented Oct 30, 2025

@teolemon I've opened a new pull request, #12582, to work on those changes. Once the pull request is ready, I'll request review from you.

…matching (#12582)

Enriches the product categories taxonomy with QFDMO (Où et comment
donner, réparer et recycler) metadata by matching French category names
between `qfdmo_additional_categories.txt` and `categories.txt`.

## Changes

- Matched 487 category entries by exact French synonym matching
(comma-separated `fr:` values)
- Added `qfdmo_name_fr:` property (QFDMO code identifier) to all matched
entries
- Added `identifiant_qfdmo:` property (numeric ID) to 165 entries where
available
- Properties inserted immediately after `fr:` line to maintain taxonomy
formatting conventions

## Example

```
fr: Niches pour chiens, Niche
qfdmo_name_fr: niche
identifiant_qfdmo: 442
it: Casette per cani
```

Coverage spans clothing, electronics, toys, sports equipment, furniture,
and medical supplies.

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teolemon <[email protected]>
@teolemon
Copy link
Member Author

/lint

@teolemon
Copy link
Member Author

@copilot

Problem

Can you create a knowledge panel in the Reuse section (like the Health or Environment section) on Open Products Facts, for products with a category that has a qfdmo_name_fr: property, only if the panel is requested with the cc parameter: fr
Ideally, it mentions that can find circular solutions for your product nearby if you're in France, and you may want to integrate teasers of the kind of solutions available in a pleasant way

Pointers

You can also use as inspiration those 2 pull requests for Alcohol
#6283
#6272

Copy link
Contributor

Copilot AI commented Oct 30, 2025

@teolemon I've opened a new pull request, #12583, to work on those changes. Once the pull request is ready, I'll request review from you.

@teolemon
Copy link
Member Author

@copilot can you fix the position of qfdmo_name_fr: and identifiant_qfdmo: to be after all the languages lines of the entry they are in ?

Copy link
Contributor

Copilot AI commented Oct 30, 2025

@teolemon I've opened a new pull request, #12584, to work on those changes. Once the pull request is ready, I'll request review from you.

QFDMO properties (`qfdmo_name_fr:` and `identifiant_qfdmo:`) were
incorrectly positioned immediately after the `fr:` line, causing them to
appear before other language translations.

### Changes
- Repositioned QFDMO properties to follow all language lines (en:, fr:,
de:, es:, it:, ja:, nl:, etc.) but precede other metadata properties
(google_product_taxonomy_id:en:, wikidata:en:)
- Affected 487 taxonomy entries

### Example
**Before:**
```
fr: Jeux de plateau, Jeux de société, Jeu de société
qfdmo_name_fr: jeu_de_societe
identifiant_qfdmo: 194
it: Giochi in scatola
ja: ボードゲーム
nl: Bordspellen
```

**After:**
```
fr: Jeux de plateau, Jeux de société, Jeu de société
it: Giochi in scatola
ja: ボードゲーム
nl: Bordspellen
qfdmo_name_fr: jeu_de_societe
identifiant_qfdmo: 194
```

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teolemon <[email protected]>
@teolemon
Copy link
Member Author

/lint

@teolemon teolemon changed the title QFDMO match feat: QFDMO match Oct 30, 2025
@teolemon
Copy link
Member Author

ERROR - duplicate_synonym - 13890 - fr:manteau already is a synonym of fr:manteaux-et-vestes for entry en:coats-jackets (categories) - fr:manteau cannot be mapped to entry en:coat / fr:manteau
ERROR - duplicate_synonym - 16194 - fr:mitaines already is a synonym of fr:gants-et-moufles for entry en:gloves-mittens (categories) - fr:mitaines cannot be mapped to entry en:fingerless-gloves / fr:mitaines
ERROR - duplicate_synonym - 16194 - fr:mitaine already is a synonym of fr:gants-et-moufles for entry en:gloves-mittens (categories) - fr:mitaine cannot be mapped to entry en:fingerless-gloves / fr:mitaines
ERROR - duplicate_synonym - 16881 - fr:echarpes already is a synonym of fr:echarpes for entry en:sashes (categories) - fr:echarpes cannot be mapped to entry en:scarves-shawls / fr:echarpes-foulards-et-chales
ERROR - duplicate_synonym - 30172 - fr:plateau-de-bureau already is a synonym of fr:tables-de-travail for entry en:workspace-tables (categories) - fr:plateau-de-bureau cannot be mapped to entry en:table-tops / fr:plateaux-de-table
ERROR - duplicate_synonym - 32016 - fr:canape already is a synonym of fr:canapes for entry en:sofas (categories) - fr:canape cannot be mapped to entry en:chair-sofa-cushions / fr:coussins-pour-fauteuils-et-canapes
ERROR - duplicate_synonym - 38351 - fr:penderie already is a synonym of fr:armoires for entry en:armoires-wardrobes (categories) - fr:penderie cannot be mapped to entry en:closet-organizers-garment-racks / fr:organiseurs-pour-armoires-et-penderies-pour-vetements
ERROR - duplicate_synonym - 42864 - fr:machines-a-pain already is associated to en:breadmakers (categories) - fr:machines-a-pain cannot be mapped to entry en:bread-makers
ERROR - duplicate_synonym - 43538 - fr:grill already is a synonym of fr:grils-et-barbecues-electriques for entry en:electric-griddles-grills (categories) - fr:grill cannot be mapped to entry en:toasters-grills / fr:grils-electriques-et-grille-pains
ERROR - duplicate_synonym - 48373 - fr:jardinage already is a synonym of fr:jardinage for entry en:gardening (categories) - fr:jardinage cannot be mapped to entry en:outdoor-power-equipment / fr:equipement-electrique-d-exterieur
ERROR - duplicate_synonym - 51790 - fr:piscines already is associated to en:water-parks-slides (categories) - fr:piscines cannot be mapped to entry en:swimming-pools
ERROR - duplicate_synonym - 55336 - fr:parquet already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:parquet cannot be mapped to entry en:wall-paneling / fr:lambris
ERROR - duplicate_synonym - 55336 - fr:lambri already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:lambri cannot be mapped to entry en:wall-paneling / fr:lambris
ERROR - duplicate_synonym - 55336 - fr:parquet-lambri already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:parquet-lambri cannot be mapped to entry en:wall-paneling / fr:lambris
ERROR - duplicate_synonym - 55816 - fr:plan-de-travail already is a synonym of fr:placards-de-cuisine for entry en:kitchen-cabinets (categories) - fr:plan-de-travail cannot be mapped to entry en:cabinet-hardware / fr:materiel-pour-meubles-de-cuisine
ERROR - duplicate_synonym - 58459 - fr:robinet already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:robinet cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58459 - fr:mitigeur already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:mitigeur cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58459 - fr:robinetterie already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:robinetterie cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58459 - fr:robinet-mitigeur-robinetterie already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:robinet-mitigeur-robinetterie cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58979 - fr:cables already is a synonym of fr:cables for entry en:utility-wire (categories) - fr:cables cannot be mapped to entry en:power-electrical-supplies / fr:accessoires-electriques
ERROR - duplicate_synonym - 58979 - fr:cordons already is a synonym of fr:cordons for entry en:lanyards (categories) - fr:cordons cannot be mapped to entry en:power-electrical-supplies / fr:accessoires-electriques
ERROR - duplicate_synonym - 60989 - fr:jardinage already is a synonym of fr:jardinage for entry en:gardening (categories) - fr:jardinage cannot be mapped to entry en:tools / fr:outils
ERROR - duplicate_synonym - 61508 - fr:perceuse-electrique already is a synonym of fr:perceuses for entry en:drills (categories) - fr:perceuse-electrique cannot be mapped to entry en:handheld-power-drills / fr:perceuses-electriques-portatives
ERROR - duplicate_synonym - 61714 - fr:marteaux already is associated to en:medical-reflex-hammers-tuning-forks (categories) - fr:marteaux cannot be mapped to entry en:hammers
ERROR - duplicate_synonym - 65318 - fr:medias already is associated to en:blank-media (categories) - fr:medias cannot be mapped to entry en:media
ERROR - duplicate_synonym - 80600 - fr:bateaux already is associated to en:toy-boats (categories) - fr:bateaux cannot be mapped to entry en:watercraft
ERROR - duplicate_synonym - 86741 - fr:crosses-de-hockey already is associated to en:field-hockey-sticks (categories) - fr:crosses-de-hockey cannot be mapped to entry en:hockey-sticks
ERROR - duplicate_synonym - 87403 - fr:squash already is a synonym of fr:racquetball-et-squash for entry en:racquetball-squash (categories) - fr:squash cannot be mapped to entry en:racquetball-squash-balls / fr:balles-de-racquetball-et-de-squash
ERROR - duplicate_synonym - 87763 - fr:escrime already is a synonym of fr:escrime for entry en:fencing (categories) - fr:escrime cannot be mapped to entry en:soccer-gloves / fr:gants-de-gardien-de-buts-de-football
ERROR - duplicate_synonym - 89127 - fr:cheerleading already is a synonym of fr:cheerleading for entry en:cheerleading (categories) - fr:cheerleading cannot be mapped to entry en:exercise-balls / fr:ballons-d-exercice
ERROR - duplicate_synonym - 90509 - fr:ping-pong already is a synonym of fr:balles-de-racquetball-et-de-squash for entry en:racquetball-squash-balls (categories) - fr:ping-pong cannot be mapped to entry en:ping-pong / fr:ping-pong
ERROR - duplicate_synonym - 90889 - fr:flechettes already is a synonym of fr:cibles for entry en:dartboards (categories) - fr:flechettes cannot be mapped to entry en:darts / fr:flechettes
ERROR - duplicate_synonym - 91576 - fr:tuba already is a synonym of fr:masques-de-plongee for entry en:diving-snorkeling-masks (categories) - fr:tuba cannot be mapped to entry en:snorkels / fr:tubas-de-natation
ERROR - duplicate_synonym - 91576 - fr:masque-de-plongee already is a synonym of fr:masques-de-plongee for entry en:diving-snorkeling-masks (categories) - fr:masque-de-plongee cannot be mapped to entry en:snorkels / fr:tubas-de-natation
ERROR - duplicate_synonym - 91656 - fr:kitesurf already is a synonym of fr:kitesurf for entry en:kitesurfing (categories) - fr:kitesurf cannot be mapped to entry en:kiteboards / fr:planches-de-kitesurf
ERROR - duplicate_synonym - 91716 - fr:surf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:surf cannot be mapped to entry en:surfing / fr:surf
ERROR - duplicate_synonym - 91879 - fr:planche-de-sport-nautique-voile already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:planche-de-sport-nautique-voile cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:surf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:surf cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:kitesurf already is a synonym of fr:kitesurf for entry en:kitesurfing (categories) - fr:kitesurf cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:windsurf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:windsurf cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:bodyboard already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:bodyboard cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 92629 - fr:windsurf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:windsurf cannot be mapped to entry en:windsurfing / fr:windsurf
ERROR - duplicate_synonym - 92650 - fr:kitesurf already is a synonym of fr:kitesurf for entry en:kitesurfing (categories) - fr:kitesurf cannot be mapped to entry en:windsurfing-board-parts / fr:pieces-pour-planches-de-windsurf
ERROR - duplicate_synonym - 93583 - fr:escalade already is a synonym of fr:escalade for entry en:climbing (categories) - fr:escalade cannot be mapped to entry en:climbing-protection-devices / fr:dispositifs-de-protection-pour-l-escalade
ERROR - duplicate_synonym - 93623 - fr:corde already is a synonym of fr:corde-d-escalade for entry en:climbing-rope (categories) - fr:corde cannot be mapped to entry en:climbing-rope-bags / fr:sacs-a-cordes-d-escalade
ERROR - duplicate_synonym - 95305 - fr:velo already is a synonym of fr:gants-de-gardien-de-buts-de-football for entry en:soccer-gloves (categories) - fr:velo cannot be mapped to entry en:bicycles / fr:velos
ERROR - duplicate_synonym - 95509 - fr:velo already is a synonym of fr:gants-de-gardien-de-buts-de-football for entry en:soccer-gloves (categories) - fr:velo cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:football-americain already is a synonym of fr:football-americain for entry en:american-football (categories) - fr:football-americain cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:escalade already is a synonym of fr:escalade for entry en:climbing (categories) - fr:escalade cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:varappe already is a synonym of fr:dispositifs-de-protection-pour-l-escalade for entry en:climbing-protection-devices (categories) - fr:varappe cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:canyoning already is a synonym of fr:dispositifs-de-protection-pour-l-escalade for entry en:climbing-protection-devices (categories) - fr:canyoning cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 96918 - fr:golf already is a synonym of fr:gants-de-gardien-de-buts-de-football for entry en:soccer-gloves (categories) - fr:golf cannot be mapped to entry en:golf / fr:golf
ERROR - duplicate_synonym - 97400 - fr:tir-a-l-arc already is a synonym of fr:cibles for entry en:dartboards (categories) - fr:tir-a-l-arc cannot be mapped to entry en:archery / fr:tir-a-l-arc
ERROR - duplicate_synonym - 97700 - fr:ball-trap already is a synonym of fr:cibles for entry en:dartboards (categories) - fr:ball-trap cannot be mapped to entry en:clay-pigeon-shooting / fr:ball-trap
ERROR - duplicate_synonym - 98862 - fr:badminton already is a synonym of fr:racquetball-et-squash for entry en:racquetball-squash (categories) - fr:badminton cannot be mapped to entry en:badminton / fr:badminton
Errors in the categories taxonomy definition at /opt/product-opener/lib/ProductOpener/Tags.pm line 1658.
building taxonomy for categories - publish: 1

@teolemon teolemon changed the title feat: QFDMO match feat: Match QFDMO with the categories taxonomy to make it possible to give customized circular advice Nov 3, 2025
@teolemon teolemon changed the title feat: Match QFDMO with the categories taxonomy to make it possible to give customized circular advice feat: Match QFDMO with the categories taxonomy to make it possible to give customized and local circular advice in France Nov 3, 2025
@teolemon
Copy link
Member Author

teolemon commented Nov 3, 2025

@copilot can you make a PR to try to fix this ? ERROR - duplicate_synonym - 13890 - fr:manteau already is a synonym of fr:manteaux-et-vestes for entry en:coats-jackets (categories) - fr:manteau cannot be mapped to entry en:coat / fr:manteau
ERROR - duplicate_synonym - 16194 - fr:mitaines already is a synonym of fr:gants-et-moufles for entry en:gloves-mittens (categories) - fr:mitaines cannot be mapped to entry en:fingerless-gloves / fr:mitaines
ERROR - duplicate_synonym - 16194 - fr:mitaine already is a synonym of fr:gants-et-moufles for entry en:gloves-mittens (categories) - fr:mitaine cannot be mapped to entry en:fingerless-gloves / fr:mitaines
ERROR - duplicate_synonym - 16881 - fr:echarpes already is a synonym of fr:echarpes for entry en:sashes (categories) - fr:echarpes cannot be mapped to entry en:scarves-shawls / fr:echarpes-foulards-et-chales
ERROR - duplicate_synonym - 30172 - fr:plateau-de-bureau already is a synonym of fr:tables-de-travail for entry en:workspace-tables (categories) - fr:plateau-de-bureau cannot be mapped to entry en:table-tops / fr:plateaux-de-table
ERROR - duplicate_synonym - 32016 - fr:canape already is a synonym of fr:canapes for entry en:sofas (categories) - fr:canape cannot be mapped to entry en:chair-sofa-cushions / fr:coussins-pour-fauteuils-et-canapes
ERROR - duplicate_synonym - 38351 - fr:penderie already is a synonym of fr:armoires for entry en:armoires-wardrobes (categories) - fr:penderie cannot be mapped to entry en:closet-organizers-garment-racks / fr:organiseurs-pour-armoires-et-penderies-pour-vetements
ERROR - duplicate_synonym - 42864 - fr:machines-a-pain already is associated to en:breadmakers (categories) - fr:machines-a-pain cannot be mapped to entry en:bread-makers
ERROR - duplicate_synonym - 43538 - fr:grill already is a synonym of fr:grils-et-barbecues-electriques for entry en:electric-griddles-grills (categories) - fr:grill cannot be mapped to entry en:toasters-grills / fr:grils-electriques-et-grille-pains
ERROR - duplicate_synonym - 48373 - fr:jardinage already is a synonym of fr:jardinage for entry en:gardening (categories) - fr:jardinage cannot be mapped to entry en:outdoor-power-equipment / fr:equipement-electrique-d-exterieur
ERROR - duplicate_synonym - 51790 - fr:piscines already is associated to en:water-parks-slides (categories) - fr:piscines cannot be mapped to entry en:swimming-pools
ERROR - duplicate_synonym - 55336 - fr:parquet already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:parquet cannot be mapped to entry en:wall-paneling / fr:lambris
ERROR - duplicate_synonym - 55336 - fr:lambri already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:lambri cannot be mapped to entry en:wall-paneling / fr:lambris
ERROR - duplicate_synonym - 55336 - fr:parquet-lambri already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:parquet-lambri cannot be mapped to entry en:wall-paneling / fr:lambris
ERROR - duplicate_synonym - 55816 - fr:plan-de-travail already is a synonym of fr:placards-de-cuisine for entry en:kitchen-cabinets (categories) - fr:plan-de-travail cannot be mapped to entry en:cabinet-hardware / fr:materiel-pour-meubles-de-cuisine
ERROR - duplicate_synonym - 58459 - fr:robinet already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:robinet cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58459 - fr:mitigeur already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:mitigeur cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58459 - fr:robinetterie already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:robinetterie cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58459 - fr:robinet-mitigeur-robinetterie already is a synonym of fr:materiaux-de-construction for entry en:building-materials (categories) - fr:robinet-mitigeur-robinetterie cannot be mapped to entry en:faucets / fr:robinets
ERROR - duplicate_synonym - 58979 - fr:cables already is a synonym of fr:cables for entry en:utility-wire (categories) - fr:cables cannot be mapped to entry en:power-electrical-supplies / fr:accessoires-electriques
ERROR - duplicate_synonym - 58979 - fr:cordons already is a synonym of fr:cordons for entry en:lanyards (categories) - fr:cordons cannot be mapped to entry en:power-electrical-supplies / fr:accessoires-electriques
ERROR - duplicate_synonym - 60989 - fr:jardinage already is a synonym of fr:jardinage for entry en:gardening (categories) - fr:jardinage cannot be mapped to entry en:tools / fr:outils
ERROR - duplicate_synonym - 61508 - fr:perceuse-electrique already is a synonym of fr:perceuses for entry en:drills (categories) - fr:perceuse-electrique cannot be mapped to entry en:handheld-power-drills / fr:perceuses-electriques-portatives
ERROR - duplicate_synonym - 61714 - fr:marteaux already is associated to en:medical-reflex-hammers-tuning-forks (categories) - fr:marteaux cannot be mapped to entry en:hammers
ERROR - duplicate_synonym - 65318 - fr:medias already is associated to en:blank-media (categories) - fr:medias cannot be mapped to entry en:media
ERROR - duplicate_synonym - 80600 - fr:bateaux already is associated to en:toy-boats (categories) - fr:bateaux cannot be mapped to entry en:watercraft
ERROR - duplicate_synonym - 86741 - fr:crosses-de-hockey already is associated to en:field-hockey-sticks (categories) - fr:crosses-de-hockey cannot be mapped to entry en:hockey-sticks
ERROR - duplicate_synonym - 87403 - fr:squash already is a synonym of fr:racquetball-et-squash for entry en:racquetball-squash (categories) - fr:squash cannot be mapped to entry en:racquetball-squash-balls / fr:balles-de-racquetball-et-de-squash
ERROR - duplicate_synonym - 87763 - fr:escrime already is a synonym of fr:escrime for entry en:fencing (categories) - fr:escrime cannot be mapped to entry en:soccer-gloves / fr:gants-de-gardien-de-buts-de-football
ERROR - duplicate_synonym - 89127 - fr:cheerleading already is a synonym of fr:cheerleading for entry en:cheerleading (categories) - fr:cheerleading cannot be mapped to entry en:exercise-balls / fr:ballons-d-exercice
ERROR - duplicate_synonym - 90509 - fr:ping-pong already is a synonym of fr:balles-de-racquetball-et-de-squash for entry en:racquetball-squash-balls (categories) - fr:ping-pong cannot be mapped to entry en:ping-pong / fr:ping-pong
ERROR - duplicate_synonym - 90889 - fr:flechettes already is a synonym of fr:cibles for entry en:dartboards (categories) - fr:flechettes cannot be mapped to entry en:darts / fr:flechettes
ERROR - duplicate_synonym - 91576 - fr:tuba already is a synonym of fr:masques-de-plongee for entry en:diving-snorkeling-masks (categories) - fr:tuba cannot be mapped to entry en:snorkels / fr:tubas-de-natation
ERROR - duplicate_synonym - 91576 - fr:masque-de-plongee already is a synonym of fr:masques-de-plongee for entry en:diving-snorkeling-masks (categories) - fr:masque-de-plongee cannot be mapped to entry en:snorkels / fr:tubas-de-natation
ERROR - duplicate_synonym - 91656 - fr:kitesurf already is a synonym of fr:kitesurf for entry en:kitesurfing (categories) - fr:kitesurf cannot be mapped to entry en:kiteboards / fr:planches-de-kitesurf
ERROR - duplicate_synonym - 91716 - fr:surf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:surf cannot be mapped to entry en:surfing / fr:surf
ERROR - duplicate_synonym - 91879 - fr:planche-de-sport-nautique-voile already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:planche-de-sport-nautique-voile cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:surf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:surf cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:kitesurf already is a synonym of fr:kitesurf for entry en:kitesurfing (categories) - fr:kitesurf cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:windsurf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:windsurf cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 91879 - fr:bodyboard already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:bodyboard cannot be mapped to entry en:surfboards / fr:planches-de-surf
ERROR - duplicate_synonym - 92629 - fr:windsurf already is a synonym of fr:planches-de-kitesurf for entry en:kiteboards (categories) - fr:windsurf cannot be mapped to entry en:windsurfing / fr:windsurf
ERROR - duplicate_synonym - 92650 - fr:kitesurf already is a synonym of fr:kitesurf for entry en:kitesurfing (categories) - fr:kitesurf cannot be mapped to entry en:windsurfing-board-parts / fr:pieces-pour-planches-de-windsurf
ERROR - duplicate_synonym - 93583 - fr:escalade already is a synonym of fr:escalade for entry en:climbing (categories) - fr:escalade cannot be mapped to entry en:climbing-protection-devices / fr:dispositifs-de-protection-pour-l-escalade
ERROR - duplicate_synonym - 93623 - fr:corde already is a synonym of fr:corde-d-escalade for entry en:climbing-rope (categories) - fr:corde cannot be mapped to entry en:climbing-rope-bags / fr:sacs-a-cordes-d-escalade
ERROR - duplicate_synonym - 95305 - fr:velo already is a synonym of fr:gants-de-gardien-de-buts-de-football for entry en:soccer-gloves (categories) - fr:velo cannot be mapped to entry en:bicycles / fr:velos
ERROR - duplicate_synonym - 95509 - fr:velo already is a synonym of fr:gants-de-gardien-de-buts-de-football for entry en:soccer-gloves (categories) - fr:velo cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:football-americain already is a synonym of fr:football-americain for entry en:american-football (categories) - fr:football-americain cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:escalade already is a synonym of fr:escalade for entry en:climbing (categories) - fr:escalade cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:varappe already is a synonym of fr:dispositifs-de-protection-pour-l-escalade for entry en:climbing-protection-devices (categories) - fr:varappe cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 95509 - fr:canyoning already is a synonym of fr:dispositifs-de-protection-pour-l-escalade for entry en:climbing-protection-devices (categories) - fr:canyoning cannot be mapped to entry en:bicycle-protective-pads / fr:protections-du-cycliste
ERROR - duplicate_synonym - 96918 - fr:golf already is a synonym of fr:gants-de-gardien-de-buts-de-football for entry en:soccer-gloves (categories) - fr:golf cannot be mapped to entry en:golf / fr:golf
ERROR - duplicate_synonym - 97400 - fr:tir-a-l-arc already is a synonym of fr:cibles for entry en:dartboards (categories) - fr:tir-a-l-arc cannot be mapped to entry en:archery / fr:tir-a-l-arc
ERROR - duplicate_synonym - 97700 - fr:ball-trap already is a synonym of fr:cibles for entry en:dartboards (categories) - fr:ball-trap cannot be mapped to entry en:clay-pigeon-shooting / fr:ball-trap
ERROR - duplicate_synonym - 98862 - fr:badminton already is a synonym of fr:racquetball-et-squash for entry en:racquetball-squash (categories) - fr:badminton cannot be mapped to entry en:badminton / fr:badminton
Errors in the categories taxonomy definition at /opt/product-opener/lib/ProductOpener/Tags.pm line 1658.
building taxonomy for categories - publish: 1

Originally posted by @teolemon in #12581 (comment)

Copy link
Contributor

Copilot AI commented Nov 3, 2025

@teolemon I've opened a new pull request, #12615, to work on those changes. Once the pull request is ready, I'll request review from you.

@codecov-commenter
Copy link

codecov-commenter commented Nov 3, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 51.77%. Comparing base (64e4ed0) to head (bd79e3a).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #12581      +/-   ##
==========================================
+ Coverage   46.40%   51.77%   +5.37%     
==========================================
  Files          95       96       +1     
  Lines       24728    24786      +58     
  Branches     5922     5931       +9     
==========================================
+ Hits        11474    12832    +1358     
+ Misses      11700    10236    -1464     
- Partials     1554     1718     +164     
Flag Coverage Δ
integration-test-group-1 31.23% <ø> (?)
integration-test-group-2 27.10% <ø> (?)
integration-test-group-3 8.79% <ø> (?)
integration-test-group-4 10.74% <ø> (?)
integration-test-group-5 19.96% <ø> (?)
integration-test-group-6 24.83% <ø> (?)
integration-test-group-7 10.31% <ø> (?)
integration-test-group-8 8.81% <ø> (?)
integration-test-group-9 9.00% <ø> (?)
unit-test-group-1 26.34% <ø> (ø)
unit-test-group-2 21.82% <ø> (ø)
unit-test-group-3 20.49% <ø> (ø)
unit-test-group-4 31.25% <ø> (ø)
unit-test-group-5 20.35% <ø> (ø)
unit-test-group-6 29.28% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@teolemon
Copy link
Member Author

teolemon commented Nov 3, 2025

@copilot

  • can you replace _ by - in all lines with qfdmo_name_fr: (but keep qfdmo_name_fr: itself as is)
  • can you then replace qfdmo_name_fr: by qfdmo_name:fr:

Copy link
Contributor

Copilot AI commented Nov 3, 2025

@teolemon I've opened a new pull request, #12618, to work on those changes. Once the pull request is ready, I'll request review from you.

Updated QFDMO property formatting in the categories taxonomy to use
consistent naming conventions and value formats.

### Changes

- **Property name**: Renamed `qfdmo_name_fr:` to `qfdmo_name:fr:` (487
entries)
- Aligns with standard language-qualified property format (e.g.,
`property:language:`)
  
- **Value normalization**: Replaced underscores with hyphens in all
QFDMO name values
- Example: `qfdmo_name_fr: mobilier_animalier` → `qfdmo_name:fr:
mobilier-animalier`
  - Maintains consistency with taxonomy identifier conventions

### Example

```diff
 en: Pet Furniture
 fr: Mobilier animalier
-qfdmo_name_fr: mobilier_animalier
+qfdmo_name:fr: mobilier-animalier
```

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/openfoodfacts/openfoodfacts-server/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: teolemon <[email protected]>
@teolemon teolemon requested a review from a team as a code owner November 4, 2025 07:46
@teolemon
Copy link
Member Author

teolemon commented Nov 4, 2025

/lint

@teolemon
Copy link
Member Author

teolemon commented Nov 4, 2025

/lint

@teolemon
Copy link
Member Author

teolemon commented Nov 4, 2025

/lint

@@ -21874,9 +22348,18 @@ pt: Acessórios para eletrônicos
ru: Принадлежности для электроники
sv: Elektroniktillbehör
tr: Elektronik Alet Aksesuarları
qfdmo_name:fr: accessoire-automobile-et-deux-roues-electronique
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no

@teolemon
Copy link
Member Author

teolemon commented Nov 4, 2025

/lint

@github-actions github-actions bot added the 💥 Merge Conflicts 💥 Merge Conflicts label Nov 6, 2025
@teolemon
Copy link
Member Author

teolemon commented Nov 6, 2025

/lint

@sonarqubecloud
Copy link

sonarqubecloud bot commented Nov 6, 2025

@teolemon
Copy link
Member Author

teolemon commented Nov 6, 2025

/lint

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💥 Merge Conflicts 💥 Merge Conflicts 📸 Open Products Facts Our project to increase the lifespan of objects. https://world.openproductsfacts.org 🧬 Taxonomies https://wiki.openfoodfacts.org/Global_taxonomies

Projects

Status: To discuss and validate
Status: In progress

Development

Successfully merging this pull request may close these issues.

3 participants