@bobfrankston/rmfmail 1.2.292 → 1.2.293

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.commitmsg CHANGED
@@ -1,29 +1,28 @@
1
- Trusting a sender must not turn on their tracking pixels
1
+ The allowlist merge silently dropped any list it had not been taught
2
2
 
3
- Bob 2026-08-28, on a newsletter he subscribed to: "I don't need the spam
4
- reminder but I don't want to say show remote content in order to prevent
5
- tracking." He was right, and the shape of the bug is that the allowlist was
6
- answering two different questions with one list. The only gesture in the whole
7
- app that said "this correspondent is fine" was the remote-content banner's
8
- "Always: …", which buys a tracking pixel with every vote of confidence.
3
+ Caught by driving the button from v1.2.292: pressing "Stop warning about
4
+ *@digital.conservativeintel.com" returned `{trusted: true}`, the banner
5
+ disappeared and nothing was written. `trustedDomains` was empty on readback
6
+ and absent from allowlist.jsonc.
9
7
 
10
- Two lists now, both in allowlist.jsonc:
8
+ Cause: `saveAllowlist` merges the local copy with the cloud one so a second
9
+ machine's entries survive, and that merge rebuilt the result from a HARDCODED
10
+ list of the five fields it knew. The two lists added earlier the same day were
11
+ dropped on the way to disk, with a success return the whole way up. A merge
12
+ that must be taught each new field will keep losing the next one.
11
13
 
12
- senders / domains load their images, and I trust them
13
- trustedSenders / trustedDomains ONLY stop warning me about them
14
+ - `mergeAllowlists(local, cloud)` extracted, exported, and tested unions
15
+ every field present in either copy, discovering names at runtime. Arrays
16
+ union; anything else prefers the local side, since the caller is the one
17
+ making a change; no key either side has is ever dropped. That last property
18
+ is what keeps a second machine's entries alive and what saved this file in
19
+ the 2026-07-23 wipe.
20
+ - `DEFAULT_ALLOWLIST` names trustedSenders/trustedDomains on both the desktop
21
+ and Android sides, so a fresh file has them.
22
+ - The banner button no longer trusts a bare resolve: it only ever ADDS, so
23
+ anything but `trusted: true` is a failed write, and it says so on the button
24
+ instead of removing a banner that will come back. That check is what would
25
+ have caught this bug at the UI instead of at a grep of the JSON.
14
26
 
15
- Both feed `senderTrusted` in the store; only the first feeds `allowRemote`, and
16
- that line carries a comment saying why it must never be widened to the second.
17
-
18
- The trust note gains the action it was missing: **"Stop warning about
19
- ‹address›"** and **"Stop warning about *@‹domain›"**, naming the sender rather
20
- than saying "this one" so the choice is checkable afterwards. New IPC
21
- `trustSenderOrDomain` (toggle, like flagSenderOrDomain) wired through all six
22
- places — service, jsonrpc, web-service, web-jsonrpc, android-bootstrap,
23
- api-client + mailxapi.js; the bridge-contract guard passes at 110 client calls.
24
-
25
- The buttons appear only where the server's own verdict is the WHOLE finding and
26
- the sender is proved. A forgery banner gets no such button: no list should be
27
- able to silence "this message is not what it says it is", and there is nothing
28
- to trust when identity is the thing in doubt. A failed write reports itself on
29
- the button rather than looking like it worked.
27
+ tests/allowlist-merge.test.ts covers the shape that loses data, including a
28
+ field named nowhere in the code.
@@ -4122,7 +4122,9 @@ var init_web_settings = __esm({
4122
4122
  domains: [],
4123
4123
  recipients: [],
4124
4124
  flaggedSenders: [],
4125
- flaggedDomains: []
4125
+ flaggedDomains: [],
4126
+ trustedSenders: [],
4127
+ trustedDomains: []
4126
4128
  };
4127
4129
  PREV_KEEP = 5;
4128
4130
  SHARED_REFRESH_MS = 5 * 6e4;