{
  "$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>"
  },
  "function_ref": "fn-ecorce--transport-partage",
  "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"
      }
    }
  }
}