October 2026 Steam Refund Signal Dashboard and BUILD_RECEIPT Correlation Trend Playbook - 2026
Your Friday refund review shows twelve new rows tagged store-copy. Engineering shipped 4523 with crash symbolicate green and Wednesday smoke green. Players still write “trailer lied about co-op.” The spreadsheet and BUILD_RECEIPT are telling different stories because nobody joined them.
October 2026 Next Fest concentrates installs into a short window. Refund signals (reviews, support paraphrases, chargeback notices) arrive faster than engineering can open Steamworks. Teams that built refund-signals.csv in May still promote builds whose receipt stack does not explain the complaint language.
This Trend-Jacking / News Commentary playbook is the correlation layer—not the evening tutorial. It teaches when to open the spreadsheet vs the engineering queue, how to map tags to BUILD_RECEIPT booleans, and how to file refund_build_receipt_correlation_receipt_v1.json before the next fest branch promotion.
Non-repetition note: Refund dashboard beginner pipeline owns CSV setup. Patch retention triage owns session depth. This URL owns refund language ↔ receipt evidence ↔ promotion gates in October traffic.
Pair Lesson 215 — refund_dashboard_receipt on BUILD_RECEIPT, store-demo mismatch recovery, top-20 receipts hub, and October observability cluster posts (crash symbolicate, Deck logs, Addressables audit, Proton silent Deck).
Why this matters now (October 2026)
- Fest refund language clusters —
store-copyandcrashtags spike in the same week without a join table. - Receipt culture matured — BUILD_RECEIPT now carries
crash_symbolicate_ok,proton_audio_ok,addressables_key_audit_ok—refunds should reference them. - Multi-surface installs — Playtest isolation means wrong
build_idpollutes refund rows. - Partner diligence — Q4 packets ask “what changed before the spike?”—correlation CSV answers in one grep.
- Promotion discipline — Thursday row review diffs booleans; refunds should trigger the same review.
Direct answer: Maintain refund_build_correlation_v1.csv joining refund_row_id → build_label → receipt paths → dominant tag; file refund_build_receipt_correlation_receipt_v1.json with promotion_allowed only when open blocker tags match failed receipt columns or documented waivers.
Format ladder (do not mix URLs)
| Artifact | Role |
|---|---|
| Refund evening tutorial | Create refund-signals.csv |
| This playbook | Correlate refunds to BUILD_RECEIPT before promotion |
| Store-demo mismatch | Recover when trailer ≠ demo |
| Metadata diff Wednesday | Store text truth |
Who should read this
| Audience | Outcome |
|---|---|
| Beginner producer | Know whether Friday is spreadsheet day or engineering day |
| Solo dev | Stop fixing crashes when tags say store-copy |
| Tech lead | Wire receipt booleans into promotion CI |
| Support lead | Tag rows consistently for join table |
Time: ~45 minutes read; ~60 minutes first correlation pass once CSV exists.
Beginner path — which queue today?
New refund signal arrives
│
▼
Tag row in refund-signals.csv (required)
│
▼
Is tag `store-copy` or `unknown` with marketing words?
YES ──► Metadata / trailer queue (not engineering)
NO ──► Continue
│
▼
Is tag `crash`?
YES ──► Check crash_symbolicate_ok + minidump path
│
▼
Is tag `audio-deck` or `perf-deck`?
YES ──► Check proton_audio_ok / deck_log_bundle_ok / MangoHud receipts
│
▼
Is tag `gameplay`?
YES ──► Gameplay issue tracker (may still need build_label proof)
Rule: Spreadsheet tags route work—they do not replace receipts.
Developer path — correlation stack
- Add BUILD_RECEIPT columns (see table below).
- Export
refund_build_correlation_v1.csvweekly from refund CSV + receipt folder. - jq/Python script flags mismatches (tag
crash+crash_symbolicate_ok: false). - Block promotion when
refund_build_receipt_correlation_receipt_v1.jsonhas openblockerrows. - Attach correlation receipt to validate-packet optional gate.
Tag taxonomy (October 2026)
| Tag | Routes to | BUILD_RECEIPT columns to check |
|---|---|---|
store-copy |
Marketing + metadata diff | (no engineering boolean—use metadata sprint) |
crash |
Engineering | crash_symbolicate_ok, minidump path |
perf |
Engineering / rendering | menu_fps_cap_ok, gpu_idle_smoke_pass |
perf-deck |
Deck compat | deck_log_bundle_ok, MangoHud logs |
audio-deck |
Deck Proton | proton_audio_ok, proton_pin |
save |
Saves / cloud | save-slot receipts, cloud parity blogs |
input |
Input / Deck Verified | glyph table receipts |
localization |
L10n | string_table / Addressables audit |
unknown |
Triage Friday | assign tag within 48h or escalate |
Add tags in comma-separated tags column—never invent new tags mid-fest without updating this table.
BUILD_RECEIPT correlation columns
Extend BUILD_RECEIPT per promotion:
{
"build_label": "fest-demo-2026-10-rc6",
"refund_dashboard_ok": true,
"refund_dashboard_path": "release-evidence/06-refunds/refund-signals.csv",
"crash_symbolicate_ok": true,
"proton_audio_ok": true,
"addressables_key_audit_ok": true,
"deck_log_bundle_ok": true,
"refund_correlation_receipt_path": "release-evidence/06-refunds/refund_build_receipt_correlation_receipt_v1.json"
}
Thursday row review should show refund_correlation path changes when tags shift.
refund_build_correlation_v1.csv (join table)
refund_row_id,build_label,dominant_tag,receipt_stack_pass,open_blocker_count,correlation_notes
12,fest-demo-2026-10-rc5,store-copy,false,2,"trailer co-op; metadata diff scheduled"
14,fest-demo-2026-10-rc5,crash,true,0,"4526 symbolicated; GH-110"
Weekly job: Append new refund rows; recompute receipt_stack_pass by scanning receipt JSON booleans for that build_label.
refund_build_receipt_correlation_receipt_v1.json
{
"schema": "refund_build_receipt_correlation_receipt_v1",
"build_label": "fest-demo-2026-10-rc6",
"week_ending_utc": "2026-10-12",
"refund_rows_reviewed": 18,
"open_blocker_tags": [],
"dominant_tags": {
"store-copy": 4,
"crash": 2,
"perf-deck": 1
},
"receipt_alignment": {
"crash_tag_rows_all_symbolicated": true,
"audio_deck_tag_rows_proton_audio_ok": true,
"store_copy_rows_metadata_diff_scheduled": true
},
"gates": {
"C1_join_table_updated": true,
"C2_blocker_tags_resolved_or_waived": true,
"C3_thursday_diff_reviewed": true,
"C4_promotion_build_label_matches": true
},
"promotion_allowed": true,
"human_signoff": { "role": "producer", "utc": "2026-10-12T16:00:00Z" }
}
Set promotion_allowed: false when any open_blocker refund row lacks waiver in correlation_notes.
Gates C1–C4 (promotion discipline)
| Gate | Check | Fail when |
|---|---|---|
| C1 | refund_build_correlation_v1.csv updated for week |
Join stale |
| C2 | Zero blocker tags open without waiver doc |
Promoting through refunds |
| C3 | Thursday diff includes refund columns | Receipt drift hidden |
| C4 | Candidate build_label matches correlation receipt |
Wrong depot reviewed |
October fest week calendar
| Day | Refund + receipt ritual |
|---|---|
| Mon | Export refund CSV snapshot → weekly/YYYY-WW.csv |
| Tue | Update join table; tag unknown cleanup |
| Wed | Wednesday smoke on candidate label |
| Thu | Thursday row review + correlation receipt |
| Fri | Friday Block 5 archive folder |
| Promo eve | promotion_allowed true only if C1–C4 pass |
Correlation scenarios (worked patterns)
Scenario A — store-copy spike, engineering idle
Signals: Reviews cite co-op; crash tag zero.
Receipts: crash_symbolicate_ok: true.
Action: Metadata diff + trailer swap—not hotfix binary.
Waiver: Document store-copy open until metadata PR merges.
Scenario B — crash spike after promotion
Signals: “Won’t launch” cluster on build_label rc6.
Receipts: crash_symbolicate_ok: false on rc6.
Action: Hold promotion; run crash symbolicate evening.
No waiver.
Scenario C — audio-deck without proton_audio_ok
Signals: Deck silence reports; tag audio-deck.
Receipts: proton_audio_ok: false.
Action: Proton silent case study playbook—pin stable Proton.
Join: Link refund row to proton_audio_recovery_receipt_v1.json.
Scenario D — localization + raw UI keys
Signals: “Chinese store, English game.”
Receipts: addressables_key_audit_ok: false.
Action: Addressables challenge week—not Weblate-only fix.
Evidence folder layout (October cluster)
Align with release-evidence taxonomy:
release-evidence/
06-refunds/
refund-signals.csv ← evening tutorial
refund_build_correlation_v1.csv ← this playbook (weekly export)
weekly/
2026-W41.csv ← Friday snapshot
receipts/
refund_build_receipt_correlation_receipt_v1.json
waivers/
W-2026-10-12-01.md
Beginner tip: If 06-refunds/ does not exist, copy structure from refund evening Block 1—do not invent a second refunds root.
Developer tip: Point refund_correlation_receipt_path on BUILD_RECEIPT at the JSON under receipts/ so Thursday diff shows path changes when you regenerate after tag cleanup.
Top-20 hub placement (receipt #8c)
The top-20 evidence receipts hub already documents 8b crash symbolicate. Add 8c refund↔BUILD_RECEIPT correlation in your local index:
| Field | Value |
|---|---|
| Schema | refund_build_receipt_correlation_receipt_v1.json |
| Proves | Refund blocker tags align with receipt booleans before fest promotion |
| Generate when | Weekly Friday review or pre-promotion eve |
| BUILD_RECEIPT | refund_correlation_receipt_path, refund_dashboard_ok |
| Pairs | Evening refund tutorial + this trend playbook |
October observability cluster receipts stack: 8b crash → 8c refund correlation → Deck log bundle (listicle) → Addressables audit → Proton audio recovery. Promotion without 8c means you can have green engineering receipts and red refund language simultaneously—partners notice.
Weekly export ritual (PowerShell sketch)
After Friday Block 5 archives refund-signals.csv:
# Export-SundayRefundCorrelation.ps1 (sketch)
$week = (Get-Date).ToString("yyyy") + "-W" + [System.Globalization.ISOWeek]::GetWeekOfYear((Get-Date))
$src = "release-evidence/06-refunds/refund-signals.csv"
$dst = "release-evidence/06-refunds/weekly/$week.csv"
Copy-Item $src $dst
# Append join rows in refund_build_correlation_v1.csv manually or via your script
Bash equivalent: cp refund-signals.csv "weekly/$(date -u +%G-W%V).csv" from repo root.
Honest limit: automation does not infer dominant_tag—human or scripted rules pick one tag per row for the join table.
Proof table for gate reviewers (copy to standup)
| build_label | open_blocker | dominant_tag | crash_symbolicate_ok | proton_audio_ok | addressables_key_audit_ok | promotion |
|---|---|---|---|---|---|---|
| fest-demo-rc5 | 2 | store-copy | true | true | true | hold (metadata) |
| fest-demo-rc6 | 0 | crash | true | true | true | allow |
| fest-demo-rc6 | 1 | audio-deck | true | false | true | hold (Proton) |
Paste this table into REFUND_DASHBOARD.md after correlation pass—beginners see engineering vs marketing at a glance.
Multi-tag rows (triage order)
When tags = store-copy,crash:
- If repro exists on live build → prioritize
crashfor engineering. - If no repro but trailer language dominates → prioritize
store-copy. - Record both in source CSV; join table uses dominant_tag only for promotion gate.
Example: Review says “crashes and co-op missing.” Symbolicate minidump first; if stack is clean, flip dominant to store-copy and open metadata diff.
Fest marketing cap when blockers open
Fest marketing cap applies doubly when correlation receipt shows open store-copy blockers: paid traffic amplifies expectation violations. Correlation is the bridge between refund CSV and marketing spend decisions—not only engineering.
Partner / diligence packet attachment
Q3 cert mock audit dimension support readiness improves when you attach:
- Latest
weekly/YYYY-WW.csv refund_build_receipt_correlation_receipt_v1.jsonwithpromotion_allowed: true- One waiver markdown if any open
store-copywith expiry
Validate-packet optional gate: fail if correlation receipt missing for candidate build_label.
Lesson 215 alignment (course milestone)
Lesson 215 — refund dashboard on BUILD_RECEIPT expects students to file refund_dashboard_ok after the evening tutorial. This playbook is the fest-traffic capstone: same lesson track, add correlation receipt before Lesson 216 forward rows in your syllabus.
| Step | Artifact |
|---|---|
| Lesson 215 evening | refund-signals.csv + refund_dashboard_ok |
| This playbook week | refund_build_correlation_v1.csv + correlation receipt |
| Promotion | promotion_allowed true in correlation JSON |
Scenario E — playtest refunds polluting fest rows
Signals: Refunds tagged gameplay on builds players installed via Playtest invite.
Root cause: Playtest isolation breach—not gameplay regression on fest_public.
Action: Split rows by branch column; exclude playtest build_id from fest_public correlation receipt.
Receipt: Update playtest_isolation_receipt_v1.json before re-running correlation.
Scenario F — chargeback notice with no review text
Signals: Finance forwards chargeback; CSV empty.
Action: Add row with source=chargeback_notice, tags=unknown, severity=blocker until support summarizes.
Correlation: Do not promote until unknown resolved or waived—chargebacks cluster when store copy drifts.
Scenario G — retention dip without refund rows
Cross patch retention triage: session depth fell but refunds quiet. Still run correlation—players may churn without refunding. Add internal playtest survey row with source=playtest_form if Tool 6 checkbox exists.
CI integration (optional, honest scope)
# .github/workflows/refund-correlation-gate.yml (sketch)
- name: Refund correlation receipt
run: |
test -f release-evidence/06-refunds/receipts/refund_build_receipt_correlation_receipt_v1.json
jq -e '.promotion_allowed == true' release-evidence/06-refunds/receipts/refund_build_receipt_correlation_receipt_v1.json
Wire only after humans trust tag taxonomy—false RED from bad tags wastes more time than manual Friday review.
Discord / community signals (Tuesday forward)
Blog backlog #12 owns Tuesday CSV ingest ritual. Until published: transcribe Discord refund mentions into refund-signals.csv same day with source=discord_transcribed—correlation pass on Friday still works.
Anti-repetition vs adjacent URLs
| URL | Owns |
|---|---|
| Refund evening tutorial | CSV schema + Friday ritual |
| This playbook | BUILD_RECEIPT join + promotion gates |
| Patch retention triage | Session depth metrics |
| Store-demo mismatch | Recovery when demo ≠ store promise |
jq mismatch detector (sketch)
#!/usr/bin/env bash
# Flag refund rows where tag implies engineering failure but receipt says otherwise
# Pseudo: integrate with your export pipeline
jq -r '
.rows[] | select(.tags | contains("crash"))
| select(.crash_symbolicate_ok == false)
| [.refund_row_id, .build_label, "CRASH_TAG_BUT_NO_SYMBOLICATE"]
| @tsv
' refund_correlation_export.json
Human reviews output before blocking CI—automation surfaces candidates.
Refund rate vs refund signals (honesty)
This playbook does not invent refund percentages. Steam does not give all indies clean causal APIs. You track signals—language patterns tied to build_label. Correlation improves decisions, not accounting precision.
| Metric | Use |
|---|---|
| Refund signals | Route teams |
| Refund rate | Finance / investor conversations—separate sheet |
| Receipt booleans | Prove engineering response |
| Patch retention | Session depth |
Waivers (documented exceptions)
When promoting with open store-copy blockers:
## Waiver W-2026-10-12-01
build_label: fest-demo-2026-10-rc6
tag: store-copy
reason: Trailer re-render scheduled Oct 13 18:00 UTC; gameplay verified co-op in rc6
approver: producer
expires: 2026-10-14T00:00:00Z
Waivers expire—fest week is short.
Common mistakes
- Fixing gameplay on
store-copytags - Promoting when correlation receipt missing
- Ignoring Deck-only tags on Windows-only receipts
- Merging playtest refunds into fest_public rows
- Treating refund rate = receipt pass
- Skipping Thursday diff on refund columns
- No
build_labelon refund rows
Key takeaways
- October fest needs join table between refunds and receipts.
- Tags route queues—spreadsheet is not engineering triage by default.
refund_build_receipt_correlation_receipt_v1.jsongates promotion.- BUILD_RECEIPT grows correlation columns—not only upload logs.
- Tutorial builds CSV; this playbook uses it under fest load.
- Pair Lesson 215 for course capstone alignment.
- store-copy → metadata; crash → symbolicate; audio-deck → Proton receipt.
- Friday Block 5 archives weekly snapshots.
- Open blockers need waivers with expiry—not silent overrides.
- Forward cluster #6–#12 (art, Bevy, timebox, opinion, diligence, Whisper, CSV ritual).
FAQ
We do not have refund-signals.csv yet?
Run evening tutorial first—this playbook assumes it exists.
Can one row have multiple tags?
Yes—pick dominant_tag for join table; keep full tags in source CSV.
Does correlation replace player support macros?
No—update macros to ask for build_label and attach logs per Deck log listicle.
What if refunds are zero but reviews angry?
Log signals anyway—reviews are leading indicators.
Related reading
- Refund dashboard evening tutorial
- Crash symbolicate receipt
- Proton silent Deck case study
- Addressables key audit challenge
- Store-demo mismatch recovery
- Thursday BUILD_RECEIPT row review
- Lesson 215 — refund dashboard on BUILD_RECEIPT
- Top 20 evidence receipts
Next in cluster: blog backlog #6 HDR screenshot false bloom art pass.