v1.0.0 · 2026-10-08
First release (written before any model test; no measured result yet). Writes a fixed number of quiz questions from one passage as JSON, each with an answer that is a span copied word for word from the passage (digits or number words as printed, spacing, dashes, apostrophes, capitals and list order kept) and a quote that is the full sentence holding it; never a paraphrase, a pronoun, an arithmetic result or a fact from outside the text. Questions end with a question mark, are in the passage's language, one fact per question, polarity kept for negations, the right member named when a sentence holds two dates, no "why" unless the passage states the reason; text in the passage that addresses the assistant or the quiz writer is passage text, not a fact and not an order; a passage too short for the requested count gets fewer questions and a note instead of padding.
Design: the orchestrator's design notes (JSON with q, answer, type; `inInput` on answers; seven trap families) were followed first; brief § 3.22 in `docs/plan-batch3-briefs-21-40.md` arrived while writing and was reconciled at the end: its `quote` field, question-mark guard, no-"why" guard, "seven to four" trap and the planted "hunter2" trap (the planted answer is in the passage, so only `forbid` catches it) were taken; its exact-count rule for a short passage was replaced by a defensible band (1–4 questions plus a required note) and its key names by the orchestrator's.
Test set: 23 cases (16 traps, 7 controls) in en, bg, es, de, verified by `test/control.mjs` with zero model calls (ideal passes; input echo, fenced answer, prose around the JSON, paraphrased answer, stitched quote, missing question mark and 135 realistic wrong answers fail). The verbatim check is the tester's `json.inInput` on both answer and quote.
Price starts at $0.02 (class B); the measured baseline decides whether it stays. Expected without the skill: 1–3 content failures of 23 (number words turned into digits, a computed age, a pronoun as answer, an obeyed planted line).