Skip to content

Add a community-list request schema for app community tags - #101

Merged
johnworth merged 2 commits into
mainfrom
community-ids
Aug 5, 2026
Merged

Add a community-list request schema for app community tags#101
johnworth merged 2 commits into
mainfrom
community-ids

Conversation

@johnworth

Copy link
Copy Markdown
Contributor

Part of the Grouper removal. apps and terrain both need this before they can accept community IDs, so it lands first — and it needs a release cut, since their container builds resolve dependencies from Clojars and cannot see a local ~/.m2 install.

Why

The app community-tag routes took an AVU list, which made the browser responsible for composing the stored value — and the value it composed was the community's name (in Grouper, the full colon-delimited path). A name is not a stable identifier: renaming a community drops every app tagged with the old name out of its own listing, silently. Production holds 17 such orphaned tag values across 48 apps.

AppCommunityListRequest names communities by ID instead, taking the storage format out of the client's hands.

The optional keys are deliberate

Both community_ids and avus are optional so that one route can serve the current shape and the AVU list a stale browser bundle still sends. Sonora is a browser app, so its deploy is not atomic with the services — users hold old bundles for as long as their tab lives, and the old shape has to keep working through that window.

Requiring exactly one of the two is left to the service rather than expressed here, because a schema-level union renders as unhelpful noise in the generated documentation.

What is deliberately untouched

AppCategoryMetadataAddRequest and AppCategoryMetadataDeleteRequest are left alone. Despite their names they were referenced only by these community routes — but PublishAppRequest merges the former, so changing them in place would have altered the publish contract as a side effect.

Related

The community tag routes took an AVU list, which made the browser responsible
for composing the stored value -- and the value it composed was the community's
name, so renaming a community orphaned every app tagged with it.

AppCommunityListRequest names communities by ID instead. Both keys are optional
so one route can serve it and the AVU list a stale browser still sends;
requiring exactly one of them is left to the service, since expressing it here
would render as an unhelpful union in the generated documentation.

AppCategoryMetadataAddRequest and AppCategoryMetadataDeleteRequest are left
alone: despite their names they were referenced only by these routes, but
PublishAppRequest merges the former.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@ianmcorvidae ianmcorvidae left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks reasonable to me!

@psarando psarando left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@johnworth
johnworth merged commit 850244e into main Aug 5, 2026
2 checks passed
@johnworth
johnworth deleted the community-ids branch August 5, 2026 21:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants