Every public build of The Chronicles of Nesis, newest first.

v0.7.2069

3 changes

New

  • cache version-query engine fetch for wasm+pck (CACHE-BUST-WASM-PCK)

Improved

  • deploy extract patch_index_js to shared tools/lib/cache_bust.sh

Tested

  • cache regression guard now covers the PUBLIC build index.js (the iPad/PWA source)

v0.7.2068

13 changes

New

  • shell surface real first-load progress bar — reverse dot-only spec
  • title background preload Laria.pck while player sits on Title
  • testbridge add new_game_started funnel signal to gameState

Fixed

  • QB-005 WordsOnBlack auto-transitions to EliasHouse after intro dialogue closes
  • autoplay AP-ROUTE-GAP — events 3/5/8 now schema-driven via triggerKind
  • webkit remove Title screen-reading shaders (god-rays/water/cloud-shadow) — iPad Title asset-drop fix
  • P2 guard HoverIndicator JSON.parse_string against non-JSON eval results

Tested

  • conftest per-file browser isolation + bulletproof zombie/OOM teardown
  • infra close residual zombie/OOM gaps — reap init-orphans, playthrough teardown, pytest-timeout
  • infra scale xdist to 4 workers + per-deploy release/pick gates
  • frontier refresh pre-combat saves to 0.7.2048 + add cond_00 EliasHouse

Tooling

  • one-command rebuild of the encrypted web export template
  • webkit_verify.py — Safari/WebKit render smoke check

v0.7.2047

154 changes

New

  • testbridge input-routing matrix observability — 7 gaps filled
  • test-scene extend TreasureTestRoom with interior walls + area-gate interactables
  • phase9 v0.1 SIM cross-validation scaffold + battle outcome hook
  • phase9 composition override for SIM cell catalog parity
  • phase9 between-battle reset — respawn killed enemy bodies
  • balance encounter_sim_v3 — player avoidance axis + per-room rates
  • balance wire v3 encounter rates into attrition_sim + tuning knob
  • balance ambush + boss scene kinds + XP/level tracking
  • balance combat_sim VSlime poison terrain + smart-kite policy
  • church-square 2x cinematic zoom for Event 1 combat intro
  • church-square combat transition tuning + Hero's Song persistence
  • status-menu make Clear WASD-navigable like Save
  • options default focus to Save on the New Game flow
  • Dialogue Size dropdown in Options menu (Small/Medium/Large)
  • skilltree add Skill_RelicSlot.png for the relic-slot node
  • skilltree relic-slot nodes (id 31, 1 SP) above Smite + Line-Smite
  • combat directional slash — orient crescent to attack facing
  • testbench CombatVFXBench — 4-direction combat animation/VFX bench
  • testbench CombatVFXBench Animation/Combat mode toggle
  • debug Debug Menu > Test Scenes > CombatVFXBench load button
  • title corner Debug button opens DebugMenu from Title
  • testbench live slash-shader tuning via live_cmd (broadcast-driven)
  • testbench prompt attack->idle + damage-floater buttons
  • testbench live-tunable slash flip + attack feet nudge
  • capture _testCaptureMode composite for clean marketing recordings
  • skills-menu Phase 2 relic slots row + picker (runtime slotting)
  • SkillsMenu relic slot picker diagnostic logs + version bump v0.7.2001
  • relic-slots persist Skills-menu relic slot bindings across save/load
  • quinn Movie Maker capture infra — QuinnTourDriver autoload + harness
  • combatgrid debug_paint setter queue_redraws on toggle (live-tuning)
  • combatgrid @tool + editor-draw so the grid is visible/editable in the editor
  • churchsquare reposition combat grid in editor (position 0,30 -> 10,12)
  • controls-discoverability Phase 2 — InputMap rebind + device tracker + title card
  • controls-discoverability commit glyph assets + card uid + Tier-1 preventDefault
  • controls Kenney glyph swap + GlyphResolver + ControlsCard PS branding + ModeIndicator
  • title hide TitleMenu while ControlsCard is visible (Task A)
  • pause Controls button in pause menu + ControlsMenu reference table (Task B)
  • title rewrite ControlsCard into persistent two-corner control-hint HUD
  • ui control-UX triple: HUD corners + remove pause Controls + title Controls item
  • controls Phase 2 consolidated — 4 modes, backing, flush corners, 2-col menu
  • hud diamond action cluster, ModeIndicator top-right + Title suppress, difficulty popup upward
  • hud WASD diamond cluster + difficulty subpanel enlarge
  • spine auto-derive scene nodes from test_index + coverage-gap report
  • export encrypt both web PCKs (debug + public) via custom keyed template

Fixed

  • autoplay Phase 8 partial — chest state machine + 3 real game fixes + bd-ch80
  • menus bd-eq73 — consume ui_accept in EquipmentMenu._input
  • switch unify bootstrap/pack Switch.gd + bump version
  • interaction bd-ig01 — gate _fire_pending_interact on area overlap
  • autoplay bd-ch80 — Phase 8 chest cycle completes after area-gate land
  • combat camera: widen Camera2D limits during combat (Waterway1 fix)
  • combat camera: per-edge grid margins + fix transition jump (global vs local pos)
  • combat camera: round 6 — grid bounds include cell half-size (the real bug)
  • combat camera: regression tests for transition silence + autoframe gate
  • treasure overlay: fix WASD interact same-frame dismiss race + WASD pin
  • bridge jump regression pin (Group C)
  • regression pins for highlight + cursor (owner 2026-06-17)
  • fix initial-highlight + feather-on-mouse-motion (owner 2026-06-17)
  • fix disabled-button focus-bleed (owner 2026-06-17)
  • feather-only in MOUSE mode + exactly-one-cursor regression pin
  • fix parse error in ui_left/ui_right elif indentation
  • churchsquare-zoom zoom timing, zoom-out survival, victory music silence
  • dialogue name-persist on multi-line and event dialogue; bump box+font sizes
  • mainmenu disabled-button highlight bleed — 3-root-cause fix
  • status-menu WASD nav focus + feather on open; robust integration tests
  • status-menu Save/Clear feather to bottom-right corner; Down-from-Clear → char; stop stray button highlights
  • saveload clear save-slot highlight when WASD nav enters Export/Import row
  • packloader stream pack download so the LoadingScreen bar fills
  • save persist learned tree skills + per-unit stats across save/load
  • equipment scope bd-eq73 ui_accept consume to WASD — restore mouse clicks
  • skilltree blue-filled lit connectors + full-chain lighting + cursor
  • cursor stop PlayerCharacter forcing OS cursor VISIBLE inside menus
  • combat slash crescent stays stationary (sweep_extent 1.20 -> 0)
  • cursor feather tracks real pointer in MainMenu mouse mode (no button warp)
  • hud gate status/debug watermark overlay on GlobalWorld.debug
  • options shorter dropdown rows + WASD nav advances from current
  • cursor feather tip lands exactly on the mouse (was ~30px up-left)
  • testbench show the OS cursor in CombatVFXBench
  • combat attack feet anchor to frame 0 (no idle->attack jump) + bench flip
  • equipment re-resolve _unit on action-panel build — first-open empty sub-page
  • skills-menu relic asset fits inner ring (~3px frame) + WASD nav to relic slot
  • title hovering Debug clears hoverMode so its click doesn't fire New Game
  • skills-menu 5 relic-slot picker + WASD nav fixes
  • churchsquare 3x slower custom Event-1 cinematic zoom (1.5s -> 4.5s)
  • churchsquare zoom linear ease so the 4.5s cinematic zoom reads as deliberate
  • churchsquare disable perspective camera zoom (perspZoom 1.0 -> 0.0)
  • churchsquare zoom tween from current zoom (no .from snap-out)
  • combatfacepicker use global_scale for head-top (arrows too high on scaled scenes)
  • fix public-build deploy gaps (App Claude GAP 1+2)
  • autoplay add triggerKind=area_enter to Events 9+10 in core_EventConditions.json
  • Merge Event-10 AutoPlay fix: triggerKind=area_enter for Events 9+10
  • QB-003 loadGameSave leaves player permanently isLocked
  • Merge QB-003 load-lock fix: clear locks + skip event re-fire on save-load
  • controls replace := with explicit types in ControlsMenu (parse errors)
  • controls replace red-cross mode_controller.png with PS5 controller silhouette
  • modeindicator flush top-right corner (overlap minimap OK, owner)
  • options difficulty now saves to localStorage and restores on boot
  • options WASD focus index 8->7 after in-game Options>Save>close
  • options difficulty popup opens under the button, not top-left
  • options difficulty confirm uses highlighted item, not stale tracker

Improved

  • equipment remove gear-relic slots — relics slot via Skills menu now

Tested

  • interaction bd-ig01 13-cell area-gate matrix
  • combat transition: state machine + contract test suite
  • combat transition: enemy-first lockout test + force-first-actor hook
  • _testWarpToScene warp hook for App's walkthrough capture
  • testbridge warp: also hide pack overlay as a side effect
  • DialogueTrigger pack-mirror + Group B proximity hint tests
  • church-square pin 2× cinematic combat zoom contract (e62f611 regression)
  • regression three Tier-3 pins for recent menu + dialogue fixes
  • status-menu WASD-driven JP spend → Save / Clear integration tests
  • options pre-warm Laria pack in New Game Save→WordsOnBlack pin
  • status-menu stat-coverage breadth + battle-stat mapping suite
  • status-menu GAP 3 — rendered stat-label text updates on-screen
  • skilltree grant→stat-apply + menu-reopen + save/load persistence suite
  • cursor pin single-cursor invariant in menus
  • skills Tier-3 regression for Skills-menu relic-slot picker
  • skills,title relic-picker UX + Title Debug-click regression suites
  • QB-003 pin Continue/Load no-soft-lock regression
  • controls+difficulty Phase-2 control regression pins + difficulty persistence + spine.json

Release

  • staging bump WEB_VERSION to 0.7.2042 for staging build
  • bump WEB_VERSION to 0.7.2047 (encrypted build, fresh version)

Docs

  • framework gotcha #69 — walrus := load-failure, scoped (was memory-only)

Maintenance

  • autoplay Phase 7.3 partial — state machine + 300ms EquipmentMenu debounce + bd-eq73
  • testscenes commit ArenaBench.gd.uid (auto-generated)
  • per-turn input lockout contract + AutoPlay integration
  • combat camera: pan-clamp contract — bg edge ↔ HUD edge within 2px
  • combat camera: grid soft-margin clamp + Background node fallback
  • combat camera: round 5 — Y-only limit widen + top margin 20
  • combat camera: transition no-motion + 40px-margin autoframe (0.5s)
  • walkthrough scene-graph for App's magazine-scroll guide
  • combat camera: bump AUTOFRAME_SAFE_MARGIN_TOP_PX 140 → 250 + Vera pin
  • combat camera: autoframe trusts safe-rect; GRID_TOP_MARGIN_PX 20→210
  • G3→G4 migrate waterwayChannel.gd + SluiceGate.gd + water-state pin
  • laria batch: missing audio assets + ChurchSquare music + revert feather-follow
  • lock in FrontHills position (-700, 0) — owner live tune
  • mainmenu + cursor: residual highlight + feather-follow with hide watchdog
  • cursor v5: clear custom cursor texture in notify_mouse_motion
  • include Export/Import in _mb_interactive_controls
  • move Export/Import row above the scrollable save-slots
  • WASD nav reaches Export/Import + larger font
  • Merge sandbox/vera-ae814601 into develop
  • action-row nav — up/down jump to slots, left/right flip
  • release action-button focus when leaving action row
  • Merge sandbox/vera-a7e4934e into develop
  • WEB_VERSION 0.7.1959 (session redeploy bumps) for staging cut
  • testbench slash flip_x mirror (across Y axis) per owner
  • quinn relocate capture infra off develop
  • WEB_VERSION bump to v0.7.2015 (redeploy artifact from relic-picker + title fixes)
  • churchsquare zoom 2.0s (was 4.5s — owner: too slow)
  • remove Dialogue Size option from Options menu
  • nudge DownRight slash crescent right + up (offset 0.15,-0.15)
  • live slash-shader preview hook for in-browser tuning
  • CombatShaderTuner — tabbed live tuner for combat shaders
  • controls update .import UIDs to Godot-assigned values after export
  • controls commit new-autoload .uid + mode_touch .import

v0.7.1848

23 changes

New

  • autoplay Phase 2 — boss-engage level override
  • autoplay Phase 3 — combat retreat as per-persona toggle
  • autoplay Phase 4 v1 — shop detour routing on retreat cycle
  • autoplay Phase 4 v1c — shop buy state machine + merchant flakiness diagnostic
  • TestBridge add _testCloseShop hook per Vera merchant-test conftest gap
  • combat Item skill opens ItemsMenu mid-combat, consumes + heals
  • autoplay Phase 5 — Scout consumes Mugwort mid-combat
  • autoplay Phase 6.1 — open StatusMenu when leveled up
  • autoplay Phase 6.2 — StatusMenu observation layer
  • autoplay+ui Phase 6.3 — spend JP + Save via WASD nav
  • testbridge expose raw stats via _testReadPartyXP
  • autoplay Phase 7.1 — open EquipmentMenu when inventory has unequipped gear
  • autoplay priority report on top-left debug overlay
  • autoplay Phase 7.2 — EquipmentMenu observation layer

Fixed

  • redeploy sync Web Public variant to AppC dir + drop self-ref symlink
  • autoplay Phase 4 v1b — Merchant interact via NPCInteractionArea
  • autoplay Phase 4 v1c — click on Merchant sprite not NPCInteractionArea
  • autoplay Phase 4 v1d — buy Mugwort not Irid Liquor + shop debounce + loop gate

Tested

  • Vera StatusMenu feather tests (d0b535a) + Arc Phase 1 retreat-to-bed (047638d)
  • shop pin GeneralStore Merchant interact → shop-open contract
  • Merge sandbox/vera-merchant-tests-002 into develop
  • shop pin AutoPlay Phase 4 buys Mugwort, not Irid Liquor

Maintenance

  • autoplay remove shop-trace diagnostic — kept buy state machine

v0.7.1810

8 changes

New

  • autoplay per-turn watchdog + WaterwayChannel exit unlocked
  • redeploy+plan BUILD_PUBLIC=1 default + AutoPlay persona plan doc
  • autoplay Phase 1 — risk-based retreat-to-bed router

Fixed

  • autoplay bail combat cursor from stuck-direction loops
  • autoplay stop cancel-spam after attack confirm + intent diagnostic
  • status-menu remove unconditional MOUSE_MODE_VISIBLE on mouse motion
  • Merge sandbox/nix-status-menu-nav-fix into develop

Tested

  • status-menu pin WASD-feather invariants (regression coverage for 78a9bc4)

v0.7.1803

5 changes

New

  • tier-gated gate DebugMenu behind OS.has_feature("public")
  • tier-gated Web Public export preset + opt-in dual-build

Fixed

  • status-menu revert _debug_value_override default to empty (real stats)
  • status-menu remove gold focus ring — feather + standard Button focus
  • redeploy kill prior Tier 5 playthrough before kicking new one

v0.7.1798

97 changes

New

  • branch model: add merge_agent_branch.sh, drop sandbox sync/promote scripts
  • combat-camera single-camera refactor + QUART ease curve
  • close gap #2 — add WaterwayChannel, full topology
  • save schema: add discoveredDungeonScenes per-slot (fog-of-war)
  • minimap game-side scene-mount emits + allbyte:ready initial state
  • autoplay dungeon encounter mode + encounter NDJSON logging
  • status-menu 2D WASD grid nav for raw stat +/- buttons
  • TestBridge add _testReadUnitBattleStats + _testFireStatusClear hooks
  • status-menu canvas-rendered gold focus ring for WASD nav
  • combat transition-in 2.5s→1.0s, horizontal sword fix, transition-out sequence
  • combat XP grant + level-up sequence on enemy kill
  • damage-queue stack-aware peak Y + fade-begin gate for clean combat end
  • combat WebUnitStub.incrementExperience completes XP grant chain
  • autoplay Scout persona scaffold

Fixed

  • StatusMenu parse error from orphaned col_w reference
  • ArenaBench gets bd #9 phases 2-6; Windmill1Basement door debug bypass
  • Windmill2Basement door: same debug bypass as Windmill1Basement
  • door debug bypass: short-circuit on debug + null-safe party check
  • pre-mount bug: CombatOverlay extends Node, has no `visible` property
  • disable bd #9 pre-mount until interaction regression isolated
  • Merge sandbox/nix-cursor-cover-fix into develop
  • combat transition polish v2: 7 specs + await fixes + smoke test (v0.7.1624)
  • revert BattleTransitionHandler self_modulate change (forensic, NOT a fix)
  • autoplay three dungeon bugs — backtrack, startup delay, spurious encounter log
  • autoplay clear inBattle on loadGameSave + _testForceEndEvent
  • MenuBase restore OS cursor visibility in _mb_inherit_global_mode MOUSE branch
  • AutoPlay eliminate backtrack via fixture discoveredDungeonScenes + case normalization
  • menus update HTML5 guards to Web for Godot 4 + remove diag logs
  • TestBridge+ItemsMenu accept plain string in _testSetMenuInputMode + move _mb_inherit_global_mode out of items guard

Improved

  • combat transition cleanup: drop dead cover, hide cursor during transition, instrument pause (v0.7.1614)
  • status menu: pass 2 + 3 + live-loop refactor

Tested

  • tier2: combat script parse-error surfacing test (v0.7.1625)
  • Merge sandbox/vera-parse-error-test into develop
  • status-menu Tier-3 JP-spend regression suite (v0.7.1759 visual refactor)
  • status-menu cross-test rebuild + force-focus to land additional spends
  • wasd-nav pin StatusMenu 2D nav grid + visual baselines
  • cursor-visibility pin MOUSE-mode + menu-open contract
  • status-menu Tier-3 edge-case sweep + Clear multi-click bug pin

Maintenance

  • StatusMenu round 7: font -25%, battle column swap, battle divider
  • StatusMenu round 8: rows stretch to fill vertical space
  • StatusMenu rounds 9 + 10: panel split + tighter values + mid-panel divider
  • combat-transition: smooth StartCombat hitch + post-combat polish
  • bd #9 followup: build cover in _init so fade_in works pre-_ready
  • bd #9 followup: set ColorRect size explicitly so cover paints frame 1
  • v0.7.1574 — promote Nix's bd #9 transition smoothness to develop
  • combat-transition: cover yield uses frame_post_draw + timer
  • bd #9 phase 2: pre-mount CombatOverlay at scene init
  • bd #9 phase 3: pre-build sub-handlers in CombatOverlay._ready
  • bd #9 phase 4+5: pre-warm battle sprites + Unit pool at scene init
  • bd #9 phase 6: pre-INITIALIZE Units at scene load
  • bd #9 timing: instrument encounter path with [TIMING] +Nms prints
  • ROOT CAUSE: _BATTLE_SNAPSHOT_SCRIPT preload path was wrong
  • bd #9 re-enable pre-mount + phase 7: pre-warm BattleTheme.ogg
  • bd #9: TIMING-ABS instrumentation around encounter chain (v0.7.1602)
  • bd #9 phase 8: defer _play_battle_music (v0.7.1604)
  • bd #9 phase 9: AUDIO-PROBE results — gotcha #69 + devlog
  • bd #9 phase 10: AudioWarmer autoload (v0.7.1610)
  • bd #9 phase 10c: AudioWarmer keeps players alive (v0.7.1612)
  • gotcha #69: fold in v0.7.1612 keep-alive learning
  • bd #9 polish: tunable combat transition knob (v0.7.1610)
  • combat HUD: state banners button-styled + stat block align + End/Run + font +10% (v0.7.1615)
  • combat HUD: state banners button-styled + stat block align + End/Run + font +10% (v0.7.1615)
  • v0.7.1615: redeploy bumped, capture pause measurements
  • title menu: font +20% (44->53), true-centered, MSDF on ModernGoth (v0.7.1615)
  • Merge sandbox/nix-hud-tweaks into develop
  • Merge sandbox/nix-title-font-bump into develop
  • split MSDF/non-MSDF + in-game menu buttons +25% (v0.7.1619)
  • disable MSDF on ModernGoth.otf (v0.7.1620)
  • combat transition polish: T=1.0, units always opaque, left flip, stat-block slides, sync chunked, default target (v0.7.1619)
  • Merge sandbox/nix-transition-polish into develop
  • Revert "Merge sandbox/nix-transition-polish into develop"
  • in-game menu: unify Skills + AbilityTree text rendering (v0.7.1622)
  • combat transition polish: T=1.0, units always opaque, left flip, stat-block slides, sync chunked, default target (v0.7.1619)
  • Merge sandbox/nix-transition-polish-v2 into develop
  • in-game menu: unify all 9 button heights (BUTTON_HEIGHT=120) (v0.7.1626)
  • remove duplicate _find_first_living_player declaration (Vera-surfaced parse error)
  • Merge sandbox/nix-menu-button-height into develop
  • combat transition: reuse overworld camera (tween, no snap) + drop redundant Elias hide (v0.7.1627)
  • combat transition: TRANSITION_DURATION 1.0 → 2.0 (owner tune)
  • combat ATTACK: include actor's own cell in yellow + cursor-allowed (was d==0 excluded)
  • Merge sandbox/nix-transition-camera-elias-hide into develop
  • sim phase 1: equipment battleStatMods + loadout-aware attrition_sim + combat_sim (v0.7.1628)
  • sim phase 1 v2: data-driven availability via scene graph + treasure pack tags (v0.7.NNNN)
  • Merge sandbox/nix-sim-data-driven-availability into develop
  • combat transition: TRANSITION_DURATION 2.0 → 2.5 (owner 2026-06-03)
  • title menu: panel_margin 4→28 to clear corner ornaments
  • title menu: panel_margin 28→4 + y-offset 200→220
  • main menu: Flourishes z_index -1 (push corner sprites behind buttons)
  • status menu: Clear button always visible, disabled when nothing to clear
  • status menu: revert divider to panel mid-height
  • status menu: per-stat region tint backgrounds (raw + battle panels)
  • Waterway dungeon stitched mapview MVP
  • status menu: visual-loop session — full lock-in pass
  • regen at 596×266 (~85 KB) per AppC sizing ask
  • drop minimap assets at /godot/minimap/ for AppC fetch
  • enable via ?autoplay=1 URL query param
  • lock in session work — Arten dialogue, CharacterSubpanel right-anchor, debug logs, font import fix, .uid sweep

v0.7.1563

2 changes

Maintenance

  • StatusMenu round 4: flat 2-column layout + full names + live-tunable
  • StatusMenu round 6: +50% font + horizontal dividers under STA/SPD

v0.7.1555

3 changes

Docs

  • codify 4-branch model + WEB_VERSION/tag convention

Maintenance

  • 2-column layout + Clear button + decrement gate + battle refresh
  • sectioned 2-column layout for raw + battle stats

v0.7.1550

35 changes

New

  • skilltree CharacterSubpanel + player select buttons (parity with Status)
  • pwa Title checks for AppC PWA update pending on _ready
  • charsubpanel _charsubpanel_layout_locked tune-mode flag (live_mutate)
  • charsubpanel slim variant — 2-row compact for SkillTree header
  • charsubpanel lock in slim layout from live-mutate iteration
  • menu slim CharacterSubpanel header for StatusMenu + SkillsMenu

Fixed

  • menu pair-button horizontal chrome overlap (the actual gap)
  • debug SP/JP mutations propagate to MainMenu badges + Skill menus
  • newgame wire Laria pack download to Options Save (with LoadingScreen)
  • debug,subpanel MainMenu CharacterSubpanel refreshes on stat mutation
  • menus SkillTree height + early prebuild; Status row spacing; CharacterSubpanel 2x3 table
  • menus bump SkillTree header; fixed row gap; +/- touch; placeholders
  • skilltree drop header chrome; subpanel + select-panel fill full header height
  • partyheader detach_all hides parked widgets (no scene-bleed)
  • combat-picker inline MOUSE-mode flip on left-click
  • combat-picker UX taxonomy + diagonal-sword invariant + click manual-dispatch
  • combat-picker WASD click fires WASD-focused skill, not hover target
  • combat overlay parse error — drop duplicate show_skill_aoe

Improved

  • charsubpanel split slim data vs layout; bump SkillTree header to 140

Tested

  • skilltree Tier 3 WASD-nav + Learn regression pin

Tooling

  • sandbox<->develop branch boundary scripts

Docs

  • bugs log SaveLoadMenu UX overhaul (#9) — title-in-panel, top E/I, default focus, font
  • bugs queue Status 2-col + Save-in-raw-panel followup (#10) for Nix
  • bugs log #14 combat HUD polish; note banner work isn't in git history

Maintenance

  • combat skills picker: WASD nav paints button highlight
  • VIEW/SELECTED/CONFIRM state banners + SKILL-cancel reopens picker
  • combat skill picker: feather kill + WASD-default open + button assets
  • combat skill picker: defer WASD-open focus paint until layout settles
  • combat confirm-mode: cursor confined to valid region + AOE grey/white split + grid-bounds paint clamp + smart skill default cell
  • combat action overlay: deferred focus repaint on turn start
  • combat action overlay: reparent sword from $Control to CanvasLayer root
  • combat action overlay: persist WASD to GlobalWorld at showL(true)
  • cleanse range 3 → 0 (mirror cure)
  • bd #9: file battle transition pause for transition-polish cycle
  • deploy v0.7.1550 — promoted bc7a679 from sandbox for review

v0.7.1509

34 changes

New

  • dialogue tag scripted dialogue rows with info-critical vs flavor meta
  • dialogue first-click-scripted, re-click-rotate ambient + reminder

Fixed

  • input,dialogue click no longer flips WASD→MOUSE; unblock ambient gates
  • dialogue rotate negative-id rows; clear optionMap on rotation
  • skilltree repaint hover on BuySkillMenu pop; diag Learn click
  • input gameplay motion-deadzone — right+left click stops flipping mode
  • Laria-pack mirror PlayerCharacter motion-deadzone fix
  • transit,scarecrow WASD bypasses LeaveArea nav guard; G4 anim revive
  • leavearea body_entered backs up area_entered for post-walk arrivals
  • input,buyskill cursor visibility on real motion; diag Learn flake
  • menus Learn always-dispatch on focused; thicker outlines; drop Paladin
  • menu MainMenu row chrome overlap — vertical gap matches horizontal pair

Tooling

  • add app_deploy.sh + APP_DEPLOY.md for App-Claude self-serve web exports

Docs

  • MainMenu disabled-button text + tight-margin rule doc
  • bugs strike #1/#2/#3 (resolved in v0.6.1498/1502/1503)

Maintenance

  • Menu UI overhaul chunk 1: MenuBase style helpers + 6 menus
  • Menu UI overhaul chunk 2: DefaultButton + SaveLoadMenu + ShopOverlay + MenuOverlay + OptionsMenu + ControlsMenu + Title
  • Mobile Phase 2 #2: SaveLoadMenu Export + Import buttons
  • TitleMenu Panel uses BorderButton_Depressed (panel-with-buttons)
  • adopt MenuBase canonical button triple
  • canonical theme + Equipment 1/3 width
  • Title menu: centered + always-visible buttons; hide parked PartyHeaderPanel widgets
  • shift panel +200px and center button text
  • center Chronicles sprite above menu, real Continue disable; SaveLoad Export+Import both modes
  • Disabled button state: opaque mid-grey background + dark-grey font
  • white font (was literal-black variable misnamed "white")
  • white text + black outline on the RichTextLabel child
  • WebBridge autoload: handle allbyte:visibility postMessage
  • optionsButtonMargin 2 → 0 (buttons touch)
  • drop inner panel chrome on Ability/SaveLoad/Options pair panels
  • Laria-pack mirror DialogueHandler dual-copy to match bootstrap
  • Merge app-deploy-script: tools/app_deploy.sh + APP_DEPLOY.md for App-Claude self-serve exports
  • skilltree drop Learn click diag — owner confirmed working
  • bump WEB_VERSION to 0.7.1509 (ahead of staging@0.7.1508)

v0.6.1481

1 change

Maintenance

  • Mobile Phase 2 #1: in-game Quit button

v0.6.1476

1 change

Maintenance

  • WASD-mode left-click + parent-focus resume on pop

v0.6.1475

1 change

Maintenance

  • BuySkillMenu Phase B follow-up: force-focus Cancel, focus highlight, A on disabled Learn

v0.6.1474

222 changes

New

  • ChroniclesOfNesis-jsh pixel-perfect alpha-mask hover hit-test for NPCs
  • AutoPlay v1 MVP — Title -> Event 3 FSM driver
  • Door.gd: add nav-transit guard mirroring LeaveArea.gd bd-9sv
  • vera seed risk_map.json for pick_tests MVP
  • new spawn shape (W1=1, W2+=1-4) + stat-override tuning
  • Phase A pt2: drop MenuOverlay.update() fanout; add signature caches

Fixed

  • world-qa: drive_dialogue.py + drive.py focus-fallback timeout fix
  • drive.py _ensure_focus: DOM focus instead of click — fixes bd alu
  • unified pointer-finger icon + lock/menu/title fixes
  • mouse-mode clicks never fall through to proximity; fix walrus regression
  • revert dialogue-direct branch; fix bed loop at source
  • nav fixes: parallax bake parent, isInteracting clear, run-direction follow-velocity
  • split hover vs trigger shapes — fix spawn-back teleport
  • roan-driven QA fixes: TestBridge dialogue cleanup + remove nav fail-open
  • nav + dialogue state-machine fixes; MainSquare reparent; nav-walkability test scene
  • bake NPC bodies as holes + fix LeaveArea hole winding
  • ChroniclesOfNesis-d59 shrink OverworldVisionInteraction radius 161.9→35px
  • ChroniclesOfNesis-48y fix Bed hover area oversized by 15x9 scale
  • bd-9sv + bd-60a: LeaveArea transit-guard + NPC capsule footprint fix
  • nav fixes + tests: bd-noq + bd-co6 framework + OverworldVisionInteraction revert
  • bd-cee TreasureChest.interact gains override=false param to match 3-arg TestBridge call
  • bd-3it Switch.interact override=false + suppress-scene-entry-events knob + force_end clears inDialogue
  • key-name fix + abort signal (per-action expected-effect windows)
  • bd-ril keep cursor visible when menu is up in mouse mode
  • bd-fjn raise NavigationPolygon agent_radius 8 -> 14 to match Elias capsule
  • bd-fjn bump agent_radius 14 -> 18 after Vera sharp-corner tests wedge
  • bd-c00: nav target = click pixel (owner-directed unified fix)
  • fix intermittent scene-trigger + NPC-click target mismatch
  • gotcha #67: correct fix-requires-both-steps; recommend upstream PR
  • playthrough regression: Tier 5 default + redeploy auto-fire hook
  • nav-bake parallax-NPC dedupe + dialogue pipeline + playthrough fixes
  • bd-41u FIXED: await physics_frame x3 in bake_finished + regression test
  • bug bundle: bd-n25 shop close + bd-jsv diag + Phase C click wiring
  • test_combat_autoplay_v1: fix _combat_mode helper to read _lastCombatGetState
  • save fixture library + Title→cond=3 reliably + Basement-race pin
  • fix Windmill1 → Basement scene-transition race (bd-vkd)
  • extend past Event 9 — Event 10 area_enter + known-wait fix
  • AutoPlay puzzle phases + Waterway1 entry fixture for dungeon iteration
  • combat UI shows displayName instead of node name (bug 2 of 8)
  • wire Death→GameOver scene transition in SceneTemplate._on_battle_lost (bug 3 of 8)
  • restore combat camera pan+zoom (bug 4 of 8)
  • HP persists across combat encounters (bug 5 of 8)
  • cleared scenes don't re-spawn enemies in same session (bug 6 of 8)
  • one combat per scene — cascade-fire all EnemyTriggers on first contact (bug 7)
  • prevent click events from flipping mouse_mode VISIBLE (bug 8 of 8)
  • bd-c00: explicit door-target nav tolerance override (bug 9 of 10)
  • bd-c00: AutoPlay LeaveArea short-stop retry watchdog (bug 10 of 10 — final)
  • catch already-inside-trigger race in door-click handler (bd-vkd)
  • bd-aaq + bd-0t3: terrain poison-roll uses magic formula + debug_force_status_apply flag
  • debug menu: ArenaBench test scene row (QA access)
  • bd-xa9: LeaveArea EntryShape height 17 → 40 (WASD-walk body-overlap fix)
  • bd-cfp details panel never opened + bd-xti picker visual port
  • cursor.cell() (was treating method as property) + picker visual rewrite
  • Smite skill animation + full-click-flow regression test
  • Cure/Cleanse/PushAttack mechanics + VFX + per-skill regression tests
  • MenuBase-contract rewrite — fixes WASD/Enter desync
  • SkillTree nav (WASD + mouse + cross-mode), BuySkillMenu fix, button asset adoption
  • Eject point: SkillTree WASD-Cancel-first nav, right-click cascade fix, EP gate, more tests
  • NEW_BUGS_TO_FILE.md: + load-MainMenu-unresponsive + ItemsMenu polish bundle
  • World.loadGameSave: clear inLoadGameState at end of load (#5 fix)
  • ItemsMenu polish (#6a, #6b, #6e from NEW_BUGS_TO_FILE.md)
  • MenuStack Phase 2c: SkillTreeMenu integration + focus-coherence fixes
  • Fix Items/Equipment menus failing to open (parse error in pre-existing code)
  • Fix right-click cancel cascade — SceneTree vs Viewport input-handled flag mismatch
  • Fix SkillTreeMenu cancel + MOUSE-mode hover-off null
  • Fix VirtualCursor.notify_mouse_motion double-consume race

Improved

  • AutoPlay v1: dict-action refactor + Event 3 lever-click dispatch
  • bd-xti Phase 1: extract CombatSkillResolver (registry + validation)
  • SkillsMenu + relic equip/unequip cascade + EP/SP/JP rename

Tested

  • c5m.1 Phase 1: world_nav.py greedy corner-clip waypoint planner + tests
  • test-infra: zombie reap guardrails + interactive XDIST default
  • OptionsMenu BFS adoption + _testPressEnter Title fallback
  • TestBridge worldSnapshot: emit leave_areas (LeaveArea + Door)
  • single-click engages all interactables in TreasureTestRoom
  • bake LeaveArea holes into navmesh; extend _testDismissModals
  • file 3it (basement lever mouse-broken) + 49v (Vera interaction parity tests)
  • file bd-puc (sharp-corner test geometry followup to bd-fjn)
  • Windmill1 stair nav regression gate (Vera, all 5 transitions)
  • pin ChurchSquare→MainSquare→Windmill2 nav failure (bd-mainsquare-isolated)
  • chokepoint detector v2 + Vera 2-step test (hypothesis invalidated)
  • Vera input-mode × multi-LeaveArea matrix (7 cases)
  • pin combat AutoPlay clears in-game ChurchSquare slime fight
  • Tier 4 ratchet for cond=11 → 12 (Windmill2 puzzle + SluiceGate)
  • register combat_smoke marker for post-fix regression gate
  • tier3 pin death→GameOver, combat mouse mode, camera pan+zoom regressions
  • add combat_smoke baselines — attack lands + autoplay completes
  • tools/combat_smoke.sh runner + cold-start robustness for attack-lands
  • tag bug-1 routing proxy (test_lose_resolution) into combat_smoke
  • Vera CLAUDE.md: codify test-hierarchy gap detection rule
  • Merge feat/vera-pick-tests: pick_tests MVP risk_map seed
  • bd-aaq runtime test: VSlime → poison terrain → step → poison status
  • bd-cfp Phase 1: Combat Details menu (per-cell unit + status + terrain inspection)
  • visual demo: test_visual_skills_picker_demo (per-iteration noVNC display)
  • Picker mouse/WASD nav: rect-hit-test hover + click + behavioral suite
  • MENU_STACK_DESIGN.md: spec for the unified focus/mode/SFX autoload
  • Pre-MenuStack: TestBridge submenu parity, SkillTreeMenu mode-flip exorcism, mode-seed hook
  • MenuStack Phase 1: autoload + state-machine tests (17/17 green)
  • MenuStack Phase 2d: drop BuySkillMenu special-case in MenuOverlay

Tooling

  • drive_player Phase 2 — CDP keyboard + world_nav planning (c5m.1, c5m.2)

Docs

  • combat regression smoke suite — catalog + pending tagging checklist

Maintenance

  • world-qa-mcp + combat driver primitives — shared-browser autonomous play
  • world-qa primitive iteration #2 — Title→game playthrough drive
  • c5m.2 Phase 1: CDP-attach input driver (launch_shared_browser + drive.py)
  • c5m.1: worldSnapshot probe + drive_combat CDP read
  • arc-observability + menu nav BFS: low-latency drive + named menu targets
  • menu-nav phase A: MenuBase helpers + linear/grid graph derivation
  • menu-nav: parse_input_event so handlers gated on is_action_pressed fire
  • default to WASD mode with feather, refresh hover on mouse-mode flip
  • cursor-move SFX on every successful interaction
  • hover icons + click-to-interact: chest opens, door transitions, NPC dialogue
  • sprite-sized hover bounds + faster title fade
  • click-find honors hover bounds; door fires ChangeScene on arrival
  • title highlight persists; click during dialogue can't reroute
  • dialogue advance routes direct; wire owner's pointer PNG
  • mouse-hover highlight follows cursor on all menus
  • faster title fade — highlight + feather visible in ~1s
  • title skip-click sets showTitleScreen so visibility ⇒ interactability
  • close skip-click capture at fade-complete
  • event-completion isInteracting clear; merge MODE line into pack overlay
  • fall back to legacy walker when navmesh is unusable
  • split InteractionArea (hover) from EntryArea (trigger)
  • modal-ack rule: lock input while TreasureOverlay / dialogue is up
  • mouse-mode: stop WASD/mouse flicker on stuck inputs; restore cyan-feather hover icon
  • stop fighting PlayerCharacter for mouse mode in gameplay
  • register HoverIndicator
  • advance directly via DialogueHandler when in dialogue
  • gate input on changingScenes; restore cyan-feather hover icon
  • NAV-FACING-FOLLOWS-MOVEMENT v2: hold lookDirection during nav corners
  • nav-sprite-facing: use velocity not direction-to-final in _process
  • v0.6.1153 deploy snapshot + accumulated session state
  • align Bed interactable with visible Sprite2D
  • bd-co6: place NavHole_StairRailing polygons in Windmill1 + Windmill2
  • event-condition schema extension + AutoPlay data-driven dispatch
  • bd-gta: remove ChangeScene fast-track from _fire_pending_interact
  • bd-c00: stop carving LeaveAreas as nav-holes (let player route INTO them)
  • bd-c00: walk to click pixel (world_pos), not EntryArea center
  • bd-gb5: lower nav agent_radius 14 → 10 to keep FrontRoad routable
  • bd-c00: per-target click semantics — doors go to TRIGGER CENTER
  • raise target_desired_distance 1 -> 3 to kill sub-px jitter
  • bd-i0i: extend Windmill NavHole_StairRailing to full railing footprint
  • bd-4e9 Phase 1: bake-time chokepoint detector (log-only)
  • bd-5ks: dynamic agent_radius from player capsule + scale
  • bd-xdk: nav-bake honors CollisionPolygon2D.build_mode
  • retune Windmill2 corner-to-corner coords for inflated navmesh (bd-5ks)
  • bd-41u: map_force_update + NavAgent warmup on bake_finished
  • laria scenes: railing collision + leave-area position tuning
  • BUILD_SEGMENTS for basement Stairs + diagnostic probes + gotcha #67
  • trigger guards: reject non-player + body-out-of-area area_entered fires
  • extend alpha-mask precision to doors, chests, levers, treasures
  • ambient-dialogue-phase2: wire AmbientDialogue autoload + DialogueHandler hook
  • bd updates: file bd-jsv (rotation), bd-h04 (Kint length), bd-n25 (shop close), bd-kcs (extend playthrough past Event 8), close bd-41u
  • bd-kcs phase 1: extend playthrough Title→Event 9 + combat gate
  • bd-vct + bd-hwg: fire-once-per-visit event guard + AutoPlay menu skip
  • WASD-only combat driver v1 (move-and-attack)
  • drive Event 10 to cond=8 — frontier advance
  • capture cond=8 frontier save (post-Event-10, ChurchSquare)
  • no_save flag mirrors in-game save UI policy
  • drive Event 11 to cond=9 — frontier advance
  • drive Event 12 (Elias sleeps) to cond=10
  • walk routes for cond=10 (EliasHouse → MayorsHouse return path)
  • relax NAV-TRANSIT-GUARD — accept overlap when pending is empty
  • exploration mode for waterway dungeon (random unvisited)
  • cond=11 approach routes + walk-tolerance for long traversals
  • exploration back-bias — don't immediately retrace steps
  • drive Title → cond=11 → waterway entry end-to-end
  • gate armed-recheck on _pending_door_scene match
  • back-path tracker for Phase B in-waterway return
  • MapOverlay v1: in-game map for Laria Waterways dungeon
  • MapOverlay v1.1: auto-hide on menu/combat + free top-right
  • waterway1: swap ground relic Poison-Attack → Scan + smoke pin
  • Vera CLAUDE.md: sharpen T4 vs T5 distinction with inductive rule
  • bd-zwg: combat camera reserves left UI strip (turn-queue inset)
  • bd-n51: LeaveArea requires player BODY overlap, not PCSceneInteraction
  • bd-k5c: stop player movement before fade on scene transition
  • bd-uko data layer: magic_hit_chance + magic_defense + VSlime poison_damage_mod
  • bd-0t3: dual physical+poison damage + magic-roll for status application
  • bd-8jd: in-combat status display — dedicated CombatStatusDisplay child per unit
  • bd-8jd Phase 2: OverworldStatusDisplay — per-player status icons on overworld
  • bd-uko visual baselines: poison subsystem reference screenshots
  • bd-uko visual: G3 terrain tileset + VSlime tint to StatBlock + TurnQueue
  • bd-xti Phase 2: all 11 combat-active skills wired + heal/buff/terrain/item kinds
  • bd-xti Phase 3: SKILL mode cell highlighting (range + AoE preview)
  • bd-xti Phase 4: CombatSkillsPicker — in-combat skill selection UI
  • prints in CombatOverlay._input + tighter picker anchors
  • bd-xti picker polish: dark BG + ModernGoth + AP/MP costs + wheel-zoom gate
  • bd-xti picker round 4+5: full-width buttons, halved margins, larger AP/MP labels + bd-i67 nav contract pinned
  • action overlay state contract: 6 source pins + Ability stays pressed while picker open
  • G3-template visual + MenuBase port + sword cursors
  • wire all 11 skills to unique icons
  • MenuBase mode-switch focus contract + CombatSkillsPicker port
  • drop self.get_global_rect() call (parse error)
  • VFX overlay on target + radiant damage (round 16 round 2)
  • Picker close-when-no-AP + cure range=0 + cure cast-stance animation
  • Casting.png animation for cure + cleanse (G3 playCasting parity)
  • Slash shader overlay on basic attack + smite (ShaderLab port)
  • Attrition sim: L1 dungeon-chain Monte Carlo for stat tuning
  • attrition_sim: in-combat mugwort mode + sweep findings
  • attrition_sim: --count-mult knob for spawn-count sweep
  • core_BattlerStats: Slime/VSlime nerf to STR=4 CON=6 (round 19 sim)
  • Round 20: MP deduction + cure/cleanse light-pillar VFX
  • Round 20 round 2/3: mouse visibility on menu open + cure/cleanse target=any
  • Skill cell coloring: yellow=in-range invalid, red=valid, white=AOE
  • range 6→1 + lightning bolt VFX (per owner reference video)
  • Terrain +16px alignment (bd-qyd) + remove cleanse pillar VFX
  • EquipmentMenu G3-parity: disabled equipped item, hover preview, real equip stats
  • 3-col stat panel, item details on hover, save/load equip persistence
  • skip MenuBase ui_accept helper in MOUSE mode
  • relic slots, dark panel theme, live-tunable visuals
  • preview column palette for dark theme
  • ItemsMenu #6c (non-consumables disabled) + #6f (WASD autoscroll)
  • MenuStack Phase 2a + 2b: input wiring + BuySkillMenu integration
  • MenuStack Phase 3: sweep remaining menus
  • SkillTree lazy update — only rebuild grid when actually opened
  • SkillTree open: skip grid rebuild when grid is already populated
  • pre-build grid on first scene-load, not on first menu show
  • drop CanvasLayer to 150 so VirtualCursor renders on top
  • Phase A: PartyHeaderPanel autoload — shared CharacterSubpanel + button row
  • Phase C: Unit signals + signature caches replace direct menu.update() calls
  • Phase B: BuySkillMenu becomes a MenuBase scene
  • Phase C2: surgical SkillTreeMenu refresh on tree_skill_learned
  • drop orphaned BuySkillMenu.gd.uid after Phase B move
  • SkillTree WASD vertical walk: same-column preference + nearest-column fallback

v0.6.1106

26 changes

Fixed

  • re-apply 8kc grid-disappear fix (lost in qqf sync)
  • h22.1: flip Smite XFAIL→PASS — tune ranges, fix combat-test infra flake

Tested

  • h22: skill-in-combat test framework + DamageResolver TestBridge hook

Maintenance

  • Cloud shadows + wind shader + water shader port across Title and Laria zones
  • Quick Setup section (grant JP+CP, kill/heal party, XP row)
  • c31: Options sliders at 0% fully silence music + SFX
  • migrate_owner_questions_to_bd: one-shot script for owner_questions → bd
  • tools/bd_close.sh: wrapper auto-pushes after bd close (ChroniclesOfNesis-4n1)
  • grid no longer disappears on first enemy kill (8kc)
  • CombatAIDriver — pluggable player + enemy auto-control
  • label qqf blocked-on-owner pending vpp + 2aq answers
  • b7z: typed damage pipeline — DamageEvent + DamageResolver
  • terrain layer + poison terrain (VSlime trail)
  • close dyl (terrain shipped) + 3 child owner-questions filed
  • register poison damage type with DamageResolver (bd 3ba)
  • close ChroniclesOfNesis-3ba (poison damage type shipped)
  • b5a: headless Monte-Carlo combat sim — tools/combat_sim.gd
  • b5a claimed + done note + 3 owner questions (zx8/bse/kjq)
  • VSlime enemy — wired as combat-mode unit with poison-trail terrain
  • uh7: combat_sim_report.py — static HTML balance matrix viewer
  • close uh7 (combat-sim report shipped)
  • ox7: poison status effect — apply/tick/cure/persist end-to-end
  • owner-answer batch — VSlime rebalance, poison-tile UX, AI MODE HUD
  • batch h22.2/h22.3/bse/60i owner-answered changes
  • default both sides to AI auto-drive on battle start
  • ni2: overworld per-step poison tick (owner-answered ACTIVE_DRAIN)

v0.6.1054

589 changes

New

  • Add cache-busting to .pck and .wasm in redeploy script
  • Title visual r3: stack all 4 menu labels (NewGame/Continue/Options/Quit)
  • persist menu lock-in (height +50, labels centered + left-shifted, FarBackHill -100, cursor at NewGame)
  • NEWGAME-OPTIONS-FLOW: open OptionsMenu directly from Title.gd New Game handler
  • WC-CHARSUB-G4-PATTERNS-AUDIT: catalog typed-param duck-type rejection + Control.size pre-add_child collapse
  • LOADINGICON-ROTATION-PATTERN: add LoadingIcon instance to LoadingScreen overlay
  • WATER-SHADER-RENDER-V2: add BackBufferCopy siblings for G4 hint_screen_texture
  • ARCH-REFACTOR-PHASE0: add major refactor plan doc — menus, dialogue, event system
  • ARCH-P1-MENU-BASE: add MenuBase + migrate MenuOverlay
  • ARCH-P1: merge MenuBase implementation
  • Revert "ARCH-P1: merge MenuBase implementation"
  • Reapply "ARCH-P1: merge MenuBase implementation"
  • Revert "Reapply "ARCH-P1: merge MenuBase implementation""
  • ARCH-P1-MENU-BASE: merge Phase1 MenuBase implementation
  • ARCH-P2-DIALOGUE-DISPLAY,ARCH-P2-EVENT-DIRECTOR: add DialogueDisplay + EventDirector alongside existing classes
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: add _mb_nav_buttons/_mb_open_nav/_mb_nav_step to MenuBase; MenuOverlay updateHoveredButton uses _mb_navigate(); OptionsMenu slider icons get FOCUS_ALL
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fullscreen anchor uses get_global_rect(); remove hoveredButtonIdy>=0 routing fallback; add _on_mouse_took_over
  • add y_sort Bodies node for correct depth sorting
  • TREASURE-BAG-INVISIBLE-LARIA: add Treasure.gd + Treasure.tscn to packs_src/LariaVillage
  • TestBridge _testSetPartyState + _testOpenMenu items/pause hooks
  • GODOT_WEB_EXPORT_FRAMEWORK: add Rule 16 — cross-pack ext_resource resolves null
  • COMBAT_LIFECYCLE_AUDIT: add Decisions 11-12 + handler design rules
  • port waterway4-12 + SluiceGate + Channel, add no-enemies toggle + Slime idle fallback
  • add _testSetGlobalWorldFlag hook for runtime GlobalWorld property writes
  • add bootstrap-pck-size rule (25MB cap)
  • Equipment, Skills, SkillTree menus — initial G4 web implementation
  • spawn off-screen left only; add z_index_offset @export; Title up 800px + behind

Fixed

  • Fix save menu not refreshing after saving
  • SL-6: Save/Load GUI Playwright regression tests — 5/5 pass
  • Fix save click: eat ui_accept to prevent MenuOverlay from closing
  • Vera regression: title visual invariants suite for REQ-01..REQ-34
  • Vera regression: switch _get_node_rect to canonical _tbGetNodeRectRequest slot
  • Vera regression: test_sky_takes_top_45pct_height for REQ-35
  • Vera regression: test_sky_visible_full_width_at_top for REQ-16/REQ-35
  • Vera regression: refine mountains test to rect-based 90% coverage for REQ-18/REQ-32
  • Vera regression: test_foreground_hill_present_at_bottom for REQ-19/REQ-21
  • Vera regression: cloud drift + parallax speed ordering for REQ-09 (with Nix follow-up note)
  • Vera regression: split both_windmills_spinning into per-windmill tests for REQ-33
  • Vera regression: test_back_windmill_visible_mid_frame for REQ-22/REQ-31
  • Vera regression: test_bridge_visible + test_stone_walls_visible for REQ-36/REQ-37
  • Vera regression: test_version_label_uses_moderngoth for REQ-07
  • Vera regression: harden cloud-drift test with 3-frame sampling for REQ-09 flake
  • Vera regression: scarecrow test 3-frame sampling for REQ-23 (single-frame coincidence)
  • Vera regression: test_no_black_left_right_edges for REQ-13/REQ-16
  • Vera regression: test_scarecrow_visible_in_frame for REQ-11
  • Vera regression: test_menu_panel_below_windmill for REQ-03
  • Vera regression: test_controls_label_off_screen for REQ-06
  • Vera regression: harden windmill spin tests with 3-frame sampling for REQ-33
  • Vera regression: test_back_windmill_blades_attached_to_tower for REQ-38
  • Vera regression: test_menu_panel_height_ratio for REQ-44
  • Vera regression: test_menu_panel_bottom_margin for REQ-45
  • Vera regression: test_scarecrow_x_between_windmill_and_right_wall for REQ-46
  • Vera regression: test_menu_labels_right_aligned for REQ-47
  • Vera regression: test_no_controls_label_leak for REQ-48
  • Vera regression: REQ-47 pixel check tolerates partial off-screen rects
  • Vera regression: test_text_to_cursor_gap_15px for REQ-49
  • Vera regression: test_cursor_to_panel_right_gap_15px for REQ-50
  • Vera regression: test_no_vertical_line_artifact_in_sky for REQ-51
  • Vera regression: test_yellow_hill_bottom_layer_where_present for REQ-52
  • Vera regression: test_no_scrollbars_on_text_labels for REQ-53
  • Title visual r7: Continue+Options offsets gap fixed (50..92, 100..142); pytest 28/40
  • Gameplay fix: G3->G4 PackLoader user:// remap + Time.get_time + Core/LariaVillage pack rebuild
  • Gameplay fix: ScreenFade tween now fires; G3 setter recursion broken
  • persist menu lock-in + fix Godot4 nine-patch property names
  • BLACK-FLASH-G4 fix - move fadeIn=true before boot await
  • fix PackedStringArray.join G3->G4 silent breakage
  • NEWGAME-OPTIONS-SAVE-PROGRESS: real fix - missing UTILITY methods
  • MENU-BUNDLE-A: 3 menu surgical fixes — cancel cascade + font sweep + G3->G4 hover color
  • TITLE-FONT-AUTOHINTER-REGRESSION (P1): force_autohinter=false on ModernGoth.otf
  • MAYORS-HOUSE-ENTRY-V3-CHERRY-PICK: cherry-pick V2 geometric fix
  • YSORT-CHURCHSQUARE-REGRESSION: re-add y_sort_enabled=true on Bodies in pack-mirror ChurchSquare.tscn
  • VERA-TESTSPEC-DEBUG-2: 9 testSpecs + LoadingIcon visual-baseline arc_inbox
  • TOOLING-DASHBOARD-ACCURACY: 5 sub-fixes for in_progress drift
  • LOADINGSCREEN-WASM-MAINTHREAD-BLOCK-FIX: threaded scene load + pack-mount yields
  • YSORT-CHURCHSQUARE-REGRESSION-V2: keep real Player visible alongside InstancedPlayer
  • SHADER-PARAM-G4-SWEEP: rename `shader_param/` to `shader_parameter/` in 8 .tscn files (silent-rebind fix)
  • TIER2-REGRESSION-PIN-YSORT-CHURCHSQUARE: static .tscn invariants
  • OPTIONSMENU-WASD-NAV-WIDGET-COVERAGE: generalize feather rect resolver + Controls fix
  • TIER4-MAINMENU-NAV-COVERAGE: parametrized 4×3 matrix + V2 regression pin
  • TIER5-NEWGAME-THROUGH-MAYOR-COVERAGE: 6-test split for demo-flow regression net
  • WATER-LOCKIN-PROPERTY-ORDER-BUG: write reflectionOffset on inline ShaderMaterial subresource
  • NPC-COLLISION-WIDER-V4: fix root cause — bump height (horizontal footprint) not radius. height 7.6->36, radius 20->6. Capsule is rotated 90deg so height=horizontal, radius=vertical.
  • NPC-COLLISION-WIDER-V4-STAIRCASE-REGRESSION: widen staircase entrance from 21.1→26 units (P2/P3 spread 2.7 each side)
  • MAINMENU-BUTTON-WIRING-MISMATCH + UNIFIED-MENU-CURSOR-NAV-SYSTEM: fix button click dispatch and Options WASD init
  • MENUOVERLAY-SPACE-KEY-REGRESSION: guard ui_accept/handleClick when event also matches ui_select (Space opens menu then immediately clicked default button)
  • ARCH-P1-MENU-BASE: ShopOverlay TODO + T4 xfail + conftest fix
  • NEWGAME-COLDBOOT-POSITION-BUG: fix player spawning at origin on cold-boot load
  • NPC-SPRITE-COMPILE-ERROR: fix type inference on _restore_dir
  • ARCH-P1-MENU-BASE: WASM-compat fix — no class_name, no enum-typed signal param
  • ARCH-P1-MENU-BASE: fix WASM inheritance chain — full path-based extends throughout
  • ARCH-P1-MENU-BASE: fix missing _mb_open/close_cursor + restore SceneTemplate coldboot fallback
  • ARCH-P1-REGRESSIONS: fix OptionsMenu new-game invisible + Continue player offscreen
  • ARCH-P1-REGRESSIONS: fix missing res:// prefix in OptionsMenu new-game scene path
  • ARCH-P1-REGRESSIONS: revert non-menu files to stable — SceneTemplate/World/PlayerCharacter changes were outside Phase1 scope and caused cascading regressions
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fix click-after-WASD + Fullscreen FOCUS_ALL
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: disable focus outline globally; OptionsMenu Controls/Save highlight; CheckBox feather anchor fix; deferred cursor on open; Web mouse warp on WASD nav
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fix fullscreen feather (redirect to fullscreenPanel row); fix WASD-then-click when mode drifted to MOUSE (hoveredButtonIdy fallback)
  • WASD-NAV-DEBUG: add console prints for fullscreen nav + click routing in OptionsMenu
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fix fullscreen feather anchor (use cb bottom Y); move set_input_as_handled after toggle call so browser gesture context intact; remove debug prints
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fix VirtualCursor get_global_rect (eliminates 15px CanvasLayer offset); fix OptionsMenu click routing to use VirtualCursor.is_shown() instead of _mb_mode
  • fix TreasureChest invisible in EliasHouse — add z_index=2
  • MAYORS-HOUSE-2F-TREASURE-CHEST-MISSING: fix treasure chest invisible in web export
  • ITEMS-MENU-RENDER: fix button height, WASD hover highlight, description display
  • add TreasureChest.tscn to packs_src/LariaVillage — same root cause as Treasure.tscn
  • cursor hide + Items focus on first pause menu open
  • WASD click in OptionsMenu ignores hidden cursor over slider
  • mouse visibility, menu nav, and Options Save routing
  • MainMenu WASD click-override + hover highlight + cancel return
  • difficulty dropdown WASD interaction (3 stacked WASM bugs)
  • TreasureChest invisible — add textures to LariaVillage pack project
  • StatusMenu — render stats + values, full-width Save, 1/3-2/3 layout
  • StatusMenu — top row 1/4, larger stat font (22pt)
  • StatusMenu nav — start at char button, Right=-, Left=+, cancel returns
  • StatusMenu — feather centers on +/-, L/R toggles, 9-patch consistent
  • StatusMenu — feather centers on +/- accounting for button scale
  • StatusMenu — use get_global_rect for +/- centering, add tunable offset
  • StatusMenu — bake +/- feather visual-center offset (30, 30)
  • StatusMenu — correct +/- feather offset to (60, 30)
  • StatusMenu — set +/- feather offset to (30, 30) per owner
  • StatusMenu — no +/- buttons on stamina, speed, knowledge
  • SHOP-VISIBILITY-PIN — TotalsGrid columns + TotalsPanel sizing
  • ShopOverlay — focus ring, button heights, tab nav, mouse-only increment
  • ShopOverlay — focus_mode=0, button_pressed migration, R from items
  • ShopOverlay extends MenuBase — kills WASD-mode click-misfire
  • ShopItemButton — stable height across states, restore original normal stylebox
  • bump fonts, reorder 3rd col (Reset/Settle above Totals), description taller, Buy/Sell shorter, fix items first-load layout race
  • ShopOverlay sell-count placeholder + add Tier 4 sell-flow test
  • WASD mode filter, skip disabled, fix Left wrap from top-left
  • fix emote-await lambda capture (5-8s phantom delay after every synced emote)
  • scale screenshots by actual image width (fixes mixed-size renders)
  • Combat Phase 2c-3: nearest-cell snap + arc-jump transition + scale fix
  • input + interactivity fixes — Phase 2c-12 (cursor/cancel/wasd)
  • Combat UI: fix transparent buttons + Enter routing + sword pos + debug label
  • keep look_direction in cell space after walk (default cell off-by-one fix)
  • strip CombatCamera debug prints (per-frame + per-input)
  • fix turn-queue duplicate-position bug (tie-break + active contract)
  • fix double-turn bug — tie-break in _sort_by_next_action_time
  • audio polish + AP-reset timing + stamina fix
  • fix dynamic-slime collision + per-scene CombatGrid + pack-asset audit
  • debug menu v1 + Title boot fixes
  • event flow: enemy lock toggle, emote bubble fix, debug button on web path
  • EMOTE-PLAY-REGRESSION-FIX: revert /-prefix, restore bare animation name
  • debug_no_enemies: default false — enemies spawn by default
  • slime slap fix: query Dal.get_battler_attacks by unit_type, not unit_name
  • live shader-parameter panel toggleable from DebugMenu
  • filter abilityScore + add scrollbar; nav fix on SkillTree close
  • drop empty-inv placeholder; Unequip fixed-width; CharacterSelectButton at top-left
  • music loops; frontFan path fix; lowest cloud layer up 50px; viewport offset
  • MainSquare wind shader + cloud slowdown + redeploy port-kill scope fix

Improved

  • BED-OPTIONS-INVISIBLE (P1): G4 fit_content rename + Bed.interact 3-arg signature
  • ARCH-P1-MENU-BASE: rename mode→_mb_mode to avoid subclass var shadowing
  • ARCH-PHASE2: open Phase2 branch, document eject seats in MAJOR_REFACTOR_PLAN
  • ARCH-P2: update MAJOR_REFACTOR_PLAN — Phase2 complete, document remaining cleanup
  • ARCH-P3: SceneTemplate dead code cleanup — remove _on_eventCompleted, checkInput, EventCompleted wiring; delete .full backup (-903 lines)
  • Rename Core pack → Combat (Phase 1a: scaffolding only)
  • Combat UI: ActionBlock 3-row grid + WASD nav graph + mode rename
  • video-faithful death + victory + permanent kill cleanup
  • collision-triggered combat in Waterway1 + CombatArena→CombatOverlay rename

Tested

  • Title visual r19: Mountains scale_x 1.5 + offset for full-width coverage (REQ-18, REQ-32)
  • Title parallax: stretch/aspect expand→keep (letterbox bars OK per owner)
  • Title visual r25: camera y=-130 + Panel resize + cream border + tbGetNodeProperty (REQ-43,44,45,47,39); pytest pass=21
  • Title visual r26: Bridge sprite + FrontHills onscreen + Scarecrow z=60 + SunlightRays hidden (REQ-21,36,46,51); pytest pass=21
  • get_node_rect returns viewport-pixel coords (camera transform applied); pytest pass=25
  • Title visual r27: FrontWindmill x+150 / Scarecrow midpoint / Panel y+120 / BackWindmill Blades (REQ-14,30,38,45,46); pytest pass=26
  • revert 1280x720 → 1270x920 (aspect 1.38) to match G3 + canonical
  • Title visual r1: camera zoom=0.50 x=-380 y=-150 (right road off, left fg cleaner; pytest 22/38 vs base 21)
  • Title visual r3: BackWindmill x: 280 -> -100 (back windmill visible mid-frame; pytest 23/38)
  • Title visual r4: REQ-49/50 cursor gaps + REQ-53 no scrollbars (selectIconMargin 15->8, label offset_right 770->793, scroll_active=false; pytest 26/40)
  • Title visual r5: title scale 2.0->1.0 + position shift, panel offset_left -1180->-900 (REQ-02 + REQ-05 logo/labels in 10%% frame; pytest 28/40)
  • Title visual r6: title scale 1.3 + position (-380,-180) - logo prominent in upper area; pytest 28/40
  • G4 migration batch: LoadingIcon, OptionsMenu, TestScenes + test contract updates
  • conftest bump wait_for_engine 15->45s, page.goto wait_until commit->load
  • cut TESTSCENE-G4-FOLLOWTHROUGH and update agent_activity
  • bulk wait_for_engine 5→15s across 6 sites
  • EVENT-LOCK-INTERACTION-AND-MOVEMENT-TESTS: restore player.isLocked + GlobalWorld.playerLocked in executeEvent/sceneDisplayDialogue
  • VERA-AUDIT-CLEANUP: A2 retro-sign + A3 testspec-fill + LOADINGICON
  • TEST-TIER-15-ENGINE-NATIVE: build engine-native headless test tier
  • TEST-COVERAGE-TIER-1-INITIAL-PASS: 16 raw GDScript unit tests under WebTests/tier1/
  • LOADINGSCREEN-DIAGNOSTIC-INSTRUMENTATION-AND-TEST: Tier 4 Vera test for 5 LoadingScreen advancement mechanisms
  • LOADINGSCREEN-DIAGNOSTIC-INSTRUMENTATION-AND-TEST: Part 1 instrumentation + 6 TestBridge hooks (v0.6.303)
  • WATER-SHADER-TITLE-CHURCHSQUARE: Tier 5 Vera test for Elias-on-bridge reflection (gold-standard scenario)
  • LOADINGSCREEN-TIER4-REALLOAD-TEST: Phase 2 test — real pack-load path
  • LOADINGSCREEN-DIAG-OVERLAY-RUNTIME-TOGGLE: forceDiagOverlay TestBridge hook
  • WATER-REFLECTION-FULL-VERIFICATION: Nix probe-shipped + suspect 1/4 static analysis comment
  • WATER-REFLECTION-FULL-VERIFICATION: Vera screenshot tests for bridge placement + Elias-in-reflection (per-scene)
  • LOADINGSCREEN-LONG-LOAD-REPRO-TEST: Phase 3 long-load reproduction tests (CDP throttle + forceSlowPackLoad)
  • TEST-TIER-NAMING-REFACTOR: unify Shape A/B/C/D + Tier 1.5 → Tier 1-5
  • SHOP-COMPREHENSIVE-TEST-COVERAGE: Tier 4/5 shop suite (14 tests scaffolded)
  • TESTBRIDGE-LIVE-MUTATE-SUB-PATH-RESOLVER: walk colon-form sub-paths
  • ARCH-P0-MENU-TESTS: Tier 1-4 menu test suite — pins behavioral contracts before MenuBase refactor
  • ARCH-P0-DIALOGUE-TESTS: T1-T4 dialogue baseline tests
  • ARCH-P0-EVENT-TESTS: T1-T4 event system baseline tests
  • ARCH-P0: merge phase0 test baseline (menu + dialogue + event T1-T4)
  • options menu routing + cursor visibility + difficulty xfail suite
  • TestBridge — add 'shop' open hook for ShopOverlay testing
  • SHOP-VISIBILITY-PIN — Tier 3 baseline + TestBridge shop probes
  • thumbnail rendering + test bridge screenshot capture
  • minimal CombatArena.tscn + _testSpawnArena hook (Phase 1b)
  • damage variance, slime buff, GameOver port, test resilience
  • test/combat: split test_combat_basics into per-subsystem suites
  • tier-3 PlayerCharacter visuals suite + _testPlayEmote bridge
  • test-scene rows + emote investigation breadcrumbs
  • _testForceCombatResolve hook (win/run/lose)
  • combat-input test surface (Track B spec, no code)
  • combat-input test surface: 7 TestBridge hooks + in-memory log
  • T5 D5+D6: ChurchSquare combat + bed→waterway arc tests
  • SkillTreeMenu._input: respect viewport.is_input_handled before processing

Tooling

  • pkill orphan port-8060 server before redeploy
  • redeploy_web.sh autostarts CORS server after deploy
  • redeploy_web.sh CORS server allow_reuse_address=True

Docs

  • CLAUDE.md + refactor plan updates — NPC arch, CapsuleShape2D gotcha, tools table, MCP rebuild note, refactor doc pointer
  • dispatch discipline rules in CLAUDE.md + TOOLING-TOKEN-EFFICIENCY epic and tickets
  • update refactor plan — Phase0 complete, Phase1 blocked on WASM autoload issue
  • model assignment policy — Haiku for mechanical tasks, tool-use caps
  • Revert "docs: model assignment policy — Haiku for mechanical tasks, tool-use caps"
  • T3/T4 refactor test strategy — gates only, T1/T2 are before-snapshots
  • gotcha #57 — WASM class_name intermediate base class breaks compilation
  • correct rearchitecture direction — tests-only phases, no game code changes
  • add gotchas 58-59 (zone pack null textures + Sprite2D WASM init bug)
  • add gotcha 60 — zone pack .godot/exported cache holds stale binary after .gd added
  • session 2026-05-06 devlog + G3 migration §5.9 (zone pack stale cache)
  • add navigate_to_scene + consoleLogs failure signatures to WebBootstrap/CLAUDE.md
  • eject plan for MENU-INPUT-MODE-REFACTOR
  • log Shop migration commit in eject plan
  • log Title wire-up; refactor scope complete
  • log persistent ItemsMenu WASD→mouse hover-sync bug for follow-up
  • COMBAT_LIFECYCLE_AUDIT: document non-combat ↔ combat transition gap
  • Combat Phase 2c-4: slim CombatUnit foundation + audit-doc resolutions
  • COMBAT_STATS_AUDIT: doc the 3-tier stat system + 8 quirks (parked)
  • catalogue recursive call_deferred OOM as gotcha #65 + runbook note
  • tools/balance: three-layer sim design doc + L1→L5 power-curve target

Maintenance

  • Restore spinning circles for normal dialogue, triangle for options only
  • Pre-migration baseline: session work from 2026-04-15/16
  • Title visual r1+r2: legible menu labels + reduced letterbox
  • Title visual r4: shrink + drop Title logo so 'The' isn't clipped
  • Title visual r5: edge-fill ColorRects + stretch=keep_height + FrontWindmill z=1000; REQ-16 top=0 bot=2 (panel border); REQ-17 red labels
  • Title visual r6: panel StyleBoxEmpty removes black border; REQ-16 top=0 bot=0 PASS; REQ-17 red OK
  • Title visual r7: translucent dark panel bg restores label legibility; REQ-16 top=0 bot=0 PASS; REQ-17 red OK
  • Title visual r8: revert to translucent panel; outline_size=0 (cleaner red labels); REQ-16 top=0 bot=0; REQ-17 red OK
  • Title visual r9: shift Title sprite x=-100 (more centered, matches target); REQ-16 top=0 bot=0; REQ-17 red OK
  • Title visual r10: REQ-17 corrected (labels black) + REQ-24 (cream panel bg)
  • Title visual r11: panel smaller + shifted left, font 56, label rows 90px (REQ-25, REQ-26)
  • Title visual r12: GroundFill tan -> grass-green, blends with FrontField (REQ-19)
  • Title visual r13: Scarecrow animation=default explicit + speed_scale=1 (REQ-23)
  • Title visual r14+r15: camera y 200->80 for more sky, panel offsets shifted up 100 (REQ-20)
  • Title visual r16: camera y 80 -> -60 (more sky, REQ-20, REQ-35)
  • Title visual r17: panel offsets up 140 to match camera shift (REQ-26)
  • Title visual r18: BackWindmill larger + repositioned mid-frame (REQ-22, REQ-31)
  • Title visual r20: Title sprite y 30 -> -120 (higher placement matches canonical)
  • Title visual r21: BackWindmill at horizon line, mid-frame separate from FrontWindmill (REQ-22, REQ-31)
  • Title visual r22: Scarecrow position into-frame (REQ-23, REQ-11)
  • Title visual r23: Title sprite x -100 -> -250 (more centered, matches canonical)
  • Title visual r24: BackWindmill x to mid-frame between FrontWindmill and Title (REQ-22, REQ-31)
  • Title parallax architecture: viewport 1280x720 + BackgroundFill (-100) + expand for resize stability
  • restore AppC sync to /workspace/allbyte-web/public/godot
  • Title visual r1: camera zoom=0.7 y=-130 -> sky=45% mtn=0%(detected) mid=45% hill=0% — store/road/river visible (REQ-43)
  • Title visual r2: camera zoom=0.55 y=50 -> sky=45% mid=55% (yellow road+water visible at bottom edge per canonical) (REQ-43)
  • Title visual r3: camera zoom=0.55 y=0 -> sky=49% mid=51% (sky on target; full scene composition visible) (REQ-43)
  • Title visual r4: camera zoom=0.55 y=-30 -> sky=50% mid=50% (sky exactly on target; pure-camera REQ-43 SHARPENED)
  • Title visual r5: camera zoom=0.5 y=-30 -> sky=49% mid=42% hill=9% (wider view; yellow band emerging)
  • Title visual r6: camera zoom=0.45 y=-30 -> sky=47% mid=41% hill=13% (sky+hill in target range; mid still high)
  • Title visual r7: camera zoom=0.45 y=-50 -> sky=47% mtn=9% mid=33% hill=12% (3 of 4 bands within ±5%)
  • Title visual r8: camera zoom=0.45 y=-70 -> sky=48% mtn=9% mid=33% hill=10% (sky closest to 50; 3/4 bands within ±5%)
  • TITLE-G4-POLISH-2: retune TitleCamera y for 1270x920 viewport
  • Title visual r1: shift Sky x +580 to close upper-right gap
  • Title visual r2: shift Sky/Mountains/BackHill/FarBackHill/ForeBackHills x to canvas center for zoom 0.55
  • drop broadcast poll 500ms -> 100ms
  • live-loop sub-version label + persist v0.6.103 layout
  • persist live-iteration lock-in (positions + scales)
  • lock Mountains scale 1.1 + position (858, 0)
  • remove GroundFill flat-green ColorRect
  • lower selection cursor 4px on hover (iconMargin 20 -> 16)
  • FIRST-VISIT-EVENT-CHURCH-NAPHTALI: pack DAL stub signatures match bootstrap
  • WC-14 + CAMERA2D-RECURSIVE-SETTERS: dual-set theme keys + 3 sibling backing fields (v0.6.210)
  • FONT-IMPORT-GITIGNORE-FRAGILE: stop ignoring per-asset .import metadata (G3->G4 migration snag)
  • FONT-VISUAL-BASELINES-CAPTURE (P1): capture 8 of 9 baselines at v0.6.239
  • redeploy_web: daemonize CORS server inside python to prevent script hang
  • CHARSUB-MISSING-DETAILS-AND-BOX-ARTIFACT (P1, partial #1): persist partyStats on save
  • CHARSUB-MISSING-DETAILS-AND-BOX-ARTIFACT (P1, Side B): pause-menu CharSub renders details + correct position
  • Restore day's work: apply stash@{1} (105 files) — recovers the working v0.6.280 state
  • BOOT-LOADER-CHRONICLES-BRANDING: Chronicles boot splash + custom HTML shell
  • FEATHER-CURSOR-DEFAULT-ANCHOR-WRONG: default _ANCHOR_FRACTION (0, 0.5) → (1, 1)
  • SAVELOAD-WASD-NAV: cherry-pick from today-bundle-fanout
  • MENU-NAV-CURSORJUMP: cherry-pick from today-bundle-fanout
  • BOOT-LOADER-CHRONICLES-V2-VISUAL-POLISH: double-stacked spinner + slower bob + faster dots
  • MAINMENU-HOVER-HIGHLIGHT-MISSING-V2: port _apply_focus_highlight from today-bundle-fanout
  • SAVE-SLOT-SCREENSHOT-PERSIST-V3: cherry-pick DAL screenshot funcs + wire World.saveGameSave to b64 it
  • BASEMENT-EVENT-FORCE-MOVE-POSITION-OFFSET: FileAccess.file_exists -> ResourceLoader.exists per Framework Rule 12
  • PLAYER-NPC-COLLISION-TOO-NARROW: widen collision capsule
  • SAVELOAD-FEATHER-INVISIBLE-AND-MOUSE-TAKEOVER: yield+clear-on-mouse
  • CHARSUB-FONT-PLACEMENT-POLISH: bump Level +10/labels +6/HP +15 + black-outlined white
  • VERA-TIER4-WINDMILL1-EVENTS: Shape D playthrough covering windmill events
  • MAINMENU-HIGHLIGHT-DOUBLE-V3: revert focus stylebox on non-focused buttons to NormalButton
  • CHARSUB-BAR-WIDTH-POLISH: enlarge HP/MP bars to 215, anchor CP/JP at +30 gap, compute XP width from positions
  • LOADINGICON-ROTATION-PATTERN: drop per-frame transform.rotation; rely on SpriteFrames cycle
  • NPC-COLLISION-WIDER-V2 + NPC-INTERACTION-RANGE-WIDER: bump capsule + interaction radius
  • Revert "LOADINGICON-ROTATION-PATTERN: drop per-frame transform.rotation; rely on SpriteFrames cycle"
  • ITEMS-SUBPANEL-WRONG-THEME + OPTIONSMENU-SAVE-CONTROLS-BUTTON-9PATCH
  • CHARSUB-FIRST-OPEN-LABELS-MISSING + EVENT-DELAYS-TOO-LONG-AUDIT
  • MAYORS-HOUSE-2F-TREASURE-CHEST-MISSING: defensive _ready() render hardening
  • LOADINGICON-ROTATION-PATTERN: WEB_VERSION sync 0.6.299 -> 0.6.300
  • LOADING-SCREEN-PROCESS-MODE-PAUSE: set process_mode=ALWAYS on LoadingScreen root
  • REDEPLOY-VERSION-NUMBER-OFF-BY-ONE: bump WEB_VERSION before export so PCK and current_version.txt agree
  • WATER-SHADER-TITLE-CHURCHSQUARE: migrate water/foam shaders to G4 (SCREEN_TEXTURE + shader_param/ + null defaults)
  • INSTANCEDPLAYER-WIRE-CHURCHSQUARE-FRONTROAD: wire PlayerInstance Sprite2D for water reflection
  • REFLECTION-PATTERN-GODOT-SOURCE-DEEP-DIVE: source-level analysis of 2D reflection options
  • WATER-REFLECTION-FULL-VERIFICATION: persist FrontRoad reflectionOffset baseline 0.0 -> 0.615
  • LOADINGSCREEN-DESIGN-AROUND-WASM-BLOCK: hide animated UI around sync pack mount block
  • LOADINGSCREEN-DESIGN-AROUND-WASM-BLOCK: bump WEB_VERSION 0.6.315 -> 0.6.318
  • ITEMS-SUBPANEL-WRONG-THEME-V2: convert ItemsMenu.tscn G3→G4 keys
  • SAVESLOT-SCREENSHOT-SIZE-TOO-SMALL: bump screenshot scale 0.15→0.45
  • STATUS-CHARSUB-9PATCH-WRONG + STATUS-MENU-SHOW-ALL-STATS: full stat sheet + sized CharSub
  • OPTIONSMENU-DIFFICULTY-SUBPANEL-TOO-SMALL + OPTIONSMENU-VOLUME-LABELS-OVERFLOW-SUBPANEL + OPTIONSMENU-SAVE-BUTTON-CONTEXT-AWARE-EXIT
  • LOADINGSCREEN-WRONG-LIFECYCLE-CONTINUE: defer pack-load LoadingScreen to slot-confirm
  • SAVELOAD-FEATHER-MISSING-BOTTOM-RIGHT: bump VirtualCursor CanvasLayer 64→200
  • MENU-UX-BUNDLE: bump WEB_VERSION 0.6.318 -> 0.6.322
  • LOADINGSCREEN-DEFAULT-HIDDEN-AUTOLOAD: codify autoload-defaults-hidden invariant
  • FRAMEWORK-LOADINGSCREEN-WASM-INHERENT-CONFLICTS: §3.1 chapter on single-threaded loading-screen tension
  • VERA-MAX-INTER-SAMPLE-GAP-ASSERTION: per-mechanism intra-window freeze detection
  • EVENT-14-TIGHTEN-CINEMATIC-DELAYS: 389 3s->1s, 395 4s->2s
  • DEVLOG-INSTANCEDPLAYER-PATTERN-AND-GODOT-PR: devlog post + Godot upstream PR deferred
  • WATER-FRONTROAD-DISTORTION-OFF: zero distortion on FrontRoad water + Water.gd dev setters
  • MAINMENU-OPTIONS-OPENS-SAVE: route handleClick via focus_owner
  • SAVELOAD-HIGHLIGHT-DOUBLE-ON-NAV: cache + override authored normal stylebox
  • SAVESLOT-SCREENSHOT-LAYOUT-V2: revert CharSub reposition; fit screenshot in gap
  • SHOP-SETTLING-ACCOUNTS-RE-ENTERS-DIALOGUE + SHOP-WASD-FEATHER-PARITY
  • FRONTROAD-PARALLAX-LAYOUT-LOCKIN: persist owner-tuned shifts + foreground windmill z_index
  • MAINSQUARE-PARALLAX-LAYOUT-LOCKIN: persist owner-tuned parallax shifts
  • CHURCHSQUARE-PARALLAX-WATER-LAYOUT-LOCKIN: persist owner-tuned shifts + water reflection
  • TITLE-SAVELOAD-HIGHLIGHT-DOUBLE-ON-NAV: also override 'hover' stylebox on non-focused slots
  • INSTANCEDPLAYER-VISIBLE-PRE-WIRE-DUPLICATE-ELIAS: swap setInstancedPlayer after iniatializeScene
  • MAYORHOUSE-2F-TREASURE-CHEST-MISSING: bump TreasureChest3 z_index above Rafters
  • MAINMENU-WASD-CLICK-V2: consume ui_accept after handleClick to prevent double-fire
  • OPTIONSMENU-WASD-NAV-V2: consume ui_accept up-front so per-widget dispatch wins
  • CHURCHSQUARE-EVENT-NAPHTALI-NOT-FIRING: remove InstancedPlayer per owner directive
  • WINDMILL-GEAR-EVENT-DELAYS-TOO-LONG: cut all 61 event delays to ~33% of current
  • NPC-COLLISION-WIDER-V3: capsule radius 6.5 -> 13.0 (2x V2)
  • FRUSTRATED-EMOTE-PAUSES-AND-PERSISTS: align bootstrap with packs_src single-play
  • SAVE-SLOT-SCREENSHOT-PERSIST-V3: diagnostic logs across capture/persist/load stages
  • MAYORHOUSE-2F-TREASURE-CHEST-V2: extended diag in TreasureChest._ready + WEB_VERSION 0.6.339
  • FRONTROAD-PARALLAX-HORIZONTAL-DRIFT: zero motion_scale.x on all parallax layers
  • EMOTE-SYNC-EXIT-DELAY + NPC-COLLISION-WIDER-V4: trim emote exit delay, bump collision to 20.0
  • Revert "FRONTROAD-PARALLAX-HORIZONTAL-DRIFT: zero motion_scale.x on all parallax layers"
  • NPC-COLLISION-WIDER-V4: halve height 36->18 (too wide)
  • NPC-FACING-RESTORE-AFTER-EVENT + PLAYER-INTERACTION-RADIUS-CALIBRATE: snapshot/restore NPC defaultLookDirection around executeEvent, interaction radius 30->22
  • NPC-COLLISION-WIDER-V4: revert Elias capsule to original, bump NPC capsule height=20 at runtime via duplicate(). Interaction radius restored to 30.
  • PROD-SAVE-LOAD-BROKEN + MAINMENU-BUTTON-WIRING-MISMATCH: await pack load before cold-boot scene change; skip handleClick for mouse events (left-click=ui_accept was firing focus_owner not clicked button); cancel from Load returns to Load not Save
  • MENU-FOCUS-OUTLINE-DISABLE + MENU-MOUSE-WASD-MODE-TOGGLE + SHOP-TAB-ACTIVE-STATE-VISUAL + UNIFIED-MENU-CURSOR-NAV-SYSTEM: StyleBoxEmpty on focus in both themes; VirtualCursor global mouse motion via _unhandled_input; Shop Buy tab pressed=true on open
  • SHOP-TAB-ACTIVE-STATE-VISUAL: shop name inline with Buy/Sell tabs (right-aligned); Reset/Settle Accounts stacked below totals panel
  • NPC-FACING-RESTORE-OPTION-DIALOGUE: connect one-shot to dialogueCompleted in interact() so NPC restores facing after option/Yes-No dialogues
  • SHOP-TAB-ACTIVE-STATE-VISUAL + MENU-FOCUS-OUTLINE-DISABLE + MENU-MOUSE-WASD-MODE-TOGGLE: shop UI redesign (name header, tabs+items left, totals+actions right), focus outline suppressed on DefaultButton, mouse/WASD toggle in ShopOverlay
  • ARCH-P0-XFAIL-TRIAGE: clean xfail graveyard — menu/dialogue/event domains
  • ARCH-P1-MENU-BASE: migrate OptionsMenu to MenuBase
  • ARCH-P1-MENU-BASE: migrate SaveLoadMenu to MenuBase
  • MENUBASE-CLASS-NAME-WASM-ORDER: remove class_name registration, use path extends
  • Revert "MENUBASE-CLASS-NAME-WASM-ORDER: remove class_name registration, use path extends"
  • restore v0.6.355-stable game code — park Phase1 MenuBase on arch/phase1-menus
  • ARCH-P1-MENU-BASE: migrate remaining 4 menus from MenuTemplate to MenuBase
  • ARCH-P2-DIALOGUE-DISPLAY: wire DialogueHandler extends DialogueDisplay; SceneTemplate.executeEvent delegates to EventDirector
  • ARCH-P2: merge Phase2 DialogueDisplay + EventDirector to godot4-migration
  • ARCH-P3: remove dead SceneTemplate code — _on_eventCompleted/_incrementCondition/checkInput + delete .full backup
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: handleClick mode-conditional — WASD mode trusts hoveredButtonIdx/y directly, skips focus_owner override that caused off-by-one routing
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: dynamic fullscreen feather anchor + always open at Music Volume in WASD mode
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fullscreen feather uses show_at_control(checkbox) directly; click emits pressed signal
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: revert VirtualCursor get_global_rect (broke feather globally); restore show_at_control(fullscreenCheckbox) for visual iteration
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: bump fullscreen feather anchor +15px right+down (visual calibration)
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: bump fullscreen feather anchor +15px more right+down
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: bump fullscreen feather anchor +15px more right+down
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fullscreen WASD toggle — direct _on_CheckBox_toggled call bypasses signal queue
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: restore WASD feather after fullscreen toggle so exit-fullscreen click works
  • UNIFIED-MENU-CURSOR-NAV-SYSTEM: fullscreen sync cooldown + ControlsMenu handleCancel returns to OptionsMenu
  • CONTROLSMENU-CANCEL-RETURNS-TITLE: intercept ControlsMenu cancel in autoload — always returns to OptionsMenu
  • R-from-items goes to Settle, L-from-3rd-col goes to items, affordability gate
  • Phase 1 cheat hooks for live state mutation
  • relocate General Store panel to bottom-right, expand Totals, equalize button heights
  • pin content_margin = 20 across hover/pressed/disabled
  • open on first item with Buy active, highlight Reset/Settle on WASD hover
  • Reset preserves Buy/Sell tab; mouse-click on tab fires pressed
  • lock in 5 gold-standard baselines, drop version-stamped iterations
  • switch motion catcher to _input + actively hide on non-interactive
  • Title + SaveLoad: WASD-driven feather, mouse hover stops corrupting WASD idy
  • drop spinning selectionIcon, place feather right-of and 1px below text
  • convert main menu items RichTextLabel → Button with hover highlight
  • feather offset (-6,-5), light cream hover, restore on cancel from submenu
  • feather offset (-12,-11), opaque cream hover, restore feather on Options→Save
  • feather offset (-12, -17), show feather + highlight on initial appearance
  • kill dual-highlight on WASD↔mouse mode flips
  • clear lingering native hover stylebox when entering WASD mode
  • vertically center item name (equal margin top + bottom)
  • bigger label height for descenders, no scroll, lingering-hover swap
  • WASD-active highlight + visible-glyph centering + mouse-mode reset
  • GlobalWorld.menuInputMode + engagement-contract hooks; ItemsMenu adopts both
  • adopt MenuBase engagement contract + global input mode
  • gate initial feather on GlobalWorld.menuInputMode + persist mode
  • black countLabel font color (was default white-ish)
  • WASD→MOUSE transition wakes hover under cursor + paint engagement on hover
  • feather + highlight panel on options (replaces spinning icon)
  • feather to LEFT side, mirrored, painted after final layout; kill spinner
  • silence overriding _on_DialogueOptionTimer_timeout; nudge feather -25 / +6
  • nudge feather -6 left + 6 down (now -31 / +8 vs option corner)
  • nudge feather -4 left + 4 down (now -35 / +12 vs option corner)
  • cap thumbnail height so scene name fits with bottom margin
  • center thumbnail and scene-name in slot gap
  • re-assert MOUSE_MODE_HIDDEN after closing SaveLoadMenu
  • Loop Laria music + Wind SFX in Laria scenes
  • Menu SFX: nav beeps + Continue/Cancel/Consume hooks
  • 500ms debounce after fade-in + show feather on initial appearance
  • EliasHouse chest: 100 Sen instead of Mugwort
  • handle Sen (itemId=0) treasures so chest doesn't soft-lock player
  • Waterway1 backdrop in CombatArena (Phase 1c)
  • Elias + Slime sprites in CombatArena (Phase 1d-1)
  • Combat Phase 2a: full lifecycle bookend stubs end-to-end on ArenaBench
  • Combat Phase 2c-1: CombatGrid handler + arena strip + bench-as-host
  • hoist isPlayer set so first sprite load takes Player branch
  • Combat Phase 2c-2: BattleTransitionHandler + visual unit conversion
  • Combat Phase 2c-5: BattleSnapshot resource pins the conversion contract
  • Combat Phase 2c-6: UnitMovement child handler — motion ownership lift
  • Combat skeleton: CombatTurnQueue handler + HP-stub on CombatUnit
  • Combat skeleton: CombatCursor handler + arena wires it on player turns
  • Combat skeleton: CombatActionOverlay + attack mechanic + victory loop
  • UnitAnimation handler — battle transition + looping idle
  • face-toward-opponent + back-attack initiative + slime in-world wobble
  • action overlay extends MenuBase (WASD/mouse contract)
  • COMBAT_UI_PORT_PLAN: review of full-game battle HUD + port phasing
  • port action menu (5 buttons + ModernGothicTheme) — Phase 2c-10a
  • port turn-queue sidebar — Phase 2c-10b
  • port stat blocks (selected + targeted) — Phase 2c-10c
  • port mode state machine + cursor sprite swap — Phase 2c-11
  • MOVE mode entry + walkable-cells paint — Phase 2c-12 (1/3)
  • UI port iteration to match video reference — Phase 2c-12
  • MOVE epic — sword cursor + path line + walk animation (Phase 2c-12)
  • cursor mouse-motion handler scaffolded (Phase 2c-12 polish)
  • thinner action buttons + opaque stat block backgrounds
  • targeted stat block + matching panel heights + filled buttons
  • 165px strip + thin SimpleRaised2 button borders + static sword
  • pixel-diff probe vs golden screenshot — Phase 2c-12 polish
  • rotating sword on confirm + Run Away rule + gold-pixel diff
  • Combat UI: gold-match rebuild — sub-paneled stat blocks + ModernGoth
  • Combat UI: bars overlay text + colored fills + bumped fonts + no scrollbar
  • Combat UI: thinner stat columns + wider action + bigger button font
  • Combat UI: gold-style polish — combined panel, lighter buttons, WASD warp
  • Combat UI: real spinning-sword sheet + NormalButton theme + WASD highlight
  • Combat UI: pixel-match action buttons to ActionBlock.png golden
  • Combat UI: stop nuking button styleboxes on WASD nav + sword +10px
  • Combat UI: WASD focus highlight + click-after-WASD + cursor exclusivity
  • Combat UI: WASD-mode click fires focused button; cursor stays hidden
  • Combat UI: lighter hover stylebox + force HIDDEN on mode transitions
  • walk-along-path facing-aware + slightly slower for visibility
  • per-cell walking animation (face + walk sprite + slide)
  • 6fps animations + iso-only facing + no-confirm-delay + drop game-over
  • face-last-direction on idle + feet-on-cell-center anchor
  • per-unit feet anchor, +20% button font, SELECT-mode cell hover
  • force OS cursor HIDDEN on every mode change + 11-tile turn queue
  • vertical sword centered, golden-corners active-cell frame, SELECT keeps acting unit in left panel
  • nudge gold-corners frame down 6 px, vertical sword up 3 px more
  • OS cursor stays hidden into ACTIVE_SELECTED + gold-frame polish
  • gold-corners frame down 4 more px (y +10 → +14)
  • Attack-button highlight on mouse-click-into-ACTIVE_SELECTED
  • combat-start facing always diagonal so idle anim matches look_direction
  • persist last-walked direction to look_direction at end of move
  • unify look_direction in screen space; _facing_cell converts to cell delta
  • real raw stats per unit (option A) — base + delta randomized rolls
  • full BattleStats pipeline (raw → accumulator → battle) wired into damage
  • attack swing animation (per AttackAndWinCombatExample.mp4)
  • ship attack sprites + hurt-flash shader + attack SFX
  • floating damage queue + swap to non-ff7 attack SFX
  • slime death anim + victory check + framework gotcha #64 + damage-queue TODO
  • damage queue 3-phase + dissolve + UI gate + 1s animation timings
  • blocking visual sequence + animation-speed knob skeleton
  • dissolve actually runs + slime attack animation
  • enemy AI + data-driven enemy attacks + button polish + victory one-shot
  • end-turn + AP + FACE picker + tiered overlay + stat balance
  • ATTACK mode 3-layer painting (red target / yellow no-target / white aim)
  • clear ATTACK paint on combat end (yellow cells lingered)
  • Game Over flow — ally death + skip transition + scene change
  • hit/miss/crit rolls + damage queue miss + crit text
  • Damage Queue v2 — sign + icon + Critical sub-label
  • damage queue live-preview hook
  • COMBAT-CAMERA Step 1: CombatCamera skeleton + bind/make_current
  • COMBAT-CAMERA Step 2: pan-rect clamp in _process
  • damage queue sandwich layout + MSDF font + camera Y-bias
  • COMBAT-CAMERA-STEP3: middle-mouse-gated WASD pan + UI_INSET_BIAS_Y bias
  • COMBAT-CAMERA-STEP4: mouse-wheel zoom with cursor-anchored pan
  • COMBAT-CAMERA-STEP5: auto-frame on turn_started when unit off-screen
  • COMBAT-CAMERA-STEP6: slide-in / slide-out on combat transitions
  • recover iteration work — damage queue, portrait, slime AP, AI, telegraph
  • yield a frame in _advance_turn_after_action to break OOM loop
  • restore CombatSpriteBounds (lost in stash recovery)
  • cap portrait head-clip to 2 px (the owner rule)
  • white-flash hurt shader (was red tint)
  • enemy turn obeys AP — move OR attack, not both
  • halve enemy move-telegraph delay (1.0+0.5 → 0.5+0.25 s)
  • pan-clamp uses backdrop bounds (the owner's rules)
  • cursor swap — dragCursor while panning, magnify while zooming
  • audio + attack-timing + y-sort batch
  • victory-music timing + Dungeon.ogg as post-combat track
  • bump web version + commit Godot-regenerated .import UIDs
  • lift Combat/ out of bootstrap into Combat.pck
  • switch to inject-at-build (option A) — single self-contained zone pack
  • ArenaBench drops bootstrap-side ext_resources, spawns Player + trigger at runtime
  • extend inject to bootstrap-side GUI deps (ModernGoth + StatBlock textures)
  • wipe zone-pack .godot/exported/ on every redeploy
  • bump web version + Godot-regenerated .import UIDs
  • merge LariaVillage + LariaWaterways → single Laria.pck
  • port Waterway1 from full-game tree into Laria pack
  • enemy-spawn pipeline + y-sort + EnemyTrigger body_entered
  • signal-driven per-enemy PlayerDetectionZone (replaces per-frame distance check)
  • thicken EnemyTrigger collision rect (20×20 → 20×80)
  • drop Grid.visible=false in waterway1 — was hiding units + cell paint
  • Grid.scale = Background.scale rule for G3-migrated zone scenes
  • port waterway2/3, lift combat to SceneTemplate, bake Grid Y-offset rule
  • event 5 flow + pack-load lifecycle + always-on pack overlay
  • emote-trigger UI buttons for manual verification
  • status label, prints, force VISIBLE cursor
  • EMOTE-PACK-SHADOW: fill-pattern for PlayerCharacter in zone packs
  • EMOTE-TAIL-DURATION: hold emote 0.5s past natural anim end
  • Windmill1Basement: restore G3 grid scale 0.4 / position 0,0
  • ChurchSquare grid: restore G3 scale=0.4/position=(0,0); revert Windmill1Basement
  • ChurchSquare combat: remove zoom/pivot, all enemies join, unit counter-scale
  • ChurchSquare combat: hide non-combatant NPCs + 1 unit per cell
  • ChurchSquare combat: classify Bodies/ children by CharacterBody2D + unitType
  • CombatGrid.find_nearest_cell: account for grid scale
  • Revert "EMOTE-TAIL-DURATION: hold emote 0.5s past natural anim end"
  • Revert "EMOTE-PACK-SHADOW: fill-pattern for PlayerCharacter in zone packs"
  • Revert "CombatGrid.find_nearest_cell: account for grid scale"
  • Revert "ChurchSquare combat: classify Bodies/ children by CharacterBody2D + unitType"
  • Revert "ChurchSquare combat: hide non-combatant NPCs + 1 unit per cell"
  • Revert "ChurchSquare combat: remove zoom/pivot, all enemies join, unit counter-scale"
  • ChurchSquare combat: remove zoom/pivot, all enemies join, unit counter-scale
  • ChurchSquare combat: hide non-combatant NPCs + 1 unit per cell
  • ChurchSquare combat: classify Bodies/ children by CharacterBody2D + unitType
  • drop KinematicBody2D — Godot 4 class doesn't exist
  • CombatGrid.find_nearest_cell: account for grid scale
  • _close_combat_and_restore: hard-clear locks, don't restore pre-combat isLocked
  • NPCs hidden for combat: queue_free instead of restore visibility
  • T5 D5: ChurchSquare combat playthrough + force_combat_resolve helper
  • Bed sleep-flow: stamp DialogueHandler.currentNPC in populateDialogueByEvent
  • clear optionMap on dialogue completion
  • unit counter-scale: multiply, don't overwrite snapshot.scale
  • sleep hold-black + slime attack-anim fallback
  • enemy AI: get close (revert prefer-largest-attack-d)
  • tools/balance: waterway encounter-rate sim v1
  • tools/balance: sim v2 — HP/mugwort/sen economy + leave-decision queue reset
  • item-name and count labels — white text + black outline
  • enable EquipmentMenu post-paladin-event
  • water shader: noiseTexture sampler — repeat_enable, filter_linear
  • ChurchSquare water: format=2 → format=3 + NoiseTexture2D migration
  • Title + FrontRoad water: G3 motion params + noise block populate
  • MenuOverlay nav: include Equipment (1) in _LEFT_CHAIN
  • SkillsMenu scroll-on-WASD; EquipmentMenu cancel routes through MenuOverlay
  • action panel lists all matching inventory + Unequip
  • real render via existing buildEliasSkillTree() builder
  • EquipmentMenu action panel: wrap items + Unequip in ScrollContainer
  • action panel = lower half; stats fit inside StatsPanel
  • SkillTree cell: borderless grid, full-cell icons, centered labels
  • SkillTree grid fills width; Equipment 2/3 top + always-on action panel
  • SkillTree cell: SP cost lower + black outline; Lv text shifted higher
  • Skills + SkillTree: top-chrome split mirrors StatusMenu
  • Combat-end teleport: drop pre-combat position restore; face down
  • EquipmentMenu action panel: parchment-style buttons (NormalButton.tres)
  • bump base font 22 → 28; shift stat names right 20px
  • empty action panel = empty; slot labels shifted +8px
  • SkillTree WASD nav + real BuySkillMenu submenu (Learn / Cancel)
  • feather cursor on focused cell; BuySkillMenu on CanvasLayer
  • center top text; pull buttons in from BorderBox edges
  • SkillTree scroll-on-WASD; right-click cancel intercepted in autoload
  • hoist scroll-into-view helper; SkillsMenu + SkillTreeMenu use it
  • pin SkillTree → BuySkillMenu → cancel returns to SkillTree
  • extend SkillTree cancel pin — real Esc + real right-click + mainmenu-first flow
  • Cloud system port — copy portable bundle + wire into Title.tscn
  • Cloud system: @export sky_y_min/max + wire MainSquare/FrontRoad/ChurchSquare
  • shift CloudSystem up 400px; hide old parallax cloud layers
  • flip parallax (big/fast/top); restore initial random fill; deeper z
  • density floor, faster wisps, wisp grows + speeds up over life
  • CanvasLayer wrap + @export wrap_left/right + round-robin layer + extend Title sky
  • Title cloud overrides: switch to viewport-space coords (CanvasLayer-relative)
  • move FrontWindmill (blades sprite) into own CanvasLayer above clouds
  • CloudSystem global_speed_mul; Title windmill blades follow_viewport
  • hide WindmillShadow artifact; sky_y_max 410 → 360
  • CloudSystem wisps: spawn anywhere on cloud, drift independently of parent
  • hide BackgroundFill (extra sky); shift Sky sprite 20px left
  • Sky.position.x 1140 → 1100 — eliminates left-edge black strip
  • Cloud port: apply Title's tuned setup to MainSquare/FrontRoad/ChurchSquare
  • Cloud port to Laria zones + version display + force_navigate + auto-reload
  • Cloud z-ordering: clouds behind mountains/hills in Laria zones
  • Wind band shader on Title hills + FrontRoad cloud slowdown
  • Wind band shader on ChurchSquare BackHills + green-only gate
  • bd init: initialize beads issue tracking
  • Cloud shadow port to Title + FrontRoad parallax zoom-ignore + beads init

v0.4.70

22 changes

New

  • Add translation rules 11-12: OS.window_size + ResourceLoader guards
  • Add Shape D playthrough tests to architecture + 3 tickets

Fixed

  • Fix event lock: only unlock player when NO event fires
  • Fix fuzzy NPC sprites: set filter=false on all pack sprite imports
  • Copy slime walk/idle sprites — fixes WASM hang in event 5
  • Fix event 5 hang: copy missing SFX + guard resolveResImport
  • Fix fuzzy NPCs: add filter=false to pack project importer defaults
  • Fix event 5 hang: remove per-frame print + fix Enemy fadeIn Color bug
  • Fix DialogueHandler parse error: broken indentation from replace_all
  • Fix SaveLoadMenu crashes: null party, preload→load, web screenshot
  • Create epics.json + 11 new tickets for Save/Load + Fixture Access epics
  • SL-2/SL-3: Fix save/load flow — null guards, missing vars, web compat

Tested

  • Devlog Session 12: playtesting, multi-agent architecture, doc restructure

Docs

  • Multi-agent architecture: ticket system, expert prompts, workflow doc

Maintenance

  • Port TreasureOverlay visual rendering from full game
  • Port ItemsMenu from full game — items submenu now renders
  • Replace spinning LoadingIcon with bouncing triangle indicator
  • Port EquipmentMenu + StatusMenu from full game
  • Complete multi-agent system: tickets, dashboard, agents, expert prompts
  • multi-agent architecture aligns with Anthropic's Agent Teams pattern
  • Remove diagnostic markers from DialogueHandler
  • SL-1: Rewrite SaveGameButton — lightweight rendering, no Unit.tscn

v0.4.50

34 changes

Fixed

  • Fix #50: Naphtali dialogue loops back after cutscene ends
  • Fix #49 + #52: dialogue box sizing (Agent D) + cloud drift (Agent C)
  • Bug cluster: #51 alpha, #30 slider, Windmill2SecondFloor port, infra
  • Tier 3 options menu coverage (#39, unblocks on slider fix)
  • Fix dialogue/menu dimensions + MainSquare movement lock
  • Fix dialogue box height: remove anchors and rect_min_size
  • Fix movement lock: clear player.isLocked + changingScenes at scene init
  • Fix cloud direction (drift right to match windmills) + 50% slower

Improved

  • Task #29: screenshot cleanup + file-size → state-check rewrite (Agent N)

Tested

  • restore live-dev-loop hooks (PROC-LIVE-DEV-LOOP + PROC-TESTBRIDGE-HOOKS)
  • Tier 3 event command coverage: position/face/speed/visibility (Agent E)
  • #40: _testIsEventValid hook + un-xfail gated event test
  • Event 9 prerequisite tests + copy missing music/SFX assets
  • MenuOverlay submenu Tier 3 coverage (Agent M2)
  • Event command slice 3 (Agent E3) + eventCurrentOrder TestBridge field
  • Event 8 MayorsHouse tests — fills the last gap in the intro chain
  • Chrome zombie mitigation: kill orphan browsers after every pytest session

Maintenance

  • Version pipeline + visible Title label + cache-busting
  • Session work: Godot 4 migration tooling + live dev loop infrastructure
  • #53 recorder + #54 pre-render events + NPC sprites + cloud tuning
  • restore version label CanvasLayer + ModernGoth + size 36 (Phase 2 recovery)
  • Session 11 devlog: subagent workflow playbook
  • Encrypted HTML5 export research report (Agent K)
  • +Windmill2SecondFloor, scenes_done 14→15 (31.2%)
  • pre-scouted GeneralStore port recipe
  • GeneralStore port: closes Alpha Part 1 Laria town, scenes_done 15→16
  • expose playerSpeed + npcPositions (Agent E follow-ups)
  • Demo thermometer: re-xfail windmill1 entry event with clearer reason
  • auto-step CORS server port on bind collision
  • Agent W: Waterways dep audit + port plan
  • Windmill story events 2-7: 6/7 passing, sprite deps copied
  • Event command slice 2 (Agent E2) + anti-ripping research (Agent H)
  • Remove fit_content_height from dialogue text — was inflating box height
  • Port feather mouse cursor from full game

v0.4.1

5 changes

Fixed

  • Godot 3→4 migration: converter + manual fixes (248→28 errors)
  • v0.5.0: Godot 4 migration — fix Camera2D zoom inversion + version bump

Improved

  • Asset migration: GUT removal, font conversion, texture reimport, project.godot cleanup
  • Godot 3→4 migration: rect_, setget, API renames (24→0 parse errors)

Maintenance

  • Godot 3→4 migration: WebBootstrap compiles clean (0 errors)