{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "id": "capability-passport",
  "title": "OutilsIA Capability Passport v1",
  "status": "research",
  "not_public_product": "Local Cockpit 0.1.1 n'exporte pas ce fichier. Ne pas citer comme fonction livrée.",
  "updated": "2026-08-31",
  "research": "https://outilsia.fr/research.md",
  "human": "https://outilsia.fr/capability-passport",
  "purpose": "Fichier vérifiable produit après un scan + benchmark Local Cockpit, importable plus tard par OutilsIA Maestro pour choisir local vs cloud.",
  "type": "object",
  "required": [
    "schema",
    "generated_at",
    "local_cockpit",
    "hardware",
    "runtimes",
    "models",
    "measured",
    "limits"
  ],
  "properties": {
    "schema": {"const": "outilsia.capability-passport.v1"},
    "generated_at": {"type": "string", "format": "date-time"},
    "local_cockpit": {
      "type": "object",
      "required": ["label", "build_id"],
      "properties": {
        "label": {"type": "string"},
        "build_id": {"type": "string"},
        "commit": {"type": "string"}
      }
    },
    "hardware": {
      "type": "object",
      "properties": {
        "cpu": {"type": "string"},
        "ram_gb": {"type": "number"},
        "gpu": {"type": "string"},
        "vram_gb": {"type": ["number", "null"]},
        "unknowns": {"type": "array", "items": {"type": "string"}}
      }
    },
    "runtimes": {
      "type": "array",
      "items": {"type": "object", "properties": {"name": {"type": "string"}, "version": {"type": "string"}, "os": {"type": "string"}}}
    },
    "models": {
      "type": "array",
      "items": {"type": "object", "properties": {"name": {"type": "string"}, "quant": {"type": "string"}, "present": {"type": "boolean"}}}
    },
    "measured": {
      "type": "array",
      "description": "Uniquement des identifiants déjà dans measurements.json, ou vide.",
      "items": {
        "type": "object",
        "required": ["id"],
        "properties": {
          "id": {"type": "string"},
          "tokens_per_s": {"type": "number"},
          "reasonable_context": {"type": ["integer", "null"]}
        }
      }
    },
    "roles": {
      "type": "object",
      "description": "Suggestions Maestro, jamais une promesse de vitesse.",
      "properties": {
        "triage_local": {"type": "boolean"},
        "long_synthesis_local": {"type": "boolean"},
        "vision_local": {"type": "boolean"},
        "code_local": {"type": "boolean"}
      }
    },
    "limits": {"type": "array", "items": {"type": "string"}},
    "integrity": {
      "type": "object",
      "properties": {
        "sha256": {"type": "string"},
        "note": {"type": "string"}
      }
    }
  },
  "maestro_import": {
    "status": "specified_not_shipped",
    "behavior": "Si measured[] contient un ID vérifié assez rapide pour le triage, Maestro peut réserver le local à la relecture et le cloud à l'implémentation. Sans ID, Maestro ne doit pas inventer de tok/s.",
    "docs": "https://outilsia.fr/maestro.md"
  },
  "example_measured_ids_only": [
    "OIA-LC-BENCH-20260727-HERMES3-8B-RTX4080S",
    "OIA-OLLAMA-BENCH-20260819-QWEN38-27B-RTX4080S-WSL"
  ]
}
