将分层反馈强化版提升为正式 main,统一协作入口并移除外部构建路径

This commit is contained in:
toshiocn
2026-10-23 11:04:37 +08:00
parent 83e2e40269
commit a156e8b5c6
173 changed files with 1181 additions and 498 deletions
@@ -0,0 +1,80 @@
✔ 手机没有浏览器音频接口时,原生播放器仍能播放全部 36 步和六类反馈音 (4.1103ms)
✔ 关闭音效停止播放;再次开启会试听并保存偏好;后台中断停止所有播放器 (0.7541ms)
✔ 延迟通关音在静音或进入后台时取消,不在返回后突然播放 (45.9298ms)
✔ 音频错误可诊断,不再静默吞掉 (0.4347ms)
✔ 所有音频均为非静音 PCM;原版第13步比第1步高一个八度 (19.472ms)
✔ 教学和组合规则用具体动作及奇偶例子解释,没有未解释的术语 (7.6131ms)
✔ 过关提示同步使用实际播放起点,非请求时间 (0.598ms)
✔ 过关和弦收尾持续衰减,不在后半段重新起音 (2.2637ms)
✔ merged irregular outlines retain holes and never draw internal unit edges (47.6935ms)
✔ all 200 boards fit four screen budgets with stable safe anchors and real shared entrances (522.3449ms)
✔ guides through every irregular block stay inside its occupied shape (25.4141ms)
✔ visited, conflicting and hinted category cells retain their material identity (10.5537ms)
✔ five font subsets match their manifest and fit the package budget (3.8279ms)
✔ upstream adapter fails closed if the inspected render seams change (0.6365ms)
✔ procedural cushion pixels preserve holes and light the upper bevel without a border (19.9765ms)
✔ visible glyph bounds are centered independently of font ascent and side bearings (1.1753ms)
✔ stage with zero depth casts alpha shadows without painting a solid backing (5.6615ms)
✔ native width-only TextMetrics still centers the rasterized glyph ink (1.7123ms)
✔ fixed channels remain anchored at their block centers after number enlargement (737.8066ms)
✔ checkpoint ribbons trigger on correct arrival only and never duplicate per frame (2.4057ms)
✔ checkpoint pulse is small, centered in time and settles without looping (0.2773ms)
✔ event batches preserve every landing and sequence but commit only highest audio and haptic (2.5258ms)
✔ completion waits at most 120ms and ignores late audio callbacks (0.502ms)
✔ light haptics are limited, checkpoint replaces light, and completion adds only one delayed short pulse (0.6548ms)
✔ unsupported graded haptic falls back to one short pulse, never long vibration (0.5295ms)
✔ haptic disable, preview and lifecycle cancellation suppress delayed or expired work (0.4659ms)
✔ late failed haptic requests cannot revive old pulses and ungraded completion falls back once (0.2774ms)
✔ rectangles, concave shapes and hexagons require geometric inward distance without treating internal seams as walls (1.2234ms)
✔ one high-speed native move records all intermediate cells and completion without duplicate final node (101.4652ms)
✔ legal but off-solution moves use public rules, while invalid clues only produce error (60.733ms)
✔ drag near a previous-block boundary cannot undo; deeper entry can, and undo button remains immediate (50.3433ms)
✔ tutorial, redraw, hint and restored saved routes do not generate player feedback (73.5198ms)
✔ pressure and rebound have bounded amplitude and duration (0.3127ms)
✔ interpolation cannot duplicate the same failed-cell event within one native movement (0.2822ms)
✔ nodes are driven by explicit events even when multiple arrive before rendering; at most two ribbons survive (15.717ms)
✔ audio fast moves merge to latest pitch and completion stops the whole four-channel pool (1.2373ms)
✔ settings persist haptic preference independently and chapter cards always use three columns (65.661ms)
✔ original audio is preserved and high pitches lose energy rather than growing sharper (6.1515ms)
✔ empty, partial and wrong routes reveal the first incomplete full segment (2.0087ms)
✔ completion hides the hint; repeat clicks cannot skip; undo and restart return to earlier segments (0.3693ms)
✔ all 200 levels reveal consecutive segments without changing the player path (1237.8614ms)
✔ hint draws skip player edges and mask visited cells on their own layer; compositing is restored (0.9316ms)
✔ parity is a segment anchor; colour is not; flow moves continuously across cells (0.3255ms)
✔ coral teaching ribbon preserves visited masks and offers direction in reduced motion (1.484ms)
✔ hint rounds shared guide junctions and keeps separate runs disconnected (0.3731ms)
✔ 实际教学关动画:basic (2.5789ms)
✔ 实际教学关动画:walls (0.4723ms)
✔ 实际教学关动画:straight (1.2477ms)
✔ 实际教学关动画:vertical (2.4091ms)
✔ 实际教学关动画:corner (0.6768ms)
✔ 实际教学关动画:colour (0.3905ms)
✔ 实际教学关动画:parity (0.3252ms)
✔ 实际教学关动画:rhythm-door (0.4597ms)
✔ 实际教学关动画:hex (0.3918ms)
✔ 实际教学关动画:unknown-start (1.2078ms)
✔ 200关的组合规则均能找到对应真实教学关 (80.3ms)
✔ 教学减速,结束停留1秒后自动循环 (3.2682ms)
✔ music loops independently, persists mute and cancels in background (2.2845ms)
✔ old arrows retain distance, rush to endpoint and fresh arrows move at base speed (0.8258ms)
✔ settings have exactly three independent preferences, and hint has its own cue (104.2538ms)
✔ actual fixed numeric node uses checkpoint pitch, final cell uses complete chord (95.8327ms)
✔ two original music loops are quiet, nonempty and have a smooth loop seam (1.6874ms)
✔ first launch goes directly to gameplay (73.4922ms)
✔ resume unfinished route after exit from gameplay (99.9457ms)
✔ resume unfinished route after exit from selection (89.3875ms)
✔ completed level resumes next unfinished, including leaving from cleared screen (66.089ms)
✔ replaying a cleared level does not replace the unfinished save (78.5557ms)
✔ legacy saves, malformed data and full completion have valid startup targets (45.9116ms)
✔ selection pages expose fifteen cards and fit phone safe areas (224.5336ms)
✔ hint-only frames reuse static UI, and player input invalidates it (36.5671ms)
✔ hint curves are cached and distance lookup is stable at boundaries (0.7168ms)
✔ new-mechanic lesson reuses the board while the continuous cursor advances (26.3074ms)
ℹ tests 72
ℹ suites 0
ℹ pass 72
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1510.9271