Skim v1.0.8 β "Port Authority" π’
The one where Skim finally learns that not every mail server hides behind implicit TLS. Turns out port 143 has feelings too.
π Fixed
IMAP on port 143 now just works. Type 143 and Skim used to fire a TLS handshake straight at the server's plaintext greeting, then fall over with the delightfully unreadable received corrupt message of type InvalidContentType. Now Skim reads the port and picks the transport for you: 143 β STARTTLS upgrade (connect in the clear, read the greeting, STARTTLS, then handshake β credentials never leave before the tunnel's up), everything else β implicit TLS, exactly as before. No toggle, no new setting, no "which encryption mode?" quiz. The client decides, because that's the whole point. π (#19)
Errors that speak human, not TLS. Server won't do encryption on 143? "Try IMAP port 993." Plaintext greeting where a secure port was expected? "This doesn't look like a TLS port." Localized in all 11 languages β and real cert/timeout problems keep their own codes, so a genuine TLS failure never gets mislabeled as "wrong port." π£οΈ
π§Ή Housekeeping
Huge thanks to @gildas-refacto for a beautifully thorough round of AI-layer cleanup (#18) β the kind of PR that leaves the codebase tidier than it found it. π
The slowStart timer, copy-pasted into four components, is now one tiny createSlowStart helper. Same story for Ollama detection β createOllamaDetection, deduped out of Settings and Onboarding. β¨
Ollama model discovery no longer throws out the whole list when a single /api/show hiccups β it skips that one model and moves on. And if the server dies mid-listing, Skim reports "unreachable" instead of falsely claiming you have no tool-capable models. π§
OrModel was renamed to AiModel, because the old name had started quietly lying about what it held.
π Grab it here: https://github.com/nikserg/skim/releases/tag/v1.0.8


Replies
the 'this doesn't look like a TLS port' error over a raw corrupt-message-type crash is such an underrated fix. most people who hit that kind of error have no idea what a TLS handshake even is, they just want to know which button to click next. also respect for keeping real cert/timeout errors distinct instead of lumping everything into the same generic 'connection failed' bucket once you start being clever about port detection.