Your First Steam Next Fest February 2027 RC Branch Label Receipt Before Store Upload in One Evening - 2026

Late January 2027: January re-entry smoke is GREEN on fest-demo-2026-12-rc3. Engineering bumps the candidate to fest-demo-2027-02-rc1. Steamworks upload succeeds. BUILD_RECEIPT still lists December. The player-visible footer still shows rc3. Discord celebrates "RC1 is live" while the library branch points at last week's depot.
February 2027 Steam Next Fest RC week punishes label drift harder than upload failures. Teams that fixed holiday freeze with defer receipts and capstone row review still promote branches when three strings disagree: Steam branch assignment, BUILD_RECEIPT build_label, and the player-visible label in credits or title footer. February prep calendar gives dates; visible build label opinion gives policy—this Tutorials & Beginner-First evening closes the RC branch label receipt gap before store upload and setlive.
Non-repetition note: GameMaker setlive dry-run evening owns S1–S6 staging setlive. January re-entry smoke owns post-freeze baseline R1–R6. Branch naming checklist owns library label parity. This URL owns *`fest-demo-2027-02-rc` label unity** across receipt, branch screenshot, and UI before February RC upload.
Pair BUILD_RECEIPT beginner, Wednesday smoke, Guide #32 setlive preflight forward, and Course 270 forward.
Why this matters now (February 2027 RC week)
- RC cadence compresses — Teams target
rc1→rc2→rc3in two weeks; each bump needs label proof, not verbal Discord. - January baseline ≠ February candidate — Re-entry smoke on December label does not authorize February promotion without new receipt.
- Player-visible label enforcement — Opinion piece is now default fest discipline; smoke must compare UI string to receipt.
- Multi-surface uploads — Playtest, fest_public, and press keys need one runbook string per RC—not three Slack variants.
- Thursday row review expects columns —
build_label,fest_branch,visible_build_label_okmust align before row review passes.
Direct answer: Bump build_label to fest-demo-2027-02-rc1 (example pattern); screenshot Steamworks Branches; capture player-visible footer screenshot; file february_rc_branch_label_receipt_v1.json with gates L1–L6; set BUILD_RECEIPT february_rc_label_ok: true before store branch promotion or setlive.
Who this is for and what you get
| Audience | Outcome |
|---|---|
| Beginner | RC label + branch screenshot ritual in one evening |
| Solo founder | Stop promoting rc1 while UI shows rc3 |
| Producer | Gate February upload on label receipt |
| Working dev | jq crosswalk BUILD_RECEIPT ↔ UI ↔ branch |
Time: ~75–90 minutes first RC; ~20 minutes per subsequent rc2/rc3 bump after template exists.
Prerequisites: January re-entry smoke GREEN or documented SHIP exception; fest branch name in runbook; non-dev test account.
Format ladder (same cluster)
| Artifact | Role |
|---|---|
| January re-entry | Post-freeze baseline |
| This evening | February RC label unity before upload |
| GameMaker setlive dry-run | Staging setlive proof |
| Wednesday smoke | Binary golden path after promote |
| 7-day RC challenge forward (#4) | Daily discipline calendar |
Order: January re-entry GREEN → this label receipt → upload/branch promotion → Wednesday smoke on new build_label.
Gates L1–L6 (February RC blockers)
| Gate | Name | Pass criteria |
|---|---|---|
| L1 | Label pattern | build_label matches fest-demo-2027-02-rc* (team convention documented) |
| L2 | Branch screenshot | Steamworks Branches shows fest branch assigned to intended build |
| L3 | BUILD_RECEIPT parity | Root receipt build_label equals label receipt expected_build_label |
| L4 | Player-visible label | Credits/footer screenshot string equals build_label (see opinion) |
| L5 | Library label parity | Steam library beta branch name matches branch naming checklist |
| L6 | Receipt filed | february_rc_branch_label_receipt_v1.json committed; february_rc_label_ok: true on BUILD_RECEIPT |
L3–L5 are promotion blockers when RED. L2 YELLOW only with producer waiver when screenshot redacted for partner NDA—document in receipt notes.
Evening overview (four blocks)
| Block | Minutes | Output |
|---|---|---|
| A — Name the RC | 15 | fest-demo-2027-02-rc1 in runbook + receipt draft |
| B — Branch screenshot | 20 | L2 PNG from Steamworks |
| C — Player-visible capture | 25 | L4 screenshot from installed build |
| D — Receipt + BUILD_RECEIPT | 25 | JSON + root row |
Run after January re-entry and before production upload/setlive—pair Thursday row review same week.
Block A — RC label naming convention (beginner)
Document once in release-evidence/ops/february-rc-label-policy.md:
# February 2027 RC label policy
pattern: fest-demo-2027-02-rc{N}
examples:
- fest-demo-2027-02-rc1 # first February candidate after re-entry
- fest-demo-2027-02-rc2 # hotfix after playtest
surface: fest_public
branch: nextfest-feb-2027
forbidden: bare "rc1", "feb-demo", unversioned "fest-demo"
Beginner mistake: using rc1 without year/month prefix—breaks jq crosswalk with November/December receipts and jq capstone child labels.
RC bump decision tree
| Situation | New label? | Receipt action |
|---|---|---|
| First February candidate after re-entry | Yes → rc1 |
New february receipt |
| Hotfix same scope, same depot intent | Yes → rc2 |
New receipt; archive rc1 |
| Store copy only | No | Metadata diff—not this article |
| Revert to prior depot | Yes → restore old label | Receipt notes reverted_from |
Block B — Steamworks branch screenshot (L2)
- Open Steamworks → App Admin → Installs → Branches.
- Select fest branch (e.g.
nextfest-feb-2027). - Confirm build ID matches upload log row for tonight's candidate.
- Screenshot full row including branch name and build number.
- Save as
release-evidence/steam/february-rc/2027-02-rc1_branch_screenshot.png.
Cross-check branch string against 12 setlive checks check 3 and GameMaker setlive evening S1—same evidence, different gate names.
Block C — Player-visible label capture (L4)
Install the candidate build on a test account (not editor). Open credits, title footer, or hold-to-view debug panel per visible label opinion.
Record:
| Field | Example |
|---|---|
| UI location | credits footer line 3 |
| Observed string | fest-demo-2027-02-rc1 |
| Matches BUILD_RECEIPT | true |
| Screenshot path | .../player_visible_label_rc1.png |
If strings differ by one character (rc1 vs RC1), L4 RED—fix pipeline string normalization before upload. Case-sensitive compare unless team policy documents otherwise.
Optional: file sibling visible_build_label_receipt_v1.json when audit trail requires separate schema—february receipt may index path in visible_label_receipt_path.
february_rc_branch_label_receipt_v1.json (schema)
{
"schema": "february_rc_branch_label_receipt_v1",
"iso_week": "2027-W05",
"expected_build_label": "fest-demo-2027-02-rc1",
"fest_branch": "nextfest-feb-2027",
"steam_build_id": "12345678",
"surface": "fest_public",
"gates": {
"L1": "GREEN",
"L2": "GREEN",
"L3": "GREEN",
"L4": "GREEN",
"L5": "GREEN",
"L6": "GREEN"
},
"evidence": {
"branch_screenshot": "release-evidence/steam/february-rc/2027-02-rc1_branch_screenshot.png",
"player_visible_screenshot": "release-evidence/steam/february-rc/player_visible_label_rc1.png",
"january_reentry_receipt": "release-evidence/03-builds/january-reentry/2027-W01/january_reentry_smoke_receipt_v1.json"
},
"february_rc_label_ok": true,
"promotion_allowed": true,
"notes": "First February RC after re-entry baseline fest-demo-2026-12-rc3"
}
BUILD_RECEIPT root rows (same commit)
{
"build_label": "fest-demo-2027-02-rc1",
"fest_branch": "nextfest-feb-2027",
"surface": "fest_public",
"february_rc_label_ok": true,
"february_rc_branch_label_receipt": "release-evidence/steam/february-rc/february_rc_branch_label_receipt_v1.json",
"visible_build_label_ok": true,
"january_reentry_smoke_ok": true
}
promotion_allowed on label receipt is true only when L1–L6 GREEN—distinct from Wednesday demo_smoke.promotion_allowed.
jq gate sketch (working dev)
jq -e '
.expected_build_label == .build_label
and (.expected_build_label | test("^fest-demo-2027-02-rc[0-9]+$"))
and .february_rc_label_ok == true
and .gates.L4 == "GREEN"
' february_rc_branch_label_receipt_v1.json
Merge check against BUILD_RECEIPT:
jq -e --slurpfile br BUILD_RECEIPT.json '
.build_label == $br[0].build_label
and .february_rc_label_ok == $br[0].february_rc_label_ok
' february_rc_branch_label_receipt_v1.json
PowerShell:
jq -e '.february_rc_label_ok == true' .\february_rc_branch_label_receipt_v1.json
if ($LASTEXITCODE -ne 0) { throw "L6 gate failed" }
Proof table
| Evidence | Proves | Fail signal |
|---|---|---|
| Branch screenshot | L2 depot assignment | Upload log without branch move |
| Player-visible screenshot | L4 UI truth | Internal-only CI label |
| Label receipt JSON | L1–L6 human gate | Verbal "rc1 is live" |
| BUILD_RECEIPT row | Team-level latch | Receipt without root update |
| January re-entry pointer | Baseline lineage | Mystery bump from December |
| Upload log CSV row | Byte upload happened | Label receipt without upload |
Scenarios A–G
| ID | Situation | Move |
|---|---|---|
| A | First rc1 after GREEN re-entry |
Full L1–L6; then upload |
| B | rc1 UI shows December label |
L4 RED; fix pipeline before promote |
| C | Branch screenshot shows wrong build ID | L2 RED; re-upload or fix assignment |
| D | Playtest branch label differs from fest | Separate receipts per surface (isolation playbook) |
| E | Hotfix rc2 same evening |
New receipt; do not edit rc1 JSON in place |
| F | Solo dev, no second account | L5 YELLOW with library screenshot from primary account—document waiver |
| G | GameMaker exporter | Pair setlive dry-run after L6 GREEN |
One-evening worked example
| Time | Action | Gate |
|---|---|---|
| 18:00 | Confirm January re-entry receipt path | baseline |
| 18:15 | Set fest-demo-2027-02-rc1 in runbook |
L1 |
| 18:30 | Steamworks branch screenshot | L2 |
| 18:50 | Install candidate; capture footer | L4 |
| 19:05 | Library beta name check | L5 |
| 19:20 | Write JSON; update BUILD_RECEIPT | L3, L6 |
| 19:30 | Hand off to upload/setlive owner |
— |
Common mistakes
| Mistake | Fix |
|---|---|
| Bumping label without new receipt | File new JSON per RC |
| Promoting on upload success alone | L2 branch screenshot required |
| Skipping player-visible check | L4 is not optional for fest_public |
| Reusing January re-entry as February proof | Re-entry ≠ RC candidate |
| Three branch names in Slack | One runbook string in L5 |
Promotion checklist (append to runbook)
[ ] January re-entry smoke GREEN (or documented exception)
[ ] build_label matches fest-demo-2027-02-rc{N} pattern
[ ] february_rc_branch_label_receipt_v1.json L1–L6 GREEN
[ ] BUILD_RECEIPT february_rc_label_ok == true
[ ] Player-visible label screenshot attached
[ ] Branch screenshot attached
[ ] setlive dry-run (engine-specific) scheduled
[ ] Wednesday smoke calendar invite for post-promote week
Counterarguments (honest limits)
"Steam build ID is enough."
Partners and players reference build_label in Discord and crash reports—not seven-digit IDs alone.
"We will fix the footer after upload."
Fixing after promote ships the wrong label to early fest traffic; L4 runs on candidate before promotion.
"Same as setlive dry-run evening."
Setlive proves branch pointer move; this receipt proves label unity across receipt, UI, and branch naming before bytes move.
Engine-specific label wiring (working dev)
The receipt schema is engine-agnostic; the string source is not. Wire one generator so UI, BUILD_RECEIPT, and upload log never dual-enter.
| Engine | Typical source | February RC pitfall |
|---|---|---|
| Unity | Application.version or custom BuildInfo ScriptableObject baked at CI |
Player Settings version left at 0.1 while receipt says rc1 |
| Godot 4 | ProjectSettings custom application/config/build_label read in credits scene |
Export preset not passing define to release export |
| GameMaker | GM_version macro or game_display_version in Create event |
IDE test build shows different string than Steam export |
| Unreal | BuildSettings + UGameplayStatics::GetGameVersion() override |
Shipping config not stamping fest label on demo target |
| Ren'Py | config.version + build_info.rpy |
VN classification label diverges from Steam branch (7-day Ren'Py freeze) |
Rule: CI writes expected_build_label into the artifact; evening ritual only verifies it on screen—do not hand-edit credits the night before upload unless the pipeline is broken and you file a SHIP exception.
Archive pattern per RC bump
Never overwrite february_rc_branch_label_receipt_v1.json when moving rc1 → rc2. Use dated paths:
release-evidence/steam/february-rc/
2027-02-rc1/february_rc_branch_label_receipt_v1.json
2027-02-rc2/february_rc_branch_label_receipt_v1.json
BUILD_RECEIPT points at the latest path; Thursday row review diffs whether root build_label moved without a new child receipt—same discipline as November capstone child booleans.
Thursday row review columns (pair same week)
After L6 GREEN, expect these columns on the weekly diff:
| Column | February RC expectation |
|---|---|
build_label |
fest-demo-2027-02-rc{N} |
fest_branch |
nextfest-feb-2027 (or team key) |
february_rc_label_ok |
true |
visible_build_label_ok |
true |
january_reentry_smoke_ok |
true (baseline lineage) |
february_rc_branch_label_receipt |
path to tonight's JSON |
If build_label changes but february_rc_label_ok stays false, row review should RED even when upload log shows bytes moved—prevents "silent rc2" where only Steam knows the truth.
Discord and partner announcement template
Paste only after L1–L6 GREEN:
February RC candidate ready for upload review
build_label: fest-demo-2027-02-rc1
fest_branch: nextfest-feb-2027
steam_build_id: 12345678
february_rc_label_ok: true
evidence: release-evidence/steam/february-rc/2027-02-rc1/
player-visible label screenshot: attached
BLOCKED until setlive dry-run + Wednesday smoke on promoted build
Community managers trained on visible label opinion should ask reporters for label screenshot first—this template trains internal channels the same way.
Pairing with February prep calendar phases
Map receipt timing to prep calendar phases:
| Calendar phase | Label receipt role |
|---|---|
| Pre-freeze lock | Document fest-demo-2027-02-rc* pattern in runbook only |
| January re-entry | Re-entry smoke proves frozen baseline |
| Festival approach | This evening per RC before upload/setlive |
| Final month | Repeat for rc2/rc3 hotfixes; forward #4 seven-day challenge |
Teams that skip label receipt in "festival approach" often discover library/UI drift during creator key sends—when streamers install the wrong depot and cannot cite a label.
Outbound references
- Steamworks Builds documentation — branch and build assignment
- Steamworks Branches — beta branch configuration
Related GamineAI reads
- January re-entry Wednesday smoke
- February 2027 prep calendar
- Visible build label opinion
- Demo branch naming checklist
- GameMaker setlive dry-run evening
- Wednesday demo smoke
- Thursday row review
- BUILD_RECEIPT beginner pipeline
- Steam Playtest isolation resource
- 12 setlive preflight checks
Key takeaways
- February RC needs *`fest-demo-2027-02-rc`** label unity—not just upload success.
- Run after January re-entry and before branch promotion.
- Gates L3–L5 tie BUILD_RECEIPT, branch screenshot, and player-visible UI together.
- File
february_rc_branch_label_receipt_v1.jsonper RC bump—do not edit prior JSON in place. february_rc_label_okon BUILD_RECEIPT latches team promotion permission.- Visible label opinion makes L4 mandatory for fest_public.
- Pair setlive dry-run for engine-specific branch moves.
- February calendar dates assume this receipt before January upload week.
- jq gates optional after manual discipline works one RC cycle.
- Each
rc2/rc3hotfix gets a new receipt file. - Forward #4 seven-day RC smoke challenge extends daily discipline.
- Wednesday smoke runs after promote on the new
build_label.
FAQ
Is this the same as January re-entry smoke?
No. Re-entry verifies the frozen baseline. This receipt verifies February RC label alignment before upload/promote.
Must the label include 2027-02?
Use your team convention; this article recommends fest-demo-2027-02-rc{N} to avoid collision with October/December labels.
Can I skip the player-visible screenshot?
Not for fest_public demos under visible label opinion—L4 RED blocks promotion.
What if only store metadata changed?
Run Wednesday metadata diff—not this label receipt.
Does this replace setlive dry-run?
No—sequence is label receipt → upload → setlive dry-run → Wednesday smoke.
How does this relate to Course 270?
Lesson 270 forward BUILD_RECEIPT milestone expects setlive receipt; this blog is the February RC label evening strategy layer.
Closing
February Next Fest RC week is not the time to discover that three systems disagree on what you called the build. One evening spent on branch screenshots, player-visible captures, and february_rc_branch_label_receipt_v1.json buys a promotion story partners and players can actually reference.
Bump the label deliberately, prove it in three places, file the receipt, then upload. If L4 fails, fix the footer before the branch moves—not after Discord announces "we're live."
Next: 7-day February RC smoke challenge — C1–C7 daily ladder during late January RC week.