The strand is a chain of 70 base pairs. Lesions (UV thymine dimers, oxidative damage) land at random unaffected sites as a Poisson process at the rate you set: each frame accumulates rate·dt and fires a hit whenever that accumulator crosses 1, so the arrivals stay rate-correct at any frame rate rather than tied to it.
Each enzyme complex scans left-to-right along the strand at its set speed. When its scan head reaches a lesion no other enzyme has claimed, it stops and spends a fixed processing window there — faster enzymes clear that window quicker, since processing time is modelled as a constant number of scan-lengths rather than a constant duration. At the end of that window a single fidelity roll decides the outcome: success restores the original base pair, failure leaves a permanent mismatch (a mutation) — this mirrors how real excision-repair pathways are fast but not perfectly accurate, so raising fidelity trades nothing against speed while raising enzyme count or scan speed trades throughput against how many lesions sit unrepaired (and mutation-prone) at once.
- Genome integrity — the fraction of the strand that is neither currently damaged nor permanently mutated.
- Repair success — repaired ÷ (repaired + mutated), the enzyme's realised fidelity over this run.
- UV burst — instantly damages a random cluster of sites, useful for watching the enzyme pool clear a backlog.