@spatialwalk/avatarkit 1.0.0-beta.86 → 1.0.0-beta.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.0.0-beta.87] - 2026-03-09
9
+
10
+ ### 🔧 Performance
11
+
12
+ - **Playback Cadence Stabilization** - Replaced RAF + `Math.floor(audioTime*25)` frame dispatch with fixed 25fps tick scheduler and bounded async queue, eliminating bursty frame production
13
+ - **Display Decoupling** - Speaking state uses RAF-driven `presentFrameOnly()` to present latest computed frame (WebGPU only), reducing display-side pacing jitter
14
+ - **WebGL Speaking-State Loop Suspension** - WebGL backend pauses realtime animation loop during Speaking state to avoid redundant `reorderPackedData` CPU work and RAF callback competition
15
+
16
+ ### 🐛 Bugfixes
17
+
18
+ - **Frame Index Floating-Point Precision** - Added epsilon tolerance (`+1e-6`) to `Math.floor(audioTime * fps)` to prevent IEEE 754 precision errors from producing duplicate frame indices at frame boundaries
19
+ - **WebGL Regression Fix** - Fixed severe WebGL performance regression (jank 9.47%→0.16%) caused by WebGPU-only optimization that triggered 60fps `reorderPackedData` calls on WebGL path
20
+ - **SDK Duplicate Initialize** - Deduplicated SDK initialization to prevent repeated setup when `initialize()` is called multiple times
21
+
22
+ ### ✅ Tests
23
+
24
+ - **Android Init Coverage** - Added Android duplicate-initialize regression coverage
25
+
26
+ ### 📊 Benchmark
27
+
28
+ - **beta.86 vs beta.87 Baseline** - Full cross-backend performance comparison (WebGPU + WebGL), 1 warmup + 10 measure rounds, 10s/round. Jank rate reduced 94.6% (WebGPU) and 93.9% (WebGL); frame interval stability improved 64-67%
29
+
8
30
  ## [1.0.0-beta.86] - 2026-03-03
9
31
 
10
32
  ### 🐛 Bugfixes
package/README.md CHANGED
@@ -16,6 +16,35 @@ Real-time virtual avatar rendering SDK for Web, supporting audio-driven animatio
16
16
  npm install @spatialwalk/avatarkit
17
17
  ```
18
18
 
19
+ ## 🚧 Release Gate (Hard Rule)
20
+
21
+ Release must pass gates before publish. Do not publish by manual ad-hoc commands.
22
+
23
+ Required gate checks:
24
+
25
+ ```bash
26
+ pnpm typecheck
27
+ pnpm test
28
+ pnpm build
29
+ ./tools/check_perf_baseline_release_gate.sh
30
+ ```
31
+
32
+ If iteration includes bugfixes, `docs/bugfix-history.md` must have completed rows (test mapping + red/green evidence).
33
+
34
+ Hotfix bypass is allowed only for emergency and must be recorded:
35
+
36
+ ```bash
37
+ HOTFIX_BYPASS=1 ./tools/check_perf_baseline_release_gate.sh
38
+ ```
39
+
40
+ ## 🧪 Benchmark Demo (Web SDK)
41
+
42
+ Use the dedicated benchmark demo (independent from `vanilla/`) for perf/render baseline runs:
43
+
44
+ ```bash
45
+ pnpm demo:benchmark
46
+ ```
47
+
19
48
  ## 🚀 Demo Repository
20
49
 
21
50
  <div align="center">
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { A as APP_CONFIG, l as logger, e as errorToMessage, a as logEvent } from "./index-Z9AXSJw3.js";
4
+ import { A as APP_CONFIG, l as logger, e as errorToMessage, a as logEvent } from "./index-BNATNpKA.js";
5
5
  class StreamingAudioPlayer {
6
6
  // Mark if AudioContext is being resumed, avoid concurrent resume requests
7
7
  constructor(options) {