{
  "kernel_version": "manifest@v1",
  "network": "ecorce",
  "runtime_pool": "ecorce-partner-tools",
  "total": 10,
  "filters": {
    "actor": "ecorce",
    "protocol": null,
    "tag": null,
    "q": null
  },
  "manifests": [
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:spn-catalogue@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Moteur de connexion B2B",
        "kind": "organization",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 19,
          "trusted_circles": [
            "ecorce-b2b",
            "mauricie-g9a",
            "quebec-vrac",
            "each-network"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.catalog_search@v1",
        "title": "Catalogue SPN & équivalences inter-distributeurs",
        "summary": "Recherche unifiée de produits B2B par code SPN partagé (formats 4 L, 10 L, 20 L vrac, produits bio et locaux) et comparaison inter-distributeurs.",
        "tags": [
          "catalogue",
          "spn",
          "vrac",
          "distributeurs",
          "ecorce",
          "b2b"
        ]
      },
      "trust_gate": {
        "visibility": "public",
        "call_policy": "open",
        "mode": "autonomous_read",
        "required_proofs": [],
        "required_scopes": [
          "read:catalogue"
        ],
        "human_approval_on_commit": false
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce-spn-catalogue",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce-spn-catalogue",
        "entrypoint": "searchCatalogue",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "title": "Recherche (FR ou EN)",
              "description": "Ex: savon, vaisselle, lessive, lentilles, érable"
            },
            "partner_id": {
              "type": "string",
              "title": "Filtre distributeur ou producteur",
              "description": "Ex: saja, monde-naturel, ferme-exemple"
            },
            "postal_code": {
              "type": "string",
              "title": "Code postal ou préfixe (ex: G9A)",
              "description": "Préfixe postal pour l'analyse de tournée"
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string"
            },
            "partner_id": {
              "type": [
                "string",
                "null"
              ]
            },
            "postal_code": {
              "type": [
                "string",
                "null"
              ]
            },
            "count": {
              "type": "integer"
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "shared_spn_comparisons": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "bulk_equivalences": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "advisor_notes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "opportunities": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/spn-catalogue",
        "mcp_tool_name": "search_catalogue",
        "ui_layout": "table",
        "cta_label": "Chercher dans le catalogue SPN",
        "cloneable": true,
        "page_url": "https://ecorce.app/p/ecorce/spn-catalogue",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Aspn-catalogue%40v1",
        "headline": "Catalogue SPN & équivalences inter-distributeurs",
        "story": "Recherche unifiée de produits B2B par code SPN partagé (formats 4 L, 10 L, 20 L vrac, produits bio et locaux) et comparaison inter-distributeurs."
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:unit-economics-advisor@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Moteur de connexion B2B",
        "kind": "organization",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 19,
          "trusted_circles": [
            "ecorce-b2b",
            "mauricie-g9a",
            "quebec-vrac",
            "each-network"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.margin_and_logistics_advisor@v1",
        "title": "Conseiller de marge vrac (4 L vs 20 L), minimum de commande G9A & pool 8 % Each.app",
        "summary": "Calcule l'économie au litre (4 L vs 20 L en vrac), la consolidation de minimum de commande (150 $ G9A / 200 $ standard / 500 $ minimum de commande), l'activation 8 % Each.app et la co-op flotte-média.",
        "tags": [
          "unit-economics",
          "marge",
          "vrac",
          "minimum de commande",
          "g9a",
          "each-app",
          "flotte-media",
          "ecorce"
        ]
      },
      "trust_gate": {
        "visibility": "public",
        "call_policy": "open",
        "mode": "autonomous_read",
        "required_proofs": [],
        "required_scopes": [
          "read:catalogue"
        ],
        "human_approval_on_commit": false
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce-unit-economics",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce-unit-economics",
        "entrypoint": "evaluateUnitEconomics",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "items": {
              "type": "array",
              "description": "Articles ou offres SPN à analyser"
            },
            "results": {
              "type": "array",
              "description": "Sortie directe de ecorce:spn-catalogue@v1 lors d'un compose"
            },
            "lines": {
              "type": "array",
              "description": "Lignes {spn, qty, partner_id}"
            },
            "query": {
              "type": "string",
              "description": "Recherche SPN si aucun item n'est fourni"
            },
            "postal_code": {
              "type": "string",
              "default": "G9A",
              "description": "Code postal ou préfixe (ex: G9A, H2X)"
            },
            "optimize_for_bulk": {
              "type": "boolean",
              "default": true,
              "description": "Recommander les formats 20 L vrac lorsque disponibles"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "postal_code": {
              "type": "string"
            },
            "bulk_comparisons": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "inter_distributor_arbitrage": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "shipping_analysis": {
              "type": "object"
            },
            "each_pool_8pct": {
              "type": "object"
            },
            "fleet_media": {
              "type": "object"
            },
            "recommended_lines": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "advisor_notes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "opportunities": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/unit-economics-advisor",
        "mcp_tool_name": "evaluate_unit_economics",
        "ui_layout": "cards",
        "cta_label": "Simuler la marge vrac & le minimum de commande",
        "cloneable": true,
        "page_url": "https://ecorce.app/p/ecorce/unit-economics-advisor",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Aunit-economics-advisor%40v1",
        "headline": "Conseiller de marge vrac (4 L vs 20 L), minimum de commande G9A & pool 8 % Each.app",
        "story": "Calcule l'économie au litre (4 L vs 20 L en vrac), la consolidation de minimum de commande (150 $ G9A / 200 $ standard / 500 $ minimum de commande), l'activation 8 % Each.app et la co-op flotte-média."
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:order-draft-engine@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Moteur de connexion B2B",
        "kind": "organization",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 19,
          "trusted_circles": [
            "ecorce-b2b",
            "mauricie-g9a",
            "quebec-vrac",
            "each-network"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.order_draft@v1",
        "title": "Moteur de bons de commande B2B (DRAFT_ONLY · approbation humaine Passkey)",
        "summary": "Prépare un brouillon de bon de commande par distributeur avec vérification de mandat, calcul de minimum de commande, économies vrac, pool 8 % Each.app et jeton de confirmation humaine par Passkey.",
        "tags": [
          "order-draft",
          "bon-de-commande",
          "passkey",
          "trust-gate",
          "draft-only",
          "ecorce",
          "b2b"
        ]
      },
      "trust_gate": {
        "visibility": "public",
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "required_proofs": [
          {
            "brand_or_circle": "ecorce-member-passkey",
            "min_count": 1
          }
        ],
        "required_scopes": [
          "create:order_draft"
        ],
        "human_approval_on_commit": true
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce-order-draft",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce-order-draft",
        "entrypoint": "createOrderDraft",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "lines": {
              "type": "array",
              "description": "Lignes de commande [{spn, qty, partner_id}]",
              "items": {
                "type": "object",
                "required": [
                  "spn",
                  "qty"
                ],
                "properties": {
                  "spn": {
                    "type": "string"
                  },
                  "qty": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9999
                  },
                  "partner_id": {
                    "type": "string"
                  }
                }
              }
            },
            "recommended_lines": {
              "type": "array",
              "description": "Lignes recommandées issues de ecorce:unit-economics-advisor@v1"
            },
            "results": {
              "type": "array",
              "description": "Résultats issus de ecorce:spn-catalogue@v1"
            },
            "partner_id": {
              "type": "string",
              "description": "Distributeur par défaut"
            },
            "postal_code": {
              "type": "string",
              "default": "G9A"
            },
            "note": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string",
              "enum": [
                "DRAFT_ONLY"
              ]
            },
            "status": {
              "type": "string",
              "enum": [
                "pending_human_approval"
              ]
            },
            "placed": {
              "type": "boolean"
            },
            "paid": {
              "type": "boolean"
            },
            "commit_token": {
              "type": "string"
            },
            "confirm_url": {
              "type": "string"
            },
            "confirm_urls": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "count": {
              "type": "integer"
            },
            "drafts": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "advisor_notes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "opportunities": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/order-draft-engine",
        "mcp_tool_name": "create_order_draft",
        "ui_layout": "confirm",
        "cta_label": "Confirmer le bon de commande (Passkey humain)",
        "cloneable": false,
        "page_url": "https://ecorce.app/p/ecorce/order-draft-engine",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Aorder-draft-engine%40v1",
        "headline": "Moteur de bons de commande B2B (DRAFT_ONLY · approbation humaine Passkey)",
        "story": "Prépare un brouillon de bon de commande par distributeur avec vérification de mandat, calcul de minimum de commande, économies vrac, pool 8 % Each.app et jeton de confirmation humaine par Passkey."
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:fruits-legumes-hebdo@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Listes de prix, commandes & crédits automatisés",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.weekly_produce_pool@v1",
        "title": "Listes de prix, commandes & crédits automatisés — Grossiste matinal (Marché Central, Montréal)",
        "summary": "La nuit, ton assistant lit les listes de prix PDF des grossistes, compare les tarifs, prépare ta commande du matin, jumelle les demi-caisses entre voisins et génère les demandes de crédit pour les produits manquants ou abîmés au débarcadère de 5h30.",
        "description": "La nuit, ton assistant lit les listes de prix PDF des grossistes, compare les tarifs, prépare ta commande du matin, jumelle les demi-caisses entre voisins et génère les demandes de crédit pour les produits manquants ou abîmés au débarcadère de 5h30.",
        "tags": [
          "fruits-legumes",
          "grossiste-matinal",
          "demi-caisses",
          "credits",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-quartier-a",
          "epicerie-quartier-b",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "fruits-legumes-hebdo:read",
          "fruits-legumes-hebdo:write"
        ],
        "required_scopes": [
          "fruits-legumes-hebdo:read",
          "fruits-legumes-hebdo:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--fruits-legumes-hebdo",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--fruits-legumes-hebdo",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "qty": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (qty)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/fruits-legumes-hebdo",
        "page_url": "https://ecorce.app/p/ecorce/fruits-legumes-hebdo",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Afruits-legumes-hebdo%40v1",
        "mcp_tool_name": "ecorce_fruits_legumes_hebdo",
        "ui_layout": "card_form",
        "cta_label": "Simuler une commande matinale ou un crédit d'avarie",
        "cloneable": true,
        "headline": "Listes de prix, commandes & crédits automatisés au débarcadère de 5h30",
        "story": "La nuit, ton assistant lit les listes de prix PDF des grossistes, compare les tarifs, prépare ta commande du matin, jumelle tes demi-caisses (0,5 + 0,5 = 1 caisse entière) avec l'épicerie de quartier voisine et génère les demandes de crédit pour les produits manquants ou abîmés au débarcadère de 5h30.",
        "facts": [
          {
            "label": "Demi-caisses jumelées",
            "value": "0,5 + 0,5 = 1 caisse",
            "detail": "Épicerie de quartier A (0,5) et Épicerie de quartier B (0,5) partagent 1 caisse de 48 avocats Hass à 64,00 $ (32,00 $ chacun)."
          },
          {
            "label": "Ruptures à 05h30",
            "value": "0 appel matinal",
            "detail": "Substitution automatique selon ta règle pré-autorisée (équivalent calibre ou même origine, max +10 %)."
          },
          {
            "label": "Crédits d'avarie",
            "value": "Prorata immédiat",
            "detail": "Ex.: 2 casseaux abîmés sur 8 (CODE-FL-006) = 25 % de crédit calculé et préparé instantanément (11,00 $)."
          },
          {
            "label": "Lecture nocturne des listes",
            "value": "PDF + Catalogue",
            "detail": "Ton assistant lit la liste matinale du grossiste (Marché Central, Montréal) et prépare le bon avant ton premier café."
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Synthèse du matin — Grossiste matinal (Marché Central, Montréal) (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Code produit</th><th>Produit &amp; Format</th><th>Prix caisse</th><th>Demi-caisses jumelées</th><th>Statut à 05h30</th></tr></thead><tbody><tr><td><code>CODE-FL-003</code></td><td><b>Avocats Hass calibre 48</b><br><small>Caisse de 48 unités</small></td><td>64,00 $</td><td><b>0,5</b> Épicerie de quartier A + <b>0,5</b> Épicerie de quartier B (32,00 $ chacun)</td><td>Jumelé (0 orpheline)</td></tr><tr><td><code>CODE-FL-007</code></td><td><b>Citrons choix</b><br><small>Caisse de 115 unités</small></td><td>52,00 $</td><td><b>0,5</b> Épicerie de quartier A + <b>0,5</b> Épicerie de quartier B (26,00 $ chacun)</td><td>Jumelé (0 orpheline)</td></tr><tr><td><code>CODE-FL-001</code></td><td><b>Bananes biologiques équitables</b><br><small>Caisse de 40 lb</small></td><td>46,00 $</td><td>3 caisses entières consolidées</td><td>Confirmé au quai</td></tr><tr><td><code>CODE-FL-006</code></td><td><b>Fraises fraîches</b><br><small>Caisse de 8 × 1 lb</small></td><td>44,00 $</td><td>2 caisses entières (2 casseaux abîmés crédités: -11,00 $)</td><td>Crédit prorata préparé</td></tr></tbody></table>"
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:client-comptoir-8pct@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Activation client en magasin & Flotte locale",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.counter_loyalty_8pct@v1",
        "title": "Récompenses clients croisées à la caisse: 8 % en magasin sur portefeuille mobile",
        "summary": "Offre à tes clients une remise locale instantanée (ex. 8 % en magasin) valide entre commerces indépendants participants directement dans le portefeuille mobile du téléphone — en 3 secondes au comptoir, sans intégration de caisse ni carte plastique.",
        "description": "Offre à tes clients une remise locale instantanée (ex. 8 % en magasin) valide entre commerces indépendants participants directement dans le portefeuille mobile du téléphone — en 3 secondes au comptoir, sans intégration de caisse ni carte plastique.",
        "tags": [
          "each",
          "comptoir",
          "8pct",
          "fidelite",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-du-parc",
          "epicerie-saint-laurent",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "client-comptoir-8pct:read",
          "client-comptoir-8pct:write"
        ],
        "required_scopes": [
          "client-comptoir-8pct:read",
          "client-comptoir-8pct:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--client-comptoir-8pct",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--client-comptoir-8pct",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "stateful_rule_spec": {
          "state_key": "counter_pool",
          "quantity_input_field": "baskets_activated",
          "committed_field": "activated_baskets",
          "remaining_field": "remaining_baskets",
          "target_or_capacity_field": "target_baskets",
          "unit_price_cents_field": "perk_per_basket_cents",
          "collection_field": "activations",
          "record_type": "counter_activation"
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "baskets_activated": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (baskets_activated)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/client-comptoir-8pct",
        "page_url": "https://ecorce.app/p/ecorce/client-comptoir-8pct",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Aclient-comptoir-8pct%40v1",
        "mcp_tool_name": "ecorce_client_comptoir_8pct",
        "ui_layout": "card_form",
        "cta_label": "Simuler une remise client 8 % au comptoir",
        "cloneable": true,
        "headline": "Récompenses clients croisées à la caisse: 8 % en magasin sur portefeuille mobile",
        "story": "Offre à tes clients une remise locale instantanée (ex. 8 % en magasin) valide entre commerces indépendants participants directement dans le portefeuille mobile du téléphone — en 3 secondes au comptoir, sans intégration de caisse ni carte plastique. Producteurs, distributeurs et détaillants convertissent les frais publicitaires perdus en crédit direct pour les gens du quartier.",
        "facts": [
          {
            "label": "Remise directe au client",
            "value": "8 % au comptoir",
            "detail": "Ex.: 3,50 $ en crédit direct sur un achat de produits locaux et vrac, financé à même l'enveloppe commerciale."
          },
          {
            "label": "Portefeuille mobile du téléphone",
            "value": "0 carte plastique",
            "detail": "Aucune intégration de caisse ni terminal propriétaire: ton client ajoute son laissez-passer sur son téléphone en 3 secondes."
          },
          {
            "label": "Enveloppe active du groupe",
            "value": "600,00 $ / 900,00 $",
            "detail": "Enveloppe cofinancée active entre producteurs, distributeurs et épiceries indépendantes (données d'exemple)."
          },
          {
            "label": "Preuve vérifiée",
            "value": "100 % sur achat réel",
            "detail": "Zéro perte publicitaire: la remise ne se déclenche que lorsque tu confirmes la vente au comptoir."
          }
        ],
        "sections": [
          {
            "title": "1. Comment fonctionne le 8 % en magasin pour l'épicier et le producteur",
            "body": "Lorsqu'une épicerie commande un lot auprès d'un producteur ou d'un distributeur sur Écorce, 8 % de la valeur du lot est automatiquement réservé dans le pool d'activation du magasin.",
            "items": [
              "Étape 1: L'épicier reçoit ses caisses ou ses bidons 20 L sur la tournée régionale.",
              "Étape 2: Au comptoir, le client du quartier obtient son privilège direct Each sur preuve d'achat confirmée.",
              "Étape 3: Le client peut inviter un voisin avec le bouton Moi aussi, faisant revenir le quartier sans acheter de publicité."
            ]
          },
          {
            "title": "2. Synchronisation avec les bacs consignés et la flotte locale",
            "body": "Les camions et les bacs consignés qui livrent l'épicerie traversent déjà les rues où habitent ses clients.",
            "items": [
              "Affichage partagé sur les camions et bacs de livraison lors du réassort du quartier.",
              "Aucun budget perdu dans les régies publicitaires numériques externes.",
              "La relation client demeure à 100 % chez le commerçant indépendant."
            ]
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Exemple concret de panier au comptoir (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Produit au comptoir</th><th>Prix détail</th><th>Crédit direct Each (8 %)</th><th>Coût pub externe</th></tr></thead><tbody><tr><td><b>Savon à vaisselle écologique en remplissage (2 L)</b><br><small>Tiré du bidon vrac 20 L (CODE-VRAC-003)</small></td><td>13,50 $</td><td><b>1,08 $</b> crédité au client</td><td>0,00 $</td></tr><tr><td><b>Miel brut d'automne (pot 1 kg)</b><br><small>Issu du lot groupé saisonnier (CODE-MIEL-015)</small></td><td>18,00 $</td><td><b>1,44 $</b> crédité au client</td><td>0,00 $</td></tr><tr><td><b>Panier hebdomadaire frais &amp; vrac</b><br><small>Épicerie du Parc (Montréal, Canada)</small></td><td>45,00 $</td><td><b>3,60 $</b> en privilège direct</td><td>0,00 $</td></tr></tbody></table>"
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:transport-partage@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Transport partagé & Remplissage de camions",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.shared_freight_route@v1",
        "title": "Transport partagé & remplissage de camions: atteignez le minimum de commande ensemble",
        "summary": "Visualise en temps réel les places de palettes disponibles dans les camions régionaux pour que producteurs, distributeurs et détaillants partagent les frais de livraison dans des bacs consignés et atteignent le minimum de commande ensemble.",
        "description": "Visualise en temps réel les places de palettes disponibles dans les camions régionaux pour que producteurs, distributeurs et détaillants partagent les frais de livraison dans des bacs consignés et atteignent le minimum de commande ensemble.",
        "tags": [
          "transport-partage",
          "camions",
          "bacs-consignes",
          "minimum de commande",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-quartier-a",
          "epicerie-quartier-b",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "transport-partage:read",
          "transport-partage:write"
        ],
        "required_scopes": [
          "transport-partage:read",
          "transport-partage:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--transport-partage",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--transport-partage",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "stateful_rule_spec": {
          "state_key": "route_info",
          "quantity_input_field": "pallets",
          "committed_field": "booked_pallets",
          "remaining_field": "remaining_pallets",
          "target_or_capacity_field": "capacity_pallets",
          "unit_price_cents_field": "free_shipping_threshold_cents",
          "collection_field": "bookings",
          "record_type": "pallet_booking"
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "pallets": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (pallets)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/transport-partage",
        "page_url": "https://ecorce.app/p/ecorce/transport-partage",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Atransport-partage%40v1",
        "mcp_tool_name": "ecorce_transport_partage",
        "ui_layout": "card_form",
        "cta_label": "Réserver une place de palette sur la tournée",
        "cloneable": true,
        "headline": "Transport partagé & remplissage de camions: atteignez le minimum de commande ensemble",
        "story": "Visualise en temps réel les places de palettes disponibles dans les camions régionaux pour que producteurs, distributeurs et détaillants partagent les frais de livraison et atteignent le minimum de commande ensemble. Les marchandises voyagent dans des bacs consignés réutilisables repris à la tournée suivante.",
        "facts": [
          {
            "label": "Capacité du camion (Jeudi 06h30)",
            "value": "4 / 6 palettes",
            "detail": "4 palettes réservées par 3 commerces voisins, il reste 2 places disponibles sur le départ de jeudi matin."
          },
          {
            "label": "Minimum de commande régional",
            "value": "Livraison gratuite",
            "detail": "Livraison gratuite débloquée dès 150,00 $ par arrêt lorsque la tournée collective dépasse le minimum de commande de 500,00 $."
          },
          {
            "label": "Contenants réutilisables",
            "value": "Bacs consignés",
            "detail": "Livraison en bacs scellés réutilisables et bidons vrac 20 L repris automatiquement à la tournée suivante."
          },
          {
            "label": "Engagement actuel du groupe",
            "value": "548,00 $ / 500,00 $",
            "detail": "Minimum de commande collectif atteint par 3 commerces indépendants sur la route (données d'exemple)."
          }
        ],
        "sections": [
          {
            "title": "1. État du camion régional du jeudi matin (Montréal, Canada)",
            "body": "Chaque commerçant voit en direct combien de palettes et de bacs consignés sont déjà engagés sur la route avant de valider son brouillon par Passkey.",
            "items": [
              "Arrêt #1 — Épicerie de quartier A: 1 palette (2 × Savon à vaisselle 20 L vrac CODE-VRAC-003, 196,00 $) — Livraison gratuite confirmé, quai 08h00-11h00.",
              "Arrêt #2 — Épicerie de quartier B: 2 palettes (Bidons 20 L lessive & nettoyant + 6 bacs consignés, 212,00 $) — Livraison gratuite confirmé, quai 09h30.",
              "Arrêt #3 — Coopérative alimentaire locale: 1 palette (Savon à mains 4 L & contenants remplissage + 4 bacs consignés, 140,00 $) — Livraison gratuite collectif débloqué."
            ]
          },
          {
            "title": "2. Reprise automatique des bacs consignés et bidons vides",
            "body": "Le transporteur régional dépose les bacs pleins scellés et reprend au même arrêt les bacs et bidons de 20 L vides de la semaine précédente.",
            "items": [
              "Zéro carton jetable à défaire au débarcadère à 6 h du matin.",
              "Traçabilité complète des bacs consignés dans l'état du manifeste.",
              "Moins de camions à moitié vides dans les rues du quartier."
            ]
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Feuille de route du jeudi — Transporteur régional (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Commerce participant</th><th>Volume réservé</th><th>Montant commande</th><th>Frais de transport</th></tr></thead><tbody><tr><td><b>Épicerie de quartier A</b><br><small>Fenêtre de quai: Jeudi 08h00-11h00</small></td><td>1 palette (2 × 20 L vrac)</td><td>196,00 $</td><td><b>0,00 $ (Livraison gratuite débloqué)</b></td></tr><tr><td><b>Épicerie de quartier B</b><br><small>Fenêtre de quai: Jeudi 09h30</small></td><td>2 palettes + 6 bacs consignés</td><td>212,00 $</td><td><b>0,00 $ (Livraison gratuite débloqué)</b></td></tr><tr><td><b>Coopérative alimentaire locale</b><br><small>Fenêtre de quai: Jeudi 11h00</small></td><td>1 palette + 4 bacs consignés</td><td>140,00 $</td><td><b>0,00 $ (Pool &gt; 500 $)</b></td></tr></tbody></table>"
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:achats-groupes-vrac@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Achats groupés & Caisses partagées",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.group_buying_split_cases@v1",
        "title": "Achats groupés & caisses partagées: paliers de gros et formats vrac 4 L vs 20 L",
        "summary": "Regroupe tes commandes avec les commerces indépendants voisins pour débloquer les paliers de prix de gros, partager des caisses sans surcharger ta réserve et comparer le coût au litre entre formats 4 L et 20 L.",
        "description": "Regroupe tes commandes avec les commerces indépendants voisins pour débloquer les paliers de prix de gros, partager des caisses sans surcharger ta réserve et comparer le coût au litre entre formats 4 L et 20 L.",
        "tags": [
          "achats-groupes",
          "vrac",
          "caisses-partagees",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-quartier-a",
          "epicerie-quartier-b",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "achats-groupes-vrac:read",
          "achats-groupes-vrac:write"
        ],
        "required_scopes": [
          "achats-groupes-vrac:read",
          "achats-groupes-vrac:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--achats-groupes-vrac",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--achats-groupes-vrac",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "stateful_rule_spec": {
          "state_key": "bulk_pool",
          "quantity_input_field": "containers_20l",
          "committed_field": "committed_containers",
          "remaining_field": "remaining_for_tier",
          "target_or_capacity_field": "tier_target_containers",
          "unit_price_cents_field": "unit_price_20l_cents",
          "collection_field": "reservations",
          "record_type": "bulk_reservation"
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "containers_20l": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (containers_20l)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/achats-groupes-vrac",
        "page_url": "https://ecorce.app/p/ecorce/achats-groupes-vrac",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Aachats-groupes-vrac%40v1",
        "mcp_tool_name": "ecorce_achats_groupes_vrac",
        "ui_layout": "card_form",
        "cta_label": "Joindre l'achat groupé vrac 20 L",
        "cloneable": true,
        "headline": "Achats groupés & caisses partagées: débloque les paliers de prix de gros avec tes voisins",
        "story": "Regroupe tes commandes avec les commerces indépendants voisins pour débloquer les paliers de prix de gros et partager des caisses sans surcharger ta réserve. Grâce aux codes produits partagés sur Écorce, une fonction déterministe compare le coût exact au litre entre les formats (4 L contre 20 L en vrac) et met côte à côte le prix, le stock et le délai de chaque distributeur.",
        "facts": [
          {
            "label": "Économie format 20 L vs 4 L",
            "value": "-18 % au litre",
            "detail": "Savon à vaisselle écologique: 6,00 $/L en format 4 L (24,00 $) contre 4,90 $/L en bidon vrac de 20 L (98,00 $)."
          },
          {
            "label": "Distributeur de vrac Bio A",
            "value": "27,00 $ / 4 L",
            "detail": "Savon à mains doux (CODE-VRAC-010) — Livraison gratuite dès le minimum de commande régional de 150,00 $ sur la tournée du jeudi."
          },
          {
            "label": "Distributeur de produits naturels B",
            "value": "28,50 $ / 4 L",
            "detail": "Même code produit partagé (CODE-VRAC-010) — 24 unités en stock, livraison en 1 jour."
          },
          {
            "label": "Caisses partagées entre voisins",
            "value": "0,5 + 0,5 = 1 caisse",
            "detail": "Deux épiceries de quartier partagent un lot ou une caisse au prix de gros sans immobiliser ta trésorerie."
          }
        ],
        "sections": [
          {
            "title": "1. Regrouper les volumes entre épiceries de quartier A & B",
            "body": "Chaque commerce indique son besoin; la fonction consolide le palier de volume auprès du distributeur de vrac.",
            "items": [
              "Bidons vrac 20 L (CODE-VRAC-003): 4 bidons pour Épicerie de quartier A + 3 bidons pour Épicerie de quartier B = palier de remise de groupe débloqué.",
              "Caisses partagées (0,5 + 0,5): partage automatique des lots à rotation plus lente entre deux commerces du même secteur."
            ]
          },
          {
            "title": "2. Comparer exactement le même produit sur un code partagé",
            "body": "Un code produit partagé élimine les erreurs de saisie et permet d'arbitrer selon l'urgence ou la marge.",
            "items": [
              "Réassort planifié du jeudi: commande chez Distributeur de vrac Bio A à 27,00 $ (économie de 1,50 $ par unité).",
              "Dépannage en 24 h: commande chez Distributeur de produits naturels B à 28,50 $ avec stock confirmé immédiatement."
            ]
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Tableau comparatif en direct — Achats groupés &amp; formats vrac (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Code partagé</th><th>Produit</th><th>Format 4 L</th><th>Bidon vrac 20 L</th><th>Gain &amp; Disponibilité</th></tr></thead><tbody><tr><td><code>CODE-VRAC-003</code></td><td><b>Savon à vaisselle écologique</b></td><td>24,00 $ (6,00 $/L)</td><td><b>98,00 $ (4,90 $/L)</b></td><td><b>-18 % au litre</b> en format 20 L</td></tr><tr><td><code>CODE-VRAC-006</code></td><td><b>Détergent à lessive concentré</b></td><td>29,00 $ (7,25 $/L)</td><td><b>124,00 $ (6,20 $/L)</b></td><td><b>-14 % au litre</b> en format 20 L</td></tr><tr><td><code>CODE-VRAC-010</code></td><td><b>Savon à mains doux</b><br><small>Comparaison inter-distributeurs</small></td><td><b>27,00 $</b> (Distributeur Vrac Bio A)<br><b>28,50 $</b> (Distributeur Naturel B)</td><td>110,00 $ (5,50 $/L)</td><td>Écart de 1,50 $ / 4 L (24 en stock, livré en 1 jour)</td></tr></tbody></table>"
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:tournee-bacs-consignes@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Tournées régionales & Bacs consignés",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.regional_tote_route@v1",
        "title": "Camions & tournées: trois acheteurs atteignent le minimum de commande dans les bacs consignés",
        "summary": "Trois acheteurs d'une même région regroupent leurs commandes dans des bacs consignés sur la tournée du jeudi pour atteindre le minimum de commande et éliminer les frais de livraison.",
        "description": "Trois acheteurs d'une même région regroupent leurs commandes dans des bacs consignés sur la tournée du jeudi pour atteindre le minimum de commande et éliminer les frais de livraison.",
        "tags": [
          "tournee",
          "bacs-consignes",
          "minimum de commande",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-du-parc",
          "epicerie-saint-laurent",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "tournee-bacs-consignes:read",
          "tournee-bacs-consignes:write"
        ],
        "required_scopes": [
          "tournee-bacs-consignes:read",
          "tournee-bacs-consignes:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--tournee-bacs-consignes",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--tournee-bacs-consignes",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "stateful_rule_spec": {
          "state_key": "route_info",
          "quantity_input_field": "pallets",
          "committed_field": "booked_pallets",
          "remaining_field": "remaining_pallets",
          "target_or_capacity_field": "capacity_pallets",
          "unit_price_cents_field": "free_shipping_threshold_cents",
          "collection_field": "bookings",
          "record_type": "pallet_booking"
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "pallets": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (pallets)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/tournee-bacs-consignes",
        "page_url": "https://ecorce.app/p/ecorce/tournee-bacs-consignes",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Atournee-bacs-consignes%40v1",
        "mcp_tool_name": "ecorce_tournee_bacs_consignes",
        "ui_layout": "card_form",
        "cta_label": "Réserver une palette ou des bacs consignés sur la tournée",
        "cloneable": true,
        "headline": "Camions & tournées: trois acheteurs atteignent le minimum de commande dans les bacs consignés",
        "story": "Un épicier indépendant qui commande seul sous le minimum de commande de 500,00 $ paie des frais de transport qui grugent sa marge. Sur Écorce, tes commandes d'un même corridor (Montréal, Canada) sont regroupées sur le camion du jeudi dans des bacs consignés réutilisables: dès que trois acheteurs franchissent ensemble le minimum régional, la livraison devient gratuite.",
        "facts": [
          {
            "label": "Capacité du camion (Jeudi 06h30)",
            "value": "4 / 6 palettes",
            "detail": "4 palettes réservées par 3 commerces voisins, il reste 2 places disponibles sur le départ de jeudi matin."
          },
          {
            "label": "Seuil de minimum de commande régional",
            "value": "0,00 $ de livraison",
            "detail": "Livraison gratuite dès 150,00 $ par arrêt lorsque la tournée collective dépasse 500,00 $."
          },
          {
            "label": "Contenants zéro déchet",
            "value": "Bacs consignés",
            "detail": "Livraison en bacs scellés réutilisables et bidons vrac 20 L repris automatiquement à la tournée suivante."
          },
          {
            "label": "Engagement actuel du pool",
            "value": "548,00 $ / 500,00 $",
            "detail": "Seuil collectif atteint par 3 commerces indépendants sur la route (données d'exemple)."
          }
        ],
        "sections": [
          {
            "title": "1. État du camion du jeudi matin (Corridor Montréal, Canada)",
            "body": "Chaque commerçant voit en direct combien de palettes et de bacs consignés sont déjà engagés sur la route avant de valider son brouillon par Passkey.",
            "items": [
              "Arrêt #1 — Épicerie du Parc: 1 palette (2 × Savon à vaisselle 20 L vrac CODE-VRAC-003, 196,00 $) — Livraison gratuite confirmé, quai 08h00-11h00.",
              "Arrêt #2 — Épicerie Saint-Laurent: 2 palettes (Bidons 20 L lessive & nettoyant + 6 bacs consignés, 212,00 $) — Livraison gratuite confirmé, quai 09h30.",
              "Arrêt #3 — Coopérative de Quartier: 1 palette (Savon à mains 4 L & contenants remplissage + 4 bacs consignés, 140,00 $) — Livraison gratuite collectif débloqué."
            ]
          },
          {
            "title": "2. Reprise automatique des bacs consignés et bidons vides",
            "body": "Le transporteur régional dépose les bacs pleins scellés et reprend au même arrêt les bacs et bidons de 20 L vides de la semaine précédente.",
            "items": [
              "Zéro carton jetable à défaire au débarcadère à 6 h du matin.",
              "Traçabilité complète des bacs consignés dans l'état du manifeste.",
              "Moins de camions à moitié vides dans les rues du quartier."
            ]
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Feuille de route du jeudi — Répartition par commerce (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Commerce participant</th><th>Volume réservé</th><th>Montant commande</th><th>Frais de transport</th></tr></thead><tbody><tr><td><b>Épicerie du Parc</b><br><small>Fenêtre de quai: Jeudi 08h00-11h00</small></td><td>1 palette (2 × 20 L vrac)</td><td>196,00 $</td><td><b>0,00 $ (Livraison gratuite débloqué)</b></td></tr><tr><td><b>Épicerie Saint-Laurent</b><br><small>Fenêtre de quai: Jeudi 09h30</small></td><td>2 palettes + 6 bacs consignés</td><td>212,00 $</td><td><b>0,00 $ (Livraison gratuite débloqué)</b></td></tr><tr><td><b>Coopérative de Quartier</b><br><small>Fenêtre de quai: Jeudi 11h00</small></td><td>1 palette + 4 bacs consignés</td><td>140,00 $</td><td><b>0,00 $ (Pool &gt; 500 $)</b></td></tr></tbody></table>"
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:comparateur-vrac@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Catalogue de codes produits partagés & Arbitrage vrac",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.shared_code_bulk_compare@v1",
        "title": "Formats vrac & codes produits partagés: comparer le 4 L et le 20 L entre distributeurs",
        "summary": "Un seul code produit partagé pour comparer instantanément le prix au litre entre les formats 4 L et 20 L en vrac ainsi que les disponibilités entre deux distributeurs régionaux.",
        "description": "Un seul code produit partagé pour comparer instantanément le prix au litre entre les formats 4 L et 20 L en vrac ainsi que les disponibilités entre deux distributeurs régionaux.",
        "tags": [
          "vrac",
          "catalogue",
          "comparateur",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-du-parc",
          "epicerie-saint-laurent",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "comparateur-vrac:read",
          "comparateur-vrac:write"
        ],
        "required_scopes": [
          "comparateur-vrac:read",
          "comparateur-vrac:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--comparateur-vrac",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--comparateur-vrac",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "stateful_rule_spec": {
          "state_key": "bulk_pool",
          "quantity_input_field": "containers_20l",
          "committed_field": "committed_containers",
          "remaining_field": "remaining_for_tier",
          "target_or_capacity_field": "tier_target_containers",
          "unit_price_cents_field": "unit_price_20l_cents",
          "collection_field": "reservations",
          "record_type": "bulk_reservation"
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "containers_20l": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (containers_20l)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/comparateur-vrac",
        "page_url": "https://ecorce.app/p/ecorce/comparateur-vrac",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Acomparateur-vrac%40v1",
        "mcp_tool_name": "ecorce_comparateur_vrac",
        "ui_layout": "card_form",
        "cta_label": "Simuler un arbitrage vrac 20 L",
        "cloneable": true,
        "headline": "Formats vrac & codes partagés: comparer le 4 L et le 20 L entre distributeurs",
        "story": "Lorsque chaque grossiste utilise ses propres numéros d'articles internes, l'épicier commande par habitude et perd des points de marge sur chaque bidon. Grâce aux codes produits partagés sur Écorce, une fonction déterministe compare le coût exact au litre entre les formats (4 L contre 20 L en vrac) et met côte à côte le prix, le stock et le délai de livraison de chaque distributeur.",
        "facts": [
          {
            "label": "Économie format 20 L vs 4 L",
            "value": "-18 % au litre",
            "detail": "Savon à vaisselle écologique: 6,00 $/L en format 4 L (24,00 $) contre 4,90 $/L en bidon vrac de 20 L (98,00 $)."
          },
          {
            "label": "Distributeur Vrac Nord",
            "value": "27,00 $ / 4 L",
            "detail": "Savon à mains doux (CODE-VRAC-010) — Livraison gratuite dès 150,00 $ sur la tournée du jeudi."
          },
          {
            "label": "Distribution Naturelle",
            "value": "28,50 $ / 4 L",
            "detail": "Même code produit partagé (CODE-VRAC-010) — 24 unités en stock, livraison en 1 jour."
          },
          {
            "label": "Écart repéré automatiquement",
            "value": "1,50 $ / unité",
            "detail": "Comparaison sans ambiguïté sur le produit, le format et le délai avant la signature Passkey."
          }
        ],
        "sections": [
          {
            "title": "1. Comparer exactement le même produit chez deux distributeurs",
            "body": "Un code produit partagé élimine les erreurs de saisie et permet d'arbitrer selon l'urgence ou la marge.",
            "items": [
              "Si l'épicerie planifie son réassort du jeudi: commande chez Distributeur Vrac Nord à 27,00 $ (économie de 1,50 $ par bidon de 4 L).",
              "Si l'épicerie a besoin d'un dépannage en 24 h: commande chez Distribution Naturelle à 28,50 $ avec stock confirmé immédiatement."
            ]
          },
          {
            "title": "2. Basculer du 4 L au 20 L en vrac dès que la rotation le permet",
            "body": "La fonction calcule automatiquement le gain net sur chaque ligne de réassort.",
            "items": [
              "Savon à vaisselle écologique (CODE-VRAC-001 en 4 L vs CODE-VRAC-003 en 20 L): 22,00 $ économisés par tranche de 20 litres.",
              "Lessive concentrée (CODE-VRAC-004 en 4 L vs CODE-VRAC-006 en 20 L): passage de 7,25 $/L à 6,20 $/L en bidon de 20 L."
            ]
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Tableau comparatif en direct — Codes produits partagés (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Code partagé</th><th>Produit</th><th>Format 4 L</th><th>Bidon vrac 20 L</th><th>Gain &amp; Disponibilité</th></tr></thead><tbody><tr><td><code>CODE-VRAC-003</code></td><td><b>Savon à vaisselle écologique</b></td><td>24,00 $ (6,00 $/L)</td><td><b>98,00 $ (4,90 $/L)</b></td><td><b>-18 % au litre</b> en format 20 L</td></tr><tr><td><code>CODE-VRAC-006</code></td><td><b>Détergent à lessive concentré</b></td><td>29,00 $ (7,25 $/L)</td><td><b>124,00 $ (6,20 $/L)</b></td><td><b>-14 % au litre</b> en format 20 L</td></tr><tr><td><code>CODE-VRAC-010</code></td><td><b>Savon à mains doux</b><br><small>Comparaison inter-distributeurs</small></td><td><b>27,00 $</b> (Distributeur Vrac Nord)<br><b>28,50 $</b> (Distribution Naturelle)</td><td>110,00 $ (5,50 $/L)</td><td>Écart de 1,50 $ / 4 L (24 en stock, livré en 1 jour)</td></tr></tbody></table>"
      }
    },
    {
      "$schema": "https://ecorce.app/schemas/manifest@v1.json",
      "id": "ecorce:fruits-legumes-matin@v1",
      "network": "ecorce",
      "actor": {
        "id": "act_ecorce",
        "handle": "ecorce",
        "name": "Écorce — Réseau du commerce indépendant",
        "kind": "organization",
        "role": "organization",
        "sector": "Achats groupés de produits frais",
        "location": "Montréal, Canada",
        "verified_by": [
          "passkey",
          "ecorce_registry"
        ],
        "reputation_summary": {
          "verified_proofs_count": 3,
          "trusted_circles": [
            "ecorce-b2b",
            "quebec-vrac"
          ]
        }
      },
      "intent": {
        "protocol": "ecorce.morning_produce_pool@v1",
        "title": "Fruits & légumes: liste matinale du grossiste, demi-caisses jumelées et crédits d'avarie",
        "summary": "Mutualisation matinale des achats de fruits et légumes frais: lecture de la liste du grossiste à 5 h 30, jumelage automatique des demi-caisses entre épiciers voisins, échanges pré-autorisés et crédits d'avarie au prorata.",
        "description": "Mutualisation matinale des achats de fruits et légumes frais: lecture de la liste du grossiste à 5 h 30, jumelage automatique des demi-caisses entre épiciers voisins, échanges pré-autorisés et crédits d'avarie au prorata.",
        "tags": [
          "fruits-legumes",
          "grossiste",
          "demi-caisses",
          "montreal",
          "ecorce"
        ],
        "sample_data_notice": "données d'exemple — inventées / invented example data — not any partner's real list or prices"
      },
      "trust_gate": {
        "visibility": "public",
        "allowed_actors": [
          "epicerie-du-parc",
          "epicerie-saint-laurent",
          "*"
        ],
        "call_policy": "draft_only_human_commit",
        "mode": "draft_only",
        "human_approval_on_commit": true,
        "scopes": [
          "fruits-legumes-matin:read",
          "fruits-legumes-matin:write"
        ],
        "required_scopes": [
          "fruits-legumes-matin:read",
          "fruits-legumes-matin:write"
        ],
        "required_proofs": []
      },
      "function": {
        "runtime": "ecorce_surface",
        "runtime_pool": "ecorce-partner-tools",
        "function_ref": "fn-ecorce--fruits-legumes-matin",
        "script_ref": "ecorce://ecorce-partner-tools/fn-ecorce--fruits-legumes-matin",
        "entrypoint": "handle",
        "limits": {
          "cpuMs": 50,
          "subRequests": 5
        },
        "stateful_rule_spec": {
          "state_key": "morning_pool",
          "quantity_input_field": "cases_requested",
          "committed_field": "consolidated_cases",
          "remaining_field": "remaining_for_pallet_tier",
          "target_or_capacity_field": "pallet_tier_target_cases",
          "unit_price_cents_field": "avg_case_price_cents",
          "collection_field": "orders",
          "record_type": "produce_order"
        },
        "input_schema": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "status",
                "commit",
                "pledge",
                "book"
              ],
              "description": "Optional action ('status' to read state without creating a record)"
            },
            "cases_requested": {
              "type": "number",
              "minimum": 1,
              "description": "Quantity field (cases_requested)"
            },
            "note": {
              "type": "string",
              "description": "Optional note or reference"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "record_to_commit": {
              "type": "object"
            },
            "state_patch": {
              "type": "object"
            }
          }
        }
      },
      "projection": {
        "surface_url": "https://ecorce.app/p/ecorce/fruits-legumes-matin",
        "page_url": "https://ecorce.app/p/ecorce/fruits-legumes-matin",
        "actor_url": "https://ecorce.app/p/ecorce",
        "sandbox_url": "https://ecorce.app/essayer?manifest=ecorce%3Afruits-legumes-matin%40v1",
        "mcp_tool_name": "ecorce_fruits_legumes_matin",
        "ui_layout": "card_form",
        "cta_label": "Soumettre une demande de caisses ou demi-caisses",
        "cloneable": true,
        "headline": "Fruits & légumes: liste matinale du grossiste, demi-caisses jumelées et crédits d'avarie",
        "story": "À 5 h 30 sur le quai, la liste matinale du grossiste de fruits et légumes rentre. Plutôt que de payer le prix fort à la caisse isolée ou de jeter la moitié d'un lot fragile, deux épiceries de quartier voisines jumellent automatiquement leurs demi-caisses (0,5 + 0,5 = 1 caisse complète au prix du gros), appliquent leurs règles d'échange pré-autorisées en cas de rupture et règlent les crédits d'avarie en quelques secondes.",
        "facts": [
          {
            "label": "Demi-caisses jumelées",
            "value": "0,5 + 0,5 = 1 caisse",
            "detail": "Épicerie du Parc (0,5) et Épicerie Saint-Laurent (0,5) partagent 1 caisse de 48 avocats Hass à 64,00 $ (32,00 $ chacun)."
          },
          {
            "label": "Ruptures à 05h30",
            "value": "0 appel matinal",
            "detail": "Substitution automatique selon la règle pré-approuvée par chaque épicier (équivalent calibre ou même origine, tolérance max +10 %)."
          },
          {
            "label": "Crédits d'avarie",
            "value": "Prorata immédiat",
            "detail": "2 casseaux abîmés sur 8 déclarés à la réception = 25 % de crédit calculé et préparé automatiquement (11,00 $)."
          },
          {
            "label": "Exécution de la règle",
            "value": "< 30 ms",
            "detail": "Fonction déterministe compilée une fois et exécutée sans relancer un grand modèle d'IA à chaque matin."
          }
        ],
        "sections": [
          {
            "title": "1. Jumelage matinal entre épiceries voisines",
            "body": "Chaque épicier indique ses quantités en caisses entières ou en demi-caisses (0,5) avant la tombée de la liste matinale.",
            "items": [
              "Avocats Hass calibre 48 (CODE-FL-003): 0,5 caisse Épicerie du Parc + 0,5 caisse Épicerie Saint-Laurent = 1 caisse entière commandée (64,00 $, soit 32,00 $ chacun).",
              "Citrons choix 115 unités (CODE-FL-007): 0,5 caisse Épicerie du Parc + 0,5 caisse Épicerie Saint-Laurent = 1 caisse entière commandée (52,00 $, soit 26,00 $ chacun).",
              "Bananes biologiques équitables 40 lb (CODE-FL-001): 3 caisses entières consolidées à 46,00 $ la caisse (palier 10+ caisses à 42,00 $)."
            ]
          },
          {
            "title": "2. Échanges à 5 h 30 et crédits qualité sans téléphone",
            "body": "Le gérant n'est plus réveillé à l'aube pour approuver un changement de variété sur le quai.",
            "items": [
              "Règle d'échange active: si les pommes Cortland 40 lb sont en rupture au quai à 5 h 30, remplacement automatique par pommes Empire 40 lb au même prix (48,00 $).",
              "Crédit d'avarie: déclaration structurée à l'ouverture des caisses avec calcul immédiat du crédit au prorata pour le prochain cycle."
            ]
          }
        ],
        "custom_html_card": "<style>.d,h1,h2,h3,.logo{letter-spacing:-0.018em!important;font-stretch:92%!important;line-height:1.04!important}</style><h3>Feuille de jumelage du matin — Cycle actif (données d'exemple)</h3><table class=\"tb\" style=\"margin-top:12px\"><thead><tr><th>Code produit</th><th>Produit &amp; Format</th><th>Prix caisse</th><th>Demi-caisses jumelées</th><th>Statut à 05h30</th></tr></thead><tbody><tr><td><code>CODE-FL-003</code></td><td><b>Avocats Hass calibre 48</b><br><small>Caisse de 48 unités</small></td><td>64,00 $</td><td><b>0,5</b> Épicerie du Parc + <b>0,5</b> Épicerie Saint-Laurent (32,00 $ chacun)</td><td>Jumelé (0 orpheline)</td></tr><tr><td><code>CODE-FL-007</code></td><td><b>Citrons choix</b><br><small>Caisse de 115 unités</small></td><td>52,00 $</td><td><b>0,5</b> Épicerie du Parc + <b>0,5</b> Épicerie Saint-Laurent (26,00 $ chacun)</td><td>Jumelé (0 orpheline)</td></tr><tr><td><code>CODE-FL-001</code></td><td><b>Bananes biologiques équitables</b><br><small>Caisse de 40 lb</small></td><td>46,00 $</td><td>3 caisses entières consolidées</td><td>Confirmé au quai</td></tr><tr><td><code>CODE-FL-006</code></td><td><b>Fraises fraîches</b><br><small>Caisse de 8 × 1 lb</small></td><td>44,00 $</td><td>2 caisses entières (2 casseaux abîmés crédités: -11,00 $)</td><td>Crédit prorata préparé</td></tr></tbody></table>"
      }
    }
  ]
}