Tutorials & Beginner-First May 27, 2026

Your First Steam Crash Symbolicate Receipt JSON Before October Fest Promotion in One Evening - 2026

2026 beginner tutorial—Steam minidump path, one-evening symbolication, crash_symbolicate_receipt_v1.json, and build_label correlation on BUILD_RECEIPT before October Next Fest promotion.

By GamineAI Team

Your First Steam Crash Symbolicate Receipt JSON Before October Fest Promotion in One Evening - 2026

Pixel-art hero for your first Steam crash symbolicate receipt JSON beginner pipeline 2026

A player posts “game crashed on launch” in Discord. You ask for logs. They send a screenshot of Task Manager. Your engineer opens the minidump, sees 0x00007FF8A2C41E9A repeated twelve times, and patches a guess. October 2026 fest traffic turns that guess into a refund thread tied to the wrong depot.

October 2026 is the first fest cycle where many micro-studios already run BUILD_RECEIPT and Wednesday demo smoke—but still promote builds whose crash folders contain hash-only stacks. Partners and players attach .dmp files with no build_label. Refund dashboards tag rows crash while engineering cannot name the function.

This Tutorials & Beginner-First guide closes that gap in one evening: locate one Steam-era minidump (or your engine’s equivalent), run one symbolication pass, file crash_symbolicate_receipt_v1.json, and wire crash_symbolicate_ok on BUILD_RECEIPT before the next fest branch promotion.

Non-repetition note: 5-day crash-log challenge owns folder discipline; Lesson 214 owns the course milestone. This URL is the beginner evening path for Steam-first teams who have never filed a symbolication receipt. Pair refund signal dashboard so crash-tagged refund rows join readable stacks—not mystery hashes.

Why this matters now (October 2026)

  1. Fest install spikes multiply minidumps per hour—symbol upload lag becomes visible in week one.
  2. Multi-channel uploads (playtest isolation) mean identical stack hashes from different build_label values.
  3. Refund language cites “crash on update” while stacks stay anonymous—refund dashboard triage stalls.
  4. Q4 diligence asks for receipt folders, not Discord clips—top-20 receipts hub lists crash_symbolicate_receipt_v1 as a spine row.
  5. Steam Deck / Proton lanes add silent-failure cousins—symbolication still needs build_label even when audio fails first (Deck Verified refresh).

Direct answer: Create release-evidence/crash/, copy one minidump, symbolicated top frames into SYMBOLICATED_STACK.txt, file crash_symbolicate_receipt_v1.json with promotion_allowed: true only when S1–S6 pass, then set BUILD_RECEIPT crash_symbolicate_ok: true before October promotion.

Who this is for and what you get

Audience You will be able to…
Beginner with first Steam demo Find where Windows stores your crash dump
Solo engineer Stop promoting while stacks are hash-only
Producer Show partners one receipt row—not a thread
Working dev Pin symbol upload to build_label in CI

Time: ~2.5–4 hours first evening (includes symbol upload wait); 10 minutes per new build after.
Prerequisites: A Windows playtest or fest build that can crash once, BUILD_RECEIPT or written build_label, symbol backend account (Steam crash handler, Sentry, or local breakpad folder).

What you will have after one evening

  • release-evidence/crash/ with README path notes
  • One minidump (or crash report export) archived under minidumps/
  • SYMBOLICATED_STACK.txt with function names (not only RVAs)
  • crash_symbolicate_receipt_v1.json passing S1–S6
  • BUILD_RECEIPT column crash_symbolicate_ok documented
  • Optional SYMBOL_SERVER_PIN.json pin file (Lesson 214 cousin)
  • Discord pin: “attach minidump + build_label, not screenshot-only”

Beginner path (first evening)

  1. Create release-evidence/crash/README.md with your game’s log paths.
  2. Reproduce one controlled crash on the build you plan to promote (internal menu hook only).
  3. Copy the newest .dmp from the Steam crash folder (table below).
  4. Upload symbols for that build to your backend once.
  5. Open the symbolicated view—confirm you see a function name you recognize.
  6. Paste receipt JSON template; set promotion_allowed from gate table.
  7. Add crash_symbolicate_ok to BUILD_RECEIPT; run Wednesday smoke on the same build_label.

Do not integrate Sentry, Backtrace, and Steam in one evening. Pick one backend.

Developer path (fest prep stack)

  1. Automate symbol upload in CI immediately after IL2CPP / link step.
  2. Inject build_label from the same VERSION file as multi-channel facilitator contract.
  3. Join crash exports to upload_log.csv on build_id.
  4. Fail promotion when jq -e '.promotion_allowed == true' fails on receipt.
  5. Feed crash refund tags from refund dashboard into the same build_label partition.
  6. Forward Help #12 (Deck MangoHud idle GPU) only after audio/output lane is ruled out—GPU peg ≠ missing symbols.

Evening overview (four blocks)

Block Minutes Output
A — Locate dump 30–45 One .dmp + build_label note
B — Upload symbols 45–90 Upload ID logged in pin file
C — Symbolicate 30–60 SYMBOLICATED_STACK.txt
D — Receipt + BUILD_RECEIPT 30–45 JSON + boolean column

If symbol upload queues overnight, finish A and pin file tonight; C–D tomorrow—but do not promote until S4 passes.

Gates S1–S6 (promotion discipline)

Gate Check Fail when
S1 Symbol upload exists for this build_label New EXE, old symbols
S2 build_label visible in crash metadata or sidecar Anonymous 1.0.0 only
S3 surface matches playtest scope map playtest crash tagged fest_public
S4 Top stack frame is a named function RVA-only lines
S5 Test crash hook removed from fest binary BUILD_RECEIPT_TEST_CRASH in prod
S6 crash_symbolicate_receipt_v1.json archived Missing receipt on promotion

Promotion rule: promotion_allowed is true only when S1–S6 are pass. One fail → hotfix symbols, not store copy.

Where Steam and Windows hide minidumps (beginner table)

Source Typical path Notes
Steam crash dumps %VALVE%\steamapps\common\<Game>\ or user-selected folder Varies by title; check steam://settings crash reporting
Windows LocalCrashDumps %LOCALAPPDATA%\CrashDumps\ .dmp after WER if enabled
Unity Player.log %USERPROFILE%\AppData\LocalLow\<Company>\<Product>\ Log path ≠ minidump—copy both
Godot user:// export path in export template Enable verbose; use OS crash folder on desktop exports
Unreal Saved\Crashes\ in project or packaged Saved Pair Lesson 247 for menu lane

Document your path in release-evidence/crash/README.md—players will not guess.

Symbolicate backends (pick one tonight)

Steam crash handler / breakpad folder

Many Steam-shipped Unity IL2CPP titles upload symbols through Steamworks crash reporting. Pass S4 when the Steam backend shows symbolicated frames for a test crash.

Beginner check: Trigger test crash → wait for report → open partner crash UI → confirm function names.

Sentry (or similar SaaS)

Upload debug files per release. Tag events with build_label custom tag. Pass S2 when the tag appears on the test event.

# Example: tag only — do not paste DSN into receipts
sentry-cli releases new "$BUILD_LABEL"
sentry-cli upload-dif --include-sources ./symbols

Local breakpad / llvm-symbolizer

Acceptable for internal playtests before SaaS wiring:

llvm-symbolizer -e YourGame.exe 0x00007FF8A2C41E9A

Archive stdout into SYMBOLICATED_STACK.txt. Not a substitute for player-field symbol servers at scale—document backend: local_dev_only in receipt.

build_label on the minidump (S2)

Crash metadata must answer: which depot crashed?

Unity: Application.version from the same file as BUILD_RECEIPT build_label.

Sidecar when SDK is thin:

{
  "schema": "crash_context_v1",
  "build_label": "fest-demo-2026-10-rc3",
  "surface": "fest_public",
  "minidump_sha256": "sha256:…",
  "captured_at_utc": "2026-05-27T20:15:00Z"
}

Store beside the .dmp in release-evidence/crash/minidumps/2026-05-27-test/. Never put Steam IDs or emails in sidecars.

crash_symbolicate_receipt_v1.json (copy tonight)

{
  "schema": "crash_symbolicate_receipt_v1",
  "build_label": "fest-demo-2026-10-rc3",
  "surface": "fest_public",
  "symbol_server_pin": "release-evidence/crash/SYMBOL_SERVER_PIN.json",
  "backend": "steam_crash_handler",
  "test_crash": {
    "trigger": "BUILD_RECEIPT_TEST_CRASH",
    "minidump_path": "release-evidence/crash/minidumps/2026-05-27-test/crash.dmp",
    "symbolicated_stack_path": "release-evidence/crash/SYMBOLICATED_STACK.txt",
    "top_frame_named": true
  },
  "gates": {
    "S1_symbol_upload_for_label": true,
    "S2_build_label_on_metadata": true,
    "S3_surface_match": true,
    "S4_named_frame": true,
    "S5_test_hook_removed_in_fest": true,
    "S6_receipt_archived": true
  },
  "promotion_allowed": true,
  "human_signoff": {
    "role": "engineer",
    "utc": "2026-05-27T21:00:00Z"
  }
}

Set promotion_allowed to false if any gate is false—fix symbols, not marketing copy.

BUILD_RECEIPT wiring (developer)

Add to your BUILD_RECEIPT row (names may vary—stay consistent with top-20 hub):

{
  "build_label": "fest-demo-2026-10-rc3",
  "crash_symbolicate_ok": true,
  "crash_symbolicate_receipt_path": "release-evidence/crash/crash_symbolicate_receipt_v1.json",
  "symbol_server_pin_path": "release-evidence/crash/SYMBOL_SERVER_PIN.json"
}

Thursday row review should diff crash_symbolicate_ok across promotions—flipping false→true without a receipt path is a red flag.

Join refunds, playtest CSV, and smoke

Signal Tool Action when crash spikes
Refund row tag crash Refund dashboard Partition by build_label
Discord thread 18 playtest tools Require minidump link
Binary boot Wednesday smoke Smoke green ≠ symbolicate green
Evidence hygiene Friday Block 5 Archive receipt weekly

Forward: refund↔BUILD_RECEIPT correlation trend playbook assumes this receipt exists.

Engine quick reference (working dev)

Engine Symbol upload Test crash (internal only) Strip before fest
Unity IL2CPP Steam / Unity Cloud throw new Exception("BUILD_RECEIPT_TEST_CRASH") Remove dev menu
Godot 4.x Sentry / breakpad assert(false) behind flag Disable debug export
Unreal 5.6 Crash Reporter + symbols Force menu crash Lesson 247
GameMaker OS minidump + external symbolicate Controlled crash build Separate fest depot
NW.js / Electron Often OS-level only Document limitation in receipt Set backend: os_wer

Honesty beats pretending every engine gets Steam-grade symbol servers on night one.

PowerShell: find newest .dmp (Block A helper)

$search = @(
  "$env:LOCALAPPDATA\CrashDumps",
  "$env:USERPROFILE\AppData\LocalLow"
)
Get-ChildItem -Path $search -Filter *.dmp -Recurse -ErrorAction SilentlyContinue |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 5 FullName, LastWriteTime, Length

Copy the relevant file into release-evidence\crash\minidumps\YYYY-MM-DD-test\.

Bash: receipt gate check (CI sketch)

#!/usr/bin/env bash
set -euo pipefail
RECEIPT="${1:?crash_symbolicate_receipt_v1.json}"
jq -e '
  .schema == "crash_symbolicate_receipt_v1"
  and .promotion_allowed == true
  and (.gates.S4_named_frame == true)
' "$RECEIPT" >/dev/null
echo "crash_symbolicate promotion gate: OK"

Wire into promotion script after validate-packet optional guards.

SYMBOL_SERVER_PIN.json (optional cousin file)

{
  "schema": "symbol_server_pin_v1",
  "build_label": "fest-demo-2026-10-rc3",
  "engine": "unity_il2cpp",
  "backend": "steam_crash_handler",
  "symbol_upload_id": "steam-upload-2026-05-27-abc",
  "executable_sha256": "sha256:…",
  "uploaded_at_utc": "2026-05-27T20:00:00Z"
}

Receipt points here; pin file changes every promotion.

Common mistakes (read before promoting)

  1. Promoting after smoke only — Wednesday proves boot, not symbolicated crashes.
  2. Symbols for commit A, EXE from commit B — S1 fails silently until refunds arrive.
  3. Screenshot of Event Viewer — not a substitute for .dmp.
  4. Leaving test crash menu in fest build — S5 fail; players trigger it intentionally.
  5. Mixing playtest and fest_public tags — S3 fail; wrong depot fixes.
  6. Filing receipt without archiving path — partners cannot find 05-operations/receipts/ copy.
  7. Skipping refund join — engineering fixes crash while store copy still promises co-op.

Proof folder layout

release-evidence/crash/
  README.md
  SYMBOL_SERVER_PIN.json
  crash_symbolicate_receipt_v1.json
  SYMBOLICATED_STACK.txt
  minidumps/
    2026-05-27-test/
      crash.dmp
      crash_context_v1.json

Zip release-evidence/crash/ for partner asks—grep-friendly.

Worked example (fictional, no invented metrics)

Studio: Solo dev shipping fest-demo-2026-10-rc3 on a Unity IL2CPP Windows depot.

Block A — 35 minutes: Internal build shows build_label in corner debug overlay (added for fest support). Dev triggers menu test crash. Newest .dmp appears under %LOCALAPPDATA%\CrashDumps\. Copied to minidumps/2026-05-27-test/ with sidecar JSON listing surface: fest_public.

Block B — 70 minutes: Steam symbol upload queued after IL2CPP build; SYMBOL_SERVER_PIN.json records symbol_upload_id. Executable SHA256 matches zip in 01-build/.

Block C — 40 minutes: Partner crash UI shows BUILD_RECEIPT_TEST_CRASH in frame 3—not anonymous RVA only. Saved text export to SYMBOLICATED_STACK.txt.

Block D — 25 minutes: Receipt JSON gates all true; BUILD_RECEIPT row sets crash_symbolicate_ok: true. Thursday row review diffs against rc2 where crash_symbolicate_ok was false due to missing upload.

Next morning: Refund dashboard row tags crash for rc2—team closes ticket as already fixed in rc3 with stack proof attached. No argument about whether the fix shipped.

This narrative is a pattern—your times and frame numbers will differ.

Gate failure triage (when S* fails)

Failed gate Likely cause First fix Re-verify
S1 Symbols not uploaded for this label Re-run upload job on CI artifact New test crash
S2 Version string hardcoded Read VERSION file at boot Sidecar JSON
S3 Wrong depot promoted Check playtest isolation map Metadata only
S4 Wrong symbol arch (x86 vs x64) Re-upload matching EXE Symbolicate again
S5 Test menu in fest SKU Strip hook; rebuild depot Receipt S5 true
S6 Receipt only on engineer laptop Copy to 05-operations/receipts/ Archive path in zip

Do not mark S4 pass because a wiki page says symbolication works—pass requires your named frame in your artifact file.

October promotion week calendar (suggested)

Day Action Receipt touchpoint
Mon File symbol pin after CI build SYMBOL_SERVER_PIN.json
Tue Discord CSV ingest ritual (blog backlog #12—when published) tags blockers Cross-check crash tags
Wed Wednesday smoke on candidate label Same build_label
Thu Row review Diff crash_symbolicate_ok
Fri Friday Block 5 Zip crash folder snapshot
Promo eve Set promotion_allowed only if S1–S6 pass Archive receipt in partner packet

Calendar is role discipline, not superstition—skipping Thu is how rc2 and rc4 swap without anyone noticing.

Multi-channel note (GX, itch, Steam)

HTML5 and browser demos may never produce Windows minidumps. For those surfaces:

  • Set crash_symbolicate_ok: n/a with documented reason in BUILD_RECEIPT comments, or
  • Use wasm panic / console capture receipts (Lesson 245 Bevy lane pattern).

Do not mark Steam Windows crash_symbolicate_ok: true because the itch tab “felt fine.” Each surface gets its own receipt column or explicit n/a.

Partner and diligence packet sentence

When Q4 diligence (blog backlog #10) asks for crash evidence, attach:

  1. crash_symbolicate_receipt_v1.json
  2. SYMBOLICATED_STACK.txt (redact player paths if needed)
  3. One-page README listing symbol backend and retention policy

Sentence for cover email: “Crash reports for build fest-demo-2026-10-rc3 are symbolicated per attached receipt; anonymous hash-only stacks are not used for promotion decisions.”

Key takeaways

  1. October fest traffic ships minidumps faster than Discord can organize them—receipts beat threads.
  2. One evening is enough for one backend, one test crash, one symbolicated stack.
  3. S1–S6 gates decide promotion_allowed—not vibes.
  4. build_label on metadata is as important as symbol upload.
  5. BUILD_RECEIPT crash_symbolicate_ok links crashes to promotions audibly.
  6. Refund dashboard crash tags need symbolicated stacks to become engineering work.
  7. Lesson 214 extends tonight into course capstone depth.
  8. Forward blog #5 (refund correlation playbook) builds on this receipt—file it first.
  9. Deck/Proton issues may look like crashes—rule out silent audio before blaming symbols.
  10. Thursday row review should catch crash_symbolicate_ok flips without receipts.

FAQ

Do I need a paid crash service?

Not on night one. Steam crash reporting or a single Sentry project is enough to pass S4. Scale later.

Can I promote if no player has crashed yet?

Yes—use a controlled test crash on the candidate build. Receipt test_crash documents it. Do not wait for fest traffic to learn symbol upload failed.

What if symbolication shows only GameAssembly.dll?

Symbols did not upload for that build_label. Fix S1, re-upload, re-crash—do not patch gameplay blindly.

Does this replace the 5-day crash-log challenge?

No. Crash-log challenge trains daily folders; this tutorial trains symbolication receipt on BUILD_RECEIPT.

How does this relate to Lesson 214?

Lesson 214 is the course milestone with X1–X6 and telemetry crosswalk. This blog is the one-evening onboarding path.

Should facilitators collect minidumps?

Yes—add to multi-channel facilitator contract: attach .dmp + build_label, not clips alone.

What about Linux or Deck-only repro?

Archive whatever the backend accepts (core dump, log bundle). Set backend honestly in receipt. Pair 16 ProtonDB and Deck log export tools for Linux/Deck layers when Windows minidumps are absent.

Can AI symbolicate for me?

Use AI on already symbolicated excerpts for triage summaries—do not paste raw minidumps into public LLMs. Security policy first.

What if Steam crash reporting is disabled for our title?

Enable it for Windows depots before fest, or switch tonight to Sentry with debug files. Receipt backend must match reality—auditors notice when the JSON says steam_crash_handler but the project never uploaded symbols there.

How long do we keep minidumps?

Retention policy belongs in release-evidence/crash/README.md: many teams keep 30 days of playtest dumps and one symbolicated exemplar per promoted build_label in the partner packet. GDPR: strip Windows usernames from paths when zipping for external share.

Standing meeting script (60 seconds)

Read aloud before promoting a fest branch:

  1. “What is the build_label?”
  2. “Is crash_symbolicate_ok true on BUILD_RECEIPT?”
  3. “Where is SYMBOLICATED_STACK.txt for the test crash?”
  4. “Did Thursday diff show any receipt path change?”
  5. “Are refund crash tags for an older label already explained?”

If any answer is “I don’t know,” promotion waits—not because crashes are fashionable, but because unreadable stacks waste the first October weekend.

Related reading

Next in cluster: 16 ProtonDB / Deck log export tools (published); October refund↔BUILD_RECEIPT correlation trend playbook (published).