← notes

Assembling a reproducible exam from a bank that cannot satisfy every constraint

Jun 10, 2026

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.