Port: tracks which lessons the learner has completed.
Completion is reversible: unmarkComplete is the learner's own undo, and the
only thing that clears a mark (playback never does — see the lesson-progress
capability). Both writers are idempotent, so a caller never has to ask first.
In v1 the only adapter is in-memory and the state is ephemeral (see
design.md §D6 and the spec course-platform-domain §
"markLessonComplete is ephemeral in v1"). When durable persistence arrives,
the adapter changes; the contract here does not.
Port: tracks which lessons the learner has completed.
Completion is reversible:
unmarkCompleteis the learner's own undo, and the only thing that clears a mark (playback never does — see thelesson-progresscapability). Both writers are idempotent, so a caller never has to ask first.In v1 the only adapter is in-memory and the state is ephemeral (see design.md §D6 and the spec
course-platform-domain§ "markLessonComplete is ephemeral in v1"). When durable persistence arrives, the adapter changes; the contract here does not.