문제
#1223은 chroma_cqt → chroma_stft가 synthetic/mock 조건에서 빨라질 가능성만 보였고, 실제 디코딩 음원에서 구조 경계·기능 라벨·반복 그룹 품질이 보존되는지는 검증하지 않았습니다. BandScope의 structure analysis는 rehearsal buyer truth이므로 계산시간만으로 production representation을 바꾸지 않습니다.
검증 질문은 chroma_stft가 현재 chroma_cqt 대비 사전 정의된 구조 품질 비열등성 기준을 만족하면서 같은 실제 음원·runtime·execution host에서 재현 가능한 latency 개선을 제공하는가입니다.
Production acceptance
- synthetic waveform이 아니라 rights-cleared real decoded music corpus를 사용하고 license/provenance/audio SHA-256/annotation SHA-256을 고정합니다.
- 동일 admitted finite PCM과 exact runtime/host identity에서 baseline/candidate를 paired 측정합니다.
- duplicate
audio_sha256은 독립 관측치처럼 세지 않습니다.
- schema v1에는 dropout/exclusion 허용치가 없으므로 실패 track은 PASS를 막습니다.
- claim boundary, noninferiority margin, latency threshold, aggregation, paired uncertainty, resample count/seed는 candidate 결과를 보기 전에 고정합니다.
- production switch는 complete registered experiment PASS 뒤 별도 PR에서 수행합니다.
구현 상태 — Draft #1228
Current exact head는 e99ccecc20a72d9531d77be5b854ae6090500aff, base는 protected develop@314ddeae7b775a4957594b599358c8255617eb2e입니다. PR은 Draft/Open/mergeable이고 protected base 대비 ahead 200 / behind 0입니다. Production structure extraction default는 여전히 chroma_feature="cqt"입니다.
Functional-label ACC는 pinned MIREX-2025 reproduction b9fa0b0...::calculate_accuracy의 200 ms grid를 사용합니다. Exact mir_eval==0.8.2 research overlay와 detection/deviation/pairwise arguments, runtime-lock digest가 scientific identity에 결합되어 있습니다.
aggregate_structure_noninferiority.py는 macro-track-v1 / paired-track-bootstrap-v1을 소유합니다. Registered track pair를 sampling unit으로 하며 equal-track macro aggregation, PCG64 paired bootstrap, NumPy linear 0.025/0.975 percentile interval을 고정합니다. Stored aggregate/CI는 complete track receipt로부터 canonical recomputation한 값과 exact-match해야 합니다.
isolated-single-shot-v1은 macOS/Windows에서 각 track·lane을 fresh subprocess에서 20회 single-shot 측정하고 same-process warm-up은 0회입니다. Trial 순서는 CQT→STFT / STFT→CQT로 교대합니다. Latency는 repository segmenter만 time.perf_counter_ns()로 측정하고 NumPy linear p50/p95를 구성합니다. Peak RSS는 worker lifetime maximum이며 macOS ru_maxrss, Windows PeakWorkingSetSize를 사용합니다.
Canonical execution host / experiment runner
Fresh review에서 registration.runtime.host_profile이 단순 non-empty text였고 실제 performance execution host와 비교되지 않는 gap을 확인했습니다. p95 latency ratio가 decision criterion인 만큼 host는 설명용 라벨이 아니라 scientific condition입니다.
Draft #1228은 이제 structure-performance-host-v1:<sha256>을 canonical execution prerequisite로 사용합니다. Payload에는 platform, OS release/version, architecture, hardware model, CPU model, logical CPU count만 포함하고 hostname/account/serial/MAC/IP/path는 제외합니다. macOS는 fixed sysctl selectors, Windows는 fixed machine-level registry values를 읽습니다. 실제 captured profile hash가 registration과 다르면 corpus admission 전에 fail closed합니다.
RED 7a90b922c0f64090f1ac2717e9afc0369503bd58 → GREEN 70b86022323728c6b3f85d5f14468423ebf15478으로 host binding과 canonical runner를 추가했고, RED f1a6971ff7f60af993c05455e40ccc6d57ab593e → GREEN a31bebd79d88b940c9f96517d02f7c0364fac485 / 7b07c00d9ee8c7ddbb24f3a65bd62aa1e22c05c4로 free-form host label을 canonical execution에서 거부하도록 고정했습니다. 7d3c28d55af1b1ba08afc9ed2a6df85274a7d6f7에 execution/host TRACEABILITY를 추가했고 e99ccecc20a72d9531d77be5b854ae6090500aff에서 신규 runner를 repository 100-column Python lint boundary에 맞췄습니다.
run_structure_noninferiority_experiment.py는 기존 owner를 조합합니다: registration validation → exact host gate → corpus admission → canonical CQT/STFT quality/performance consumer → admission/evidence identity cross-check → schema-v1 track receipts → canonical aggregation/bootstrap → result admission → atomic path-free execution envelope. MIR/admission/aggregation 로직을 복제하지 않습니다.
아직 닫히지 않은 scientific decision
Implementation 측에서는 metric/runtime identity, timing/RSS producer, track/aggregate receipt binding, exact execution-host gate, canonical end-to-end run path가 닫혔습니다. Production acceptance 전에 다음을 candidate 결과를 보지 않은 상태에서 승인·동결해야 합니다.
- rights-cleared real corpus membership과 대표성
- production noninferiority margins와 maximum candidate latency ratio
- 실제 bootstrap resample count와 random seed
- 선택한 macOS/Windows
structure-performance-host-v1 payload/content address와 population/runtime claim boundary
- 해당 corpus 규모와 paired-inference plan의 충분성
Host content address는 CPU frequency/thermal state/power policy/scheduler contention/page-cache state를 완전히 고정한다고 주장하지 않습니다. 이런 host-wide variance는 scientific review와 claim boundary에 남습니다.
이 선택을 동결한 뒤 complete admitted corpus를 canonical runner로 한 번 실행합니다. 통과하더라도 production default 변경은 별도 PR입니다. Current exact head의 terminal protected checks와 independent non-author approval도 별도 merge gate입니다.
참고 기준
- Raffel, C., McFee, B., Humphrey, E. J., Salamon, J., Nieto, O., Liang, D., & Ellis, D. P. W. (2014). mir_eval: A transparent implementation of common MIR metrics. ISMIR.
- Hall, P. (1988). Theoretical comparison of bootstrap confidence intervals. The Annals of Statistics, 16(3), 927–953. https://doi.org/10.1214/aos/1176350933
- MIREX 2025 Music Structure Analysis /
ismir-mirex/mirex-evaluation@b9fa0b0b32e2145af31f35830f78fc9d09a4301b.
- Python 3.14
time.perf_counter_ns(); NumPy quantile(method="linear").
- Apple
sysctl, getrusage(2); Microsoft processor registry guidance and PROCESS_MEMORY_COUNTERS.PeakWorkingSetSize.
Related: #1223, #1228
문제
#1223은
chroma_cqt→chroma_stft가 synthetic/mock 조건에서 빨라질 가능성만 보였고, 실제 디코딩 음원에서 구조 경계·기능 라벨·반복 그룹 품질이 보존되는지는 검증하지 않았습니다. BandScope의 structure analysis는 rehearsal buyer truth이므로 계산시간만으로 production representation을 바꾸지 않습니다.검증 질문은
chroma_stft가 현재chroma_cqt대비 사전 정의된 구조 품질 비열등성 기준을 만족하면서 같은 실제 음원·runtime·execution host에서 재현 가능한 latency 개선을 제공하는가입니다.Production acceptance
audio_sha256은 독립 관측치처럼 세지 않습니다.구현 상태 — Draft #1228
Current exact head는
e99ccecc20a72d9531d77be5b854ae6090500aff, base는 protecteddevelop@314ddeae7b775a4957594b599358c8255617eb2e입니다. PR은 Draft/Open/mergeable이고 protected base 대비 ahead 200 / behind 0입니다. Production structure extraction default는 여전히chroma_feature="cqt"입니다.Functional-label ACC는 pinned MIREX-2025 reproduction
b9fa0b0...::calculate_accuracy의 200 ms grid를 사용합니다. Exactmir_eval==0.8.2research overlay와 detection/deviation/pairwise arguments, runtime-lock digest가 scientific identity에 결합되어 있습니다.aggregate_structure_noninferiority.py는macro-track-v1/paired-track-bootstrap-v1을 소유합니다. Registered track pair를 sampling unit으로 하며 equal-track macro aggregation, PCG64 paired bootstrap, NumPylinear0.025/0.975 percentile interval을 고정합니다. Stored aggregate/CI는 complete track receipt로부터 canonical recomputation한 값과 exact-match해야 합니다.isolated-single-shot-v1은 macOS/Windows에서 각 track·lane을 fresh subprocess에서 20회 single-shot 측정하고 same-process warm-up은 0회입니다. Trial 순서는 CQT→STFT / STFT→CQT로 교대합니다. Latency는 repository segmenter만time.perf_counter_ns()로 측정하고 NumPy linear p50/p95를 구성합니다. Peak RSS는 worker lifetime maximum이며 macOSru_maxrss, WindowsPeakWorkingSetSize를 사용합니다.Canonical execution host / experiment runner
Fresh review에서
registration.runtime.host_profile이 단순 non-empty text였고 실제 performance execution host와 비교되지 않는 gap을 확인했습니다. p95 latency ratio가 decision criterion인 만큼 host는 설명용 라벨이 아니라 scientific condition입니다.Draft #1228은 이제
structure-performance-host-v1:<sha256>을 canonical execution prerequisite로 사용합니다. Payload에는 platform, OS release/version, architecture, hardware model, CPU model, logical CPU count만 포함하고 hostname/account/serial/MAC/IP/path는 제외합니다. macOS는 fixedsysctlselectors, Windows는 fixed machine-level registry values를 읽습니다. 실제 captured profile hash가 registration과 다르면 corpus admission 전에 fail closed합니다.RED
7a90b922c0f64090f1ac2717e9afc0369503bd58→ GREEN70b86022323728c6b3f85d5f14468423ebf15478으로 host binding과 canonical runner를 추가했고, REDf1a6971ff7f60af993c05455e40ccc6d57ab593e→ GREENa31bebd79d88b940c9f96517d02f7c0364fac485/7b07c00d9ee8c7ddbb24f3a65bd62aa1e22c05c4로 free-form host label을 canonical execution에서 거부하도록 고정했습니다.7d3c28d55af1b1ba08afc9ed2a6df85274a7d6f7에 execution/host TRACEABILITY를 추가했고e99ccecc20a72d9531d77be5b854ae6090500aff에서 신규 runner를 repository 100-column Python lint boundary에 맞췄습니다.run_structure_noninferiority_experiment.py는 기존 owner를 조합합니다: registration validation → exact host gate → corpus admission → canonical CQT/STFT quality/performance consumer → admission/evidence identity cross-check → schema-v1 track receipts → canonical aggregation/bootstrap → result admission → atomic path-free execution envelope. MIR/admission/aggregation 로직을 복제하지 않습니다.아직 닫히지 않은 scientific decision
Implementation 측에서는 metric/runtime identity, timing/RSS producer, track/aggregate receipt binding, exact execution-host gate, canonical end-to-end run path가 닫혔습니다. Production acceptance 전에 다음을 candidate 결과를 보지 않은 상태에서 승인·동결해야 합니다.
structure-performance-host-v1payload/content address와 population/runtime claim boundaryHost content address는 CPU frequency/thermal state/power policy/scheduler contention/page-cache state를 완전히 고정한다고 주장하지 않습니다. 이런 host-wide variance는 scientific review와 claim boundary에 남습니다.
이 선택을 동결한 뒤 complete admitted corpus를 canonical runner로 한 번 실행합니다. 통과하더라도 production default 변경은 별도 PR입니다. Current exact head의 terminal protected checks와 independent non-author approval도 별도 merge gate입니다.
참고 기준
ismir-mirex/mirex-evaluation@b9fa0b0b32e2145af31f35830f78fc9d09a4301b.time.perf_counter_ns(); NumPyquantile(method="linear").sysctl,getrusage(2); Microsoft processor registry guidance andPROCESS_MEMORY_COUNTERS.PeakWorkingSetSize.Related: #1223, #1228