summaryrefslogtreecommitdiff
path: root/ROADMAP.txt
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-08-07 16:38:14 -0500
committerChristian Cleberg <[email protected]>2026-08-07 16:38:14 -0500
commit24bc4aab7acb2df49d209cf5343fd63ad7033028 (patch)
tree7ebdf1350f93ee99d60efcec719eb9ec35393b3f /ROADMAP.txt
parent9671eac8eeb9d06e25563f51bf81889b5537feeb (diff)
downloadhutch-24bc4aab7acb2df49d209cf5343fd63ad7033028.tar.gz
hutch-24bc4aab7acb2df49d209cf5343fd63ad7033028.tar.bz2
hutch-24bc4aab7acb2df49d209cf5343fd63ad7033028.zip
Ingest Q1-Q2 2026: file findings, surface mailingListSubscribe unblock
'What's cooking' ingest (Q1-Q2 2026 posts + live schema introspection with a test token). Everything the posts flagged is already in Hutch: RIDs, pronouns, avatars, hub project writes + discovery, deploy keys. Anonymous API and standardized/connections-spec GraphQL are future upstream work. New opening found live: MailingList gained a 'subscription' field, removing the exact blocker Phase 1 named for mailingListSubscribe. Recorded it as a buildable v3.11.0 bucket; moved the SCOPE.txt entry out of 'out of scope'.
Diffstat (limited to 'ROADMAP.txt')
-rw-r--r--ROADMAP.txt53
1 files changed, 35 insertions, 18 deletions
diff --git a/ROADMAP.txt b/ROADMAP.txt
index 25c32e5..cf171f8 100644
--- a/ROADMAP.txt
+++ b/ROADMAP.txt
@@ -79,13 +79,14 @@ were never called. Each removes a "why can't I do this here?" moment.
- ~~`updatePreferences`~~ (todo.sr.ht and lists.sr.ht) — `notifySelf` and
`copySelf`, surfaced as an Email section in Settings.
-`mailingListSubscribe` is deliberately not wired up. `MailingList` has no
-`subscription` field, unlike `Ticket` and `Tracker`, so per-list state is only
+`mailingListSubscribe` was left unwired here because `MailingList` had no
+`subscription` field, unlike `Ticket` and `Tracker`, so per-list state was only
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.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.
+user is already subscribed to. **That has since changed:** live introspection
+during the ingest shows `MailingList.subscription` now exists (type
+`MailingListSubscription`, present when subscribed), so per-list state is
+readable and the `mailingListSubscribe` / `mailingListUnsubscribe` toggle can
+reflect it. Now buildable — see "mailing list subscribe" below.
### Refactors folded in
@@ -144,8 +145,9 @@ so "breaking change" does not apply. These buckets track *user-visible scale*.
| v3.8.1 | SonarCloud triage; housekeeping | No behaviour change at all |
| v3.8.2 | Home system status moved to a title-bar status badge | Small UI relocation, no new surface |
| v3.9.0 | ~~hub.sr.ht project writes + discovery (#12–#15); multi-language highlighting (#16); App Intents expansion (#17); man-page catalog sync (#7); checklist / recent-activity / pull-to-refresh fixes (#18, #11, #9)~~ | Shipped — the cut this session |
-| v3.10.0 | ~~git.sr.ht deploy keys~~ (shipped); "What's cooking" ingest; doc truth-up; revisit `mailingListSubscribe` | Ships one feature, corrects the map |
-| v3.11.0 | Accessibility | Independent, device-verified |
+| v3.10.0 | ~~git.sr.ht deploy keys~~ (shipped); ~~"What's cooking" ingest + doc truth-up~~ (done) | Ships one feature, corrects the map |
+| v3.11.0 | Mailing list subscribe/unsubscribe toggle | Ingest-surfaced; `MailingList.subscription` now exists |
+| v3.12.0 | Accessibility | Independent, device-verified |
| v4.0.0 | Localization *with* translations | The only true re-presentation |
| — | Swift 6 language mode; cache reads | Internal; ride along, no tag |
@@ -295,8 +297,7 @@ flags two openings:
resources. ~~Rechecked and shipped~~: project create/edit, resource
link/unlink, and public discovery landed (#12–#15) — see "hub.sr.ht writes"
below. `SCOPE.txt`'s "hub has no public API / no discovery" claim has since
- been corrected. `mailingListSubscribe` was *not* unblocked — that needs a
- per-list subscription field lists.sr.ht still lacks.
+ been corrected.
- ~~git.sr.ht deploy keys are complete~~ — **shipped** (v3.10.0).
`createDeployKey` / `deleteDeployKey` (and `Repository.deployKeys`) are wired
into the repository actions menu, owner-only, alongside ACLs.
@@ -305,9 +306,26 @@ Start from Q1 2026 forward — that is roughly when the current `Docs/API` dumps
were captured.
Deploy keys — the one self-contained feature the ingest had already surfaced and
-that the SDL confirmed — shipped in v3.10.0, so this bucket is now the ingest
-itself: research that files what changed rather than building. Everything else it
-turns up gets filed, not built.
+that the SDL confirmed — shipped in v3.10.0.
+
+**Ingest run (2026-08, Q1–Q2 posts + live schema introspection with a test
+token):** everything else the posts flagged is already in Hutch — RIDs (used
+throughout), pronouns and avatars (queried and displayed, avatar upload/delete
+in Settings), hub project writes and discovery (shipped), deploy keys (shipped).
+Planned-but-not-yet-shipped upstream, so nothing to build: anonymous API access
+and "standardized / connections-spec" GraphQL (Q2 named both as future work).
+The one *new* opening the introspection turned up is below.
+
+### Mailing list subscribe — buildable
+
+`MailingList` gained a `subscription` field (type `MailingListSubscription`,
+present when the viewer is subscribed) — confirmed live. That removes the exact
+blocker Phase 1 named: per-list state is now readable, so a subscribe /
+unsubscribe toggle can reflect real server state using the existing
+`mailingListSubscribe` / `mailingListUnsubscribe` mutations (unsubscribe already
+shipped in Phase 1). Surface it wherever a list is shown — Lookup results,
+`ProjectMailingListView`, the inbox list header. Small, self-contained write
+feature; its own minor.
### hub.sr.ht writes — projects and discovery done
@@ -326,11 +344,10 @@ confirmed without a token (introspection there is auth-gated), so the mutations
degrade to a visible error rather than a crash if a field is not yet deployed.
Verify on a signed-in device.
-`mailingListSubscribe` stays out. `MailingList` still has no `subscription`
-field, and public *project* discovery does not help find a mailing list the user
-is *not* subscribed to — the reason Phase 1 declined it. Revisit only if
-lists.sr.ht gains per-list subscription state. `SCOPE.txt` still needs its
-"hub has no public API / no discovery" claim corrected.
+`mailingListSubscribe` is now buildable: the ingest found `MailingList` gained a
+`subscription` field, so per-list state is readable and the subscribe/unsubscribe
+toggle can reflect it — see the "mailing list subscribe" bucket below. `SCOPE.txt`
+has since had its "hub has no public API / no discovery" claim corrected.
### App Intent gaps — unscheduled