Release 1.1.1
The biggest thing in 1.1.1 is a crash fix that should have been caught earlier: WebGPURenderer was imported statically, which evaluated GPUTextureUsage at module load time, which meant Firefox – and anything else running without WebGPU globals – died before the software fallback could do anything about it. That's fixed. Everything else is cleanup: the BT API got a naming pass so boolean queries, predicates, and HardwareSettings config flags all follow is*/has* consistently, the asset subsystem went through a structural refactor across BitmapFont, SpriteSheet, Palette, PaletteEffect, and SystemFont, and documentation was corrected and expanded across 45+ files, including a new overlay guide that probably should have existed a year ago.
API Changes
A large naming normalization pass touches the BT namespace and related input/config surfaces.
- Boolean queries (
isDown,isPressed,isPointerActive), predicate methods (isEqual,isContaining,isIntersecting), andHardwareSettingsconfig flags (isOverlayEnabled,isDetectingDroppedFrames) now all followis*/has*conventions consistently across the board. Deprecated aliases keep previous names alive for backward compatibility. (#241)
Asset System
Seven refactor PRs tighten control flow, strengthen validation, and extract focused helpers across every asset class.
- WebGPU mock factories and test-time stubs consolidated across asset loading, palette management, sprite-sheet processing, font generation, and preset data. Shared helpers introduced; duplication removed. (#256)
BitmapFontload helpers, glyph lookup, and measurement now use single-return control flow..btfontJSON is parsed asunknownand narrowed through a runtimeFileDataguard so texture and glyph fields are validated before use. Benchmark glyph seeding merged into one loop. (#257)AssetLoader.buildExtensionHintuses a single return path, matching the style used elsewhere in the asset system. (#258)Palette.fromJSONvalidates with positive checks and loads colors and names in one loop.Palette.setusesif/elsefor slot 0 vs other indices; constructor positioned before theisDirtygetter. (#259)PaletteEffectManager.update,CycleEffect.update,FlashEffect.update, andpaletteSwapcollapsed to single return points. Flash apply/restore loops extracted into module helpers soupdate()stays loop-free. Related test assertions deduplicated. (#260)SystemFont.writeGlyphPixelsreplaces nestedx/yloops with a single flat index loop, preserving atlas write semantics and bitmap bit decoding. (#261)SpriteSheetcolor collection, palette-fit validation, palette writes, and usage-mask marking extracted into focused helpers. Method complexity reduced; dead oversized-image canvas stubs removed from tests. (#262)
CI and Tooling
Zed agent skill support landed, editor configs were cleaned up, and // #region markers were removed everywhere.
.agents/skills/added with symlinks to.claude/skills/for Zed skill discovery. All skills renamed withbt-prefix (perf→bt-perf,release→bt-release,test→bt-test). Requirednamefrontmatter added to allSKILL.mdfiles for Zed validation. (#253)- Dead VS Code debug launch config removed.
.zed/settings.jsonis now tracked (.gitignoreupdated to mirror the.vscodepattern). Prettier coverage expanded to.mdcfiles. Zed agent terminal/git/write/edit allowlists tightened. (#254) // #regionand// #endregionmarkers stripped fromsrc/,scripts/, tests, and benchmarks. CLAUDE.md anddocs/testing.mdupdated to remove guidance that recommended region markers for long files. (#263)- Broad reformat pass across documentation and internal code structure. No public API or behavior changes. (#266)
Rendering
GPU acronym casing normalized to uppercase across all identifiers.
WebGpuRenderer,disposeGpuState,renderDimensionGpuLimitError, and related identifiers renamed to their uppercaseGPUforms (WebGPURenderer,disposeGPUState,renderDimensionGPULimitError). Changes touch source, tests, and documentation; behavior is unchanged. (#267)
Core and Utils
The software fallback was unreachable on browsers without WebGPU globals.
- Static import of
WebGPURendererwas evaluatingGPUTextureUsageat module load time, crashing Firefox on Linux and any browser without WebGPU globals before the software backend could start.WebGPURendereris now loaded dynamically only after WebGPU init succeeds, so the software fallback can actually reachinit. (#240)
Tests
- Visual test specifications and fixtures refactored for naming consistency and code organization. Linting improvements across test specs. (#255)
Documentation
Four PRs corrected factual accuracy and added new guides across the full doc set.
- Cursor glob-scoped rule and Claude Code rule added documenting
src/file layout, class member order as enforced byperfectionist/sort-classes, and the ban on// #regionmarkers. Mirrors CLAUDE.md and the developer-experience guide. (#265) - CLAUDE.md architecture map updated to reflect
SystemFont,Timer,fullscreenVS, overlay constants/labels/types, and theconsumer-doc-importstest guard.BTAPI methods list expanded with grouped categories, deprecated aliases, and top-level package exports. (#268) - New
docs/overlay.mdcovering subsystem layout, visibility model, customoverlayRows, optional bands, HUD palette slots, and the present/target FPS distinction. Factual accuracy corrected acrossapi-assets.md,api-core.md,api-utils.md, and other existing guides. (#269) - 45+ files of JSDoc precision work: all
{@link}tags qualified to fullinterface.memberform,paletteSetvs in-place mutation semantics clarified,spritesRefreshdocumented for when it is actually required (layout swaps, not value changes),effectAdd/effectRemove/effectClearcorrected. (#270)
Full Changelog: 1.1.0...1.1.1