feat: collect permission manifests#4
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e155a063f9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| PermissionCommandService( | ||
| snapshots = snapshots, | ||
| permissions = permissions, | ||
| refreshSnapshot = listener::loadSnapshot, |
There was a problem hiding this comment.
Don't reuse login fallback for manual refresh
When the backend fetch fails for an online player with a valid disk cache, PermissionLoginListener.loadSnapshot returns allowed(cached) so logins can continue. Wiring the refresh command to that same method means /perm refresh <player> and refresh all report success/policyVersion while only reloading cached data, so operators can think a permission change was refreshed even though the backend was unavailable.
Useful? React with 👍 / 👎.
Pull Request
Description
Adds read and refresh commands under
/permissionsand/perm, with per-command authorization and completion for commands, online players, and scopes.Reworks the catalog path into a central Velocity collector. At startup, the permissions plugin discovers every active Velocity plugin manifest at
META-INF/grounds/permissions.json, validates it, and registers each valid manifest through the existing catalog gRPC service with bounded retries. Missing or malformed manifests do not block startup.The local command nodes now come from the same standardized manifest. The collector has parser, discovery, retry, and invalid-manifest regression coverage.
Dependency Order
Type of Change
Related Issues
Testing
./gradlew test./gradlew spotlessApply./gradlew buildChecklist