<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hutch.git/Hutch/Views/Tickets/TrackerListView.swift, branch main</title>
<subtitle>ios client for sourcehut. swiftui.
</subtitle>
<id>http://git.krz.sh/krz/hutch.git/atom?h=main</id>
<link rel='self' href='http://git.krz.sh/krz/hutch.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/'/>
<updated>2026-07-16T05:29:34+00:00</updated>
<entry>
<title>fix: blank mailing list from Projects, swipe flicker, hidden upload</title>
<updated>2026-07-16T05:29:34+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T05:29:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=6898bc3fc00decee7224895ea75908daf0f97f59'/>
<id>urn:sha1:6898bc3fc00decee7224895ea75908daf0f97f59</id>
<content type='text'>
Three problems from manual testing.

Opening a mailing list from More → Projects showed a blank screen, while the
same tap on a project pinned to Home worked. handleTabNavigation reset the
target path and appended to it two Task.yields later. When the target tab is
already on screen — Projects lives under More — the reset starts an animated pop
of the view the user is standing on and the appends land mid-animation. From
Home the tab actually changes, so the More stack is quiescent and the appends
land cleanly. Each case now builds its path and assigns it once, so SwiftUI gets
a single diff with nothing to race.

Destructive swipe actions made the row vanish and spring back while the
confirmation was still up. role: .destructive makes SwiftUI perform the row
removal on activation, which allowsFullSwipe: false does not prevent — the
report was a tap, not a full swipe. These buttons only record pending state and
wait for an answer, so they are plain buttons tinted red instead. Six sites: the
two added here, plus trackers, pastes, and tracker ACLs and labels, which had
the same flicker already.

The artifacts upload control was invisible. It was declared as a toolbar item
from a view that is a segment inside RepositoryDetailView's tab switch rather
than its own navigation destination, so it never reached the navigation bar. It
is a row in the list now, and also an action on the empty state — the overlay
covers the list, and a repository with no artifacts is precisely the one that
needs uploading.
</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>feat(theme): AMOLED true-black rows via themedRow()</title>
<updated>2026-04-14T00:06:54+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-14T00:06:54+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=a6ad2b9815d72575206bdca860eef9db850cdf1c'/>
<id>urn:sha1:a6ad2b9815d72575206bdca860eef9db850cdf1c</id>
<content type='text'>
Apply listRowBackground(Color.black) per row in AMOLED mode using ThemedRowStyle
and themedRow() across Lists and Forms. Use themedList() for scroll/grouped
backgrounds. Treat segmented and clear list rows with isAMOLED-aware
listRowBackground where Color.clear was required. Removes reliance on UIKit
appearance for list cells on iOS 16+.

Implements: https://todo.sr.ht/~ccleberg/hutch/24
</content>
</entry>
<entry>
<title>feat: add power user actions</title>
<updated>2026-04-13T14:57:23+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-13T14:57:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=0e461a382257979037e8927e5f6b468635b0a7fe'/>
<id>urn:sha1:0e461a382257979037e8927e5f6b468635b0a7fe</id>
<content type='text'>
Implements: https://todo.sr.ht/~ccleberg/hutch/52
Implements: https://todo.sr.ht/~ccleberg/hutch/53
Implements: https://todo.sr.ht/~ccleberg/hutch/54
</content>
</entry>
<entry>
<title>chore: add explanatory comments to all intentional empty closures</title>
<updated>2026-04-03T20:47:34+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-03T20:47:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=236a22553d5cb9e07b3115c03864c882e0c41b77'/>
<id>urn:sha1:236a22553d5cb9e07b3115c03864c882e0c41b77</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add tracker management (delete/update, ACLs, labels)</title>
<updated>2026-04-02T03:03:14+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-02T03:03:14+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=902055d5eaa7f5512b76e22f57df3939f956181f'/>
<id>urn:sha1:902055d5eaa7f5512b76e22f57df3939f956181f</id>
<content type='text'>
- Add swipe actions (delete/edit) to tracker list
- Add tracker settings menu on detail screen
- Implement updateTracker and deleteTracker mutations
- Implement ACL management (updateUserACL, updateTrackerACL, deleteACL)
- Implement label management (createLabel, updateLabel, deleteLabel)
- Add dedicated UI flows for ACLs and labels
- Ensure state refresh after mutations
- Handle loading, errors, and destructive confirmations

Implements: https://todo.sr.ht/~ccleberg/Hutch/12
</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>show tracker creation errors inside the creation sheet</title>
<updated>2026-03-19T01:03:39+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-03-19T01:03:39+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=090c829a5f800266da7f4ff0e59fb389f0dbfdd8'/>
<id>urn:sha1:090c829a5f800266da7f4ff0e59fb389f0dbfdd8</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>
