feat(editor): feel-vs-tempo marker — half/double-time is a FEEL (P2-8) - #278
Merged
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (12)
📝 WalkthroughWalkthroughAdds a new FEEL tempo-mark type for half-time, straight, and double-time interpretation without changing the grid. FEEL marks are editable through Tempo Map and Scan controls, affect metronome accents and Map Health scoring, and render as authored ruler markers. ChangesFEEL tempo-map workflow
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Editor
participant TempoMarks
participant Metronome
participant MapHealth
Editor->>TempoMarks: set or toggle FEEL mark
TempoMarks->>Metronome: expose live feel ranges
TempoMarks->>MapHealth: expose live feel ranges
Metronome->>Editor: generate felt accent clicks
MapHealth->>Editor: classify feel-aware coverage
Possibly related PRs
Suggested reviewers: ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
The cross-pedagogy convergence all four instrument seats named: a
half-time chorus / double-time bridge is a pulse-tier change over a
CONSTANT tempo, never a 2x tempo change.
- tempo-marks.js: 'feel' kind (ratio in the closed {0.5, 1, 2}
vocabulary; applies from its measure until the next feel mark, the
time_signatures rule), _feelRangesPure/_feelAtPure timeline pures,
editorSetFeelFromBar verb (toggle semantics; TempoMarkCmd — no beat
ever moves).
- Metronome: half-time accents every OTHER beat (the pulse a drummer
references); plain-data feelRanges param keeps the sliced env clean.
- Map Health: under half-time feel only FELT beats are expected — a
genuinely sparser section reads green coverage of its felt pulse,
not 'missing onsets' grey.
- Scan's 2:1 resolution: the confirm bar's DEFAULT is now the feel
marker (teal 'Half-time feel' button, grid untouched); the #269 grid
octave-rescue becomes the explicit override ('Actually 2x tempo').
- Chips: green feel chips in the marker lane; context-menu feel trio
with active-checkmarks.
- routes.py: 'feel' joins the persistence vocabulary (closed-ratio
validation; same absent/empty/garbage contract).
tests/feel_marker.test.mjs (6 cases, fails on main): vocabulary
validation, timeline stepping, no-beat-moves + exact round-trip, felt
click accents, Map Health grey-to-green, and the Scan default (feel
mark placed, grid byte-identical). Backend feel round-trip in pytest.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EBQCHCNA81E9tHmSDHSe2Q
byrongamatos
force-pushed
the
feat/editor-feel-marker
branch
from
July 15, 2026 20:32
19656c4 to
6e1e489
Compare
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.
What
P2-8 — half/double-time is a FEEL, never a fake tempo change. The convergence every instrument seat named as a requirement: a half-time chorus is a pulse-tier change over a constant tempo, and reading it as an octave tempo jump was a top mapping failure mode.
feelmarker (ratio ∈ {½, 1, 2}, applies from its bar until the next feel mark — thetime_signaturesrule). Right-click a barline: Half-time feel / Double-time feel / Straight time from here. No beat ever moves — it's aTempoMarkCmdmetadata edit with exact undo.feeljoins the backend persistence vocabulary (closed-ratio validation, same absent/empty/garbage contract as feat(editor): authored marks I — hold/fermata bars, meter groupings, provenance (P2-5) #276).DAW divergence (documented)
DAWs have no "feel" concept — a half-time section is either a real tempo change or nothing. Modeling feel as a first-class marker distinct from tempo is a practice-tool choice: the grid stays steady for scoring/detection while the intended pulse is recorded and taught.
Testing
tests/feel_marker.test.mjs(6 cases, fails on main): the closed ratio vocabulary, timeline stepping, no-beat-moves + exact round-trip (array identity pinned), felt click accents vs straight, Map Health grey→green on a half-time fixture, and the Scan default (feel mark placed, grid byte-identical, one undo restores). Backend feel round-trip added totest_tempo_marks.py. Full suites green: 161 files / 0 fail, pytest 262, lint at baseline.🤖 Generated with Claude Code
https://claude.ai/code/session_01EBQCHCNA81E9tHmSDHSe2Q
Summary by CodeRabbit
New Features
Bug Fixes