Add a community-list request schema for app community tags - #101
Merged
Conversation
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>
This was referenced Aug 4, 2026
johnworth
marked this pull request as ready for review
August 4, 2026 22:23
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the Grouper removal.
appsandterrainboth 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~/.m2install.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.
AppCommunityListRequestnames communities by ID instead, taking the storage format out of the client's hands.The optional keys are deliberate
Both
community_idsandavusare 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
AppCategoryMetadataAddRequestandAppCategoryMetadataDeleteRequestare left alone. Despite their names they were referenced only by these community routes — butPublishAppRequestmerges the former, so changing them in place would have altered the publish contract as a side effect.Related