<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hutch.git/HutchTests/InboxViewModelTests.swift, branch v3.8.2</title>
<subtitle>ios client for sourcehut. swiftui.
</subtitle>
<id>http://git.krz.sh/krz/hutch.git/atom?h=v3.8.2</id>
<link rel='self' href='http://git.krz.sh/krz/hutch.git/atom?h=v3.8.2'/>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/'/>
<updated>2026-07-16T04:27:03+00:00</updated>
<entry>
<title>Merge pull request #5 from zerolabsco/inbox-unread-baseline</title>
<updated>2026-07-16T04:27:03+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T04:27:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=0ad430c79eedac4140680e3aaca238969ac711b1'/>
<id>urn:sha1:0ad430c79eedac4140680e3aaca238969ac711b1</id>
<content type='text'>
Start a new account at zero unread</content>
</entry>
<entry>
<title>fix: start a new account at zero unread</title>
<updated>2026-07-16T03:38:55+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T03:38:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=3611d941247a7163fce9c61d8f75a81ddedd90b7'/>
<id>urn:sha1:3611d941247a7163fce9c61d8f75a81ddedd90b7</id>
<content type='text'>
An absent view record read as unread, so on first sign-in every thread a list
had ever carried was unread. On a busy list that is thousands of threads the
user never intended to read, inflating the Home dashboard, the needs-attention
snapshot, and the widget with a number that means nothing.

Record a baseline when an account is activated: mail that predates it is read,
mail after it is not. activate() is the single funnel for launch validation,
account switching, and adding an account, so one call covers every sign-in path.

Accounts that already carry read state have been in use, so they get a
distantPast baseline and keep every unread thread they had — upgrading must not
silently mark a real backlog as read.

markUnread now records an explicit distantPast marker instead of deleting the
entry. Deleting would drop the thread back to the baseline rule, so marking an
old thread unread would appear to do nothing.
</content>
</entry>
<entry>
<title>refactor: share the email body diff splitter</title>
<updated>2026-07-16T02:42:38+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T02:42:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=ccec322f8eac4d14638f5abdae7dae7abc95eb7e'/>
<id>urn:sha1:ccec322f8eac4d14638f5abdae7dae7abc95eb7e</id>
<content type='text'>
segmentMessageBody and its helpers were private to ThreadViewModel, reachable
from tests only through a segmentMessageBodyForTesting shim. Patchset review
needs the same splitting, because sr.ht's Patch type carries no diff — the diff
only exists inside the email body — so this has to be shared rather than
duplicated.

Moved to InboxThreadUtilities. The shim is gone; the existing test calls the
real function directly now.

Also adds the Patchset model layer that the coming views build on.
</content>
</entry>
<entry>
<title>fix: collapse work inbox messages into thread summaries</title>
<updated>2026-04-20T18:15:04+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-20T18:15:04+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=380fb866d090c5f13b2ad3f88f1fe23c4ade4801'/>
<id>urn:sha1:380fb866d090c5f13b2ad3f88f1fe23c4ade4801</id>
<content type='text'>
</content>
</entry>
<entry>
<title>improve home attention flows and cross-linking</title>
<updated>2026-04-12T05:34:54+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-12T05:34:54+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=5f6d545eb3455a9e4da5a3cb4460811e3a48d939'/>
<id>urn:sha1:5f6d545eb3455a9e4da5a3cb4460811e3a48d939</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add search to builds, trackers, tickets, pastes, mailing lists, and inbox</title>
<updated>2026-03-23T01:42:45+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-23T01:42:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=1f8b7a23529462c3c332753d33810b5c9f692bbc'/>
<id>urn:sha1:1f8b7a23529462c3c332753d33810b5c9f692bbc</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add support for reading inbox messages (emails) and replying in-app</title>
<updated>2026-03-19T06:17:49+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-19T06:17:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=441b69afae30ee6b662be38004fd7b5de1e47302'/>
<id>urn:sha1:441b69afae30ee6b662be38004fd7b5de1e47302</id>
<content type='text'>
</content>
</entry>
</feed>
