# Launch plan — patch 12.1 (Curse of Ula'tek)

## The dates that matter

| When | What |
|---|---|
| **Tue Aug 11** | 12.1 goes live on **US realms**. EU (Adam) cannot verify anything yet. |
| **Wed Aug 12** | 12.1 goes live on **EU realms**. Adam verifies personally, EU builders can export. |
| Thu Aug 13+ | KR (This-Pride-6854) gets the patch, statue lands in a later update. |
| Tue Aug 18 | Season 2 / raid opens (US). Housing attention peaks the week before it. |

Consequence: **the launch build ships before Adam can test it on live.** That is
what Core/Guard.lua exists for, and why day 1 is the utility release.

## Day 1 (Tue Aug 11) — US launch, from Denmark

1. Publish **v1.0.0** to CurseForge + Wago at US realm-up (~16:00 CEST).
   Untick "Unlisted" on Wago. Tag `v1.0.0`, push, packager does the rest.
2. Post in r/WoWHousing (existing thread + new post) and HoAD `#blueprints`:
   the addon is live, paste any code to see what's in it and whether you can
   build it. **Explicitly ask for a US player to report back** - free live
   verification within the hour, and the community likes being asked.
3. Watch for the first US reports. Guard means worst case is a polite line
   about a disabled feature, not error spam.

Library on day 1 is thin by design. That is fine: `/bb code <sharecode>` is the
feature people need the moment codes start flying, and it needs no library.

## Day 2 (Wed Aug 12) — EU launch, the real verification

1. Log in, run the M0 spike again on live (`/bbspike all <real code>`), compare
   with SPIKE_RESULTS.md. Ten minutes.
2. Collect codes from Bas, Derenly, Ellenor. Each: `/bb bake <code>` ->
   `build_library.py` -> commit.
3. Ship **v1.0.1** with the first real builds. Post about it. Every builder
   added is a reason to post again.

## If the API changed — decision tree, decided in advance

The rule: **ship something on day 1 unless the addon is dangerous or useless.**
Pulling a release in launch week costs more than a reduced feature set.

| What broke | Ship? | Action |
|---|---|---|
| `ImportBlueprint` protected or gone | **Yes** | Guard disables the button, copy-code path still works. Fix later if possible. |
| `RequestBlueprintContents` renamed | **Yes, same day** | This is the core. Find the new name in the `/bbspike ns` dump, rebind in BlueprintAPI.lua, retag. Under an hour of work. |
| Payload shape changed (fields renamed) | **Yes, same day** | `normalize()` in BlueprintAPI.lua is the only place that reads field names. Patch there. |
| `IsShareCodeValid` gone | **Yes** | Chat auto-linkify goes quiet, everything else runs. |
| `RequestBlueprintCollection` gone | **Yes** | My Blueprints tab shows a line, other tabs unaffected. |
| Whole `C_HousingBlueprint` namespace missing/renamed | **No** | Guard prints one line and stops. Hold the release, fix, ship within 24h. |

Never ship a build that throws Lua errors. Guard is what makes that promise
keepable without testing on live first.

## Pre-flight checklist (do before Aug 11)

- [ ] CurseForge draft approved, `CF_API_KEY` added to GitHub secrets
- [ ] `X-Curse-Project-ID` filled into the TOC
- [ ] Repo flipped to public (Wago/CurseForge source link)
- [ ] Wago "Unlisted" ready to untick
- [ ] Version bumped to 1.0.0, CHANGELOG written
- [ ] Guard tested by faking a missing function on the PTR
