{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/kaneme-com/json-schema/kaneme-com-authorship-verdict-schema.json",
  "title": "AuthorshipVerdict",
  "x-generated": "2026-11-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kaneme-com-openapi.json#/components/schemas/AuthorshipVerdict",
  "type": "object",
  "properties": {
    "measurement": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string",
          "const": "kaneme.measurement.v1"
        },
        "axis": {
          "type": "string",
          "enum": [
            "q1",
            "q2"
          ]
        },
        "contrast": {
          "type": "string"
        },
        "display": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "calibrationLanguage": {
          "type": "string",
          "enum": [
            "fr",
            "en"
          ]
        },
        "candidateLanguage": {
          "type": "string"
        },
        "engine": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "model": {
          "type": "string"
        },
        "scoreVersion": {
          "type": "string"
        },
        "calibrationVersion": {
          "type": "string"
        },
        "calibrationSource": {
          "type": "string"
        },
        "limitation": {
          "type": "string"
        }
      },
      "required": [
        "version",
        "axis",
        "contrast",
        "display",
        "calibrationLanguage",
        "candidateLanguage",
        "model",
        "scoreVersion",
        "calibrationVersion",
        "calibrationSource",
        "limitation"
      ],
      "additionalProperties": false
    },
    "question": {
      "type": "string",
      "enum": [
        "author",
        "human"
      ]
    },
    "probability": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "label": {
      "type": "string",
      "description": "Bande en clair, dérivée de `probability` pour la question posée : « Signe cette voix », « Plausiblement cette voix », « Ambigu », puis « Voix générique » (q1) ou « Voix étrangère » (q2). Avant le 12/10/2026 : « Auteur probable », « Auteur plausible », « Imposteur probable ». Absent quand `unavailable` est présent."
    },
    "band": {
      "type": "string",
      "enum": [
        "signature",
        "plausible",
        "ambiguous",
        "foreign"
      ],
      "description": "La bande de `label`, en clé stable : `signature`, `plausible`, `ambiguous`, `foreign` (sur q1, `foreign` est une écriture générique ; sur q2, une autre voix). Présent exactement quand `label` l’est. Depuis le contrat 5.3.0."
    },
    "unavailable": {
      "type": "string",
      "enum": [
        "self_overlap",
        "unsupported_language",
        "voice_language_mismatch",
        "mixed_language",
        "embedding_layer",
        "out_of_distribution",
        "calibration_mismatch"
      ],
      "description": "self_overlap — Le texte à juger est déjà, pour l’essentiel, dans la référence qui le juge : la mesure porterait sur elle-même. Juge un texte que la référence ne contient pas — ou retire-le du corpus de cette voix. · unsupported_language — Le texte ne se lit ni en français ni en anglais, même en départageant ces deux seules langues : le verdict n’est calibré que sur elles, chacune avec son propre moteur. Lis le champ `language` de la réponse avant d’appeler : hors du français et de l’anglais, ne demande pas de verdict. · voice_language_mismatch — Le texte et la voix de référence ne sont pas écrits dans la même langue : chaque moteur ne compare un texte qu’à une voix de sa langue. Juge ce texte avec une voix écrite dans sa langue — crée-la si elle n’existe pas. Ne le traduis pas pour contourner ce refus. · mixed_language — Le texte est dans la langue de la voix, mais au moins une phrase entière est dans l’autre langue servie : la mesure mêlerait deux moteurs. Corrige ou retire les passages renvoyés dans `passages` (positions dans le texte), puis relance. Les mots isolés — anglicismes, marques — et les citations entre guillemets ne déclenchent pas ce refus. · embedding_layer — La couche de mesure profonde n’a pas répondu ; sans elle, aucune probabilité n’est calibrée. Réessaie dans un instant si la couche de mesure redevient disponible. · out_of_distribution — Le panel de contraste ne couvre pas le registre de cette voix : la marge existerait, elle ne voudrait rien dire. Verse dans la voix des textes de référence plus proches du registre mesuré. · calibration_mismatch — La version du moteur ne correspond pas à une calibration validée. Attends la correction de la configuration du moteur. Ne modifie ni ne traduis le texte pour contourner ce refus."
    },
    "language": {
      "type": "string"
    },
    "score": {
      "type": "number",
      "minimum": 0,
      "maximum": 100
    },
    "version": {
      "type": "string"
    },
    "explanation": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "caveat": {
          "type": "string"
        },
        "factors": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "cadence",
                  "registre",
                  "structure",
                  "lexique"
                ]
              },
              "label": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "aligned",
                  "mixed",
                  "different",
                  "unmeasured"
                ]
              },
              "gap": {
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "detail": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "label",
              "status",
              "gap",
              "detail"
            ],
            "additionalProperties": {}
          }
        }
      },
      "required": [
        "version",
        "summary",
        "caveat",
        "factors"
      ],
      "additionalProperties": {}
    },
    "passages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "start": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "end": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "language": {
            "type": "string",
            "enum": [
              "fr",
              "en"
            ]
          }
        },
        "required": [
          "text",
          "start",
          "end",
          "language"
        ],
        "additionalProperties": {}
      },
      "description": "Présent uniquement avec `unavailable: \"mixed_language\"` : les phrases écrites dans l’autre langue, avec leurs positions (`start`, `end`) dans le texte jugé. Les corriger ou les retirer, puis relancer."
    },
    "receipt": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string",
          "const": "kaneme.measurement-receipt.v1"
        },
        "measuredAt": {
          "type": "string"
        },
        "candidateDigest": {
          "type": "string"
        },
        "referenceId": {
          "type": "string"
        },
        "profileId": {
          "type": "string"
        },
        "profileRevision": {
          "type": "string"
        },
        "axis": {
          "type": "string",
          "enum": [
            "q1",
            "q2"
          ]
        },
        "engineVersion": {
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "format": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "reportedContextId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "contextBinding": {
          "type": "string",
          "const": "caller_reported"
        },
        "probability": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "unavailable": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "measurement": {
          "type": "object",
          "properties": {
            "version": {
              "type": "string",
              "const": "kaneme.measurement.v1"
            },
            "axis": {
              "type": "string",
              "enum": [
                "q1",
                "q2"
              ]
            },
            "contrast": {
              "type": "string"
            },
            "display": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "calibrationLanguage": {
              "type": "string",
              "enum": [
                "fr",
                "en"
              ]
            },
            "candidateLanguage": {
              "type": "string"
            },
            "engine": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "model": {
              "type": "string"
            },
            "scoreVersion": {
              "type": "string"
            },
            "calibrationVersion": {
              "type": "string"
            },
            "calibrationSource": {
              "type": "string"
            },
            "limitation": {
              "type": "string"
            }
          },
          "required": [
            "version",
            "axis",
            "contrast",
            "display",
            "calibrationLanguage",
            "candidateLanguage",
            "model",
            "scoreVersion",
            "calibrationVersion",
            "calibrationSource",
            "limitation"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "version",
        "measuredAt",
        "candidateDigest",
        "referenceId",
        "profileId",
        "profileRevision",
        "axis",
        "engineVersion",
        "language",
        "format",
        "reportedContextId",
        "contextBinding",
        "probability",
        "unavailable",
        "measurement"
      ],
      "additionalProperties": false
    },
    "measurementId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "axis": {
      "type": "string",
      "enum": [
        "q1",
        "q2"
      ]
    },
    "profileId": {
      "type": "string"
    },
    "confidence": {
      "type": "string"
    },
    "carries": {
      "type": "boolean"
    },
    "selfOverlap": {
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "creditsUsed": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "disclaimer": {
      "type": "string"
    },
    "fidelity": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string",
          "const": "kaneme.fidelity-verdict.v1"
        },
        "primary": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "enum": [
                "measured",
                "unavailable"
              ]
            },
            "label": {
              "type": "string"
            },
            "probability": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "status",
            "label",
            "probability"
          ],
          "additionalProperties": {}
        },
        "details": {
          "type": "object",
          "properties": {
            "q1": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "measured",
                    "unavailable"
                  ]
                },
                "probability": {
                  "anyOf": [
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "label": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "confidence": {
                  "type": "string",
                  "enum": [
                    "none",
                    "low",
                    "medium",
                    "high"
                  ]
                },
                "unavailable": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "status",
                "probability",
                "label",
                "confidence",
                "unavailable"
              ],
              "additionalProperties": {}
            },
            "style": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "measured",
                    "partial",
                    "unavailable"
                  ]
                },
                "version": {
                  "type": "string"
                },
                "dimensions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "passages": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "start": {
                              "type": "number"
                            },
                            "end": {
                              "type": "number"
                            },
                            "quote": {
                              "type": "string"
                            },
                            "observation": {
                              "type": "string"
                            },
                            "basis": {
                              "type": "string",
                              "enum": [
                                "reference",
                                "preference",
                                "observation"
                              ]
                            }
                          },
                          "required": [
                            "start",
                            "end",
                            "quote",
                            "observation",
                            "basis"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "id": {
                        "type": "string",
                        "enum": [
                          "rythme",
                          "lexique",
                          "structure",
                          "signature"
                        ]
                      },
                      "label": {
                        "type": "string"
                      },
                      "measured": {
                        "type": "boolean"
                      },
                      "score": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "detail": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "label",
                      "measured",
                      "score",
                      "detail"
                    ],
                    "additionalProperties": {}
                  }
                }
              },
              "required": [
                "status",
                "version",
                "dimensions"
              ],
              "additionalProperties": {}
            },
            "meaning": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "guarded",
                    "warning",
                    "not_measured"
                  ]
                },
                "lexicalRetention": {
                  "anyOf": [
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "checks": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "numbers",
                      "negation",
                      "quotes",
                      "protected"
                    ]
                  }
                },
                "detail": {
                  "type": "string"
                },
                "limitation": {
                  "type": "string"
                }
              },
              "required": [
                "status",
                "lexicalRetention",
                "checks",
                "detail",
                "limitation"
              ],
              "additionalProperties": {}
            },
            "format": {
              "type": "object",
              "properties": {
                "format": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "learned",
                    "provisional",
                    "q1_unmeasured",
                    "unknown"
                  ]
                },
                "q1Measurable": {
                  "anyOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "humanDocuments": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "humanWords": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "requiredDocuments": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "requiredWords": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "format",
                "status",
                "q1Measurable",
                "humanDocuments",
                "humanWords",
                "requiredDocuments",
                "requiredWords",
                "detail"
              ],
              "additionalProperties": {}
            }
          },
          "required": [
            "q1",
            "style",
            "meaning",
            "format"
          ],
          "additionalProperties": {}
        },
        "benchmarkPolicy": {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "const": "periodic_benchmark"
            },
            "comparedPerUserGeneration": {
              "type": "boolean",
              "const": false
            },
            "note": {
              "type": "string"
            }
          },
          "required": [
            "mode",
            "comparedPerUserGeneration",
            "note"
          ],
          "additionalProperties": {}
        },
        "limitation": {
          "type": "string"
        }
      },
      "required": [
        "version",
        "primary",
        "details",
        "benchmarkPolicy",
        "limitation"
      ],
      "additionalProperties": {}
    },
    "executionReceipt": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string",
          "const": "kaneme.portable-execution.v1"
        },
        "executionId": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "status": {
          "type": "string",
          "enum": [
            "context_prepared",
            "cost_estimated",
            "verifying",
            "verified"
          ]
        },
        "createdAt": {
          "type": "string"
        },
        "completedAt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "expiresAt": {
          "type": "string"
        },
        "voice": {
          "type": "object",
          "properties": {
            "profileId": {
              "type": "string"
            },
            "voiceRevision": {
              "type": "string"
            },
            "referenceId": {
              "type": "string"
            },
            "contextId": {
              "type": "string"
            },
            "language": {
              "type": "string"
            },
            "format": {
              "type": "string"
            }
          },
          "required": [
            "profileId",
            "voiceRevision",
            "referenceId",
            "contextId",
            "language",
            "format"
          ],
          "additionalProperties": false
        },
        "channel": {
          "type": "string"
        },
        "clientVersion": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "estimate": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "const": "verify"
                },
                "credits": {
                  "type": "number"
                },
                "conditional": {
                  "type": "boolean"
                }
              },
              "required": [
                "operation",
                "credits",
                "conditional"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "candidateDigest": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "measurementId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "outcome": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "measured",
                "abstained"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "steps": {
          "minItems": 4,
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "context_prepared",
                  "cost_estimated",
                  "text_submitted",
                  "voice_verified"
                ]
              },
              "status": {
                "type": "string",
                "enum": [
                  "completed",
                  "pending"
                ]
              },
              "evidence": {
                "type": "string",
                "enum": [
                  "server_observed",
                  "client_submitted"
                ]
              },
              "completedAt": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "status",
              "evidence",
              "completedAt"
            ],
            "additionalProperties": {}
          }
        },
        "limitation": {
          "type": "string"
        }
      },
      "required": [
        "version",
        "executionId",
        "status",
        "createdAt",
        "completedAt",
        "expiresAt",
        "voice",
        "channel",
        "clientVersion",
        "estimate",
        "candidateDigest",
        "measurementId",
        "outcome",
        "steps",
        "limitation"
      ],
      "additionalProperties": {}
    }
  },
  "required": [
    "question",
    "probability",
    "score",
    "version",
    "axis",
    "profileId",
    "confidence",
    "carries",
    "selfOverlap",
    "creditsUsed",
    "disclaimer",
    "fidelity"
  ],
  "additionalProperties": {}
}