skills/ue-xr-compliance-checker/SKILL.md
Check codebase for Microsoft Xbox XR (Xbox Requirements) compliance issues. Scans for account picker, cloud saves, achievements, Quick Resume, and Xbox certification requirements. Use before console submission or when preparing for Microsoft certification. Triggers on "XR", "Xbox certification", "Microsoft compliance", "Xbox cert", "Xbox requirements", "GDK compliance".
npx skillsauth add sipherxyz/universal-ue-skills ue-xr-compliance-checkerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scan codebase for Microsoft Xbox Requirements (XR) violations.
Requirement: Allow user to change account at any time.
Check for:
// Must implement account picker access
void ShowAccountPicker()
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get(LIVE_SUBSYSTEM);
IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface();
Identity->ShowAccountPickerUI(LocalUserNum, bShowUI, AccountPickerDelegate);
}
// Must be accessible from pause menu
// Must handle account change result
Violations:
Requirement: Handle user sign-out during gameplay.
Check for:
// Monitor sign-out
FCoreDelegates::OnUserLoginChangedEvent.AddUObject(this, &UMyClass::HandleLoginChange);
void HandleLoginChange(bool bLoggedIn, int32 UserId, int32 UserIndex)
{
if (!bLoggedIn)
{
// Return to title or show account picker
// Cannot continue with unsigned user
}
}
Requirement: Use Xbox Connected Storage for cloud saves.
Check for:
// Must use GDK Connected Storage
#include "XGameSave.h"
// Save to Connected Storage
XGameSaveInitialize(XboxUser, ConfigId, &Context);
XGameSaveSubmitUpdate(Container, UpdateBlock, &AsyncOp);
// Handle sync conflicts
// Support roaming between devices
Violations:
Requirement: Prevent save corruption, handle errors.
Check for:
Requirement: Properly support Quick Resume on Xbox Series X|S.
Check for:
// Handle Quick Resume restoration
void OnQuickResumed()
{
// Re-establish network connections
// Refresh authentication tokens
// Validate session state
// Resume audio/video
// Update time-sensitive state (timers, cooldowns)
}
// Register for suspend/resume
FCoreDelegates::ApplicationWillDeactivateDelegate.AddUObject(...);
FCoreDelegates::ApplicationHasReactivatedDelegate.AddUObject(...);
Violations:
Requirement: Achievements unlock correctly and sync to Xbox Live.
Check for:
// Use Xbox Achievement API
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get(LIVE_SUBSYSTEM);
IOnlineAchievementsPtr Achievements = OnlineSub->GetAchievementsInterface();
// Write achievement progress
FOnlineAchievementsWritePtr WriteObject = MakeShareable(new FOnlineAchievementsWrite());
WriteObject->SetFloatStat(AchievementId, Progress);
Achievements->WriteAchievements(LocalUserNum, WriteObject, Delegate);
// Handle unlock failure (queue for retry)
Violations:
Requirement: Check multiplayer privileges before online play.
Check for:
// Check privileges before online features
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get(LIVE_SUBSYSTEM);
IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface();
EUserPrivileges::Type Privilege = EUserPrivileges::CanPlayOnline;
Identity->GetUserPrivilege(LocalUserNum, Privilege, PrivilegeDelegate);
// Handle restricted users (child accounts, suspensions)
Requirement: Handle controller changes correctly.
Check for:
Requirement: Support Xbox Narrator if game has text.
Check for:
// Check if Narrator is enabled
bool bNarratorEnabled = FWindowsPlatformMisc::IsTextToSpeechEnabled();
// Announce UI text changes
FWindowsPlatformMisc::SpeakWithSpeechSynthesizer(TextToSpeak, Locale);
# Account Picker
Grep: ShowAccountPicker|AccountPickerUI|OnAccountPicked
Files: *.cpp
# Connected Storage
Grep: XGameSave|ConnectedStorage|CloudSave
Files: *.cpp
# Quick Resume
Grep: ApplicationWillDeactivate|ApplicationHasReactivated|OnQuickResume
Files: *.cpp
# Achievements
Grep: WriteAchievements|AchievementInterface|UnlockAchievement
Files: *.cpp
# Privileges
Grep: GetUserPrivilege|CanPlayOnline|CheckPrivilege
Files: *.cpp
rules:
- id: XR-015-ACCOUNT-PICKER
require_in_files: "*PauseMenu*|*MainMenu*"
pattern: "ShowAccountPicker"
message: "Account picker must be accessible from menus"
- id: XR-062-QUICK-RESUME
pattern: "ApplicationHasReactivated"
require_handler: "RefreshAuth|ReconnectNetwork|ValidateSession"
message: "Quick Resume must refresh network/auth state"
- id: XR-047-CLOUD-SAVE
pattern: "SaveGame|SaveSlot"
require: "XGameSave|ConnectedStorage"
message: "Saves must sync to Connected Storage"
# XR Compliance Report
## Executive Summary
- **Status**: {PASS/CONDITIONAL/FAIL}
- **Critical Violations**: {N}
- **High Priority**: {N}
- **Series X|S Specific**: {N}
## Platform Coverage
- [ ] Xbox One
- [ ] Xbox One X
- [ ] Xbox Series S
- [ ] Xbox Series X
## Violations by Category
### Critical - Must Fix for Submission
#### XR-015: Account Picker
**Status**: {PASS/FAIL}
**Files Checked**: {N}
**Issues Found**:
1. `{File}:{Line}` - {Description}
- **Fix**: {Remediation}
### Series X|S Specific
#### XR-062: Quick Resume
**Status**: {PASS/FAIL}
{Details}
## Checklist for QA
- [ ] Account picker from pause menu
- [ ] Sign-out during gameplay - correct behavior
- [ ] Quick Resume after 1 hour suspend
- [ ] Quick Resume after 24 hour suspend
- [ ] Save to Connected Storage, load on different device
- [ ] Achievement unlock offline, verify sync when online
- [ ] Controller disconnect, reconnect different controller
## Test Scenarios
1. Sign out during save operation
2. Network loss during achievement unlock
3. Quick Resume with expired auth token
4. Profile change mid-gameplay
5. Storage quota exceeded during save
For Huli/S2 project:
USipherSaveSubsystem uses Connected StorageASipherPlayerController has account picker integrationdevelopment
This skill should be used when implementing features in isolation using git worktrees. Triggers on "create worktree", "isolated workspace", "parallel development", or when starting implementation that should not affect main workspace.
testing
Manage VFX team issues on GitHub Projects - timeline scheduling, status updates, member commit checks, bulk assign. Use when managing VFX team project board, adding issues to timeline, checking member progress, or bulk-updating issue fields.
tools
Generate C++ validation rules from JSON definitions. Use when team updates ValidationRules.json or asks to add/modify validation rules.
development
Validate weapon DataAssets including damage curves, combo references, VFX links, sound cues, and stat configurations. Use when creating weapons, validating weapon data, or debugging weapon issues. Triggers on "weapon validation", "weapon data", "validate weapon", "weapon check", "damage curves", "weapon asset".