math: dollar delimiters end-to-end (exact answers, escaping examples, context rendering)
- switch the math authoring/rendering contract from \(...\)/\[...\] to the standard $...$ inline / $$...$$ display: prompts (20-question-tools, 40-formatting), singleDollarTextMath on the renderer, legacy reader kept, and escape-debris recovery extended to dollar spans (mirroring micromark delimiter-run rules) - exact answer membership now precedes debris cleanup in coerceCorrectAnswer (calculus incident: an exact sentence-final-period label was stripped as model debris, then rejected); option keys are passed at the boundary/grading seams, the dock no longer pre-coerces - a complete, phase-correct JSON-escaping example rides the probe/quiz tool descriptions (serialized from one canonical body; quiz leads with type+nodeId), plus the one-sentence JSON-escaping rule in 40-formatting - ask option descriptions render markdown/LaTeX in the pending dock; settled cards keep the details line and option descriptions retroactively, read from the persisted call arguments (chat passes part.input to AnsweredCard) 1566/1566 tests on both navigator configs; typecheck, lint, production build, standalone packaging, and Electron-runtime smoke all green.
This commit is contained in:
@@ -295,8 +295,12 @@ describe("practice prompt composition (own directory + the formatting appendix)"
|
||||
|
||||
it("the SHARED formatting guide composes (owner, 2026-10-04 late): LaTeX delimiters in every setting", () => {
|
||||
const prompt = composeInstructions("practice");
|
||||
// The delimiter law — practice must write \(...\)/\[...\] too.
|
||||
assert.match(prompt, /NEVER `\$` or `\$\$`/);
|
||||
// The standard delimiter law is shared by all three authoring agents.
|
||||
for (const agent of ["practice", "prober", "teacher"] as const) {
|
||||
const instructions = composeInstructions(agent);
|
||||
assert.ok(instructions.includes("Inline `$f(x)$`, display `$$` fenced on its own lines."));
|
||||
assert.ok(!instructions.includes("NEVER `$` or `$$`"));
|
||||
}
|
||||
assert.ok(prompt.indexOf("# The practice session") < prompt.indexOf("## Formatting"), "formatting rides as the appendix");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user