Skip to content

Plan: Phase 1 implementation (pitch ceiling lift) — blocked on #11#12

Open
pgil256 wants to merge 1 commit into
mainfrom
plan/tab-f1-phase-1
Open

Plan: Phase 1 implementation (pitch ceiling lift) — blocked on #11#12
pgil256 wants to merge 1 commit into
mainfrom
plan/tab-f1-phase-1

Conversation

@pgil256
Copy link
Copy Markdown
Owner

@pgil256 pgil256 commented May 19, 2026

Summary

Plan-only PR for Phase 1 of the per-tier acceptance work. Reviewable in parallel with #11 (Phase 0 implementation); kept separate so #11 stays focused.

Goal: Pitch F1 0.915 → ≥ 0.93 on the GuitarSet validation composite, with no Onset F1 regression > 1 pp. Cheap deterministic tuning only — no training, no Modal, no §8 contract changes.

Two-stage approach:

  • Stage A — voicing/silence gate + peak-picking + same-pitch merge using primitives already in tabvision/tabvision/audio/filters.py and the existing knobs on HighResBackend. The trick is caching highres events once, then sweeping filter configs in seconds instead of hours.
  • Stage B — Basic Pitch pitch-only ensemble (tabvision.audio.basicpitch is already Apache-2.0, default-pipeline-safe). Disagreement-downweights highres events; agreement-upweights. Only run if Stage A leaves a 1-2 pp gap.

Budget: ~2 days engineering Stage A only, ~3-4 days with Stage B, ~$0 compute (all local CPU).

Gating — DO NOT MERGE-AND-START YET

Per CLAUDE.md operating rule 2 ("Phase N+1 starts only after Phase N's acceptance gate passes AND user says 'proceed.'"):

  1. No code in tabvision/tabvision/audio/ may be modified until PR Phase 0: per-tier composite eval + first GuitarSet baseline #11 merges into main.
  2. After Phase 0: per-tier composite eval + first GuitarSet baseline #11 merges, the user must explicitly say "proceed" before impl/tab-f1-phase-1 is cut.

This plan PR can be reviewed and approved in parallel with #11. Approval here = "Phase 1 approach is fine"; it does not authorize coding to start.

Plan doc

docs/plans/2026-05-19-tab-f1-phase-1-implementation.md — 11 sections covering:

  • Gating note (§0)
  • Goal recap with current vs target metrics (§1)
  • Staged approach with sub-moves A1/A2/A3 and the Stage A/B decision gate (§2)
  • Files to add / modify (§3)
  • Test plan, both unit and e2e (§4)
  • Commands to run with cached-events optimization (§5)
  • Acceptance outputs / artifacts (§6)
  • Decision tree covering pass / partial / regress cases (§7)
  • Time + compute budget (§8)
  • Out of scope (§9)
  • Done definition (§10)
  • Explicit dependencies on Phase 0: per-tier composite eval + first GuitarSet baseline #11 (§11)

Test plan (for this PR specifically)

  • Plan-only PR. No code changes to verify.
  • Sign off on the staged approach (Stage A only ⇒ Stage B fallback ⇒ Phase 2 escalation).
  • Sign off on Stage A's three sub-moves (filter gate, peak-picking, same-pitch merge) and the cached-events optimization.
  • Confirm Phase 1 acceptance gate (Pitch F1 ≥ 0.93, Onset F1 ≥ 0.92).
  • After Phase 0: per-tier composite eval + first GuitarSet baseline #11 merges: explicit "proceed" from user → cut impl/tab-f1-phase-1 → Stage A.

Meanwhile (out of scope here, in user's hands): Phase 0 long-lead items — EGDB email, free-tier compute account signups, Guitar-TECHS Zenodo download.

Plan-only. Implementation gated on PR #11 (Phase 0) merging into main
AND explicit 'proceed' from user per CLAUDE.md operating rule 2.

Mirrors the Phase 0 impl-plan style:
- Goal recap (Pitch F1 0.915 → ≥ 0.93, no Onset regression > 1 pp)
- Two-stage approach: cheap deterministic post-processing (voicing
  gate + peak-picking + same-pitch merge) first; Basic Pitch
  pitch-only ensemble only if Stage A leaves a 1-2 pp gap.
- Exact files: new audio/ensemble.py + cache/sweep scripts under
  scripts/eval/; tuned defaults on existing audio/highres.py and
  audio/filters.py (both already have the primitives in place).
- Test plan: extend test_audio_filters.py + new
  test_audio_ensemble.py / test_cache_audio_events.py + new e2e
  test_phase1_e2e.py.
- Commands: cache events once (~30 min), sweep filter config
  (seconds), conditionally run threshold sweep / ensemble.
- Acceptance: composite_baseline_phase1_<date>.md +
  audio_filter_sweep_<date>.md + DECISIONS.md entry.
- Decision tree covers pass / partial / regress cases.
- Budget: ~2 days engineering on Stage A only, ~3-4 with Stage B,
  ~bash compute (all local CPU).

Out of scope: fusion, video, training, electric-tier coverage
(Phase 0 §8 user-action gated).

Branch cut from main (no dependency on #11 files for the plan doc
itself; the plan REFERENCES #11 files which must exist on main
before Phase 1 code begins — §11).
@vercel
Copy link
Copy Markdown

vercel Bot commented May 19, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
tab_vision Ready Ready Preview, Comment May 19, 2026 8:05pm

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