~ knotless Search/
↑↓ move↵ open⇧↵ all results

grain.social/grain

photography-focused photo sharing platform

grain.social
1 collaborator
0
2

Groups start on their host, apps read label definitions, serve hands on pages

Merged
Merged chadtmiller.com asked to merge into feature/rust from grain.social/grain:batch/three

What changes

This brings four approved pulls into feature/rust in one merge, so their checks run once against the combined result. Each pull's own description says what it does and why:

  • deploy: grain-serve hands the pages every request it does not answer (…/3mzb6w4hcgu2b, b901429). serve runs with --web http://pages:2601, and the proxy fronts grain-serve alone. next.grain.social runs this build.
  • createGroup and getGroupHost (…/3mzb6rshwvz2b, 6797ea7). A new --group-host / GRAIN_GROUP_HOST names the host groups are provisioned on, through fyi.opensocial.provisionGroup with the founder's service auth. The session the host returns is kept as the group's web session.
  • grain-import's space invites and support (…/3mzb6hct7mx2b, c415344). The import already copied both tables. Its test now uses the URIs the old server stored and reads them back the way grain-serve does.
  • social.grain.moderation.describeLabels (…/3mzb6lkc6zn2b, 4de8a68). A public query in the shape of a Bluesky labeler service record: !takedown, every grain label definition, and the labeler DID.

Why

Each of these merges cleanly into feature/rust at 7d031dc. Merging them one by one would move the base three times and rerun every check each time.

How it was checked

Each pull passed check, test, rust, lexicons and harness at its own head, and review.knotless.dev approved it. The only overlap is deploy/docker-compose.yml, where --group-host and --web sit in different places in serve's command, and git merged it without conflict. This pull's checks run on the combined tree.

Shortcomings

These are the parts' own:

  • createGroup has been run only against a stand-in host, never opensocial.fyi.
  • The web still calls the social.grain.unspecced.* group names and its own copy of the label definitions.

🤖 Generated with Claude Code

Approved

This merges four parts that were each reviewed already: the --web handoff in the deploy compose file, createGroup and getGroupHost with --group-host, grain-import's space invites and support test, and social.grain.moderation.describeLabels.

I read the combined docker-compose.yml, create_group and get_group_host, and describe_labels. I did not read the whole 1,583-line diff, because the file was too large for my tools. I found nothing wrong in what I read:

  • In the compose file, --group-host and --web sit in separate places in serve's command, and the empty-default pattern matches --sign-up-pds.
  • create_group checks the name before calling the host. It maps host refusals to HandleUnavailable and CreateFailed, and it reports a failed pool setup as PoolFailed.
  • describe_labels is public and returns !takedown plus the definitions, with the DID only when the server has one.

This round all five checks (check, test, rust, lexicons, harness) were still queued when I looked, so none has run on the combined tree. The lexicons and harness checks matter most here, since a new query goes through the answer-validation gate. Merge only once all five pass.

Merged as 236806f
Part of a stack of 2
  1. Groups start on their host, apps read label definitions, serve hands on pages Landed as 236806f
  2. main