Current behavior
When a cycle break is edited (--edit-time) or deleted, the next break's label is rewritten to reference the new boundary. This is the _cycle_neighbours + _relabel_break cascade in lib/cycle.sh.
Why it's enhancement, not invariant
The cascade is a nice-to-have. If the previous break is lost or deleted, the next break keeping its original label is acceptable — the label is still a valid receipt of what was known at write time.
The core invariant is simpler:
- A break is a point in time (zero-duration session)
- Its label names the previous break's end + its own end
- The label is computed at write time
Proposed
Move the cascade behavior behind a feature flag or make it optional, so the contract doesn't mandate propagation. If the previous break is gone, the next break's label remains as-written.
Material
lib/cycle.sh: _cycle_neighbours, _relabel_break
--edit-time cascade: lines ~230-235
delete cascade: lines ~270-280
Labels
enhancement
Current behavior
When a cycle break is edited (
--edit-time) or deleted, the next break's label is rewritten to reference the new boundary. This is the_cycle_neighbours+_relabel_breakcascade inlib/cycle.sh.Why it's enhancement, not invariant
The cascade is a nice-to-have. If the previous break is lost or deleted, the next break keeping its original label is acceptable — the label is still a valid receipt of what was known at write time.
The core invariant is simpler:
Proposed
Move the cascade behavior behind a feature flag or make it optional, so the contract doesn't mandate propagation. If the previous break is gone, the next break's label remains as-written.
Material
lib/cycle.sh:_cycle_neighbours,_relabel_break--edit-timecascade: lines ~230-235deletecascade: lines ~270-280Labels
enhancement