Groups start on their host, apps read label definitions, serve hands on pages
MergedThis 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-hostand--websit in separate places in serve's command, and the empty-default pattern matches--sign-up-pds. create_groupchecks the name before calling the host. It maps host refusals toHandleUnavailableandCreateFailed, and it reports a failed pool setup asPoolFailed.describe_labelsis public and returns!takedownplus 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.
- Groups start on their host, apps read label definitions, serve hands on pages
- main

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.createGroupandgetGroupHost(…/3mzb6rshwvz2b, 6797ea7). A new--group-host/GRAIN_GROUP_HOSTnames the host groups are provisioned on, throughfyi.opensocial.provisionGroupwith the founder's service auth. The session the host returns is kept as the group's web session.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-hostand--websit 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:
createGrouphas been run only against a stand-in host, never opensocial.fyi.social.grain.unspecced.*group names and its own copy of the label definitions.🤖 Generated with Claude Code