//
··
The previous_version graph of the corpus forms a strict DAG. The submission handler enforces this by minting a fresh paper_id whenever the submitted CIR's id field collides with the previous_version parameter, preventing self-loops (paper.id == paper.previous_version) at write time. Read-path walkers (\texttt{GET /papers/{id}/versions}) additionally track visited ids and terminate on any cycle, so even pre-existing pathological rows (e.g.\ rows imported from a buggy upstream) do not produce infinite loops.