Files

62 lines
4.2 KiB
Markdown

# v0.2.5 exact 자산 소유자 승인 증거
제품 소유자 Oz의 사용자 전달 회신: **승인합니다. 이대로 진행하세요**.
시각: **2026-10-14T11:29:51Z / 2026-10-14 20:29:51 KST**.
[승인 기록](../../RELEASE-APPROVAL-v0.2.5.json)은 현재 8 WAV·manifest·notice에만 적용된다.
`productOwnerReleaseApproval=true`, `humanListeningAcceptance=true`, **`legalPrivacyClearance=false`**.
회신을 전자서명 인증이나 법적/privacy clearance로 주장하지 않는다.
[보존된 검수 ZIP](review-bundle.zip)은 전달된
`/home/hermes/voice-memos/find-word-v0.2.5-normalized-ambience-review.zip`과 바이트 동일하다.
SHA-256: `bb2e974b652df43db4a1f2a59716836e2c521839c724b34d4b71c1b40c3322e5`.
manifest SHA-256: `6433bf23af35f24031c6bbe784dd0abf9330f276da6b8705e47c7a1144a285b7`.
## ASR 실패 및 TDD
[ASR 원문](../review-fixes/final-asr.json)은 market 1 segment 및 `requiredEmptyPassed=false`로 불변이다.
SHA-256: `98acdb16bc5dce57bb3609b705b63125e5511c2d5f7b26bdde54f4b7bd9a5e49`.
이 보고서의 청취 인수/법적 clearance false 필드도 바꾸지 않았다.
1. [01 RED](01-approval-absent-RED.log): 승인 기록이 없어 새 집중 테스트가 실패했다.
2. [원래 테스트 전체 소스](before-ambience.test.ts.txt), [02 ASR FAIL](02-original-ASR-FAIL.log):
원래 `requiredEmptyPassed=true` assertion을 실제 실행해 실패를 다시 기록했다.
과거 [15-unit.log](../review-fixes/15-unit.log)도 수정하지 않았다.
3. [03 GREEN](03-contract-GREEN.log): 별도 exact 승인 경로를 추가한 뒤 11개 계약 테스트 통과.
현재 ASR 검사는 원문 hash·실패 상태·market segment 보존을 검사한다. ASR PASS를 뜻하지 않는다.
4. [04 변조 테스트](04-mutation-tests.log): 13개 Python 테스트와 필드별 subtest가 자동 OR 분기,
승인 없음, stale WAV/manifest, 다른 ZIP, 문구/범위/시각 누락·변경, flags/법적 과장, 중복 JSON key,
WAV/manifest/ASR/승인 해시를 함께 고친 경우도 검사한다. 성공 ASR fixture는 임시 사본에서만 만든다.
## 재실행
저장소 루트에서 실행한다. 아래 명령은 기존 증거 파일을 덮어쓰지 않는다.
```bash
python3 scripts/release_approval.py
npm run lint
npm test
python3 -m unittest discover -s tests/python -v
npm run build
npm audit --json
env -u PLAYWRIGHT_NO_SANDBOX CHROME_PATH=/usr/bin/google-chrome npm run test:browser
git diff --check
```
전체 검증 로그는 이 디렉터리의 `05-build.log`, `06-lint.log`, `07-unit.log`, `08-python.log`,
`npm-audit.json`, `09-browser.log`, `browser-results.json`, `chrome-sandbox.json`에 보존한다.
Chrome desktop/mobile은 viewport/touch emulation이며 실제 모바일 기기 인증이 아니다.
`run-browser.py`는 전체 36개 테스트와 실제 자식 browser/renderer 인자를 수집했다.
같은 증거 위치에서 다시 실행하지 말고 새 위치를 사용한다(`open('x')`로 로그 덮어쓰기 거부).
최초 수집기의 argv 파서가 전체 명령을 한 요소로 받는 이 환경에서 renderer 미관측으로 종료했다.
Playwright 자체 결과는 **36 PASS / exit 0**이다. [원래 수집기](run-browser-initial.py.txt)와
[원문 프로세스/초기 판정](chrome-process-observations.json)을 보존했고 `summarize_browser.py`가
정확한 flag 경계로 원문을 재분석했다. [교정 결과](chrome-sandbox.json)는 browser 4개, renderer 72개,
`--no-sandbox` 부재와 모든 관측 renderer의 Seccomp=2/NoNewPrivs=1을 확인한다.
전체 unit **146 PASS**, Python **60 PASS**, Chrome **36 PASS**이며 lint/build/audit/secret scan/diff check도 통과했다.
[before-sha256.json](before-sha256.json)은 작업 시작 시 기존 .agent 증거, public 파일과 오디오 구현 파일
1,031개의 hash를 기록한다. 갱신하는 RESULT/ACCEPTANCE는 사본으로 보존하고 나머지는 원래 위치에서 불변이다.
소스 원본·선택 구간·loudness/gain 수학·101 voice 및 8 ambience WAV를 다시 만들지 않았다.
최신 결과와 인수 상태는 [RESULT](../../RESULT-v0.2.5.md), [ACCEPTANCE](../../ACCEPTANCE-v0.2.5.md)에 있다.
commit/push/merge/tag/deploy 및 production 검증은 미실행이다.