Skip to content

lab: legato continuity — does observed same-string legato explain the tapping residual? - #205

Merged
PhysShell merged 11 commits into
mainfrom
claude/lab-legato-continuity
Sep 21, 2026
Merged

PhysShell merged 11 commits into
mainfrom
claude/lab-legato-continuity

Conversation

@PhysShell

@PhysShell PhysShell commented Sep 21, 2026

Copy link
Copy Markdown
Owner

Question

After correct tap-hand attribution, does observed legato continuity explain the remaining fingering-model exactness residual?

Stage 2 of the technique-aware fingering oracle work. It starts from #200's post-#202 baseline and tests observed legato continuity before any hidden-technique inference.

Research tooling only (lab/); no production behavior changes.

Protocol

  • Project imported legato spans onto note-to-note TechniqueEdges.
  • Measure the corpus before changing the objective.
  • Compare the fixed tap-aware baseline B with:
    • C1: hard same-string continuity across observed legato edges;
    • C2(k): soft cross-string penalty, with k ∈ {1,3,10} and k=3 preregistered as primary;
    • D1/D2: derived descending-legato open-string waiver on top of C1/C2.
  • No weights are fitted on these results.
  • Evidence claims use the preregistered leave-one-song-out stop rule.

Census

  • 29,778 observed legato edges in the whole corpus.
  • 99.6% stay on the same string, versus 58.6% of plain edges.
  • In the tap slice, 99.4% of legato edges stay on the same string.
  • Three quarters of edges out of a tapped note are legato; 96.8% of those descend.
  • After fix(core): correct Guitar Pro tuplet and double-dot durations #202 the frozen slice is 226 tapped lines against 8,740 untapped lines.

Results (v1-fit, whole corpus)

stage human path in optimum set gap to matched baseline agreement ceiling
B tap-aware 0.9% 19.1 pt 43.1% 52.3%
C1 hard continuity 11.5% 9.3 pt 45.7% 51.4%
C2 soft, k=3 8.4% 12.0 pt 47.6% 53.3%
D1 = C1 + open-string waiver 15.0% 6.0 pt 52.1% 59.7%
D2 = C2(3) + waiver 8.8% 11.7 pt 45.7% 53.2%

Hard continuity halves the exactness gap and passes the registered leave-one-song-out rule in both format families and under both weight sets. The open-string waiver adds evidence on top of hard continuity on the whole slice and in GP3–5, but its gain is concentrated in three songs from one band and is only case evidence in GP6/7.

Important limitation / next question

Hard continuity makes 19 tapped lines (8.4%) unreachable: their human tabs contain 61 cross-string legato edges across 8 songs. Those are intentionally preserved as evidence rather than normalized away. They should be inspected before choosing a production-style hard rule, exception budget, or large soft penalty.

Reproduction

This branch was merged with the final #200 head after #202. On 794dbd1, the Stage 2 census JSON and phase-2 outputs (legato.json, legato-lines.jsonl, legato.md) reproduce the saved outputs byte-for-byte, and the lab tests are green.

Full protocol, ablations, leave-one-song-out analysis, format breakdowns, controls and limitations: docs/audit/2026-09-fingering-legato-continuity.md.

…tinuity

# Conflicts:
#	docs/decisions.log.md
Question: does observed legato continuity explain the exactness residual
left after tap-hand attribution? Exactness is primary, excess per note a
secondary diagnostic. Fixes the TechniqueEdge projection (imported legato
origin vs pitch-derived direction), the phase-1 census laws with base
rates, the A/B/C1/C2(k)/D1/D2 ablation (hard vs soft continuity, pull-off
open-string waiver as derived evidence), per-stage baselines under the
same objective, per-format subsets, and the leave-one-song-out stop rule.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TabLine::edges projects a legato span (HammerOn/PullOff/Legato) onto the
edge it starts; an origin ending a kept line counts as dangling. Stage 2
objective: pitch-derived direction, hard and soft same-string continuity
across legato edges, pull-off open-string waiver (removes a penalty, never
a bonus); equals stage 1 without legato terms or edges; chain encoding
against brute force. Stubs are todo!().

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tab_lines carries each note's group legato span onto the edge into the
next note of its line (dangling origins counted). technique_cost /
technique_chain extend the tap-aware objective with hard or soft
same-string continuity across legato edges and the pull-off open-string
waiver (derived descending direction only; lifts a penalty, never a
bonus). tap_aware_chain is now the technique chain without legato terms.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Counts the protocol's laws over tablature lines per split, format family
and population: P(same string | legato edge) per imported kind and derived
direction against plain edges (L1/L2), open-string targets of descending
legato vs plain edges (L3), and tap-adjacent edges (L4); plus dangling
legato origins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Records the protocol deviations (implementation before the census; the
first census ran on the pre-#202 import and is kept only as the diagnosis
of the tuplet timing bug; slice and pool sizes changed with #202) and the
impact sweep: #197 holdout agreement and ceilings with CP-SAT re-solved
only for the 114 changed problems per model (gap 0 on all 1,945), #199's
ladder (anchor gain +3.11 -> +3.10 pt), and #200's tap slice (226 lines,
0.9% vs 20.0% exactness), frozen as the stage-2 baseline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Observed legato origins keep their target on the same string in 99.6% of
edges (GP3-5 99.4%, GP6/7 99.8%, tap slice 99.4%) against 58.6% for plain
edges, for both derived directions; descending legato edges land on an open
string 2.8x as often as descending plain edges (31.7% vs 11.3%; tap slice
25.7% vs 8.7%; tap-slice holdout shows no lift); three quarters of edges
out of a tapped note are legato, 96.8% of them descending. All legato
edges are imported as HammerOn; direction is derived.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`fingering_gap legato` runs the registered stages A, B, C1, C2(k = 1, 3,
10), D1, D2 under v1-fit and v1 on every line: exactness, excess per note
(excluded, and counted, where the human path has more cross-string legato
edges than a hard optimum), agreement, tapped-note agreement, ceiling;
length-matched baselines from the untapped pool under the same stage
objective (all and same format); controls (legato stages equal B without
legato edges, B equals A without taps); and leave-one-song-out for the
registered steps with the corpus-evidence stop rule. Per-line rows stay in
--out. Format family now read from the path extension.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…actness gap

Hard same-string continuity across observed legato edges takes tapped-line
exactness from 0.9% to 11.5% (v1-fit, whole corpus; gap to the same-
objective untapped baseline 19.1 -> 9.3 pt). This is corpus evidence by
the leave-one-song-out rule in GP3-5 and GP6/7, and under production v1
(17.7%, above its baseline). Soft continuity with k = 3 closes 37% of the
gap.

The derived pull-off open-string waiver adds 3.5 pt on top of hard
continuity (gap 6.0 pt). That gain is corpus evidence overall and in
GP3-5, but concentrated in GP6/7 and drawn from 3 songs; on top of soft
continuity the waiver adds nothing. 19 tapped lines are unreachable under
the hard constraint. Controls: 0 mismatches.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…inuity

Brings in the tap-attribution branch, which now contains main at e871a44
(#203, #204 are new here) and the post-#202 re-measurements of #197, #199 and
#200. Those re-measurements reproduce this stage's "Baselines after #202"
impact sweep figure for figure.

The only conflict was docs/decisions.log.md. This branch has no decision-log
entry of its own, so the file is taken from the tap-attribution branch. That
version includes the amended #197, #199 and #200 entries.

No stage-2 content changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@PhysShell
PhysShell marked this pull request as ready for review September 21, 2026 07:11
@coderabbitai

coderabbitai Bot commented Sep 21, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: a13771be-b3cf-4597-9e57-4ea8316e118f


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.

@PhysShell
PhysShell merged commit 4b78b44 into main Sep 21, 2026
15 checks passed
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.

2 participants