Lesson 215: Steam Refund Signal Dashboard Receipt on BUILD_RECEIPT (2026)
Direct answer: Create refund-signals.csv with stable columns, join every row to build_label (same spine as upload logs), run a Friday 15-minute review, then file refund_dashboard_receipt_v1.json on BUILD_RECEIPT. The evening beginner pipeline teaches the spreadsheet; this lesson is the live-ops receipt gate after Lesson 214 crash correlation.

Why this matters now (fest week one)
July–October 2026 fest traffic turns refund language into a build-identification problem:
- “Crashes on launch” rows should point at symbolicated stacks—not generic
gameplay. - “Lost save” rows should cross Lesson 212—not
crash. - Deck heat / battery complaints may be MangoHud idle GPU case study—tag
performance, notcrash. - Store-copy drift still drives refunds when trailers promise co-op the demo lacks.
Producers need signals, not invented refund rates. This receipt proves the dashboard exists and blocker rows are closed before the next promotion.
Beginner path (30-minute receipt pass)
| Step | Action | Success check |
|---|---|---|
| 1 | Create release-evidence/06-refunds/ |
Folder exists |
| 2 | Copy CSV schema | Header row exact match |
| 3 | Add 3+ rows with build_label |
No orphan ids |
| 4 | Tag one row blocker + status |
open or fixed honest |
| 5 | Write REFUND_DASHBOARD.md one-pager |
Friday ritual documented |
| 6 | File refund_dashboard_receipt_v1.json |
V1–V6 pass |
Time: ~30 minutes after blog schema exists; 45 minutes first fest week.
Developer path (gates V1–V6)
| Gate | Check | Fail when |
|---|---|---|
| V1 | refund-signals.csv schema |
Columns renamed ad hoc |
| V2 | build_label join to BUILD_RECEIPT |
Mismatch vs upload log |
| V3 | Weekly snapshot weekly/YYYY-WW.csv |
No Friday export |
| V4 | blocker promotion gate |
Promote with open blocker |
| V5 | Cross-tag discipline | crash without symbolicated stack link |
| V6 | refund_dashboard_receipt_v1.json |
promotion_allowed: false |
Weekly CSV schema (V1)
Required file: release-evidence/06-refunds/refund-signals.csv
refund_row_id,observed_date_utc,build_label,surface,platform,source,player_language_summary,tags,severity,status,linked_issue,notes
1,2026-05-20,fest-demo-2026-10-rc1,fest_public,deck,steam_review,"menu gpu heat",performance,major,open,,"see MangoHud case study"
2,2026-05-22,fest-demo-2026-10-rc2,fest_public,win64,support_email,"crash at boot",crash,blocker,fixed,GH-88,"Lesson 214 stack"
build_label replaces loose build_id when your BUILD_RECEIPT already standardized on VERSION spine—keep Steam build_id in notes if needed for Steamworks joins.
Friday review ritual (V3–V4)
Every Friday beside Thursday row review:
- Export copy →
release-evidence/06-refunds/weekly/2026-W21.csv - Count
severity=blocker+status=open - If count > 0 →
promotion_allowed: falseon BUILD_RECEIPT until triaged or taggedwont-fix-demo-scopewith FAQ update
Tag crosswalk (V5)
| Tag | Join to |
|---|---|
crash |
Lesson 214 symbolicated frame id |
save |
Lesson 212 save_slot_label_receipt |
performance |
Lesson 205 / MangoHud case study |
store-copy |
FAQ / trailer parity audit |
gameplay |
Playtest issue id |
refund_dashboard_receipt_v1.json
{
"schema": "refund_dashboard_receipt_v1",
"build_label": "fest-demo-2026-10-rc2",
"dashboard_path": "release-evidence/06-refunds/refund-signals.csv",
"weekly_snapshot_path": "release-evidence/06-refunds/weekly/2026-W21.csv",
"blocker_open_count": 0,
"top_tags_last_7d": ["performance", "store-copy"],
"paired_receipts": {
"crash_symbolicate": "release-evidence/crash/CRASH_SYMBOLICATE_RECEIPT.json",
"telemetry_session": "release-evidence/telemetry/TELEMETRY_SESSION_RECEIPT.json"
},
"gates": {
"V1_csv_schema": "pass",
"V2_build_label_join": "pass",
"V3_weekly_snapshot": "pass",
"V4_blocker_gate": "pass",
"V5_cross_tag": "pass",
"V6_receipt": "pass"
},
"promotion_allowed": true
}
Pin under release-evidence/06-refunds/REFUND_DASHBOARD_RECEIPT.json.
BUILD_RECEIPT columns
| Column | Value |
|---|---|
refund_dashboard_receipt |
Path + pass/fail |
blocker_open_count |
Integer from Friday review |
build_label |
Current fest row |
crash_symbolicate_receipt |
When crash tags used |
Proof table (fest week one)
| build_label | blocker open | Top tag | Promote? |
|---|---|---|---|
| fest-demo-rc1 | 2 | crash | no |
| fest-demo-rc2 | 0 | performance | yes after V6 |
Key takeaways
- Refund signals ≠ refund rate—structure beats fabricated percentages.
build_labeljoin is mandatory for multi-channel fest ops.- Friday snapshot proves ongoing discipline—not one-time spreadsheet.
blockergate stops promotion while language screams launch failure.- Pair crash tags with Lesson 214—do not triage blind.
- Save tags route to Lesson 212, not crash engineers.
- Blog pipeline builds the sheet; this lesson receipt-gates promotion.
- H1 capstone 217 rolls refund row into trust summary.
Prerequisites
- Refund signal dashboard beginner pipeline
- Lesson 214 — crash symbolicate
- BUILD_RECEIPT beginner pipeline
- Wednesday demo smoke
Common mistakes
- Logging refunds without
build_label. - Promoting while
blockerrows open. - Tagging everything
gameplay. - Skipping weekly CSV export.
- Inventing refund % in producer slides.
Troubleshooting
| Symptom | Lane |
|---|---|
| Spike after patch | Compare build_label on rows vs upload log |
| Crash language, no stack | Lesson 214 |
| Save language | Lesson 212 |
| Deck heat | MangoHud case study |
Mini exercise (45 minutes)
- Copy blog CSV schema into
06-refunds/. - Add three synthetic rows (one
blocker). - Resolve blocker →
fixedwith linked issue. - Export
weekly/2026-W21.csv. - File receipt; set BUILD_RECEIPT
blocker_open_count: 0.
Next: Lesson 216 — AI dialogue patch moderation.
Continuity — H1 2026 arc (212–217)
| Lesson | Receipt focus |
|---|---|
| 212–214 | Saves, telemetry, crashes |
| 215 (this) | Refund signal dashboard |
| 216 | AI dialogue patch |
| 217 | H1 capstone |
FAQ
No refunds yet?
File receipt with row_count: 0 and promotion_allowed: true only if fest not public—once live, V3 weekly snapshots required.
Chargebacks vs reviews?
Use source column; same schema.
HTML5-only demo?
Keep CSV—refund language still hits Steam store page for many teams.
Close blocker refund rows on paper before the next fest build promotion ships.