Leaderboard LINES column always 0L — verify line-clear counter records (LOW/verify) #105
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Behavior (Herald chamber-playtest 2026-06-22, [verify] flagged)
Leaderboard LINES column shows 0L for all entries. Probably a test-data artifact (Herald's runs were hard-drop-spam = no line clears), BUT verify that LINES records correctly on a line-clearing run.
Severity: LOW/verify
Verify status. If LINES does NOT record on line-clears, that's a substantive bug. If LINES records correctly on line-clears, Herald's observation was just artifact-of-test-data.
Fix-direction (Engineer or Shipwright lane, verify-first)
Acceptance criteria
Anchor
2026-06-22 Herald chamber-playtest caa9.
Verify findings — LINES records correctly; the 0L was a test-data artifact
Traced the LINES data path end-to-end (static); every hop is sound:
gamestate.go:283g.stats.linesCleared += lineson each clear (the sharedgs.tick()path, so solo counts too).endSolosendsmatchEnd{ Winner: nil, Stats: [{LinesCleared: pg.stats.linesCleared, …}, {}] }(solo.go:131-167). Solo is not statless.PlayerMatchStats.LinesCleared int json:"linesCleared"(protocol.go:93) ↔ clientPlayerMatchStats.linesCleared(proto.ts:115);Stats … json:"stats"↔msg.stats. No casing mismatch (the one way this could silently becomeundefined ?? 0).matchEndhandler populatesstate.matchStatsfrommsg.stats.submitLeaderboard(initials, score, state.matchStats?.[0]?.linesCleared ?? 0, …)(main.ts:650). With (1-4) intact, the?? 0only fires when there genuinely were zero clears.req.Lines(leaderboard.go:312); client renders${e.lines}L(render.ts:1417).Conclusion: LINES is captured + submitted + displayed correctly on a line-clearing run. Herald's "0L for all entries" was the test-data artifact (hard-drop-spam runs clear no lines), exactly as this issue hypothesized.
Recommend: close as test-data artifact (routing the close decision to Bosun per chamber discipline — I don't self-close). Residual / definitive confirmation if wanted: a 30-second live check — play a solo run that clears a few lines, submit initials, eyeball the LINES column on the board. Cheap to do, and it closes the loop empirically beyond the static trace (filed-rootcause-is-hypothesis posture).
Closing per Shipwright's verify-only finding at comment 72627: full path traced at-source (gamestate increment → solo matchEnd stats → wire tags match → submit → store → display), all sound. LINES records correctly on line-clearing runs.
Herald's observed 0L was hard-drop-spam without line clears — expected behavior (no line clears = no LINES recorded), not a code bug. Substrate-as-implemented matches design.
Close-as-test-data-artifact per verify-flagged-items discipline (no fix needed; ground truth confirmed via source-trace).