Friday October Upload Capstone BUILD_RECEIPT Row Review - Ten Minutes Before Fest Live - 2026

Friday 5:10 p.m., the week before October Next Fest goes live. The localization capstone latched october_upload_window_allowed: true back in September. The depot upload log is filed. The store publish checklist is green. The Wednesday depot smoke said store_publish_allowed. Captions passed the Whisper trailer caption lint. Everyone assumes Monday is safe. Nobody has looked at all eleven receipts on the same screen at the same time.
October 2026 upload week produces a dozen receipts across a dozen folders. Each one was true on the day it was filed. The danger on the last Friday before fest live is not a missing receipt—it is receipt sprawl: store_publish_allowed from Wednesday, a setlive_target_label from Thursday, a caption file hash from a re-export nobody re-checked, and a depot build_id that quietly changed during a Friday hotfix. Each row is individually green. Together they may not describe the same build players will install Monday.
This Process & Workflow article defines a ten-minute Friday upload capstone: pull every October upload cluster receipt into one BUILD_RECEIPT row review, diff the shared identity columns, clear C1-C10, file october_upload_capstone_receipt_v1.json with a child receipt crosswalk, and set fest_live_allowed: true only when the whole story agrees. This is the last human gate before fest goes live.
Non-repetition note: Localization freeze capstone owns the upstream october_upload_window_allowed latch (strings, necessary not sufficient). Wednesday depot smoke owns the mid-week store_publish_allowed latch (installed smoke). Weekly depot jq owns Monday identity. This URL owns the final Friday capstone: a child receipt crosswalk across the whole cluster plus the fest_live_allowed decision.
Pair SteamCMD validation tools, depot label mismatch help, and GameMaker setlive dry-run lesson 270. This capstone closes the October upload cluster #1-#12.
Why this matters now (October 2026 fest live)
- Green receipts filed on different days can disagree. A Wednesday smoke and a Friday hotfix can both be honest and still describe different builds.
- Fest live is a one-way door. Once players install Monday, a wrong branch, caption, or store claim is public, not internal.
- Partners read the root receipt, not folders. A diligence reviewer opens BUILD_RECEIPT, not eleven separate evidence directories.
- Upstream latches are necessary, not sufficient.
october_upload_window_allowedproves strings froze; it says nothing about Friday's depot or captions. - Ten minutes now beats a live-week pager. The capstone is cheap compared to a Monday emergency setlive rollback.
Direct answer: On the last Friday before October Next Fest live, run C1-C10 across every cluster receipt, write october_upload_capstone_receipt_v1.json with a child_receipts[] crosswalk, and latch BUILD_RECEIPT fest_live_allowed: true only when the shared build_id, depot_manifest_sha256, setlive_target_label, and store/caption rows all agree. If any child receipt is stale or contradicts the root, fest live is NO.
Who this ritual is for
| Audience | Outcome |
|---|---|
| Solo founder | A printable ten-minute Friday go/no-go card |
| Producer | One receipt to attach to the partner zip and stand-up |
| Release owner | A fest_live_allowed latch in the same commit as the crosswalk |
| Working dev | A machine-readable child receipt index CI can assert before Monday |
Time: 10 minutes on the last Friday before fest live; optional 5-minute mid-week dry run.
Prerequisites: all cluster child receipts filed (#1-#11), current BUILD_RECEIPT.json, installed client on the intended branch, and the SETLIVE exception list path.
Ritual map - October upload cluster through the Friday latch
| Cluster row | Child receipt | Latch it owns | Capstone gate |
|---|---|---|---|
| #1 Depot upload | steampipe_depot_upload_receipt_v1 |
steampipe_upload_ok |
C3 identity |
| #2 Store publish checklist | october_store_publish_checklist_receipt_v1 |
store_publish_ok |
C6 store |
| #3 Upload dress rehearsal | october_upload_dress_rehearsal_receipt_v1 |
october_upload_dress_rehearsal_ok |
C2 prereq |
| #5 Metadata freeze | october_store_metadata_freeze_receipt_v1 |
october_store_metadata_freeze_ok |
C6 store |
| #6 Trailer thumbnail | october_trailer_thumbnail_receipt_v1 |
october_trailer_thumbnail_ok |
C7 video |
| #7 Weekly depot jq | october_upload_weekly_log.jsonl |
october_upload_weekly_ok |
C4 weekly annex |
| #8 Overtime cap | october_upload_overtime_receipt_v1 |
october_upload_overtime_ok |
C9 spend |
| #9 SETLIVE exception | setlive_exception_list_receipt_v1 |
setlive_exception_list_ok |
C5 branch |
| #10 Wednesday smoke | october_depot_smoke_row_diff_receipt_v1 |
store_publish_allowed |
C6 store |
| #11 Caption lint | trailer_caption_lint_receipt_v1 |
trailer_caption_lint_ok |
C7 video |
| Friday (this) | october_upload_capstone_receipt_v1 |
fest_live_allowed |
C1-C10 |
The default branch recovery case study #4 is the failure mode this capstone exists to prevent: an upstream latch was green, but the Monday setlive targeted the wrong branch. C5 is where you catch it.
Capstone row catalog (what Friday diffs)
Store once in release-evidence/steam/october-upload-capstone-row-catalog.md:
| Row key | Source | Must agree? | Typical stale pattern |
|---|---|---|---|
build_id |
#1, #7, #10 | Yes | Friday hotfix without EXCEPTION-DEPOT |
depot_manifest_sha256 |
#1, #10 | Yes | Rebuilt after Wednesday smoke |
steam_build_id |
#1 | Yes | Still pending / wrong ID |
branch_intent |
#9, #10 | Yes | Silent flip toward default |
setlive_target_label |
#9 | Yes | Label diverges from RC |
setlive_exception_list_ok |
#9 | If default | true without SETLIVE-00N |
store_publish_allowed |
#10 | Yes | Wednesday value reused after re-export |
store_publish_ok |
#2 | Yes | Checklist incomplete |
october_store_metadata_freeze_ok |
#5 | Yes | Copy edited after freeze |
trailer_caption_lint_ok |
#11 | If video shipped | Caption checked on stale export |
october_trailer_thumbnail_ok |
#6 | If video shipped | Thumbnail swapped late |
october_upload_weekly_ok |
#7 | Yes | Missing current ISO week line |
october_upload_overtime_ok |
#8 | If hours spent | Cap exceeded |
october_upload_window_allowed |
localization #11 | Yes | Stale from September |
fest_live_allowed |
this | Output | Set true without C4-C8 |
human_signoff.signed_at_utc |
this | Yes | Unsigned go |
Never delete a row mid-cluster without a receipt_version bump in the diff notes.
Gates C1-C10 (Friday fest-live blockers)
| Gate | Name | Pass criteria | Fail action |
|---|---|---|---|
| C1 | Files exist | Every child receipt path in child_receipts[] resolves on disk |
Locate or refile missing child |
| C2 | Prereqs green | Dress rehearsal + upstream october_upload_window_allowed true |
Return to owner row |
| C3 | Depot identity | build_id, depot_manifest_sha256, steam_build_id match installed footer |
Re-smoke or block |
| C4 | Weekly annex | october_upload_weekly_log.jsonl has current ISO week line |
Append or written waiver |
| C5 | Branch honesty | branch_intent + setlive_target_label match RC; default requires SETLIVE-00N |
Block setlive |
| C6 | Store readiness | store_publish_ok, store_publish_allowed, metadata freeze all true |
Finish checklist |
| C7 | Video truth | Caption + thumbnail latches true if a trailer shipped this week | Re-run lint/thumbnail |
| C8 | Cousin latches | Every claimed surface (dual-SKU, soft-launch, age packet) is indexed | Add child or drop claim |
| C9 | Spend sane | october_upload_overtime_ok true or documented waiver |
Freeze overtime |
| C10 | Capstone latch | october_upload_capstone_receipt_v1.json filed with signoff |
Block fest live |
C3-C6 are hard fest-live blockers when RED. C4 YELLOW allows go only with a written waiver referencing EXCEPTION-DEPOT or a freeze note.
Beginner path - the ten-minute Friday card
If you have never run a capstone, print this and follow it top to bottom:
FRIDAY OCTOBER UPLOAD CAPSTONE - BEFORE FEST LIVE
[ ] C1 every child receipt path opens
[ ] C2 dress rehearsal + october_upload_window_allowed true
[ ] C3 build_id / manifest / steam_build_id match installed footer
[ ] C4 october_upload_weekly_log.jsonl has this ISO week
[ ] C5 branch_intent / setlive_target (default => SETLIVE-00N)
[ ] C6 store_publish_ok + store_publish_allowed + metadata freeze
[ ] C7 caption + thumbnail latches (if a trailer shipped)
[ ] C8 dual-SKU / soft-launch / age packet indexed if claimed
[ ] C9 october_upload_overtime_ok or waiver
[ ] C10 october_upload_capstone_receipt_v1.json + signoff
DECISION: fest_live_allowed = YES / NO
Beginner rule: If you cannot open a child receipt file, that row is RED. A latch you cannot point to is not a latch.
Success check
A teammate who did not run upload week should be able to open october_upload_capstone_receipt_v1.json, follow each child_receipts[] path, and see the same build_id everywhere. If the paths lead to different builds, you found the bug before Monday did.
The receipt schema
Save this as release-evidence/steam/october-upload-capstone/october_upload_capstone_receipt_v1.json:
{
"receipt_version": "october_upload_capstone_receipt_v1",
"fest": "october-2026-next-fest",
"reviewed_on_utc": "2026-10-09T16:10:00Z",
"root_build_id": "2026-10-08-rc-04",
"root_depot_manifest_sha256": "REPLACE_WITH_SHA256",
"steam_build_id": "18542991",
"branch_intent": "fest-demo-rc",
"setlive_target_label": "RC-2026-10",
"child_receipts": [
{
"cluster_row": 1,
"path": "release-evidence/steam/depot-upload/steampipe_depot_upload_receipt_v1.json",
"latch": "steampipe_upload_ok",
"build_id": "2026-10-08-rc-04",
"status": "pass"
},
{
"cluster_row": 10,
"path": "release-evidence/steam/trailer-caption-lint/trailer_caption_lint_receipt_v1.json",
"latch": "trailer_caption_lint_ok",
"build_id": "2026-10-08-rc-04",
"status": "pass"
}
],
"gates": {
"C1_files_exist": "pass",
"C2_prereqs": "pass",
"C3_depot_identity": "pass",
"C4_weekly_annex": "pass",
"C5_branch_honesty": "pass",
"C6_store_readiness": "pass",
"C7_video_truth": "pass",
"C8_cousin_latches": "pass",
"C9_spend": "pass",
"C10_capstone_latch": "pass"
},
"waivers": [],
"human_signoff": {
"role": "release_owner",
"signed_at_utc": "2026-10-09T16:18:00Z"
},
"fest_live_allowed": true
}
List only the child receipts you actually filed. Do not invent a row to make the crosswalk look complete. A missing surface should either get a real child receipt or be dropped from the store claim.
Verification script sketch
The crosswalk is worth a small fail-closed script so CI can block a Monday job:
#!/usr/bin/env bash
set -euo pipefail
RECEIPT="release-evidence/steam/october-upload-capstone/october_upload_capstone_receipt_v1.json"
test -f "$RECEIPT"
ROOT_BUILD=$(jq -r '.root_build_id' "$RECEIPT")
# Every listed child receipt must exist and match the root build_id.
jq -c '.child_receipts[]' "$RECEIPT" | while read -r row; do
path=$(echo "$row" | jq -r '.path')
build=$(echo "$row" | jq -r '.build_id')
if [ ! -f "$path" ]; then
echo "Missing child receipt: $path" >&2
exit 3
fi
if [ "$build" != "$ROOT_BUILD" ]; then
echo "build_id mismatch in $path ($build != $ROOT_BUILD)" >&2
exit 4
fi
done
jq -e '.gates.C3_depot_identity == "pass"' "$RECEIPT" >/dev/null
jq -e '.gates.C5_branch_honesty == "pass"' "$RECEIPT" >/dev/null
jq -e '.gates.C6_store_readiness == "pass"' "$RECEIPT" >/dev/null
jq -e '.fest_live_allowed == true' "$RECEIPT" >/dev/null
echo "october_upload_capstone_ok"
This does not replace human judgment on C7 video truth or C8 cousin claims. It only guarantees the mechanical part: every child receipt exists and points at the same build.
BUILD_RECEIPT handoff
Once C1-C10 are GREEN, write the latch into the root BUILD_RECEIPT:
{
"october_next_fest": {
"october_upload_capstone_receipt": "release-evidence/steam/october-upload-capstone/october_upload_capstone_receipt_v1.json",
"fest_live_allowed": true,
"root_build_id": "2026-10-08-rc-04",
"reviewed_at_utc": "2026-10-09T16:18:00Z"
}
}
Monday's setlive or store-live job should read fest_live_allowed before it runs. If the boolean is false or missing, the job stops. This is the same pattern the SETLIVE exception opinion argues for at the branch level, applied one layer up at the whole-fest level.
Common mistakes
Mistake 1 - Trusting Wednesday's latch on Friday
store_publish_allowed was true Wednesday. If anyone re-exported the build, re-published the store, or fixed a caption after that, the value is stale. C3 and C6 re-check identity on Friday.
Mistake 2 - Setting fest_live_allowed manually
The latch is an output, not an input. If someone sets it true to "unblock the pipeline" without running C1-C10, the capstone becomes theater. Keep the boolean downstream of the gates.
Mistake 3 - Skipping the weekly annex
C4 fails quietly when the weekly depot jq jsonl stops a week before fest live. A missing line is not an empty line; it means nobody checked identity that week.
Mistake 4 - Indexing a claim with no child receipt
If the store page claims dual-SKU, soft-launch, or an age rating, C8 requires a real child receipt for it. A claim with no receipt is a diligence gap, not a green row.
Mistake 5 - Letting a Friday hotfix bypass the capstone
The most dangerous build is the one uploaded at 4:50 p.m. Friday "to be safe." If build_id changed after the last child receipt, the capstone must re-run, not rubber-stamp.
The optional mid-week dry run
Ten minutes on Friday is easier when you have already looked once mid-week. A five-minute Wednesday or Thursday dry run is not the capstone, but it surfaces the slow problems early:
- Do all child receipt paths already resolve? Missing files are cheaper to refile on Wednesday than at 5 p.m. Friday.
- Is the weekly jsonl current? If C4's annex is a week behind, you have time to append it before the go/no-go.
- Does the store page still match the depot? Metadata edits made mid-week are the most common source of a stale
store_publish_allowed.
Treat the dry run as a checklist rehearsal, not a decision. Do not set fest_live_allowed on Wednesday. The point is to make Friday boring: by the time you sign, the only thing left to confirm is that nothing changed after the last child receipt.
A useful habit is to keep the dry-run notes in the same folder as the capstone, named october-upload-capstone-dryrun-notes.md. It gives you a paper trail if a Friday hotfix forces a re-run and someone asks what changed between the dry run and the final sign-off.
A worked failure scenario
Here is the exact situation the capstone is built to catch.
Wednesday, the depot smoke passed on build_id 2026-10-08-rc-03. store_publish_allowed went true. Thursday, marketing published the store page and the trailer with correct captions. Everyone relaxed.
Friday 4:50 p.m., an engineer fixes a crash and uploads 2026-10-08-rc-04. It is a good fix. But now:
- The depot upload receipt references
rc-04. - The Wednesday smoke receipt still references
rc-03. - The caption lint was run against the
rc-03trailer, which is fine because the trailer did not change—but nobody has confirmed that. - The SETLIVE target label still says
RC-2026-10, which is correct, but the branch now holdsrc-04.
Every individual receipt is honest. Without the capstone, the team ships Monday assuming Wednesday's green still holds. With the capstone, C3 immediately flags that the installed footer says rc-04 while the smoke child receipt says rc-03. The reviewer re-smokes rc-04, confirms the trailer and captions are unaffected, updates the child receipt build ids, re-signs, and latches fest_live_allowed. The crash fix ships and the receipts agree.
The cost of catching this on Friday is one re-smoke. The cost of catching it Monday is a live-week rollback and a public trust hit. That asymmetry is the entire argument for the ritual.
Producer and enterprise diligence notes
The capstone is the single artifact that makes upload week auditable:
| Concern | What the capstone proves |
|---|---|
| Release integrity | Every surface points at one build_id and manifest |
| Branch safety | setlive_target_label matches RC, default requires an exception list |
| Store truth | Publish, metadata, caption, and thumbnail latches agree |
| Cost control | Overtime cap was respected or waived with an owner |
| Audit trail | One receipt links to every child receipt and a human signoff |
For partner packets, attach october_upload_capstone_receipt_v1.json and let the reviewer walk the child_receipts[] paths. A capstone that resolves to eleven consistent child receipts is far stronger diligence than eleven screenshots.
How this fits Steam's live-week reality
Steam Next Fest schedules and Steamworks behavior change between events, so confirm current rules before you rely on them. Start with the official Steamworks Store Presence documentation and the Steam Next Fest guidance inside Steamworks. Use this capstone as your internal go/no-go, not as a substitute for platform requirements.
The stable principle: the build you smoke-test, the build your store page describes, the build your captions match, and the build setlive promotes must all be the same build. The capstone is where you prove that on the last Friday before players can see it.
Key takeaways
- October upload week produces many green receipts on different days; the Friday capstone makes them meet in one row.
- Gates C1-C10 run on
october_upload_capstone_receipt_v1.jsonwith achild_receipts[]crosswalk. - Latch
fest_live_allowed: trueonly when depot, store, caption, and setlive rows share onebuild_id. - This capstone is distinct from the localization capstone (
october_upload_window_allowed, upstream) and Wednesday smoke (store_publish_allowed, mid-week). - C3, C5, and C6 are hard fest-live blockers when RED.
- A Friday hotfix that changes
build_idforces a re-run, not a rubber stamp. fest_live_allowedis an output of the gates, never a manual override.- Pair SteamCMD tools and depot label mismatch help for release proof and recovery.
- Attach the capstone receipt to partner zips instead of loose screenshots.
- This capstone closes the October upload cluster #1-#12.
- After fest ends, pair post-fest branch unset evening for
branch_unset_okbefore November store edits (November cluster #1).
FAQ
How is this different from the localization Friday capstone?
The localization capstone latches october_upload_window_allowed, which proves strings froze. That is an input to this capstone, not a substitute. This one gates fest_live_allowed across depot, store, caption, and branch rows.
How is it different from the Wednesday depot smoke?
Wednesday smoke proves the mid-week installed build and latches store_publish_allowed. The Friday capstone runs after all mid-week work is done and checks that nothing drifted before fest goes live.
What if a child receipt is missing?
C1 fails. Either the receipt was never filed, in which case run that cluster row, or the path is wrong, in which case fix the crosswalk. Do not mark C1 green with a missing file.
Can fest_live_allowed be true with an open waiver?
Yes, for YELLOW gates like C4 or C9 if the waiver is documented with an owner and reason in waivers[]. No, for C3, C5, or C6 identity failures. Those must be fixed before go.
Do I need the capstone if I did not ship a trailer this week?
Yes. Mark C7 as not applicable with a note, but still run C3-C6 and C10. The capstone is about build and store identity, not only video.
What triggers a re-run before Monday?
Any change to build_id, depot_manifest_sha256, setlive_target_label, store metadata, or the caption/thumbnail files after the capstone was signed. Re-run C1-C10 and re-sign.
Related reads
- Wednesday Depot Smoke BUILD_RECEIPT Row Review Before Thursday Store Publish
- Friday Localization Freeze Capstone BUILD_RECEIPT Row Review Before October Upload
- Whisper Upload-Week Trailer Caption Lint Before Store Video Slot
- jq Gate Sketch for october_upload Weekly Depot Row Diff
- Stop Running setlive on Default Without a Numbered SETLIVE Exception List
- We Recovered the Wrong Steam Default Branch After Localization Capstone GREEN
- Your First SteamFest Branch Unset and Default Branch Return Receipt After October Live — November cluster #1; U1 reads
fest_live_allowedfrom this capstone - 10 Free SteamCMD SteamGuard Depot Owner Validation Tools
- Help: Steam Depot Promoted Playtest Build Label Mismatch
- Official docs: Steamworks Store Presence
Closing
The last Friday before fest live is when every receipt from upload week should stand in one line and tell the same story. Run the ten-minute capstone, walk the child receipts, and let fest_live_allowed be a decision you made on purpose—not a boolean left over from Wednesday. When Monday's setlive job reads one green latch backed by eleven consistent receipts, fest live stops being a leap of faith and becomes a row review you already passed.