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.

Lesson hero for Steam refund signal dashboard receipt on BUILD_RECEIPT

Why this matters now (fest week one)

July–October 2026 fest traffic turns refund language into a build-identification problem:

  1. “Crashes on launch” rows should point at symbolicated stacks—not generic gameplay.
  2. “Lost save” rows should cross Lesson 212—not crash.
  3. Deck heat / battery complaints may be MangoHud idle GPU case study—tag performance, not crash.
  4. 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:

  1. Export copy → release-evidence/06-refunds/weekly/2026-W21.csv
  2. Count severity=blocker + status=open
  3. If count > 0 → promotion_allowed: false on BUILD_RECEIPT until triaged or tagged wont-fix-demo-scope with 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

  1. Refund signals ≠ refund rate—structure beats fabricated percentages.
  2. build_label join is mandatory for multi-channel fest ops.
  3. Friday snapshot proves ongoing discipline—not one-time spreadsheet.
  4. blocker gate stops promotion while language screams launch failure.
  5. Pair crash tags with Lesson 214—do not triage blind.
  6. Save tags route to Lesson 212, not crash engineers.
  7. Blog pipeline builds the sheet; this lesson receipt-gates promotion.
  8. H1 capstone 217 rolls refund row into trust summary.

Prerequisites

Common mistakes

  • Logging refunds without build_label.
  • Promoting while blocker rows 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)

  1. Copy blog CSV schema into 06-refunds/.
  2. Add three synthetic rows (one blocker).
  3. Resolve blocker → fixed with linked issue.
  4. Export weekly/2026-W21.csv.
  5. 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.