The third store fetching everything by asking for nothing. Same cause as #109: Stalwart doesn't return shareWith unless a client names it, so mail folders never looked shared either.
Why this one matters on its own
Sharing a mail folder is withdrawn (#97) because Stalwart stores the share and never delivers it. The only way left to clear one already made is the Stop sharing entry — which appears only when a folder looks shared.
Without the property it never did. The escape hatch built for exactly that situation could not be reached from the situation it was built for.
Found by looking, not by waiting
I grepped for ids: null with no properties across the app rather than waiting for the next report. The others it turned up — Sieve scripts, identities, the vacation response, quotas, participant identities, push subscriptions — have no shareWith to lose. Mailboxes were the last.
The mock hides it here too now, so all three collection types are honest about it.
333 web and 77 server tests pass. npm run typecheck clean. KNOWN-ISSUES updated to name mail folders and say why they were the sharpest case.
The third store fetching everything by asking for nothing. Same cause as #109: Stalwart doesn't return `shareWith` unless a client names it, so mail folders never looked shared either.
### Why this one matters on its own
Sharing a mail folder is **withdrawn** (#97) because Stalwart stores the share and never delivers it. The only way left to clear one already made is the **Stop sharing** entry — which appears only when a folder *looks* shared.
Without the property it never did. The escape hatch built for exactly that situation could not be reached from the situation it was built for.
### Found by looking, not by waiting
I grepped for `ids: null` with no `properties` across the app rather than waiting for the next report. The others it turned up — Sieve scripts, identities, the vacation response, quotas, participant identities, push subscriptions — have no `shareWith` to lose. Mailboxes were the last.
The mock hides it here too now, so all three collection types are honest about it.
333 web and 77 server tests pass. `npm run typecheck` clean. KNOWN-ISSUES updated to name mail folders and say why they were the sharpest case.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
**Merged** 2026-08-27 as coffey-labs/ihasmail@06b89111df9f
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The third store fetching everything by asking for nothing. Same cause as #109: Stalwart doesn't return
shareWithunless a client names it, so mail folders never looked shared either.Why this one matters on its own
Sharing a mail folder is withdrawn (#97) because Stalwart stores the share and never delivers it. The only way left to clear one already made is the Stop sharing entry — which appears only when a folder looks shared.
Without the property it never did. The escape hatch built for exactly that situation could not be reached from the situation it was built for.
Found by looking, not by waiting
I grepped for
ids: nullwith nopropertiesacross the app rather than waiting for the next report. The others it turned up — Sieve scripts, identities, the vacation response, quotas, participant identities, push subscriptions — have noshareWithto lose. Mailboxes were the last.The mock hides it here too now, so all three collection types are honest about it.
333 web and 77 server tests pass.
npm run typecheckclean. KNOWN-ISSUES updated to name mail folders and say why they were the sharpest case.🤖 Generated with Claude Code
Merged 2026-08-27 as coffey-labs/ihasmail@06b89111df
Rebuilt from: git history, session transcript.