fix(starpuff): backlog 收斂車——五張 W1 follow-up(#896–#900) - #901
Merged
Conversation
- fitHurtbox 末尾呼叫 body.updateBounds():Phaser Body.setSize 以上次快取 _sx 換算 世界尺寸,換裝當幀不同步則 hurtbox 暫態誤差(ember 54/tide 88.17,基準 36) - fake body 升級為 Phaser _sx/_sy 快取語意替身,新增「換裝當幀 body 世界寬」斷言; mutation 實證:移除 updateBounds 該案必紅、其餘 16 案綠 - prism/gravity 補 expectStableAcrossFrame 跨幀案(1254 源);mutation 實證:移除 vscale.rebase 四形態案皆紅(#897) - 新增 sprite.scene 清空後幀鉤不覆寫 scale 案;mutation 實證:移除 visualScale 活體檢查必紅(#898) 測試:pnpm --filter @app/starpuff test -- --run src/game/systems/player.test.ts(17 案全綠) Co-authored-by: Cursor <cursoragent@cursor.com>
- 為六個被測試 import 的 .js/.mjs 模組補 .d.ts/.d.mts 宣告(verify-002-log、 lighthouse-drift、monitor-schedule-drift、verify-production-resources、 fetch-moneybox-rates、fetch-taiwan-bank-rates),31 個 TS7006/TS7016 全數消除 - 新增 @types/xml2js devDependency 補 sitemap 測試的 xml2js 型別 - pre-push 與 ci.yml 各增補 tsc --noEmit -p scripts/tsconfig.json 步驟: pnpm -r typecheck 依 workspace 語意排除 root,缺顯式閘門必再漂移 - 移除 verify-002-log.test.ts 的 String() 正規化與過時註解(宣告檔已補) 測試:npx tsc --noEmit -p scripts/tsconfig.json 零錯誤;pnpm test:root 126 案全綠 Co-authored-by: Cursor <cursoragent@cursor.com>
- 原 telegraph 閃爍與俯掠位移同一物理幀啟動,玩家反應窗為 0;修法為 fly 尾段 TICKETA_WARN_MS(700ms)懸停+閃爍,shift 才開始位移(沿 scanna aim 定點語彙) - 反應窗對齊 telegraph SSOT:700ms 與 spora windup 同級(scanna 800/zappy 500), 離散幀量測下界仍 ≥ AUDIT_THRESHOLDS.telegraphMinMs(600) - 俯掠動力學零改變:FSM 常數不動(fly 2400/shift 600/shiftSpeed 260),換軌 頻率與威脅位形不變,難度不侵蝕 - 新增 finaleEnemies.test.ts 六案:反應窗機械量測(首亮至位移 ≥600ms)、尾段懸停、 中段無誤報、shift 首幀俯掠、週期回歸;mutation 實證:移除預警分支 2 案必紅 測試:pnpm --filter @app/starpuff test -- --run src/game/systems/finaleEnemies.test.ts(6 案全綠) Co-authored-by: Cursor <cursoragent@cursor.com>
- audit-probes 新增 runTicketaTelegraphProbe:受控 spawn+20ms 座標取樣,重建 「懸停預警 → 俯掠穿越」事件序;懸停窗(telegraph 可觀測訊號)、俯掠動力學 (穿越時間/到玩家帶時間/換軌週期)與分級反應迴避解析模型(PLAYER.moveSpeed) - level-audit 掛 --probe ticketa(門檻引 AUDIT_THRESHOLDS.telegraphMinMs SSOT) - 實測對比(L21 各 10 事件):預警窗 baseline 58ms(min 0)→ fixed 783ms(min 739); 位移動力學一致(穿越 374↔371ms、到玩家帶 308↔308ms、週期 3017↔3012ms)證明 難度不侵蝕;最壞站位分級迴避率 250/350/500ms 全部 0% → 100% 測試:node scripts/level-audit.mjs 21 --probe ticketa ×2(fixed/baseline 對照跑通) Co-authored-by: Cursor <cursoragent@cursor.com>
Contributor
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.OpenSSF Scorecard
Scanned Files
|
Contributor
|
✅ SEO 審計通過!所有 2026 標準驗證項目都符合要求。
|
This was referenced Jul 27, 2026
s123104
pushed a commit
that referenced
this pull request
Jul 27, 2026
- 002 聚合檔頭 +3(reward 3)累計 325→328 - #904 紅線改釘 WARN、#903 宣告漂移守門、#905 實驗 revert - #903 條目措辭精確化:mutation 為同類 tsc 盲區示範, 非 #901 深層欄位改名逐字重現(審查回饋修正) - changeset:@app/starpuff patch(無玩家可見行為變更) 測試:verify-002-log 於 pre-commit 驗證(staged); commit 後另跑 --base-ref origin/main 佐證 Co-authored-by: Cursor <cursoragent@cursor.com>
s123104
pushed a commit
that referenced
this pull request
Jul 27, 2026
- 002 聚合檔頭 +3(reward 3)累計 325→328 - #904 紅線改釘 WARN、#903 宣告漂移守門、#905 實驗 revert - #903 條目措辭精確化:mutation 為同類 tsc 盲區示範, 非 #901 深層欄位改名逐字重現(審查回饋修正) - changeset:@app/starpuff patch(無玩家可見行為變更) 測試:verify-002-log 於 pre-commit 驗證(staged); commit 後另跑 --base-ref origin/main 佐證 Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
摘要
收斂五張剛立案的 follow-up:判定箱首幀同步、跨幀測試覆蓋、銷毀護欄測試、票券蝠 telegraph 反應窗、scripts 型別債與閘門。
Closes #896
Closes #897
Closes #898
Closes #899
Closes #900
各卡修法與驗收證據
#896 fitHurtbox 換裝首幀未同步 updateBounds(bug/p3)
fitHurtbox()末尾呼叫body.updateBounds()——PhaserBody.setSize()以上次 updateBounds 快取的_sx換算世界尺寸,換裝當幀 scale 已變而快取未更,暫態誤差(實測 ember 54/tide 88.17,基準 36)約一個物理步後才自動修正。_sx/_sy快取語意替身(舊替身以「sourceWidth × 即時 scaleX」直算,鎖不住快取縫);新增「換裝當幀 body 世界寬」斷言(直讀body.width快取語意欄位,涵蓋生成/ember 768/解除回 512/tide 1254 四情境)。updateBounds()→ 新案必紅(其餘 16 案綠,證明守門力來自新案)。#897 prism/gravity 缺跨幀 hurtbox 穩定回歸(p3)
player.test.ts補 prism(glowy ×3)/gravity(boomy ×3)各一條expectStableAcrossFrame跨幀案(1254 源),四形態全覆蓋。wearTexture的vscale.rebase→ ember/tide/prism/gravity 四案皆紅。#898 fake sprite scene:{} 測不到 restoreBase 護欄(p3)
sprite.scene清空後 PRE/POST 幀鉤不覆寫 scale」案,模擬 Phaserdestroy()清 scene 語意;含活體對照組(scene 存在時毒值被覆寫回基準,證明警戒的覆寫路徑真實存在)。visualScale.ts的活體檢查(if (!entry.sprite.scene) continue)→ 該案必紅。#899 票券蝠 telegraph 與俯掠同幀(bug/p2)
finaleEnemies.tsfly 尾段物理行為調整(FSM 常數零改動)——updateTicketa()在 fly 尾段TICKETA_WARN_MS(700ms)直接以body.setVelocity(0, ...)懸停並閃爍預警,shift 才開始位移(沿 scanna aim 定點鎖定語彙)。FSM 常數零改動:fly 2400/shift 600/shiftSpeed 260 不變(兩席審查均核對確認),換軌頻率與威脅位形不變。取值 700 對齊 spora windup(scanna 800/zappy 500 之間),離散幀量測下界仍 ≥AUDIT_THRESHOLDS.telegraphMinMs(600)。--probe ticketa,L21 各 10 換軌事件):dodgeRateSignalAtWarndodgeRateSignalAtMove兩模型語意差異:
SignalAtWarn量測「預警的可用性」——修復把可讀訊號提前 700ms,讀訊號的玩家從躲不掉變全躲得掉;SignalAtMove量測「威脅的保留度」——308ms(到玩家帶)< 250ms(反應)+ 218ms(走位),不理會預警的玩家修後照樣躲不掉,證明票券蝠的威脅位形完整保留、未被削弱成無害敵人。未來平衡決策應以SignalAtMove與關卡層級 deaths 為準,不可只看SignalAtWarn誤讀為「此敵人已無威脅」。SignalAtMove全 0 與 deaths 未降共同證明威脅保留。finaleEnemies.test.ts六案(含反應窗機械量測:逐 16ms 幀序量「telegraph 首亮至俯掠開始」≥600ms)。Mutation 實證:移除預警分支 → 2 案必紅。enemyFsm.test.ts既有案全綠。#900 scripts/tsconfig.json 未進 typecheck 閘門(debt/p3)
.js/.mjs模組補.d.ts/.d.mts宣告(verify-002-log、lighthouse-drift、monitor-schedule-drift、verify-production-resources、fetch-moneybox-rates、fetch-taiwan-bank-rates)+@types/xml2js,31 個 TS7006/TS7016 全數消除(型別從宣告流動,非逐處補參數註記)。.husky/pre-push與ci.yml各增補顯式tsc --noEmit -p scripts/tsconfig.json步驟(root 依 pnpm workspace 語意被pnpm -r typecheck排除,缺顯式閘必再漂移)。npx tsc --noEmit -p scripts/tsconfig.json零錯誤;pnpm test:root126 案全綠;本 PR push 時 pre-push 新閘已實跑通過。七項驗證
pnpm --filter @app/starpuff test:1048 案全綠(基準 1038 + 新增 10;既有案零改動)pnpm typecheck:全綠pnpm lint:0 error(9 warnings 為 ratewise 既有 react-refresh 項,非本車引入)npx tsc --noEmit -p scripts/tsconfig.json:零錯誤updateBounds()→ 新斷言必紅 ✓(test(starpuff): prism/gravity 缺跨幀 hurtbox 穩定回歸(#886 follow-up) #897/test(starpuff): fake sprite scene:{} 無法測已銷毀 sprite 的 restoreBase 護欄(#886 follow-up) #898 mutation 同樣實證).claude/product-intel/level-audits/probe-ticketa-l21-{fixed,baseline}.json)002
檔頭聚合值:
+5(reward 5、penalty 0、neutral 0)|累計總分:+324(main 基準 319);node scripts/verify-002-log.mjs --base-ref origin/mainexit 0。白名單遵循
只動白名單內檔案;未觸碰
GameScene.ts與拆分車檔案。新增finaleEnemies.test.ts(#899 驗收 3「相關單測」的孿生測試檔)與 6 個scripts/*.d.(m)ts宣告檔。無延後項目。Made with Cursor