diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-13 11:33:09 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-13 11:33:09 +0200 |
| commit | 4cb43886ceb18cc6078ab2e8ec28fa15a1c701f2 (patch) | |
| tree | 7ebcc32f0192b8a901e00bee5d2aab7edc00fe1c /docs/superpowers/plans/2026-08-13-rule-builder.md | |
| parent | d10a5860b290ee35f657e95e509c8dac7608f809 (diff) | |
| download | qtmaildir-4cb43886ceb18cc6078ab2e8ec28fa15a1c701f2.tar.gz qtmaildir-4cb43886ceb18cc6078ab2e8ec28fa15a1c701f2.zip | |
docs: record the rules dialog data-loss defect as item 79
Opening the tagging rules dialog and pressing Save destroyed the first
rule in the list, without any editing. The rule lost its query and its
tags, then vanished entirely on the next load, since a rule with an empty
query is dropped as malformed.
Reproduced against the released tag rather than the branch, in a
throwaway worktree at 9585674 with a two-rule fixture: constructing the
dialog and running its save path left one rule of two.
onSelectionChanged blocked signals for the note widget only, while
m_enabled::toggled two lines later reached applyEditsToCurrentRule, which
writes every field from widgets the loader has not filled yet. The
existing comment there shows the hazard was known for one widget and not
extended to the other.
The fix landed with the builder work: the reloading flag now covers the
whole load, and switchingRulesDoesNotLeakRowsBetweenThem is the
regression test, verified by mutation to fail without the guard.
The live rules file had one casualty, the account rule sitting first in
the list, with both its query and its tags empty while every sibling was
intact. Restored from the shell backup that the earlier migration kept
and verified through mailctl's own reader. The rule had stopped tagging,
but only one message had arrived meanwhile; that message is now tagged
and the account is complete again at 14969 of 14969.
Diffstat (limited to 'docs/superpowers/plans/2026-08-13-rule-builder.md')
0 files changed, 0 insertions, 0 deletions
