1.1 — work queue
1.1 — work queue
Section titled “1.1 — work queue”1.1 is the next store version on iOS, tvOS AND macOS (one version string everywhere, Chris
2026-10-14). Live as of 2026-10-14: iOS 1.0.1 (255) and tvOS 1.0.1 (255) READY_FOR_SALE; macOS
1.0.2 (259) WAITING_FOR_REVIEW since 2026-10-06. Main was BUILD 322 when this queue opened, ~150
merges past what players have. docs/RELEASE-1.0.1.md is closed as a queue: carry items over from it
only by moving them here.
- Feature freeze: Friday 2026-10-17. After that only fixes and the items below go in.
- Version string: all 5 Apple presets
application/short_version="1.1"(set in this commit;scripts/release/env.shrefuses presets that disagree). - macOS: only one unreleased version per platform can be in flight. If Mac 1.0.2 (259) is still
waiting when 1.1 is ready, Chris removes it from review (
asc.py cancel-review, he runs it with!) and submits 1.1 instead. - Tick items
✅ DONE (commit)in place. Anything found goes on this list before it is fixed.
1 · Release blockers (verification, not features)
Section titled “1 · Release blockers (verification, not features)”-
✅ DONE (store-338, SUBMITTED 2026-10-23 18:56 UTC on iOS + tvOS + macOS; device-verified A17, XS A12, iPad, ATV 4K 2nd gen A12, Mac; listing audit green) BUILD 338 = 1.1 candidate WITH the engine fix (Chris 2026-10-23: fold it in). Engine b6dc32613 (fork fix-113-124088: Apple5 floor, recompile-on-reject, both binding caches); iOS/clip/tvOS bakes LIVE at the Apple5 floor, 0 invalid containers (pre-upload gate). Branch
release/1.1-rc3, tag store-338. This supersedes the “do not fix it for 1.1” item below. Must pass on device before the ASC build swap 335 → 338: Toby’s iPhone XS (A12), Chris’s A17 update over 335, Apple TV 4K 3rd gen (A15), oldest ATV, clip launch. Fallback if A12 fails: submit 335 (inert bake). -
iOS shader bake is INERT in BUILD 335; do not “fix” it for 1.1 (found 2026-10-22, GitHub #113). BUILD 335’s iOS shader bake is INERT (iOS template a8d5c0bb62 vs exporting editor 284e9804c4; bake paths are keyed by engine commit, so nothing baked is ever looked up and iOS behaves like an unbaked build). Therefore 335 is not exposed to the Apple5/6 rejection black screen nor godot#124088. Do NOT rebuild the iOS template, swap templates, or cut a new iOS candidate for 1.1 unless the full engine fix ships with it. Pending: Toby’s iPhone XS (A12, iOS 18.7.10) check of TestFlight 335: a black frame there would REFUTE the inert claim and is an immediate stop. Engine fix (Apple5 floor, recompile-on-reject, both binding caches) is staged for 1.2 in fork branch fix-113-124088 / patches 0005-0007, verified on the Mac only; tvOS (live bake) is exposed by deduction on Apple TV 4K 3rd gen (A15) to the godot#124088 class, unverified on hardware. Guard:
scripts/lib/shader-bake-gate.shruns before every upload (branch fix-113-gate). -
HDR / P3 on device (carried from 1.0.1): iPhone HDR engages and the colour profile follows it (plan
docs/superpowers/plans/2026-10-09-hdr-sdr-colour-systems-step1.mdTask 8). -
Fresh-install shader-stall check on Apple TV AND iPhone (skill
bh-fresh-install-stall-check), incl. theborder_haloglobal shader uniform through the baker and the forced-tutorial boot prewarm.- ✅ ATV fresh-install boot 68 s → 8.6 s (BUILD 328, 2026-10-15): two engine bugs, fork 0002 (baked cache
lookup missed when
user://is read-only, tvOS) + 0003 (baker export cache shared across platforms, so the second platform exported baked ~nothing). Seeplatform/engine-patches/README.md. Still open here: Chris’s scripted play on 328 (Survival hitches), and the iPhone fresh install on the patched editor.
- ✅ ATV fresh-install boot 68 s → 8.6 s (BUILD 328, 2026-10-15): two engine bugs, fork 0002 (baked cache
lookup missed when
-
A17 iPhone (15 Pro Max) baked build: the over-the-top UPDATE path. 2026-10-13 a baked build installed over an existing app drew blank labels; a clean install fixed it. Store updates install over the top, so test exactly that: TestFlight 255 installed, then update to the 1.1 candidate. Must draw menus, labels and the ship.
-
A17 shader-baker check on the final candidate (godot#124088): every shader edit since store 300 (alpha remap, Supernova, glows) can re-trigger it.
-
Oldest supported Apple TV on the Godot 4.8 fork (memory
bullet-heaven-tvos-metal-renderer; the 2026-07 rejection was an older-ATV Metal capability gate). -
Chris playtest of the big feel/balance changes: Supernova rework (several overlapping, SDR + HDR), Warden Survival AI (headless-verified only), ship death sequence, Rift Bolt detonation.
-
ASC App Privacy: Chris confirms “Other Diagnostic Data” is ticked (controller telemetry). The privacy page side is done (site commit bcea2eb).
-
Privacy check for anything new: remote sound packs (downloaded audio, no new data kind) and, if it ships dark, the internet relay (must store nothing; see §4).
2 · In-flight work that goes in (Chris, 2026-10-14)
Section titled “2 · In-flight work that goes in (Chris, 2026-10-14)”-
Alpha-fix batch (glows 2-10x too bright/hazy on the linear canvas, SDR + HDR): branch
alpha-fix-final, plandocs/superpowers/plans/2026-10-12-unremapped-alpha-fix-batch.md. Chris A/B → review → merge. -
HP bar thinner, stays until healed to ≥75% ✅ DONE (merge a085f1b5): 16 → 11 tall; live tunables
Hud.HP_HEALED_FRAC/Hud.HP_BACKING_H; bh-reviewer MERGE + bh-visual-qa PASS (iPhone/iPad/TV, solo + co-op). Still to do: Chris judges the 11 px bar from the sofa on the next Dev install. -
SFX variant cull: Chris listens on a Dev install and culls the organic-overhaul variants.
-
Boss growls: ✅ DONE (64d5f477) per-boss slots (baeb1d44) + Chris’s synth growl on the Warden spawn (Boss2 is off in real play). Still open: sound-map UX re-review; growls for FunZo/Graviton/Eye.
-
GOAL: every sound synthesised (Chris 2026-10-16, “create sounds using the new method for everything in the game”). Re-make every non-synth key with the procedural synth method (skill
bh-synth-sfx+bh-live-sfx-audition), not ElevenLabs. Already synth, left alone:aim_fire,blaster_fire,enemy_ranged_fire, everyenemy_death_*,boss_explosion,death_<boss>,supernova,spawn_warden. In scope: ~45 keys (incl. the 10-12 organic ElevenLabs takes, each A/B’d against its synth rival, the better one stays) + the emptyspawn_/enrage_slots for FunZo/Graviton/Eye. Chris chose “into 1.1, as many as ready”, under one guard: only takes Chris has heard and approved go into the freeze build; the rest keep their current sound and follow as remote sound packs. Branchsfx-synth-all, tooltools/sound_map/sfx_synth.py, order = play frequency (frequent tier → telegraph → player → UI → boss). -
Supernova: Chris tunes the oil-slick sparks, then bake the values as defaults.
-
Remote sound packs (merged a0659f19, Worker
/sfxroute deployed 2026-10-14): device-verify on Dev BUILD 322 (ATV + iPhone, dev-channel test patchb322-dev-001= Boss2 spawn growl). 1.1 is the first store build that can take sound patches; republishbuild-322@devwithoutsoundsonce verified. -
✅ DONE (difficulty-modes merge) Difficulty modes: Normal (default) + Hard (Chris 2026-10-15, after watching Eve: “we have been tuning for Toby”). Spec
docs/superpowers/specs/2026-10-15-difficulty-modes-design.md(approved, gold revised cef5cd11; plandocs/superpowers/plans/2026-10-15-difficulty-modes.mde06c31fd): Hard = today’s tuning, Normal = gentler start + faster early levels + softer bosses + forgiving hits; one wallet, 1.0x gold in both modes; per-mode bests; NORMAL/HARD chip on the Survival row. Moves submission to the 10-17 freeze. Adaptive = 1.2. B1 Orbit/Nova ships for all modes as a patch. -
iOS App Clip (Warden demo) + Beta skin (Chris 2026-10-15: bundle with 1.1 under a HARD DROP RULE: if the clip is not green on Chris’s iPhone by the 10-17 freeze, it comes out of 1.1 and follows in 1.1.1; the Beta skin can still ship alone if it is ready). Plans
docs/superpowers/plans/2026-10-15-beta-skin.md(branchbeta-skin) +docs/superpowers/plans/2026-10-15-app-clip-warden.md(branchapp-clip), specdocs/superpowers/specs/2026-10-14-app-clip-warden-design.md. Unproven: App Group signing on device, clip size (~92 MB vs 95 MB gate), the new ASC App Clip experience + review. -
Survival first-run control hints (Chris 2026-10-16, from the clip playtest: “a few more hint texts on how to use the manual weapon, the warp, the drone … can probably go in the main game too”). One device-aware line at a time (move, Rift Bolt aim, warp, drone); a line retires once that control is used, saved per save; not in tutorial/story/co-op. ✅ DONE 52ef7f56 (review: 2 defects fixed in 8ec83aaa; windowed visual QA PASS at iPhone/iPad/TV). 📍 Chris judges wording/visibility on device; the panel fill is faint on a busy fight (QA note), raise its alpha if it gets lost. The clip adopts the same component (branch app-clip).
-
Launch screen + boot splash (Chris 2026-10-15: art OK, ships in 1.1). Black Dark Cosmos screen (Cobalt hull + Orbitron wordmark) replaces the grey screen + Godot logo on iOS/tvOS (and Android/macOS via the shared boot splash). ✅ MERGED (launch-screen). Remaining: fresh-install device check (plan
docs/superpowers/plans/2026-10-15-launch-screen-boot-splash.mdTask 5): no grey/white flash, no Godot logo, no jump; uninstall wipes the Dev save. -
Boot: grey screen between the splash and the menu (Chris 2026-10-16, on device: “the splash screen shows then disappears and a slightly grey screen stays there for a bit”). Suspected:
PrewarmPass.make_boot_cover()(void fill + backdrop + glass) replaces the splash during the boot prewarm. Wanted: the splash stays, with a subtle loading animation, until the menu is ready. Branchboot-loading-cover; joins therc-1.1-combineddevice test.
3 · UI pass (Chris to detail; candidates collected 2026-10-14)
Section titled “3 · UI pass (Chris to detail; candidates collected 2026-10-14)”- ✅ DONE (improvement-batch1-salvage cbd00c06; 16 picks incl. Bestiary DISCOVERED counter, truthful codex copy, boss cue reserves; 3 review rounds; triage in docs/research) Salvage
improvement-batch1(57 unmerged UI-polish commits from 10-04, now ~830 behind main): cherry-pick what still applies rather than merging. - ✅ DONE (ui-tokens-p2-slice) Live UI tokens Phase 2: level-up
STRIP_Hup so card text returns tofont.base; pause title sizes (36/26/54); shopNAME_FONT/PAD. Card lines font.base on a 204 base strip (3 sentence lines); pause/shop sizes are named tokens at their old values (no visual change). - ✅ DONE (tv-title-safe commit) tvOS title-safe margin (the helper returns 0 off-touch). Chris: helper-wide.
Platform.safe_insets_pt()on tvOS = max(OS safe area, 5% per edge); HUD top stack + objective panel shift with it. Consequences: shop 3 columns on TV (was 4); the level-up stats sheet scrolls long weapon paths on TV (right stick), as on iPhone/iPad. Judge on the ATV with overscan on and off. - ✅ DONE (levelup-big-cards, merged 2026-10-17 overnight, d1da3e0c; 2 review rounds; Chris judges sizes on device) iPhone UI too small, especially the level-up upgrade cards (Chris 2026-10-16: “it is all a bit too small, specially the upgrade cards, they need to use the whole screen and bigger fonts”). Scope undecided: recommended = upgrade cards only for 1.1 (fill the iPhone screen, larger type; fit-tested at every
ShopLayoutFixtureprofile incl. worst-case content + bh-visual-qa iPhone/iPad/TV), full iPhone UI pass deferred to 1.2. Chris to choose. - ✅ DONE (21965ab6, overnight W2) iPhone start menu: the footer hint (“Tap to select · swipe to browse”) is clipped at the bottom
edge, inside the home-indicator area. Pre-existing on main 0784003d (found by the difficulty-modes
visual QA, 2026-10-15; captures in that plan’s
task-6-visual-qa.md). - ✅ DONE (quit-confirm commit) QUIT RUN label pale next to RESET’s red. The dialog lived on the unmerged
improvement-batch1(9fcc2152); cherry-picked to main with both button labels in their own accent (QUIT RUN danger red, KEEP PLAYING cyan). The rest ofimprovement-batch1is still unmerged. - ✅ DONE (stats-value-font commit) Stats sheet
VALUE_FONT→font.lg(18); fit tests green on all profiles. - Neutral-pad bumper labels (L1/R1 vs LB/RB) + Nimbus glyph check on the ATV.
- ✅ DONE (dimension-chip commit) Dimension chip placement; delay the next-Dimension popup after a boss death:
chip in the top-centre stack below the boss row (banner moved to y 152), arrival card in the bottom-centre slot clear of the touch controls, popup 1.0 s hit-pause via
DimensionChoicePanel.OPEN_DELAY_S. Note: branchimprovement-batch1still holds unmerged work beyond the chip. - ✅ DONE (death-recap-hazard merge) Death recap names hazard / FunZo deaths as zone damage (branch
fix-hazard-death-advice, 2 commits from 10-04,ui/death_recap.gd+ a test; merges cleanly on main 5d889a77). Found orphaned in the 2026-10-16 worktree triage: needs a gate + review, then merge. -
./scripts/ui-sweep.shbaseline at iPhone / iPad / TV before the pass,bh-visual-qaafter each change.
3a · QOL audit (2026-10-14; evidence docs/research/2026-10-14-qol-and-marketing-audit-1.1.md)
Section titled “3a · QOL audit (2026-10-14; evidence docs/research/2026-10-14-qol-and-marketing-audit-1.1.md)”Real store data is n = 9 installs: 1 finished the tutorial, 0 came back next day, 0 shop purchases. Ordered by impact/effort; Chris picks what makes the freeze.
- ✅ DONE (f1c7963a, 83a62b97) Skip Tutorial on the forced first-run boot (
main.gd:604-621), and shorten lesson 0: 8 started, 2 got past lesson 0; the two who quit it instantly played Survival fine. - Tutorial-window crashes (W1 overnight,
docs/research/2026-10-14-first-play-crashes.md, merged 5646d0f3): the audit’s “4/9” was WRONG. Only 1 real store player had an unexplained exit (iPad Air M2 on 255, mid “Ship stats” dialogue, steady 60 fps, no MetricKit payload); the Mac “crash” was our own smoke-test kill. Found instead: a CoreHaptics exception crash on the 1.1 lineage (fix merged 5646d0f3; native compile checked 2026-10-15, device check pending), a fork shutdown crash (315/322, open), and a 23-25 s first-launch wait on a fresh iPhone install (319) vs 0.3 s on 255: runbh-fresh-install-stall-checkbefore submitting. - ✅ DONE (77ca2e04) Music / SFX volume sliders for players (only Dev Debug Settings has bus control today).
- ✅ DONE (77ca2e04) Reduce screen shake / flashes toggle (store builds have no quality ladder to soften them).
- ✅ DONE (6138edb2, 77ca2e04) SETTINGS on the start menu (
ui/start_menu.gd:74-90) so the above aren’t pause-menu-only. - (overnight 10-16: investigated, docs verdict merged bc0d1dcf; ATV device check still needed) tvOS Menu on the root menu → Home: no
ui_cancelhandler instart_menu.gd. Verify on the ATV first (1.0 passed review, the engine may already pass it through). - Early-run difficulty: Survival median death ~68 s, 5/14 under 30 s, all swarmer/charger, nobody
reached a boss. Tune the first 60 s live via the console (Chris’s call). SUPERSEDED 2026-10-16: the difficulty-modes spec (Normal = gentle start, Hard = today’s tuning) replaces A1/A1c/A2; do not publish them. DECISION (Chris): measured
proposals A1 / A1c / A2 + unpublished patches on branch
balance-1.1-proposals(0eb0c01a),docs/research/2026-10-14-balance-1.1-proposals.md; remote-config, does not block the binary. - Orbit + Nova are near-dead picks (Toby run 881, ATV 325, 883 s L36): Orbit picked at 105 s did
79 damage all run, Nova 1.8k, vs Blaster 68.7k + Rift Bolt 39.4k. Both were picked once and never
upgraded, so check base-level damage/uptime (not just evolved) and tune live via the console. Cross-check
(BUILD >= 300, runs > 120 s): Orbit median 0.1% of damage in 4 human + 25 bot runs, Nova 1.4% / 1.7% in
5 human + 27 bot runs. Not a one-run fluke. DECISION (Chris): patch B1 (Orbit 0.1% -> 11.8%,
Nova 4.8% -> 12.3% damage share) on branch
balance-1.1-proposals, same doc. 2026-10-16: B1 published to the DEV channel only (build-331@dev=b331-dev-001, Chris’s OK) for the combined device test; it also drops the dev-only “balance v3 trial”. Store B1 still undecided. Event Horizon’s ×1.4 radius / ×1.6 damage became tunables (WeaponOrbit.EVOLVE_*, onrc-1.1-combinedf99e8651). - ✅ DONE (ef38c053, c010207e) Shop discovery: real players banked 218-729 gold and bought nothing. Make the first purchase obvious on the results screen (e.g. “You can afford X” line) + gold pulse on the pause-menu SHOP row (TF #13).
- ✅ DONE (c010207e) Level-up cards show the current level (“Lv 2 → 3”).
- ✅ DONE (a67b0d36; iOS live, Mac no-op until the addon is in the macOS preset; device check pending) Ratings prompt (iOS + Mac; tvOS has none): native
requestReviewon a positive moment (boss kill / personal best), never on death. 0 ratings on the store today. - ✅ DONE (6138edb2) Drone-nudge off switch in the pause menu (TF #4; today it’s Dev-only).
- ✅ DONE (results-polish ce29018e) Results screen: “unlocked X / next goal” line (NEW BEST / next shop goal / best time, per difficulty); death screen now shows real enemy names, not internal ids.
- ✅ DONE (controller-disconnect-pause c012d213; 2 review rounds; ATV check: switch the playing pad off mid-run) Controller disconnect → auto-pause + prompt (ATV).
- ✅ DONE (mac-window-mode 8f7d311f; Mac check pending) Mac fullscreen / windowed option.
- Capture for the next read: death dimension, level-up time-to-pick, shop opens, input type.
- 1.2 candidates (not 1.1): iCloud save sync, Game Center, level-up reroll/skip, colourblind mode, text size, touch auto-aim, left-handed layout, remap.
4 · Internet co-op (Phase 4 relay): parallel track, target 1.2
Section titled “4 · Internet co-op (Phase 4 relay): parallel track, target 1.2”Spec docs/superpowers/specs/2026-10-07-networked-coop-design.md § 6. Built on its own branch; it does
NOT gate 1.1. It may ship dark in 1.1 only behind a remote-config flag defaulting OFF in store builds,
so it can be switched on without resubmission once Chris has finished a full internet run (ATV at home
- iPhone on cellular). Without Phase 5 (reconnect) an iOS backgrounding drops the session, so the flag stays off for players until then.
- ATV: online lobby HOST / JOIN do nothing (Chris 2026-10-16; works on iPhone).
ui/online_lobby.gdrelies on Button focus + built-in ui_accept, unlike every other menu (explicit_inputconfirm + MenuNav). Branchfix-online-lobby-atv. - ✅ DONE (fix-lan-lobby-atv 56b8ad09; 3 review rounds; Dev-only screen, ATV check pending) ATV: LanLobby has the same latent bug (found in the online-lobby review 2026-10-16):
ui/lan_lobby.gd:98-101only handlesui_cancel; the Siri Remote click arrives as JOY_BUTTON_A via SDL3, neverui_accept, so its Buttons can’t fire on Apple TV. Same fix pattern asfix-online-lobby-atv. - Implementation plan
docs/superpowers/plans/2026-10-14-internet-coop-relay-phase4.md(branchcoop-relay-plan) → Chris OK → SDD.
5 · Store listing
Section titled “5 · Store listing”- ✅ DRAFTED (ae24da28,
marketing/appstore/whats_new_1.1_{ios,tvos,macos}.txt; trim the PENDING MERGE section at freeze) What’s New for 1.1: rewrite fromcontrol/src/whats_new.jscovering everything since store 255 (the draftedmarketing/appstore/whats_new_1.0.2_ios.txtstops at build 295: no HDR/P3, music, SFX overhaul, Supernova, death sequence, Rift detonation). Separate texts per platform (tvOS and Mac have had different previous versions). - iOS iPad set: upload
marketing/appstore/ipad_v2/(8 shots). - iOS previews:
marketing/appstore/previews_v2/{iphone,ipad}/(gitignored; rebuild permarketing/appstore/SUBMIT.md). - Consider fresh screenshots/previews showing the new music-era visuals (HDR, Supernova) — Chris’s call.
- ✅ DRAFTED (ae24da28,
marketing/appstore/copy_1.1.md) Description (locks with 1.1): “lightning” → “Electricity”; put Apple TV + controller support and “no ads, no in-app purchases” in the first three lines. - ✅ DONE (store-copy 2308c0fb/093d254f: verified the names are still true, caption kept) Screenshot caption 3 (“Evolve Beam into Lance, Railgun into Prism Lance”) assumes weapon names; recaption.
- No build needed, can go now (audit 2026-10-14):
- ✅ DONE (site 3a51dfb, deployed 2026-10-14) Site: “Available on” line, closing line and meta description still say iPhone/iPad are in review
(
~/Claude/bullet-heaven-site, itsscripts/deploy-site.sh). - Promotional text: rotate to 1.0.1/1.1 content + no-ads/Apple TV line (no review needed).
- Keywords: drop subtitle repeats (
survival,roguelite,twin stick) andarcade/action; tryroguelike,bullet hell,shmup,space,swarm,top down,controller,offline. Updatecustom_product_pages.mdto match. - Custom Product Pages (drones/bosses/builds): unblocked by the 10-14 iOS approval.
- In-App Event for the 1.1 content; answer the featuring nomination (offered 10-04).
- ✅ DONE (site 3a51dfb + 81ec003 drops the dev-only co-op claim, deployed) Site:
/sitemap.xml404s, addVideoGameJSON-LD, a press page frommarketing/appstore/press/.
6 · Deferred to after 1.1
Section titled “6 · Deferred to after 1.1”ATV mid-run ~1 s stalls, GPU fill-rate pass, controller “stops responding” (unless it reproduces), LAN
join-list on iPhone, learning autopilot/persona work, and the remaining open items in
docs/RELEASE-1.0.1.md.
Unmerged branches found in the 2026-10-16 worktree triage (each still on its local branch):
gfx-loop-1007b: 41 FX commits (Ghost eye, Void flicker, elite threat, damage-number sizing, Chalice “Brew”), awaiting Chris’s device verdict since 10-08; 19 conflicts vs main now, so salvage by cherry-pick.fix/input-mid-run-app-background-foreground-flips-(7e24bc8f): controller diagnostics on background/foreground + auto-pause on background. It is the instrument for the controller “stops responding” item above; 6 conflicts.
7 · Release steps
Section titled “7 · Release steps”- Freeze, then one
scripts/release/release.shcandidate from main; Dev installs on ATV + iPhone + iPad for §1. - Upload, attach builds, set What’s New, submit iOS + tvOS (Chris’s same-day yes), macOS per the rule above.
- Re-check EU storefront presence after release:
itunes.apple.com/lookup?id=6783842805&country=<cc>(DSA trader status declared 2026-10-14; DE/FR/IE/NL were still propagating that day).