Skip to content

improvement-batch1 salvage triage (2026-10-17)

improvement-batch1 salvage triage (2026-10-17)

Section titled “improvement-batch1 salvage triage (2026-10-17)”

Item: RELEASE-1.1 §3, “Salvage improvement-batch1 … cherry-pick what still applies rather than merging.” Worker W15, overnight swarm 2026-10-16.

This salvage was already done once, on branch salvage-batch1 (origin, last commit e2526c80, 2026-10-16 17:15). A Droid session cherry-picked 25 of these commits onto main, adapted them, and took two bh-reviewer rounds. Round 2 left one copy blocker (Scatter/Momentum What’s New claim), which e2526c80 then fixed. It was never re-reviewed or merged. Since then main moved 43 commits (overnight merges: levelup-big-cards, polish-bestiary-copy, stats sheet work), and salvage-batch1 now conflicts with main in 5 files: data/bestiary.json, main.gd, tests/test_stats_sheet_view.gd, ui/level_up_panel.gd, ui/stats_sheet.gd.

So this pass did not redo the salvage from the 10-04 originals. The new branch improvement-batch1-salvage takes the already-adapted, already-reviewed salvage-batch1 versions of the cheap commits onto current main, and leaves the risky remainder on salvage-batch1. When salvage-batch1 is later merged with main, the picked commits carry the same content, so they merge as no-ops.

57 commits on origin/main..origin/improvement-batch1: 45 non-merge + 12 merge commits.

Class Count Notes
already-on-main 6 quit confirm, dimension chip (2), chip tokens, death recap, literal-ratchet docs
superseded 2 pause Sound row (main has VolumeSettings in Settings), literal-ratchet refactor of branch UI
still-applies-cheap (picked) 11 plus the codex half of a salvage-batch1 follow-up fix
still-applies-risky 9 main.gd / sim / level_up_panel / hud / telemetry vocabulary
not-wanted (dev-only / bookkeeping) 17 punch-list ticks, capture harness, evidence docs, CLAUDE.md/skill doc edits
merge commits 12 not picked by definition

sb1 = the adapted commit on salvage-batch1. “Picked” = on improvement-batch1-salvage.

improvement-batch1 Subject sb1 Class Why
dde9ab5d fix(fx): boss reactions and the accumulator warning survive a busy frame 6acf8699 cheap, picked fx_manager only; boss reaction / accumulator warning were dropped under the juice cap
b6b269fc fix(audio): reserve per-frame slots for priority boss cues 470ad1e8 cheap, picked audio_manager _route 10 lines; merges clean against sfx-synth-all
9be8c576 test(render): pin archetype type->shape coverage 7a47b956 cheap, picked test only
b41cd2a9 docs(polish): tick the three batch-1 punch-list items - not-wanted punch-list bookkeeping
b6d9a8af fix(fx): element colours and slam radius come from the sim data 57e2ae9b cheap, picked sim side is one extra element key on the wildfire_pop fx event (no RNG, render-only consumer). Store-visible gain: Wildfire ring + ignite spark take the element colour; elite Brute slam ring shows its real radius
cdd6e045 docs(polish): tick batch-2 punch-list items - not-wanted bookkeeping
011ae05a fix(render): show the player’s burn/slow status, and raise the bomb telegraph 37a983d2 risky main.gd hunk
a115686c docs(polish): tick batch-3 punch-list items - not-wanted bookkeeping
3a405e91 fx(warden): strafe thrust cue reads render_info “strafing” c4bdb7f8 cheap, picked new fx node + vfx_library entry; BossWarden.strafing() already on main
51f063c0 render: draw Halo Chain tethers and the enemies their field buffs 354fb4e8 (+6e7c6ec4) risky main.gd + sim/halo_chain_director.gd; an invisible-mechanic fix worth landing via salvage-batch1
bbf0a414 ui(hud): show the active Dimension after the choice popup - already-on-main a0091223 (dimension chip)
57e1572d telemetry: run_end carries the death cause d9daf9e6 risky main.gd + telemetry vocabulary; Worker deploy order
0e31d92f docs(polish): annotate batch-4 items - not-wanted bookkeeping
f750832a tools(polish): in-run capture harness 2e7a671d not-wanted dev tool; tools/ui_capture covers this now
37e8fc62 feat(ui): bestiary shows “n / m DISCOVERED” counter 3151214a (+7e8805c4 codex half) cheap, picked codex_overlay only
f0791f92 docs(punch-list): stamp run 28 #2 commit hash - not-wanted bookkeeping
7325d96f feat(ui): player-facing Sound row in the pause menu - superseded main ships Music / Sound effects volume in Settings (audio/volume_settings.gd); also touched main.gd + save schema
9fcc2152 feat(ui): confirm before “Quit to menu” - already-on-main bd22085e
0280b028 fix(hud): the Dimension chip was drawn half off-screen - already-on-main chip rebuilt in a0091223
caf9b8c3 docs(punch-list): mark Run 15 #1 and Run 21 #1 done - not-wanted bookkeeping
16548afd docs(polish): windowed-capture evidence - not-wanted evidence for a branch state that no longer exists
25ee905e tools(polish): capture the boot menu and the post-run menu d95c787a not-wanted dev tool
6beebc34 tools(polish): capture the pause menu and quit-confirm 62c031be not-wanted dev tool
aea7c729 tools(ui-sweep): stop the menu capture depending on the dev save 8a3bdbb5 cheap, picked tooling fix, applies clean (the baseline PNG was not carried)
844635e1 docs(polish): windowed check for the Sound row - not-wanted bookkeeping
b2d7680d fix(ui): death recap classifies hazard and funzo as zone damage - already-on-main patch-equivalent (git cherry -)
7cabfc77 docs(punch-list): close run 17 hazard advice - not-wanted bookkeeping
6236fc79 fix(fx): scale the death dissolve with the dying body’s radius 69cf7c17 risky sim/sim.gd
bb319f4d tools(vfx): preview the real boss-size death dissolve 0890cf52 risky depends on 6236fc79
627ee835 docs(polish): record boss dissolve verification - not-wanted bookkeeping
226a4a76 docs: VFX library cards must prove their named renderer 540ec9f1 not-wanted CLAUDE.md conflicts, file is at the 30KB budget; leave to salvage-batch1
bed1b9c5 refactor(ui): branch-added UI reads live tokens - superseded its chip/pause targets were rebuilt on main; codex part carried by the 7e8805c4 half
d9cfd0cb fix(render): a dead boss no longer stays drawn under the Dimension popup 790308b8 risky main.gd + test_main
b57b924f docs: record the UI literal ratchet - already-on-main docs/architecture/ui-tokens.md § The literal ratchet
7fc5dd04 refactor(ui): Dimension chip reads live tokens - already-on-main main’s chip already reads Tokens
c4faf8bc fix(content): codex and story text match live sim behaviour a78a02b2 cheap, picked 2 conflict hunks with overnight polish-bestiary-copy (Skirmisher, Halo Chain), resolved to the branch text after checking the sim: Skirmisher flips strafe every shot (enemy_behaviors.gd:143), tethers re-form after TETHER_BREAK_COOLDOWN 1.0 s
81ee849e fix(ui): HUD, objective bar, level-up, dimension choice inside the safe area 8938766e risky level_up_panel + hud; levelup-big-cards just merged
258d2ede test(story): one-step lessons report only step 0 25bcbbde cheap, picked test only
b994a37d fix(fx): stop boss-death labels drawing over each other 08bcb717 risky 5 sim boss files (small render_info stamps)
adb27a0e docs(punch-list): close batch 7 - not-wanted bookkeeping
9b2dc4d7 docs: RebindProbe walks whole panels; weakref() annotation 85b779bb cheap, picked gotcha docs, applies clean
154972a9 docs(skills): base suite before parallel dispatch 5d6ea8f8 not-wanted process doc; leave to salvage-batch1
b865bc61 fix(ui): level-up cards clear the side safe-area insets 40bfc15e risky level_up_panel; re-check against the big-cards layout
7db55fc9 fix(content): Tank Missile codex names the Summoner a29170a2 cheap, picked applied clean after the codex-text pick
151fe616 docs(punch-list): level-up side insets and Tank Missile done - not-wanted bookkeeping

The risky nine live on salvage-batch1 with two review rounds behind them. To land them: merge origin/main into salvage-batch1 (5 conflicts: bestiary.json is now trivial since this branch carries the same text; main.gd; the level-up / stats-sheet trio needs real work against the big-cards layout), re-run the fit tests at every ShopLayoutFixture profile, then a round-3 bh-reviewer. Its What’s New / store-copy bullets (a45f5f6e, ea7c5818, e2526c80) describe the whole batch, so carry only the lines for commits that actually land.

Capture check (iPhone / iPad / TV) and a pre-existing bestiary bug

Section titled “Capture check (iPhone / iPad / TV) and a pre-existing bestiary bug”

The one picked change with layout is the bestiary “n / m DISCOVERED” counter. tools/ui_capture gained a codex scene (opened through the real start_menu.bestiary_requested path) and was run at iPhone, iPad and TV. The counter sits right-aligned in the title row and reads cleanly on iPhone and TV.

Comparing the same capture on origin/main surfaced bugs that are already on main, not caused by the pick, and not fixed here (codex layout + touch input is more than a salvage pick):

  1. iPad: the whole bestiary overflows to the right. The detail plate’s fixed minimums (list 220 + preview 300 + text 360 + margins) exceed iPad’s 985-unit canvas, so the card text, the stats row and now the counter (“32 / 32 DISCOV”) are cut at the screen edge. Same on main without the counter.
  2. All devices: the 32-row list has no scroll. Rows past about Accumulator (iPhone) or Beacon (TV) are drawn off-screen, so selecting them with a pad moves the cursor out of view.
  3. [Likely] iPhone/iPad touch-only: the browse cannot be navigated at all. _input treats any screen touch as “close”, and nothing maps a swipe or a row tap to a selection, so a touch-only player only ever sees the first entry (Swarmer). Needs a device check.
  4. iPhone: the 56-unit root margin ignores the safe-area insets (78 units on the left in the iPhone profile), so the title and list start inside the notch band.

Suggested follow-up: ScrollContainer around the list with the selection kept in view, row taps select (tap the selected row or a close button to dismiss), margins from Platform.safe_insets_units, and a fit test at every ShopLayoutFixture profile.