Skip to content

CourseForge 4.6.0

Choose a tag to compare

@ZcarecroW ZcarecroW released this 01 Sep 03:07
· 19 commits to main since this release
v4.6.0
cb2037d

Punctuation set the way the language sets it

A model writing German opens a quotation with „ and closes it with a straight ". The two are one keystroke apart in the training data, it is not wrong enough to notice while reading one page, and it is wrong on every page of a five-hundred-page book — exactly the kind of error worth fixing with code rather than with a sentence in a prompt.

A generated page now has its punctuation set before it is stored: German gets „Wort“, French its guillemets and the narrow spaces its typography asks for, Spanish and Italian their own, English curly marks and a real apostrophe in don't. Every language gets ... as one character and a spaced hyphen as a dash.

It never touches anything that is not prose — fenced blocks, inline spans, links and their targets, bare addresses, HTML tags, formulas, a table's alignment row and CourseForge's own cross-reference and cloze markers are lifted out before the rules run and put back exactly as they were. It reads position rather than order, which is what makes the half-corrected pair the models actually produce come out right, and it is idempotent.

Each profile decides for itself; app.typography is what a new profile starts from, and it is on.

The baseline every course starts from is yours to set

Every content element and value now appears on Administration → Settings under Course defaults, one field each. Set Learning objectives on, or a house minimum length, or a standing audience, and every course that has not decided otherwise follows. They are ordinary settings: only what you change is written, Reset hands the decision back to the release, and set_settings over MCP reaches them by the same keys. They are generated from the details catalogue, so an element added later arrives with its field already in place.

The research briefing has both halves

Course → Details → Research is now the same split the Content tab gives a page: Markdown on the left, rendered on the right, edit / split / preview, and the same linked scrolling.

Fixes

  • One course prompt, in both places it shows. The Structure and Settings tabs each held their own copy and only re-read it when a different course was opened, so saving in one left the other stale — and Save changes would push the stale value back over the one just saved. Both now follow the stored value, without dragging an unsaved outline or course name with them, and without overwriting an edit typed into the other and not yet saved.
  • An invite can be taken back. Revoke, beside the open invite, closes the row and deletes INVITE-CODE.txt in one step; the code stops working immediately and no invite is left open. Recorded as invite.revoke.
  • Settings could store a Minimum length above a Maximum length, which every other door to that pair already refuses.
  • The Markdown editor's read-only lock set contenteditable and nothing else, so Backspace, Enter and undo still edited a document that was supposed to be held still.

291 tests pass.