<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hutch.git/Hutch/Views/Repositories/RepositoryListViewModel.swift, branch v3.5.0</title>
<subtitle>ios client for sourcehut. swiftui.
</subtitle>
<id>http://git.krz.sh/krz/hutch.git/atom?h=v3.5.0</id>
<link rel='self' href='http://git.krz.sh/krz/hutch.git/atom?h=v3.5.0'/>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/'/>
<updated>2026-05-07T01:41:49+00:00</updated>
<entry>
<title>feat(cache): persist read-only API responses</title>
<updated>2026-05-07T01:41:49+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-05-07T01:41:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=205cf2687ce48f3d004792ff223422a86cc6bdbc'/>
<id>urn:sha1:205cf2687ce48f3d004792ff223422a86cc6bdbc</id>
<content type='text'>
Add a bounded stale-while-revalidate cache at the Sourcehut API boundary with
stable keys, centralized TTLs, request coalescing, payload hashing, and LRU disk
pruning.

Cache high-value read-only repo, build, ticket, project, profile, paste, and
Home/Work Queue data while keeping mutations network-only and invalidating
related prefixes after successful writes.

Add focused cache tests and implementation notes.
</content>
</entry>
<entry>
<title>fix: sonarqube code smell fixes</title>
<updated>2026-04-14T01:07:53+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-14T01:07:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=312e535f400f31714b3750de5222a1f6a8e5bcda'/>
<id>urn:sha1:312e535f400f31714b3750de5222a1f6a8e5bcda</id>
<content type='text'>
</content>
</entry>
<entry>
<title>perf: reduce redundant fetches and improve list render efficiency</title>
<updated>2026-04-13T18:26:08+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-13T18:26:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=06b24715cd244475ded5482e926721a57278a3cf'/>
<id>urn:sha1:06b24715cd244475ded5482e926721a57278a3cf</id>
<content type='text'>
- Remove no-op per-row task from RepositoryListView; loadMoreIfNeeded
  is a stub for repos so each row was allocating a Task that did nothing
- Fix BuildListView auto-refresh stopping permanently after navigating
  away; startAutoRefresh now runs unconditionally on task so it restarts
  on every reappear, not just first load
- Add lastRefreshed tracking to HomeViewModel with a needsRefresh(after:)
  helper; HomeView and WorkView scene-activation handlers now skip
  loadDashboard() if the data is less than 60 seconds old
- Add 120-second TTL to repository build status refresh; statuses are
  no longer re-fetched on every tab appear, only when stale or when the
  user explicitly pulls to refresh (forceRefresh: true)

Implements: https://todo.sr.ht/~ccleberg/hutch/56
</content>
</entry>
<entry>
<title>feat: add search and recent queries</title>
<updated>2026-04-13T03:52:33+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-13T03:52:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=72f860e0e171f6aac4e7d896e7a571147dbcb5c5'/>
<id>urn:sha1:72f860e0e171f6aac4e7d896e7a571147dbcb5c5</id>
<content type='text'>
Implements: https://todo.sr.ht/~ccleberg/hutch/47
Implements: https://todo.sr.ht/~ccleberg/hutch/48
</content>
</entry>
<entry>
<title>feat: add repo settings management</title>
<updated>2026-04-13T03:30:22+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-13T03:30:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=54d037548261c1546555a89a6a803b542a769880'/>
<id>urn:sha1:54d037548261c1546555a89a6a803b542a769880</id>
<content type='text'>
Implements: https://todo.sr.ht/~ccleberg/hutch/42
Implements: https://todo.sr.ht/~ccleberg/hutch/43
Implements: https://todo.sr.ht/~ccleberg/hutch/44
</content>
</entry>
<entry>
<title>v2.1: bundled polish and fixes</title>
<updated>2026-03-19T21:59:16+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-19T21:59:16+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=b82bbeeea48ad27832a355c2a41408559c411104'/>
<id>urn:sha1:b82bbeeea48ad27832a355c2a41408559c411104</id>
<content type='text'>
</content>
</entry>
<entry>
<title>add Home dashboard and repository build status indicators</title>
<updated>2026-03-19T03:56:34+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-19T03:56:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=ffc0ef0988b5e7d01951c23af85a1cf026b3da9f'/>
<id>urn:sha1:ffc0ef0988b5e7d01951c23af85a1cf026b3da9f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>cache repository search results and gate remote refreshes</title>
<updated>2026-03-19T00:32:07+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-19T00:32:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=796c39d8ff08829bd695bc4e7497a147640eb79a'/>
<id>urn:sha1:796c39d8ff08829bd695bc4e7497a147640eb79a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>v1.0</title>
<updated>2026-03-18T04:19:43+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-18T04:19:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=32ad6cab8d58d99ebd8a28e8fa6e6f4e587cb1e5'/>
<id>urn:sha1:32ad6cab8d58d99ebd8a28e8fa6e6f4e587cb1e5</id>
<content type='text'>
</content>
</entry>
</feed>
