V1 a base id is gone from the head WITHOUT being declared in the
head's retired_ids for its set. Declared retirement is the legal way
out since engine#131 (the consumer archives the learner progress,
adaptive-learner#2188); an undeclared disappearance stays a violation.
V2 an id is used more than once inside one set (set-wide uniqueness;
the same id in two DIFFERENT sets is fine).
V3 an id points at another kind or exercise type than before (reuse
smell: a card became an exercise, a matching became a cloze).
V4 a lesson FILE vanished while its set survived. The filename is the
lesson's identity for progress joins; a whole set disappearing is a
different, deliberate act and is reported through V1 only.
V5 a base retirement is gone from the head's list: a published
retirement is never un-declared (add-only, like the ids themselves).
V6 a head retirement is still alive in the head: retired AND present
is a contradiction - the consumer treats a resolvable id as living, so
the declared retirement would be silently ignored.
Editing content under a constant id is the allowed case and the entire
point of the promise.
Compare the published state against the head.
Violations:
retired_idsfor its set. Declared retirement is the legal way out since engine#131 (the consumer archives the learner progress, adaptive-learner#2188); an undeclared disappearance stays a violation.Editing content under a constant id is the allowed case and the entire point of the promise.