Programming & Technical Jul 16, 2026

jq Gate Sketch for october_upload Weekly Depot Row Diff - 2026

2026 jq gate sketch—weekly october_upload depot row diff after SteamPipe evening latch; J1–J6 depot schema (≠ locale weekly / April catalog), october_upload_weekly_log.jsonl, verify_october_upload_weekly.sh.

By GamineAI Team

jq Gate Sketch for october_upload Weekly Depot Row Diff - 2026

Pixel-art hero for jq gate sketch october upload weekly depot row diff 2026

Week two after SteamPipe depot upload evening: steampipe_upload_ok: true, steampipe_upload_log.jsonl has a clean build_id line, Friday localization capstone opened october_upload_window_allowed. Tuesday marketing ships a capsule tag hotfix. Wednesday engineering uploads a “tiny” crash fix without appending jsonl. Thursday someone runs setlive against default because the RC label “looked fine.” Monday stand-up asks “did our depot identity drift since last week?” Someone pastes localization weekly jq—wrong schema: freeze weekly diffs locale_ids and Weblate pins. April catalog weekly diffs Addressables catalog_sha256. Upload weeks need depot identitybuild_id, manifest hash, steam_build_id, branch intent, RC label—week-over-week.

September–October 2026 punish teams that treat the Monday upload evening U1–U6 latch as forever-honest while producers obsess over store copy. Silent rebuilds and branch promotions reopen upload risk while BUILD_RECEIPT still says green.

This Programming & Technical sketch ships a weekly instance of October upload depot honesty: october_upload_weekly_log.jsonl, weekly receipt fields on october_upload_weekly_v1, verify_october_upload_weekly.sh, gates J1–J6 on the depot schema (same letter prefix as locale/April cousins; different columns).

Non-repetition note: Localization freeze weekly jq owns locale IDs and string pins. April catalog jq owns Addressables catalog hashes. March sprint jq owns post-fest BUILD_RECEIPT sprint rows. Depot upload evening owns one-evening U1–U6 latch + jsonl append discipline. Forward #10 owns Wednesday depot smoke row review. Forward #12 owns Friday upload capstone. This URL owns Monday weekly depot manifest / build_id / branch intent diff through the October upload window.

Pair depot upload evening #1, localization weekly jq (cousin cadence), upload dress rehearsal #3, Guide #56 / Course 296 / Help #61 forward; forward blog #8 overtime worksheet and #10 Wednesday smoke.

Why this matters now (September–October 2026)

  1. Upload evening is a point latch — U6 proves one night; weeks silently upload new builds without weekly depot diff.
  2. Store copy steals attentionMetadata freeze trend work crowds out depot manifest honesty.
  3. Branch intent driftsWrong default branch recovery shows RC labels lie while default still receives setlive.
  4. October upload queues — Discovering hash mismatch on fest-live Monday is too late for honest receipts.
  5. Wrong jq cousin ruins CI — Locale and catalog scripts pass while build_id hashes lie.

Direct answer: Each ISO week after october_upload_window_allowed, append october_upload_weekly_log.jsonl, file a weekly receipt with depot_row_diff[], run verify_october_upload_weekly.sh, clear J1–J6, set BUILD_RECEIPT october_upload_weekly_ok: true. Any unexplained depot_manifest_sha256 or steam_build_id delta requires a documented exception or a new upload evening receipt.

Who this sketch is for

Audience You will…
Beginner Run Monday build_id / manifest hash one-liners
Facilitator Paste weekly depot diff into #october-upload
Engineer Cron Monday 09:00 from upload window open through fest live
Producer Block setlive until J5 honesty clears

Time: ~45 minutes first weekly template; ~6–10 minutes per Monday after scripts pin.

Prerequisites: Depot upload evening U6 GREEN; steampipe_upload_log.jsonl path known; depot_manifest_v1.json exported from your build pipeline; jq on CI or facilitator laptop.

Beginner path — Monday checklist (5–10 minutes)

  1. Open last week’s upload pointer from BUILD_RECEIPT (steampipe_upload_ok, latest receipt path).
  2. Read tail of steampipe_upload_log.jsonl for current build_id and steam_build_id.
  3. Hash depot_manifest_v1.json (sha256sum / Get-FileHash).
  4. Compare to last Monday’s jsonl line—same build_id and hash?
  5. Confirm branch_intent still matches fest RC label (not silent default).
  6. If hash, build, or branch changed without a receipt note → stop setlive; file exception or rerun upload evening.
  7. Paste results into stand-up.

Memorize one sentence: Locale weekly = language identity; depot weekly = build identity.

Question Locale freeze weekly jq This october_upload depot jq
When? ISO weeks after localization_freeze_ok ISO weeks after october_upload_window_allowed
Log file localization_freeze_weekly_log.jsonl october_upload_weekly_log.jsonl
Anchor Freeze receipt + Weblate pin Upload receipt + steampipe log tail
Diff fields locale_ids[], strings_per_locale, weblate_pin build_id, depot_manifest_sha256, steam_build_id, branch_intent, rc_label
Prereq Freeze evening L1–L6 Depot upload U1–U6 + capstone window
Wrong reuse April catalog schema Locale freeze schema

Beginner mistake: Appending locale weekly lines into a steam folder—use a new jsonl and depot columns once upload window opens.

Format ladder

Artifact Role
Localization capstone Opens october_upload_window_allowed
Depot upload evening One-evening U1–U6 + jsonl append
This jq sketch Weekly depot row diff J1–J6
Forward #10 Wednesday depot smoke row review Mid-week promote ritual
Forward #12 Friday upload capstone Ten-minute pre-fest-live latch
Locale weekly jq Cousin cadence, different columns
Guide #56 forward One tool step

Order: Capstone Friday → depot upload Monday → weekly depot jq through upload week → Wednesday #10 smoke → Friday #12 capstone.

Developer path — gates J1–J6 (depot schema)

These J gates belong to october upload weekly depot—not localization freeze weekly J1–J6 and not April catalog J1–J6.

Gate Pass criterion
J1 Weekly receipt schema is october upload weekly (schema string documents october_upload_weekly_v1) and iso_week set
J2 Upload window pointer resolves (october_upload_window_allowed true; capstone or upload receipt path present)
J3 Prior ISO week jsonl line exists (or week-1 bootstrap note referencing depot upload night)
J4 build_id non-empty, depot_manifest_sha256 non-empty, primary_depot_id matches manifest
J5 depot_row_diff[] honest for build_id, manifest hash, steam_build_id, branch_intent, rc_label (no silent rebuilds)
J6 Receipt filed; BUILD_RECEIPT october_upload_weekly_ok: true

Weekly receipt template

File as release-evidence/steam/weekly/2026-W40.json (example):

{
  "schema": "october_upload_weekly_v1",
  "iso_week": "2026-W40",
  "upload_window_pointer": {
    "path": "release-evidence/steam/2026-09-29/steampipe_depot_upload_receipt_v1.json",
    "october_upload_window_allowed": true,
    "steampipe_upload_ok": true,
    "capstone_receipt": "release-evidence/localization/2026-09-26/localization_freeze_capstone_receipt_v1.json"
  },
  "snapshot": {
    "manifest_path": "release-evidence/steam/2026-10-06/depot_manifest_v1.json",
    "depot_manifest_sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "build_id": "october-fest-rc-20261006-143022",
    "steam_build_id": "12345678",
    "primary_depot_id": "987654",
    "branch_intent": "fest_rc",
    "rc_label": "october_next_fest_2026_rc",
    "setlive_target_label": "october_next_fest_2026_rc",
    "default_branch_flag": false,
    "steampipe_log_tail": {
      "path": "release-evidence/steam/steampipe_upload_log.jsonl",
      "last_event": "depot_upload",
      "last_line_build_id": "october-fest-rc-20261006-143022"
    }
  },
  "depot_row_diff": [
    {
      "field": "build_id",
      "before": "october-fest-rc-20260929-091544",
      "after": "october-fest-rc-20261006-143022",
      "delta": "changed",
      "note": "EXCEPTION-DEPOT-002: crash fix upload W40; steampipe jsonl line 14 appended"
    },
    {
      "field": "depot_manifest_sha256",
      "before": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
      "after": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "delta": "changed",
      "note": "EXCEPTION-DEPOT-002: matches new build_id"
    },
    {
      "field": "steam_build_id",
      "before": "12345601",
      "after": "12345678",
      "delta": "changed",
      "note": "EXCEPTION-DEPOT-002"
    },
    {
      "field": "branch_intent",
      "before": "fest_rc",
      "after": "fest_rc",
      "delta": "unchanged"
    },
    {
      "field": "rc_label",
      "before": "october_next_fest_2026_rc",
      "after": "october_next_fest_2026_rc",
      "delta": "unchanged"
    },
    {
      "field": "default_branch_flag",
      "before": false,
      "after": false,
      "delta": "unchanged"
    }
  ],
  "gates": {
    "J1": "GREEN",
    "J2": "GREEN",
    "J3": "GREEN",
    "J4": "GREEN",
    "J5": "GREEN",
    "J6": "GREEN"
  },
  "october_upload_weekly_ok": true,
  "notes": "W40 crash fix authorized; setlive still targets fest_rc not default"
}

Weekly log (jsonl)

release-evidence/steam/october_upload_weekly_log.jsonlone line per ISO week:

{"iso_week":"2026-W39","build_id":"october-fest-rc-20260929-091544","depot_manifest_sha256":"sha256:bbbb…","steam_build_id":"12345601","branch_intent":"fest_rc","rc_label":"october_next_fest_2026_rc","receipt":"release-evidence/steam/weekly/2026-W39.json"}
{"iso_week":"2026-W40","build_id":"october-fest-rc-20261006-143022","depot_manifest_sha256":"sha256:aaaa…","steam_build_id":"12345678","branch_intent":"fest_rc","rc_label":"october_next_fest_2026_rc","receipt":"release-evidence/steam/weekly/2026-W40.json"}

BUILD_RECEIPT latch fields:

{
  "october_upload_window_allowed": true,
  "steampipe_upload_ok": true,
  "october_upload_weekly_ok": true,
  "october_upload_weekly_receipt": "release-evidence/steam/weekly/2026-W40.json"
}

Keep steampipe_upload_ok as the night of upload latch. Weekly OK is ongoing depot honesty—orthogonal columns. Locale weekly (localization_freeze_weekly_ok) and depot weekly both may be true simultaneously—do not merge verify scripts.

Copy-paste jq one-liners

Schema + latch

jq -e '.schema == "october_upload_weekly_v1"
  and .october_upload_weekly_ok == true' \
  release-evidence/steam/weekly/2026-W40.json

Upload window pointer

jq -e '.upload_window_pointer.october_upload_window_allowed == true
  and .upload_window_pointer.steampipe_upload_ok == true' \
  release-evidence/steam/weekly/2026-W40.json

Manifest hash matches on-disk file

MANIFEST=$(jq -r .snapshot.manifest_path release-evidence/steam/weekly/2026-W40.json)
EXPECTED=$(jq -r .snapshot.depot_manifest_sha256 release-evidence/steam/weekly/2026-W40.json)
ACTUAL="sha256:$(sha256sum "$MANIFEST" | awk '{print $1}')"
test "$EXPECTED" = "$ACTUAL"

Diff vs prior jsonl week (build_id)

PREV=$(jq -s -r '.[-2].build_id' release-evidence/steam/october_upload_weekly_log.jsonl)
CUR=$(jq -s -r '.[-1].build_id' release-evidence/steam/october_upload_weekly_log.jsonl)
echo "prev=$PREV"
echo "cur=$CUR"
if [ "$PREV" != "$CUR" ]; then
  jq -e 'any(.depot_row_diff[]; .field == "build_id" and (.note | startswith("EXCEPTION-DEPOT-")))' \
    release-evidence/steam/weekly/2026-W40.json
fi

Branch intent must not silently flip to default

jq -e '
  .snapshot.branch_intent == "fest_rc"
  and .snapshot.default_branch_flag == false
  and .snapshot.setlive_target_label == .snapshot.rc_label
' release-evidence/steam/weekly/2026-W40.json

Steampipe log tail agrees with snapshot build_id

LOG="release-evidence/steam/steampipe_upload_log.jsonl"
TAIL=$(jq -s -r '.[-1].build_id' "$LOG")
SNAP=$(jq -r .snapshot.build_id release-evidence/steam/weekly/2026-W40.json)
test "$TAIL" = "$SNAP"

Honest exception for rebuild weeks only

jq -e '
  if any(.depot_row_diff[]; .field == "build_id" and .delta == "changed") then
    all(.depot_row_diff[];
      (.field == "build_id" or .field == "depot_manifest_sha256" or .field == "steam_build_id")
      | not
      or (.note | startswith("EXCEPTION-DEPOT-"))
    )
  else true end
' release-evidence/steam/weekly/2026-W40.json

PowerShell twin (Windows facilitators)

$Weekly = "release-evidence/steam/weekly/2026-W40.json"
$Log = "release-evidence/steam/october_upload_weekly_log.jsonl"
$ok = jq -e '.schema == "october_upload_weekly_v1" and .october_upload_weekly_ok == true' $Weekly
if ($LASTEXITCODE -ne 0) { throw "J1/J6 latch failed" }
$prev = jq -s -r '.[-2].branch_intent' $Log
$cur  = jq -s -r '.[-1].branch_intent' $Log
if ($prev -ne $cur) { throw "branch_intent drifted vs prior week without depot_row_diff" }
if ((jq -r '.snapshot.default_branch_flag' $Weekly) -eq 'true') { throw "default_branch_flag must stay false during upload window" }
Write-Host "october_upload_weekly_ok"

verify_october_upload_weekly.sh

#!/usr/bin/env bash
set -euo pipefail
WEEKLY="${1:-release-evidence/steam/weekly/latest.json}"
LOG="${2:-release-evidence/steam/october_upload_weekly_log.jsonl}"

jq -e '.schema == "october_upload_weekly_v1"' "$WEEKLY" >/dev/null
jq -e '.upload_window_pointer.october_upload_window_allowed == true' "$WEEKLY" >/dev/null
jq -e '.upload_window_pointer.steampipe_upload_ok == true' "$WEEKLY" >/dev/null
jq -e '.snapshot.build_id | length > 0' "$WEEKLY" >/dev/null
jq -e '.october_upload_weekly_ok == true' "$WEEKLY" >/dev/null

for g in J1 J2 J3 J4 J5 J6; do
  test "$(jq -r --arg g "$g" '.gates[$g]' "$WEEKLY")" = "GREEN"
done

MANIFEST=$(jq -r .snapshot.manifest_path "$WEEKLY")
test -f "$MANIFEST"
test -f "$LOG"

# Default branch guard during upload window
jq -e '.snapshot.default_branch_flag == false' "$WEEKLY" >/dev/null

# Prior week bootstrap: allow single-line log on first Monday after upload evening
LINES=$(wc -l < "$LOG" | tr -d ' ')
if [ "$LINES" -ge 2 ]; then
  PREV_BRANCH=$(jq -s -r '.[-2].branch_intent' "$LOG")
  CUR_BRANCH=$(jq -s -r '.[-1].branch_intent' "$LOG")
  if [ "$PREV_BRANCH" != "$CUR_BRANCH" ]; then
    jq -e 'any(.depot_row_diff[]; .field == "branch_intent" and .note != null)' "$WEEKLY" >/dev/null \
      || { echo "branch_intent changed without depot_row_diff note"; exit 1; }
  fi
  PREV_BUILD=$(jq -s -r '.[-2].build_id' "$LOG")
  CUR_BUILD=$(jq -s -r '.[-1].build_id' "$LOG")
  if [ "$PREV_BUILD" != "$CUR_BUILD" ]; then
    jq -e 'any(.depot_row_diff[]; .field == "build_id" and (.note | startswith("EXCEPTION-DEPOT-")))' "$WEEKLY" >/dev/null \
      || { echo "build_id changed without EXCEPTION-DEPOT note"; exit 1; }
  fi
fi

STEAM_LOG=$(jq -r .snapshot.steampipe_log_tail.path "$WEEKLY")
if [ -f "$STEAM_LOG" ]; then
  TAIL_BUILD=$(jq -s -r '.[-1].build_id' "$STEAM_LOG")
  SNAP_BUILD=$(jq -r .snapshot.build_id "$WEEKLY")
  test "$TAIL_BUILD" = "$SNAP_BUILD"
fi

echo "october_upload_weekly_ok"

Wire to CI as a Monday job:

# example GitHub Actions fragment
- name: october upload weekly depot diff
  run: |
    bash scripts/verify_october_upload_weekly.sh \
      "release-evidence/steam/weekly/${{ env.ISO_WEEK }}.json"

Proof table

Artifact Proves Does not prove
Depot upload U6 Night-of append + receipt latch Week-two hash honesty
Weekly jsonl Build / branch history Gameplay quality
depot_row_diff Honest rebuild deltas Store metadata parity
Weekly OK latch CI may continue setlive prep Localization locale set
EXCEPTION-DEPOT notes Documented rebuilds Legal / SKU compliance
Steampipe log tail cross-check Snapshot matches log Player CDN latency

October upload cluster integration

Cluster row Relationship to weekly depot jq
#1 depot evening Bootstrap jsonl + U latch
#2 publish checklist Store-facing; orthogonal to depot hash
#3 dress rehearsal Nightly habit; weekly jq is Monday anchor
#4 default branch case study Failure mode when branch_intent lies
#5 metadata freeze Store copy lane
#6 trailer thumbnails Art lane
#7 this jq Weekly depot identity
Forward #8 overtime worksheet Pager hours cap
Forward #9 SETLIVE exception opinion Numbered setlive authorization
Forward #10 Wednesday smoke Mid-week promote ritual
Forward #11 Whisper caption lint Store video lane
Forward #12 Friday capstone Pre-fest-live latch

Scenarios A–H

A — New build_id without jsonl append

Fail J5. Require steampipe log line + EXCEPTION-DEPOT note or rerun depot upload evening.

B — branch_intent flips to default mid-week

Fail J4/J5 unless forward #9 SETLIVE exception list documents SETLIVE-00N. Prefer fest_rc through upload window.

C — Locale weekly GREEN, depot weekly RED

Expected when strings stable but engineers hotfixed—different schemas. Do not merge verify scripts.

D — Metadata freeze M6 GREEN, depot weekly RED

Store copy can be frozen while depot manifest drifts—pair metadata freeze for store lane only.

E — W40 crash fix with EXCEPTION-DEPOT-002

J5 GREEN if note present, jsonl appended, setlive target still fest_rc. Document in Wednesday #10 smoke card.

F — Dress rehearsal challenge night overlaps Monday ritual

Challenge nights keep habits; weekly jq still appends jsonl Monday AM. Do not skip because Tuesday stand-up happened.

G — Multi-depot demo + full game

Snapshot primary_depot_id must match fest demo depot; secondary depots listed in notes or receipt v1.1 secondary_depot_ids[].

H — Upload queue pending (steam_build_id empty)

Allow weekly line with "steam_build_id": "pending" only when steampipe log shows upload_pending event; fail J4 next week if still pending—pair wall-clock trend.

Facilitator stand-up script (90 seconds)

  1. “ISO week and receipt path?”
  2. build_id same as last Monday jsonl?”
  3. depot_manifest_sha256 unchanged or EXCEPTION-DEPOT?”
  4. branch_intent still fest_rc; default_branch_flag false?”
  5. “Steampipe log tail matches snapshot?”
  6. “Locale weekly jq separate—any RED there blocks capstone, not necessarily depot weekly.”
  7. “If any RED → no setlive today; route to upload evening or EXCEPTION-DEPOT file.”

Printable facilitator card

OCTOBER UPLOAD WEEKLY DEPOT JQ — MONDAY
[ ] J1 schema october_upload_weekly_v1
[ ] J2 october_upload_window_allowed + steampipe_upload_ok
[ ] J3 prior jsonl week or bootstrap note
[ ] J4 build_id + manifest hash + depot_id
[ ] J5 depot_row_diff honest (EXCEPTION-DEPOT if changed)
[ ] J6 october_upload_weekly_ok on BUILD_RECEIPT
[ ] default_branch_flag == false
[ ] setlive_target_label == rc_label

Python J5 audit cousin (optional CI)

import json, sys
weekly = json.load(open(sys.argv[1]))
diff = weekly.get("depot_row_diff", [])
changed = {d["field"] for d in diff if d.get("delta") not in ("unchanged", "0")}
rebuild_fields = {"build_id", "depot_manifest_sha256", "steam_build_id"}
if changed & rebuild_fields:
    notes = [d.get("note", "") for d in diff if d["field"] in rebuild_fields]
    if not all(n.startswith("EXCEPTION-DEPOT-") for n in notes):
        raise SystemExit("J5: rebuild without EXCEPTION-DEPOT note")
print("october_upload_weekly_ok")

jsonl integrity checks

# No duplicate ISO weeks
jq -s 'map(.iso_week) | group_by(.) | map(select(length>1)) | length == 0' \
  release-evidence/steam/october_upload_weekly_log.jsonl

# Monotonic ISO week ordering (facilitator discipline)
jq -s 'map(.iso_week) | . == sort' release-evidence/steam/october_upload_weekly_log.jsonl

Partner diligence zip

When publishers request upload-week proof:

  1. Latest october_upload_weekly_v1 receipt
  2. Full october_upload_weekly_log.jsonl
  3. steampipe_upload_log.jsonl tail excerpt
  4. depot_manifest_v1.json for snapshot week
  5. BUILD_RECEIPT excerpt showing october_upload_weekly_ok
  6. Link to localization capstone if window opened there

Zip name: {studio}_october_upload_weekly_{iso_week}_2026.zip.

Engine / tooling notes

Engine Manifest export tip
Unity Include build_id in depot_manifest_v1.json from CI job name
Godot Export preset hash in manifest; pair Godot VDF evening
GameMaker Pair setlive dry-run evening for branch labels
Unreal Cook manifest path in receipt notes

Weekly jq is engine-agnostic once depot_manifest_v1.json exists.

Comparison pack — weekly jq cousins

Sketch Primary hash / ID Window
February hourly Hourly BUILD_RECEIPT rows Live fest week
March sprint weekly Sprint receipt columns Post-fest March
April catalog weekly catalog_sha256 Content-update Sale
Locale freeze weekly locale_ids, Weblate pin After string freeze
October depot weekly build_id, depot manifest Upload window

FAQ

Same as steampipe_upload_log.jsonl jq from depot evening?

No. Evening tutorial proves append discipline. Weekly jq proves week-over-week identity with depot_row_diff.

Same as localization weekly jq?

No. Different schema, fields, and failure modes—run both Mondays during upload prep.

Same as Wednesday depot smoke #10?

Monday jq detects drift; Wednesday smoke decides promote permission—cousin cadence like April jq vs Thursday content-update.

Does weekly OK authorize store publish?

No—forward #2 publish checklist and #10 Wednesday smoke own store-facing gates.

What if we only ship one depot?

Weekly still trivial-passes with single primary_depot_id—cheap insurance against silent rebuilds.

How do exceptions work?

Numbered EXCEPTION-DEPOT-### files; reference in depot_row_diff[].note. Forward #12 capstone should list open exceptions.

When do we stop Monday runs?

After fest live closeout—or when upload window formally closes in capstone receipt.

Can CI upload without human dry-run review?

Set operator: ci_runner in steampipe log; human must still review dry-run artifact before U6—weekly jq does not replace U4.

Key takeaways

  1. After upload window opens, run a weekly depot row diff—not locale or catalog jq.
  2. Gates J1–J6 here mean depot schema, not locale freeze or April catalog.
  3. Append october_upload_weekly_log.jsonl every ISO week through upload prep.
  4. Latch october_upload_weekly_ok separately from steampipe_upload_ok.
  5. Silent build_id changes fail J5—require EXCEPTION-DEPOT or new upload evening.
  6. default_branch_flag must stay false during upload window unless forward #9 documents SETLIVE exception.
  7. Pair depot evening #1 and locale weekly jq; forward Wednesday #10 and Friday #12.
  8. Steampipe log tail must agree with weekly snapshot build_id.
  9. Store metadata freeze and depot weekly are orthogonal—both can be RED independently.
  10. Guide #56 / Course 296 / Help #61 continue the format ladder.
  11. Bootstrap week-0 from depot upload night—do not invent prior hashes.
  12. Wrong cousin jq is a class of CI false greens—keep verify scripts in separate files.

Related reads

Closing

Upload evening without Monday depot honesty is how build_id hashes lie while producers celebrate frozen store tags. File the weekly depot row diff, keep locale jq in its lane, and let october_upload_weekly_ok be the boring green light setlive and fest live both respect.

When someone asks for a “tiny hotfix upload” without jsonl, the weekly log has an answer: EXCEPTION-DEPOT, new upload evening, or no setlive today.