Challenges & Community Hooks Jul 10, 2026

3-Day No False Green CI Challenge for Unity Addressables Cache Keys - October 2026

2026 Unity challenge—three daily gates to stop false-green Addressables CI, cache key diff table, catalog hash promotion rule, and addressables_ci_cache_receipt_v1.json before October fest smoke.

By GamineAI Team

3-Day No False Green CI Challenge for Unity Addressables Cache Keys - October 2026

Pixel-art hero for three-day no false green CI challenge Unity Addressables cache keys October 2026

Monday CI green. Tuesday CI green. Wednesday CI green. Thursday demo smoke fails on the first Addressables.Load with InvalidKeyException. Your workflow restored Library/ from actions/cache three nights in a row—compile succeeded, catalog content did not.

October 2026 fest teams move Addressables groups weekly. False-green CI is the silent failure: the badge proves compilation, not player-load truth. 7-day key audit owns K1–K7 inventory calendar; evening cache-bust tutorial owns one-night YAML; Library cache preflight owns ninety-second C1–C6. This Challenges & Community Hooks sprint is the three-day accountability ladder: log cache keys, force a bust after a group move, require installed smoke, file addressables_ci_cache_receipt_v1.json—hashtag #NoFalseGreenAddressables2026.

Non-repetition note: This URL is three-day CI cache truth—not seven-day key inventory, not one-evening tutorial depth, not Invalid Key runtime triage. Same cluster, different angle per workflows/content-ecosystem.md format ladder.

Why this matters now (October 2026)

  1. Tuesday group moves, Wednesday promote — Branch-only cache keys hide catalog drift on the same ref.
  2. Three green nights ≠ ship — Teams skip player smoke because GitHub passed.
  3. Fest strip weeks — Deleted groups + restored Library/ = ghost catalog references.
  4. Discord noise — “Addressables broken” when the fix is cache key material.
  5. BUILD_RECEIPT rowsThursday row review needs no_false_green_ci_ok beside demo_smoke and library_cache_bust_ok.

Direct answer: Three weekdays (~20 minutes each); gates F1–F6; artifacts under release-evidence/unity/ci-cache-challenge/; file addressables_ci_cache_receipt_v1.json with three_day_ladder; no fest promotion until F6 and catalog hash promotion rule pass.

Who this challenge is for

Audience You will…
Beginner Tweet-thread daily checklist—cache key, smoke, receipt
Solo engineer Stop trusting green badges after Addressables moves
Producer Block Wednesday smoke week until F6 GREEN
Working dev Wire catalog hash promotion rule in CI jq

Engines: Unity 6.x LTS + Addressables; GitHub Actions with actions/cache on Library/.
Time: ~60 minutes total over three weekdays (20 min/day).

Challenge vs tutorial vs seven-day audit (format ladder)

Artifact Role
This challenge 3-day false-green CI ladder + community hook
Evening cache-bust tutorial One-evening YAML + unity_ci_library_cache_receipt_v1
7-day key audit K1–K7 inventory before content strip
Library cache preflight Ninety-second C1–C6
Lesson 261 BUILD_RECEIPT library_cache_bust_ok
Lesson 219 String table receipt after strip
Help #26 forward Stale Library fix lane
Resource #24 forward Cache debug tool list

Order: K1 inventory (if strip week) → evening tutorial or preflight C1–C6this 3-day challenge after any group move → Wednesday smoke.

Before you start — readiness checklist

  • [ ] release-evidence/unity/ci-cache-challenge/ folder exists
  • [ ] GitHub Actions workflow logs accessible for last three runs
  • [ ] actions/cache restores Library/ on your Unity job
  • [ ] One Addressables group move planned (or simulated) for Day 2
  • [ ] clean-library-on-group-move job exists (evening tutorial Block B)
  • [ ] Wednesday smoke golden path documented for your demo
  • [ ] build_label visible in player build (visible label opinion)
  • [ ] Producer agrees: no fest promotion until F6 receipt filed

Do not start the challenge during a quiet week with zero Addressables changes—the ladder proves bust after move, not generic CI hygiene.

Rules of the challenge

  1. One owner signs each day (day_N_pass).
  2. Fail stops the ladder—do not start Day 3 if Day 2 cache key did not change after a group move.
  3. Installed build required on Day 3—Editor Play Mode does not count for F5.
  4. Pair with player-visible build label on smoke build.
  5. Post daily progress with #NoFalseGreenAddressables2026 (tweet thread or Discord devlog).
  6. Friday Block 5: no_false_green_ci_ok Y/N.

Three-day calendar at a glance

Day Gates Primary artifact Pass signal
Day 1 F1–F2 cache_baseline_v1.json Cache key + ContentState + catalog hashes logged
Day 2 F3–F4 cache_key_diff_table.csv Group move + cache key changed OR clean job + cache miss
Day 3 F5–F6 addressables_ci_cache_receipt_v1.json Player smoke pass + no_false_green_ci_ok: true

Weekend between Day 2 and Day 3 is allowed—re-run F4 if CI ran over the weekend.

Wednesday smoke integration (Day 3 — F5 detail)

Wednesday smoke gates S4–S6 prove the installed artifact—not the Editor. For this challenge, extend smoke with one Addressables-specific row:

Smoke row Check Pass when
S-ADDR Golden path loads one remote Addressables asset No InvalidKeyException in first 10 min Player.log
S-LABEL On-screen build_label matches receipt Matches Day 2 CI artifact
S-CACHE BUILD_RECEIPT catalog_hash matches receipt Day 3 Promotion rule satisfied

Beginner: If smoke fails S-ADDR, do not re-run CI blindly—return to Day 2 and verify F4 cache key diff. Re-running CI without bust repeats false green.

Developer: Save Player.log excerpt to release-evidence/unity/ci-cache-challenge/runtime_load_smoke.log; grep:

grep -i "InvalidKeyException" runtime_load_smoke.log && exit 1 || exit 0

Wire as optional CI job after player build—cousin to Lesson 200 concat_ok gate culture.

Beginner path — daily 20-minute tweet thread

Copy this thread skeleton each day:

Day 1 tweet:#NoFalseGreenAddressables2026 Day 1 — logged cache key + ContentState sha256 + catalog hash. F1–F2 GREEN. Tomorrow: move one group and prove key bust.”

Day 2 tweet: “Day 2 — moved fest_strip_candidate group / ran clean-library job. Cache key changed (see diff table). F3–F4 GREEN.”

Day 3 tweet: “Day 3 — installed smoke passed on build_label. Filed addressables_ci_cache_receipt_v1.json. F5–F6 GREEN. No false green this week.”

Day 1 checklist (F1–F2) — ~20 minutes

Step Action Pass
1 Open latest CI log; copy actions/cache primary key string F1
2 sha256 Library/com.unity.addressables/AddressablesContentState.bin F1
3 Record catalog hash from Build Report or catalog_build_fingerprint.txt F1
4 Save cache_baseline_v1.json under release-evidence/unity/ci-cache-challenge/ F1
5 Confirm cousin address_inventory_v1.json exists (jq preflight) F2
sha256sum Library/com.unity.addressables/AddressablesContentState.bin

Red flag: Cache key is only github.ref or branch name—note for Day 2 bust.

Day 2 checklist (F3–F4) — ~20 minutes

Step Action Pass
1 Move one Addressables group or merge a prepared strip PR F3
2 Trigger workflow_dispatch clean-library job or delete cache entry manually F3
3 Re-run CI; capture new cache key + ContentState hash F4
4 Fill cache_key_diff_table.csv (before vs after) F4
5 Confirm CI log shows cache miss or new key—not silent restore of old Library/ F4

Fail-closed: If cache key unchanged after group move, Day 2 fails—fix YAML before Day 3.

Day 3 checklist (F5–F6) — ~20 minutes

Step Action Pass
1 Download/install CI player build from Day 2 run F5
2 Run Wednesday smoke golden path (10–15 min) F5
3 Zero InvalidKeyException in Player.log excerpt F5
4 Apply catalog hash promotion rule (below) F6
5 File addressables_ci_cache_receipt_v1.json; jq gate in CI F6

Developer path — gates F1–F6

Gate Check Fail when
F1 Baseline hashes + cache key archived Missing ContentState or catalog hash
F2 Inventory cousin path valid address_inventory_v1.json missing groups[]
F3 Deliberate catalog change + bust policy executed Group moved but no clean job
F4 Cache key diff proves bust Before == after key strings
F5 Installed player smoke InvalidKey in golden path
F6 Receipt + promotion rule no_false_green_ci_ok false

Cache key diff table (Day 2 artifact)

release-evidence/unity/ci-cache-challenge/cache_key_diff_table.csv:

field,day_1_before,day_2_after,changed
actions_cache_primary_key,unity-library-Linux-main-abc123,unity-library-Linux-main-def456,true
content_state_sha256,b7e2c4f1…,c8f3d5a2…,true
catalog_hash,fest_catalog_2026-10-01,fest_catalog_2026-10-02,true
library_cache_restore_hit,true,false,true

Pass F4 when: changed column is true for actions_cache_primary_key and content_state_sha256 after a group move.

Catalog hash promotion rule (developer)

Block fest branch promotion when:

receipt.catalog_hash != BUILD_RECEIPT.last_promoted_catalog_hash
AND receipt.no_false_green_ci_ok != true

CI tail (fail-closed):

jq -e '.no_false_green_ci_ok == true' release-evidence/unity/ci-cache-challenge/ADDRESSABLES_CI_CACHE_RECEIPT.json
jq -e '.three_day_ladder.day_3.demo_smoke_pass == true' release-evidence/unity/ci-cache-challenge/ADDRESSABLES_CI_CACHE_RECEIPT.json

Pair Lesson 219 optional gate column when strip includes localization groups.

addressables_ci_cache_receipt_v1.json (F6)

{
  "schema": "addressables_ci_cache_receipt_v1",
  "build_label": "october-fest-2026-rc6",
  "challenge_hashtag": "#NoFalseGreenAddressables2026",
  "three_day_ladder": {
    "day_1": {
      "date": "2026-10-06",
      "cache_key": "unity-library-Linux-main-abc123",
      "content_state_sha256": "b7e2c4f1a9d8e3b6…",
      "catalog_hash": "fest_catalog_2026-10-06",
      "gates": { "F1": "pass", "F2": "pass" }
    },
    "day_2": {
      "date": "2026-10-07",
      "group_move": "fest_strip_candidate → Remote",
      "cache_key": "unity-library-Linux-main-def456",
      "cache_key_changed": true,
      "clean_library_job": "clean-library-on-group-move",
      "cache_key_diff_csv": "release-evidence/unity/ci-cache-challenge/cache_key_diff_table.csv",
      "gates": { "F3": "pass", "F4": "pass" }
    },
    "day_3": {
      "date": "2026-10-08",
      "demo_smoke_pass": true,
      "player_log_excerpt": "release-evidence/unity/ci-cache-challenge/runtime_load_smoke.log",
      "gates": { "F5": "pass", "F6": "pass" }
    }
  },
  "cousin_receipts": {
    "unity_ci_library_cache": "release-evidence/unity/ci-cache/UNITY_CI_LIBRARY_CACHE_RECEIPT.json",
    "addressables_key_audit": "release-evidence/unity/addressables-audit-week/addressables_key_audit_receipt_v1.json"
  },
  "catalog_hash_promotion_rule_applied": true,
  "gates": {
    "F1_baseline": "pass",
    "F2_inventory_cousin": "pass",
    "F3_group_move_bust": "pass",
    "F4_cache_key_diff": "pass",
    "F5_player_smoke": "pass",
    "F6_receipt": "pass"
  },
  "no_false_green_ci_ok": true,
  "fest_promotion_allowed": true
}

Pin under release-evidence/unity/ci-cache-challenge/ADDRESSABLES_CI_CACHE_RECEIPT.json.

Alias note: Evening tutorial references unity_ci_library_cache_receipt_v1 as canonical for one-evening setup; addressables_ci_cache_receipt_v1 indexes the three-day ladder and promotion rule—cross-link in cousin_receipts, do not merge schemas.

BUILD_RECEIPT columns

Column Example
no_false_green_ci_ok true
addressables_ci_cache_receipt_path release-evidence/unity/ci-cache-challenge/ADDRESSABLES_CI_CACHE_RECEIPT.json
catalog_hash fest_catalog_2026-10-08
library_cache_bust_ok true (cousin from Lesson 261)

YAML sketch — ContentState in cache key (Day 2 target)

If Day 1 shows branch-only keys, Day 2 PR should resemble:

- name: Hash Addressables ContentState
  id: content_state
  run: |
    echo "hash=$(sha256sum Library/com.unity.addressables/AddressablesContentState.bin | cut -d' ' -f1)" >> $GITHUB_OUTPUT

- uses: actions/cache@v4
  with:
    path: Library
    key: unity-library-${{ runner.os }}-${{ github.sha }}-${{ steps.content_state.outputs.hash }}

Full evening walkthrough: cache-bust tutorial.

Day 1 developer script — cache_baseline_v1.json

#!/usr/bin/env bash
set -euo pipefail
OUT="release-evidence/unity/ci-cache-challenge/cache_baseline_v1.json"
CS="Library/com.unity.addressables/AddressablesContentState.bin"
test -f "$CS" || { echo "Run Addressables build first"; exit 1; }
HASH=$(sha256sum "$CS" | awk '{print $1}')
CATALOG=$(cat release-evidence/unity/addressables-audit-week/catalog_build_fingerprint.txt 2>/dev/null || echo "unknown")
# Paste primary cache key from latest CI log into CACHE_KEY env before running
jq -n \
  --arg hash "$HASH" \
  --arg catalog "$CATALOG" \
  --arg key "${CACHE_KEY:-paste-from-ci-log}" \
  '{schema:"cache_baseline_v1",content_state_sha256:$hash,catalog_hash:$catalog,actions_cache_primary_key:$key,day:1}'

Archive the CI log snippet showing Cache restored from key: beside the JSON—F4 later compares against this baseline.

Day 2 developer notes — proving cache miss

In GitHub Actions logs, search:

Cache not found for input keys

or

Cache restored from key: unity-library-...

Pass F4 when post-move log shows miss or restored key ≠ Day 1 key. Fail when restored key matches Day 1 after a catalog-changing merge.

Help #30 forward: if concurrency: cancel-in-progress interrupted Addressables build, run clean-library before interpreting F4—poisoned Library/ mimics false greens.

Community hook — #NoFalseGreenAddressables2026

Day Suggested post Attach
1 Baseline hashes + “branch-only key?” callout cache_baseline_v1.json redacted
2 Before/after cache key strings cache_key_diff_table.csv screenshot
3 Smoke pass + receipt path build_label photo

Working dev: Pin Discord thread in #release-ops with three checkboxes—producers mark F6 without reading YAML.

Pair Tuesday CSV ingest when playtest week overlaps strip week—engineering floor is cache + smoke, not marketing bursts (time-box worksheet).

False-green signals (qualitative, late 2026)

Patterns from fest post-mortems and CI threads—no invented close rates:

  • Three consecutive green workflow runs on main after Addressables group PR
  • Player smoke fails only on CI-built artifact—not local Development Build
  • Cache log line “Cache restored from key” with key from before group merge
  • Engineers rerun CI without clean-library and declare “flake”
  • library_cache_bust_ok missing on BUILD_RECEIPT while demo_smoke fails

Treat InvalidKey after green CI as P0 cache until F4 proves key change.

Counterargument — “We already run Wednesday smoke”

Smoke catches false green after promotion pressure builds. This challenge front-loads cache proof before producers schedule fest branch merges—receipt shows Day 2 bust before Day 3 smoke, not only smoke failure as alarm. Teams without smoke discipline still benefit: F6 jq gate blocks merge when receipt missing.

Weekly ritual map

Day Ritual Receipt
Mon F1–F2 baseline (this challenge) cache_baseline_v1.json
Tue Group move + F3–F4 cache_key_diff_table.csv
Wed F5 smoke + F6 receipt ADDRESSABLES_CI_CACHE_RECEIPT.json
Thu Row review no_false_green_ci_ok
Fri Block 5 evidence maintenance Archive challenge folder

Proof table

Row Evidence Pass
Baseline cache_baseline_v1.json All three hashes present
Inventory cousin address_inventory_v1.json groups[] via jq
Key diff cache_key_diff_table.csv changed=true for key + ContentState
Smoke runtime_load_smoke.log No InvalidKey
Receipt ADDRESSABLES_CI_CACHE_RECEIPT.json no_false_green_ci_ok: true
BUILD_RECEIPT Weekly row Catalog hash + booleans

Seven scenarios (A–G)

ID Situation Response
A First October strip week Run full F1–F6 once
B No group move this week Skip challenge; keep preflight C1–C6
C Day 2 green but key unchanged F4 fail—fix cache YAML
D CI slow after bust Expected—correctness over cache hit rate
E Editor smoke passes, installed fails F5 fail—false green confirmed
F concurrency: cancel-in-progress mid-build Help #30 cousin + clean Library/
G Promotion without receipt Block; file F6 first
H Strip week + localization Add Lesson 219 cousin row to cousin_receipts before F6

Common mistakes

  1. Branch-only cache keys — F4 never passes after group move.
  2. Day 3 smoke in Editor only — F5 requires installed CI artifact.
  3. Merging addressables_ci_cache_receipt with unity_ci_library_cache_receipt — cousin paths only.
  4. Skipping Day 2 when no group move—challenge is for move weeks.
  5. Green CI without reading cache restore line — F4 requires log proof.
  6. Deleting jq guards to unblock merge — fix inventory (jq preflight J5).
  7. Trusting compile without visible build label on smoke build.
  8. Running challenge during strip without K1 inventory — pair 7-day K1 the week before.

Troubleshooting

Symptom Lane
CI green, InvalidKey in player F3–F4 bust; Help #26 forward
Cache key never changes Evening tutorial C2
Inventory jq fails 7-day K1
Smoke passes, catalog hash drift Promotion rule block; re-run Day 2
Intermittent after cancel Help #30 concurrency

Tools and sibling reads

Key takeaways

  1. Three green CI nights ≠ player truth—run F5 installed smoke.
  2. Cache key diff table is the receipt artifact that proves bust (F4).
  3. addressables_ci_cache_receipt_v1.json indexes the three-day ladder.
  4. Catalog hash promotion rule blocks promote when hash drifts without F6.
  5. #NoFalseGreenAddressables2026 — community accountability hook.
  6. Evening tutorial sets up YAML; this challenge verifies it after moves.
  7. 7-day audit is preventive inventory; this is CI cache verification.
  8. Lesson 261 + Lesson 219 cousin columns.
  9. Help #26 forward owns fix; this challenge owns preventive ladder.
  10. Pair Wednesday smoke on Day 3.

FAQ

Can we run this every week?
Run when Addressables groups move or cache policy changes—not on quiet weeks.

Is this replacing the 7-day challenge?
No—K1–K7 is inventory before strip; F1–F6 is CI cache truth after moves.

One receipt or two?
File addressables_ci_cache_receipt_v1 for the ladder; keep unity_ci_library_cache_receipt_v1 from evening setup as cousin.

What if we do not use GitHub Actions?
Adapt F1–F4 to your CI cache key logs; F5–F6 still require installed smoke + receipt.

Does this fix InvalidKey at runtime?
Prevents false-green promotion; runtime triage stays Invalid Key help.

When should we skip this challenge?
Skip on weeks with no Addressables group moves and no cache policy edits—run preflight C1–C6 only.

How does this relate to OBS empty inbox case study?
OneDrive KFM case study is capture path false confidence; this challenge is CI cache false confidence—same receipt culture, different drift class.

Can solo devs run this without a producer?
Yes—sign each day yourself; still file F6 before merging to fest_public or running 12 setlive checks.

Conclusion

October fest teams cannot afford three green nights that hide stale Library/ restores. Log baseline hashes, force cache key change after group moves, smoke the installed CI build, file addressables_ci_cache_receipt_v1.json—then promote.

Next reads: Evening cache-bust tutorial, Library cache preflight, Lesson 261, Wednesday smoke.

Post Day 1 baseline with #NoFalseGreenAddressables2026 before your next Tuesday group move—not after Thursday's InvalidKey thread. Archive all three daily artifacts under one build_label folder so Thursday row review can diff no_false_green_ci_ok, demo_smoke, and library_cache_bust_ok in a single ten-minute pass.