@oshun/metrics and @oshun/tracing are required from day one for every
package under apps/v2/ and for the Unreal V2Services module. The
observability path is off rollback: it can emit counters, histograms, spans, and
outage status, but it cannot affect deterministic gameplay state or simulation.
Node Service Contract#
- Every
apps/v2/*/package.jsondeclares direct workspace dependencies on@oshun/metricsand@oshun/tracing. @v2/oshun-adaptercreates the default service registry throughcreateRegistryand creates consumer spans throughcreateLightweightTracer.- Shared metric labels include the V2 service package, event type, reaction kind, and residency zone where available.
- Handler duration is measured through Prometheus histograms and event handling is wrapped in OpenTelemetry-style spans.
Unreal Module Contract#
V2Services exposes FV2ServiceObservabilityBinding records for both
apps/v2/* and V2/ue/Source/V2Services. Each binding pins:
- metrics package:
@oshun/metrics - tracing package:
@oshun/tracing - metrics domain:
EV2OshunDomain::Metrics - tracing domain:
EV2OshunDomain::Tracing bRequiredFromDayOne: truebMayInfluenceRollback: false
The default gRPC channel manager still routes metrics and tracing through their own Oshun domains, so service outage state is visible without coupling the observability path to rollback.
Verification#
V2/ue/Tools/check-v2-service-observability.py checks every V2 service package,
the lockfile, @v2/oshun-adapter, V2Services, docs, TODO entry, and CI
workflow. The existing V2Services automation spec also validates the
observability bindings.