
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Observed behavior
perseus_derive gates Text entry derivation on parser.extract_value, whose grammar is narrower than xsd:double (the Numeric answer format, see #6150).
Accepted answers that are valid numbers but return None from extract_value:
+5
1E3 (capital E)
INF, NaN
Such an item is reported not derivable, so the node publishes QTI only. Before #6222 it shipped a Perseus item with "answers": [].
Expected behavior
Valid numeric answers derive a Perseus item that accepts them, e.g. by normalising the value (+5 → 5, 1E3 → 1e3) before it reaches PerseusExerciseGenerator._process_input_answers.
User-facing consequences
Learners on older Kolibri get no exercise for these nodes.
Steps to reproduce
is_perseus_derivable(_text_item("single", ["+5"])) → False.
- Same for
["1E3"].
Context
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Observed behavior
perseus_derivegates Text entry derivation onparser.extract_value, whose grammar is narrower than xsd:double (the Numeric answer format, see #6150).Accepted answers that are valid numbers but return
Nonefromextract_value:+51E3(capitalE)INF,NaNSuch an item is reported not derivable, so the node publishes QTI only. Before #6222 it shipped a Perseus item with
"answers": [].Expected behavior
Valid numeric answers derive a Perseus item that accepts them, e.g. by normalising the value (
+5→5,1E3→1e3) before it reachesPerseusExerciseGenerator._process_input_answers.User-facing consequences
Learners on older Kolibri get no exercise for these nodes.
Steps to reproduce
is_perseus_derivable(_text_item("single", ["+5"]))→False.["1E3"].Context