Files
pixelheros/CCGS Skill Testing Framework/agents/engine/unreal/ue-replication-specialist.md
2026-05-15 14:52:29 +08:00

6.0 KiB

Agent Test Spec: ue-replication-specialist

Agent Summary

  • Domain: Property replication (UPROPERTY Replicated/ReplicatedUsing), RPCs (Server/Client/NetMulticast), client prediction and reconciliation, net relevancy and always-relevant settings, net serialization (FArchive/NetSerialize), bandwidth optimization and replication frequency tuning
  • Does NOT own: Gameplay logic being replicated (gameplay-programmer), server infrastructure and hosting (devops-engineer), GAS-specific prediction (ue-gas-specialist handles GAS net prediction)
  • Model tier: Sonnet
  • Gate IDs: None; escalates security-relevant replication concerns to lead-programmer

Static Assertions (Structural)

  • description: field is present and domain-specific (references replication, RPCs, client prediction, bandwidth)
  • allowed-tools: list matches the agent's role (Read/Write for C++ and Blueprint source files; no infrastructure or deployment tools)
  • Model tier is Sonnet (default for specialists)
  • Agent definition does not claim authority over server infrastructure, game server architecture, or gameplay logic correctness

Test Cases

Case 1: In-domain request — replicated player health with client prediction

Input: "Set up replicated player health that clients can predict locally (e.g., when taking self-inflicted damage) and have corrected by the server." Expected behavior:

  • Produces a UPROPERTY(ReplicatedUsing=OnRep_Health) declaration in the appropriate Character or AttributeSet class
  • Describes the OnRep_Health function: apply visual/audio feedback, reconcile predicted value with server-authoritative value
  • Explains the client prediction pattern: local client applies tentative damage immediately, server authoritative value arrives via OnRep and corrects any discrepancy
  • Notes that if GAS is in use, the built-in GAS prediction handles this — recommend coordinating with ue-gas-specialist
  • Output is a concrete code structure (property declaration + OnRep outline), not a conceptual description only

Case 2: Out-of-domain request — game server architecture

Input: "Design our game server infrastructure — how many dedicated servers we need, regional deployment, and matchmaking architecture." Expected behavior:

  • Does not produce server infrastructure architecture, hosting recommendations, or matchmaking design
  • States clearly: "Server infrastructure and deployment architecture is owned by devops-engineer; I handle the Unreal replication layer within a running game session"
  • Does not conflate in-game replication with server hosting concerns

Case 3: Domain boundary — RPC without server authority validation

Input: "We have a Server RPC called ServerSpendCurrency that deducts in-game currency. The client calls it and the server just deducts without checking anything." Expected behavior:

  • Flags this as a critical security vulnerability: unvalidated server RPCs are exploitable by cheaters sending arbitrary RPC calls
  • Provides the required fix: server-side validation before the deduct — check that the player actually has the currency, verify the transaction is valid, reject and log if not
  • Uses the pattern: if (!HasAuthority()) return; guard plus explicit state validation before mutation
  • Notes this should be reviewed by lead-programmer given the economy implications
  • Does NOT produce the "fixed" code without explaining why the original was dangerous

Case 4: Bandwidth optimization — high-frequency movement replication

Input: "Our player movement is replicated using a Vector3 position every tick. With 32 players, we're exceeding our bandwidth budget." Expected behavior:

  • Identifies tick-rate replication of full-precision Vector3 as bandwidth-expensive
  • Proposes quantized replication: use FVector_NetQuantize or FVector_NetQuantize100 instead of raw FVector to reduce bytes per update
  • Recommends reducing replication frequency via SetNetUpdateFrequency() for non-owning clients
  • Notes that Unreal's built-in Character Movement Component already has optimized movement replication — recommends using or extending it rather than rolling a custom system
  • Produces a concrete bandwidth estimate comparison if possible, or explains the tradeoff

Case 5: Context pass — designing within a network budget

Input context: Project network budget is 64 KB/s per player, with 32 players = 2 MB/s total server outbound. Current movement replication already uses 40 KB/s per player. Input: "We want to add real-time inventory replication so all clients can see other players' equipment changes immediately." Expected behavior:

  • Acknowledges the existing 40 KB/s movement cost leaves only 24 KB/s for everything else per player
  • Does NOT design a naive full-inventory replication approach (would exceed budget)
  • Recommends a delta-only or event-driven approach: replicate only changed slots rather than the full inventory array
  • Uses FGameplayItemSlot or equivalent with ReplicatedUsing to trigger targeted updates
  • Explicitly states the proposed approach's bandwidth estimate relative to the remaining 24 KB/s budget

Protocol Compliance

  • Stays within declared domain (property replication, RPCs, client prediction, bandwidth)
  • Redirects server infrastructure requests to devops-engineer without producing infrastructure design
  • Flags unvalidated server RPCs as security issues and recommends lead-programmer review
  • Returns structured findings (property declarations, bandwidth estimates, optimization options) not freeform advice
  • Uses project-provided bandwidth budget numbers when evaluating replication design choices

Coverage Notes

  • Case 3 (RPC security) is a shipping-critical test — unvalidated RPCs are a top-ten multiplayer exploit vector
  • Case 5 is the most important context-awareness test; agent must use actual budget numbers, not generic advice
  • Case 1 GAS branch: if GAS is configured, agent should detect it and defer to ue-gas-specialist for GAS-managed attributes
  • No automated runner; review manually or via /skill-test