Steam Next Fest 2026 Demo Branch Naming and Library Label Parity - Checklist for Micro-Studios
Your About bullets say DEMO. Your library still installs "Full Game - October Beta". Playtest emails reference branch default while Steamworks shows fest_demo_oct2026. Partners ask which build_id is live and your producer forwards three different strings from Slack.
Branch naming is not cosmetic infrastructure—it is player-facing metadata that either reinforces or contradicts every FAQ row you proofed this week. This Process & Workflow checklist audits Steamworks branch strings, build descriptions, and library-visible labels against Next Fest demo scope and BUILD_RECEIPT. Pair with demo build identity depot parity for binary truth. Anchor ops to Steamworks builds documentation. No invented studios or metrics.
Time to read: ~33 minutes. Time to run first naming audit: ~90 minutes with cold install and receipt update.
Why this matters now (May–October 2026)
- Library text is pre-FAQ — Players see install title and build description before opening store FAQ.
- Branch drift breaks receipts — validate-packet expects one canonical branch string per live demo.
- Fest six-week lock — Wrong names frozen in October are expensive to fix under partner eyes.
- Mislabeling culture — Vertical slice opinion fails if library still says "Complete Experience."
- May creates branches wrong — Depot playbook documents ids; this checklist documents strings humans read.
Direct answer: Build branch-label-proof.md mapping every player-visible name to demo scope, align Steamworks branch + build description + receipt fields, cold-install from a non-dev account, and diff weekly beside Wednesday metadata ritual.
Who this is for
| Audience | Outcome |
|---|---|
| Engineer | One canonical branch string in CI and receipts |
| Producer | Answer "which build is live?" in one sentence |
| Marketing | Stop emails that contradict library labels |
| Solo dev | Smaller table—still mandatory before fest |
Prerequisites
| Prerequisite | Why |
|---|---|
| Demo depot id documented | From depot ninety-minute pass |
BUILD_RECEIPT with build_id |
Anchors promotion |
| Non-developer Steam account | Sees what players see |
release-evidence/02-builds/ folder |
Stores proof exports |
| Store copy surfaces green | Metadata sprint or equivalent |
Branch label proof table (core artifact)
release-evidence/02-builds/branch-label-proof.md:
| Label surface | String (exact) | Player expectation | Demo scope match | Pass/Fail | Action |
|---|---|---|---|---|---|
| Steamworks branch name | fest_demo_2026_10 |
Fest demo only | Matches fest zip | Pass | Keep |
| Build description (library) | "Next Fest Demo - Oct 2026" | Limited demo | Matches FAQ #1 | Pass | Keep |
| Playtest email subject | "Password for beta" | Full game beta | Wrong | Fail | Rename email template |
BUILD_RECEIPT branch field |
fest_demo_2026_10 |
Same as live | Matches promotion | Pass | Keep |
| Internal Slack shortcut | "main" | Ambiguous | Fail | Ban shorthand |
Pass rule: A player installing from the public demo path sees labels containing Demo or Next Fest (your chosen convention) and no phrase implying full game, EA launch, or unscoped "Beta" without a DEMO prefix.
Naming conventions (pick one set and freeze)
| Element | Recommended pattern | Ban |
|---|---|---|
| Branch key | fest_demo_YYYY_MM or nextfest_demo_2026_10 |
default, test, latest |
| Build description | Next Fest Demo - Oct 2026 (build 4521) |
Full Game Beta |
| Playtest branch | playtest_<feature>_demo |
Reusing main branch name |
| CI artifact | Demo_Win64_fest_4521.zip |
GameBuild.zip |
Receipt branch |
Same characters as Steamworks | Aliases in Slack only |
Document the convention in docs/steam-branch-naming.md and link from BUILD_RECEIPT README.
Surfaces to audit (complete list)
Steamworks builds page
- Branch name string
- Build description shown in partner UI
- Which branch is default for demo depot
- Last promotion timestamp vs receipt
Player library (cold install)
- Game title line (app name)
- Subtitle or demo badge if shown
- Download size line (cross-check spec honesty)
- Play button label after install
Internal comms
- Playtest password emails
- Discord #builds posts
- Notion "current build" pages
- Partner ZIP README first bullet
Store-adjacent copy
- Short description must not say "full game" if library says Demo
- Event posts must reference same branch string
Ninety-minute first audit (step-by-step)
| Step | Minutes | Output |
|---|---|---|
| 1. Screenshot Steamworks branches | 10 | PNG in evidence folder |
| 2. Copy strings into proof table | 15 | Skeleton rows |
| 3. Promote fest demo to public branch | 10 | Log in receipt |
| 4. Cold install on floor account | 25 | Library screenshots |
| 5. Compare library text to FAQ row 1 | 15 | Pass/fail marks |
| 6. Fix failures + re-promote | 15 | Updated screenshots |
| 7. Engineer sign-off | 0 | signoff.txt |
If step 4 fails install, stop renaming—fix depot parity first.
BUILD_RECEIPT fields to align
"branch_live": "fest_demo_2026_10",
"depot_id_demo": 1234567,
"library_label_snapshot": "Next Fest Demo - Oct 2026",
"branch_naming_doc": "docs/steam-branch-naming.md",
"last_cold_install_account": "floor-laptop-02",
"last_promotion_utc": "2026-05-20T14:00:00Z"
Receipt branch_live must match Steamworks promotion log character-for-character.
CI and promotion guards
Add to validate-packet optional checks:
- Promotion script refuses branch names in ban list (
default,test,mainwithout prefix) - Post-promotion hook writes branch string to receipt automatically
- Slack bot posts receipt row—not informal "build 45"
Prevents "quick promote to default" during crunch.
Pairing with depot and Input parity
| Checklist | Focus |
|---|---|
| Depot branch rules playbook | Depot ids, Steam Input VDF |
| Demo build identity pass | Binary hash, depot orphan |
| This checklist | Human-readable strings |
| Cold-hash challenge | Hash after rename promotions |
Run naming audit after depot installs green, before store metadata sprint Day 7.
Wednesday ritual extension
Add row to Wednesday diff log:
Branch labels — screenshot library + compare to branch-label-proof.md (5 min).
If promotion happened Tuesday night, Wednesday catches label drift before weekend social posts.
High-risk mislabel patterns
| Pattern | Why it fails |
|---|---|
default branch for fest demo |
Engineers promote wrong build silently |
| "Beta" without DEMO prefix | Players expect full game feature set |
| "Vertical Slice" in library | Opinion piece bar rarely met |
| Same branch name as main game | Receipt ambiguity |
Date-only branch build_may20 |
No scope signal |
| Internal codenames in public description | Leaks unreleased modes |
Playtest and reviewer keys
Press and curator installs inherit library labels. If reviewers see "Complete Beta" while store FAQ says demo-only, coverage quotes the wrong scope—worse than a tag mismatch.
| Control | Action |
|---|---|
| Separate playtest branch name | press_review_oct2026 vs fest_demo_2026_10 |
| Email template | Paste exact library label + build_id |
| Reviewer README | Link branch-label-proof.md |
Partner diligence appendix
Branch naming audit
<date>— live branchfest_demo_2026_10, library label matches FAQ demo boundary, cold-install screenshot attached.
Fits publisher diligence packets and partner ZIP map.
Red-team questions (tabletop)
- "Which branch do I opt into for the fest demo?"
- "Why does my library say Beta but FAQ says Demo?"
- "Is this the same build as the trailer upload yesterday?"
- "Playtest email said
default—is that safe?" - "Receipt says build 4521—where do I see that in Steam?"
Any confusion → fail row → rename before October lock.
When to re-audit naming only
| Trigger | Action |
|---|---|
| New branch created | Proof table row before first promotion |
| Demo scope cut | Update build description + FAQ |
| Merge from main to demo | Re-run cold install |
| Yellow on mismatch | Naming + store-demo recovery |
| Post-tag drift sprint | Verify labels still say demo |
Common mistakes (eleven)
- Treating branch names as engineer-only shorthand.
- Letting
"default"survive from prototype phase. - Promoting without updating build description.
- Slack aliases that disagree with Steamworks.
- Skipping non-dev cold install.
- Library says Beta; store says Demo.
- No receipt
branch_livefield. - Reusing main-game branch for fest depot.
- October rename without re-cold-install.
- Playtest emails not templated.
- Ignoring two-storefront rule itch naming drift.
Worked example (anonymous)
Before: branch default, library "Open Beta", FAQ "DEMO: Act 1 only."
Tuesday: Renamed branch fest_demo_2026_10, description "Next Fest Demo - Oct 2026."
Wednesday: Cold install on laptop account—library matches FAQ.
Thursday: Receipt updated; validate-packet branch guard added.
Friday: Playtest email template fixed.
Engineer ~2h; producer ~1h; zero weekend recovery.
Integration with metadata cluster
| Surface | Naming link |
|---|---|
| Short description | Verbs match library DEMO prefix |
| Tags | No "Early Access" tag if library says Demo |
| Trailer VO | Says "demo" if library does |
| FAQ | Row 1 quotes exact library label |
| Events | Headline includes fest name consistent with branch |
Triangle diff from metadata sprint adds branch label as fourth vertex for Day 7.
Post-fest maintenance
- Wednesday branch screenshot row.
- Friday Block 5 promotion log.
- Evidence cycles for non-critical copy only—branch renames are never "small."
- Asia–EU handoff must not promote unnamed branches overnight.
Glossary
| Term | Meaning here |
|---|---|
| Branch key | Steamworks branch identifier string |
| Build description | Partner-visible description tied to promotion |
| Library label | Text player sees in Steam client library |
| Cold install | Install using non-developer account |
| Promotion | Publishing build to branch players receive |
Evidence folder layout
release-evidence/02-builds/branch-naming/
README.md
branch-label-proof.md
steamworks-branches-YYYY-MM-DD.png
library-cold-install-YYYY-MM-DD.png
promotion-log.txt
engineer-signoff.txt
producer-signoff.txt
Link this folder from release-evidence taxonomy under builds—not store marketing—so engineers own updates.
Sample proof rows (copy structure)
Row — Playtest email:
| Field | Value |
|---|---|
| Label surface | Playtest invite subject |
| String | "Password for Project X Open Beta" |
| Player expectation | Full beta access |
| Demo scope match | Fest demo is Act 1 only |
| Pass/Fail | Fail |
| Action | Template → "Next Fest Demo access - branch fest_demo_2026_10" |
Row — CI artifact:
| Field | Value |
|---|---|
| Label surface | Uploaded zip name |
| String | GameBuild_latest.zip |
| Player expectation | Unknown |
| Demo scope match | Receipt cannot map |
| Pass/Fail | Fail |
| Action | Rename to Demo_Win64_fest_<build_id>.zip |
Team RACI
| Task | Engineer | Producer | Marketing |
|---|---|---|---|
| Create branch keys | R | C | I |
| Set build descriptions | C | R | C |
| Cold install proof | R | I | I |
| Email templates | I | A | R |
| Receipt update | R | A | I |
| Partner README bullet | C | R | I |
R = responsible, A = approves, C = consulted, I = informed.
Comparison to reactive recovery
| Mode | Trigger | Typical cost |
|---|---|---|
| This checklist | May prevention | ~90 minutes |
| Store-demo mismatch 48h | FAQ/copy vs build | Weekend |
| Hash mismatch 72h | Wrong binary promoted | Engineering drill |
Library labels that say "Beta" while the fest zip is a demo-only slice are a common opener for the middle column—players quote the library in refund tickets.
Steam Input and branch coupling
When Deck tools fail on demo depots, engineers often clone Input configs from main to demo. If branch names differ but VDF paths still reference main_game folders, you get working controls with wrong receipt labels. Naming audit includes verifying controller_config/ folder names appear in proof table as secondary rows—not separate from branch discipline.
Ads and fest spend coupling
Fest marketing cap assumes installs match promised scope. Sending paid traffic while library still says "Open Beta" burns CAC on players who expect features your demo branch does not ship—pause ads until library screenshot matches FAQ row 1.
UTM and landing copy
UTM experiments that reference "play the beta" in landing copy must match library labels for that week. Changing branch description mid-experiment without pausing UTMs confounds retention data and creates false negatives in your fest diagnostics.
Mock audit tabletop hook
Seven-dimension mock audit dimension on builds should include:
- Open
branch-label-proof.md - Ask producer to state live branch without opening Steamworks
- Compare answer to receipt field
Fail the tabletop if producer and engineer give different strings—fix naming before upload ZIP assembly.
Unity and Godot pipeline notes
| Engine | Naming risk |
|---|---|
| Unity | Build output folders named Windows confuse CI zip names |
| Godot | Export presets labeled "Release" promoted to demo branch |
| Shared | Automated upload scripts hard-code default branch |
Add a pre-upload lint step in your demo depot CI that reads BRANCH_NAME env var and rejects empty or banned values.
October freeze rules
After September sign-off:
- Frozen: branch keys, demo depot id, library naming convention doc
- Allowed: typo fixes in build description if scope unchanged
- Forbidden: renaming
defaultto fest branch during fest week—use hotfix promotion on existing fest key only
Document exceptions in sprint-exception-log.md with producer signature.
Beginner path (never used Steamworks branches)
- Read first playtest branch evening.
- Create
fest_demo_2026_10branch—do not reusedefault. - Set build description before first promotion.
- Promote once; cold install.
- Fill proof table; update receipt.
- Schedule Wednesday screenshot habit.
Expect ~3 hours first time; ~20 minutes per promotion afterward.
Publisher FAQ you can answer with this folder
| Partner question | Evidence pointer |
|---|---|
| Which build is live for fest? | BUILD_RECEIPT.build_id + branch row |
| How do players know it is a demo? | Library screenshot + FAQ row 1 |
| Did you test non-dev install? | engineer-signoff.txt |
| What changed last promotion? | promotion-log.txt diff |
Cross-links to store visuals
Branch naming does not replace capsule 32px gates or screenshot beat sheet—but capsule clicks that land on a library label saying "Full Game" convert worse than honest demo labeling. Visual and string parity together define fest-first discipline from capsule opinion.
Operating review cadence
Add a Branch labels row to four Friday five-block operating review Block 2 (builds):
| Week | Question | Evidence |
|---|---|---|
| 1 | Did we promote this week? | promotion-log.txt |
| 2 | Library screenshot current? | Dated PNG |
| 3 | Receipt branch_live matches? |
Diff green |
| 4 | Any banned branch name in CI? | validate-packet log |
Four weeks of green rows beat one heroic pre-fest rename.
Intake compression talking points
Under 72-hour intake windows, partners ask for one live build identity. Opening branch-label-proof.md plus receipt answers the question in under two minutes—without a call where three teammates give three branch names.
Localization and regional builds
If you ship language-specific demo depots, branch keys should encode locale (fest_demo_2026_10_en, fest_demo_2026_10_ja) while build descriptions still include DEMO boundary text in each language per localization QA tools. Never translate "Open Beta" literally into a phrase that implies full-game access in that market.
Crash logs and support macros
Support macros that say "install latest beta from branch default" train players to misidentify scope. Update macros the same day you rename branches—link crash-log challenge artifacts so tickets include build_id and branch string players actually used.
Schedule the first branch-label-proof.md review the same week you create the fest demo branch in Steamworks—naming debt compounds every promotion that ships under default or an ambiguous beta label.
Key takeaways
- Branch names and library labels are player-facing metadata, not internal shorthand.
- Build
branch-label-proof.mdfor every visible string. - Ban
default, ambiguousbeta, and vertical-slice vocabulary unless earned. - Align
BUILD_RECEIPT.branch_livewith Steamworks character-for-character. - Cold-install proof on floor hardware before October.
- Extend Wednesday ritual with library screenshots.
- Pair with depot parity and metadata sprint Day 7.
- Fix playtest emails and partner README bullets together.
- Cheaper than 48-hour store-demo mismatch recovery.
- May renames beat October emergency rebrands.
- Demo patch notes must repeat branch string and
build_idon every promotion.
FAQ
Can we hide branch names from players?
No—library and install UI expose descriptions you set.
Does app title need "Demo" in the name?
Not always—but build description and FAQ must agree on scope.
What about separate demo app id?
Proof table adds a row per app id; same discipline.
How tie to playtest branch tutorial?
Run first playtest branch evening before fest branch creation.
October policy?
Freeze branch keys; description typos only unless scope changes.
Does this replace depot audit?
No—run depot pass first, naming second.
What about 5-day metadata freeze?
Assign branch naming to the builds day in that challenge—do not skip because it is "technical."
Conclusion
Players never see your Steamworks spreadsheet—they see branch labels in the library and the words you put in build descriptions. When those strings promise a beta or a complete experience, every honest FAQ row and About bullet loses credibility before hour one starts.
Rename branches in May while schedules still bend. Screenshot the library on a floor account. Put the same string in BUILD_RECEIPT so the next partner question has one answer, not three Slack guesses.
Pick one naming convention today. Ban default tomorrow. Your fest demo deserves a label that tells the truth before the install bar finishes.
When demo patch notes ship after a promotion, paste the same branch string and build_id in the first line—players who read patch notes and library labels should see one identity, not two stories about what they installed.