Lesson 260: Unity UGS OTLP Diligence Receipt on BUILD_RECEIPT (2026)

Direct answer: Before Q4 2026 partner diligence calls, promote ugs_otlp_diligence_receipt_v1.json proving the UGS Data Privacy URL returns HTTP HEAD success, the Steam About legal link matches, and OTLP export is either reachable with a corporate CA pin or covered by an offline span batch policy—distinct from Lesson 213 (telemetry_session_receipt_v1 event schema) and Q4 diligence blog (diligence_telemetry_receipt_v1 annex strategy). Pair the Unity UGS OTLP diligence preflight (Guide #23).

Lesson hero for Unity UGS OTLP diligence receipt

Why this matters now (Q4 diligence week)

Q4 2026 partners open 07-observability/ and ask why UGS Analytics returns 401 on public builds or why OTLP dashboards stay empty behind corporate VPNs. Teams file Lesson 213 session schemas but skip URL hosting and egress proof—diligence stalls on “we use Unity Gaming Services” without receipts. 260 wires ugs_otlp_diligence_ok on BUILD_RECEIPT so diligence_telemetry_receipt_v1 can reference a real child row.

The UGS OTLP preflight is the ninety-second gate—260 is the BUILD_RECEIPT milestone.

Beginner path (privacy URL → receipt)

Step Action Success check
1 Copy Data Privacy URL from UGS dashboard Exact string in receipt
2 Run curl -I or PowerShell HEAD Status 200 logged
3 Match Steam About legal link Q3 crosswalk
4 Document OTLP endpoint or offline batch Q4–Q5
5 File receipt + BUILD_RECEIPT ugs_otlp_diligence_ok: true

Time: ~50 minutes first diligence sprint; ~12 minutes when preflight template exists.

Developer path (gates Q1–Q6)

Gate Check Fail when
Q1 Privacy URL from dashboard in receipt Typo vs live URL
Q2 HTTP HEAD success 404/403 on public hosting
Q3 Store About matches dashboard URL Split legal pages
Q4 OTLP endpoint documented Verbal “we use UGS”
Q5 Proxy CA or offline batch policy Silent span drop
Q6 Receipt + BUILD_RECEIPT Promote before Q2 GREEN

Q1 — cousin receipt crosswalk

Field Cousin (213) Cousin (Q4 blog) This lesson (260)
Schema telemetry_session_receipt_v1 diligence_telemetry_receipt_v1 ugs_otlp_diligence_receipt_v1
Scope Session event no-PII Observability annex index UGS URL + OTLP egress proof
Path release-evidence/privacy/ 07-observability/ release-evidence/telemetry/

Do not merge schemas—reference paths in cousin_receipts only.

Q2 — HTTP HEAD on Data Privacy URL

curl -sI "https://yourstudio.com/privacy" | head -n 1

PowerShell:

(Invoke-WebRequest -Uri "https://yourstudio.com/privacy" -Method Head -UseBasicParsing).StatusCode

Log status, final URL after redirects, and date. 404 commonly correlates with UGS Analytics 401 on session ingest.

Q3 — store crosswalk table

Surface Privacy URL
UGS dashboard (paste exact)
Steam About / legal (paste exact)
release-evidence/privacy.md (paste exact)

Normalize trailing slashes—hosts must match.

Q4–Q5 — OTLP corporate proxy

export OTEL_EXPORTER_OTLP_ENDPOINT="https://otel-collector.internal:4318"
export SSL_CERT_FILE="/etc/ssl/corp-root.pem"

Offline batch policy (Q5 pass without live OTLP): README exports spans to release-evidence/telemetry/offline_spans/batch_YYYYMMDD.json before partner zip—aligned with Q4 diligence annex.

ugs_otlp_diligence_receipt_v1.json

{
  "schema": "ugs_otlp_diligence_receipt_v1",
  "build_label": "fest-demo-2026-10-rc6",
  "privacy_url": "https://yourstudio.com/privacy",
  "privacy_url_head_status": 200,
  "privacy_url_final": "https://yourstudio.com/privacy",
  "store_about_privacy_match": true,
  "otlp_endpoint": "https://otlp.example.com/v1/traces",
  "otlp_mode": "live",
  "corporate_proxy": {
    "required": true,
    "ssl_cert_file": "/etc/ssl/corp-root.pem",
    "offline_batch_path": "release-evidence/telemetry/offline_spans/"
  },
  "cousin_receipts": {
    "telemetry_session": "release-evidence/privacy/telemetry_session_receipt_v1.json",
    "diligence_telemetry": "07-observability/diligence_telemetry_receipt_v1.json"
  },
  "gates": {
    "Q1_dashboard_url": "pass",
    "Q2_head_ok": "pass",
    "Q3_store_crosswalk": "pass",
    "Q4_otlp_documented": "pass",
    "Q5_proxy_or_offline": "pass",
    "Q6_build_receipt": "pass"
  },
  "ugs_otlp_diligence_ok": true,
  "telemetry_promotion_allowed": true
}

Pin under release-evidence/telemetry/UGS_OTLP_DILIGENCE_RECEIPT.json.

BUILD_RECEIPT row (Q6)

Column Pass when
ugs_otlp_diligence ugs_otlp_diligence_ok: true
telemetry_session Cousin Lesson 213 independent column
diligence_telemetry Cousin Q4 blog annex independent column

Thursday row reviewUGS OTLP diligence line: privacy HEAD Y/N.

Key takeaways

  1. HTTP HEAD privacy URL before fest ship—401 often means 404 legal page (Q2).
  2. Store About must match UGS dashboard string (Q3).
  3. Corporate proxy needs CA pin or offline span batch (Q5).
  4. Lesson 213 = event schema; 260 = egress + diligence proof.
  5. Q4 diligence blog bundles into 07-observability/.
  6. UGS OTLP preflight — ninety-second gate before this lesson.
  7. Cousin: Lesson 261 — Unity CI Library cache BUILD_RECEIPT column (unity_ci_library_cache_receipt_v1.json).
  8. October capstone 265 wires 254–264 including this row.
  9. Help #18/#22 (planned) — fix lanes for 401 URL and OTLP proxy block.
  10. Top 20 receipts hub — telemetry spine rows.

Common mistakes

  • Privacy URL points to draft Notion page that 404s on HEAD (Q2).
  • Filing 213 while privacy URL still dead—session schema ≠ hosting proof.
  • Assuming UGS works on corporate laptops without SSL_CERT_FILE (Q5).
  • Merging ugs_otlp_diligence_receipt into telemetry_session_receipt.
  • Shipping diligence zip without offline span policy when OTLP blocked.

Troubleshooting

Symptom Lane
UGS Analytics 401 Q2 HEAD fail → fix URL hosting
Events in Editor, none in release API keys / release vs dev build
OTLP timeout behind VPN Q5 CA pin or offline batch
Partner asks for spans, empty folder Export offline_spans/ per Q4 blog
Crash receipts OK, telemetry row RED Run UGS preflight before 260

Mini exercise (45 minutes)

  1. Break privacy URL intentionally (wrong path)—confirm HEAD fail.
  2. Fix hosting—confirm Q2 pass.
  3. Crosswalk Steam About—Q3 table.
  4. Document OTLP mode (live or offline)—Q4/Q5.
  5. File receipt; BUILD_RECEIPT GREEN.

Continuity — October–Q4 2026 fest ops truth (254–265)

Lesson Receipt focus
259 Bevy menu UI flush
260 (this) Unity UGS OTLP diligence
261 Unity CI Library cache
265 October ops capstone

Previous: Lesson 259 — Bevy menu UI flush
Next: Lesson 261 — Unity CI Library cache Addressables

FAQ

Same as Lesson 213?
213 = session event schema without PII; 260 = privacy URL HEAD + OTLP egress proof.

Same as Q4 diligence blog?
Blog owns 07-observability/ annex strategy; 260 owns ugs_otlp_diligence_receipt_v1 BUILD_RECEIPT column.

Need live OTLP for Q5?
No—documented offline span batch path passes when corporate proxy blocks export.

PostHog instead of UGS?
Still file privacy URL crosswalk; OTLP section documents your exporter or offline policy.

Unreal Engine SKU in same diligence zip?
File cousin Unreal OTLP corporate proxy case study with unreal_otlp_diligence_receipt_v1—schemas stay separate from 260.


Q4 diligence stalls when privacy URLs 404 and OTLP dies behind proxy—HEAD the URL, pin the CA or batch offline spans, then ugs_otlp_diligence_ok before diligence_telemetry_receipt_v1.json ships.