const PUBLISHING_AND_RISK: &str = "\
Every write stages into your open changeset for the course; later calls build on it, and reads show it unless state is published. list_changesets shows it, discard_changeset drops it, publish_changeset publishes it.
A change is risky only in live content (not draft, not test mode, not a hidden page, not a chapter that hasn't opened):
- removing an exercise block whose exercise has submissions, or a page or chapter containing one
- removing a visible page or an open chapter
- moving a deadline earlier or adding one to an open chapter; moving an open chapter's opening time later
- changing an exercise's own deadline so that the deadline that applies to it moves earlier, or it gets one, while its chapter is open
- changing a completion policy or the module completion requirement after completions exist; turning chapter locking on or off
publish_changeset refuses changesets with risky changes; the teacher publishes those on the review page. Size alone is never risky; moving exercises is never risky, even when the move changes which chapter deadline applies. Publishing fails if a staged page or entity changed live meanwhile: drop just those with discard_changeset and entities, read their published state again and redo your edits to them.
A write fails with staged_state_changed when a parallel call changed what it read; read again and repeat it.
After publishing, get_history lists changes and revert_change undoes one write call.";