Skip to content

feat(starpuff): 星海終局篇 W1——四新變身、六新小怪與 L21/L23 走動關 - #886

Merged
s123104 merged 18 commits into
mainfrom
feat/starpuff-v21-w1-forms
Jul 26, 2026
Merged

feat(starpuff): 星海終局篇 W1——四新變身、六新小怪與 L21/L23 走動關#886
s123104 merged 18 commits into
mainfrom
feat/starpuff-v21-w1-forms

Conversation

@s123104

@s123104 s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

摘要

星海終局篇(L21-L30)地基波次 W1:沿 TRANSFORM_FORMS 資料驅動架構擴充四種新變身、六種新小怪,交付 L21 星港集散地與 L23 冰晶潮灣兩座走動關,並補齊 level-audit --probe transform 變身觸發密度量測。設計 SSOT=.claude/prds/starpuff-v21-v30-design.md;GAME_DESIGN 回寫 §118/§119。head 釘 2788f9b59(base main@11ca18696=v0.22.1)。

一、四新變身(§118;零新星味、語彙 ≤4、anti-softlock 優勢解非必需)

形態 解鎖 觸發味 機動
焰化 Ember L21 重鑽味(貨櫃丁供給) 焰彈小爆 —(無防禦) 焰衝刺(空跳槽位) 熔岩爆落地+burn 燒毀
潮化 Tide L23 孢子味(潮灣三新怪) 水引拉近 泡泡盾 ×1 霜滑翔 潮環撥開投射物
稜化 Prism L25(能力先建,關卡屬 W3) 流光味 三向稜光碎片 反射抵銷 鏡步瞬移(空跳槽位) 彩虹光束(B 長按貫穿)
引力化 Gravity L27(同上) 迴旋味 引力井初爆 星體護衛 ×3 錨墜(下砸 ×1.8) 引力井滯留牽引+方向切換抗性(W3 消費)

設計意圖

  • 焰化=走位換輸出——刻意零防禦語彙,DPS 與機動(空中衝刺)最高,burn 對冰塊/稅票類(W2 Tariffang 同源消費)有燒毀優勢;教「進攻型」玩家路線。
  • 潮化=控場防禦——水引把供給拉向自己(與吸入循環協同)、泡泡盾與潮環構成防禦組合;對位 L23/L24 的投射物密集環境。
  • 稜化=技巧型雙攻——點按碎片/長按光束的雙語意(沿殼盾點按/長按前例)、鏡步與反射抵銷對位 L25/L26 鏡界主題。
  • 引力化=重裝控制——移速 -10% 換三層護體與範圍牽引,錨墜強化既有下砸不加新輸入;方向切換抗性是 L27/L28 的優勢解鉤子。

工程契約:解鎖閘 FORM_INTRO_LEVELunlockedTransformForms(可觸及最高關) 不動 save schema;SP 鍵/HUD 徽章/e2e transformEligible 同一裁決;護體(入殼/泡泡盾/星體護衛)共用 tuckCharges 單一機構;焰彈/稜片/風刃收斂 formSkills.launchShot 單一發射管線(flavor 借既有味系效果表);世界結算走 SKILL_TRANSFORM_STRIKEstarCombat.resolveTransformStrike 單點路由。行數閘:player 1195/GameScene 1200/enemyUpdates 1169(呈現抽 systems/formSkills.ts、新怪 AI 抽 systems/finaleEnemies.ts)。

二、六新小怪(§119;telegraph ≥600ms 測試守門)

名稱 定位 telegraph 星味/反制
貨櫃丁 cargo 焰化供給主力(重型 HP10 緩推;遠域週期折返、近域 900px aggro 送供給上門) 無攻擊(接觸型) 重鑽味;吸入/焰化燒毀
票券蝠 ticketa 空域壓力(雙軌換軌俯掠即攻擊語彙);擊殺發疾風靴加速票 換軌前搖 600ms 閃爍 疾風味;讀換軌預兆
掃描眼 scanna 遠程封鎖(鎖定後直線光、鎖定後不修正可預判) 鎖定 800ms 漸亮閃爍 不可吸;掩體/殼盾
泡泡機 foamy 潮化供給+非傷害拒止(泡泡使玩家上浮,潮化免疫) 鼓脹抖動 600ms 孢子味
冰史萊姆 frosty 潮化供給+焰化教具(擊殺分裂兩迷你體;burn 熔解不分裂) 滑行恆速(接觸型) 孢子味;焰化熔解
潮汐魟 manta 中距彈幕(順流扇形三水刃) 鎖定 650ms 閃爍 孢子味;逆流走位

單幀事件態(fire/spit/volley)沿 boomy throw 慣例;掃描光/泡泡/水刃走既有 hazards 池(壽命有界必回收);frosty 分裂與 burn 熔解收斂在 enemies.damage 單一結算管線。

三、L21/L23 教學意圖與形態練習區

  • L21 星港集散地(教焰化):十一種混編(cargo 22% 主場)+週期蒸氣閥+雙精英。玩家自然推進即遇大量貨櫃丁(近域 aggro 供給送上門),hint「連吞 3 隻貨櫃丁——地面按 SP 焰化變身」。
  • L23 冰晶潮灣(教潮化):九種混編(潮系四供給 56%)+潮汐(§71 管線重用)×週期浮力柱+雙精英。
  • 形態練習區(PRD §3 安全房模式):兩關各於中段保證生成 3 隻同系怪(L21 貨櫃丁 ×3、L23 泡泡機 ×3),位點一律在首個精英門之前(開放跑道)——精英房軟鎖門前置會阻斷「≤30s 湊齊變身」契約(實測教訓,見第五節)。L23 練習品種自孢子菇改泡泡機:3 隻孢子菇叢集的孢子雲範圍拒止實測為死亡坑,泡泡不傷人=低壓練習。
  • 終局章走動關口徑:六同屏(沿 L19)、§67 中點 checkpoint、spawn 900/850ms。

四、量測數據(mid bot,dev server 序列量測,console 錯誤 0)

指標 L21 L23 門檻
首次變身 p50 8s 11s ≤30s ✅
首次變身 p95 30s 26.6s ≤60s ✅
probe 逾時 0/8 0/8 0 ✅
通關率(×3、cap 300s) 100%(84.4s) 100%(85.1s) 不得 0% ✅
死亡/run 4.67 3
靜態三軸 D/M/P(總分) 8.5/8.6/10(9.0) 9.0/8.6/10(9.2) 不倒掛 ✅

不倒掛驗證:L19(走動 9.0)→ L21(9.0)→ L23(9.2)→ 對照 L20(魔王 9.2)——走動關序列單調不減、接續 L20 量級(三軸公式與錨定校準均由 logic/difficulty.ts SSOT 計算,非人工評分)。

五、probe 四層根因排查(審查席重點:以下均為已知且已修)

--probe transform 首測 L21 8/8 逾時,逐秒取證(ammo/hp/px/branch 逐 tick 快照)揪出四層疊加根因:

  1. 帶彈再按 B 把集星射掉(driver 缺陷):B 點按語意=有彈即發射(§109),bot 獵集間隙放開再按會把已集的同系星射掉、永遠湊不滿 3。修法:收集期持鍵紀律——僅空匣允許釋放。
  2. 獵集死守不可吸個體(driver 缺陷):條件可吸 drilly(潛地期)與精英(同 kind 同形、恆不可吸)被當獵物死守,吸力只會彈開=原地卡死。修法:獵集清單過濾 canInhale(kind, false)__sp.enemies()elite 旗標跳過(觀測鉤 additive 擴欄)。
  3. cargo 不朝玩家走(設計缺陷):初版純週期折返巡邏使 spawn 在前方 ~700px 的供給永不靠近,玩家/bot 必須穿越精英房去追。修法:cargo 加近域 aggro 900px(遠域仍折返巡邏,練習區留駐語意不變)。
  4. 精英房前置+無 checkpoint 死亡全重置(設計缺陷,L23 一度通關率 0%):死亡熱點直方圖群聚於精英房內(x 2000-2200),每死全關重置=精英血量歸零的 groundhog day。修法:精英房全數移到練習區之後+L21/L23 補 §67 中點 checkpoint(死亡不再重置精英進度)——L23 通關率 0% → 100%。

修完後正式量測即上表數字;取證過程逐筆落 docs/dev/002

六、解鎖鏈改動(跳號銜接)

save.tsLEVEL_IDS 改由 LEVELS 派生(移除硬編第二份清單),解鎖規則自「第 N-1 關已通關」改為「在編序列的前一關已通關」:

  • W1 過渡期:LEVELS = [1..20, 21, 23] → L23 的前一關=L21,跳號自然銜接(L20 通關開 L21、L21 通關開 L23)。
  • W2 補 L22 後:LEVELS 插入 22 → L23 的前一關自動變為 L22,零程式改動自動收斂(save.test 有跳號銜接守門案)。
  • 舊存檔零遷移:schema 不變、新節點自然鎖定;all-clear 成就語意隨 LEVELS 收斂(20/20 舊存檔補發不含 all-clear,通關新章後補發)。

七、素材銜接點(PENDING_TEXTURE_KEYS)

全部素材為佔位(程式繪製/回退),介面 key 已凍結於 core/codex.tsPENDING_TEXTURE_KEYS

  • 小怪立繪:minion-cargo|ticketa|scanna|foamy|frosty|manta(enemies 回退同色圓角色塊、CodexScene 回退 fx-star 剪影,不噴 missing texture)
  • 形態立繪:hero-ember|tide|prism|gravity(player 缺圖回退一般姿勢+aura 保識別,既有慣例)
  • 背景:bg-starport|bg-tidebay(background 系統既有回退)

素材車 B02/B03 交付後:補 core/assets.ts 註冊+自 PENDING_TEXTURE_KEYS 移除即生效(圖鑑測試以「ASSETS ∪ pending」守門,pending 清空即回歸嚴格模式)。

測試計畫

  • vitest 65 檔 908 案全綠(base 897 → 淨增 11;含四形態資格/語彙/護體 31 案、六怪 FSM/telegraph/分裂 8 案、供給密度/解鎖跳號鏈守門案)
  • typecheck/lint(max-lines ≤1200 全過)/prettier;pre-push(typecheck+全 workspace test+build:ratewise)
  • level-audit --probe transform L21/L23 各 8 trials 零逾時達標;標準量測 mid ×3 通關率雙 100%
  • minor changeset;GAME_DESIGN §118/§119 回寫;002 逐 commit 留痕
  • 審查席獨立 bot 量測與真實瀏覽器實測(釘 2788f9b59

已知限制:素材佔位待素材車;Credits 謝幕暫不可達(L20 後接 L21,W4 L30 落地即恢復);SEO 分區對照過渡期僅列已有魔王文案的五區。

Made with Cursor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2788f9b595

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/dev/002_development_reward_penalty_log.md Outdated
Comment thread apps/starpuff/src/game/systems/starCombat.ts Outdated
Comment thread apps/starpuff/src/game/systems/overlaps.ts Outdated
Comment thread apps/starpuff/src/game/systems/formSkills.ts
@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from 2788f9b to 06aa4fc Compare July 26, 2026 08:55
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

收斂輪(bot review 四項待修)— head 06aa4fcd7

已 rebase 至 main 3c6812d5c(T7-A/T7-C 整合,章號因 main 已佔 §118 而終局定為 §119 四新變身/§120 六新小怪/§121 L21/L23 與進程;verify-design-docs 121 章對齊通過)。

四項修法

  1. 002 檔頭(P1):改「單一 commit 聚合落盤」——6 筆 reward 一次插入、檔頭 +6(reward 6、penalty 0、neutral 0)|累計 +266(main 前值 +260);驗算:新增條目 6=a+b+c、N=6-0、零歷史刪除、ID 全檔唯一。ci(scripts): 002 記分守門移植進 main——pre-commit 第 6 步+CI 聚合強制(#881) #884 守門腳本尚未進 main,故照 SOP 手動驗算。
  2. 潮引對供給怪失效(P2)starCombat.ts 改為可吸目標只拉不傷、不可吸維持輕傷+未死拉近。理由:潮引的控制定位是把供給怪拉近吸入,先傷會把 HP1 供給擊殺使拉近永不執行;「拉近前置+照傷」的替代方案仍會殺死供給、與吸入意圖相斥,故捨棄。
  3. 潮化免傷過寬(P2)overlaps.ts 撥開收窄為投射物白名單 spike/reflect/boomerang/sugarblob/waterblade(泡泡另有免疫分流);區域拒止(spore/sugarspot)、近戰(bite/zap/comettail)與掃描光束照常結算。
  4. burn 池洩漏(P2)player.ts launchStar 發射時重設 burn=false,焰彈殘留標記不再洩漏到一般星彈。

回歸測試(紅→綠實證:修正前恰好 3 紅、修正後 976 全綠)

  • starCombat.test.ts:tide-pull 可吸只拉不傷/不可吸傷+拉/killed 不拉(×2 案)
  • overlaps.test.ts:投射物撥開(spike/waterblade)/非投射物照常結算(spore/zap/scanbeam)(×2 案)
  • player.test.ts:焰彈後池復用同一物件發一般星,burn 必為 false(×1 案)

修正後 bot 量測(vs 修正前)

項目 修正前 修正後
L21 mid×3 100%/84.4s/4.67 死 100%/83.4s/4.67 死
L23 mid×3 100%/85.1s/3.0 死 100%/94.3s/3.67 死
三軸 L21 9.0/L23 9.2 L21 9.0/L23 9.2(L19 9.0→L20 9.2 不倒掛)
L21 probe(焰化) p50 8s/p95 30s p50 10.7s/p95 33.9s(8 trials 零逾時)
L23 probe(潮化) p50 11s/p95 26.6s p50 10.6s/p95 25.9s(8 trials 零逾時)

潮化收窄後 L23 表現在合理範圍(L23 危害主體為水刃/泡泡,仍屬撥開/免疫路徑;標準 mid bot 不變身故通關率不受影響);console 錯誤 0。

閘門

typecheck ✅/vitest 976 ✅/lint ✅(GameScene 收回 1200 行內)/verify-design-docs ✅/pre-push(typecheck+test+build:ratewise)✅。不自行合併,等 PM 派複審。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 06aa4fcd7a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/starpuff/src/game/systems/finaleEnemies.ts
Comment thread apps/starpuff/src/game/systems/overlaps.ts
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

複審收斂輪(Grok REQUEST_CHANGES 六項)— head e9b258213

Blocking:池瞬時旗標系統性根治(不打地鼠)

新增 src/game/core/poolFlags.ts——POOL_TRANSIENT_FLAGS = ['tideDeflected','reflected','burn','inhalable'] 單一 SSOT 清單+resetTransientFlags()全部池取出點enemies.spawnHazardboss.ts/noctra.ts/voidra.ts/syrona.ts/prismix.ts 彈幕 spawn、player.launchStarformSkills.launchShot)一律必經此函式復位;新增一次性互動旗標只需登記清單一處,不需記得逐 spawn 點補。順帶收斂既有債:voidra/syrona 原本連 reflected 都未清、prismix 的 inhalable 手工重設也併入 SSOT。設計文檔 §119 已落此為現行規則。

  • 未採 disableBody 方案:被撥開的彈體應持續飛行可見(撥離演出),不能銷毀。
  • 未採狀態物件重構:setData 是全 codebase 既有慣例,遷移面過大且不必要。

完整循環回歸測試(撥開→回收→再命中):hazards 池(enemies.test.ts:擊殺 puffy 走公開 damage API 觸發 burstSpikes ×4,污染旗標→回池→復用斷言全歸位)+voidra 彈幕池(FSM 驅動星屑彈環,鏡 Grok 的 1st=deflect → residual → 2nd 復現路徑)+poolFlags 單元測試。

Should-fix 四項

  1. 白名單測試:非撥開案擴為 spore/zap/scanbeam/bite/sugarspot/comettail 全六種——Sonnet 的漏標變異(reflect→bite)現在會被抓到。
  2. 潮引範圍收窄:判準改 TIDE_PULL.pullOnlyKinds = ['cargo','ticketa','foamy','frosty','manta'](transform.ts SSOT),非供給目標(含可吸 jelly)恢復輕傷+拉近;測試逐一驗五種供給怪。
  3. 零傷命中回饋:供給怪被拉時於目標位置發潮色碎光(fx.burstSmall),測試斷言座標與 tint。
  4. TIDE_PULL 註解已同步條件式行為。

第 5 項判斷:稜化「反射抵銷」=改實作為抵銷不回傷

理由:(a) 回傷反彈已是殼化的防語彙(§57/§58),兩形態共用同路徑違反「每形態語彙 ≤4 且彼此區辨」紀律;(b)「抵銷」字義即無效化,稜化定位是光的折射操作而非反擊;(c) 稜化已有三向碎片+彩虹光束+鏡步三強語彙,再贈殼化級反彈回傷會過載。實作:prism.reflectProjectiles=false+新 negateProjectiles=true,接觸彈幕即折射銷毀(稜色碎光、不 damageBossAt、不標 reflected);殼化反彈 tint 同步改走 TRANSFORM_FORMS[form].tint;圖鑑文案改「折射抵銷彈幕」;§119 落主句。

第 6 項:泡泡免疫改顯式 bubbleImmune 欄位(tide 專屬 true),並有「僅開 deflectProjectiles 的假想形態照常上浮」守門測試。

紅→綠實證

stash 生產修正重跑:恰好 6 紅(enemies 池循環 1、voidra 池循環 1、潮引清單 2、稜化抵銷 1、泡泡解耦 1)→ 還原後 983 全綠(+7 案)。

閘門與量測說明

typecheck ✅/lint ✅/vitest 983 ✅/verify-design-docs 121 章 ✅/pre-push(typecheck+test+build:ratewise)✅。未重跑 bot 量測:本輪變更不影響標準跑(mid bot 不變身;potion 供給/稜化/泡泡路徑 L21/L23 標準跑不觸及),Grok 的 L21 mid×4、L23 mid×8/low×8 全 100% 基線仍有效。002 依 PM 指示本輪未動,等重算基準。不自行合併,等派複審。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e9b2582130

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/starpuff/src/game/logic/levels.ts
@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from e9b2582 to 216f06a Compare July 26, 2026 12:15
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

第三輪收斂(Grok 功能 94 缺口)— head 216f06a28

必修 1:選 wrapper(+原始碼靜態守門雙保險)

新增 acquirePooled(group, x, y, key)core/poolFlags.ts):取出+復位一體化,全部池取出點改接——hazards、五魔王彈幕與波柱(jellord/noctra/voidra/syrona/prismix 含 shockwaves/shields)、星彈雙發射器、meteors/embers,rg 全庫掃描後 raw pool .get 歸零。
Phaser group .get(x, y, texture) 簽章跨池一致,wrapper 無實務障礙。但 wrapper 本身不能在編譯期禁止「新程式直呼 .get」,所以加上第二道:poolFlags.test.ts原始碼靜態守門——掃描 src/game/**/*.ts,池群組命名(hazards/projectiles/shockwaves/stars/meteors/embers/shields/group)直呼 .get( 即紅。兩個維度收斂:新增旗標由 SSOT 清單守、新增取出點由靜態守門守。
突變實證(Sonnet 的原突變重演):把 syrona.ts spawnShot 改回 raw .get靜態守門紅+syrona 池循環測試紅(雙網);還原後全綠。

必修 2:caramel 入冊+一次性旗標全量盤點

POOL_TRANSIENT_FLAGS = ['tideDeflected','reflected','burn','inhalable','caramel']。噴泉柱與糖漿波同池復用經 acquirePooled 必歸位(syrona.test 有完整循環案)。
全量盤點(判定與理由已留檔 poolFlags.ts 註解,防後人誤判漏看):

  • 納入:tideDeflected(撥開)、reflected(殼反)、burn(焰彈)、inhalable(prismix 折返彈)、caramel(糖漿波)——皆為跨系統寫入、一次性互動、回池必須失效。
  • 不納入:hazardKind/lifeMs/damage/pierce/flavor/mix/homingMs/orbitIndex(每次 spawn 必寫,殘值不可達);boomMs/boomDir/boomSpeed(spawn 必寫+讀取端 hazardKind/非 null 雙重守門);fxTrail(附著 emitter 需 destroy,recycleStar/starSteering 自管生命週期);敵人本體個體狀態 hp/state/elite/mini/frozenMs 等(enemies.spawn 全量逐鍵重建);inhalePull(overlaps 每幀先清再設);stage 平台鍵(靜態物件非池)。
  • 重新確認的池:shockwaves 承載 caramel(已入冊);meteors/embers 零 setData 互動旗標、shields 僅 orbitIndex(每次佈盾必寫)——均已改走 acquirePooled 統一守門防未來。
  • 邊界發現(既有債,不在本輪):prismix 鏡像殘影 sprite 帶 shadow 身分標記且與 shockwaves/shields 共群,理論上可能被池 .get 撿走造成殘影/彈體身分衝突——shadow 為專屬 sprite 身分非瞬時旗標,復位反會破壞再召喚語意,故刻意排除並建議列後續卡。

六取出點整合測試(池循環模式)

新增 boss.test.ts(jellord 追蹤彈)、noctra.test.ts(投彈)、syrona.test 池循環案(彈幕 tideDeflected/reflected+波柱 caramel);prismix 既有復用案擴 tideDeflected 斷言;player.test 新增 formSkills 星池污染復用案(tideDeflected/reflected/inhalable 歸位且 burn=spec 正確落);連同前輪 enemies-hazards/voidra/launchStar burn 案——八個取出點全數有會紅的整合網

應修 3:§119.2 文檔漂移已修(改為池取出必經 acquirePooled、旗標全集指向 poolFlags 條)。

rebase 與 002

rebase 至 b7cd80b6b#883 分階段載入後):六新怪鍵併入 assetPlan.ENEMY_TEXTURE_KEYS SSOT、PENDING_TEXTURE_KEYS 移駐 assetPlan(佔位鍵無資產檔,運行期生成回退,載入守門顯式豁免並留素材車回收路徑)、L21/L23 背景暫沿 bg-astral 別名。002 於 rebase 單一 commit 聚合:7 筆 reward(含本輪池衛生條目)、檔頭 +7|累計 +272(=main +265 + 7),ID 全檔唯一、歷史零刪除、驗算 a+b+c=7=新增條目數。

閘門

typecheck ✅/lint ✅/vitest 1018 ✅/verify-design-docs 121 章 ✅/pre-push(typecheck+test+build:ratewise)✅。遠端 head=216f06a28 已驗證。不自行合併,等最終複審。

@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from 216f06a to b9747c5 Compare July 26, 2026 13:46
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

第四輪(終審缺口)收斂 — head b9747c537

必修 1:shadow 池破口——「非池物件」前提確實錯了

承認查證錯誤:殘影經 shockwaves.addshields.add 雙掛池群組,Group.get 復用 inactive 時就會發出殘影本體。修法取最小侵入的「失效即離池」:prismix update 逐幀對帳——殘影 inactive 且仍在池內即自兩群組 removedoShadow 召喚時重新 add。選逐幀對帳而非逐失效點掛鉤,因為擊破發生在 overlaps(星彈 1 發即破),不是 prismix 可控的呼叫點;時序上 spawn 都發生在 update 的對帳之後,無同幀窗口。整合測試:驅動 FSM 至殘影入池 → 外部 disableBody(星彈語意)→ 斷言兩池均不含殘影、池內零 shadow 旗標 → 再召喚重新入池存活。突變實證:拿掉對帳塊 → 測試紅。

必修 2:排除清單逐條事實重查(驗證方式與結論)

  • hazardKind/lifeMs「每次 spawn 必寫」:確為 12 條分支各自自律——與 caramel 同模式。改參數化強制spawnHazard(x, y, hazardKind, lifeMs) 單點寫入,漏寫即型別錯誤;12 個 spawner 全數改接(typecheck 綠即證明)。
  • damage/pierce/flavor/mix:逐行核對 launchStar/launchShot 兩發射器每發皆寫 ✓ 成立。
  • boomMs/boomDir/boomSpeed:spawnHazard 與兩發射器每發歸位 boomMs ✓;boomDir/boomSpeed 僅在 boomMs 有效分支(hazards 另有 hazardKind==='boomerang')讀取,兩處讀取端逐一核對 ✓ 成立。
  • homingMs/orbitIndex:單一取出點內每發必寫(boss.ts:279、prismix shard 迴圈)✓ 成立。
  • fxTrailrecycleStar stop+清 undefined、兩發射器每發重新 attach ✓ 成立(附著物件需 destroy,不能布林覆寫)。
  • enemies.spawn 全量重建:逐鍵核對重建清單,發現 inhalePull 缺席——讀取端雖逐幀消費清除,但池復用個體在「玩家正吸入」的生成瞬間可殘留一幀錯誤拉力。已補進重建清單(第七個被撈出的殘留,量級一幀但照原則強制歸位)。
  • inhalePull 每幀先清再設:核對 overlaps 同一 wire 內先 if (!getData) continue; setData(false) 消費式清除 ✓ 讀取面成立(生成面如上補強)。
  • shadow:前提證偽,見必修 1;poolFlags.ts 盤點留檔已改寫為「每條附『為何現在為真+如何保持為真』」。

必修 3:守門升級 TS 型別層 AST 檢查+誠實化

regex 掃描整段撤換:poolFlags.test.ts 以 TypeScript compiler API 建 program(app tsconfig、src/game 生產碼),checker 判定 expression 型別 symbol 為 Group 的一切 get 存取——PropertyAccess(直呼/換行/改名/跨檔參數天然涵蓋,型別判定與寫法無關)、ElementAccess ['get']、ObjectBindingPattern 解構(含改名綁定)、Reflect.get(group, ...)。註解與字串在 AST 層天然零假陽性。覆蓋自證:內建虛擬 probe 檔案含 Grok 表列的七種寫法,斷言恰好 7 筆全抓、comment/string 零誤報——這條自證測試常駐,守門本身也有回歸網。宣稱已誠實化:poolFlags.ts 與設計文檔刪「結構上不可能」,改為「型別層守門+已知邊界(動態字串組鍵、any 斷言等蓄意規避不在涵蓋範圍)」。

必修 4:syrona.ts:312 測試修正+mutation 實證

新測試直入 P3(applyDamage 壓相位、期間零 update 使池保持空)——P3 招池僅 wave/overload 且只有 doWave 取 shockwaves,首發物件來源可證為 line 312;驗 caramel===true(doWave 執行證據)後污染 tideDeflected 回池,下一發 wave 復用斷言歸位。Sonnet 的第八點突變重演:line 312 改 raw get → 本測紅+型別守門紅(雙網)。

必修 5:PENDING 三條機械鎖

(1) PENDING ∩ ASSETS = ∅;(2) 每鍵必落已知回退集合(minion→ENEMY_TEXTURE_KEYS 色塊生成、hero→TRANSFORM_FORMS 素身著色);(3) 內容凍結為 §120 六怪+§119 四形態十鍵,擴充必須顯式過審。Grok 的突變重演(jelly 改 minion-jelly-GONE 入 PENDING)→ 凍結斷言紅。

002 與閘門

002 於單一聚合 commit 重算:8 筆 reward(含本輪條目)、檔頭 +8|累計 +273(=main +265 + 8),ID 全檔唯一、歷史零刪除、a+b+c=8=新增條目數。typecheck ✅/lint ✅/vitest 1024 ✅/verify-design-docs ✅/pre-push ✅;遠端 head=b9747c537 已驗證。不自行合併,等複審。

@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from b9747c5 to f61aae0 Compare July 26, 2026 14:57
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

第五輪(同幀競態)收斂 — head f61aae027

Blocking:雙閘修法與可重放實證

承認前提錯誤:「spawn 都在對帳之後」只對 delay() 內的 shockwaves 成立,spawnShardOrbitrunCommand 同步棧內取 shields。依指示落雙閘

  1. 對帳前移fsm.tick/runCommand 之前(含 Grok 指出的關鍵:不前移的話殘影被取走 enableBody!active 條件永久失效)。
  2. spawnShardOrbit 第二閘:取到 shadow===true 即強制移出兩池並重取一次。

整合測試(同幀棧序):初版對抗式節拍被自證無效(幀尾對帳會在 merge 前一幀清走殘影,突變不紅)——改採 Sonnet 的兩輪可重放腳本:同種子第一輪錄下 merge 精確 tick,第二輪重放至前一 tick 才擊破殘影(模擬 UPDATE 段 overlap 先行),走 merge tick 斷言殘影不在池、不進軌道、未被 enableBody 復活。突變矩陣:雙閘全拆 → 紅;A 閘獨撐 → 綠;B 閘獨撐 → 綠——窗口確實命中且兩閘各自有效。

必修 2:inhalePull

排除文案改為「讀取端逐幀消費+enemies.spawn 重建清單歸位」;補池復用回歸鎖(enemies.test:回池個體帶殘留 inhalePull → spawn 復用必 false)——Grok 的「拿掉 spawn 重置仍綠」缺釘已補。

必修 3:機制/慣例分級標示

盤點清單全部改標:**【機制】hazardKind/lifeMs(參數化型別)、四鍵 damage/pierce/flavor/mix(R5 升級:player.test 四鍵必寫回歸鎖,一般星+形態彈雙管線)、敵人本體池(spawn 重建+R5 回歸鎖)、inhalePull(如上)、shadow(雙閘+測);【慣例·無機械鎖】**boomMs/boomDir/boomSpeed、homingMs/orbitIndex、fxTrail——各附「何時需人工複查」。第八殘留候選(beamDir/aimX/aimY/tailMs)順手納入 spawn 重建清單並入回歸鎖,升為機制。

必修 4:AST 守門邊界

probe 補三種自然重構缺口並常駐記錄(斷言為「不入違規」的已知邊界,違規數固定 7——未來守門升級涵蓋任一種時此數字變動會強制更新邊界文件):型別斷言脫鉤(as any/as unknown as)、容器/寬介面中轉、wrapper 回傳收窄。存續假設已鎖:tsconfig include 以「檔數下限+systems/enemies.ts 在列」斷言、Group 符號名以 probe「直呼必抓」案自證(漂移先紅),註解同步記載。

應修 5:dieSequence 與段清均顯式 remove 殘影出兩池(不等下一幀對帳)。

002 與閘門

002 單一聚合 commit 重算:9 筆 reward、檔頭 +9|累計 +274(=main +265 + 9),ID 唯一、歷史零刪除、a+b+c=9。typecheck ✅/lint ✅/vitest 1027 ✅/verify-design-docs ✅/pre-push ✅;遠端 head=f61aae027 已驗證。不自行合併,等複審。

haotool and others added 6 commits July 27, 2026 00:03
- 開工活性錨:四新變身、新小怪、L21/L23 走動關
- worktree feat/starpuff-v21-w1-forms base main@11ca18696

測試:開工錨無程式變更,未執行測試

Co-authored-by: Cursor <cursoragent@cursor.com>
- TRANSFORM_FORMS 資料驅動擴七形態:焰化(焰彈/焰衝刺/熔岩爆,無防禦語彙)、
  潮化(水引/泡泡盾/霜滑翔/潮環撥開)、稜化(三向碎片/反射抵銷/鏡步/彩虹光束)、
  引力化(引力井/星體護衛 ×3/錨墜強化下砸);每形態語彙 ≤4 由測試守門
- 零新星味:drilly→焰、spora→潮、glowy→稜、boomy→引力映射既有味系;
  FORM_INTRO_LEVEL(21/23/25/27)解鎖閘以可觸及最高關派生,不動 save schema
- consumeTuck 泛化為護體共用計數(入殼/泡泡盾/星體護衛);SpMode 擴七形態徽章
- aura/變身環/護體視覺/偽星彈/空中機動抽 systems/formSkills.ts(player 1195 行);
  世界結算集中 starCombat.resolveTransformStrike 單點路由(GameScene 1200 行)
- 潮環撥開走 overlaps 投射物分流;HUD 徽章與 e2e transformEligible 同一解鎖裁決

測試:pnpm --filter @app/starpuff test(897 綠,含四新形態資格/語彙/護體 31 案)+typecheck+lint

Co-authored-by: Cursor <cursoragent@cursor.com>
- 貨櫃丁 cargo(重型 HP10、週期折返緩推、重鑽味=焰化供給)、票券蝠 ticketa
 (雙軌換軌俯掠 telegraph 600ms、擊殺發疾風靴加速票、疾風味)、掃描眼 scanna
 (鎖定 800ms 後直線光、不可吸——掩體/殼盾反制)
- 泡泡機 foamy(吐漂浮泡泡使玩家上浮、潮化免疫、孢子味)、冰史萊姆 frosty
 (冰面滑行、擊殺分裂兩迷你體、焰系 burn 熔解不分裂)、潮汐魟 manta
 (扇形三水刃 telegraph 650ms、孢子味)——潮系三怪=潮化供給
- FSM 純邏輯續寫 enemyFsm.ts;AI 呈現分檔 systems/finaleEnemies.ts(1200 行閘);
  掃描光/泡泡/水刃走既有 hazards 池;burn 貫通 damage/explodeStar 單一結算管線
- 圖鑑六新怪入鑑+四新形態技能頁;佔位立繪鍵 PENDING_TEXTURE_KEYS 凍結待素材車,
  CodexScene 缺圖回退 fx-star 剪影;v18 bot 可吸集合同步防漂移

測試:pnpm --filter @app/starpuff test(905 綠,含六新怪 FSM/telegraph/分裂 8 案)+typecheck+lint

Co-authored-by: Cursor <cursoragent@cursor.com>
- L21 星港集散地:十種混編(cargo/ticketa/scanna 亮相)+三精英+週期蒸氣閥;
  焰化教學——重鑽味雙供給(cargo 恆可吸+drilly)+中段練習區 3 隻貨櫃丁
- L23 冰晶潮灣:九種混編(foamy/frosty/manta 亮相)+三精英+潮汐×週期浮力柱;
  潮化教學——孢子味四供給+中段練習區 3 隻孢子菇(定點留駐)
- 三軸不倒掛:靜態總分 L19 9.0 → L21 9.2 → L23 9.3(接續 L20 9.2,量化工具驗算)
- 進程接線:LevelId 擴 21-30、zones 十區、save LEVEL_IDS 改由 LEVELS 派生、
  解鎖規則改「在編序前一關」(過渡跳號 L21→L23 自然銜接、W2 補 L22 自動收斂)
- all-clear 成就語意隨 LEVELS 收斂;SEO 分區對照過渡期僅列已有魔王文案分區

測試:pnpm --filter @app/starpuff test(908 綠,含供給密度/解鎖鏈/跳號銜接新案)+typecheck+lint

Co-authored-by: Cursor <cursoragent@cursor.com>
- level-audit 新增 --probe transform:形態引入關 mid bot 獵集同系味量測首次變身
  p50/p95(門檻 SSOT 入 AUDIT_THRESHOLDS 30s/60s;供給味反查 FORM_BY_FLAVOR)
- audit driver 走動關獵集策略:持鍵紀律(帶彈再按 B=發射會把集星射掉)、
  前方優先、精英旗標跳過(elite 同 kind 不可吸、死守即逾時);__sp.enemies 補 elite 欄
- 設計面取證修正:cargo 近域 aggro 900px(供給送上門)、練習區前移至首精英門前
 (開放跑道)、L21/L23 補 §67 中點 checkpoint(死亡不再全重置精英房)、
  L23 練習區孢子菇叢集(範圍拒止死亡坑)換泡泡機
- 終測:L21 首次變身 p50 8s/p95 30s、L23 p50 11s/p95 26.6s(零逾時);
  mid bot 通關率雙 100%(85s/84s、3-4.7 死/run、console 0 錯誤);
  靜態三軸 L19 9.0 → L21 9.0 → L23 9.2 接續 L20(9.2)不倒掛

測試:pnpm --filter @app/starpuff test(908 綠)+typecheck+lint+probe/標準量測各 ×8/×3

Co-authored-by: Cursor <cursoragent@cursor.com>
- GAME_DESIGN 回寫 §118 四新變身(形態總表/工程契約/觸發密度契約與實測)與
  §119 新小怪與 L21/L23 走動關(六怪表/佔位鍵/進程與量測),檔頭版本 v23
- 程式註解 §111/§112 撞號修正(既有編號已至 §117):全波觸及檔改號 §118/§119
 (base 零既有引用驗證後全域替換)
- minor changeset:四新變身/六新怪/L21/L23 為使用者可感知新功能

測試:pnpm --filter @app/starpuff test(908 綠)+typecheck+lint+prettier

Co-authored-by: Cursor <cursoragent@cursor.com>
@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from f61aae0 to 57301f5 Compare July 26, 2026 16:11
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

第六輪(收尾)— head 57301f5a3

Blocking:四鍵測試假信心已修+突變重跑

sentinel 修法並拆雙案:發射前對候選池物件把 damage/pierce/flavor/mix 全清為 undefined,斷言只能由本發寫入滿足——防池殘留的測試不再被池殘留騙過。突變重跑:刪 formSkills.launchShot 四鍵寫入 → 形態彈案;刪 player.launchStar 四鍵寫入 → 一般星案;還原全綠。poolFlags.ts 機制文案同步(標明 R6 sentinel 修法與雙側突變證據)。

三項應修

  • A 閘謂詞放寬為 if (shadow && !shadow.active) 直接雙池 remove,不依賴單池 contains(Grok 的非對稱情境涵蓋)。
  • 重複註解已刪一份。
  • §119 補同幀競態與雙閘語意主句,決策脈絡(機制/慣例分級、守門邊界)指回 core/poolFlags.ts 頂部註解為 SSOT,不再跨檔考古。

rebase 至 60d151992#857 素材接關(本輪新增範圍,說明理由)

#857 把 21-30 素材批併進了 main,其中四形態立繪與兩張專屬橫景鍵名與本 PR 完全對齊、六新怪素材以描述性命名交付(cargojelly/ticketbat/scannereye/bubbler/iceslime/tideray,與本 PR 六 kind 1:1)。#857 的接關契約寫明「認領條目由接入 PR 逐筆搬回 assets.ts 並標正確 phase」——本 PR 就是 LevelSpec/TRANSFORM_FORMS 的接入點,不接的話 PENDING 守門(∩ ASSETS = ∅)直接紅。已完成:

  • 12 筆認領條目搬回主 manifest(4 form/8 level),v21 暫時 lazy 契約四測全綠(bundle 預算守門不受影響)
  • ENEMY_TEXTURE_KEYS 六鍵改指素材命名、圖鑑同步;starport/tidebay 撤 astral 別名改用專屬橫景
  • PENDING_TEXTURE_KEYS 清空:anti-softlock 載入不變式對十二鍵轉為主動驗證,凍結測試改鎖空清單(新佔位鍵入列仍須顯式過審)

002 與閘門

002 單一聚合 commit 重算:10 筆 reward(第 10 筆含四鍵假信心修正+素材接關)、檔頭 +10|累計 +296(=main +286 + 10),ID 唯一、歷史零刪除、a+b+c=10。typecheck ✅/lint ✅/vitest 1034 ✅/verify-design-docs ✅/pre-push ✅;遠端 head=57301f5a3 已驗證。不自行合併,等最終確認。

@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from 57301f5 to b9676fe Compare July 26, 2026 17:49
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

第七輪(破圖收尾)— head b9676fe84

Blocking:變身破圖雙修+截圖實證

根修比審查席建議的單行更深一層:player sprite 的 scale 由 visualScale 每幀以註冊基準覆寫,只補 setDisplaySize 會在下一幀 POST_UPDATE 被沖回——落 wearTexture 統一換裝入口(setTexturesetDisplaySize(48,48)vscale.rebase 成對),三個換圖點(形態穿戴/姿勢切換/finishTransform 直寫)全數改接。回歸鎖:測試替身模擬源尺寸(768/1254),斷言「顯示像素恆為 48」於焰化/潮化/返回姿勢三路徑——寫測過程順帶抓到 finishTransform 的第四個直寫點(測試先紅後綠)。
截圖驗證(真實遊玩、bot 變身瞬間取證):screenshots/r7-ember-transform.png(焰化 48px,與周邊小怪同級)、screenshots/r7-tide-transform.png(潮化同)、screenshots/r7-ember-BROKEN-before-fix.png(修復前對照:焰化體明顯 1.5 倍)。hitbox 對齊由「顯示 px=生成時錨定的 PLAYER_SIZE」單測釘住。稜化/引力化在編序至 L23 前無法實戰穿戴,由同一單一路徑+1254 源測試案覆蓋。

必修:素材尺寸機械鎖

assetPlan.test 新增零依賴 WebP 標頭解析(VP8X/VP8/VP8L 三型),掃主 manifest+v21 三個分檔的 hero 主立繪:一律 512×512;四張已知債務例外精確釘住現尺寸(再漂移也紅),素材重新輸出對齊後自例外表移除。W2/W3 產線再交超尺寸 hero 立繪即刻紅。

應修:L1 進場回基線

形態立繪依 FORM_INTRO_LEVEL 逐關載入(formTextureKeysForLevel):L1–L20 不再載四張新立繪。量測:四檔合計 292.586 KiB,與審查席量到的 +292.6 KiB 精確吻合——L1 進場計畫已卸下全部增量、回到 #883 基線(新增測試釘住 L1 不含/L21 起含焰化/L23 起含潮化/既有三形態恆載)。稜化/引力化立繪因 W1 無關卡認領,照 #857 契約退回 lazy 分檔(W3 L25/L27 入編時翻紅提醒)。

應修:bot 數字重跑(如實記載)

重跑結果證實審查席觀察:L21 兩輪(8 trials each)=零逾時 p50 9/p95 36.1、1 逾時 p50 5.8/p95 47.4;L23 一輪=1 逾時 p50 10.4/p95 64.5(略超門檻 60s)。差異來源=獵集單尾拖尾的輪間變異,我當初的「零逾時」是單輪樣本的倖存數字。§119.3 已改為多輪分佈記載並明文「單輪數字不可作驗收憑據」;p50 穩定達標,逾時/拖尾不構成 anti-softlock 破口(§26 不變式不依賴變身)。

W2 前置拆分評估(依要求回報,本輪未動)

  • player.ts1200/1200(零餘裕)——本輪 wearTexture +14 行以壓縮三段冗長註解對沖。W2 開工前必須先拆:建議抽星彈發射/回收管線(launchStar/recycleStar/散射,估 -140 行)成 systems/starLauncher.ts,或抽吸入判定區塊(估 -80 行)。
  • GameScene.ts1180/1200——W2 兩魔王接線估 +40~60 行必爆閘。建議抽 GameEvents 綁定區(估 -110 行)成 systems/sceneBindings.ts
  • 兩項都屬機械搬移(單元測試已覆蓋行為),建議列 W2 第一張卡,先拆再加內容。

002 與閘門

002 單一聚合 commit:11 筆 reward、檔頭 +11|累計 +297(=main +286 + 11),ID 唯一、零刪除、a+b+c=11。typecheck ✅/lint ✅/vitest 1038 ✅/verify-design-docs ✅/pre-push ✅;遠端 head=b9676fe84 已驗證。不自行合併,等最終確認。

haotool and others added 6 commits July 27, 2026 02:35
- 潮引改可吸目標只拉不傷:HP1 供給怪不再被先傷即殺而拉近失效(不可吸維持輕傷+未死拉近)
- 潮環撥開收窄為投射物白名單(spike/reflect/boomerang/sugarblob/waterblade),區域拒止/近戰/光束照常結算
- launchStar 池重用重設 burn=false,杜絕焰彈殘留標記洩漏到一般星彈
- 三缺陷各補紅→綠回歸測試;002 改單一 commit 聚合落盤(+6,累計 +266)
- 設計章節照 T7-C 拆檔重落 §119/§120/§121(02/03/04 主題檔+索引對照表與程式註解改號)

測試:vitest 976 綠、typecheck/lint/verify-design-docs 綠;L21/L23 mid×3 通關 100%、probe 零逾時

Co-authored-by: Cursor <cursoragent@cursor.com>
- 新增 core/poolFlags.ts:hazards/五魔王彈幕/星彈全部池取出點必經 resetTransientFlags 單點復位
- 根治 burn/tideDeflected/reflected/inhalable 四度重演的池回收殘留族缺陷(voidra/syrona 原全未清)
- 潮引只拉不傷判準改 TIDE_PULL.pullOnlyKinds 供給味清單(isInhalable 過寬),零傷命中補碎光確認
- 稜化反射抵銷改折射銷毀不回傷(與殼化反彈語彙區辨),反彈 tint 改走形態 SSOT
- 泡泡上浮免疫改顯式 bubbleImmune 欄位;撥開白名單測試補 bite/sugarspot/comettail
- 池循環(撥開→回收→再命中)/潮引清單/稜化/泡泡各補紅→綠回歸測試,設計文檔 §119 邊界語意同步

測試:typecheck/lint/verify-design-docs 綠、vitest 983 綠;紅燈實證 6 案(池循環 2、潮引 2、稜化與泡泡 2)

Co-authored-by: Cursor <cursoragent@cursor.com>
- 新增 acquirePooled:池取出+瞬時旗標復位一體化,全部取出點(hazards/五魔王彈幕與波柱/星彈/隕石/護衛)改接
- poolFlags 測試加原始碼靜態守門:raw pool .get 直呼即紅——「新增取出點」維度的遺漏結構性不可能
- caramel 入 POOL_TRANSIENT_FLAGS(syrona 糖漿波第五例同族洩漏);一次性旗標全量盤點與排除理由留檔 poolFlags.ts
- 補齊 jellord/noctra/syrona 池循環整合測試(含 caramel 波柱復用)、prismix 擴 tideDeflected、formSkills 星池污染復用案
- rebase 至 b7cd80b:六新怪鍵併入 assetPlan SSOT、佔位鍵載入豁免(PENDING 移駐 assetPlan)、新關背景暫沿 bg-astral
- 002 於 rebase 單一 commit 聚合重算(+7,累計 272=265+7);§119 文檔同步 acquirePooled 語意

測試:typecheck/lint/verify-design-docs 綠、vitest 1018 綠;突變實證 raw .get 回退被靜態守門+池循環雙網抓紅

Co-authored-by: Cursor <cursoragent@cursor.com>
- 殘影失效即離池:prismix 逐幀對帳自兩池移除 inactive 殘影、召喚時重新入池——第六例池殘留破口根治+整合測試
- 守門升級 TS 型別層 AST 檢查:Group 型別 get 存取(直呼/解構/中括號/換行/改名/Reflect)全涵蓋並自證
- 「結構上不可能」超售宣稱改為誠實邊界描述(動態規避不在涵蓋範圍)
- 排除清單逐條重查:spawnHazard 參數化強制 hazardKind/lifeMs、spawn 補 inhalePull 歸位、shadow 前提證偽改對帳
- syrona doWave 補 P3 專屬池循環測試(P3 招池僅 wave 取 shockwaves,來源可證)
- PENDING 三條機械鎖:與 ASSETS 互斥、必落已知回退集合、內容凍結十鍵顯式過審

測試:typecheck/lint/verify-design-docs 綠、vitest 1024 綠;突變三組全紅(殘影對帳、doWave raw get、PENDING 濫用)

Co-authored-by: Cursor <cursoragent@cursor.com>
- 殘影離池對帳前移至 fsm.tick 之前+spawnShardOrbit 取出第二閘(取到殘影即離池重取)
- 同幀競態測試改兩輪可重放腳本:錄 merge 精確 tick、重放至前一刻擊破殘影——雙拆紅、單閘各自綠
- inhalePull 排除文案改「幀內消費+spawn 重建歸位」並補池復用回歸鎖(Grok mutation 缺釘)
- 排除清單改機制/慣例分級標示;四鍵必寫升級為測試機制、spawn 補清品種限定欄位
- AST 守門 probe 補三種自然重構缺口(斷言脫鉤/容器中轉/wrapper 收窄)為已知邊界
- 守門存續假設(tsconfig include、Group 符號名)以檔案在列斷言與 probe 直呼案鎖住
- die/段清顯式移殘影出兩池(不等下一幀對帳)

測試:typecheck/lint/verify-design-docs 綠、vitest 1027 綠;競態突變雙拆紅、A/B 單閘獨撐各綠

Co-authored-by: Cursor <cursoragent@cursor.com>
- 四鍵必寫測試改 sentinel 修法:發射前對復用池物件清空四鍵,斷言不再被上一發殘值頂替
- 拆為 launchStar/launchShot 兩案,雙側突變重跑各自紅(Grok 揭露的假信心已封)
- poolFlags 機制文案同步 R6 修法;A 閘謂詞放寬為不依賴單池 contains
- prismix 重複註解刪除;§119 補同幀競態與雙閘語意、決策脈絡指回 poolFlags SSOT

測試:vitest 1028 綠、typecheck/lint/verify-design-docs 綠;四鍵雙側突變紅、還原綠

Co-authored-by: Cursor <cursoragent@cursor.com>
haotool and others added 3 commits July 27, 2026 02:35
- 四形態立繪(form)/六新怪立繪(level)/starport、tidebay 專屬橫景(level)自 assetsV21Part1 逐筆搬回 assets.ts
- ENEMY_TEXTURE_KEYS 六鍵改指素材命名(cargojelly/ticketbat/scannereye/bubbler/iceslime/tideray)
- 移除 starport/tidebay 的 astral 橫景別名;圖鑑 textureKey 同步改指
- PENDING_TEXTURE_KEYS 清空納回載入計畫:anti-softlock 守門對十二鍵轉為主動驗證,凍結測試改鎖空清單
- 遵循 #857 接關契約(認領條目搬回而非就地改 phase),v21 暫時 lazy 契約四測全綠

測試:vitest 1034 綠、typecheck/lint/verify-design-docs 綠;assetPlan 載入不變式與 v21 契約守門全數通過

Co-authored-by: Cursor <cursoragent@cursor.com>
- wearTexture 統一換裝入口:換圖必重算 displaySize 並回寫 vscale 基準(含 finishTransform 直寫點)
- 修四新形態源尺寸不一致(768/1254 對 512 基準)的變身暴增與 hitbox 脫鉤,附修復前後截圖對照
- 破圖回歸鎖:測試替身模擬源尺寸,斷言顯示像素恆為 48(焰化/潮化/返回姿勢三路徑)
- hero 立繪 512 尺寸機械鎖:零依賴 WebP 標頭解析掃主 manifest 與 v21 分檔,債務例外精確釘住
- 形態立繪依 FORM_INTRO_LEVEL 逐關載入:L1 進場卸下 292.6KiB(四檔合計與審查量測精確吻合)
- 稜化/引力化立繪退回 lazy 分檔(W1 無關卡認領);§119.3 密度數字改多輪分佈如實記載

測試:vitest 1038 綠、typecheck/lint/verify-design-docs 綠;破圖突變截圖實證與 512 守門落檔

Co-authored-by: Cursor <cursoragent@cursor.com>
- fitHurtbox 併入 wearTexture:換裝以當下 frame 尺寸現算 setSize/setOffset,世界判定箱恆 36×38.4
- 修變身後 hurtbox 縮水 33%~59%(updateBounds 以凍結 sourceWidth×新 scale 重算)的隱性玩法優勢
- 回歸鎖補 body.width/height 維度:測試替身模擬 updateBounds 語意,三形態路徑全斷言(突變紅)
- 星彈發射/回收管線抽離 systems/starLauncher.ts:player.ts 1200→1133 行(釋出 67 行餘裕)
- 介面形狀不變,1038 案黑箱回歸網直接驗證;共用視覺常數(拖尾/自旋)單一定義匯出
- 四鍵斷言升級毒值+具體期望值(?? fallback 頂替即紅);尺寸債務表補追蹤 issue #894

測試:vitest 1038 綠、typecheck/lint/verify-design-docs 綠;hitbox 突變紅、還原綠

Co-authored-by: Cursor <cursoragent@cursor.com>
@s123104
s123104 force-pushed the feat/starpuff-v21-w1-forms branch from b9676fe to fe85aa0 Compare July 26, 2026 18:38
@s123104

s123104 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

第八輪(hitbox 半修收尾)— head fe85aa062

Blocking:hurtbox 隨源解析度縮水已根修

fitHurtbox() 併入 wearTexture:換裝時以當下 frame.realWidth/realHeight 現算 setSize/setOffset——bodyWidth = frameW×0.75 × (48/frameW) = 36 恆為常數,與源尺寸解耦(Sonnet 表列的 24/14.7 縮水路徑全數關閉,四形態同一單一路徑)。
回歸鎖補上 body 維度:測試替身補 Body.updateBounds 語意(世界尺寸 = sourceWidth×scaleX),焰化(768)/潮化(1254)/返回姿勢三路徑全部斷言 body.width/height 恆 36×38.4——1038 案原先零覆蓋的維度已釘住。突變實證:拿掉 wearTexture 內的 fitHurtbox() → 兩案紅;還原全綠。

starLauncher.ts 抽離(與修法綁定完成)

launchStarrecycleStarsteerBoomerangStars/出視野回收抽離成 systems/starLauncher.ts(121 行):facing/砲口座標依 Sonnet 評估以存取器注入,彈匣狀態與發射節奏(fireStar)留 player,stars 群組所有權不動(formSkills 共用池不受影響);共用視覺常數(拖尾壽命/自旋角速度)單一定義自新模組匯出。行數:player.ts 1200 → 1133(釋出 67 行餘裕,hitbox 修法 +9 行已含)。PlayerHandle 介面形狀不變,1038 案黑箱回歸網直接通過。

兩項應修

GameScene 拆分評估更新(採納 Sonnet 更正)

撤回「機械搬移 −110 行」的評估。實況:bindEvents 讀寫 15+ 個 private 欄位/方法,搬出類別即編譯失敗,二選一都是真實設計工作——弱化封裝(不可取)或設計窄接口顯式暴露能力。且 GameScene.ts 零 vitest 單測,唯一回歸網是 e2e 與 bot。建議 W2 排程:列「需要介面設計」的正式子任務,前置先補關鍵事件路徑煙霧測試(SKILL_TRANSFORM_STRIKE 路由、ENEMY_KILLED 加速票、存檔/成就頒發三條),工時按設計任務估非重構估。player.ts 側則已由本輪 starLauncher 抽離解除 1200 行封鎖(餘裕 67 行,W2 若再增形態邏輯建議續抽吸入判定區塊)。

002 與閘門

002 單一聚合 commit:12 筆 reward、檔頭 +12|累計 +298(=main +286 + 12),ID 唯一、零刪除、a+b+c=12。typecheck ✅/lint ✅/vitest 1038 ✅/verify-design-docs ✅/pre-push ✅;遠端 head=fe85aa062 已驗證。不自行合併,等最終確認。

haotool and others added 3 commits July 27, 2026 04:00
- 第九輪收斂開工:處理 Grok MEDIUM——變身尺寸測試替身需真正驅動幀鉤,使移除 rebase 必紅

測試:本 commit 無程式碼變更,未執行測試

Co-authored-by: Cursor <cursoragent@cursor.com>
- makeHarness scene.events 改真實 on/off 記錄,frame.preUpdate/postUpdate 依註冊序驅動幀鉤
- 變身換裝測試補跨幀斷言:PRE_UPDATE 基準還原後(物理讀取點)顯示 px 與世界判定箱恆定
- 替身補 sprite.scene 活體標記與 chainable texture/setTexture,POST_UPDATE 剪影鏡像全程可駛
- mutation 實證:移除 rebase 紅(72/117.56 vs 48)、移除 fitHurtbox 紅(24/14.7 vs 36),還原全綠
- 002 補第九輪條目與檔頭聚合值(+1,累計 +299)

測試:pnpm --filter @app/starpuff test 1038 綠;pnpm typecheck、pnpm lint 綠

Co-authored-by: Cursor <cursoragent@cursor.com>
- squash 前把檔頭記分行從上一 002 commit 增量改為 PR 聚合口徑(+13=reward 13)
- 複驗:origin/main...HEAD 新增 13 條 reward、main 累計 +286,286+13=299 與現值一致
- 歷史條目零刪除零改寫;#829#866 同型錯誤不再重演

測試:git diff origin/main...HEAD 條目分解複驗與檔頭總分驗算

Co-authored-by: Cursor <cursoragent@cursor.com>
@s123104
s123104 merged commit 7d95361 into main Jul 26, 2026
16 checks passed
@s123104
s123104 deleted the feat/starpuff-v21-w1-forms branch July 26, 2026 21:45
s123104 pushed a commit that referenced this pull request Jul 26, 2026
- 收斂 AGT-LOG-03 單一 002 commit:檔頭反映 PR 對 main 的聚合淨變化
- 34 筆條目 = 守門移植攻防+審查收斂+#857 事故+收斂輪強化+複審補洞
- rebase 至 #886 後的 main:雙方條目時間序全保留零刪除,基準累計 299
- 檔頭聚合:+20(reward 26、penalty 6、neutral 2)|累計 +319(299+20)

測試:verify-002-log.mjs pre-commit 語意與 --base-ref origin/main CI 語意皆 exit 0

Co-authored-by: Cursor <cursoragent@cursor.com>
s123104 pushed a commit that referenced this pull request Jul 27, 2026
- 記錄 GameScene strangler 拆分結果:GameScene 降至 875 行
- 記分 +1(reward 1),累計總分 +325

測試:node scripts/verify-002-log.mjs --base-ref origin/main 通過

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant