krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v3.11.0: SCOPE.txt · raw
1# Out of Scope Features
2
3- Universal links (requires Sourcehut to host an apple-app-site-association
4 file)
5- Push notifications for builds and tickets (requires a backend relay server)
6 - ref: https://git.sr.ht/~ccleberg/hutch-notify
7- ~~Explore / search (hub.sr.ht) (no public discovery API)~~ — **stale**.
8 hub.sr.ht added a public `projects` query ("List all public projects"), and
9 Hutch ships it as project discovery (#12, `DiscoverProjectsView`). Left struck
10 through as more evidence for the ingestion task in ROADMAP.txt: this entry ruled
11 out a feature the API had come to support.
12- ~~Pronouns on profile (not in GraphQL schema)~~ — **stale**. sr.ht added
13 pronouns (see the Q1 2026 "What's cooking"), and Hutch already queries them in
14 `AppState` and shows them in `UserProfileView`. Left here struck through as
15 evidence for the ingestion task in ROADMAP.txt: this entry spent months telling
16 people not to build something that was already built.
17- Revoke personal access tokens (`@internal` in schema, inaccessible)
18- Archive a message to a list (`archiveMessage` is `@internal`, inaccessible)
19- Ticket activity feed (todo.sr.ht's root `events` query is broken upstream and
20 returns an empty list for every user). `event.participant_id` references
21 `participant(id)`, but the resolver joins it against `participant.user_id`:
22
23 ```sql
24 FROM event ev
25 JOIN participant p ON p.user_id = ev.participant_id -- id space vs user id space
26 WHERE p.user_id = <viewer>
27 ```
28
29 The rows exist — the writer inserts `participant.ID` for the submitter and for
30 every subscriber — but that join cannot find them. `Ticket.events` is
31 unaffected because it filters on `ev.ticket_id`, which is why ticket timelines
32 work. Nothing a client can do fixes this; revisit only if sr.ht changes the
33 resolver.
34- ~~Subscribe to a mailing list~~ — **shipped** (v3.11.0). A subscribe/unsubscribe
35 toggle on the mailing-list detail view. State comes from the `subscriptions`
36 query (`MailingList.subscription` is a trap — it never reports your state; see
37 ROADMAP.txt API traps), and a list is reachable to subscribe to via Lookup or a
38 project's lists — no discovery API needed.
39- Submitting patches (a `git send-email` flow, not a GraphQL mutation; Hutch
40 reviews patchsets but cannot send them)
41
42## Declined rather than blocked
43
44These are reachable in the API. They are left out on judgement, not capability.
45
46- **Webhook management** (24 fields across five services). A webhook needs an
47 HTTPS endpoint you control to receive POSTs. Without the relay above, this
48 only serves someone already running their own endpoint, and that person is not
49 managing it from a phone. Reconsider if `hutch-notify` ever ships.
50- **`shareSecret`.** Shares a build secret — an SSH key or PAT — with another
51 user. A mistap grants someone else a credential, and nothing in the app can
52 take it back. That belongs on the web behind a full-size confirmation. The
53 read-only `secrets` list would be fine on its own.
54- **Build groups** (`createGroup`, `startGroup`). Multi-job pipelines are
55 authored in `.build.yml`, not composed on a phone.