Skip to content

highway: persistent "you missed this last time" gem markers - #69

Open
ahonnecke wants to merge 1 commit into
got-feedBack:mainfrom
ahonnecke:persistent-miss-markers
Open

highway: persistent "you missed this last time" gem markers#69
ahonnecke wants to merge 1 commit into
got-feedBack:mainfrom
ahonnecke:persistent-miss-markers

Conversation

@ahonnecke

@ahonnecke ahonnecke commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Problem

A miss only lights the gem for NOTE_MISS_GEM_TTL (~0.6s) after the verdict lands — a sub-second wash a player can't act on mid-performance, and one that never appears on the note that actually matters: the one you're about to replay. In practice, misses are effectively invisible.

Change

Cross-play persistence, so a missed note lights up as it approaches on the next play/loop, until you hit it — the readable, retrospective signal.

  • _prevPlayMisses {filename, keys} — the notes missed on the last completed play, kept across the per-play noteResults reset, filename-gated so song A's misses never show on song B.
  • _ndSnapshotPlayMisses() — captured in showSummary() at play end (noteResults intact, filename still this song), guarded so a false-start doesn't wipe the prior marks while a clean play correctly clears them.
  • noteStateFor() checks it before the transient logic: an un-hit prev-play miss returns {state:'miss', alpha:1, color} and stays lit the whole way down until it's hit again this play (self-clears when j.hit flips). Drives both the 2D and 3D renderers via the note-state provider; not suppressed during drills.
  • Miss color is purple (#c04bff), not red — red collides with the E string's own color (#ff3c3c) and made a missed E unreadable.

The pre-existing real-time transient miss render is untouched.

Notes

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Missed notes now remain marked in purple on the next play of the same song until successfully hit.
    • Missed-note tracking persists through scoring resets, false starts, and zero-judgment passes.
  • Bug Fixes
    • Improved consistency of missed-note indicators and their persistence when reviewing play results.
  • Chores
    • Updated the application and plugin version to 1.32.1.

Today a miss only lights the gem for NOTE_MISS_GEM_TTL (~0.6s) after the
verdict — a sub-second wash a player can't act on mid-performance, and one that
never shows on the note that matters (the one you're about to replay). This
adds cross-play persistence so a missed note lights up as it APPROACHES on the
next play/loop, until you hit it — the readable, retrospective signal.

- _prevPlayMisses {filename, keys}: the notes missed on the last completed play,
  kept across the per-play noteResults reset, filename-gated so song A's misses
  never show on song B.
- _ndSnapshotPlayMisses(): captured in showSummary() at play end (noteResults
  intact, filename still this song), guarded so a false-start doesn't wipe the
  prior marks while a clean play correctly clears them.
- noteStateFor() checks it BEFORE the transient logic: an un-hit prev-play miss
  returns {state:'miss', alpha:1, color} and STAYS lit the whole way down until
  it's hit again this play (self-clears when j.hit flips). Drives both the 2D
  and 3D renderers via the note-state provider; not suppressed during drills.
- Miss color is PURPLE (#c04bff), not red — red collides with the E string's
  own color (#ff3c3c) and made a missed E unreadable. (Best paired with the
  core PR that makes the miss gem honor the provider color; without it the
  markers still persist, just in the core default hue.)

The pre-existing real-time transient miss is untouched. make test 353/353.
Version 1.32.0 → 1.32.1.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 397c2987-4651-44f7-acac-0a333c2d3788

📥 Commits

Reviewing files that changed from the base of the PR and between 412433d and f11c9e9.

📒 Files selected for processing (3)
  • package.json
  • plugin.json
  • screen.js

📝 Walkthrough

Walkthrough

The diagnostic screen now preserves missed notes from the last judged play and marks them in purple during the next play for the same song. Package, plugin manifest, and diagnostic versions are updated to 1.32.1.

Changes

Persistent missed-note tracking

Layer / File(s) Summary
Miss snapshot and rendering
screen.js
Completed-play misses are stored by filename before scoring resets. Previous misses render as purple markers during the next play and clear when hit. Transient miss indicators also use purple.
Release version alignment
package.json, plugin.json, screen.js
Package, plugin manifest, and diagnostic build versions change from 1.32.0 to 1.32.1.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: byrongamatos, chrisbewithyou

Sequence Diagram(s)

sequenceDiagram
  participant PlayScoring
  participant MissSnapshotStorage
  participant MissedNoteRenderer
  PlayScoring->>MissSnapshotStorage: snapshot completed-play misses
  MissSnapshotStorage->>MissedNoteRenderer: provide same-song missed-note keys
  MissedNoteRenderer->>PlayScoring: clear a persistent mark when the note is hit
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: persistent gem markers for notes missed during the previous play.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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