Files

17 KiB
Raw Permalink Blame History

Find-Word v0.2.5 exact 자산 승인 및 독립 리뷰 수정 결과

2026-10-14 UTC · /home/hermes/worktrees/find-word-v0.2.5 · fix/v0.2.5-ambience-loudness. HEAD 812540c7438639f25b886cfd620201d92de15362 유지. commit/push/merge/tag/deploy 미실행.

릴리스 판정: exact-byte 소유자 청취 승인 경로 수용

Oz는 현재 8 WAV·manifest·notice를 포함한 검수 ZIP을 받은 뒤 **“승인합니다. 이대로 진행하세요”**라고 2026-10-14T11:29:51Z / 2026-10-14 20:29:51 KST에 회신했다. 사용자가 전달한 이 회신을 RELEASE-APPROVAL-v0.2.5.json에 기록했다. ZIP SHA-256 bb2e974b652df43db4a1f2a59716836e2c521839c724b34d4b71c1b40c3322e5, 현재 manifest SHA-256 6433bf23af35f24031c6bbe784dd0abf9330f276da6b8705e47c7a1144a285b7, 8 WAV 및 notice 해시를 모두 연결했다. productOwnerReleaseApproval=true, humanListeningAcceptance=true, legalPrivacyClearance=false다. 자동 ASR 실패는 그대로이며 이 승인은 법적/privacy clearance가 아니다.

릴리스 계약은 자동 empty-ASR 조건 OR 유효한 exact-byte 소유자 청취 승인이다. 현재는 후자만 통과한다. python3 scripts/release_approval.py는 고정 전달 ZIP의 해시 및 현재 파일 전체의 바이트 동일성, 정확한 소유자/회신/시각/범위/flags를 검사한다. 잘못된 승인 기록은 자동 조건이 통과해도 거부하며, WAV/manifest/ZIP 변경·누락된 필드·법적 clearance 과장을 허용하지 않는다. 현재 검증 결과는 문서 마지막 표에 있으며 아래 ASR/이전 테스트 실패를 PASS로 바꾸지 않는다.

정규화 결함은 strict TDD로 수정했다. 전용 **FFmpeg ebur128=peak=true**가 릴리스 수용 계기이며, 8개 exact 최종 WAV 모두 −32.5 LUFS, spread 0.0 LU, 최대 true peak −6.2 dBTP다. 독립 pyloudnorm 0.2.0 / soundfile 0.13.1도 −32.6062~−32.5291 LUFS, spread 0.0771547792 LU로 목표 ±0.2 LU / spread≤0.4 LU를 통과했다. loudnorm input_i를 수용 계기로 사용하는 주장은 철회했다.

같은 faster-whisper/VAD 설정으로 새 바이트를 검사했을 때 market 1개 segment가 반환되었다. requiredEmptyPassed=false로 자동 조건은 여전히 실패다. 승인 전 npm test의 143 통과 / 1 실패와 requiredEmptyPassed=true를 요구하던 원래 테스트 소스·실패 로그를 역사 진단으로 보존했다.

  • exact market WAV SHA-256: 7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632
  • 보존한 원본 구간: 24–36초. ASR 반환 구간: 10.45–12.45초. 반환 끝 시각도 수정하지 않았다.
  • 후보 텍스트: Let's go, let's go, let's go. (검증된 전사가 아님)
  • mall/cafe 및 다른 5개는 segment 0개. market을 포함한 필수 3개 전부 empty 조건은 미충족.
  • 실패 원문, 실행 로그, 승인 전 unit 실패.

설정/threshold/모델/선택 구간을 바꾸거나 반환 segment를 삭제하지 않았다. ASR 보고서의 humanListeningAcceptance=false, legalPrivacyClearance=false는 그대로다. ASR 원문 SHA-256은 98acdb16bc5dce57bb3609b705b63125e5511c2d5f7b26bdde54f4b7bd9a5e49다. 소유자 청취 인수는 새 별도 승인 기록에서만 true다. 이전 Oz 승인은 당시 v0.2.3 exact WAV에 한정된다. ASR의 후보 텍스트가 실제 발화를 입증한다고 주장하지 않는다.

거부된 역사와 불변 보존

독립 리뷰 결과를 적용했다. 이전 loudnorm input_i는 spread 0.01 LU를 보고했지만 같은 WAV의 전용 FFmpeg ebur128은 2.0 LU, 별도 pyloudnorm 0.2.0은 1.925 LU였다. 당시 정규화 결과는 릴리스 조건 실패다. 계기 차이를 진단값으로만 분류하고 ebur128 equality assertion을 제거한 판단은 철회했다.

이전 RESULT 사본, 당시 bundle, 당시 정규화 계획을 별도 보관했다. 앞선 독립 리뷰 수정은 기존 .agent/evidence-v0.2.5 150개 파일을 byte 동일하게 보존하고 review-fixes/에 추가했다. 이번 승인 작업은 이 review-fixes/까지 전부 보존하고 release-approval/에만 새 증거를 추가한다. 승인 직전 RESULT 사본과 ACCEPTANCE 사본도 보관한다. 상위 evidence의 GREEN/완료 표시는 거부된 당시 기준의 역사이며 현재 릴리스 통과를 뜻하지 않는다.

기존 불변 파일 660개, voice WAV 101개, source 8개의 hash/bytes와 원본 선택 구간·creator·license·attribution을 보존했다. source plan hash는 3529c8534be204208ac504a0f4c1a69b312131f9bbff92aa9a3135d61d24db65다. history hash 목록, 보존 검증 결과.

구현과 manifest

  1. 불변 source plan으로 모든 원본 SHA-256/bytes를 먼저 검증한다. 기존 seek 및 짧은 Ogg의 full decode/sample trim fallback, 12초/24kHz/mono와 양끝 50ms 선형 fade를 보존한다.
  2. 정확한 faded f32 PCM을 새 ebur128=peak=true 프로세스로 측정한다.
  3. 모든 환경의 공통 target −32.5 LUFS에서 gain_db=target−measured_i를 구한다. market의 입력 I=−26.4 LUFS, TP=−0.1 dBTP이므로 gain=−6.1 dB로 파형을 보존하며 내부 ceiling에 맞춘다.
  4. 입력 true peak+gain이 −6.2 dBTP를 넘으면 변환 전에 실패한다. volume=<gain_db>dB:precision=double만 적용하고 FFmpeg pcm_s16le로 인코딩한다.
  5. staged WAV를 새 ebur128 프로세스로 측정한다. 오차가 ±0.2 LU 밖일 때만 같은 원본 PCM에서 스칼라를 보정한다. 매번 peak를 사전 검사하며 최대 총 3회다. 비수렴/NaN/측정 실패/내부 peak 초과는 공개를 차단한다.
  6. staging의 8 WAV·manifest·notice 전체를 검증하고 새 ebur128 측정으로 bundle spread≤0.4 LU 및 각 파일 target±0.2 LU/TP≤−6 dBTP를 강제한 뒤 단일 renameat2(RENAME_EXCHANGE)로 원자 교환한다.

이번 8개는 모두 첫 시도에 통과하여 보정 반복은 필요하지 않았다. 모든 sample에 동일 scalar만 적용하고 PCM16 반올림 오차만 남는다는 실제 FFmpeg fixture 검사, corrective gain/비수렴/peak 초과 검사가 있다. 실패하면 기존 공개 디렉터리를 보존하는 검증/쓰기/교환/중단 테스트도 유지했다.

manifest는 입력 ebur128 통계, faded PCM hash, 각 iteration의 정확한 gain/filter, 예측 peak/출력 통계, 최종 ebur128 통계, 목표/허용오차/spread/내부·릴리스 ceiling/최대 반복 수와 FFmpeg 6.1.1-3ubuntu5 버전을 기록한다. 정규화 계획도 같은 계약이다. 12초, 288,000 frames, mono 24kHz PCM16, 576,044 bytes와 고유 hash/non-silence/양끝 0을 유지한다.

환경 원본 시작 초 gain dB 최종 ebur128 LUFS 최종 dBTP
street 35 +3.2 −32.5 −10.2
mall 36 −10.4 −32.5 −12.2
theater 45 −6.8 −32.5 −16.1
department 90 −8.4 −32.5 −16.6
market 24 −6.1 −32.5 −6.2
subway 65 −16.0 −32.5 −16.2
cafe 0 −13.0 −32.5 −18.2
rain 180 +19.7 −32.5 −12.1

독립 ebur128 script/hash/raw summary/결과, 독립 pyloudnorm script/hash/version/결과. 일반 npm test는 Python 표준 라이브러리와 FFmpeg만 사용하며 네트워크나 전역 pyloudnorm을 요구하지 않는다. 독립 meter는 별도 disposable venv에서 실행했다. 7개 의존성 전부 version/wheel SHA-256을 고정한 lock과 재현 명령을 보존했다.

같은 원본에서 별도 임시 디렉터리로 두 번 재생성해 공개 WAV/notice/입력·iteration·최종 통계가 동일함을 확인했다. manifest 생성 시각만 제외한다. 재현 결과. 재현성 범위는 기록한 도구 빌드/플랫폼이며 다른 FFmpeg 빌드의 byte 동일성을 주장하지 않는다.

런타임과 검증

기존 고정 배경 gain G=0.4198884518664126을 변경하지 않았다. 환경·SNR·intro 유무와 무관하다. voice/intro RMS .03, SNR은 voice 상대 gain만, master는 세 경로에 동일 적용한다. 보수적 상한 B=.55,V=.25,I=.20, SNR_MAX=12, intro=1.8, ceiling=.8을 유지한다.

G = 0.8 / (0.55 + 0.25*10^(12/20) + 0.20*1.8)
|mix| ≤ master * G * (B + V*10^(12/20) + I*1.8) ≤ 0.8

101 voice×8 배경×25 SNR, 20,200개 조합을 다시 검사했다. 새 background 최대 sample peak는 0.471954345703125, voice=0.2052977830171585, intro=0.14995422959327698이며, 실측 peak를 대입한 최악 합성 상계는 0.6546804814413929 < .8이다. 배경 gain 집합의 크기는 1이다. 전수 runtime/doc 검사.

아래 표와 Chrome 수치는 승인 전 독립 리뷰 수정 당시 기록이다. 최신 검증은 다음 절에 별도로 기록한다.

검사 당시 결과 보존 증거
ebur128 TDD RED 2.0 LU 실패 → GREEN 01, 06
선형 gain/peak/비수렴 TDD RED → 7 PASS 02, 04
ASR gate TDD RED, 실제 재검사도 FAIL 유지 03, 08
build manifest 계약 TDD RED → 해당 39 PASS 07, 15
npm run lint PASS 14
npm test 143 PASS / 1 FAIL (ASR) 15
전체 Python 47 PASS 11
npm run build PASS, 109 WAV 및 notice/manifest 일치 16
npm audit --json 취약점 0개 audit
system Chrome desktop/mobile 36 PASS, skipped/flaky/unexpected=0 17, summary
문서 변경 후 관련 계약/runtime 재검사 12 PASS 21
불변 이력/원본/음성/public-dist PASS 20

Chrome은 system executable의 sandbox를 켜서 실행했다. 실제 프로세스 인자에 --no-sandbox가 없음을 기록했다. desktop/mobile은 viewport/touch emulation이며 물리 모바일/Safari 인증은 아니다. 109 WAV의 24/44.1/48/96kHz decode/peak와 8환경×3 SNR의 native GainNode, 3문항·종료·재청취·오류 재시도·무결성·axe·네트워크를 검증했다. 정상 흐름 console/page 오류·실패 요청·외부 요청·axe 위반은 모두 0개다. 의도적인 404/변조 오류는 정상 흐름 통계와 구분한다. 각 프로젝트 436개 리샘플 측정에서 최대 background=0.4879775941371918, voice=0.20585650454525403, intro=0.14999594059820148로 기존 보수적 상한 이하다. 두 프로젝트 모두 24개 GainNode 관측의 예약 gain은 0.4198884518664126, 실제 Float32 plateau는 0.4198884665966034로 동일하다.

앞선 작업은 당시 차단 상태로 문서를 기록했다. 이번 작업은 README/CHANGELOG/ARCHITECTURE/ AUDIO_PROVENANCE/DEPLOYMENT/RESULT/ACCEPTANCE를 새 소유자 승인 상태로 갱신한다. 제품/query 버전 0.2.5, 정확한 Designed by OZ at Heat-T Medical Inc., 제3자 notice/market CC BY-SA 4.0, 정규화 계획·manifest·source/segment·loudness/gain 수학과 runtime 코드는 그대로다. 원래 TASK와 이전 릴리스 기록은 역사로 보존하며 이번 사용자 지시가 별도 소유자 승인 경로를 추가한다.

exact 자산 승인 후 전체 검증

승인 기록이 없는 RED를 먼저 실행하고, 승인 기록 및 별도 OR gate를 추가했다. 원래 ASR 테스트의 전체 소스와 실제 FAIL 로그는 보존하고 현재 진단 테스트는 원문 SHA-256과 실패 상태를 고정한다. 승인 없이 현재 ASR만으로 통과할 수 없다. Python 변조 테스트는 WAV/manifest/ASR/승인 해시를 함께 고쳐도 고정된 전달 ZIP과 일치하지 않으면 거부됨을 검사한다. 자동 성공 fixture는 테스트 임시 사본에서만 사용했다.

검사 현재 결과 새 증거
승인 기록 누락 TDD RED → 승인 계약 GREEN 01 RED, 03 GREEN
원래 ASR true 요구 테스트 FAIL 유지, 역사 진단 원래 소스, 02 FAIL
현재 릴리스 gate PASS: exact-byte-owner-listening-approval, 자동 ASR false, 법적 clearance false gate JSON
승인/해시/범위/법적 과장 변조 13 Python 테스트 + 필드별 subtest PASS 04
lint/typecheck PASS 06
전체 unit/component/release 146 PASS, 16 files, 실패/skip 없음 07
전체 Python 60 PASS 08
build PASS, 101 voice + 8 ambience 및 notice/manifest 05
npm audit 취약점 0개 audit
전체 sandboxed Chrome desktop/mobile 36 PASS, unexpected/skipped/flaky=0 09, summary
이전 evidence/원본/구간/음원/수학 보존 1,029개 원위치 불변 + 2개 상태 문서 원문 사본, 원본 8개 일치, public 113개 dist 일치 보존 JSON
secret scan 발견 0개 scan
git diff --check 및 새 파일 whitespace PASS diff, new files

Chrome 146.0.7680.80, chromiumSandbox=true, 실제 browser 4개 및 renderer 72개를 관측했다. --no-sandbox는 없으며 모든 관측 renderer의 Seccomp=2 / NoNewPrivs=1이다. 처음 수집기는 /proc의 전체 명령이 argv[0] 하나로 들어오는 형식을 오해하여 renderer 미관측으로 종료 코드 1을 냈다(Playwright 자체는 0, 36 PASS). 원래 수집기와 원문 프로세스/초기 판정을 보존했다. 원문을 바꾸지 않고 정확한 flag 경계로 재분석했으며 분리/통합 argv 양쪽의 음성/양성 검사를 수행했다. 교정한 sandbox 요약은 이 파서 교정 경위를 명시한다.

양쪽 프로젝트에서 109 WAV hash/decode, 436개 resampling 관측, 8환경×3 SNR native GainNode, 실제 loop 재생/중지와 전체 게임·접근성·오류 복구 흐름을 통과했다. 정상 흐름 오류/실패 요청/외부 요청은 0이며 axe 검사도 통과했다. 실제 gain은 기존 예약값 0.4198884518664126, Float32 관측값 0.4198884665966034다. desktop/mobile은 viewport/touch emulation이고 production/물리 모바일 검증은 수행하지 않았다.

README, CHANGELOG, AUDIO_PROVENANCE, ARCHITECTURE, DEPLOYMENT 및 이 RESULT/ACCEPTANCE를 갱신했다. 검수 ZIP과 모든 이전 증거를 보존했으며 commit/push/merge/tag/deploy는 실행하지 않았다.