Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions docs/LESSON-FORMAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,13 @@ right = card `back`). Requires non-empty `card_ids` and forbids an explicit
"direction": "source_to_target" }
```

Case is not an error. An exercise that teaches case (capitalisation)
declares `"case_sensitive": true` (schema 1.19), and the app then grades
it in case. No distractor may also be an accepted answer
(`E-FREETEXT-DISJOINT`); they are compared without case unless the
exercise declares `case_sensitive`, so `i am Anna` can be a distractor
for `I am Anna` only there.

### cloze
```jsonc
{ "type": "cloze", "prompt": "…", "card_ids": [ … ],
Expand Down
2 changes: 1 addition & 1 deletion schema/content-manifest.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -481,5 +481,5 @@
],
"title": "ContentManifest",
"type": "object",
"x-schema-version": "1.18"
"x-schema-version": "1.19"
}
2 changes: 1 addition & 1 deletion schema/engine-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.35.0
0.36.0
12 changes: 9 additions & 3 deletions schema/lesson.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@
}
],
"default": null,
"description": "FREE_TEXT: list of accepted answers. Exact-match first, Levenshtein-tolerant fallback in the renderer. The first entry is the canonical answer shown after a wrong attempt. CLOZE ``multiselect`` (#1195) reuses this field with a mode-specific meaning: EVERY entry is a correct option (not just the first), rendered as a checkbox group with ``distractors`` and graded by exact-set match; the two lists must be disjoint.",
"description": "FREE_TEXT: list of accepted answers. Exact-match first, Levenshtein-tolerant fallback in the renderer; case is not an error unless ``case_sensitive`` is true. The first entry is the canonical answer shown after a wrong attempt. CLOZE ``multiselect`` (#1195) reuses this field with a mode-specific meaning: EVERY entry is a correct option (not just the first), rendered as a checkbox group with ``distractors`` and graded by exact-set match; the two lists must be disjoint.",
"title": "Accept"
},
"accept_orderings": {
Expand Down Expand Up @@ -352,6 +352,12 @@
"title": "Card Ids",
"type": "array"
},
"case_sensitive": {
"default": false,
"description": "FREE_TEXT: when true, an answer must match an ``accept`` entry in case (``I am Anna`` is right, ``i am Anna`` is wrong); when false (the default) case is not an error. Declare it only where the exercise teaches case, such as capitalisation. The rules follow it: ``accept`` and ``distractors`` are compared in case only when it is true (``E-FREETEXT-DISJOINT``). Schema 1.19, engine#242. Ignored by the other exercise types.",
"title": "Case Sensitive",
"type": "boolean"
},
"cloze_mode": {
"anyOf": [
{
Expand Down Expand Up @@ -384,7 +390,7 @@
},
"distractors": {
"default": [],
"description": "Content-only fallback distractors. The exercise renderer picks from this pool when no AI provider is configured (EXP-005 / P-114 dual mode). When AI is available, the AI generator may use the pool as a seed for harder distractors.",
"description": "Content-only fallback distractors. The exercise renderer picks from this pool when no AI provider is configured (EXP-005 / P-114 dual mode). When AI is available, the AI generator may use the pool as a seed for harder distractors. FREE_TEXT: no entry may also be an accepted answer (``E-FREETEXT-DISJOINT``, compared after trimming, in case only when ``case_sensitive`` is true).",
"items": {
"type": "string"
},
Expand Down Expand Up @@ -1334,5 +1340,5 @@
],
"title": "Lesson",
"type": "object",
"x-schema-version": "1.18"
"x-schema-version": "1.19"
}
2 changes: 1 addition & 1 deletion schema/quality-rules.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema-version": "1.18",
"$schema-version": "1.19",
"_comment": "Shared quality minimums, canonical in learn-content-engine and applied by its validateLessonQuality (engine#185). A lesson's purpose lifts some of them: bridge the exercise and exercise-type minimums, quiz the exercise-type minimum. Consumers read these numbers from the pinned engine release instead of keeping a copy.",
"rules": {
"minExerciseTypes": 2,
Expand Down
Loading