Context
From the BMS spec-compliance audit and the wave-3 LR2 research. The current implementation does not count empty POORs (空POOR) into summary.poor — that slot is reserved for missed POORs — and does not break combo (documented in docs/player-spec.md, "Blank keystroke" section).
Open question
Whether real LR2 adds empty POORs to the result-screen POOR count (and BP):
- The wave-3 research found this to be the prevailing community understanding, with circumstantial evidence (LR2 shows no separate empty-POOR stat; beatoraja-migration writeups list "can see empty-POOR separately" as a beatoraja advantage), but no explicit first-party source.
- lr2oraja's LR2-compat judge property confirms the gauge side (-2 via the miss slot) and the no-combo-break behavior, but not the result-tally behavior.
Action
Verify against real LR2 (a recorded result screen comparison with counted key presses would settle it). If LR2 does count them:
- add empty POORs to the result POOR tally in
packages/player/src/core/engine.ts (the EMPTY_POOR branch currently skips applyJudgeToSummary),
- keep combo / EX-score untouched,
- update
docs/player-spec.md / .ja.md and the engine tests that pin the current behavior.
Context
From the BMS spec-compliance audit and the wave-3 LR2 research. The current implementation does not count empty POORs (空POOR) into
summary.poor— that slot is reserved for missed POORs — and does not break combo (documented indocs/player-spec.md, "Blank keystroke" section).Open question
Whether real LR2 adds empty POORs to the result-screen POOR count (and BP):
Action
Verify against real LR2 (a recorded result screen comparison with counted key presses would settle it). If LR2 does count them:
packages/player/src/core/engine.ts(theEMPTY_POORbranch currently skipsapplyJudgeToSummary),docs/player-spec.md/.ja.mdand the engine tests that pin the current behavior.