# M Translate V23 — packs JSON d’exercices

La V23 conserve le contenu en JSON. Un exercice peut être propre à une langue, cibler plusieurs compétences et définir ce qui peut être vérifié automatiquement.

## Exemple minimal

```json
{
  "pack": {
    "slug": "japanese-politeness-001",
    "name": "Japonais — politesse",
    "version": 1
  },
  "exercises": [
    {
      "id": "jp-pol-0001",
      "type": "soften",
      "category": "register",
      "difficulty": "B1",
      "sourceLang": "fr",
      "targetLang": "ja",
      "prompt": {
        "fr": "Refuse poliment l’invitation de ton patron.",
        "ja": "上司からの誘いを丁寧に断ってください。"
      },
      "skills": ["register", "naturalness", "production", "grammar"],
      "constraints": [],
      "expected": {},
      "evaluationMode": "open",
      "evaluator": {
        "context": "work_boss"
      },
      "tags": ["registre", "refus"]
    }
  ]
}
```

## Types préparés

`antonym`, `synonym`, `word_family`, `definition`, `collocations`, `expressions`, `expression_required`, `cloze`, `reformulation`, `soften`, `find_problem`, `writing`, `constraints`, `roleplay`, `situation`, `production`, `comprehension`, `translation`.

`translation` ici est un **type d’exercice de traduction active**. Il ne modifie pas le traducteur principal à 4 langues.

## Compétences

Les clés recommandées sont :

- `vocabulary`
- `grammar`
- `comprehension`
- `production`
- `naturalness`
- `register`
- `relevance`
- `complexity`

## Modes d’évaluation

- `lexical` : antonymes, synonymes, définitions, collocations. Les variantes connues vont dans `expected.accepted`.
- `exact_flexible` : plusieurs réponses validées sont acceptées, sans exiger une seule formulation.
- `comprehension` : vérification d’une information attendue.
- `constraints` : certaines contraintes peuvent être vérifiées automatiquement si elles possèdent des motifs.
- `expression_required` : vérifie d’abord la présence de l’expression, puis garde la qualité d’emploi pour une validation linguistique.
- `open` : rédaction, registre, situation, reformulation, traduction active, etc. La réponse n’est pas déclarée vraie ou fausse automatiquement si le système n’a pas assez de certitude.

## Contraintes vérifiables

```json
{
  "label": {"fr": "Proposer 10 h."},
  "checks": {
    "ja": ["10時", "十時"]
  },
  "mode": "any"
}
```

Pour exiger tous les motifs, utilisez `"mode": "all"`.

## Expression imposée

```json
{
  "type": "expression_required",
  "targetLang": "ja",
  "evaluator": {
    "requiredAny": {
      "ja": ["わけではない", "わけじゃない"]
    }
  }
}
```

La présence est vérifiable automatiquement. Le bon emploi dans le contexte reste une question linguistique et peut demander une validation.

## Compréhension dans une langue, réponse dans une autre

Pour un audio japonais avec réponse française :

```json
{
  "type": "comprehension",
  "sourceLang": "ja",
  "targetLang": "fr",
  "evaluator": {
    "learningLanguage": "ja",
    "answerLanguage": "fr"
  },
  "audio": {
    "enabled": true,
    "language": "ja",
    "text": {"ja": "..."}
  }
}
```

Ainsi la progression est créditée au **japonais**, même si la réponse de compréhension est rédigée en français.

## Principe de fiabilité

Une réponse qui correspond exactement à une variante validée peut alimenter la progression automatiquement. Une réponse ouverte ou une variante inconnue reste `pending_review` au lieu d’être arbitrairement marquée fausse.

L’administrateur peut ensuite noter séparément pertinence, grammaire, vocabulaire, naturel, registre et complexité. Une correction validée peut rejoindre la mémoire de corrections et devenir une flashcard personnelle.
