Skip to content

v0.36.0

Latest

Choose a tag to compare

@astrapi69 astrapi69 released this 01 Oct 12:28
· 4 commits to main since this release
1cb1944

Schema 1.19: one additive exercise field, case_sensitive. E-FREETEXT-DISJOINT now
compares without case unless an exercise declares it, so a lesson that passed
0.35.0 can fail; measured over the eleven content repositories, two
exercises do, and they declare the field with the re-pin.

Case is not an error unless the exercise declares it (engine#242)

Schema 1.19 adds case_sensitive to free_text exercises (boolean,
default false, optional). An exercise that teaches case, such as
capitalisation, declares true, and a consumer then grades it in case;
without it, case is not an error. The rules follow the declaration:
E-FREETEXT-DISJOINT compares accept and distractors after trimming,
in case only where case_sensitive is true; params.shared names each
answer once, as accept writes it. The QTI adapter writes the flag as
caseSensitive on every mapEntry (also for a single answer, so it
survives) and reads it back when every mapEntry carries
caseSensitive="true"; an imported accept lists each answer once.

Why: an author could not say that case matters. The reference app grades
free text without case, so the two exercises in adaptive-learner-content
that teach capitalisation graded the lower-case answer correct, while
0.35.0's rule compared in case to keep them valid. Principle (maintainer,
2026-10-01): case is not an error unless the exercise says so, which is
how Moodle's short answer and QTI's caseSensitive treat it.

A changed comparison can turn valid content red. Measured with this build
over the 632 lessons of the eleven content repositories: exactly those two
exercises (ex-free-i-capital, ex-free-nationality); they declare
case_sensitive: true when their repository pins this release.