An incident workstation keeps one editable note and a list of alert IDs. Implement four reference models: a plain Python string for note content, a list for alert order, an array of saved note versions, and explicit block boundaries. Compare every operation from the four lessons against those models. The goal is to expose when an index structure pays for a move, a path copy, a link traversal, or a prefix repair. State whether each offset is a code-point position or a logical record index; neither model silently handles grapheme clusters or distributed concurrent edits.
Project: audit text edits and blocked sequence lookups
Acceptance trace
Start with Valve offline. Insert -19 after Valve, append at bay 6, and prepend Alert:; the gap-buffer text must read Alert: Valve-19 offline at bay 6. Save Pump offline at bay 6 as one rope root, then create a later root reading Pump-47 at bay 6 while the saved root still renders its earlier content. Build both blocked alert sequences from alert-47, alert-19, alert-61, and alert-83. Insert alert-29 at index two, remove index one, and confirm the third value is alert-61. Test empty structures and edits at both ends as well as a middle position.
Expected review record
note=Alert: Valve-19 offline at bay 6
saved=Pump offline at bay 6
revised=Pump-47 at bay 6
alerts=[alert-47, alert-29, alert-61, alert-83]Boundary and cost review
Run random cursor moves, insertions, forward deletions, and backspaces against the plain string. Check that the gap contains only unused slots and that its left boundary equals the logical cursor. After every rope edit, verify both the new root and a retained old root; count tree height after repeated one-sided joins. For each blocked sequence, compare every inserted or deleted ID to a plain list, check total length, and verify all block sizes. Check that cumulative ends in the segmented array equal running block lengths. Explain why a gap-buffer jump, an unbalanced rope, an unrolled numeric lookup, and segmented prefix repair may each scan or copy a large fraction of the structure.
Common Mistakes
- Do not include the gap in displayed note text.
- Do not mutate shared rope chunks.
- Do not leave empty linked blocks after deletion.
- Do not trust stale cumulative block ends.
