From 24bc4aab7acb2df49d209cf5343fd63ad7033028 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Fri, 7 Aug 2026 16:38:14 -0500 Subject: 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'. --- ROADMAP.txt | 53 +++++++++++++++++++++++++++++++++++------------------ SCOPE.txt | 8 ++++---- 2 files changed, 39 insertions(+), 22 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 diff --git a/SCOPE.txt b/SCOPE.txt index 6698d6e..8300d7b 100644 --- a/SCOPE.txt +++ b/SCOPE.txt @@ -31,10 +31,10 @@ unaffected because it filters on `ev.ticket_id`, which is why ticket timelines work. Nothing a client can do fixes this; revisit only if sr.ht changes the resolver. -- Subscribe to a mailing list (`mailingListSubscribe` exists, but `MailingList` - has no `subscription` field, and hub.sr.ht's new discovery lists *projects*, - not mailing lists, so there is still no way to find a list you are not already - subscribed to) +- ~~Subscribe to a mailing list~~ — **now buildable**. `MailingList` gained a + `subscription` field (confirmed live during the Q1–Q2 2026 ingest), so per-list + subscribe state is readable and `mailingListSubscribe` / `mailingListUnsubscribe` + can drive a real toggle. Moved to ROADMAP.txt ("mailing list subscribe"). - Submitting patches (a `git send-email` flow, not a GraphQL mutation; Hutch reviews patchsets but cannot send them) -- cgit v1.2.3