{
  "contract_version": "gab_493_contract_v1",
  "gab_id": "GAB-493",
  "canonical_name": "ReasoningDetectFallacy",
  "module_owner": "EdTechReasoningProofLearning",
  "renderer_key": "quiz_scoring",
  "required_fields": [
    "gab_id",
    "reasoning_ref",
    "claim_or_question",
    "proof_goal",
    "answer_options"
  ],
  "optional_fields": [
    "title",
    "reasoning_stage",
    "scoring_policy",
    "attempt_policy",
    "hint",
    "feedback_correct",
    "feedback_incorrect",
    "fallback_text_summary"
  ],
  "field_types": {
    "claim_or_question": "string — la question posée à l'élève",
    "proof_goal": "enum['spot_error','justify','prove','evaluate','compare'] — objectif de raisonnement",
    "answer_options": "array<{id:string, label:string, is_correct:boolean, why:string}> — au moins 2 options, au moins 1 correcte",
    "scoring_policy": "string — règle de score (ex: 1 bonne réponse, score=correct/total)",
    "hint": "string — indice optionnel proposé avant validation",
    "feedback_correct": "string — message si bonne réponse, jamais humiliant",
    "feedback_incorrect": "string — message si erreur, orienté apprentissage"
  },
  "constraints": [
    "Au moins 2 options de réponse, dont au moins une marquée is_correct:true.",
    "Le score est réel (correct/total), pas simulé.",
    "Feedback explicatif APRÈS tentative, jamais humiliant.",
    "Chaque option porte un 'why' qui explique pourquoi elle est correcte ou non.",
    "Indice optionnel disponible avant validation, pas après."
  ],
  "blocked_conditions": [
    "reasoning_ref absent (BLOCKED)",
    "claim_or_question absent (BLOCKED)",
    "proof_goal absent (BLOCKED)",
    "answer_options absent ou < 2 (BLOCKED)",
    "aucune option marquée is_correct:true (BLOCKED)"
  ],
  "accessibility": [
    "keyboard_navigable",
    "focus_visible",
    "prefers_reduced_motion",
    "fallback_text"
  ],
  "qa_cases": [
    { "case": "instance conforme", "expected": "options cliquables, validation, score réel, correction visuelle" },
    { "case": "answer_options < 2 ou aucune correcte", "expected": "BLOCKED" },
    { "case": "sélection puis validation", "expected": "score 1/1 ou 0/1 + bonne réponse en vert, erreur en rouge, why révélé" },
    { "case": "init(ext) externe", "expected": "le rendu change sans modifier le HTML (critère d'or)" },
    { "case": "responsive 375/768/1024", "expected": "aucun débordement" }
  ],
  "traceability": {
    "derived_from_core_gab": "GAB-493",
    "note": "Démo de l'archétype quiz_scoring. Contrat pédagogique complet dans le CORE-GAB officiel."
  }
}
