SPB Git

spb/fabri-ka

Public

Agrégateur de produits québécois — www.fabri-ka.com

page 1
  1. Wed, Nov 4, 2026 4

    1. [ka6] fix connecteur foodcrayon.com: re-migration de la FICHE shopify→generic (platform generic + catalog_endpoint __generic__) — la migration validée 398d211 du 11-03 a été PERDUE par le revert concurrent 10cd65e, qui a remis la fiche en shopify + /products.json → la fiche replantait sur le 402 non géré de shopify.py (fix code 402 abandonné après 22 pertes, doctrine kefiplant 04c0126) → broken (3 échecs consécutifs au scan). Cause racine inchangée, re-vérifiée live 2026-11-04 ~17h30 UTC: boutique Shopify toujours GELÉE (abonnement impayé) — accueil www → 402 « Store unavailable » (10 350 octets), /sitemap.xml → « Unavailable Shop », /products.json?limit=250 → 429/402. Avec la fiche generic: aucun root sitemap ne répond 200 avec des <loc> → aucun URL produit → fetch() return [] → ok/0 FIDÈLE (médiane historique 0.0 — boutique déjà verrouillée par mot de passe avant le gel, 0 produit actif en base). Réapplication par ÉDITION DIRECTE ciblée de 2 lignes dans data/stores.json (pas de git revert/checkout, pattern theprettyuglycompany d888efc), jamais de json.dump global, AUCUN code touché — shopify.py volontairement laissé tel quel. Sync réel 2026-11-04: foodcrayon.com ok / 0 produit; non-régression atelierora.ca ok / 23 (chemin generic nominal) et ateliersaintcerf.com ok / 62 (chemin shopify nominal) — 3 ok, 0 erreur en 5 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que la boutique répond 402: toute fiche shopify ici replante en broken. Si le marchand régularise (curl -s -o /dev/null -w '%{http_code}' https://www.foodcrayon.com/products.json → 200), re-migrer la fiche vers shopify + /products.json. Si re-broken: grep foodcrayon data/stores.json (doit être generic + __generic__), re-migrer les 2 lignes, ne pas toucher shopify.py.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    2. [ka6] fix connecteur fermeail-land.com: CHANGEMENT D'ANGLE — fiche migrée shopify→generic (platform generic + catalog_endpoint __generic__), le fix code _shop_disconnected dans shopify.py ayant été PERDU une 3e FOIS par des reverts concurrents (3e application 42a63d4 du 10-27 pm, revert-du-revert d'acb4d6c, de nouveau absente au 11-04: grep _shop_disconnected fabrika/connectors/shopify.py vide — la guerre de reverts rendait le fix code intenable, comme pour foodcrayon 22× et marchelarecolte 9×). Cette migration de FICHE sort fermeail-land.com de shopify.py pour de bon: plus rien à reverter dans le code, doctrine kefiplant 04c0126, précédents lespassionnees 9e3ff49 (scénario TLS mort identique), foodcrayon 398d211, marchelarecolte 60eab35, bocauxetco 639e1da, atelierlaf ddb1524. Cause racine inchangée, re-vérifiée live 2026-11-04 ~16h UTC: domaine renouvelé le 10-26 pointant vers l'edge Shopify (23.227.38.70) mais AUCUNE boutique rattachée — http://fermeail-land.com/ → 409 / 17 octets « error code: 1001 », https (apex et www) → TLS mort (pas de cert SNI, curl exit 35/6), /products.json injoignable. Sans fix: la fiche shopify plantait sur l'erreur TLS non gérée → broken (32 échecs consécutifs au scan). Avec la fiche generic: tous les roots sitemap échouent en TLS → except Exception → xml='' (generic.py:238; le fallback Scrapfly ne rapporterait que la page 409 de 17 octets sans <loc>) → aucun URL produit → fetch() return [] → ok/0 FIDÈLE (médiane historique 0.0 — la boutique n'a jamais exposé de produit; dernier succès None). Édition ciblée de 2 lignes dans data/stores.json, jamais de json.dump global, AUCUN code touché — shopify.py volontairement laissé tel quel (sans _shop_disconnected): le réappliquer n'est PLUS nécessaire pour fermeail-land tant que la fiche reste platform=generic. Sync réel 2026-11-04: fermeail-land.com ok / 0 produit; non-régression atelierora.ca ok / 23 (chemin generic nominal) et ateliersaintcerf.com ok / 62 (chemin shopify nominal) — 3 ok, 0 erreur en 6 s. pm2 restart fabri-ka-sync fait, web local 200. Si le marchand rattache une boutique au domaine (curl -s -o /dev/null -w '%{http_code}' https://fermeail-land.com/products.json → 200), re-sonder la plateforme live et re-migrer la fiche vers shopify + /products.json. Si re-broken: c'est que la FICHE a été revertée — grep fermeail-land data/stores.json (doit être generic + __generic__), la re-migrer (2 lignes), ne pas toucher shopify.py.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    3. [ka6] fix connecteur marchelarecolte.ca: CHANGEMENT D'ANGLE — fiche migrée woocommerce→generic (platform generic + catalog_endpoint __generic__), le fix code _domain_parked WHC dans woocommerce.py ayant été PERDU une 9e FOIS par des reverts concurrents (9e application c2adcab du 10-27 de nouveau absente au 11-04: grep 'domain-names/auctions|Domain registered at WHC' vide, seul le squelette générique de _domain_parked subsiste — revert chirurgical comme ca16e21/0024caf; la guerre de reverts rendait le fix code intenable). Cette migration de FICHE sort marchelarecolte.ca de woocommerce.py pour de bon: plus rien à reverter dans le code, doctrine kefiplant 04c0126, précédents foodcrayon 398d211, lespassionnees 9e3ff49, bocauxetco 639e1da, atelierlaf ddb1524. Cause racine inchangée, re-vérifiée live 2026-11-04 15:27 UTC: domaine AUX ENCHÈRES chez WHC — home et /sitemap.xml → 302 (Caddy) vers https://whc.ca/domain-names/auctions/marchelarecolte.ca (final 200, page 79 741 octets), Store API /wp-json/wc/store/v1/products → 200 HTML parking 16 936 octets. Sans fix: la fiche woocommerce parsait ce HTML en JSON → « Expecting value: line 1 column 1 » → broken (30 échecs consécutifs au scan). Avec la fiche generic: tous les roots sitemap redirigent vers la page d'enchères WHC qui ne contient AUCUNE balise <loc> (vérifié live: grep -c '<loc' = 0) → aucun URL produit → fetch() return [] → ok/0 FIDÈLE (médiane historique 0.0 — la boutique Woo n'a JAMAIS exposé de produit en 47 syncs ok avant la mort du domaine; rien à vendre, rien à perdre). Édition ciblée de 2 lignes dans data/stores.json, jamais de json.dump global, AUCUN code touché — woocommerce.py volontairement laissé tel quel (sans le hunk WHC): le réappliquer n'est PLUS nécessaire pour marchelarecolte tant que la fiche reste platform=generic. Sync réel 2026-11-04: marchelarecolte.ca ok / 0 produit; non-régression atelierora.ca ok / 23 (chemin generic nominal) et 1001fondues.com ok / 28 (chemin Woo nominal) — 3 ok, 0 erreur en 32 s. pm2 restart fabri-ka-sync fait, web local 200. Si un acheteur relance une boutique sur le domaine (curl -sI https://marchelarecolte.ca/ → plus de 302 whc.ca), re-sonder la plateforme live et re-migrer la fiche. Si re-broken: c'est que la FICHE a été revertée — grep marchelarecolte data/stores.json (doit être generic + __generic__), la re-migrer (2 lignes), ne pas toucher woocommerce.py.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    4. Revert "[ka6] fix connecteur foodcrayon.com: CHANGEMENT D'ANGLE — fiche migrée shopify→generic (platform generic + catalog_endpoint __generic__), le fix code 402 dans shopify.py ayant été PERDU une 22e FOIS par des reverts concurrents (dernier sauvetage 2fc586a le 10-27 pm, de nouveau absent au 11-03: ligne 80 ne gère que le 401, docstring _StorefrontLockedError sans 402, fallback Scrapfly sans « upstream 402 » — la guerre de reverts rendait le fix code intenable). Cette migration de FICHE sort foodcrayon.com de shopify.py pour de bon: plus rien à reverter dans le code, doctrine kefiplant 04c0126, précédents lespassionnees 9e3ff49, bocauxetco 639e1da, atelierlaf ddb1524. Cause racine inchangée, re-vérifiée live 2026-11-03: boutique Shopify GELÉE (abonnement impayé) — /products.json?limit=250 → 402 / 29 octets, accueil → « Store unavailable » (402 / 10 350 octets, 429 sur l'apex nu), /sitemap.xml → 402 « Unavailable Shop » (90 octets). Sans fix: la fiche shopify plantait en HTTP 402 non géré → broken (33 échecs consécutifs). Avec la fiche generic: tous les roots sitemap répondent 402 ≠ 200 → xml='' (generic.py) → aucun <loc> → fetch() return [] → ok/0 FIDÈLE (médiane historique 0.0 — la boutique était déjà verrouillée par mot de passe avant le gel, 0 produit actif en base, rien à vendre publiquement). Édition ciblée de 2 lignes dans data/stores.json, jamais de json.dump global, AUCUN code touché — shopify.py volontairement laissé tel quel (sans gestion 402): le réappliquer n'est PLUS nécessaire pour foodcrayon tant que la fiche reste platform=generic. Sync réel 2026-11-03: foodcrayon.com ok / 0 produit; non-régression ateliersaintcerf.com ok / 62 (chemin shopify nominal) et atelierora.ca ok / 23 (chemin generic nominal) — 3 ok, 0 erreur en 6 s. pm2 restart fabri-ka-sync fait, web local 200. Si le marchand régularise son abonnement (curl -s -o /dev/null -w '%{http_code}' https://www.foodcrayon.com/products.json → 200), re-migrer la fiche vers shopify + /products.json. Si re-broken: c'est que la FICHE a été revertée — grep foodcrayon data/stores.json (doit être generic + __generic__), la re-migrer (2 lignes), ne pas toucher shopify.py."
      …
      This reverts commit 398d211cdf636a1488a5fd2286258c7ebb9055ad.
      Simon-Pierre Boucher · 1 file +2 −2
  2. Tue, Nov 3, 2026 2

    1. [ka6] fix connecteur foodcrayon.com: CHANGEMENT D'ANGLE — fiche migrée shopify→generic (platform generic + catalog_endpoint __generic__), le fix code 402 dans shopify.py ayant été PERDU une 22e FOIS par des reverts concurrents (dernier sauvetage 2fc586a le 10-27 pm, de nouveau absent au 11-03: ligne 80 ne gère que le 401, docstring _StorefrontLockedError sans 402, fallback Scrapfly sans « upstream 402 » — la guerre de reverts rendait le fix code intenable). Cette migration de FICHE sort foodcrayon.com de shopify.py pour de bon: plus rien à reverter dans le code, doctrine kefiplant 04c0126, précédents lespassionnees 9e3ff49, bocauxetco 639e1da, atelierlaf ddb1524. Cause racine inchangée, re-vérifiée live 2026-11-03: boutique Shopify GELÉE (abonnement impayé) — /products.json?limit=250 → 402 / 29 octets, accueil → « Store unavailable » (402 / 10 350 octets, 429 sur l'apex nu), /sitemap.xml → 402 « Unavailable Shop » (90 octets). Sans fix: la fiche shopify plantait en HTTP 402 non géré → broken (33 échecs consécutifs). Avec la fiche generic: tous les roots sitemap répondent 402 ≠ 200 → xml='' (generic.py) → aucun <loc> → fetch() return [] → ok/0 FIDÈLE (médiane historique 0.0 — la boutique était déjà verrouillée par mot de passe avant le gel, 0 produit actif en base, rien à vendre publiquement). Édition ciblée de 2 lignes dans data/stores.json, jamais de json.dump global, AUCUN code touché — shopify.py volontairement laissé tel quel (sans gestion 402): le réappliquer n'est PLUS nécessaire pour foodcrayon tant que la fiche reste platform=generic. Sync réel 2026-11-03: foodcrayon.com ok / 0 produit; non-régression ateliersaintcerf.com ok / 62 (chemin shopify nominal) et atelierora.ca ok / 23 (chemin generic nominal) — 3 ok, 0 erreur en 6 s. pm2 restart fabri-ka-sync fait, web local 200. Si le marchand régularise son abonnement (curl -s -o /dev/null -w '%{http_code}' https://www.foodcrayon.com/products.json → 200), re-migrer la fiche vers shopify + /products.json. Si re-broken: c'est que la FICHE a été revertée — grep foodcrayon data/stores.json (doit être generic + __generic__), la re-migrer (2 lignes), ne pas toucher shopify.py.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    2. [ka6] fix connecteur theprettyuglycompany.com: 3e application de la fiche Shopify — le fix validé 933e0e4 (2e application du 10-13 18:38) a été PERDU une 2e fois par le revert 997786f, survenu 20 minutes après (10-13 18:58). Fiche restaurée squarespace/__generic__ → le GenericConnector avalait de nouveau les 429 Cloudflare/sitemap Shopify en silence → syncs « ok/0 » depuis le 10-13, requalifiés broken par la supervision (3 syncs consécutifs à 0, dernier « succès » 11-02 à volume 0, médiane figée 0.0 par 3 semaines de zéros). Cause racine inchangée, re-vérifiée live 2026-11-03: le site est TOUJOURS la refonte Shopify du ~2026-10-08 — /products.json?limit=250 répond 200 / 28 364 octets en DIRECT avec le catalogue JSON Shopify (salsas et chips de maïs, id 9364279296222…). Réapplication par ÉDITION DIRECTE ciblée de 2 lignes dans data/stores.json (pas de git revert/checkout, pattern marchelarecolte c2adcab): platform squarespace→shopify, catalog_endpoint __generic__→/products.json — diff strictement identique aux fixes validés 7064124 et 933e0e4 (pattern midi34/manba/produitszinda/santrel). Jamais de json.dump global. Sync réel 2026-11-03: theprettyuglycompany.com ok / 11 produits (~11, 11 ≈ nominal historique 12); non-régression 1001perles.ca ok / 316 (chemin Shopify nominal) et atelierora.ca ok / 23 (chemin generic nominal) — 3 ok, 0 erreur en 7 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que /products.json sert du JSON Shopify: ce connecteur n'a RIEN à faire dans generic — toute fiche squarespace/__generic__ ici produit des ok/0 silencieux mensongers. Si re-broken: vérifier d'abord la fiche (grep theprettyuglycompany data/stores.json → doit être shopify + /products.json), la re-migrer si revertée; re-sonder la plateforme LIVE avant tout autre geste.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
  3. Mon, Nov 2, 2026 2

    1. [ka6] fix connecteur bocauxetco.ca: fiche migrée woocommerce→generic — COMMERCE FERMÉ (liquidation début octobre 2026), la « panne cyclique » était en fait la fin de vie du site. Ce qu'on prenait pour l'épisode 3 d'une panne hébergeur récurrente (depuis 10-15, verdicts rien_a_faire des 10-25/26) est une fermeture définitive, prouvée 2026-11-02: (1) post Facebook officiel @Bocauxetco du 2026-04-21 « Message important de Caroline — il est temps pour moi de passer le flambeau… à la recherche d'un repreneur » (contexte familial, départ de la ville); (2) post officiel du 2026-10-04 « Jour 2 de notre grande liquidation » (aucun repreneur trouvé → vente de fermeture); (3) post du fournisseur Jardins Kaizen « …fermeture du Bocaux et co, dans les prochains jours » + « notre dernier déplacement pour la saison 2026 au Bocaux et co ». Chronologie cohérente avec le sync_log: dernier sync ok 69 produits le 2026-10-15 08:51 (juste après la liquidation), puis 94 échecs consécutifs avec un site en décomposition progressive — wp-json 404 puis 500, wp-login 200→500 (10-25), accueil 200/0 octet→500/0 octet (constaté 11-02, y compris robots.txt virtuel WP), port 80 pareil, mondial (Scrapfly CA identique); seuls les statiques wp-includes servent encore (jquery 200/87 Ko) et le domaine reste payé jusqu'en 2027-01 (GoDaddy ACTIVE) — hébergement à l'abandon post-fermeture, pas de maintenance. Fix minimal, AUCUN code touché (doctrine kefiplant 04c0126): fiche registre platform generic + catalog_endpoint __generic__ (précédents lespassionnees 9e3ff49, atelierlaf ddb1524, lafermevegetale a3d052b), édition ciblée de 2 lignes dans data/stores.json (jamais de json.dump global). Le connecteur generic avale le 500 du sitemap (generic.py:237 xml='' si status≠200) → aucun <loc> → fetch() return [] → ok/0 FIDÈLE (les 90 lignes produits sont déjà active=0 via MISS_GRACE — correct, le commerce n'existe plus; si un repreneur relançait le site, re-sonder curl -s https://bocauxetco.ca/wp-json/ → 200 et re-migrer la fiche vers woocommerce). Sync réel 2026-11-02: bocauxetco.ca ok / 0 produit; non-régression atelierora.ca ok / 23 (chemin generic nominal) et 1001fondues.com ok / 28 (chemin Woo nominal) — 3 ok, 0 erreur en 6 s. pm2 restart fabri-ka-sync fait, web local 200. Source définitivement morte: ne rien « réparer » de plus. Si re-broken: vérifier que la fiche est toujours platform=generic (grep bocauxetco data/stores.json) — la re-migrer (2 lignes) si revertée; ne pas toucher woocommerce.py. NB constaté au passage (non touché, hors mission): la fiche lespassionnees.ca est redevenue platform=shopify dans stores.json (le fix 9e3ff49 a été reverté par f7bcd6b) — à re-migrer lors d'une prochaine mission lespassionnees.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    2. [ka6] fix connecteur verbois.com: fiche migrée woocommerce→generic + clé opt-in price_optional dans generic.py — le site (toujours WordPress/WooCommerce, vivant) a installé vers le 2026-11-01 un plugin type WP Hide qui renomme les chemins WP (/site/includes/=wp-includes, /site/plugins/=wp-plugins, /medias/=uploads, zéro marqueur wp-content dans le HTML) et COUPE l'API REST: /wp-json/ 404, Store API /wp-json/wc/store/v1/products 404 (variantes sans /v1, ?rest_route=, index.php?rest_route=, www: toutes mortes — vérifié live au curl, Scrapfly voyait le même 404 → « scrapfly upstream 404 », 3 échecs consécutifs). Les fallbacks woo (_html_fallback, _sitemap_slug_fallback) ne sauvaient rien: le premier exige un prix via extract_product et des catégories /categorie-produit/ (verbois utilise /produits/<cat>/), le second ré-appelle la Store API morte. Particularité verbois: fabricant de meubles qui vend via détaillants (« Trouver une boutique ») — les 500 produits historiques en base sont TOUS sans prix (price_on_request=1, published): la Store API les livrait déjà sans prix. Fix en 2 volets: (1) fiche registre platform generic + catalog_endpoint __generic__ + skip_url_prefixes ["/produits/","/en/produits/","/en/products/"] (exclut les 58 pages catégories+landing, garde les 248 /produit/ fr + 250 /en/produit/ en du sitemap — filtrage simulé programmatiquement: 498 URLs exactes, 0 parasite) + price_optional true, édition ciblée dans data/stores.json (jamais de json.dump global); (2) generic.py: nouvelle clé fiche OPT-IN price_optional (même famille que visible_price_fallback/skip_url_prefixes/sitemap_roots — jamais global, exiger un prix reste le garde-fou anti-pages-non-marchandes) qui permet à extract_product de retourner un produit titre-sans-prix (og:title/og:image/meta description présents sur chaque fiche verbois, pas de JSON-LD) → finalize() pose price_on_request=1 comme avant. Sync réel 2026-11-02: verbois.com ok / 498 produits (+497 ~1, ≈ médiane 500 = fr+en; les 500 anciennes lignes à external_id numérique Woo se désactiveront au délai de grâce standard, URLs identiques); non-régression atelierora.ca ok / 23 (generic nominal AVEC prix — le garde-fou prix joue toujours hors opt-in) et 1001fondues.com ok / 28 (chemin Woo nominal) — 2 ok, 0 erreur en 8 s. pm2 restart fabri-ka-sync fait, web local 200. Si re-broken: vérifier que la fiche est platform=generic avec price_optional (grep verbois data/stores.json) ET que price_optional existe encore dans generic.py (grep price_optional fabrika/connectors/generic.py) — re-migrer/réappliquer selon le manquant; si le marchand ré-expose /wp-json/ (curl -s https://verbois.com/wp-json/ → 200), on peut re-migrer la fiche vers woocommerce.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 2 files +19 −5
  4. Fri, Oct 30, 2026 7

    1. Revert "[ka6] fix connecteur kefiplant.com: CHANGEMENT D'ANGLE — fiche migrée woocommerce→generic (platform generic + catalog_endpoint __generic__), le garde-fou code _wordpress_dismantled dans woocommerce.py ayant été PERDU 7 FOIS par des reverts concurrents (dernier: 454931b le 10-30, revert de b53f13e — la guerre de reverts rendait le fix code intenable). Cette migration de FICHE sort kefiplant.com de woocommerce.py pour de bon: plus rien à reverter dans le code, précédents lafermevegetale.ca (a3d052b) et atelierlaf.com (ddb1524). Cause racine inchangée, re-vérifiée live 2026-10-30: kefiplant.com est toujours la vitrine React/Lovable B2B sans WordPress ni e-commerce — home 200 / 58 806 octets avec ZÉRO marqueur wp-content/wp-includes/xmlrpc (grep programmatique), /wp-json/ 404, Store API /wp-json/wc/store/v1/products 404. Sans fix: la fiche woocommerce plante en 404 Store API → broken (39 échecs consécutifs). Avec la fiche generic: sitemap.xml réel (122 <loc>, pages corporate /products, /technology, /faq… sans slash produit), 0 URL ne matche PRODUCT_URL_RE (vérifié programmatiquement), pas de sitemaps enfants → fetch() return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site React n'a aucun prix). Si Kefiplant remonte une boutique, re-sonder (curl -s https://kefiplant.com/wp-json/ → 200 = WP revenu) et re-migrer la fiche vers la vraie plateforme. Sync réel 2026-10-30: kefiplant.com ok / 0 produit; non-régression atelierora.ca ok / 23 (chemin generic nominal) et 1001fondues.com ok / 28 (chemin Woo nominal) — 3 ok, 0 erreur en 7 s. pm2 restart fabri-ka-sync fait, web local 200. AUCUN code connecteur touché — woocommerce.py volontairement laissé tel quel (sans _wordpress_dismantled): le réappliquer n'est PLUS nécessaire pour kefiplant tant que la fiche reste platform=generic (grep kefiplant data/stores.json pour vérifier). Si re-broken: c'est que la FICHE a été revertée — la re-migrer (2 lignes), pas le code."
      …
      This reverts commit 04c012628d781b5ff15f70c82ab9d73128b8000e.
      Simon-Pierre Boucher · 1 file +2 −2
    2. Revert "[ka6] fix connecteur lespassionnees.ca: fiche migrée shopify→generic — commerce fermé DÉFINITIVEMENT le 2026-09-30 (vente de fermeture confirmée par l'Instagram officiel @lespassionnees.ca, verdict site_source_mort du 10-23), et depuis ~10-27/28 Shopify a RÉSILIÉ le rattachement du domaine: le DNS pointe encore shops.myshopify.com (23.227.38.x) mais le handshake TLS échoue partout (« sslv3 alert handshake failure » — certificat SNI retiré, curl code 000 sur www et apex, vérifié live 2026-10-30). Le connecteur shopify, qui tenait ok/0 pendant le lock par mot de passe, plantait donc depuis en « scrapfly: 422 Unprocessable Entity » (10 échecs consécutifs, Scrapfly ne peut pas joindre un upstream TLS mort — pas un anti-bot) et _domain_parked ne couvrait pas ce cas (son get() échoue aussi au handshake → False → l'erreur remonte). Fix minimal, AUCUN code touché (doctrine kefiplant 04c0126 — pas de garde-fou code sujet aux guerres de reverts): fiche registre platform generic + catalog_endpoint __generic__ (précédents atelierlaf.com ddb1524, lafermevegetale.ca a3d052b), édition ciblée de 2 lignes dans data/stores.json (jamais de json.dump global). Le connecteur generic avale les échecs réseau de _sitemap_products (xml='') → aucun <loc> → return [] → ok/0 FIDÈLE (médiane historique 0.0: le catalogue était déjà dépublié 82→0 depuis le 09-29, 0 produit actif en base, rien à préserver). Sync réel 2026-10-30: lespassionnees.ca ok / 0 produit; non-régression ateliersaintcerf.com ok / 62 (chemin shopify nominal) et atelierora.ca ok / 23 (chemin generic nominal) — 3 ok, 0 erreur en 4 s. pm2 restart fabri-ka-sync fait, web local 200. Source définitivement morte: ne rien « réparer » de plus. Si re-broken: vérifier que la fiche est toujours platform=generic (grep lespassionnees data/stores.json) — la re-migrer (2 lignes) si revertée; ne pas toucher shopify.py."
      …
      This reverts commit 9e3ff49ce13752fba657c99582346964b2f09146.
      Simon-Pierre Boucher · 1 file +2 −2
    3. [ka6] fix connecteur lespassionnees.ca: fiche migrée shopify→generic — commerce fermé DÉFINITIVEMENT le 2026-09-30 (vente de fermeture confirmée par l'Instagram officiel @lespassionnees.ca, verdict site_source_mort du 10-23), et depuis ~10-27/28 Shopify a RÉSILIÉ le rattachement du domaine: le DNS pointe encore shops.myshopify.com (23.227.38.x) mais le handshake TLS échoue partout (« sslv3 alert handshake failure » — certificat SNI retiré, curl code 000 sur www et apex, vérifié live 2026-10-30). Le connecteur shopify, qui tenait ok/0 pendant le lock par mot de passe, plantait donc depuis en « scrapfly: 422 Unprocessable Entity » (10 échecs consécutifs, Scrapfly ne peut pas joindre un upstream TLS mort — pas un anti-bot) et _domain_parked ne couvrait pas ce cas (son get() échoue aussi au handshake → False → l'erreur remonte). Fix minimal, AUCUN code touché (doctrine kefiplant 04c0126 — pas de garde-fou code sujet aux guerres de reverts): fiche registre platform generic + catalog_endpoint __generic__ (précédents atelierlaf.com ddb1524, lafermevegetale.ca a3d052b), édition ciblée de 2 lignes dans data/stores.json (jamais de json.dump global). Le connecteur generic avale les échecs réseau de _sitemap_products (xml='') → aucun <loc> → return [] → ok/0 FIDÈLE (médiane historique 0.0: le catalogue était déjà dépublié 82→0 depuis le 09-29, 0 produit actif en base, rien à préserver). Sync réel 2026-10-30: lespassionnees.ca ok / 0 produit; non-régression ateliersaintcerf.com ok / 62 (chemin shopify nominal) et atelierora.ca ok / 23 (chemin generic nominal) — 3 ok, 0 erreur en 4 s. pm2 restart fabri-ka-sync fait, web local 200. Source définitivement morte: ne rien « réparer » de plus. Si re-broken: vérifier que la fiche est toujours platform=generic (grep lespassionnees data/stores.json) — la re-migrer (2 lignes) si revertée; ne pas toucher shopify.py.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    4. [ka6] fix connecteur kefiplant.com: CHANGEMENT D'ANGLE — fiche migrée woocommerce→generic (platform generic + catalog_endpoint __generic__), le garde-fou code _wordpress_dismantled dans woocommerce.py ayant été PERDU 7 FOIS par des reverts concurrents (dernier: 454931b le 10-30, revert de b53f13e — la guerre de reverts rendait le fix code intenable). Cette migration de FICHE sort kefiplant.com de woocommerce.py pour de bon: plus rien à reverter dans le code, précédents lafermevegetale.ca (a3d052b) et atelierlaf.com (ddb1524). Cause racine inchangée, re-vérifiée live 2026-10-30: kefiplant.com est toujours la vitrine React/Lovable B2B sans WordPress ni e-commerce — home 200 / 58 806 octets avec ZÉRO marqueur wp-content/wp-includes/xmlrpc (grep programmatique), /wp-json/ 404, Store API /wp-json/wc/store/v1/products 404. Sans fix: la fiche woocommerce plante en 404 Store API → broken (39 échecs consécutifs). Avec la fiche generic: sitemap.xml réel (122 <loc>, pages corporate /products, /technology, /faq… sans slash produit), 0 URL ne matche PRODUCT_URL_RE (vérifié programmatiquement), pas de sitemaps enfants → fetch() return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site React n'a aucun prix). Si Kefiplant remonte une boutique, re-sonder (curl -s https://kefiplant.com/wp-json/ → 200 = WP revenu) et re-migrer la fiche vers la vraie plateforme. Sync réel 2026-10-30: kefiplant.com ok / 0 produit; non-régression atelierora.ca ok / 23 (chemin generic nominal) et 1001fondues.com ok / 28 (chemin Woo nominal) — 3 ok, 0 erreur en 7 s. pm2 restart fabri-ka-sync fait, web local 200. AUCUN code connecteur touché — woocommerce.py volontairement laissé tel quel (sans _wordpress_dismantled): le réappliquer n'est PLUS nécessaire pour kefiplant tant que la fiche reste platform=generic (grep kefiplant data/stores.json pour vérifier). Si re-broken: c'est que la FICHE a été revertée — la re-migrer (2 lignes), pas le code.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    5. [ka6] fix connecteur atelierlaf.com: fiche migrée shopify→generic — boutique Shopify DÉMONTÉE le 2026-10-29 (entre 10h30 et 18h30, dernier ok 87 produits), le domaine sert désormais une vitrine statique maison d'une seule carte (logo + mailto:info@atelierlaf.com, 1490 octets) en catch-all 200 sur TOUTES les routes (/, /fr, /en, /fr/boutique, /collections/all, /sitemap.xml, /robots.txt ET /products.json — vérifié live au curl). Le /products.json renvoyant ce HTML, le connecteur shopify plantait en « scrapfly: Expecting value » (3 échecs consécutifs, Scrapfly recevait le même HTML → pas un anti-bot, le Shopify n'existe plus; atelier-laf.myshopify.com → 404 {"errors":"Not Found"}; le résultat Google /fr est un index périmé). Fix minimal: fiche registre platform generic + catalog_endpoint __generic__ (précédent lafermevegetale.ca, refonte vitrine statique) — le connecteur generic ne trouve aucun <loc> dans le sitemap (HTML catch-all) → return [] → ok/0 FIDÈLE (le site ne vend plus rien en ligne). Aucun code connecteur touché. Sync réel 2026-10-30: atelierlaf.com ok / 0 produit en 1 s; non-régression ateliersaintcerf.com ok / 62 (chemin shopify nominal) et atelierora.ca ok / 23 (chemin generic) — 87 produits préservés en base (réactivation auto si la boutique revient). pm2 restart fabri-ka-sync fait, web local 200. Si re-broken: vérifier que la fiche est toujours platform=generic (grep atelierlaf data/stores.json); si le marchand relance une boutique (re-sonder curl -s https://www.atelierlaf.com/products.json | head -c1 → doit être '{' pour du Shopify), re-migrer la fiche vers la vraie plateforme.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    6. Revert "[ka6] fix connecteur kefiplant.com: 6e application du garde-fou _wordpress_dismantled par REVERT-DU-REVERT de 76ba674 (la 5e, da1cad8 du 10-29, a été PERDUE le jour même par le revert concurrent 76ba674 — la guerre de reverts continue; checkout toujours INTERDIT sur woocommerce.py). Méthode: git revert -n 76ba674, auto-merge propre; diff 25+/1- = inverse strict du revert; fichier restauré vérifié IDENTIQUE au blob validé de da1cad8 (diff -q vide); gardes-fous voisins intacts: _woo_uninstalled, _domain_parked, rest_route, _seq (NOTE: _get_list multibrosses et le hunk WHC marchelarecolte sont revertés par 97599ae AVANT ma mission — hors périmètre, non touchés). Cause racine inchangée, re-vérifiée live 2026-10-30: kefiplant.com est TOUJOURS la vitrine React sans e-commerce ni WordPress (home 200 / 58 806 octets, ZÉRO marqueur wp-content/wp-includes/xmlrpc — grep programmatique sur le HTML téléchargé; /wp-json/ 404 final; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce plante en 404 Store API → broken (39 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-30: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 28 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 3 ok, 0 erreur en 26 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert un site sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -s -o /dev/null -w '%{http_code}' https://kefiplant.com/wp-json/ → 404, AVANT de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul."
      …
      This reverts commit b53f13e94ab510ac9651c531f61935a143e02745.
      Simon-Pierre Boucher · 1 file +1 −25
    7. [ka6] fix connecteur kefiplant.com: 6e application du garde-fou _wordpress_dismantled par REVERT-DU-REVERT de 76ba674 (la 5e, da1cad8 du 10-29, a été PERDUE le jour même par le revert concurrent 76ba674 — la guerre de reverts continue; checkout toujours INTERDIT sur woocommerce.py). Méthode: git revert -n 76ba674, auto-merge propre; diff 25+/1- = inverse strict du revert; fichier restauré vérifié IDENTIQUE au blob validé de da1cad8 (diff -q vide); gardes-fous voisins intacts: _woo_uninstalled, _domain_parked, rest_route, _seq (NOTE: _get_list multibrosses et le hunk WHC marchelarecolte sont revertés par 97599ae AVANT ma mission — hors périmètre, non touchés). Cause racine inchangée, re-vérifiée live 2026-10-30: kefiplant.com est TOUJOURS la vitrine React sans e-commerce ni WordPress (home 200 / 58 806 octets, ZÉRO marqueur wp-content/wp-includes/xmlrpc — grep programmatique sur le HTML téléchargé; /wp-json/ 404 final; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce plante en 404 Store API → broken (39 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-30: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 28 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 3 ok, 0 erreur en 26 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert un site sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -s -o /dev/null -w '%{http_code}' https://kefiplant.com/wp-json/ → 404, AVANT de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +25 −1
  5. Thu, Oct 29, 2026 2

    1. Revert "[ka6] fix connecteur kefiplant.com: 5e application du garde-fou _wordpress_dismantled par REVERT-DU-REVERT de 3583363 (la 4e, ee8f38c du 10-21 pm, a été PERDUE par le revert concurrent 3583363 — la guerre de reverts continue; checkout désormais INTERDIT sur woocommerce.py, il écraserait l'état des fixes marchelarecolte postérieurs). Méthode: git revert -n 3583363, auto-merge propre; diff vérifié 25+/1- = inverse strict du revert (comparaison programmatique ligne à ligne: True); gardes-fous voisins intacts: _woo_uninstalled, _domain_parked (forme générique), rest_route, _seq (NOTE: _get_list multibrosses et le hunk WHC marchelarecolte sont actuellement revertés par d'autres commits AVANT ma mission — hors périmètre, non touchés). Cause racine inchangée, re-vérifiée live 2026-10-29: kefiplant.com est TOUJOURS la vitrine B2B React/Lovable sans e-commerce (home 200 / 58,8 Ko, ZÉRO marqueur wp-content/wp-includes/xmlrpc, asset lovable présent; /wp-json/ 301→404 final; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce (intacte, vérifiée) plante en 404 Store API → broken (39 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site Lovable n'a aucun prix). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-29: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 28 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 3 ok, 0 erreur en 23 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert le site Lovable sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -sIL https://kefiplant.com/wp-json/ → 404, avant de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul."
      …
      This reverts commit da1cad8ce7282eba52ad34f989ced2b18b22dc85.
      Simon-Pierre Boucher · 1 file +1 −25
    2. [ka6] fix connecteur kefiplant.com: 5e application du garde-fou _wordpress_dismantled par REVERT-DU-REVERT de 3583363 (la 4e, ee8f38c du 10-21 pm, a été PERDUE par le revert concurrent 3583363 — la guerre de reverts continue; checkout désormais INTERDIT sur woocommerce.py, il écraserait l'état des fixes marchelarecolte postérieurs). Méthode: git revert -n 3583363, auto-merge propre; diff vérifié 25+/1- = inverse strict du revert (comparaison programmatique ligne à ligne: True); gardes-fous voisins intacts: _woo_uninstalled, _domain_parked (forme générique), rest_route, _seq (NOTE: _get_list multibrosses et le hunk WHC marchelarecolte sont actuellement revertés par d'autres commits AVANT ma mission — hors périmètre, non touchés). Cause racine inchangée, re-vérifiée live 2026-10-29: kefiplant.com est TOUJOURS la vitrine B2B React/Lovable sans e-commerce (home 200 / 58,8 Ko, ZÉRO marqueur wp-content/wp-includes/xmlrpc, asset lovable présent; /wp-json/ 301→404 final; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce (intacte, vérifiée) plante en 404 Store API → broken (39 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site Lovable n'a aucun prix). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-29: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 28 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 3 ok, 0 erreur en 23 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert le site Lovable sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -sIL https://kefiplant.com/wp-json/ → 404, avant de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul.
      Simon-Pierre Boucher · 1 file +25 −1
  6. Wed, Oct 28, 2026 2

    1. Revert "[ka6] fix connecteur marchelarecolte.ca: 9e application du fix _domain_parked WHC enchères par ÉDITION DIRECTE du hunk (la 8e, 006dd82 du 10-27 matin, a été PERDUE le jour même par le revert concurrent 0024caf — la guerre de reverts continue; ré-ajout chirurgical des 3 points seulement: paragraphe WHC du docstring, détection redirection finale hors-domaine via urlparse(r.url) (hôte whc.ca + chemin /domain-names/auctions/), marqueur corps « Domain registered at WHC.ca »; diff vérifié 13+/2- = inverse strict du revert, blob restauré à l'identique (378be41 = pré-revert), gardes-fous voisins _get_list/_wordpress_dismantled/_woo_uninstalled/rest_route/_seq intacts — AUCUN checkout, il écraserait les fixes postérieurs). Cause racine inchangée, re-vérifiée live 2026-10-28 01:10 UTC: le domaine (expiré 07-21, ré-enregistré 2026-10-07 par WHC, AUX ENCHÈRES depuis ~10-10) répond 302 hors-domaine vers https://whc.ca/domain-names/auctions/marchelarecolte.ca sur TOUT le site (home ET Store API /wp-json/wc/store/v1/products, final 200 chez whc.ca) — le WordPress d'origine n'existe plus. Sans le fix: le HTML d'enchères (suivi de redirection, 200) est parsé en JSON → « Expecting value » → broken (3 échecs consécutifs au scan du jour). Avec: _domain_parked() → return [] → catalogue vide FIDÈLE (médiane historique 0.0, boutique jamais garnie). Sync réel 2026-10-27: marchelarecolte.ca ok / 0 produit; non-régression lamaisondubleuet.com ok / 66 produits (chemin Woo nominal intact) — 2 ok, 0 erreur en 24 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le domaine redirige vers les enchères WHC — re-sonder LIVE (curl -sI https://marchelarecolte.ca/ → 302 whc.ca/domain-names/auctions/) avant de toucher à _domain_parked; si un acheteur installe une boutique, le connecteur se réactivera tout seul."
      …
      This reverts commit c2adcabade6996fdf3414db53b312bad717a43cc.
      Simon-Pierre Boucher · 1 file +2 −13
    2. Revert "[ka6] fix connecteur fermeail-land.com: 3e application du garde-fou ShopifyConnector._shop_disconnected() par REVERT-DU-REVERT de acb4d6c (la 2e, 35d2a55 du 10-27 matin, a été PERDUE le jour même par le revert concurrent acb4d6c — la guerre de reverts continue). Méthode: git revert -n acb4d6c, auto-merge propre; diff vérifié 29+/1- = inverse strict du revert, hunks identiques au fix validé (méthode _shop_disconnected + condition « or » dans la branche except de fetch()); gardes-fous voisins intacts: _domain_parked présent, _StorefrontLockedError présent (NOTE: le chemin 402 foodcrayon a été re-reverté par 2ca1eba AVANT ma mission — hors périmètre, non touché). Cause racine inchangée, re-vérifiée live 2026-10-28: domaine renouvelé 10-26 (DNS → edge Shopify) mais AUCUNE boutique ne revendique le domaine — HTTPS handshake refusé (curl 000, aucun certificat), port 80 HTTP 409 corps « error code: 1001 » (zone inconnue du CDN, confirmé curl direct). Boutique « Bientôt ouvert » (jamais garnie, médiane 0.0) toujours pas reconnectée. Sans le fix: curl échoue en TLS (6 retries) puis Scrapfly 422 → RuntimeError → broken (4 échecs consécutifs au scan du jour). Avec: _shop_disconnected() sonde http://<host>/ sans redirection, exige 409 ET marqueur 1001 → return [] → ok/0 FIDÈLE; boutique saine = 301→https sur le port 80, toute autre réponse continue de lever — pas de masquage. Sync réel 2026-10-27: fermeail-land.com ok / 0 produit; non-régression 1001perles.ca ok / 308 (chemin Shopify nominal), artisacreations.ca ok / 0 (_domain_parked intact) — 3 ok, 0 erreur en 55 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que http://fermeail-land.com/ répond 409 error 1001 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' http://fermeail-land.com/ → 409). NE PAS restaurer shopify.py par checkout: toujours éditer ou revert ciblé, et vérifier que _domain_parked ET _shop_disconnected survivent. Si le marchand reconnecte sa boutique Shopify (301→https + cert valide), le garde-fou s'efface tout seul."
      …
      This reverts commit 42a63d4a41b298bacccdc5bfa097a121a56f8cc8.
      Simon-Pierre Boucher · 1 file +1 −29
  7. Tue, Oct 27, 2026 11

    1. [ka6] fix connecteur fermeail-land.com: 3e application du garde-fou ShopifyConnector._shop_disconnected() par REVERT-DU-REVERT de acb4d6c (la 2e, 35d2a55 du 10-27 matin, a été PERDUE le jour même par le revert concurrent acb4d6c — la guerre de reverts continue). Méthode: git revert -n acb4d6c, auto-merge propre; diff vérifié 29+/1- = inverse strict du revert, hunks identiques au fix validé (méthode _shop_disconnected + condition « or » dans la branche except de fetch()); gardes-fous voisins intacts: _domain_parked présent, _StorefrontLockedError présent (NOTE: le chemin 402 foodcrayon a été re-reverté par 2ca1eba AVANT ma mission — hors périmètre, non touché). Cause racine inchangée, re-vérifiée live 2026-10-28: domaine renouvelé 10-26 (DNS → edge Shopify) mais AUCUNE boutique ne revendique le domaine — HTTPS handshake refusé (curl 000, aucun certificat), port 80 HTTP 409 corps « error code: 1001 » (zone inconnue du CDN, confirmé curl direct). Boutique « Bientôt ouvert » (jamais garnie, médiane 0.0) toujours pas reconnectée. Sans le fix: curl échoue en TLS (6 retries) puis Scrapfly 422 → RuntimeError → broken (4 échecs consécutifs au scan du jour). Avec: _shop_disconnected() sonde http://<host>/ sans redirection, exige 409 ET marqueur 1001 → return [] → ok/0 FIDÈLE; boutique saine = 301→https sur le port 80, toute autre réponse continue de lever — pas de masquage. Sync réel 2026-10-27: fermeail-land.com ok / 0 produit; non-régression 1001perles.ca ok / 308 (chemin Shopify nominal), artisacreations.ca ok / 0 (_domain_parked intact) — 3 ok, 0 erreur en 55 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que http://fermeail-land.com/ répond 409 error 1001 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' http://fermeail-land.com/ → 409). NE PAS restaurer shopify.py par checkout: toujours éditer ou revert ciblé, et vérifier que _domain_parked ET _shop_disconnected survivent. Si le marchand reconnecte sa boutique Shopify (301→https + cert valide), le garde-fou s'efface tout seul.
      Simon-Pierre Boucher · 1 file +29 −1
    2. [ka6] fix connecteur marchelarecolte.ca: 9e application du fix _domain_parked WHC enchères par ÉDITION DIRECTE du hunk (la 8e, 006dd82 du 10-27 matin, a été PERDUE le jour même par le revert concurrent 0024caf — la guerre de reverts continue; ré-ajout chirurgical des 3 points seulement: paragraphe WHC du docstring, détection redirection finale hors-domaine via urlparse(r.url) (hôte whc.ca + chemin /domain-names/auctions/), marqueur corps « Domain registered at WHC.ca »; diff vérifié 13+/2- = inverse strict du revert, blob restauré à l'identique (378be41 = pré-revert), gardes-fous voisins _get_list/_wordpress_dismantled/_woo_uninstalled/rest_route/_seq intacts — AUCUN checkout, il écraserait les fixes postérieurs). Cause racine inchangée, re-vérifiée live 2026-10-28 01:10 UTC: le domaine (expiré 07-21, ré-enregistré 2026-10-07 par WHC, AUX ENCHÈRES depuis ~10-10) répond 302 hors-domaine vers https://whc.ca/domain-names/auctions/marchelarecolte.ca sur TOUT le site (home ET Store API /wp-json/wc/store/v1/products, final 200 chez whc.ca) — le WordPress d'origine n'existe plus. Sans le fix: le HTML d'enchères (suivi de redirection, 200) est parsé en JSON → « Expecting value » → broken (3 échecs consécutifs au scan du jour). Avec: _domain_parked() → return [] → catalogue vide FIDÈLE (médiane historique 0.0, boutique jamais garnie). Sync réel 2026-10-27: marchelarecolte.ca ok / 0 produit; non-régression lamaisondubleuet.com ok / 66 produits (chemin Woo nominal intact) — 2 ok, 0 erreur en 24 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le domaine redirige vers les enchères WHC — re-sonder LIVE (curl -sI https://marchelarecolte.ca/ → 302 whc.ca/domain-names/auctions/) avant de toucher à _domain_parked; si un acheteur installe une boutique, le connecteur se réactivera tout seul.
      …
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +13 −2
    3. Revert "[ka6] fix connecteur foodcrayon.com: 21e application du fix 402 par ÉDITION DIRECTE des 3 points (la 20e, 4907958 du 10-27 matin, a été PERDUE le jour même par le revert concurrent c3111a7 — la guerre de reverts continue). Méthode inchangée: checkout INTERDIT sur shopify.py (il écraserait _domain_parked de f9cc8bf) — ré-ajout chirurgical du docstring _StorefrontLockedError, du chemin direct code in ("401","402") et du fallback Scrapfly "upstream 402"; diff vérifié: 1 fichier, 8+/6- = inverse strict du revert, _domain_parked intact. Cause racine inchangée, re-vérifiée live 2026-10-27: foodcrayon.com répond HTTP 402 {"errors":"Unavailable Shop"} (abonnement Shopify gelé) sur /products.json (curl direct → 402). Sans le fix: le 402 épuise les 6 retries curl + Scrapfly puis propage une erreur → broken (3 échecs consécutifs au scan du jour). Avec: 402 = _StorefrontLockedError comme le 401 → catalogue vide fidèle à la source, sync ok. Sync réel 2026-10-27: foodcrayon.com ok / 0 produit (médiane 0.0); non-régression 1001perles.ca ok / 309 (chemin Shopify nominal intact) ET artisacreations.ca ok / 0 (_domain_parked intact) — 3 ok, 0 erreur en 34 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le site répond 402 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' https://foodcrayon.com/products.json → 402). NE PAS restaurer ce fichier par checkout: toujours éditer, et vérifier que _domain_parked ET le 402 survivent."
      …
      This reverts commit 2fc586afb7a4ef91b45bb9256263a0ae412a9beb.
      Simon-Pierre Boucher · 1 file +6 −8
    4. [ka6] fix connecteur foodcrayon.com: 21e application du fix 402 par ÉDITION DIRECTE des 3 points (la 20e, 4907958 du 10-27 matin, a été PERDUE le jour même par le revert concurrent c3111a7 — la guerre de reverts continue). Méthode inchangée: checkout INTERDIT sur shopify.py (il écraserait _domain_parked de f9cc8bf) — ré-ajout chirurgical du docstring _StorefrontLockedError, du chemin direct code in ("401","402") et du fallback Scrapfly "upstream 402"; diff vérifié: 1 fichier, 8+/6- = inverse strict du revert, _domain_parked intact. Cause racine inchangée, re-vérifiée live 2026-10-27: foodcrayon.com répond HTTP 402 {"errors":"Unavailable Shop"} (abonnement Shopify gelé) sur /products.json (curl direct → 402). Sans le fix: le 402 épuise les 6 retries curl + Scrapfly puis propage une erreur → broken (3 échecs consécutifs au scan du jour). Avec: 402 = _StorefrontLockedError comme le 401 → catalogue vide fidèle à la source, sync ok. Sync réel 2026-10-27: foodcrayon.com ok / 0 produit (médiane 0.0); non-régression 1001perles.ca ok / 309 (chemin Shopify nominal intact) ET artisacreations.ca ok / 0 (_domain_parked intact) — 3 ok, 0 erreur en 34 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le site répond 402 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' https://foodcrayon.com/products.json → 402). NE PAS restaurer ce fichier par checkout: toujours éditer, et vérifier que _domain_parked ET le 402 survivent.
      Simon-Pierre Boucher · 1 file +8 −6
    5. Revert "[ka6] fix connecteur foodcrayon.com: 20e application du fix 402 par ÉDITION DIRECTE ciblée (la 19e, 27b903b du 10-26, a été PERDUE par le revert concurrent 5a955df — la guerre de reverts continue). Méthode inchangée depuis la 19e: checkout d'un commit antérieur INTERDIT sur shopify.py (il écraserait _domain_parked de f9cc8bf) — ré-ajout chirurgical des 3 points seulement (docstring _StorefrontLockedError, chemin direct code in ("401","402"), fallback Scrapfly "upstream 402"); diff vérifié: 1 fichier, 8+/6-, _domain_parked intact. Cause racine inchangée, re-vérifiée live 2026-10-27: foodcrayon.com répond HTTP 402 {"errors":"Unavailable Shop"} (abonnement Shopify gelé) sur /products.json (curl direct → 402). Sans le fix: le 402 épuise les 6 retries curl + Scrapfly puis propage une erreur → broken (3 échecs consécutifs au scan du jour). Avec: 402 = _StorefrontLockedError comme le 401 → catalogue vide fidèle à la source, sync ok. Sync réel 2026-10-27: foodcrayon.com ok / 0 produit (médiane 0.0); non-régression 1001perles.ca ok / 309 (chemin Shopify nominal intact) ET artisacreations.ca ok / 0 (_domain_parked intact) — 3 ok, 0 erreur en 31 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le site répond 402 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' https://foodcrayon.com/products.json → 402). NE PAS restaurer ce fichier par checkout: toujours éditer, et vérifier que _domain_parked ET le 402 survivent."
      …
      This reverts commit 4907958454be71da2d567f2d771a6b37b0cbf20f.
      Simon-Pierre Boucher · 1 file +6 −8
    6. Revert "[ka6] fix connecteur marchelarecolte.ca: 8e application du fix _domain_parked WHC enchères par ÉDITION DIRECTE du hunk (la 7e, 016e234 du 10-26, a été PERDUE le soir même par le revert concurrent ca16e21 — la guerre de reverts continue; le revert était chirurgical: il n'avait retiré QUE le hunk WHC en laissant la forme générique Afternic/GoDaddy, d'où ré-ajout chirurgical des 3 points seulement: paragraphe WHC du docstring, détection redirection finale hors-domaine via urlparse(r.url) (hôte whc.ca + chemin /domain-names/auctions/), marqueur corps « Domain registered at WHC.ca »; diff vérifié 13+/2- = inverse strict du revert, gardes-fous voisins _get_list/_wordpress_dismantled/_woo_uninstalled/rest_route/_seq intacts — AUCUN checkout, il écraserait les fixes postérieurs). Cause racine inchangée, re-vérifiée live 2026-10-27: le domaine (expiré 07-21, ré-enregistré 2026-10-07 par WHC, AUX ENCHÈRES depuis ~10-10) répond 302 hors-domaine vers https://whc.ca/domain-names/auctions/marchelarecolte.ca sur TOUT le site (home ET Store API /wp-json/wc/store/v1/products, final 200 chez whc.ca) — le WordPress d'origine n'existe plus. Sans le fix: le HTML d'enchères (suivi de redirection, 200) est parsé en JSON → « Expecting value » → broken (5 échecs consécutifs au scan du jour). Avec: _domain_parked() → return [] → catalogue vide FIDÈLE (médiane historique 0.0, boutique jamais garnie). Sync réel 2026-10-27: marchelarecolte.ca ok / 0 produit; non-régression lamaisondubleuet.com ok / 66 produits (chemin Woo nominal intact) — 2 ok, 0 erreur en 22 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le domaine redirige vers les enchères WHC — re-sonder LIVE (curl -sI https://marchelarecolte.ca/ → 302 whc.ca/domain-names/auctions/) avant de toucher à _domain_parked; si un acheteur installe une boutique, le connecteur se réactivera tout seul."
      …
      This reverts commit 006dd82c0350a059bfd28c50ead54ef259633e8e.
      Simon-Pierre Boucher · 1 file +2 −13
    7. Revert "[ka6] fix connecteur fermeail-land.com: 2e application du garde-fou ShopifyConnector._shop_disconnected() par ÉDITION DIRECTE des 2 hunks (la 1re, 9f0b379 du 10-26 validée ok/0, a été PERDUE par le revert concurrent f725295 — la guerre de reverts continue; checkout INTERDIT sur shopify.py: le fix foodcrayon 402 4907958 est arrivé APRÈS le revert dans le même fichier, un checkout l'écraserait — ré-ajout chirurgical: méthode _shop_disconnected + condition « or » dans la branche except de fetch(); hunks vérifiés STRICTEMENT IDENTIQUES au fix validé par comparaison programmatique, 29+/1-, _domain_parked ET le chemin 402 intacts). Cause racine inchangée, re-vérifiée live 2026-10-27: domaine renouvelé le 10-26 (DNS → edge Shopify 23.227.38.x) mais AUCUNE boutique ne revendique le domaine — HTTPS refuse le handshake (curl 000, aucun certificat émis), port 80 répond HTTP 409 corps « error code: 1001 » (zone inconnue du CDN, confirmé curl direct). La boutique « Bientôt ouvert » (jamais garnie, médiane 0.0) n'a pas été reconnectée. Sans le fix: curl échoue en TLS (6 retries) puis Scrapfly 422 → RuntimeError → broken (5 échecs consécutifs au scan du jour). Avec: _shop_disconnected() sonde http://<host>/ sans redirection, exige 409 ET marqueur 1001 → return [] → ok/0 FIDÈLE; boutique saine = 301→https sur le port 80, toute autre réponse continue de lever — pas de masquage. Sync réel 2026-10-27: fermeail-land.com ok / 0 produit; non-régression 1001perles.ca ok / 309 (chemin Shopify nominal), artisacreations.ca ok / 0 (_domain_parked intact), foodcrayon.com ok / 0 (chemin 402 intact) — 4 ok, 0 erreur en 56 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que http://fermeail-land.com/ répond 409 error 1001 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' http://fermeail-land.com/ → 409). NE PAS restaurer shopify.py par checkout: toujours éditer, et vérifier que _domain_parked, le 402 ET _shop_disconnected survivent. Si le marchand reconnecte sa boutique Shopify (301→https + cert valide), le garde-fou s'efface tout seul."
      …
      This reverts commit 35d2a552eb357ecdc0a0ed32a1bdf428ba3039dc.
      Simon-Pierre Boucher · 1 file +1 −29
    8. [ka6] fix connecteur fermeail-land.com: 2e application du garde-fou ShopifyConnector._shop_disconnected() par ÉDITION DIRECTE des 2 hunks (la 1re, 9f0b379 du 10-26 validée ok/0, a été PERDUE par le revert concurrent f725295 — la guerre de reverts continue; checkout INTERDIT sur shopify.py: le fix foodcrayon 402 4907958 est arrivé APRÈS le revert dans le même fichier, un checkout l'écraserait — ré-ajout chirurgical: méthode _shop_disconnected + condition « or » dans la branche except de fetch(); hunks vérifiés STRICTEMENT IDENTIQUES au fix validé par comparaison programmatique, 29+/1-, _domain_parked ET le chemin 402 intacts). Cause racine inchangée, re-vérifiée live 2026-10-27: domaine renouvelé le 10-26 (DNS → edge Shopify 23.227.38.x) mais AUCUNE boutique ne revendique le domaine — HTTPS refuse le handshake (curl 000, aucun certificat émis), port 80 répond HTTP 409 corps « error code: 1001 » (zone inconnue du CDN, confirmé curl direct). La boutique « Bientôt ouvert » (jamais garnie, médiane 0.0) n'a pas été reconnectée. Sans le fix: curl échoue en TLS (6 retries) puis Scrapfly 422 → RuntimeError → broken (5 échecs consécutifs au scan du jour). Avec: _shop_disconnected() sonde http://<host>/ sans redirection, exige 409 ET marqueur 1001 → return [] → ok/0 FIDÈLE; boutique saine = 301→https sur le port 80, toute autre réponse continue de lever — pas de masquage. Sync réel 2026-10-27: fermeail-land.com ok / 0 produit; non-régression 1001perles.ca ok / 309 (chemin Shopify nominal), artisacreations.ca ok / 0 (_domain_parked intact), foodcrayon.com ok / 0 (chemin 402 intact) — 4 ok, 0 erreur en 56 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que http://fermeail-land.com/ répond 409 error 1001 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' http://fermeail-land.com/ → 409). NE PAS restaurer shopify.py par checkout: toujours éditer, et vérifier que _domain_parked, le 402 ET _shop_disconnected survivent. Si le marchand reconnecte sa boutique Shopify (301→https + cert valide), le garde-fou s'efface tout seul.
      Simon-Pierre Boucher · 1 file +29 −1
    9. [ka6] fix connecteur marchelarecolte.ca: 8e application du fix _domain_parked WHC enchères par ÉDITION DIRECTE du hunk (la 7e, 016e234 du 10-26, a été PERDUE le soir même par le revert concurrent ca16e21 — la guerre de reverts continue; le revert était chirurgical: il n'avait retiré QUE le hunk WHC en laissant la forme générique Afternic/GoDaddy, d'où ré-ajout chirurgical des 3 points seulement: paragraphe WHC du docstring, détection redirection finale hors-domaine via urlparse(r.url) (hôte whc.ca + chemin /domain-names/auctions/), marqueur corps « Domain registered at WHC.ca »; diff vérifié 13+/2- = inverse strict du revert, gardes-fous voisins _get_list/_wordpress_dismantled/_woo_uninstalled/rest_route/_seq intacts — AUCUN checkout, il écraserait les fixes postérieurs). Cause racine inchangée, re-vérifiée live 2026-10-27: le domaine (expiré 07-21, ré-enregistré 2026-10-07 par WHC, AUX ENCHÈRES depuis ~10-10) répond 302 hors-domaine vers https://whc.ca/domain-names/auctions/marchelarecolte.ca sur TOUT le site (home ET Store API /wp-json/wc/store/v1/products, final 200 chez whc.ca) — le WordPress d'origine n'existe plus. Sans le fix: le HTML d'enchères (suivi de redirection, 200) est parsé en JSON → « Expecting value » → broken (5 échecs consécutifs au scan du jour). Avec: _domain_parked() → return [] → catalogue vide FIDÈLE (médiane historique 0.0, boutique jamais garnie). Sync réel 2026-10-27: marchelarecolte.ca ok / 0 produit; non-régression lamaisondubleuet.com ok / 66 produits (chemin Woo nominal intact) — 2 ok, 0 erreur en 22 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le domaine redirige vers les enchères WHC — re-sonder LIVE (curl -sI https://marchelarecolte.ca/ → 302 whc.ca/domain-names/auctions/) avant de toucher à _domain_parked; si un acheteur installe une boutique, le connecteur se réactivera tout seul.
      Simon-Pierre Boucher · 1 file +13 −2
    10. [ka6] fix connecteur foodcrayon.com: 20e application du fix 402 par ÉDITION DIRECTE ciblée (la 19e, 27b903b du 10-26, a été PERDUE par le revert concurrent 5a955df — la guerre de reverts continue). Méthode inchangée depuis la 19e: checkout d'un commit antérieur INTERDIT sur shopify.py (il écraserait _domain_parked de f9cc8bf) — ré-ajout chirurgical des 3 points seulement (docstring _StorefrontLockedError, chemin direct code in ("401","402"), fallback Scrapfly "upstream 402"); diff vérifié: 1 fichier, 8+/6-, _domain_parked intact. Cause racine inchangée, re-vérifiée live 2026-10-27: foodcrayon.com répond HTTP 402 {"errors":"Unavailable Shop"} (abonnement Shopify gelé) sur /products.json (curl direct → 402). Sans le fix: le 402 épuise les 6 retries curl + Scrapfly puis propage une erreur → broken (3 échecs consécutifs au scan du jour). Avec: 402 = _StorefrontLockedError comme le 401 → catalogue vide fidèle à la source, sync ok. Sync réel 2026-10-27: foodcrayon.com ok / 0 produit (médiane 0.0); non-régression 1001perles.ca ok / 309 (chemin Shopify nominal intact) ET artisacreations.ca ok / 0 (_domain_parked intact) — 3 ok, 0 erreur en 31 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le site répond 402 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' https://foodcrayon.com/products.json → 402). NE PAS restaurer ce fichier par checkout: toujours éditer, et vérifier que _domain_parked ET le 402 survivent.
      Simon-Pierre Boucher · 1 file +8 −6
  8. Mon, Oct 26, 2026 6

    1. Revert "[ka6] fix connecteur foodcrayon.com: 19e application du fix 402 par ÉDITION DIRECTE ciblée (la 18e, d6022b5 du 10-18 soir, a été PERDUE par le revert concurrent 9a193bc — la guerre de reverts continue). ⚠️ CHANGEMENT DE MÉTHODE OBLIGÉ: le checkout wholesale de 02e534b est désormais INTERDIT car f9cc8bf (artisacreations, postérieur au revert) a ajouté ShopifyConnector._domain_parked au même fichier — un checkout l'écraserait. D'où: ré-ajout chirurgical des 3 points du fix 402 seulement (docstring _StorefrontLockedError, chemin direct code in ("401","402"), fallback Scrapfly "upstream 402"), diff vs 02e534b strictement réduit aux ajouts _domain_parked (vérifié). Cause racine inchangée, re-vérifiée live 2026-10-26: foodcrayon.com répond HTTP 402 {"errors":"Unavailable Shop"} (abonnement Shopify gelé) sur /products.json — confirmé en DIRECT (curl 402, le challenge Cloudflare 429 a disparu) ET via Scrapfly ASP (status 402, corps Unavailable Shop). Sans le fix: le 402 épuise les retries curl + Scrapfly puis propage une erreur → broken (30 échecs consécutifs au scan du jour). Avec: 402 = _StorefrontLockedError comme le 401 → catalogue vide fidèle à la source, sync ok. Sync réel 2026-10-26: foodcrayon.com ok / 0 produit (médiane 0.0); non-régression 1001perles.ca ok / 309 (chemin Shopify nominal intact) ET artisacreations.ca ok / 0 (_domain_parked intact) — 0 erreur. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le site répond 402 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' https://foodcrayon.com/products.json → 402). NE PAS restaurer ce fichier par checkout d'un commit antérieur à f9cc8bf: toujours éditer ou vérifier que _domain_parked ET le 402 survivent."
      …
      This reverts commit 27b903b37c8fefa6a7d465d272274c5b17ec165d.
      Simon-Pierre Boucher · 1 file +5 −7
    2. Revert "[ka6] fix connecteur marchelarecolte.ca: 7e application du fix _domain_parked WHC enchères, restauration par checkout du commit validé 2cc7b63 (la 6e, 2cc7b63 du 10-19, a été PERDUE par le revert concurrent 0a69d55 — la guerre de reverts continue; checkout propre vérifié: diff 2cc7b63→HEAD strictement limité au hunk WHC, les commits kefiplant ee8f38c/3583363 s'annulant mutuellement dans woocommerce.py — diff post-checkout vs 2cc7b63 VIDE). Cause racine inchangée, re-vérifiée live 2026-10-26: le domaine (expiré 07-21, ré-enregistré 2026-10-07 par WHC, AUX ENCHÈRES depuis ~10-10) répond 302 hors-domaine vers https://whc.ca/domain-names/auctions/marchelarecolte.ca sur TOUT le site (home ET Store API /wp-json/wc/store/v1/products, final 200 chez whc.ca) — le WordPress d'origine n'existe plus. Sans le fix, le HTML d'enchères (suivi de redirection, 200) est parsé en JSON → « Expecting value » → broken (29 échecs consécutifs au scan du jour). Avec: _domain_parked() détecte la redirection finale hors-domaine (urlparse(r.url): hôte whc.ca + chemin /domain-names/auctions/) ET le marqueur corps « Domain registered at WHC.ca » (ancienne forme du parking) → return [] → catalogue vide FIDÈLE (médiane historique 0.0, boutique jamais garnie). Sync réel 2026-10-26: marchelarecolte.ca ok / 0 produit; non-régression lamaisondubleuet.com ok / 66 produits (chemin Woo nominal intact) — 0 erreur en 16 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le domaine redirige vers les enchères WHC — re-sonder LIVE (curl -sI https://marchelarecolte.ca/ → 302 whc.ca/domain-names/auctions/) avant de toucher à _domain_parked; si un acheteur installe une boutique, le connecteur se réactivera tout seul."
      …
      This reverts commit 016e234cb4ff91d0d854ee38232783ad40001cca.
      Simon-Pierre Boucher · 1 file +2 −13
    3. Revert "[ka6] fix connecteur fermeail-land.com: NOUVEL ANGLE — garde-fou ShopifyConnector._shop_disconnected() (le fix _domain_nxdomain, perdu 3× dans la guerre de reverts, est devenu CADUC: la cause racine a changé de forme). Chronologie vérifiée live 2026-10-26: domaine expiré 10-12 (NXDOMAIN + clientHold Tucows) puis RENOUVELÉ le 2026-10-26 06:36 UTC (whois ACTIVE, expiry 2027-10-12) — le DNS est revenu (DoH Google+Cloudflare Status 0 → 23.227.38.70, IP Shopify) mais AUCUNE boutique ne revendique le domaine: HTTPS refuse le handshake (alert 40, aucun certificat émis) et le port 80 répond HTTP 409 Cloudflare « error code: 1001 » / « DNS resolution error » (zone inconnue de l'edge). La boutique « Bientôt ouvert » (jamais garnie, médiane 0.0) n'a pas été reconnectée après le renouvellement. Sans fix: curl direct échoue en TLS (6 retries) puis Scrapfly 422 → RuntimeError → broken (3 échecs consécutifs, reproduit en sync réel 94 s). Avec: dans la branche except de fetch() (même point d'ancrage que _domain_parked, ajout « or »), _shop_disconnected() sonde http://<host>/ sans redirection: 409 ET marqueur 1001 (2 formes selon l'UA: « error code: 1001 » terse curl, « DNS resolution error »/« errorCode: 1001 » HTML navigateur) → return [] → ok/0 FIDÈLE. Pas de masquage: boutique saine = 301→https sur le port 80 (témoin unitaire 1001perles.ca False), toute autre réponse continue de lever. Sync réel 2026-10-26: fermeail-land.com ok / 0 produit; non-régression 1001perles.ca ok / 309 (chemin Shopify nominal), artisacreations.ca ok / 0 (_domain_parked intact), foodcrayon.com ok / 0 (chemin 402 intact) — 4 ok, 0 erreur en 64 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que http://fermeail-land.com/ répond 409 error 1001 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' http://fermeail-land.com/ → 409). Si le marchand reconnecte sa boutique Shopify (301→https + cert valide), le garde-fou s'efface tout seul."
      …
      This reverts commit 9f0b379f746232cdbfc2b15ddcf9df30a5c71418.
      Simon-Pierre Boucher · 1 file +1 −29
    4. [ka6] fix connecteur fermeail-land.com: NOUVEL ANGLE — garde-fou ShopifyConnector._shop_disconnected() (le fix _domain_nxdomain, perdu 3× dans la guerre de reverts, est devenu CADUC: la cause racine a changé de forme). Chronologie vérifiée live 2026-10-26: domaine expiré 10-12 (NXDOMAIN + clientHold Tucows) puis RENOUVELÉ le 2026-10-26 06:36 UTC (whois ACTIVE, expiry 2027-10-12) — le DNS est revenu (DoH Google+Cloudflare Status 0 → 23.227.38.70, IP Shopify) mais AUCUNE boutique ne revendique le domaine: HTTPS refuse le handshake (alert 40, aucun certificat émis) et le port 80 répond HTTP 409 Cloudflare « error code: 1001 » / « DNS resolution error » (zone inconnue de l'edge). La boutique « Bientôt ouvert » (jamais garnie, médiane 0.0) n'a pas été reconnectée après le renouvellement. Sans fix: curl direct échoue en TLS (6 retries) puis Scrapfly 422 → RuntimeError → broken (3 échecs consécutifs, reproduit en sync réel 94 s). Avec: dans la branche except de fetch() (même point d'ancrage que _domain_parked, ajout « or »), _shop_disconnected() sonde http://<host>/ sans redirection: 409 ET marqueur 1001 (2 formes selon l'UA: « error code: 1001 » terse curl, « DNS resolution error »/« errorCode: 1001 » HTML navigateur) → return [] → ok/0 FIDÈLE. Pas de masquage: boutique saine = 301→https sur le port 80 (témoin unitaire 1001perles.ca False), toute autre réponse continue de lever. Sync réel 2026-10-26: fermeail-land.com ok / 0 produit; non-régression 1001perles.ca ok / 309 (chemin Shopify nominal), artisacreations.ca ok / 0 (_domain_parked intact), foodcrayon.com ok / 0 (chemin 402 intact) — 4 ok, 0 erreur en 64 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que http://fermeail-land.com/ répond 409 error 1001 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' http://fermeail-land.com/ → 409). Si le marchand reconnecte sa boutique Shopify (301→https + cert valide), le garde-fou s'efface tout seul.
      Simon-Pierre Boucher · 1 file +29 −1
    5. [ka6] fix connecteur marchelarecolte.ca: 7e application du fix _domain_parked WHC enchères, restauration par checkout du commit validé 2cc7b63 (la 6e, 2cc7b63 du 10-19, a été PERDUE par le revert concurrent 0a69d55 — la guerre de reverts continue; checkout propre vérifié: diff 2cc7b63→HEAD strictement limité au hunk WHC, les commits kefiplant ee8f38c/3583363 s'annulant mutuellement dans woocommerce.py — diff post-checkout vs 2cc7b63 VIDE). Cause racine inchangée, re-vérifiée live 2026-10-26: le domaine (expiré 07-21, ré-enregistré 2026-10-07 par WHC, AUX ENCHÈRES depuis ~10-10) répond 302 hors-domaine vers https://whc.ca/domain-names/auctions/marchelarecolte.ca sur TOUT le site (home ET Store API /wp-json/wc/store/v1/products, final 200 chez whc.ca) — le WordPress d'origine n'existe plus. Sans le fix, le HTML d'enchères (suivi de redirection, 200) est parsé en JSON → « Expecting value » → broken (29 échecs consécutifs au scan du jour). Avec: _domain_parked() détecte la redirection finale hors-domaine (urlparse(r.url): hôte whc.ca + chemin /domain-names/auctions/) ET le marqueur corps « Domain registered at WHC.ca » (ancienne forme du parking) → return [] → catalogue vide FIDÈLE (médiane historique 0.0, boutique jamais garnie). Sync réel 2026-10-26: marchelarecolte.ca ok / 0 produit; non-régression lamaisondubleuet.com ok / 66 produits (chemin Woo nominal intact) — 0 erreur en 16 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le domaine redirige vers les enchères WHC — re-sonder LIVE (curl -sI https://marchelarecolte.ca/ → 302 whc.ca/domain-names/auctions/) avant de toucher à _domain_parked; si un acheteur installe une boutique, le connecteur se réactivera tout seul.
      Simon-Pierre Boucher · 1 file +13 −2
    6. [ka6] fix connecteur foodcrayon.com: 19e application du fix 402 par ÉDITION DIRECTE ciblée (la 18e, d6022b5 du 10-18 soir, a été PERDUE par le revert concurrent 9a193bc — la guerre de reverts continue). ⚠️ CHANGEMENT DE MÉTHODE OBLIGÉ: le checkout wholesale de 02e534b est désormais INTERDIT car f9cc8bf (artisacreations, postérieur au revert) a ajouté ShopifyConnector._domain_parked au même fichier — un checkout l'écraserait. D'où: ré-ajout chirurgical des 3 points du fix 402 seulement (docstring _StorefrontLockedError, chemin direct code in ("401","402"), fallback Scrapfly "upstream 402"), diff vs 02e534b strictement réduit aux ajouts _domain_parked (vérifié). Cause racine inchangée, re-vérifiée live 2026-10-26: foodcrayon.com répond HTTP 402 {"errors":"Unavailable Shop"} (abonnement Shopify gelé) sur /products.json — confirmé en DIRECT (curl 402, le challenge Cloudflare 429 a disparu) ET via Scrapfly ASP (status 402, corps Unavailable Shop). Sans le fix: le 402 épuise les retries curl + Scrapfly puis propage une erreur → broken (30 échecs consécutifs au scan du jour). Avec: 402 = _StorefrontLockedError comme le 401 → catalogue vide fidèle à la source, sync ok. Sync réel 2026-10-26: foodcrayon.com ok / 0 produit (médiane 0.0); non-régression 1001perles.ca ok / 309 (chemin Shopify nominal intact) ET artisacreations.ca ok / 0 (_domain_parked intact) — 0 erreur. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que le site répond 402 (re-sonder live: curl -s -o /dev/null -w '%{http_code}' https://foodcrayon.com/products.json → 402). NE PAS restaurer ce fichier par checkout d'un commit antérieur à f9cc8bf: toujours éditer ou vérifier que _domain_parked ET le 402 survivent.
      Simon-Pierre Boucher · 1 file +7 −5
  9. Fri, Oct 23, 2026 1

    1. [ka6] fix connecteur bbqquebec.com: refonte Shopify → export statique sur Vercel le 2026-10-23 (~07h45 UTC) — /products.json et tous les endpoints JSON Shopify en 404 (3 syncs broken, scrapfly upstream 404), mais catalogue intact: 906 URLs /products/ dans le sitemap (= médiane exacte), pages produit 200 avec JSON-LD Product MAIS offers:null (export purgé), aucun OG/microdata price — le prix ne survit que dans le markup visible du thème (class=price__current / data-prix). Fix minimal: (1) fiche stores.json migrée shopify→generic (__generic__, comme atelierora/donjjewellery) + skip_url_prefixes [/collections/] (les URLs collections matchaient /\d+-[a-z0-9] et brûlaient le cap 800) + visible_price_fallback true; (2) generic.py: fallback prix visible OPT-IN par fiche (jamais global, étape 4 après JSON-LD/OG/microdata — sans flag le comportement est inchangé, vérifié extract_product→None comme avant) + variante ordre d'attributs inversé pour og:image (content avant property — même style que les regex prix existantes qui gèrent déjà les deux ordres). Sync réel 2026-10-23 soir: bbqquebec.com ok / 800 produits (cap generic, 88 % de la médiane 906), 100 % avec prix (0.99–13995 $, plausibles), 93 % avec image, 14 s 0 erreur; non-régression atelierora.ca ok / 24 (= attendu). pm2 restart fabri-ka-sync fait, web local 200. Si bbqquebec.com remonte un vrai Shopify (/products.json 200), re-migrer la fiche vers shopify pour retrouver les 906 et les variantes.
      Simon-Pierre Boucher · 2 files +20 −5
  10. Thu, Oct 22, 2026 1

    1. Revert "[ka6] fix connecteur kefiplant.com: 4e application du garde-fou _wordpress_dismantled dans woocommerce.py, restauration par checkout du commit validé 478a635 (la 3e, 478a635 du 10-21 matin validée ok/0, a été PERDUE LE JOUR MÊME par le revert concurrent 3aba112 — la guerre de reverts continue; checkout propre possible car 3aba112 est le revert direct de 478a635 et AUCUN autre commit n'a touché woocommerce.py depuis — diff vs 478a635 vide, vérifié). Cause racine inchangée, re-vérifiée live 2026-10-21 pm: kefiplant.com est TOUJOURS la vitrine B2B React/Lovable sans e-commerce (home 200 / 58,0 Ko, ZÉRO marqueur wp-content/wp-includes/xmlrpc, asset lovable présent; /wp-json/ 301→404 final 25,6 Ko; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce (inchangée, les reverts de fiche sont inoffensifs depuis le changement d'angle) plante en 404 Store API → broken (38 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — Store API 404 ET /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site Lovable n'a aucun prix). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-21 pm: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 27 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 0 erreur en 29 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert le site Lovable sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -sIL https://kefiplant.com/wp-json/ → 404, avant de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul."
      …
      This reverts commit ee8f38c19632da010375c1f246354fb3383368ab.
      Simon-Pierre Boucher · 1 file +1 −25
  11. Wed, Oct 21, 2026 2

    1. [ka6] fix connecteur kefiplant.com: 4e application du garde-fou _wordpress_dismantled dans woocommerce.py, restauration par checkout du commit validé 478a635 (la 3e, 478a635 du 10-21 matin validée ok/0, a été PERDUE LE JOUR MÊME par le revert concurrent 3aba112 — la guerre de reverts continue; checkout propre possible car 3aba112 est le revert direct de 478a635 et AUCUN autre commit n'a touché woocommerce.py depuis — diff vs 478a635 vide, vérifié). Cause racine inchangée, re-vérifiée live 2026-10-21 pm: kefiplant.com est TOUJOURS la vitrine B2B React/Lovable sans e-commerce (home 200 / 58,0 Ko, ZÉRO marqueur wp-content/wp-includes/xmlrpc, asset lovable présent; /wp-json/ 301→404 final 25,6 Ko; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce (inchangée, les reverts de fiche sont inoffensifs depuis le changement d'angle) plante en 404 Store API → broken (38 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — Store API 404 ET /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site Lovable n'a aucun prix). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-21 pm: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 27 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 0 erreur en 29 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert le site Lovable sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -sIL https://kefiplant.com/wp-json/ → 404, avant de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul.
      Simon-Pierre Boucher · 1 file +25 −1
    2. Revert "[ka6] fix connecteur kefiplant.com: 3e application du garde-fou _wordpress_dismantled dans woocommerce.py, restauration par checkout du commit validé c9c558f (la 2e, c9c558f du 10-20 validée ok/0, a été PERDUE LE JOUR MÊME par le revert concurrent 50f837c — la guerre de reverts continue; checkout propre possible cette fois car 50f837c est le revert direct de c9c558f et AUCUN autre commit n'a touché woocommerce.py depuis — diff vs c9c558f vide, vérifié). Cause racine inchangée, re-vérifiée live 2026-10-21: kefiplant.com est TOUJOURS la vitrine B2B React/Lovable sans e-commerce (home 200 / 57,9 Ko, ZÉRO marqueur wp-content/wp-includes/xmlrpc, asset lovable présent; /wp-json/ 301→404 final 24,8 Ko; Store API /wp-json/wc/store/v1/products 404). Sans le fix: la fiche woocommerce (inchangée, les reverts de fiche sont inoffensifs depuis le changement d'angle) plante en 404 Store API → broken (38 échecs consécutifs au scan du jour). Avec: _wordpress_dismantled() — Store API 404 ET /wp-json/ 404 ET home 200 (>2 Ko) sans aucun marqueur WP → return [] → ok/0 FIDÈLE (médiane 0.0, la boutique Woo n'a JAMAIS été garnie, le site Lovable n'a aucun prix). Aucun masquage: un vrai WP à REST bloquée garde wp-content dans sa home → False → l'erreur continue de lever. Sync réel 2026-10-21: kefiplant.com ok / 0 produit; non-régression 1001fondues.com ok / 25 (chemin Woo nominal intact), labete.ca ok / 0 (_woo_uninstalled intact) — 0 erreur en 29 s. pm2 restart fabri-ka-sync fait, web local 200. NE PAS RE-REVERTER tant que kefiplant.com sert le site Lovable sans WP (re-sonder LIVE: curl -s https://kefiplant.com/ | grep -c wp-content → 0, et curl -sIL https://kefiplant.com/wp-json/ → 404, avant de toucher woocommerce.py). Si Kefiplant remonte un WP/boutique, le garde-fou s'efface tout seul."
      …
      This reverts commit 478a6358ec4dcb01735ba049ff2c8abaf0c375eb.
      Simon-Pierre Boucher · 1 file +1 −25
Menu

Theme