Assembling a reproducible exam from a bank that cannot satisfy every constraint
Train people for the CIPLE, the official A2-level European Portuguese certificate, as a subscription platform. Reading and writing in v1.
ExamAssembler is where the real engineering went. An assembled exam has to be
reproducible by seed, domain-balanced, level-mixed, repeat-free within one exam,
and weakness-weighted for practice runs. Those constraints conflict, and a bank
that cannot satisfy all of them is the normal case rather than the edge case. So
there is an explicit priority order and a degrade ladder: when the bank runs
short the assembler relaxes constraints in a defined sequence instead of failing
or silently producing something unbalanced.
The other structural decision is two planes that never touch. The content plane is offline, AI generation, then validation, then human promotion. The runtime plane only reads what a human promoted. Nothing is generated in front of a learner. Reading is graded free by key comparison; writing gets metered AI feedback against the five-dimension rubric with a per-user cost ledger.
Runs end to end locally with zero external accounts. Listening is built and not in v1. Independent of CAPLE and Universidade de Lisboa, stated up front.