<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hutch.git/Hutch/Views/More, branch v3.9.0</title>
<subtitle>ios client for sourcehut. swiftui.
</subtitle>
<id>http://git.krz.sh/krz/hutch.git/atom?h=v3.9.0</id>
<link rel='self' href='http://git.krz.sh/krz/hutch.git/atom?h=v3.9.0'/>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/'/>
<updated>2026-08-07T08:27:37+00:00</updated>
<entry>
<title>Sync bundled man page catalog from man.sr.ht (#7)</title>
<updated>2026-08-07T08:27:37+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-07T08:27:37+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=89c90d11d80fde63997ca029e14806df0319a541'/>
<id>urn:sha1:89c90d11d80fde63997ca029e14806df0319a541</id>
<content type='text'>
The More tab's official man-page list was a hardcoded array, updated by
hand. Move it to a checked-in Hutch/Resources/man-pages.json (bundled via
the synchronized group) loaded by a new ManPageCatalog, with the previous
list kept as a built-in fallback.

Add scripts/sync_man_pages.py, which re-derives the catalog from the
man.sr.ht landing page, and a weekly scheduled workflow that runs it and
opens a pull request when the list diverges upstream. The script refuses to
write a suspiciously short list so a markup change can't gut the catalog.

This first sync also picks up chat.sr.ht, which upstream added since the
list was last hand-edited. Tests cover catalog loading, the fallback, and
JSON decoding.
</content>
</entry>
<entry>
<title>Expand App Intents: dialogs, search type, mutating intents (#17)</title>
<updated>2026-08-07T08:06:34+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-07T08:06:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=9c11d69002d71556fea1e2a938e02d4f4d503ea5'/>
<id>urn:sha1:9c11d69002d71556fea1e2a938e02d4f4d503ea5</id>
<content type='text'>
Addresses the three open items on the App Intents ticket:

- Check Status / Check Builds now return a spoken/visible dialog alongside
  their value, so they surface a result in Siri instead of appearing to do
  nothing. Logic consolidated to always produce a message.
- Search Hutch gains a Search Type parameter (user, git/hg repo, mailing
  list, tracker, build job) threaded through the .search route into Lookup,
  which pre-selects the type. LookupType now conforms to AppEnum.
- Adds mutating intents (not just navigation): Clear Recent Activity and
  Unpin Resource, backed by RecentActivityStore.clear and a new
  HomePinStore.removePin. Both act on the active account's storage.

Tests cover search-type routing, the blank-query fallback, and pin removal.
</content>
</entry>
<entry>
<title>Update SonarCloud project id, contact emails, and bump to 3.8.5 (93)</title>
<updated>2026-08-02T14:28:56+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-02T14:27:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=1156ab1b314b9b69e16fdc5fc9ff6eb3861b4588'/>
<id>urn:sha1:1156ab1b314b9b69e16fdc5fc9ff6eb3861b4588</id>
<content type='text'>
- Point README badges and ROADMAP query at the krazywarez_hutch SonarCloud project
- Change user-facing contact emails to root@krz.sh (README, SECURITY, About screen)
- Bump MARKETING_VERSION to 3.8.5 and CURRENT_PROJECT_VERSION to 93
</content>
</entry>
<entry>
<title>update org name</title>
<updated>2026-08-02T14:18:08+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-02T06:51:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=8bbed38fa7e868e9a35587ca43cab68450d003e8'/>
<id>urn:sha1:8bbed38fa7e868e9a35587ca43cab68450d003e8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: push mailing lists locally, fix upload menu, drop the events feed</title>
<updated>2026-07-16T05:42:38+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T05:42:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=77cd5b5e56ec054b451a6165162fef655873a5d6'/>
<id>urn:sha1:77cd5b5e56ec054b451a6165162fef655873a5d6</id>
<content type='text'>
Opening a mailing list from More → Projects still blanked. The cause was not in
handleTabNavigation: the row called openMailingList and then dismiss(), so a
path rebuild and a pop of this very view raced each other. Projects already
lives in the More tab, so there is nothing to navigate to — push
MailingListDetailView directly, which also lands back on the project rather than
on Mailing Lists. Sources and trackers keep routing, because they really do land
in other tabs.

The upload controls did nothing. Two .confirmationDialog modifiers on one view
leave one silently dead, and this view already had one for delete, so the tag
picker never presented. It is a Menu now, which also puts the tags one tap away
instead of two.

The ticket activity feed is removed. todo.sr.ht's root events resolver joins
event.participant_id, which references participant(id), against
participant.user_id — different id spaces — so it returns an empty list for
every user. The rows exist; that join cannot find them. Ticket.events is
unaffected because it filters on ticket_id, which is why ticket timelines work.
No client can fix this, and a screen that is permanently empty while blaming the
token's scopes is worse than no screen. Recorded in SCOPE.md with the query.
</content>
</entry>
<entry>
<title>feat: add a ticket activity feed</title>
<updated>2026-07-16T05:00:52+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T05:00:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=8ee93a6a6a0e771b687d1f48a59fb896ae0456e5'/>
<id>urn:sha1:8ee93a6a6a0e771b687d1f48a59fb896ae0456e5</id>
<content type='text'>
todo.sr.ht's root events query returns what the authenticated user is
subscribed to or implicated in, newest first, across every tracker including
ones they do not own. It was never called, so the only way to notice a reply was
to open the ticket.

Reuses EventChange, which already decodes todo's polymorphic EventDetail for
ticket timelines, so the same inline fragments describe both surfaces. Rows push
straight to the ticket.

events is nullable and comes back null when the token lacks the EVENTS scope, so
that case reports a scope problem rather than an empty feed, which would read as
"nothing has happened".

Paginates rather than fetching everything: an active account's history is
unbounded and the top of it is the whole point.

archiveMessage, the other half of this roadmap item, is not here. It is marked
@internal in the schema and inaccessible, like revokePersonalAccessToken already
recorded in SCOPE.md.
</content>
</entry>
<entry>
<title>feat: show the meta.sr.ht audit log</title>
<updated>2026-07-16T04:52:45+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-16T04:52:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=f3627deef0848b95a083d9e16468b0f8484d784e'/>
<id>urn:sha1:f3627deef0848b95a083d9e16468b0f8484d784e</id>
<content type='text'>
auditLog existed in the API but was never called, so the record of what has
happened to your account — logins, key changes, the addresses they came from —
was web-only.

Sits under the tokens in Profile and loads on demand for the same reason they
do: an audit log is something you go looking for, not something worth a request
on every profile view. One page, newest first; the archive stays on meta.sr.ht.

Its errors are kept separate from the shared `error` so a failed audit fetch
cannot bury a profile save failure, and vice versa.
</content>
</entry>
<entry>
<title>feat: add App Intents for Hutch navigation</title>
<updated>2026-05-14T18:27:41+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-05-14T18:18:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=51b2eb0e6296734960f37cebd40fee34a1f261f9'/>
<id>urn:sha1:51b2eb0e6296734960f37cebd40fee34a1f261f9</id>
<content type='text'>
- add read-only App Intents for core Hutch workflows
- route intents through the existing Hutch navigation/deep-link model
- expose Work Queue, Recent Activity, System Status, pinned resources, projects, failed builds, assigned tickets, saved searches, and search where supported
- keep App Intents non-mutating for the initial implementation
- preserve existing widget, Safari extension, and hutch:// routing behavior

References: https://todo.sr.ht/~ccleberg/hutch/71
</content>
</entry>
<entry>
<title>fix: profile loading error and user-timeline prefs update</title>
<updated>2026-04-23T22:39:13+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-23T22:39:13+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=66601a8091a73f3e31f4fb534c38b3eca4756e93'/>
<id>urn:sha1:66601a8091a73f3e31f4fb534c38b3eca4756e93</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: finish half-completed storekit implementation</title>
<updated>2026-04-19T20:02:43+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-19T20:02:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/hutch.git/commit/?id=2199384f887cf5634f3fdcf651eeb9c2c7ed457a'/>
<id>urn:sha1:2199384f887cf5634f3fdcf651eeb9c2c7ed457a</id>
<content type='text'>
</content>
</entry>
</feed>
