Part of #1946 — Redux → React Query migration (Stage 1). Part of the #1976 courseware decomposition (plan) — Target 4 (remaining writers). Stacked on the metadata + sequence conversions (models already exist; no new peel).
Goal: convert the two remaining courseware write thunks to React Query mutations.
Tasks
saveIntegritySignature (HonorCode.jsx) → useMutation; on success patch coursewareMeta.userNeedsIntegritySignature. Preserve the masquerade skip (no backend POST when masquerading).
saveSequencePosition (CoursewareContainer) → useMutation; preserve the optimistic sequences.activeUnitIndex update + rollback on error.
Verify: honor-code acceptance dismisses the modal and clears the integrity prompt; sequence position persists across reloads; rollback on failure.
Scoped-but-light; a full plan gets added when this is picked up.
Part of #1946 — Redux → React Query migration (Stage 1). Part of the #1976 courseware decomposition (plan) — Target 4 (remaining writers). Stacked on the metadata + sequence conversions (models already exist; no new peel).
Goal: convert the two remaining courseware write thunks to React Query mutations.
Tasks
saveIntegritySignature(HonorCode.jsx) →useMutation; on success patchcoursewareMeta.userNeedsIntegritySignature. Preserve the masquerade skip (no backend POST when masquerading).saveSequencePosition(CoursewareContainer) →useMutation; preserve the optimisticsequences.activeUnitIndexupdate + rollback on error.Verify: honor-code acceptance dismisses the modal and clears the integrity prompt; sequence position persists across reloads; rollback on failure.
Scoped-but-light; a full plan gets added when this is picked up.