Skip to content

feat: expose read-only wardrobe outfit textures - #259

Merged
ryanbarlow97 merged 1 commit into
mainfrom
feat/wardrobe-head-command
Oct 17, 2026
Merged

ryanbarlow97 merged 1 commit into
mainfrom
feat/wardrobe-head-command

Conversation

@ryanbarlow97

@ryanbarlow97 ryanbarlow97 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

RPCharacters' /plushie <character> [1|2|3] needs a saved wardrobe outfit without changing the character's wardrobe. Add authenticated GET /characters/plugin/wardrobe/{player_uuid}/{character_id}/slots/{slot} for base, extra_1 and extra_2.

The lookup checks owner and slot access, returns only the selected signed texture, and does not reconcile limits, equip an outfit or acknowledge pending applies. Empty or unsigned outfits return no texture; locked and masked slots are refused. Existing wardrobe and worn-skin routes keep their behavior.

Validation: 31 tests passed across the route, wardrobe face, entitlement and masked-slot suites. The tests also compare roster rows, slot rows and skin files before/after reads. No schema or frontend changes. Deploy the site before activating the companion RPCharacters build.

Related: RPCharacters #124, Docs #288.

@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9ae56544-6b33-4269-bac1-1e9c2e591148
📥 Commits

Reviewing files that changed from the base of the PR and between 99dc9f6 and cacf292.

📒 Files selected for processing: 3
  • backend/src/api/characters_routes.py
  • backend/src/api/test_plugin_worn_skin_route.py
  • backend/src/characters/wardrobe.py

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📝 Summary

Summary by CodeRabbit

  • New Features
    • Plugins can retrieve the texture for a specific unlocked outfit slot, provided the player and character match.
    • The response only includes that slot’s own texture when valid; it does not substitute another skin when the slot has no usable texture.
    • Requests for locked or invalid slots receive an appropriate error.

Adds a plugin-key-authenticated endpoint to retrieve the signed texture for a specified wardrobe slot. The lookup checks player and character ownership, slot validity, and unlock status.

Changes: Wardrobe slot texture retrieval

Layer / File(s) Summary
Wardrobe slot lookup
backend/src/characters/wardrobe.py
Adds wardrobe_slot_texture. It returns signed texture fields only when the slot has a PNG and both signed values. Invalid slots return 400, and locked slots return 403.
Plugin route and validation
backend/src/api/characters_routes.py, backend/src/api/test_plugin_worn_skin_route.py
Adds a plugin-key-authenticated route and tests for successful lookup, error responses, missing or unsigned textures, authentication, and ownership. Tests check that requests do not change wardrobe state.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature

Suggested reviewers: carolinebondhus

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant PluginRoute
  participant WardrobeLookup
  Client->>PluginRoute: Request slot texture with plugin key
  PluginRoute->>WardrobeLookup: Look up player, character, and slot
  WardrobeLookup-->>PluginRoute: Return texture fields or raise WardrobeError
  PluginRoute-->>Client: Return texture fields or wardrobe HTTP error
Loading
Merge Risk: ⚪ Minimal · up to cacf2

No actionable issue is established; the endpoint is mergeable after normal checks.

- [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ryanbarlow97
ryanbarlow97 merged commit 59ff0a9 into main Oct 17, 2026
6 checks passed
@ryanbarlow97
ryanbarlow97 deleted the feat/wardrobe-head-command branch October 17, 2026 00:27

This branch was successfully deployed

1 active deployment
preview — cacf2927 Deployed Oct 16, 2026 by ryanbarlow97 via deploy #546
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.

1 participant