Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
File renamed without changes.
File renamed without changes.
686 changes: 12 additions & 674 deletions LICENSE

Large diffs are not rendered by default.

99 changes: 0 additions & 99 deletions README.md

This file was deleted.

64 changes: 64 additions & 0 deletions README.nfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
┌──────────────────────────────────────────────────────────────┐
│ H U T C H [ KRZ ] krz.sh │
└──────────────────────────────────────────────────────────────┘

WHAT
ios client for sourcehut. native swiftui, iphone and ipad. uses
sourcehut's graphql apis. stores your personal access token in the
ios keychain.

DOES
- home dashboard: assigned tickets, recent builds, projects
- git and mercurial repo browsing
- repo details: readme, refs, commits, diffs, files, artifacts,
settings
- artifact upload and deletion on release tags
- trackers and tickets: browse, create, edit, delete, subscribe
- builds: browse, detail, submit
- inbox and mailing list reading
- patchset review: cover letters, per-patch diffs, checks, version
chains, status changes
- mailing list create, settings, delete
- pastes: browse, create, detail
- profile and account settings: ssh keys, pgp keys, token
management, audit log
- email preferences for todo.sr.ht and lists.sr.ht
- deep links for repos, tickets, build jobs

some sr.ht services are still browser-only and open in safari.

REQUIRES
xcode with a current ios sdk, a simulator or device, a sourcehut
account, and a personal access token.

BUILD
git clone https://git.sr.ht/~ccleberg/Hutch

open in xcode, build and run. on first launch paste a token. create
one at https://meta.sr.ht/oauth2/personal-token.

the token is validated against meta.sr.ht before saving and stored
in the keychain. Reset App Data clears the token, caches, cookies,
and local web data.

DEVELOP
xcode app with tests under HutchTests. run the test plan in
Hutch/HutchTests.xctestplan.

MIRRORS
github: https://github.com/krazywarez/hutch
sourcehut: https://sr.ht/~ccleberg/Hutch
kept in sync. issues or patches on either.

SECURITY
see SECURITY.txt.

LICENSE
0bsd. see LICENSE.

CONTACT
root@krz.sh

┌──────────────────────────────────────────────────────────────┐
│ krz.sh │
└──────────────────────────────────────────────────────────────┘
18 changes: 9 additions & 9 deletions ROADMAP.md → ROADMAP.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Planned work for Hutch, ordered by dependency. Feature gaps below were
identified by diffing the GraphQL schema dumps in `Docs/API` against actual
call sites in the Swift source.

See [SCOPE.md](SCOPE.md) for features that are intentionally out of scope.
See [SCOPE.txt](SCOPE.txt) for features that are intentionally out of scope.

## SourceHut API traps

Expand Down Expand Up @@ -84,7 +84,7 @@ were never called. Each removes a "why can't I do this here?" moment.
knowable from the `subscriptions` query — which by definition lists what the
user is already subscribed to. Subscribing needs a list the user is *not*
subscribed to, and sr.ht exposes no discovery API to find one (see
[SCOPE.md](SCOPE.md) on hub.sr.ht). Revisit if hub.sr.ht ever gains an API, or
[SCOPE.txt](SCOPE.txt) on hub.sr.ht). Revisit if hub.sr.ht ever gains an API, or
alongside Phase 2, which surfaces lists through patchsets.

### Refactors folded in
Expand Down Expand Up @@ -150,7 +150,7 @@ so "breaking change" does not apply. These buckets track *user-visible scale*.
| — | Swift 6 language mode; cache reads | Internal; ride along, no tag |

Ordering is by dependency, not size. v3.9.0 leads because it is the only item
that corrects the others' inputs: the ingest's real output is a `SCOPE.md` that
that corrects the others' inputs: the ingest's real output is a `SCOPE.txt` that
is true, and v3.10.0 rests entirely on one unverified sentence in a blog post.
Do not commit v3.10.0's number until the SDL has been read — the bucket may turn
out to be empty, which is the point of sequencing it second.
Expand All @@ -170,9 +170,9 @@ Three of the six planned. The other three did not survive contact:
- The `events` feed was built, then removed: todo.sr.ht's root `events` resolver
joins `event.participant_id` against `participant.user_id`, which are
different id spaces, so it returns an empty list for everyone. See
[SCOPE.md](SCOPE.md).
[SCOPE.txt](SCOPE.txt).
- Webhook management, `shareSecret`, and build groups are reachable but declined
on judgement — see [SCOPE.md](SCOPE.md) for the reasoning, so they do not get
on judgement — see [SCOPE.txt](SCOPE.txt) for the reasoning, so they do not get
re-proposed.

### Localization — v4.0.0, and only with translations
Expand Down Expand Up @@ -279,9 +279,9 @@ not just a green suite.
sr.ht posts a quarterly update to `~sircmpwn/sr.ht-announce`, mirrored at
<https://sourcehut.org/blog/>. Nothing in Hutch tracks it, so the API grows and
this repo's assumptions quietly rot. Read each quarter's post, diff it against
`Docs/API`, `SCOPE.md`, and the call sites, and file what changed.
`Docs/API`, `SCOPE.txt`, and the call sites, and file what changed.

That this is worth doing is already proven: **`SCOPE.md` claims pronouns are
That this is worth doing is already proven: **`SCOPE.txt` claims pronouns are
"not in GraphQL schema", while `AppState` queries `pronouns` and
`UserProfileView` displays them.** sr.ht shipped it, the doc never caught up,
and it has been discouraging work that is in fact already done.
Expand All @@ -290,7 +290,7 @@ and it has been discouraging work that is in fact already done.
flags two openings:

- **hub.sr.ht gained a writable GraphQL API** for managing projects and project
resources. Hutch's projects are read-only, and `SCOPE.md` still rules out
resources. Hutch's projects are read-only, and `SCOPE.txt` still rules out
discovery on the grounds that hub has no public API. Both claims need
rechecking — this may also unblock `mailingListSubscribe`, which Phase 1 left
out for exactly that reason.
Expand All @@ -309,7 +309,7 @@ up gets filed, not built, and hub.sr.ht gets its own bucket below.

Everything here rests on a single sentence in the Q2 2026 post: that hub.sr.ht
gained a writable GraphQL API. If true, three things unblock at once —
project writes (Hutch's projects are read-only), discovery (which `SCOPE.md`
project writes (Hutch's projects are read-only), discovery (which `SCOPE.txt`
rules out on the grounds hub has no public API), and `mailingListSubscribe`,
which Phase 1 declined for exactly that reason.

Expand Down
2 changes: 1 addition & 1 deletion SCOPE.md → SCOPE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
- ~~Pronouns on profile (not in GraphQL schema)~~ — **stale**. sr.ht added
pronouns (see the Q1 2026 "What's cooking"), and Hutch already queries them in
`AppState` and shows them in `UserProfileView`. Left here struck through as
evidence for the ingestion task in ROADMAP.md: this entry spent months telling
evidence for the ingestion task in ROADMAP.txt: this entry spent months telling
people not to build something that was already built.
- Revoke personal access tokens (`@internal` in schema, inaccessible)
- Archive a message to a list (`archiveMessage` is `@internal`, inaccessible)
Expand Down
File renamed without changes.
Loading