Summary
The application reuses one ConfirmPopup instance for unrelated workflows. The laser-mode and resume-at-line flows enlarge and center that shared instance, but dismissing either dialog does not restore the standard layout. Every later confirmation in the same session therefore inherits the previous dialog's size, position, and (after laser mode) title sizing.
This makes ordinary, short confirmations sequence-dependent: for example, Restore Settings can appear as a large, centered safety warning only because the operator previously opened and cancelled Entering Laser Mode.
Validated baseline
- Repository:
Carvera-Community/Carvera_Controller
- Branch:
develop
- Commit:
2ea66c10e96d88013a04441134d3d4f8e8c88510
- Validation host: macOS, Python 3.13.5, Kivy integration fixture
- Controller hardware: not required; this is local reusable-widget state
Reproduction
- Launch the application and open the Entering Laser Mode confirmation.
- Observe that the safety dialog is intentionally enlarged to 60% x 70%, centered, and gives its title automatic height.
- Cancel the dialog.
- Open Config > Settings > Restore Settings (or another ordinary confirmation such as Save As Default, delete, overwrite, or reset).
- Observe that the ordinary confirmation remains 60% x 70%, centered, and retains the altered title sizing.
The same state leak occurs after opening and cancelling Beta Feature: Resume Playback; subsequent confirmations remain 80% x 80% and centered.
Expected behavior
Expanded warning layouts should be scoped to the workflow that requested them. After dismissal, the reusable confirmation should return to its standard presentation:
size_hint == (0.5, 0.4)
pos_hint == {"right": 0.75, "top": 0.7}
- title
size_hint_y == 0.4
Actual behavior
The standard layout is declared in KV, but it is applied only when the singleton widget is created. The two expanded flows mutate live widget properties, and ConfirmPopup.on_dismiss() only changes the showing flag.
Source evidence at the validated commit:
Deterministic regression proof
An integration regression test can reproduce this without hardware:
- Open
enable_laser_mode_confirm_popup().
- Assert the intentional expanded geometry and automatic title height.
- Dismiss it and pump the Kivy event loop.
- Open
open_setting_restore_confirm_popup().
- Assert the standard geometry and title height.
On the validated baseline, this test fails consistently because the second dialog's size_hint is (0.6, 0.7), not (0.5, 0.4).
Impact
- Dialog hierarchy and spacing change based on an unrelated earlier action.
- Short confirmations occupy excessive screen area after a warning flow.
- The laser flow's automatic title height leaks into ordinary dialogs.
- The behavior is cross-platform because it is shared Kivy widget state.
This is a presentation-state defect only; the confirm/cancel actions themselves should remain unchanged.
Acceptance criteria
- Dismissing any expanded confirmation restores the standard size, position, and title sizing.
- Laser and resume warnings retain their intentionally expanded layouts while open.
- Confirm and cancel callback behavior is unchanged.
- A hardware-free integration test covers an expanded-dialog -> standard-dialog sequence and fails on
2ea66c10 before the fix.
- Existing unit and integration tests remain green.
Duplicate search
Searched open and closed issues/PRs for confirmation dialog layout laser resume, confirm popup size, and dialog resize persists; no matching report was found.
Summary
The application reuses one
ConfirmPopupinstance for unrelated workflows. The laser-mode and resume-at-line flows enlarge and center that shared instance, but dismissing either dialog does not restore the standard layout. Every later confirmation in the same session therefore inherits the previous dialog's size, position, and (after laser mode) title sizing.This makes ordinary, short confirmations sequence-dependent: for example, Restore Settings can appear as a large, centered safety warning only because the operator previously opened and cancelled Entering Laser Mode.
Validated baseline
Carvera-Community/Carvera_Controllerdevelop2ea66c10e96d88013a04441134d3d4f8e8c88510Reproduction
The same state leak occurs after opening and cancelling Beta Feature: Resume Playback; subsequent confirmations remain 80% x 80% and centered.
Expected behavior
Expanded warning layouts should be scoped to the workflow that requested them. After dismissal, the reusable confirmation should return to its standard presentation:
size_hint == (0.5, 0.4)pos_hint == {"right": 0.75, "top": 0.7}size_hint_y == 0.4Actual behavior
The standard layout is declared in KV, but it is applied only when the singleton widget is created. The two expanded flows mutate live widget properties, and
ConfirmPopup.on_dismiss()only changes theshowingflag.Source evidence at the validated commit:
ConfirmPopup.on_dismiss()does not restore presentation stateDeterministic regression proof
An integration regression test can reproduce this without hardware:
enable_laser_mode_confirm_popup().open_setting_restore_confirm_popup().On the validated baseline, this test fails consistently because the second dialog's
size_hintis(0.6, 0.7), not(0.5, 0.4).Impact
This is a presentation-state defect only; the confirm/cancel actions themselves should remain unchanged.
Acceptance criteria
2ea66c10before the fix.Duplicate search
Searched open and closed issues/PRs for
confirmation dialog layout laser resume,confirm popup size, anddialog resize persists; no matching report was found.