feat: release Find-Word v0.2.3
@@ -0,0 +1,12 @@
|
||||
$ npx vitest run tests/App.test.tsx tests/neural-release.test.ts
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
|
||||
Test Files 2 passed (2)
|
||||
Tests 27 passed (27)
|
||||
Start at 08:48:26
|
||||
Duration 4.75s (tests 80%, environment 12%, setup 5%, transform 2%, import 1%)
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,569 @@
|
||||
$ npx vitest run tests/App.test.tsx tests/neural-release.test.ts
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
❯ tests/App.test.tsx (23 tests | 1 failed) 3909ms
|
||||
❯ 시작부터 결과까지 사용자 흐름 (13)
|
||||
× 혼합 모드 세 문제를 키보드·텍스트로 풀고 결과에서 다시 시작한다 403ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/App.test.tsx > 시작부터 결과까지 사용자 흐름 > 혼합 모드 세 문제를 키보드·텍스트로 풀고 결과에서 다시 시작한다
|
||||
TestingLibraryElementError: Unable to find an accessible element with the role "heading" and name `/오늘의 소리 탐험/`
|
||||
|
||||
Here are the accessible roles:
|
||||
|
||||
link:
|
||||
|
||||
Name "본문으로 건너뛰기":
|
||||
[36m<a[39m
|
||||
[33mclass[39m=[32m"skip-link"[39m
|
||||
[33mhref[39m=[32m"#main"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "환경음 출처·라이선스":
|
||||
[36m<a[39m
|
||||
[33mhref[39m=[32m"/AMBIENCE_NOTICES.md"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
banner:
|
||||
|
||||
Name "":
|
||||
[36m<header[39m
|
||||
[33mclass[39m=[32m"header wrap"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
heading:
|
||||
|
||||
Name "단어를 맞춰라":
|
||||
[36m<h1 />[39m
|
||||
|
||||
Name "1단계 문제 풀이를 마쳤어요.":
|
||||
[36m<h2[39m
|
||||
[33mtabindex[39m=[32m"-1"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
main:
|
||||
|
||||
Name "":
|
||||
[36m<main[39m
|
||||
[33mclass[39m=[32m"wrap"[39m
|
||||
[33mid[39m=[32m"main"[39m
|
||||
[33mtabindex[39m=[32m"-1"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
paragraph:
|
||||
|
||||
Name "":
|
||||
[36m<p[39m
|
||||
[33mclass[39m=[32m"muted"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "":
|
||||
[36m<p />[39m
|
||||
|
||||
Name "":
|
||||
[36m<p[39m
|
||||
[33mclass[39m=[32m"muted"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "":
|
||||
[36m<p />[39m
|
||||
|
||||
Name "":
|
||||
[36m<p />[39m
|
||||
|
||||
--------------------------------------------------
|
||||
strong:
|
||||
|
||||
Name "":
|
||||
[36m<strong />[39m
|
||||
|
||||
Name "":
|
||||
[36m<strong />[39m
|
||||
|
||||
Name "":
|
||||
[36m<strong />[39m
|
||||
|
||||
--------------------------------------------------
|
||||
table:
|
||||
|
||||
Name "난이도별 결과":
|
||||
[36m<table[39m
|
||||
[33maria-label[39m=[32m"난이도별 결과"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
rowgroup:
|
||||
|
||||
Name "":
|
||||
[36m<thead />[39m
|
||||
|
||||
Name "":
|
||||
[36m<tbody />[39m
|
||||
|
||||
--------------------------------------------------
|
||||
row:
|
||||
|
||||
Name "난이도 SNR 맞힌 문제":
|
||||
[36m<tr />[39m
|
||||
|
||||
Name "1단계 SNR +6 dB 3 / 3":
|
||||
[36m<tr />[39m
|
||||
|
||||
Name "2단계 SNR +3 dB 미진행":
|
||||
[36m<tr />[39m
|
||||
|
||||
Name "3단계 SNR 0 dB 미진행":
|
||||
[36m<tr />[39m
|
||||
|
||||
Name "4단계 SNR -3 dB 미진행":
|
||||
[36m<tr />[39m
|
||||
|
||||
Name "5단계 SNR -6 dB 미진행":
|
||||
[36m<tr />[39m
|
||||
|
||||
--------------------------------------------------
|
||||
columnheader:
|
||||
|
||||
Name "난이도":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"col"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "SNR":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"col"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "맞힌 문제":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"col"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
rowheader:
|
||||
|
||||
Name "1단계":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "2단계":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "3단계":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "4단계":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "5단계":
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
cell:
|
||||
|
||||
Name "SNR +6 dB":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "3 / 3":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "SNR +3 dB":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "미진행":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "SNR 0 dB":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "미진행":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "SNR -3 dB":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "미진행":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "SNR -6 dB":
|
||||
[36m<td />[39m
|
||||
|
||||
Name "미진행":
|
||||
[36m<td />[39m
|
||||
|
||||
--------------------------------------------------
|
||||
button:
|
||||
|
||||
Name "다음 난이도 · 2단계":
|
||||
[36m<button[39m
|
||||
[33mclass[39m=[32m"primary"[39m
|
||||
[36m/>[39m
|
||||
|
||||
Name "처음 화면으로":
|
||||
[36m<button[39m
|
||||
[33mclass[39m=[32m"secondary"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
slider:
|
||||
|
||||
Name "전체 음량":
|
||||
[36m<input[39m
|
||||
[33mid[39m=[32m"volume"[39m
|
||||
[33mmax[39m=[32m"100"[39m
|
||||
[33mmin[39m=[32m"0"[39m
|
||||
[33mtype[39m=[32m"range"[39m
|
||||
[33mvalue[39m=[32m"35"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
status:
|
||||
|
||||
Name "":
|
||||
[36m<output[39m
|
||||
[33mfor[39m=[32m"volume"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
contentinfo:
|
||||
|
||||
Name "":
|
||||
[36m<footer[39m
|
||||
[33mclass[39m=[32m"footer wrap"[39m
|
||||
[36m/>[39m
|
||||
|
||||
--------------------------------------------------
|
||||
|
||||
Ignored nodes: comments, script, style
|
||||
[36m<body>[39m
|
||||
[36m<div>[39m
|
||||
[36m<a[39m
|
||||
[33mclass[39m=[32m"skip-link"[39m
|
||||
[33mhref[39m=[32m"#main"[39m
|
||||
[36m>[39m
|
||||
[0m본문으로 건너뛰기[0m
|
||||
[36m</a>[39m
|
||||
[36m<header[39m
|
||||
[33mclass[39m=[32m"header wrap"[39m
|
||||
[36m>[39m
|
||||
[36m<div[39m
|
||||
[33mclass[39m=[32m"brand"[39m
|
||||
[36m>[39m
|
||||
[36m<span[39m
|
||||
[33maria-hidden[39m=[32m"true"[39m
|
||||
[33mclass[39m=[32m"brand-mark"[39m
|
||||
[36m>[39m
|
||||
[36m<i />[39m
|
||||
[36m<i />[39m
|
||||
[36m<i />[39m
|
||||
[36m<i />[39m
|
||||
[36m</span>[39m
|
||||
[36m<h1>[39m
|
||||
[0m단어를 맞춰라[0m
|
||||
[36m</h1>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"version"[39m
|
||||
[36m>[39m
|
||||
[0mv0.2.3[0m
|
||||
[36m</span>[39m
|
||||
[36m</div>[39m
|
||||
[36m<div[39m
|
||||
[33mclass[39m=[32m"header-actions"[39m
|
||||
[36m>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"little-dot"[39m
|
||||
[36m/>[39m
|
||||
[0m소리에 집중하는 시간[0m
|
||||
[36m</div>[39m
|
||||
[36m</header>[39m
|
||||
[36m<main[39m
|
||||
[33mclass[39m=[32m"wrap"[39m
|
||||
[33mid[39m=[32m"main"[39m
|
||||
[33mtabindex[39m=[32m"-1"[39m
|
||||
[36m>[39m
|
||||
[36m<section[39m
|
||||
[33mclass[39m=[32m"results-panel panel"[39m
|
||||
[36m>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"eyebrow"[39m
|
||||
[36m>[39m
|
||||
[0m세 번의 귀 기울임, 하나의 발견[0m
|
||||
[36m</span>[39m
|
||||
[36m<div[39m
|
||||
[33mclass[39m=[32m"result-mascot"[39m
|
||||
[36m>[39m
|
||||
[36m<div[39m
|
||||
[33maria-hidden[39m=[32m"true"[39m
|
||||
[33mclass[39m=[32m"mascot small"[39m
|
||||
[36m>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"ear left"[39m
|
||||
[36m/>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"ear right"[39m
|
||||
[36m/>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"eye left"[39m
|
||||
[36m/>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"eye right"[39m
|
||||
[36m/>[39m
|
||||
[36m<span[39m
|
||||
[33mclass[39m=[32m"smile"[39m
|
||||
[36m/>[39m
|
||||
[36m<b>[39m
|
||||
[0mS[0m
|
||||
[36m</b>[39m
|
||||
[36m</div>[39m
|
||||
[36m</div>[39m
|
||||
[36m<h2[39m
|
||||
[33mtabindex[39m=[32m"-1"[39m
|
||||
[36m>[39m
|
||||
[0m1단계 문제 풀이를 마쳤어요.[0m
|
||||
[36m</h2>[39m
|
||||
[36m<p[39m
|
||||
[33mclass[39m=[32m"muted"[39m
|
||||
[36m>[39m
|
||||
[0m이번 단계의 결과를 확인하고 다음 도전을 이어 가세요.[0m
|
||||
[36m</p>[39m
|
||||
[36m<p>[39m
|
||||
[0m응답 [0m
|
||||
[0m3[0m
|
||||
[0m문항 · 정답 [0m
|
||||
[0m3[0m
|
||||
[0m문항[0m
|
||||
[36m</p>[39m
|
||||
[36m<div[39m
|
||||
[33mclass[39m=[32m"stats"[39m
|
||||
[36m>[39m
|
||||
[36m<div>[39m
|
||||
[36m<strong>[39m
|
||||
[0m330[0m
|
||||
[36m</strong>[39m
|
||||
[36m<span>[39m
|
||||
[0m총 점수[0m
|
||||
[36m</span>[39m
|
||||
[36m</div>[39m
|
||||
[36m<div>[39m
|
||||
[36m<strong>[39m
|
||||
[0m100%[0m
|
||||
[36m</strong>[39m
|
||||
[36m<span>[39m
|
||||
[0m정답률 · [0m
|
||||
[0m3/3[0m
|
||||
[36m</span>[39m
|
||||
[36m</div>[39m
|
||||
[36m<div>[39m
|
||||
[36m<strong>[39m
|
||||
[0m3[0m
|
||||
[36m<small>[39m
|
||||
[0m회[0m
|
||||
[36m</small>[39m
|
||||
[36m</strong>[39m
|
||||
[36m<span>[39m
|
||||
[0m최고 연속 정답[0m
|
||||
[36m</span>[39m
|
||||
[36m</div>[39m
|
||||
[36m</div>[39m
|
||||
[36m<table[39m
|
||||
[33maria-label[39m=[32m"난이도별 결과"[39m
|
||||
[36m>[39m
|
||||
[36m<thead>[39m
|
||||
[36m<tr>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"col"[39m
|
||||
[36m>[39m
|
||||
[0m난이도[0m
|
||||
[36m</th>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"col"[39m
|
||||
[36m>[39m
|
||||
[0mSNR[0m
|
||||
[36m</th>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"col"[39m
|
||||
[36m>[39m
|
||||
[0m맞힌 문제[0m
|
||||
[36m</th>[39m
|
||||
[36m</tr>[39m
|
||||
[36m</thead>[39m
|
||||
[36m<tbody>[39m
|
||||
[36m<tr>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m>[39m
|
||||
[0m1[0m
|
||||
[0m단계[0m
|
||||
[36m</th>[39m
|
||||
[36m<td>[39m
|
||||
[0mSNR +6 dB[0m
|
||||
[36m</td>[39m
|
||||
[36m<td>[39m
|
||||
[0m3 / 3[0m
|
||||
[36m</td>[39m
|
||||
[36m</tr>[39m
|
||||
[36m<tr>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m>[39m
|
||||
[0m2[0m
|
||||
[0m단계[0m
|
||||
[36m</th>[39m
|
||||
[36m<td>[39m
|
||||
[0mSNR +3 dB[0m
|
||||
[36m</td>[39m
|
||||
[36m<td>[39m
|
||||
[0m미진행[0m
|
||||
[36m</td>[39m
|
||||
[36m</tr>[39m
|
||||
[36m<tr>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m>[39m
|
||||
[0m3[0m
|
||||
[0m단계[0m
|
||||
[36m</th>[39m
|
||||
[36m<td>[39m
|
||||
[0mSNR 0 dB[0m
|
||||
[36m</td>[39m
|
||||
[36m<td>[39m
|
||||
[0m미진행[0m
|
||||
[36m</td>[39m
|
||||
[36m</tr>[39m
|
||||
[36m<tr>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m>[39m
|
||||
[0m4[0m
|
||||
[0m단계[0m
|
||||
[36m</th>[39m
|
||||
[36m<td>[39m
|
||||
[0mSNR -3 dB[0m
|
||||
[36m</td>[39m
|
||||
[36m<td>[39m
|
||||
[0m미진행[0m
|
||||
[36m</td>[39m
|
||||
[36m</tr>[39m
|
||||
[36m<tr>[39m
|
||||
[36m<th[39m
|
||||
[33mscope[39m=[32m"row"[39m
|
||||
[36m>[39m
|
||||
[0m5[0m
|
||||
[0m단계[0m
|
||||
[36m</th>[39m
|
||||
[36m<td>[39m
|
||||
[0mSNR -6 dB[0m
|
||||
[36m</td>[39m
|
||||
[36m<td>[39m
|
||||
[0m미진행[0m
|
||||
[36m</td>[39m
|
||||
[36m</tr>[39m
|
||||
[36m</tbody>[39m
|
||||
[36m</table>[39m
|
||||
[36m<p[39m
|
||||
[33mclass[39m=[32m"muted"[39m
|
||||
[36m>[39m
|
||||
[0m정답마다 단계 × 100점 + 연속 정답 보너스 (문항별 최대[0m
|
||||
[0m [0m
|
||||
[0m20[0m
|
||||
[0m점, 라운드 합계 최대[0m
|
||||
[0m [0m
|
||||
[0m30[0m
|
||||
[0m점)[0m
|
||||
[36m</p>[39m
|
||||
[36m<button[39m
|
||||
[33mclass[39m=[32m"primary"[39m
|
||||
[36m>[39m
|
||||
[0m다음 난이도 · 2단계[0m
|
||||
[36m</button>[39m
|
||||
[36m<button[39m
|
||||
[33mclass[39m=[32m"secondary"[39m
|
||||
[36m>[39m
|
||||
[0m처음 화면으로[0m
|
||||
[36m</button>[39m
|
||||
[36m</section>[39m
|
||||
[36m<div[39m
|
||||
[33mclass[39m=[32m"volume-row"[39m
|
||||
[36m>[39m
|
||||
[36m<label[39m
|
||||
[33mfor[39m=[32m"volume"[39m
|
||||
[36m>[39m
|
||||
[36m<span[39m
|
||||
[33maria-hidden[39m=[32m"true"[39m
|
||||
[36m>[39m
|
||||
[0m◖))[0m
|
||||
[36m</span>[39m
|
||||
[0m 전체 음량[0m
|
||||
[36m</label>[39m
|
||||
[36m<input[39m
|
||||
[33mid[39m=[32m"volume"[39m
|
||||
[33mmax[39m=[32m"100"[39m
|
||||
[33mmin[39m=[32m"0"[39m
|
||||
[33mtype[39m=[32m"range"[39m
|
||||
[33mvalue[39m=[32m"35"[39m
|
||||
[36m/>[39m
|
||||
[36m<output[39m
|
||||
[33mfor[39m=[32m"volume"[39m
|
||||
[36m>[39m
|
||||
[0m35[0m
|
||||
[0m%[0m
|
||||
[36m</output>[39m
|
||||
[36m</div>[39m
|
||||
[36m</main>[39m
|
||||
[36m<footer[39m
|
||||
[33mclass[39m=[32m"footer wrap"[39m
|
||||
[36m>[39m
|
||||
[36m<p>[39m
|
||||
[0mDesigned by OZ at Heat-T Medical Inc.[0m
|
||||
[36m</p>[39m
|
||||
[36m<p>[39m
|
||||
[0m청각적 주의·식별 게임 · 의료적 진단이나 치료를 제공하지 않습니다.[0m
|
||||
[36m</p>[39m
|
||||
[36m<span>[39m
|
||||
[0m개인정보 수집 없이, 오직 플레이만.[0m
|
||||
[36m</span>[39m
|
||||
[36m<a[39m
|
||||
[33mhref[39m=[32m"/AMBIENCE_NOTICES.md"[39m
|
||||
[36m>[39m
|
||||
[0m환경음 출처·라이선스[0m
|
||||
[36m</a>[39m
|
||||
[36m</footer>[39m
|
||||
[36m</div>[39m
|
||||
[36m</body>[39m
|
||||
❯ Object.getElementError node_modules/@testing-library/dom/dist/config.js:37:19
|
||||
❯ node_modules/@testing-library/dom/dist/query-helpers.js:76:38
|
||||
❯ node_modules/@testing-library/dom/dist/query-helpers.js:52:17
|
||||
❯ node_modules/@testing-library/dom/dist/query-helpers.js:95:19
|
||||
❯ tests/App.test.tsx:269:14
|
||||
267| }
|
||||
268| expect(
|
||||
269| screen.getByRole("heading", { name: /오늘의 소리 탐험/ }),
|
||||
| ^
|
||||
270| ).toBeInTheDocument();
|
||||
271| expect(screen.getByText("100%")).toBeInTheDocument();
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
|
||||
|
||||
|
||||
Test Files 1 failed | 1 passed (2)
|
||||
Tests 1 failed | 26 passed (27)
|
||||
Start at 08:48:05
|
||||
Duration 4.93s (tests 79%, environment 13%, setup 4%, transform 2%, import 1%)
|
||||
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,20 @@
|
||||
$ env CHROME_PATH=/usr/bin/google-chrome PLAYWRIGHT_NO_SANDBOX=0 npx playwright test tests/browser/review-fixes.spec.ts --output=.agent/evidence-v0.2.3/review-fixes/browser-green
|
||||
[WebServer] (node:1036807) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
Running 4 tests using 2 workers
|
||||
|
||||
(node:1036840) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1036841) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 [desktop] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다 (2.7s)
|
||||
(node:1037134) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 3 [mobile] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다 (2.3s)
|
||||
✓ 2 [desktop] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 (30.4s)
|
||||
✓ 4 [mobile] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 (37.5s)
|
||||
|
||||
4 passed (45.1s)
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,458 @@
|
||||
$ env CHROME_PATH=/usr/bin/google-chrome PLAYWRIGHT_NO_SANDBOX=0 npx playwright test tests/browser/review-fixes.spec.ts --output=.agent/evidence-v0.2.3/review-fixes/browser-red
|
||||
[WebServer] (node:1035667) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
Running 4 tests using 2 workers
|
||||
|
||||
(node:1035689) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1035688) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✘ 1 [desktop] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다 (3.0s)
|
||||
(node:1035956) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✘ 3 [mobile] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다 (2.6s)
|
||||
(node:1036087) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✘ 2 [desktop] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 (36.4s)
|
||||
✘ 4 [mobile] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 (39.3s)
|
||||
|
||||
|
||||
1) [desktop] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 탐험에서도",
|
||||
+ "split: 라운드",
|
||||
+ ]
|
||||
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
> 32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
| ^
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:32:131
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 3
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 입력",
|
||||
+ ]
|
||||
|
||||
26 | await page.setViewportSize({ width, height: 800 });
|
||||
27 | await page.goto("/");
|
||||
> 28 | expect.soft(await copyLayout(page, ".mode-option small")).toEqual([]);
|
||||
| ^
|
||||
29 | await page.screenshot({ path: info.outputPath(`copy-${width}-home.png`), fullPage: true });
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:28:63
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 만나요",
|
||||
+ "split: 최대",
|
||||
+ ]
|
||||
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
> 32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
| ^
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:32:131
|
||||
|
||||
Error Context: .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-한국어-모드·결과-어절은-320px와-360px에서도-갈라지거나-넘치지-않는다-desktop/error-context.md
|
||||
|
||||
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
|
||||
.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-한국어-모드·결과-어절은-320px와-360px에서도-갈라지거나-넘치지-않는다-desktop/trace.zip
|
||||
Usage:
|
||||
|
||||
npx playwright show-trace .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-한국어-모드·결과-어절은-320px와-360px에서도-갈라지거나-넘치지-않는다-desktop/trace.zip
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
2) [desktop] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 ───
|
||||
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.3333333333333333
|
||||
Received: 0
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
> 49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
| ^
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:49:83
|
||||
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="0" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:50:28
|
||||
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.6666666666666666
|
||||
Received: 0.3333333333333333
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
> 49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
| ^
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:49:83
|
||||
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="1" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:50:28
|
||||
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 1
|
||||
Received: 0.6666666666666666
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.33333333333333337
|
||||
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
> 49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
| ^
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:49:83
|
||||
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="2" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:50:28
|
||||
|
||||
Error Context: .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-desktop/error-context.md
|
||||
|
||||
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
|
||||
.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-desktop/trace.zip
|
||||
Usage:
|
||||
|
||||
npx playwright show-trace .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-desktop/trace.zip
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
3) [mobile] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 탐험에서도",
|
||||
+ "split: 라운드",
|
||||
+ ]
|
||||
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
> 32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
| ^
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:32:131
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 3
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 입력",
|
||||
+ ]
|
||||
|
||||
26 | await page.setViewportSize({ width, height: 800 });
|
||||
27 | await page.goto("/");
|
||||
> 28 | expect.soft(await copyLayout(page, ".mode-option small")).toEqual([]);
|
||||
| ^
|
||||
29 | await page.screenshot({ path: info.outputPath(`copy-${width}-home.png`), fullPage: true });
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:28:63
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 만나요",
|
||||
+ "split: 최대",
|
||||
+ ]
|
||||
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
> 32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
| ^
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:32:131
|
||||
|
||||
Error Context: .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-한국어-모드·결과-어절은-320px와-360px에서도-갈라지거나-넘치지-않는다-mobile/error-context.md
|
||||
|
||||
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
|
||||
.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-한국어-모드·결과-어절은-320px와-360px에서도-갈라지거나-넘치지-않는다-mobile/trace.zip
|
||||
Usage:
|
||||
|
||||
npx playwright show-trace .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-한국어-모드·결과-어절은-320px와-360px에서도-갈라지거나-넘치지-않는다-mobile/trace.zip
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
4) [mobile] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 ────
|
||||
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.3333333333333333
|
||||
Received: 0
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
> 49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
| ^
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:49:83
|
||||
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="0" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:50:28
|
||||
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.6666666666666666
|
||||
Received: 0.3333333333333333
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
> 49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
| ^
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:49:83
|
||||
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="1" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:50:28
|
||||
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 1
|
||||
Received: 0.6666666666666666
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.33333333333333337
|
||||
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
> 49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
| ^
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:49:83
|
||||
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="2" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:50:28
|
||||
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 만나요",
|
||||
+ "split: 최대",
|
||||
+ ]
|
||||
|
||||
57 | }
|
||||
58 | await page.screenshot({ path: info.outputPath("normal-results.png"), fullPage: true });
|
||||
> 59 | expect(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span")).toEqual([]);
|
||||
| ^
|
||||
60 | });
|
||||
61 |
|
||||
at /home/hermes/worktrees/find-word-v0.2.3/tests/browser/review-fixes.spec.ts:59:86
|
||||
|
||||
Error Context: .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-mobile/error-context.md
|
||||
|
||||
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
|
||||
.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-mobile/trace.zip
|
||||
Usage:
|
||||
|
||||
npx playwright show-trace .agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-mobile/trace.zip
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
4 failed
|
||||
[desktop] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
[desktop] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 ────
|
||||
[mobile] › tests/browser/review-fixes.spec.ts:24:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
[mobile] › tests/browser/review-fixes.spec.ts:38:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다 ─────
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,9 @@
|
||||
$ python3 .cache/review_pixels.py browser-green
|
||||
desktop progress-1.png green pixels: 365 expected: 365.3333333333333
|
||||
desktop progress-2.png green pixels: 731 expected: 730.6666666666666
|
||||
desktop progress-3.png green pixels: 1096 expected: 1096.0
|
||||
-mobile progress-1.png green pixels: 107 expected: 106.66666666666667
|
||||
-mobile progress-2.png green pixels: 213 expected: 213.33333333333334
|
||||
-mobile progress-3.png green pixels: 320 expected: 320.0
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,14 @@
|
||||
$ python3 .cache/review_pixels.py browser-red
|
||||
desktop progress-1.png green pixels: 0 expected: 365.3333333333333
|
||||
desktop progress-2.png green pixels: 365 expected: 730.6666666666666
|
||||
desktop progress-3.png green pixels: 731 expected: 1096.0
|
||||
-mobile progress-1.png green pixels: 0 expected: 106.66666666666667
|
||||
-mobile progress-2.png green pixels: 107 expected: 213.33333333333334
|
||||
-mobile progress-3.png green pixels: 213 expected: 320.0
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/.cache/review_pixels.py", line 11, in <module>
|
||||
assert not errors, errors
|
||||
^^^^^^^^^^
|
||||
AssertionError: ['.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-desktop/progress-1.png', '.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-desktop/progress-2.png', '.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-desktop/progress-3.png', '.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-mobile/progress-1.png', '.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-mobile/progress-2.png', '.agent/evidence-v0.2.3/review-fixes/browser-red/review-fixes-리뷰-실제-진행-막대는-현재-문항의-1-3·2-3·3-3을-채운다-mobile/progress-3.png']
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,18 @@
|
||||
$ npm run build
|
||||
|
||||
> find-word@0.2.3 build
|
||||
> tsc --noEmit && vite build && node scripts/check-build.mjs
|
||||
|
||||
vite v8.3.4 building client environment for production...
|
||||
transforming...
|
||||
✓ 21 modules transformed.
|
||||
rendering chunks...
|
||||
computing gzip size...
|
||||
dist/index.html 1.31 kB │ gzip: 0.91 kB
|
||||
dist/assets/index-CgXbHuMU.css 16.11 kB │ gzip: 4.53 kB
|
||||
dist/assets/index-gnlu2pc2.js 247.94 kB │ gzip: 78.06 kB
|
||||
|
||||
✓ built in 179ms
|
||||
빌드 음성 자산 101개 + 현장음 8개 및 런타임/현장음 notice 확인
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,12 @@
|
||||
$ npx vitest run tests/build.test.ts
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
|
||||
Test Files 1 passed (1)
|
||||
Tests 13 passed (13)
|
||||
Start at 08:48:11
|
||||
Duration 3.74s (tests 97%, setup 3%)
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,37 @@
|
||||
$ npx vitest run tests/build.test.ts -t 음성 목록과
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
❯ tests/build.test.ts (13 tests | 5 failed | 7 skipped) 1587ms
|
||||
× 음성 목록과 폴더를 함께 바꾼 empty 배포를 거부한다 209ms
|
||||
× 음성 목록과 폴더를 함께 바꾼 truncated 배포를 거부한다 285ms
|
||||
× 음성 목록과 폴더를 함께 바꾼 duplicate 배포를 거부한다 260ms
|
||||
× 음성 목록과 폴더를 함께 바꾼 renamed 배포를 거부한다 323ms
|
||||
× 음성 목록과 폴더를 함께 바꾼 extra 배포를 거부한다 322ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 5 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/build.test.ts > 음성 목록과 폴더를 함께 바꾼 empty 배포를 거부한다
|
||||
FAIL tests/build.test.ts > 음성 목록과 폴더를 함께 바꾼 truncated 배포를 거부한다
|
||||
FAIL tests/build.test.ts > 음성 목록과 폴더를 함께 바꾼 duplicate 배포를 거부한다
|
||||
FAIL tests/build.test.ts > 음성 목록과 폴더를 함께 바꾼 renamed 배포를 거부한다
|
||||
FAIL tests/build.test.ts > 음성 목록과 폴더를 함께 바꾼 extra 배포를 거부한다
|
||||
AssertionError: expected [Function] to throw an error
|
||||
❯ tests/build.test.ts:133:45
|
||||
131| expect(() => execFileSync("node", ["--input-type=module", "-e",
|
||||
132| `import {verifyBuild} from ${JSON.stringify(resolve("scripts/c…
|
||||
133| { cwd: temporary, stdio: "pipe" })).toThrow();
|
||||
| ^
|
||||
134| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
135| },
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/5]⎯
|
||||
|
||||
|
||||
Test Files 1 failed (1)
|
||||
Tests 5 failed | 1 passed | 7 skipped (13)
|
||||
Start at 08:47:36
|
||||
Duration 2.02s (tests 86%, setup 10%, transform 4%)
|
||||
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,12 @@
|
||||
$ npx vitest run tests/ambience.test.ts
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
|
||||
Test Files 1 passed (1)
|
||||
Tests 2 passed (2)
|
||||
Start at 08:49:27
|
||||
Duration 494ms (tests 66%, setup 28%, transform 3%, import 2%, worker 1%)
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,13 @@
|
||||
$ python3 -m unittest discover -s tests/python -p test_ambience_audio.py -v
|
||||
test_convert_format_fade_normalization_and_reproducibility (test_ambience_audio.AmbienceConversion.test_convert_format_fade_normalization_and_reproducibility)
|
||||
스테레오 48kHz 입력을 실제로 내려 섞고 길이·양끝·안전 피크를 확인한다. ... ok
|
||||
test_silence_fails_before_publishing (test_ambience_audio.AmbienceConversion.test_silence_fails_before_publishing)
|
||||
무음을 정상 현장 녹음으로 포장하지 않는다. ... ok
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 3 tests in 1.108s
|
||||
|
||||
OK
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,59 @@
|
||||
$ python3 -m unittest discover -s tests/python -p test_ambience_audio.py -k SourceGuard -v
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) ...
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='hash') ... ERROR
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='bytes') ... ERROR
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='missing') ... ERROR
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='duplicate') ... ERROR
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='inventory') ... ERROR
|
||||
|
||||
======================================================================
|
||||
ERROR: test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='hash')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 85, in test_all_sources_checked_before_first_conversion
|
||||
audio.generate(plan, self.sources, self.output, converter=self.converter)
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'generate'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='bytes')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 85, in test_all_sources_checked_before_first_conversion
|
||||
audio.generate(plan, self.sources, self.output, converter=self.converter)
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'generate'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='missing')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 85, in test_all_sources_checked_before_first_conversion
|
||||
audio.generate(plan, self.sources, self.output, converter=self.converter)
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'generate'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='duplicate')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 85, in test_all_sources_checked_before_first_conversion
|
||||
audio.generate(plan, self.sources, self.output, converter=self.converter)
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'generate'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) (damage='inventory')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 85, in test_all_sources_checked_before_first_conversion
|
||||
audio.generate(plan, self.sources, self.output, converter=self.converter)
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'generate'
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 1 test in 0.026s
|
||||
|
||||
FAILED (errors=5)
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,22 @@
|
||||
$ python3 -m unittest discover -s tests/python -p test_ambience_audio.py -v
|
||||
test_convert_format_fade_normalization_and_reproducibility (test_ambience_audio.AmbienceConversion.test_convert_format_fade_normalization_and_reproducibility)
|
||||
스테레오 48kHz 입력을 실제로 내려 섞고 길이·양끝·안전 피크를 확인한다. ... ok
|
||||
test_silence_fails_before_publishing (test_ambience_audio.AmbienceConversion.test_silence_fails_before_publishing)
|
||||
무음을 정상 현장 녹음으로 포장하지 않는다. ... ok
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) ... ok
|
||||
test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem (test_ambience_audio.AtomicPublication.test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem) ... ok
|
||||
test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory) ... ok
|
||||
test_exchange_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_exchange_failure_preserves_prior_directory) ... ok
|
||||
test_first_publication_and_real_exchange (test_ambience_audio.AtomicPublication.test_first_publication_and_real_exchange) ... ok
|
||||
test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) ... ok
|
||||
test_sigterm_before_commit_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_sigterm_before_commit_preserves_prior_directory) ... ok
|
||||
test_staged_manifest_notice_and_inventory_tampering_are_rejected (test_ambience_audio.AtomicPublication.test_staged_manifest_notice_and_inventory_tampering_are_rejected) ... ok
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) ... ok
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 12 tests in 5.500s
|
||||
|
||||
OK
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,224 @@
|
||||
$ python3 -m unittest discover -s tests/python -p test_ambience_audio.py -k AtomicPublication -v
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) ... {
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='street') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='mall') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='theater') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='department') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='market') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='subway') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='cafe') ... FAIL
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='rain') ... FAIL
|
||||
test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem (test_ambience_audio.AtomicPublication.test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem) ... {
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
FAIL
|
||||
test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory) ... ok
|
||||
test_exchange_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_exchange_failure_preserves_prior_directory) ... ERROR
|
||||
test_first_publication_and_real_exchange (test_ambience_audio.AtomicPublication.test_first_publication_and_real_exchange) ... {
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
FAIL
|
||||
test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) ...
|
||||
test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) (file='AMBIENCE_NOTICES.md') ... FAIL
|
||||
test_sigterm_before_commit_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_sigterm_before_commit_preserves_prior_directory) ... Process ForkProcess-1:
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/.local/share/uv/python/cpython-3.11.16-linux-x86_64-gnu/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
|
||||
self.run()
|
||||
File "/home/hermes/.local/share/uv/python/cpython-3.11.16-linux-x86_64-gnu/lib/python3.11/multiprocessing/process.py", line 108, in run
|
||||
self._target(*self._args, **self._kwargs)
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 229, in child
|
||||
with patch.object(audio, "atomic_publish", pause): self.run_generate()
|
||||
File "/home/hermes/.local/share/uv/python/cpython-3.11.16-linux-x86_64-gnu/lib/python3.11/unittest/mock.py", line 1446, in __enter__
|
||||
original, local = self.get_original()
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "/home/hermes/.local/share/uv/python/cpython-3.11.16-linux-x86_64-gnu/lib/python3.11/unittest/mock.py", line 1419, in get_original
|
||||
raise AttributeError(
|
||||
AttributeError: <module 'ambience_audio' from '/home/hermes/worktrees/find-word-v0.2.3/scripts/ambience_audio.py'> does not have the attribute 'atomic_publish'
|
||||
FAIL
|
||||
test_staged_manifest_notice_and_inventory_tampering_are_rejected (test_ambience_audio.AtomicPublication.test_staged_manifest_notice_and_inventory_tampering_are_rejected) ... ERROR
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) ...
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) (dangling=False) ... ERROR
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) (dangling=True) ... ERROR
|
||||
|
||||
======================================================================
|
||||
ERROR: test_exchange_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_exchange_failure_preserves_prior_directory)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 204, in test_exchange_failure_preserves_prior_directory
|
||||
with patch.object(audio.ctypes, "CDLL") as mocked:
|
||||
^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'ctypes'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_staged_manifest_notice_and_inventory_tampering_are_rejected (test_ambience_audio.AtomicPublication.test_staged_manifest_notice_and_inventory_tampering_are_rejected)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 181, in test_staged_manifest_notice_and_inventory_tampering_are_rejected
|
||||
validate = audio.validate_bundle
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'validate_bundle'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) (dangling=False)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 174, in test_symlink_output_is_rejected_before_conversion
|
||||
audio.generate(self.plan, self.sources, link, converter=converter)
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/scripts/ambience_audio.py", line 114, in generate
|
||||
entry.update({"file": name, "sourceSha256": digest(source), "sourceBytes": source.stat().st_size,
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
TypeError: Mock.keys() returned a non-iterable (type Mock)
|
||||
|
||||
======================================================================
|
||||
ERROR: test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) (dangling=True)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 174, in test_symlink_output_is_rejected_before_conversion
|
||||
audio.generate(self.plan, self.sources, link, converter=converter)
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/scripts/ambience_audio.py", line 114, in generate
|
||||
entry.update({"file": name, "sourceSha256": digest(source), "sourceBytes": source.stat().st_size,
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
TypeError: Mock.keys() returned a non-iterable (type Mock)
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='street')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='mall')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='theater')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='department')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='market')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='subway')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='cafe')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) (asset='rain')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 139, in test_all_eight_assets_validated_before_publication
|
||||
with self.assertRaises(ValueError): self.run_generate(broken)
|
||||
AssertionError: ValueError not raised
|
||||
|
||||
======================================================================
|
||||
FAIL: test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem (test_ambience_audio.AtomicPublication.test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 118, in test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem
|
||||
self.assertEqual({p.name for p in self.output.iterdir()}, expected)
|
||||
AssertionError: Items in the first set but not the second:
|
||||
'old'
|
||||
Items in the second set but not the first:
|
||||
'AMBIENCE_NOTICES.md'
|
||||
|
||||
======================================================================
|
||||
FAIL: test_first_publication_and_real_exchange (test_ambience_audio.AtomicPublication.test_first_publication_and_real_exchange)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 214, in test_first_publication_and_real_exchange
|
||||
self.assertTrue((self.output / "AMBIENCE_NOTICES.md").is_file())
|
||||
AssertionError: False is not true
|
||||
|
||||
======================================================================
|
||||
FAIL: test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) (file='AMBIENCE_NOTICES.md')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 164, in test_manifest_and_notice_write_failures_preserve_prior_directory
|
||||
self.assert_prior()
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 112, in assert_prior
|
||||
self.assertEqual({p.name: p.read_bytes() for p in self.output.iterdir()}, {"old": b"prior release"})
|
||||
AssertionError: {'subway.wav': b'RIFF$\xca\x08\x00WAVEfmt \[15606259 chars]x00'} != {'old': b'prior release'}
|
||||
Diff is 21440297 characters long. Set self.maxDiff to None to see it.
|
||||
|
||||
======================================================================
|
||||
FAIL: test_sigterm_before_commit_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_sigterm_before_commit_preserves_prior_directory)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.3/tests/python/test_ambience_audio.py", line 233, in test_sigterm_before_commit_preserves_prior_directory
|
||||
self.assertTrue(reached.wait(10), "validated stage must reach commit")
|
||||
AssertionError: False is not true : validated stage must reach commit
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 9 tests in 12.490s
|
||||
|
||||
FAILED (failures=12, errors=4)
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,12 @@
|
||||
$ npx vitest run tests/ambience.test.ts tests/App.test.tsx -t 현장 녹음은|환경음 저작자
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
|
||||
Test Files 2 passed (2)
|
||||
Tests 2 passed | 23 skipped (25)
|
||||
Start at 08:53:30
|
||||
Duration 1.18s (environment 42%, tests 33%, setup 15%, transform 7%, import 4%, worker 1%)
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,61 @@
|
||||
$ npx vitest run tests/ambience.test.ts tests/App.test.tsx -t 현장 녹음은|환경음 저작자
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
❯ tests/ambience.test.ts (2 tests | 1 failed | 1 skipped) 16ms
|
||||
× 여덟 현장 녹음은 고유 PCM16 WAV·짧은 fade·완전한 provenance/notice를 가진다 15ms
|
||||
❯ tests/App.test.tsx (23 tests | 1 failed | 22 skipped) 200ms
|
||||
× 환경음 저작자·라이선스 고지를 같은 출처 링크로 제공한다 198ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/App.test.tsx > 환경음 저작자·라이선스 고지를 같은 출처 링크로 제공한다
|
||||
Error: expect(element).toHaveAttribute("href", "/ambience/AMBIENCE_NOTICES.md") // element.getAttribute("href") === "/ambience/AMBIENCE_NOTICES.md"
|
||||
|
||||
Expected the element to have attribute:
|
||||
href="/ambience/AMBIENCE_NOTICES.md"
|
||||
Received:
|
||||
href="/AMBIENCE_NOTICES.md"
|
||||
❯ tests/App.test.tsx:485:5
|
||||
483| expect(
|
||||
484| screen.getByRole("link", { name: "환경음 출처·라이선스" }),
|
||||
485| ).toHaveAttribute("href", "/ambience/AMBIENCE_NOTICES.md");
|
||||
| ^
|
||||
486| });
|
||||
487|
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯
|
||||
|
||||
FAIL tests/ambience.test.ts > 여덟 현장 녹음은 고유 PCM16 WAV·짧은 fade·완전한 provenance/notice를 가진다
|
||||
AssertionError: expected [ 'cafe.wav', 'department.wav', …(7) ] to deeply equal [ 'AMBIENCE_NOTICES.md', …(9) ]
|
||||
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
[
|
||||
- "AMBIENCE_NOTICES.md",
|
||||
"cafe.wav",
|
||||
"department.wav",
|
||||
"mall.wav",
|
||||
"manifest.json",
|
||||
"market.wav",
|
||||
|
||||
❯ tests/ambience.test.ts:16:49
|
||||
14| manifest.files.map((f: { environmentId: string }) => f.environment…
|
||||
15| ).toEqual(ENVIRONMENTS.map((e) => e.id));
|
||||
16| expect(readdirSync("public/ambience").sort()).toEqual(
|
||||
| ^
|
||||
17| [...ENVIRONMENTS.map((e) => `${e.id}.wav`), "manifest.json", "AMBI…
|
||||
18| );
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯
|
||||
|
||||
|
||||
Test Files 2 failed (2)
|
||||
Tests 2 failed | 23 skipped (25)
|
||||
Start at 08:51:12
|
||||
Duration 1.15s (environment 50%, setup 19%, tests 18%, transform 7%, import 5%, worker 1%)
|
||||
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,12 @@
|
||||
$ npx vitest run tests/build.test.ts
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
|
||||
Test Files 1 passed (1)
|
||||
Tests 27 passed (27)
|
||||
Start at 08:54:02
|
||||
Duration 17.24s (tests 99%, setup 1%)
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,480 @@
|
||||
$ npx vitest run tests/build.test.ts -t 고지는 각
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
❯ tests/build.test.ts (21 tests | 8 failed | 13 skipped) 11103ms
|
||||
× street 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1389ms
|
||||
× mall 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1388ms
|
||||
× theater 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1377ms
|
||||
× department 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1360ms
|
||||
× market 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1376ms
|
||||
× subway 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1387ms
|
||||
× cafe 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1408ms
|
||||
× rain 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다 1416ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 8 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/build.test.ts > street 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: street: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > street 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: street: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > street 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: street: License:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > street 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: street: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > street 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: street: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > mall 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: mall: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > mall 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: mall: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > mall 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: mall: License:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > mall 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: mall: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > mall 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: mall: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > theater 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: theater: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > theater 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: theater: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > theater 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: theater: License:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > theater 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: theater: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > theater 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: theater: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > department 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: department: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > department 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: department: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > department 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: department: License:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > department 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: department: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > department 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: department: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > market 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: market: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > market 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: market: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > market 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: market: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > market 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: market: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > subway 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: subway: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > subway 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: subway: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > subway 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: subway: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > subway 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: subway: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > cafe 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: cafe: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > cafe 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: cafe: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > cafe 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: cafe: License:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > cafe 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: cafe: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > cafe 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: cafe: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > rain 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: rain: Creator:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > rain 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: rain: Download:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > rain 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: rain: License:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > rain 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: rain: Output license:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/38]⎯
|
||||
|
||||
FAIL tests/build.test.ts > rain 고지는 각 항목에 저작자·원문·다운로드·라이선스·파생권리·변경을 모두 포함한다
|
||||
AssertionError: rain: Changes:: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:172:48
|
||||
170| modified[index] = modified[index]!.split("\n").filter((line) =…
|
||||
171| writeNotice(modified.join("## "));
|
||||
172| expect.soft(verify, `${id}: ${field}`).toThrow();
|
||||
| ^
|
||||
173| }
|
||||
174| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/38]⎯
|
||||
|
||||
|
||||
Test Files 1 failed (1)
|
||||
Tests 8 failed | 13 skipped (21)
|
||||
Start at 08:52:37
|
||||
Duration 11.45s (tests 99%, setup 1%)
|
||||
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,39 @@
|
||||
$ npx vitest run tests/build.test.ts -t 승인 .*계약
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
❯ tests/build.test.ts (27 tests | 6 failed | 21 skipped) 2633ms
|
||||
× 현장음 manifest 사본을 함께 바꿔도 승인 sourceSha256 계약 위반을 거부한다 452ms
|
||||
× 현장음 manifest 사본을 함께 바꿔도 승인 expectedSourceSha256 계약 위반을 거부한다 433ms
|
||||
× 현장음 manifest 사본을 함께 바꿔도 승인 sourceBytes 계약 위반을 거부한다 434ms
|
||||
× 현장음 manifest 사본을 함께 바꿔도 승인 directMediaDurationSeconds 계약 위반을 거부한다 441ms
|
||||
× 현장음 manifest 사본을 함께 바꿔도 승인 outputLicense 계약 위반을 거부한다 438ms
|
||||
× 현장음 manifest 사본을 함께 바꿔도 승인 operations 계약 위반을 거부한다 433ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 6 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/build.test.ts > 현장음 manifest 사본을 함께 바꿔도 승인 sourceSha256 계약 위반을 거부한다
|
||||
FAIL tests/build.test.ts > 현장음 manifest 사본을 함께 바꿔도 승인 expectedSourceSha256 계약 위반을 거부한다
|
||||
FAIL tests/build.test.ts > 현장음 manifest 사본을 함께 바꿔도 승인 sourceBytes 계약 위반을 거부한다
|
||||
FAIL tests/build.test.ts > 현장음 manifest 사본을 함께 바꿔도 승인 directMediaDurationSeconds 계약 위반을 거부한다
|
||||
FAIL tests/build.test.ts > 현장음 manifest 사본을 함께 바꿔도 승인 outputLicense 계약 위반을 거부한다
|
||||
FAIL tests/build.test.ts > 현장음 manifest 사본을 함께 바꿔도 승인 operations 계약 위반을 거부한다
|
||||
AssertionError: expected [Function verify] to throw an error
|
||||
❯ tests/build.test.ts:196:22
|
||||
194| for (const dir of ["public", "dist"])
|
||||
195| writeFileSync(join(temporary, dir, "ambience/manifest.json"), …
|
||||
196| expect(verify).toThrow();
|
||||
| ^
|
||||
197| } finally { rmSync(temporary, { recursive: true, force: true }); }
|
||||
198| },
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/6]⎯
|
||||
|
||||
|
||||
Test Files 1 failed (1)
|
||||
Tests 6 failed | 21 skipped (27)
|
||||
Start at 08:53:03
|
||||
Duration 2.92s (tests 94%, setup 4%, transform 1%)
|
||||
|
||||
|
||||
EXIT_CODE=1
|
||||
@@ -0,0 +1,19 @@
|
||||
$ python3 -m unittest discover -s tests/python -p test_ambience_audio.py -k AtomicPublication -v
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) ... ok
|
||||
test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem (test_ambience_audio.AtomicPublication.test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem) ... ok
|
||||
test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory) ... ok
|
||||
test_exchange_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_exchange_failure_preserves_prior_directory) ... ok
|
||||
test_first_publication_and_real_exchange (test_ambience_audio.AtomicPublication.test_first_publication_and_real_exchange) ... ok
|
||||
test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) ... ok
|
||||
test_readers_observe_whole_directory_during_real_exchange (test_ambience_audio.AtomicPublication.test_readers_observe_whole_directory_during_real_exchange) ... ok
|
||||
test_sigterm_before_commit_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_sigterm_before_commit_preserves_prior_directory) ... ok
|
||||
test_staged_manifest_notice_and_inventory_tampering_are_rejected (test_ambience_audio.AtomicPublication.test_staged_manifest_notice_and_inventory_tampering_are_rejected) ... ok
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) ... ok
|
||||
test_unsupported_atomic_exchange_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_unsupported_atomic_exchange_preserves_prior_directory) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 11 tests in 4.791s
|
||||
|
||||
OK
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,25 @@
|
||||
$ npm audit --json
|
||||
{
|
||||
"auditReportVersion": 2,
|
||||
"vulnerabilities": {},
|
||||
"metadata": {
|
||||
"vulnerabilities": {
|
||||
"info": 0,
|
||||
"low": 0,
|
||||
"moderate": 0,
|
||||
"high": 0,
|
||||
"critical": 0,
|
||||
"total": 0
|
||||
},
|
||||
"dependencies": {
|
||||
"prod": 4,
|
||||
"dev": 260,
|
||||
"optional": 27,
|
||||
"peer": 8,
|
||||
"peerOptional": 0,
|
||||
"total": 263
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,18 @@
|
||||
$ npm run build
|
||||
|
||||
> find-word@0.2.3 build
|
||||
> tsc --noEmit && vite build && node scripts/check-build.mjs
|
||||
|
||||
vite v8.3.4 building client environment for production...
|
||||
transforming...
|
||||
✓ 21 modules transformed.
|
||||
rendering chunks...
|
||||
computing gzip size...
|
||||
dist/index.html 1.31 kB │ gzip: 0.91 kB
|
||||
dist/assets/index-CgXbHuMU.css 16.11 kB │ gzip: 4.53 kB
|
||||
dist/assets/index-BChkBncw.js 247.95 kB │ gzip: 78.07 kB
|
||||
|
||||
✓ built in 438ms
|
||||
빌드 음성 자산 101개 + 현장음 8개 및 런타임/현장음 notice 확인
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,7 @@
|
||||
$ npm run lint
|
||||
|
||||
> find-word@0.2.3 lint
|
||||
> eslint . && tsc --noEmit
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,451 @@
|
||||
$ python3 -m unittest discover -s tests/python -v
|
||||
test_convert_format_fade_normalization_and_reproducibility (test_ambience_audio.AmbienceConversion.test_convert_format_fade_normalization_and_reproducibility)
|
||||
스테레오 48kHz 입력을 실제로 내려 섞고 길이·양끝·안전 피크를 확인한다. ... ok
|
||||
test_silence_fails_before_publishing (test_ambience_audio.AmbienceConversion.test_silence_fails_before_publishing)
|
||||
무음을 정상 현장 녹음으로 포장하지 않는다. ... ok
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) ... ok
|
||||
test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem (test_ambience_audio.AtomicPublication.test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem) ... ok
|
||||
test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory) ... ok
|
||||
test_exchange_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_exchange_failure_preserves_prior_directory) ... ok
|
||||
test_first_publication_and_real_exchange (test_ambience_audio.AtomicPublication.test_first_publication_and_real_exchange) ... ok
|
||||
test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) ... ok
|
||||
test_readers_observe_whole_directory_during_real_exchange (test_ambience_audio.AtomicPublication.test_readers_observe_whole_directory_during_real_exchange) ... ok
|
||||
test_sigterm_before_commit_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_sigterm_before_commit_preserves_prior_directory) ... ok
|
||||
test_staged_manifest_notice_and_inventory_tampering_are_rejected (test_ambience_audio.AtomicPublication.test_staged_manifest_notice_and_inventory_tampering_are_rejected) ... ok
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) ... ok
|
||||
test_unsupported_atomic_exchange_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_unsupported_atomic_exchange_preserves_prior_directory) ... ok
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) ... ok
|
||||
test_all_101_are_validated_before_single_atomic_publication (test_neural_audio.GeneratorContract.test_all_101_are_validated_before_single_atomic_publication) ... [001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_atomic_exchange_keeps_old_tree_at_staging_path (test_neural_audio.GeneratorContract.test_atomic_exchange_keeps_old_tree_at_staging_path) ... ok
|
||||
test_atomic_first_publication (test_neural_audio.GeneratorContract.test_atomic_first_publication) ... ok
|
||||
test_cli_import_has_no_generation_or_filesystem_side_effects (test_neural_audio.GeneratorContract.test_cli_import_has_no_generation_or_filesystem_side_effects) ... ok
|
||||
test_edge_adapter_uses_pinned_python_prosody_timeout_and_no_shell (test_neural_audio.GeneratorContract.test_edge_adapter_uses_pinned_python_prosody_timeout_and_no_shell) ... ok
|
||||
test_exhausted_provider_failure_preserves_existing_files_and_redacts_secrets (test_neural_audio.GeneratorContract.test_exhausted_provider_failure_preserves_existing_files_and_redacts_secrets) ... ok
|
||||
test_ffmpeg_adapter_actually_decodes_mp3_to_normalized_pcm24 (test_neural_audio.GeneratorContract.test_ffmpeg_adapter_actually_decodes_mp3_to_normalized_pcm24) ... ok
|
||||
test_ffmpeg_failure_is_not_retried_and_preserves_existing_files (test_neural_audio.GeneratorContract.test_ffmpeg_failure_is_not_retried_and_preserves_existing_files) ... ok
|
||||
test_full_validation_detects_changed_earlier_file_before_publication (test_neural_audio.GeneratorContract.test_full_validation_detects_changed_earlier_file_before_publication) ... [001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_interruption_preserves_existing_files_and_cleans_temporary_data (test_neural_audio.GeneratorContract.test_interruption_preserves_existing_files_and_cleans_temporary_data) ... ok
|
||||
test_invalid_pcm_never_reaches_publication (test_neural_audio.GeneratorContract.test_invalid_pcm_never_reaches_publication) ... ok
|
||||
test_publication_failure_preserves_existing_files (test_neural_audio.GeneratorContract.test_publication_failure_preserves_existing_files) ... [001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_rejects_incomplete_or_duplicate_or_unsafe_inventory_before_requests (test_neural_audio.GeneratorContract.test_rejects_incomplete_or_duplicate_or_unsafe_inventory_before_requests) ... ok
|
||||
test_timeout_is_bounded_and_preserves_existing_files (test_neural_audio.GeneratorContract.test_timeout_is_bounded_and_preserves_existing_files) ... intro.wav: provider 시도 1/3 실패
|
||||
intro.wav: provider 시도 2/3 실패
|
||||
intro.wav: provider 시도 3/3 실패
|
||||
ok
|
||||
test_transient_provider_failures_retry_cleanly_with_bounded_backoff (test_neural_audio.GeneratorContract.test_transient_provider_failures_retry_cleanly_with_bounded_backoff) ... intro.wav: provider 시도 1/3 실패
|
||||
intro.wav: provider 시도 2/3 실패
|
||||
[001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_wrong_edge_version_fails_before_network_or_asset_changes (test_neural_audio.GeneratorContract.test_wrong_edge_version_fails_before_network_or_asset_changes) ... ok
|
||||
test_rejects_silence_clipping_bad_format_and_abnormal_duration (test_neural_audio.PCMContract.test_rejects_silence_clipping_bad_format_and_abnormal_duration) ... ok
|
||||
test_valid_pcm_returns_measured_hash_bytes_duration_and_levels (test_neural_audio.PCMContract.test_valid_pcm_returns_measured_hash_bytes_duration_and_levels) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 32 tests in 22.430s
|
||||
|
||||
OK
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,19 @@
|
||||
$ npm test
|
||||
|
||||
> find-word@0.2.3 test
|
||||
> vitest run
|
||||
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||||
|
||||
|
||||
Test Files 13 passed (13)
|
||||
Tests 118 passed (118)
|
||||
Start at 08:56:47
|
||||
Duration 31.35s (tests 88%, environment 7%, setup 3%, transform 1%)
|
||||
|
||||
Isolate 13 workers spawned · ~637ms startup each (spawn + environment, per file)
|
||||
at least ~2.12s faster with isolate: false — reuses workers across files instead of one per file
|
||||
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,56 @@
|
||||
$ env CHROME_PATH=/usr/bin/google-chrome PLAYWRIGHT_NO_SANDBOX=0 PLAYWRIGHT_JSON_OUTPUT_FILE=.agent/evidence-v0.2.3/review-fixes/browser-results.json npx playwright test --reporter=line,json --output=.agent/evidence-v0.2.3/review-fixes/browser-final
|
||||
[WebServer] (node:1040610) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
Running 30 tests using 2 workers
|
||||
|
||||
(node:1040714) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
(node:1040717) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
[1/30] [desktop] › tests/browser/audio.spec.ts:7:1 › 음성·현장음 109개 versioned WAV를 실제 Chrome에서 해시·디코드 검증한다
|
||||
[2/30] [desktop] › tests/browser/game.spec.ts:8:1 › 실제 오디오로 혼합 모드 완주·레이아웃·접근성·외부 요청 없음
|
||||
[3/30] [desktop] › tests/browser/game.spec.ts:130:3 › intro WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[4/30] [desktop] › tests/browser/game.spec.ts:130:3 › target WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[5/30] [desktop] › tests/browser/release.spec.ts:6:1 › 릴리스는 사용자 크레딧과 런타임 MIT notice 전문을 제공한다
|
||||
[6/30] [desktop] › tests/browser/release.spec.ts:24:1 › 누락 음성·환경음은 query와 HTML accept에도 404이고 출처 고지는 번들된다
|
||||
[7/30] [desktop] › tests/browser/review-fixes.spec.ts:27:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
[8/30] [desktop] › tests/browser/review-fixes.spec.ts:62:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다
|
||||
[9/30] [desktop] › tests/browser/rounds.spec.ts:35:1 › 시작 단계·SNR·3문항 완료→다음 단계·재생 중 종료·응답 후 종료·홈 초기화
|
||||
[10/30] [desktop] › tests/browser/rounds.spec.ts:135:1 › 여덟 환경의 실제 WAV를 각각 디코드하고 루프 재생한 뒤 즉시 정지한다
|
||||
[11/30] [desktop] › tests/browser/rounds.spec.ts:178:1 › 환경음 404는 한국어 오류와 재시도 후 정상 답변으로 복구한다
|
||||
[12/30] [desktop] › tests/browser/ui.spec.ts:4:1 › 전체 음량은 설정 흐름 안에 들어가며 키보드로 조절된다
|
||||
[13/30] [desktop] › tests/browser/ui.spec.ts:52:1 › 난이도 설명은 모바일에서도 보인다
|
||||
[14/30] [desktop] › tests/browser/ui.spec.ts:68:1 › 한국어 제목은 단어 중간에서 줄바꿈하지 않는다
|
||||
[15/30] [desktop] › tests/browser/ui.spec.ts:121:1 › 시작 단계와 SNR 설정은 카드 안에 들어가고 터치 영역을 확보한다
|
||||
(node:1041784) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
[16/30] [mobile] › tests/browser/audio.spec.ts:7:1 › 음성·현장음 109개 versioned WAV를 실제 Chrome에서 해시·디코드 검증한다
|
||||
(node:1041930) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
[17/30] [mobile] › tests/browser/game.spec.ts:8:1 › 실제 오디오로 혼합 모드 완주·레이아웃·접근성·외부 요청 없음
|
||||
[18/30] [mobile] › tests/browser/game.spec.ts:130:3 › intro WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[19/30] [mobile] › tests/browser/game.spec.ts:130:3 › target WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[20/30] [mobile] › tests/browser/release.spec.ts:6:1 › 릴리스는 사용자 크레딧과 런타임 MIT notice 전문을 제공한다
|
||||
[21/30] [mobile] › tests/browser/release.spec.ts:24:1 › 누락 음성·환경음은 query와 HTML accept에도 404이고 출처 고지는 번들된다
|
||||
[22/30] [mobile] › tests/browser/review-fixes.spec.ts:27:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
[23/30] [mobile] › tests/browser/review-fixes.spec.ts:62:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다
|
||||
[24/30] [mobile] › tests/browser/rounds.spec.ts:35:1 › 시작 단계·SNR·3문항 완료→다음 단계·재생 중 종료·응답 후 종료·홈 초기화
|
||||
[25/30] [mobile] › tests/browser/rounds.spec.ts:135:1 › 여덟 환경의 실제 WAV를 각각 디코드하고 루프 재생한 뒤 즉시 정지한다
|
||||
[26/30] [mobile] › tests/browser/rounds.spec.ts:178:1 › 환경음 404는 한국어 오류와 재시도 후 정상 답변으로 복구한다
|
||||
[27/30] [mobile] › tests/browser/ui.spec.ts:4:1 › 전체 음량은 설정 흐름 안에 들어가며 키보드로 조절된다
|
||||
[28/30] [mobile] › tests/browser/ui.spec.ts:52:1 › 난이도 설명은 모바일에서도 보인다
|
||||
[29/30] [mobile] › tests/browser/ui.spec.ts:68:1 › 한국어 제목은 단어 중간에서 줄바꿈하지 않는다
|
||||
[30/30] [mobile] › tests/browser/ui.spec.ts:121:1 › 시작 단계와 SNR 설정은 카드 안에 들어가고 터치 영역을 확보한다
|
||||
30 passed (4.0m)
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,3 @@
|
||||
$ git diff --check
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,14 @@
|
||||
$ python3 .cache/review_final_check.py
|
||||
baseline-sha256.json 377 files unchanged
|
||||
verified-code-sha256.json 12 files unchanged
|
||||
{
|
||||
"node": "v26.7.0",
|
||||
"npm": "11.19.0",
|
||||
"python": "Python 3.11.16",
|
||||
"ffmpeg": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers",
|
||||
"chrome": "Google Chrome 146.0.7680.80 ",
|
||||
"head": "c92660b514f7af8eb556d3fa5c0fc80e4bdd4cf5"
|
||||
}
|
||||
RESULT local evidence links valid; git diff --check passed; all historical evidence and 109 WAVs preserved
|
||||
|
||||
EXIT_CODE=0
|
||||
@@ -0,0 +1,379 @@
|
||||
{
|
||||
".agent/ACCEPTANCE-v0.1.1.md": "7e9d5aa5c608d3d86c0c30a51a8322713a2c5d072e57002ac5af9b63127c68a5",
|
||||
".agent/CONTEXT.md": "712bd056cfc8d0254d6c96e7a604d364779d3734d14899111792e7f343e6819b",
|
||||
".agent/TASK-v0.1.1.md": "4e4a81c02cf16ae8a2a6b53da8501de512b6a6387d7d4eaf932833c63ada4aa7",
|
||||
".agent/TASK-v0.2.3.md": "46ae8118506c756b97e29424e580843d0557c2f663f069e9ae71c04904fafb18",
|
||||
".agent/TASK.md": "7e52739d5de3161aa60004ca8e65b5a5041d62c1b6a0e50c6c72ad8f6b183d61",
|
||||
".agent/RESULT-v0.1.1.md": "d5d7077d4977d70a89086801dd8e7d5ae04e16a8e8009e41f3216008b743ac5b",
|
||||
".agent/RESULT.md": "eef6d73a67a8a7e90cd7b4747debc5976cc51571bc268328634413f698d0e311",
|
||||
".agent/ACCEPTANCE-v0.2.3.md": "4698a24cf492562c0f10b243c06a0ed2f930a9f0828f3ac08e0507d7a1cf7267",
|
||||
".agent/ACCEPTANCE.md": "57598e4c5c37a658ce5fe366826983987178ed9c565355413ab3669c839eec78",
|
||||
".agent/evidence-v0.2.3/secret-scan.json": "8928209f4e2bef083901f845ae3fd8e949c0a266cefa15ff4563eef337a008d2",
|
||||
".agent/evidence-v0.2.3/19-favicon-GREEN.log": "34fd3cd00d40ae5766b2364cef81fe90accc8f8ec03788959680d118ecbf9b13",
|
||||
".agent/evidence-v0.2.3/20-lint.log": "058127eb4022e13fe809a0c56c3d3a43177b6088f284811e926452185772de6b",
|
||||
".agent/evidence-v0.2.3/environment.json": "9e1c233d564982ef3b9712c2bcb5c85aef32d2276d0c3b6f5e02a009db76796e",
|
||||
".agent/evidence-v0.2.3/chrome-sandbox.json": "0e0d0d3a4618e4c607a6cccd1ff04d9fdc9dcc70ff76e909e614e90b6607cae8",
|
||||
".agent/evidence-v0.2.3/20-browser.log": "cfc61835f7061d6301b54ce07e8f1c1aaba5c3a29d7df85d767eb1cf898217a6",
|
||||
".agent/evidence-v0.2.3/04-recorded-mix-RED.log": "b74bfd906276af2211ccbc8a6da10ebf86146fda613622c20e4a939ae45dd55f",
|
||||
".agent/evidence-v0.2.3/12-build-initial.log": "508b0f60d2378679873fbd17784725323fe7ccc267fb3b8b180a7bd59b861176",
|
||||
".agent/evidence-v0.2.3/browser-favicon-RED.json": "036a734efcdff9481b3d10f1b07159ef6ca056d9245cffa469c5b1c8fe87f2bb",
|
||||
".agent/evidence-v0.2.3/08-heard-snr-GREEN.log": "347cdd6ceffa01e0227a17b5af604e96e8081aeaadfc95cf33155ab0af0f813b",
|
||||
".agent/evidence-v0.2.3/14-browser-initial.log": "d2178d18a7e1b2f84e4a430a884ca442070b1a455217f6f594ed4c5f160b426e",
|
||||
".agent/evidence-v0.2.3/22-browser.log": "b2e4e82e78376042ea1297c930403889b22e8a275e226736c232b8cbaa74fadd",
|
||||
".agent/evidence-v0.2.3/commons-license-audit.json": "2a36e3ac168d223849a2f171457ebd87b236301a65c8e13f5061f484c18e31d6",
|
||||
".agent/evidence-v0.2.3/22-full-test.log": "c3f38be3d6e00dc983e29a3cbfb632192a0fe64c151f06edcd8b35188edcde5c",
|
||||
".agent/evidence-v0.2.3/preservation.json": "a938ce612b594f99e4bbd2457f3a2c665af4aeb6a465ca4c459d74c5375eb4ff",
|
||||
".agent/evidence-v0.2.3/15-results-anchor-RED.log": "cb113c8ceeeb48d7573b1de0b9d8263e25e4f7a28dd811404a057d5d6c623157",
|
||||
".agent/evidence-v0.2.3/17-bonus-copy-GREEN.log": "f988cf9fda0bc4dd4b7818dde11094f6fb75b9540ccfcb9f964acec003ff3de7",
|
||||
".agent/evidence-v0.2.3/21-select-label-RED.log": "149ee8ca004c8f63765d642305cf9e6b0ad3de5986bf0dcefaf656844c22a73d",
|
||||
".agent/evidence-v0.2.3/source-integrity.json": "61c080d80081a3fdc9b2c78a4183805df6293184add2bca9534aee8d82bd5b96",
|
||||
".agent/evidence-v0.2.3/18-format.log": "d78946d25140238f764ccf3fca989a0aa42b25162cfba7d92dbb10256db45401",
|
||||
".agent/evidence-v0.2.3/05-playback-GREEN.log": "4d43b75d4671d9aaffaa5db4d32299260a440978a3699c92d384443ba4766bea",
|
||||
".agent/evidence-v0.2.3/15-results-anchor-GREEN.log": "48c5b15b6b2dc661a0410af2cfe501d9efafac55d085c29ab74f44ea76e7e8a3",
|
||||
".agent/evidence-v0.2.3/22-lint.log": "058127eb4022e13fe809a0c56c3d3a43177b6088f284811e926452185772de6b",
|
||||
".agent/evidence-v0.2.3/14-full-test-initial.log": "08a7d3bb30acbc04f9b63e49a0ba5a34628e00613a97660cfb6f467c74854aee",
|
||||
".agent/evidence-v0.2.3/07-converter-GREEN.log": "53a049e86064db709a80d1487a099fe154f99fb6a9821639a24390f88aacbf5a",
|
||||
".agent/evidence-v0.2.3/03-screen-RED.log": "98e50844d757b9dee2426f93ed89ab6d158b30116212908fd098eda68f4b848b",
|
||||
".agent/evidence-v0.2.3/rain-download.log": "701d47a1c31b5232d682641f05d71c01dc908b03b58ed1bc270a27ba9b32fea0",
|
||||
".agent/evidence-v0.2.3/source-downloads.log": "c49692acca2fddc1cdbea155ef0ae6191a9f7eeee3508d3bf608a71bec349e46",
|
||||
".agent/evidence-v0.2.3/20-full-test.log": "10c46b00ad407161154f57c060599dca379effef2c5c80e0d24edd366c08817a",
|
||||
".agent/evidence-v0.2.3/01-round-RED.log": "986a49e5522b1c7dbadf97e0c308af87de589d7a9524ec85c4ba891deb603d3f",
|
||||
".agent/evidence-v0.2.3/13-static-404-RED.log": "7b4822f9d121f963dbab27155aaf0627fbbfbadd855adf4da4224388e35b230c",
|
||||
".agent/evidence-v0.2.3/13-static-404-GREEN.log": "dee59b03d1eb3e0a59828d4f50ea372c78c231000cdd1c77965fcdf42864042b",
|
||||
".agent/evidence-v0.2.3/final-review.log": "1692e79cc7e03cd3a71e10f4497914df13931aa08e1c5a66a84545ce318b5ea4",
|
||||
".agent/evidence-v0.2.3/03-screen-duplicate-description-RED.log": "186940b7e422c6096fdc3c3cf4280661a75d4f02d3b97e3015a070f5d8ff0323",
|
||||
".agent/evidence-v0.2.3/03-screen-GREEN.log": "39564011526efb4ff5a277774394d26ae8e8d241e233d53a950cd258ed26c001",
|
||||
".agent/evidence-v0.2.3/18-python.log": "911637068f7c09de38cd38b9d13cdb23b365812521ed8b1f75328b1960b085bf",
|
||||
".agent/evidence-v0.2.3/11-bundle-notice-GREEN.log": "d6ba07866a02eab665c215f1ce6588e4f5a9157baf4be6e9befba0f945e379bd",
|
||||
".agent/evidence-v0.2.3/18-build.log": "3f0bd258866ed4f29f8a8ab5d88fc7db68f67abe9bc51fed22563d51200d9f72",
|
||||
".agent/evidence-v0.2.3/21-format.log": "48a148bd43ecea64bd7604be2431e2072fe390bbc578a71d65df4d1c0a369412",
|
||||
".agent/evidence-v0.2.3/08-heard-snr-RED.log": "82b0d04bfd2e99ad36b59325581b5527fa1fa8ae8953db3ed402fb381356fd90",
|
||||
".agent/evidence-v0.2.3/09-version-docs-GREEN.log": "8ac6c86e13de85121607e93da4316c2220ad0edb95ac091048767a903f65152c",
|
||||
".agent/evidence-v0.2.3/browser-results.json": "060d18bd74f7179884205117c6c853dc783ec7a818bdfcc8a490ef1a679c77f6",
|
||||
".agent/evidence-v0.2.3/02-snr-exit-RED.log": "ac7bc8813ca67a1413678e97c36d05e03bd1f3d9c99656671e3a81bac38c89ac",
|
||||
".agent/evidence-v0.2.3/01-round-GREEN.log": "80beec689bea21086449b7edc9c61414af289722584478463fdd5deac9cba39d",
|
||||
".agent/evidence-v0.2.3/05-playback-fixture-regression.log": "925f6be228ab0eb568c27d79fb1b477a8737cfd94be34d0f7d79d1d7e4989bfa",
|
||||
".agent/evidence-v0.2.3/14-npm-audit.json": "ea7bab3cc606a95eecdf538b0d02d3cf928bf0f3a1cfb1d2c8ddbe02846d5658",
|
||||
".agent/evidence-v0.2.3/07-assets-GREEN.log": "f04418ee6b67f14c62e17c53027e7ea1bde58d38a7cdc54f0edee15e1643847e",
|
||||
".agent/evidence-v0.2.3/06-node-import-RED.log": "9b7ed2c611e2e36041f8a34e3295ad2ff506f0feb427e4a51978ce9efc252cf1",
|
||||
".agent/evidence-v0.2.3/11-bundle-notice-RED.log": "82d52d3905b35948abbaf7e912de5480a959780731fd04be4110674cf2d6ec63",
|
||||
".agent/evidence-v0.2.3/01-round-sampling-regression.log": "e71f6e853a00941decac3df722369f3bba38f177b8d4ceb7be326522326604f5",
|
||||
".agent/evidence-v0.2.3/04-recorded-mix-GREEN.log": "323468e46e58b9f51340f63ecc41fc0bfd9fcd4a9e91e409550d484c49ff6b6e",
|
||||
".agent/evidence-v0.2.3/17-bonus-copy-RED.log": "fd11d5b64c06cfa28c839cdddb7e2f2ac2406f8c1101f1fb9e262ae9cfaf6b85",
|
||||
".agent/evidence-v0.2.3/06-node-import-GREEN.log": "0bceb35eedea301af580ec093349973e9230d37921d5c4476587ee335e28554d",
|
||||
".agent/evidence-v0.2.3/12-lint-initial.log": "7a5fdab53449ff945e4f8694164cbb1792f01a19d3d97c151590df5bdfb1506e",
|
||||
".agent/evidence-v0.2.3/18-browser.log": "a92ba8db852111170403932bb8b4dbd49345936156fbbc3ef61f5c612609a55e",
|
||||
".agent/evidence-v0.2.3/19-favicon-RED.log": "49fc230ab2adeceb6613e6b9019f31f12b2dd3764096a85f391f91e83479e6cb",
|
||||
".agent/evidence-v0.2.3/02-snr-exit-GREEN.log": "6bbf48b3aef1b15de7576a8c4ee5608c382aa5cc92c95a844aca32d705208e23",
|
||||
".agent/evidence-v0.2.3/21-select-label-GREEN.log": "2ce474d915736281c05591c4753e23d555eda186b13c85a2ae96f8481cf35d86",
|
||||
".agent/evidence-v0.2.3/16-controls-build.log": "ae8849619608d58763d2ce301bcdba420054bd29174b1bc8dca86790b82fc5e7",
|
||||
".agent/evidence-v0.2.3/10-environment-rotation-GREEN.log": "5dc34db413e4ed7918dad60a49ae97532d701aa52d10b49459e77f75c925231d",
|
||||
".agent/evidence-v0.2.3/07-converter-RED.log": "53cefcd04c8ac4354b5e891a4e65810c21ece90503a3f2ed3392c046feaeb9c9",
|
||||
".agent/evidence-v0.2.3/09-version-docs-RED.log": "21733781658b1d6525746f6a3dd59337774990c53689f7883e7ff8ddc7c65398",
|
||||
".agent/evidence-v0.2.3/07-asset-conversion.log": "ce2e395db0bfce47953cd7c9ff3311a733376d8109941f7f04a919659f0d95f8",
|
||||
".agent/evidence-v0.2.3/18-full-test.log": "bf358255a30c2d18b82af8f8c5942d0b9ee7c100c40114fe8666e7f564829d79",
|
||||
".agent/evidence-v0.2.3/16-controls-layout-RED.log": "9060a0e1d36a15a35b3b189f5b210fdab9fe9579b06e6b19f645bfe8f2914603",
|
||||
".agent/evidence-v0.2.3/primary-page-verification.json": "2b4a6fcaf55b51a10d378a888a634e7aeac8591d3dd5fa537f4a70806c536fd0",
|
||||
".agent/evidence-v0.2.3/12-lint-followup.log": "058127eb4022e13fe809a0c56c3d3a43177b6088f284811e926452185772de6b",
|
||||
".agent/evidence-v0.2.3/20-build.log": "77a52828d2b1d1d46efa6a3f5b4ded7ca12da6db5896b1ee9a2fefebf50bcb85",
|
||||
".agent/evidence-v0.2.3/16-controls-layout-GREEN.log": "7be2b42602a98167b83c12bce3af7b0856ccd10be68d477e5dba39db99991c03",
|
||||
".agent/evidence-v0.2.3/18-lint.log": "058127eb4022e13fe809a0c56c3d3a43177b6088f284811e926452185772de6b",
|
||||
".agent/evidence-v0.2.3/10-environment-rotation-RED.log": "ae7914b7fca896a77478e36ea79bfc51d3a13f976e0f722c7c1615daf6e6837e",
|
||||
".agent/evidence-v0.2.3/07-assets-RED.log": "5c173b8b2c64b4c661cb58ab22788216b0d90799378a3fcf234087182f3b1d78",
|
||||
".agent/evidence-v0.2.3/22-build.log": "ed77e72c527fa7ab9d9c5c2447cd1bff34824ee6eac384bd18a50303607cbca9",
|
||||
".agent/evidence-v0.2.3/05-playback-RED.log": "02aa8f0a48af5b6f157451029963aa90664c5fedd89491e174e9b2d7bce1d159",
|
||||
".agent/evidence-v0.2.3/browser/desktop-runtime-audit.json": "afdf38d83cf77e91b478bc806f4da007860c5db6e6146995d5d405883de8bc13",
|
||||
".agent/evidence-v0.2.3/browser/mobile-normal-results.png": "5eccd53853c27a7c1385f1219b0a9bb7af60070fbdd1469ef3265e40377f3eaa",
|
||||
".agent/evidence-v0.2.3/browser/mobile-runtime-audit.json": "949c6829af7030728c7382c0ac8bde8a8cd8e3b46cf5a5919f5a6d281d4ba657",
|
||||
".agent/evidence-v0.2.3/browser/mobile-start.png": "c04abd43e93e46fde7e1591bde24a3073d584226e93ba5661bac1b5cd78a4695",
|
||||
".agent/evidence-v0.2.3/browser/mobile-game.png": "f4890f7d61b87c102c68f285108584ac58182186b685f73ea05f64bf51a64a0c",
|
||||
".agent/evidence-v0.2.3/browser/desktop-early-exit.png": "a6a68bcc871939cd945f0b7a96dddd7c3b371b069efa7171fa6d3fe39e352d5f",
|
||||
".agent/evidence-v0.2.3/browser/desktop-game.png": "c7c5a04608075edf836718e6479cc776773fa22d2cd8fe3aa230bdf3ec82ccc1",
|
||||
".agent/evidence-v0.2.3/browser/desktop-start.png": "911b923e3a68e8deb0063efd88ed43eb1ed6c597c14bd5b9ee71f6b5161b6d7b",
|
||||
".agent/evidence-v0.2.3/browser/desktop-audio-integrity.json": "3d6defdb7ad3b8d4d7949ffe476f4ebf685e5dcc1ad0868b98bb4e639b6dcadb",
|
||||
".agent/evidence-v0.2.3/browser/mobile-audio-integrity.json": "3d6defdb7ad3b8d4d7949ffe476f4ebf685e5dcc1ad0868b98bb4e639b6dcadb",
|
||||
".agent/evidence-v0.2.3/browser/mobile-early-exit.png": "5e2ef07c6c3b7672e0aa82f248a5a245d60a10f86633fab2b2dd45ecff81d7fa",
|
||||
".agent/evidence-v0.2.3/browser/desktop-normal-results.png": "cf98d5168a96fac8a87718bd5a771d81e8e02dc4d46c93904556319033fe2bc0",
|
||||
".agent/evidence/release-final-browser.log": "2a9881cef8c379f41abf5d69dd5ad21881988f78c0579c95e463121dc37f6e09",
|
||||
".agent/evidence/14-snr-red.log": "b39bdbd8815d0d9cfcedc41c61124afece2011ea6c6c250b0ee0139eae7e9edd",
|
||||
".agent/evidence/02-game-red.log": "78468ee5c25c1685f3613926f636b6fb4569227533feda3547afc6b8123d6452",
|
||||
".agent/evidence/neo-mobile-heading.png": "ae07d0a1cb6f835525c7e0ef31655a543eaa9e10183596c2d409dead6faccf15",
|
||||
".agent/evidence/final-audit.log": "6d8c5c8f3d7684adb070417bd608d01ae90aa3dc26a65af03ffda4955f38d9a3",
|
||||
".agent/evidence/release-intermediate-lint.log": "ee597e984ebdf11ea247c8cb1551cda446580cbd7a3dc708f85fa78bb72700ad",
|
||||
".agent/evidence/release-mobile-game.png": "83a918e5ff2142e540cd12b85806b3e69a71bc66df5d241f4b2f5abdaf493f82",
|
||||
".agent/evidence/17-spacing-red.log": "12db8083cd8627a81a52cd32358780a3c2257cb3bd702350b190b39226f6550f",
|
||||
".agent/evidence/11-provenance-red.log": "e69fa7989223e659c16b8030f8668e562ad5b0daa060fbb1c9eff41a37fd56fd",
|
||||
".agent/evidence/12-ime-replay-green.log": "a93d9f16c7d81ed5e9a7c0b70ffee1e393d2943ddf3149a5bb115c5517327c44",
|
||||
".agent/evidence/changed-files.txt": "2b609231e5c7becd581f79413a4f7443312e71f0099ac6a51b2c5f0dfdee576f",
|
||||
".agent/evidence/desktop-home.png": "bf2f515fcd483cd5ca9a3b408f484d3556b75b1be0bb70360b7fd5f7c3404993",
|
||||
".agent/evidence/06-ui-05-assets-green.log": "ced2ad738cda673b24308dcb9d99d59e3ae918709eeb32de359d6ab1022133e2",
|
||||
".agent/evidence/13-heading-build-after.log": "19829ac264f97aa023baf7d5e1fd429343272f3bd952e8b6dfb9eec0f594b453",
|
||||
".agent/evidence/03-dsp-intermediate.log": "084a52294f718718256eb1516048a672d045a5f7dcb5d11c646092d29efbab58",
|
||||
".agent/evidence/neo-mobile-home.png": "9b3ba8b0a9f7b321882429e31ac4a0472fcc13a998dfadfc930c273bc37558d4",
|
||||
".agent/evidence/23-delivery-browser-red.log": "180a61bbacf85db9e52f721b50da683103b719bc350454cc99d4c8954b2ae86e",
|
||||
".agent/evidence/audio-reproduce.log": "5f5726f3ed6845882c7a6d6f9a8d898c2b73bf61fa6328e8bbafd25f61ed4268",
|
||||
".agent/evidence/release-desktop-heading.png": "de454d77e29737e23c573646404489d5682004521deabfa01b439d607faa32ca",
|
||||
".agent/evidence/browser-second.log": "2ff1d16f51b9384cf431d5923ad87d773510fe4b89bdf62f09cbda2efae20e3b",
|
||||
".agent/evidence/16-copy-green.log": "dacbdbab5d4af2b6e19eb4e0502a70720aac9fb6cf3b9d6dfdc73a5bf7edabfe",
|
||||
".agent/evidence/15-volume-red.log": "9beae6305080cd0d869bf3fd2093beb6e2e25e5424223aa7e4ad4db96954f37e",
|
||||
".agent/evidence/11-provenance-green.log": "54dcc417b97f82422c5c3e0ae11caa1f15a60412853ea1dc0152d15031bcd935",
|
||||
".agent/evidence/24-retry-final-build.log": "702c20554872e437137097ca59a80d911188477f018bc48c4b49a770b73d5a84",
|
||||
".agent/evidence/24-retry-targeted-green.log": "4e53f2de988040540f5075b2e4a483ca53b671486c35e864fbc3c2c9c5361c61",
|
||||
".agent/evidence/14-snr-build.log": "1e9ce36a48904a58195f9d1c2d9ca6cf2895fcb8bd0b5ab9b72f76e92c6b2585",
|
||||
".agent/evidence/20-mechanics-green.log": "9776c68143f668e35df8b2e19884b25d2369e4800b4c264e635d0c260818c5f1",
|
||||
".agent/evidence/release-docs-final.log": "3529acce5befee536ec7d8e9d22cbbf27182297bb07408ab6e31551aaee76ed3",
|
||||
".agent/evidence/mobile-game.png": "20a3f02f70a28b2faae1b33d0d4d6fea10b77caa426e4bf9faa5ef6d4474a846",
|
||||
".agent/evidence/15-volume-green.log": "0f9a90923f4fdc477c8f2436653eb2bf0e4b251bcb52e795701309ba14f23c7d",
|
||||
".agent/evidence/release-desktop-home.png": "f28f744e11b66373ee8db6eda2f7bdc384da4f7e763fbb467a4cda30090e869b",
|
||||
".agent/evidence/13-heading-build-before.log": "646d197d2ef93c19fec4719e20297de1b22eff54f3e6155ba2125fd3dd372c46",
|
||||
".agent/evidence/neo-desktop-home.png": "826c5da794c4ea3c15bd6c13e81d1c021fbeb8a902fc4908b78f9c457f091c0f",
|
||||
".agent/evidence/neo-desktop-results.png": "98a68ca050a4e66c17dcc3f1bd5f0e86bfc88c2ebe9a75284766d17e10426632",
|
||||
".agent/evidence/neo-before-spacing-browser.log": "e5c214f14bd93ef1bb731f87ecfd3a02d299c9f9e5a788233f6eda5eb8946b4f",
|
||||
".agent/evidence/16-copy-red.log": "ebe3d7c86938d33d7f1a4818b18c7e94ab8feb18bee099fcb535a93d8083861b",
|
||||
".agent/evidence/13-heading-green.log": "d59fa8546083e9d371c7a552287f27bf3acd572bd0cce3da8eba860da5c05880",
|
||||
".agent/evidence/neo-intermediate-build.log": "9d8a1f0586d58196e03e45330b6e8ff5522fdd3c27870aae2fb052199f8cf5cb",
|
||||
".agent/evidence/neo-final-browser.log": "582e7cbb643201e4b197b566b021322448abaae0b383967ad0e816d0c351e96b",
|
||||
".agent/evidence/release-mobile-heading.png": "d5c92a3b62f749d5f064af12efa5a1a2ad13b177270ec01dd10a549a8437899d",
|
||||
".agent/evidence/20-audio-green.log": "edb9b9f0aa1af11835960eee9bb6e8c013341aa528d2857bac0b89ac38457528",
|
||||
".agent/evidence/08-rule-green.log": "91b7ce3fda181fbe51cbe4e6debb61dd44dd55226dcfa81ed73559ba76811f3f",
|
||||
".agent/evidence/browser-first.log": "f3087028d76aae36d61d7a14da488bd809079a9e121a2d8fb01fa034f99d4f05",
|
||||
".agent/evidence/21-node-green.log": "3c36e9e45b6844ae2c184f943b61195482d9de53ceab06221093c8281d210d73",
|
||||
".agent/evidence/neo-desktop-heading.png": "db609f2f54af0e6b1bb96bce9bf839454403d6e2787e6520a2928fad31beb021",
|
||||
".agent/evidence/neo-desktop-game.png": "f5966688ba46f14fab5125452f935e55f6e6dc4355c876416729866129daea70",
|
||||
".agent/evidence/19-notices-green.log": "efc51aca0738f3cb5264ec3c3ad0d17bb150d685f5fdb5e200bc1eedc0e3c02b",
|
||||
".agent/evidence/final-lint.log": "d2354c241320f11f07890cbf32f99a5d88f1c7f4f236d860e2cd26db739badd8",
|
||||
".agent/evidence/07-build-red.log": "138802de7bc67c1535668efe7a915424a70d5d7994acb7f366a139e89c1da77f",
|
||||
".agent/evidence/release-final-lint.log": "d2354c241320f11f07890cbf32f99a5d88f1c7f4f236d860e2cd26db739badd8",
|
||||
".agent/evidence/release-final-audit.log": "6d8c5c8f3d7684adb070417bd608d01ae90aa3dc26a65af03ffda4955f38d9a3",
|
||||
".agent/evidence/release-mobile-results.png": "587956c9ad5eca054e4bb4b44748a2c637655e407427ba5b4c6ad7bf5a74539a",
|
||||
".agent/evidence/neo-final-build.log": "f30138e53b8c12e70e80e2cd5f4bdfcf8d1f6a095216a4f9ade6687bca1f0488",
|
||||
".agent/evidence/release-desktop-game.png": "7300a06a507f651a587ed3deb36cc5bb728f4a36c30b7b1cf409a3b209ba564c",
|
||||
".agent/evidence/desktop-game.png": "42702e89264357257db8bf54c2b3743e3212e62cfd3476a8c25bad83fb59ff81",
|
||||
".agent/evidence/08-rule-red.log": "2cc1854cf6a4b9e8d53a7a36b1dde1fb6c6970b89f841b9e8f404e6e42bb929e",
|
||||
".agent/evidence/neo-mobile-game.png": "1a6733a3293204e4841ec8722a1ffe37033943097c691bcfadbcd907fde024ef",
|
||||
".agent/evidence/final-test.log": "af03027cb22a090ecd107c10e3fc7e2f9ceb394122b0b73caa7d362310504170",
|
||||
".agent/evidence/desktop-results.png": "003df3aeb08ce66618775377d9b2003809d696629f61cf54b7b86e7a0ed63593",
|
||||
".agent/evidence/14-snr-green.log": "ae74e57cea20841299a8c1ee5eaf60efad34bda697339f45527cdec83578e6df",
|
||||
".agent/evidence/mobile-home.png": "7f84bd54183fcdd03fe136b41145146ddfb323041c96a8b9e6b670c9a923033a",
|
||||
".agent/evidence/07-build-green.log": "ec98087d20a68c5b81c6c23406316f1e5f19c6124498e1fc005d04bb78894a57",
|
||||
".agent/evidence/release-final-test.log": "46d5d0fc0180adc00a734b64db4acb4cbaa37d12567d0224836306312213870c",
|
||||
".agent/evidence/05-assets-red.log": "04388acb098f7dabe9a35783b496075ee7c39757d3fde5361c9ac080188ac371",
|
||||
".agent/evidence/browser-third.log": "1b6c264930da8934e7f1c8da6c998543f35e68b1c3159dad722cfe23a8e5244c",
|
||||
".agent/evidence/final-build.log": "565a95a51a10f78bc08f256755afce5ef183440dcdea5e75b3aefde8d7c5b837",
|
||||
".agent/evidence/browser-final.log": "9273c91613160e239027452894b3735f9657ccad97a52412eb889290aebd5adf",
|
||||
".agent/evidence/04-audio-red.log": "58bbf8eae572f83e408dd101eac738a5f6963550e21c8265f42a7eeba18be7a7",
|
||||
".agent/evidence/release-integrity.log": "cc77121b43a6b24a358999cf1a3bbf701d467fcee9730095f318303c2e80602b",
|
||||
".agent/evidence/14-snr-browser-red.log": "36298e5bb1f45a69b0ca75e5cbce85ee1455c4485759670268fbbcf55bacd4d4",
|
||||
".agent/evidence/03-dsp-red.log": "bacf42e5c808d32702b9bcd30523d1fcf17d5ff75b281233d9e84f33b6e42589",
|
||||
".agent/evidence/mobile-results.png": "ec2938c03ac03da8e33e25f043522b317b60c16be1c29f9dd325a81ae84513a8",
|
||||
".agent/evidence/neo-mobile-results.png": "d49fdf6ae9566d7a2003db3f252d84ed88ac4d73a0390ce404b47e7bab9c60df",
|
||||
".agent/evidence/01-content-green.log": "5585acd257b49225218835acd69a1d240c7737d12dba62949f31a5b7c1c9ed2a",
|
||||
".agent/evidence/13-heading-red.log": "33acc2838786a87b8ecc170a1ac0a9d7521daf8e5b9aed2195e76e45ea327f76",
|
||||
".agent/evidence/22-sandbox-red.log": "c8a97270f0f68367d6edb3e5ee10f34bbda1127f8dae2c5639afd482198e7bcd",
|
||||
".agent/evidence/14-snr-browser-green.log": "fcb82296e9af4b96112fae0bbb77c6ba41230c117021243e85916ae1130a462d",
|
||||
".agent/evidence/final-browser.log": "5855691def462b23667a9d658338a0458a53d984b5b5f7e11b45f9a63092abcd",
|
||||
".agent/evidence/02-game-green.log": "5ca5895f8a09f4e9de7a846bf9ab37fb3715623e8e7654dab095505c097fc0c7",
|
||||
".agent/evidence/neo-final-lint.log": "d2354c241320f11f07890cbf32f99a5d88f1c7f4f236d860e2cd26db739badd8",
|
||||
".agent/evidence/19-notices-red.log": "8f34c583cb8563803828d72fe56622d84bcf59a9541d983d6c0b705225955794",
|
||||
".agent/evidence/18-literal-red.log": "ad23ae7be3d9aab83907c12849012a01f9d1b12e5a174c3acede89817a74d2d2",
|
||||
".agent/evidence/20-audio-red.log": "c1cbd5b585e8a70e23b88bfcee0c6479f85fdec0d1e06d13c81c689a140c0ac0",
|
||||
".agent/evidence/12-ime-replay-red.log": "8cf5dab06d93cc544c21276ee633829f8b137b4b6d7c5fe47aadcad6fc2afb71",
|
||||
".agent/evidence/09-ime-red.log": "10e5f9f99609044c768cd338df0d574a06a7442e0debe0e61ca16a6b5873adf3",
|
||||
".agent/evidence/neo-intermediate-lint.log": "5e94ea847c3a092f4ff8e97ac5b61ebef805b3c859ad38461f4a437045d1b5b9",
|
||||
".agent/evidence/15-volume-browser-green.log": "aeccd5f13eb9db4062cbf2c70eee332d0c39540d580e113d0a79a899b2ef02de",
|
||||
".agent/evidence/01-content-red.log": "0f28fe2ae2c4669a52ba2fc15bfa6285e4922474dc2b2571098b522679948e12",
|
||||
".agent/evidence/06-ui-intermediate.log": "3295b3ae691dadb8feb7f0aaf604a1aa56cbfae27b5dbdd486cb5645f5edabe9",
|
||||
".agent/evidence/24-retry-final-browser.log": "68029aae89adf86fd60ee56a20a1e2f769cb4f894f27ae23963ca5b5b58c62c4",
|
||||
".agent/evidence/10-ime-reset-red.log": "f6cb7c1724b8f9c410385e9970051577c03527fb7e719f43a77c967ca08ef18f",
|
||||
".agent/evidence/24-retry-final-test.log": "b71bb1375a039bcc3d7b3c5070da85ece3551f32ae1b8bb3a2abc5ef1edd57b8",
|
||||
".agent/evidence/20-mechanics-red.log": "d25a1c844366e14fe1db9bb7c243fe0adb6857ee5b4548cf2865de96589af647",
|
||||
".agent/evidence/03-dsp-green.log": "d3d08683a1426b845a2e987572861b82b3ac978b8c352991950c0f32a473d3de",
|
||||
".agent/evidence/06-ui-red.log": "1f1ed6bd440af22f5abf59e4be194f969bee1d115d436a155d879d8cffddb747",
|
||||
".agent/evidence/release-desktop-results.png": "2ebb4056d0ecdadea8a3469500801065ae158c17cd2db27817e813e53adc71f3",
|
||||
".agent/evidence/18-literal-green.log": "878a8d788a8cedbf652fe0e819fe482099249a52ae7b5cc3d8826e64b32c6377",
|
||||
".agent/evidence/20-audio-generate.log": "f864fc266f7ca50c600457399f198a77949e9ee1601b0d2fc19b64942a2030cb",
|
||||
".agent/evidence/24-retry-final-lint.log": "8682ca1f55e3ec58f13321cc339c8647ef72c1934d74ea9b980aee717e528819",
|
||||
".agent/evidence/release-final-build.log": "3fba8356382341db9c562d985ca2229fd0b81969532746b0146bc489d54c321e",
|
||||
".agent/evidence/release-format.log": "57658c36cb3161b53cdf934017e4b7a733a273509ace184e0a2a6eaa046c742b",
|
||||
".agent/evidence/release-mobile-home.png": "c7fc37a247bbadba60de9dff3c8d87930a2e6ebb868f687a4135b3fd035ed1c3",
|
||||
".agent/evidence/10-ime-reset-green.log": "e12761b3a2814a79d1448e7452474a086bf371921287718eb72dd9b0f6b8fc82",
|
||||
".agent/evidence/22-sandbox-green.log": "e8a1a17e49c22dea81d7f85111c744473427466791ddeda75047cd0082e7faba",
|
||||
".agent/evidence/15-volume-build.log": "2767b794124804b3447f529eef025e2530975fcc506e1cbe8994acf8243e6ba8",
|
||||
".agent/evidence/24-retry-integrity.log": "a188fe54dce05f6caa868b3d9f2c22a852f6a8cdc462355673316578be623a08",
|
||||
".agent/evidence/17-spacing-green.log": "8ab85362ceadcdfecf4f7b1e95abfb4237e15018692e14f937be90265c351b11",
|
||||
".agent/evidence/15-volume-browser-red.log": "84954280c1729703f9e9c2680c8933c3b0752b19fb9c3562e7dbf2ea1b4a548c",
|
||||
".agent/evidence/04-audio-green.log": "d48c93fa7d32315ed4f719dee19222e7398bc4c4bceb8cf345e0e221a9ac89d8",
|
||||
".agent/evidence/neo-final-test.log": "f718e2acda255fcba67b272c7fa625af450714b384bb67a72f09328bf6964f0b",
|
||||
".agent/evidence/21-node-red.log": "ee25556037bdbd6b099dbb087a522284e8df00bd573dfcf0e42c734e31e09e84",
|
||||
".agent/evidence/final-security.log": "c585566624a4596e97327fb1864b1ac2a3189c0794b1e25a9d6ff1abb86046cb",
|
||||
".agent/evidence/24-retry-audio-budget.log": "b9241872b4ecd80265df4c6c2be90b31e9de4d0754772655e50b7fb4f05e2d3b",
|
||||
".agent/evidence/09-ime-green.log": "e5d5d1cfa2b6db724ded97d5f3309a517bcf637d9b2b417e9110dc9da0a48d72",
|
||||
".agent/evidence-v0.1.1/02-assets-red.log": "ccb8a354e2975c944fb2bde24492fe06a6c1b71add6ce65259d840c66836a1db",
|
||||
".agent/evidence-v0.1.1/changed-files.txt": "4877f3d1003372868b5a9f72326ccf0870b22daf35a71b60b67dc761342fa50f",
|
||||
".agent/evidence-v0.1.1/browser-audio-integrity.json": "2c0f59ed178285c0d338171328232351aab2b55e22371b3652453afa34849b65",
|
||||
".agent/evidence-v0.1.1/mobile-heading.png": "d61f2d1b01c654a5cfe841e49e244af4e232b5fc9c899e77523b336411e99316",
|
||||
".agent/evidence-v0.1.1/desktop-home.png": "9c6f92b67db249b2a1d3e752052678d7ae0af6be426d976d12237d84c105bf76",
|
||||
".agent/evidence-v0.1.1/audio-integrity.json": "d82b192602b1f054fce5f61479832666f237d7da2698afe84b09186dac90f321",
|
||||
".agent/evidence-v0.1.1/11-full-test.log": "65721fcf2b03f153274c9cc1da13c6a1f265ab6f084be8b5921a898fbfd6b40b",
|
||||
".agent/evidence-v0.1.1/baseline.json": "085be97acb81dcc83477ebc5f42dd2fd5729d9f5821cbc659df9c00b648ceb34",
|
||||
".agent/evidence-v0.1.1/09-lint.log": "43d5238bc8e59b93cf3a9bc0f444f0165697b5584078973bd92efce056136c1e",
|
||||
".agent/evidence-v0.1.1/verify_audio.py": "7751c03b83dbbd3b222f6d5a68eb1d78dac2bbf82c0fd79345ccca86a15fcb69",
|
||||
".agent/evidence-v0.1.1/16-final-lint.log": "43d5238bc8e59b93cf3a9bc0f444f0165697b5584078973bd92efce056136c1e",
|
||||
".agent/evidence-v0.1.1/10-audit.log": "6d8c5c8f3d7684adb070417bd608d01ae90aa3dc26a65af03ffda4955f38d9a3",
|
||||
".agent/evidence-v0.1.1/13-build.log": "42ac41188359699f5f24c7f86de9d7ca6503d714a7be9e277ac2fd01be21614c",
|
||||
".agent/evidence-v0.1.1/mobile-game.png": "bb0dec7ec2c99b55caafd729e2f9c9c01875e3b6dd577cc377a76bbfd5c95a7e",
|
||||
".agent/evidence-v0.1.1/05-generator-green.log": "414464526a325b424e5c5305e3066b79c55527fb67b11a3b9eb3bb33dcecea93",
|
||||
".agent/evidence-v0.1.1/01-version-docs-red.log": "edb26b949d0dc28340989601e781df3582cf784220235d19c16a46aeee97d302",
|
||||
".agent/evidence-v0.1.1/desktop-heading.png": "920d3d998d93f463be9ac6a682c1f7d5d9ac36944b52b715345c865ae46f566d",
|
||||
".agent/evidence-v0.1.1/desktop-game.png": "02c59fa37c4d4f19e5c74e56fc889105b4d280a0a4cf2c14c1838947859a3a8b",
|
||||
".agent/evidence-v0.1.1/17-security-history.json": "5ba66683c3ae29e01f25cfae2ed832e33b07f866bfccd0e1d331a8f102d3d3c7",
|
||||
".agent/evidence-v0.1.1/desktop-results.png": "3811eae6f5827760499c9c64053a2cb2ecbb1d87ed2ddf11b757eb44e56c64bd",
|
||||
".agent/evidence-v0.1.1/mobile-home.png": "7c4a4643a5222f45c6492ebf78780a317e26d423bf244fc16ea24a186a76f506",
|
||||
".agent/evidence-v0.1.1/00-npm-ci.log": "14a6e676c84fa9b2cc39a251aef0c593cda9903f9e5f2d9581bc4153c9f69e09",
|
||||
".agent/evidence-v0.1.1/07-format.log": "ce1a102d13a7dfd78130216cea192e3230efa3612e999cb8a6bfd55e8eb6d471",
|
||||
".agent/evidence-v0.1.1/06-audio-generate.log": "7b605184e89fd033378e6869236553a3d6e040087de23e8ae165f1e304f3b067",
|
||||
".agent/evidence-v0.1.1/00-audio-venv.log": "365f1b3cf48e7f6de9c24d28e4326a245d3a54eb329af4b41a9441ec546dabdc",
|
||||
".agent/evidence-v0.1.1/15-browser-audio.log": "cb16ec7009a88f911632d0bef64692066873d81372e65fea8dac800d59304214",
|
||||
".agent/evidence-v0.1.1/18-environment.log": "19a1da4298ba5a51f8dce5e6669205987bb48438e5c98f3ddcbc347ce0f91e46",
|
||||
".agent/evidence-v0.1.1/04-generator-additional-red.log": "9a519598915fbdd98108ee1b364f634905e29a5a01bfdd7ffec22a8b359e9217",
|
||||
".agent/evidence-v0.1.1/verify_browser.mjs": "53f0f6317274a91017a4f508ef9237e022f7d333ef4243f324720f8d7f85abeb",
|
||||
".agent/evidence-v0.1.1/mobile-results.png": "f2a095ab1d2a3a95a1a275b652fcd31275a5803a926e01b5fcd1e9a9e127cfb9",
|
||||
".agent/evidence-v0.1.1/14-browser.log": "657ddc9f60ffa35684110766b2e459842cd1ab10a90b0002256a945f227a16b7",
|
||||
".agent/evidence-v0.1.1/08-version-docs-green.log": "671c2889a69c83ad24293d8e92d0076255bd00c5100c2a9eb764a570e1344edd",
|
||||
".agent/evidence-v0.1.1/03-generator-red.log": "d78b7c9237c18ba8a87a77a116ea7561ae79af6e88718f9c087c1d8e2c70b1f1",
|
||||
".agent/evidence-v0.1.1/12-independent-audio.log": "5ffd6173941d75deb028741cdba549705b652218f418c6d40ceb7f4b216f2d9d",
|
||||
".agent/evidence-v0.1.1/19-final-integrity.json": "38f5af8927d95e9dae780decf146eb3d5feb610629202ef9ee67bf223647132f",
|
||||
".agent/evidence-v0.1.1/cache-regression/03-browser-red.log": "3af050a469281666912d91fc4c747b0135c636fbacc3094d8d823f96376509ed",
|
||||
".agent/evidence-v0.1.1/cache-regression/09-browser-green.log": "1f422035d506da11683299cd31a7cdf48284d285623e846f8f3785ab3412be9d",
|
||||
".agent/evidence-v0.1.1/cache-regression/00-baseline.json": "66afb3cfa4b4ba46b24d08d046066b27e7bf7d7af382f3776339b41d15b41f3c",
|
||||
".agent/evidence-v0.1.1/cache-regression/07-full-test.log": "c8524e4c5e47a35a99d9cd2b23cf093e91d9fe1d557a78bfc7e4797fea659ba9",
|
||||
".agent/evidence-v0.1.1/cache-regression/06-lint.log": "c85ee435a4f57d13173d4f4db27bdc9edbe6845a08d7d0b47de15c69ef715b71",
|
||||
".agent/evidence-v0.1.1/cache-regression/04-red-state.json": "fd6eaad1aa47e8463bb020eb0de894a98871c4772ded56f370426c1903c20d3b",
|
||||
".agent/evidence-v0.1.1/cache-regression/12-cache-regression-result.log": "65e37c6d39f77f2ffb3765a6508a8469a69d1443b304fe3082474d041105a840",
|
||||
".agent/evidence-v0.1.1/cache-regression/10-sandbox.log": "1ce93b0a638b60fd26d46a5f0fe2c124bc198d3e852ab4b6f94e9b3cf2f8cfb9",
|
||||
".agent/evidence-v0.1.1/cache-regression/11-sandbox-green.log": "f75b42f1b7e8570d8fc3845c1837bdef0d8e4d8977c192df786e91ec5c15f5f7",
|
||||
".agent/evidence-v0.1.1/cache-regression/02-build-before-fix.log": "2c2775dafb756ff1389b1c979c051b880929bf63b6286109c6ddc66d4ed75c6c",
|
||||
".agent/evidence-v0.1.1/cache-regression/01-unit-red.log": "cfbe949c8b24cb2b1c699a2d456529ac017caa1df2307b0c8d05f1dc4e7d22cf",
|
||||
".agent/evidence-v0.1.1/cache-regression/13-final-integrity.json": "60c8aa79c7c4d4a6cc42e71c6fc2e7af8f07473c69517da60481aa14b8d7cd0b",
|
||||
".agent/evidence-v0.1.1/cache-regression/08-build.log": "e01eb47b14d5e14a49afe5cd750daa9cf86fd3ba389c6ece366e667efa1a282f",
|
||||
".agent/evidence-v0.1.1/cache-regression/05-unit-green.log": "0ecd4924f62abbb6a619faf3cabc6bfa02c020e83cb37af79449ffce88486428",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/mobile-heading.png": "4c8b1c4652dd3aff3703ee273695544d4948d39fa6b5c0b1df9313db47e1d537",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/desktop-home.png": "cec5a0a94df0c6896cfe7cc89e49bb6ac0eddadae598833b19ed158958e96beb",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/mobile-game.png": "c5d885f3cd8f51e3e0519459e3fd2bca801f2ac9703e15b11bb2d73628869e25",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/desktop-heading.png": "a21b7af15a73f66589df7dacff7ce7424177a735969a39afff92b90fd51278b5",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/desktop-game.png": "d3ccf902a6865a781edd88da2df3ea5ae2cc30f79b32a574194a5e65c1b4bc10",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/desktop-results.png": "fd3208180016a30b682d80cb73580aa3a9cf2d5a6f8f426958c409222adcf251",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/mobile-home.png": "6a5b776c6111929c20a4800904c160c6c983b442f9ec9f8395061e9142c20d64",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/mobile-results.png": "a5bce60459ba2147fe080cba6666c1e39b6a97ade6f244a7b955f5371cb594e3",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/desktop-browser-audio-integrity.json": "3aa78dfd8a3acb45a445306dae6d7517b16f32744b6f468e7e2a32a91a4ac9e0",
|
||||
".agent/evidence-v0.1.1/cache-regression/artifacts/mobile-browser-audio-integrity.json": "3aa78dfd8a3acb45a445306dae6d7517b16f32744b6f468e7e2a32a91a4ac9e0",
|
||||
"public/ambience/subway.wav": "9faf70b68617d267b367a0f3692ed90015458543ab4b0844f6c704e6a724728f",
|
||||
"public/ambience/street.wav": "a8bffa201b174618955bc51b860167169125304811aabe2086b0bb35b06c3ae1",
|
||||
"public/ambience/market.wav": "4287e971a12767f70da714e0c1aff30125268f9c3faf07ebfbcc0d2904f4a312",
|
||||
"public/ambience/cafe.wav": "8db06f3f09bbd8409573ba4874c7ccdd1e7e825c8a61989a4efe66206a66c2d2",
|
||||
"public/ambience/mall.wav": "6e9171f549cacadfaeedd57a41c8e2a76b0e789f5c9a97af029a8d3558c9f145",
|
||||
"public/ambience/department.wav": "aa43f3d1d3e7c2b1f8ace24ecbda45d0ea3a031db941c39506dc6c1665b8efa7",
|
||||
"public/ambience/theater.wav": "2d6a444fb7874cdf6b2d8a741a69175299b112eb66834912c025437d8277d635",
|
||||
"public/ambience/rain.wav": "f4315084e820f742b0709de5bb0d1abd3d5af1730620e08c2948b70347356dd9",
|
||||
"public/audio/message-sea.wav": "28a461fbe03bffe2560030dea8b60715f7c0fe262dcf85b5b7f7daf483836382",
|
||||
"public/audio/remember-sea.wav": "5c91a36496e274d2be9c6fa8d9b506cd04f2a1b7ceb05ed1b7bb03fe7fca99d9",
|
||||
"public/audio/repeat-oil.wav": "55b2c7d6aa8bbce04edf8661882c9781da81c57f56217f99b80457a3bb895da0",
|
||||
"public/audio/message-sound.wav": "1e682147dae8026ba78dc8f256c7f24acb3a6743bfd88a0fcc86096930eef078",
|
||||
"public/audio/luck-oil.wav": "3fa1e662a3af8f2726b17b2baa5bec2934406e6595ebc243c8380dd16e190977",
|
||||
"public/audio/repeat-hat.wav": "6e089a42fd7e65e82eec7186d369c926fb7fdac794365b2bd7658822fd92437c",
|
||||
"public/audio/repeat-market.wav": "68a5b899115a66ab225d610ec47b4de56cc8793657362bc38f533c06f741e4cc",
|
||||
"public/audio/last-furniture.wav": "5ad4f776e35439d408abed0e66567d6b5cdc80fc54d579165472e474f1238776",
|
||||
"public/audio/last-meat.wav": "10f8ad4259ed8945c9da831e80b3902303c09caef96d400298599168fb1efed4",
|
||||
"public/audio/middle-sound.wav": "4d00aa6114327f450a00dacbc7e7b572ebf1de4ce9dc2fe4b5505766cca71ce9",
|
||||
"public/audio/last-sound.wav": "ec9c49802aebeb6a8b898a1c0d8ad1daa127d2d64c905c197ed49a8e0c4eb64a",
|
||||
"public/audio/last-apple.wav": "4cb2a8579fa3a7b91bb36363826ce8ca0d6d86e96e16a479e226a2802edd82f7",
|
||||
"public/audio/repeat-meat.wav": "6599d2fac73ea616a793151b4ce6f51af673988d630bac6219a77e78ae6cb34e",
|
||||
"public/audio/message-oil.wav": "a2a71a7e5e07c81871a25c6cb7540c39aa0b32fc44f78cda66b5f34ace98d805",
|
||||
"public/audio/correction-meat.wav": "48e91b3932d3798e852041a854b3ee08c72127e092c62083a47af6b99adff241",
|
||||
"public/audio/mission-meat.wav": "94f8a4f9e116a787e5ed052661d6de9ecf3ad8629db476661dd59ad03014b0c9",
|
||||
"public/audio/message-meat.wav": "ce19735df079b54c171e775b6b365385a80160b9033442abab95b2b9c8505e1a",
|
||||
"public/audio/password-furniture.wav": "fb2b631dd4e12120d08a84cce6450f9cd9cd68105d13d7001d808e7deaa1df4a",
|
||||
"public/audio/correction-market.wav": "b8d25b867497adcd0fe7c8b6a8a8d2e7a52965956738a83e53f58735708773f9",
|
||||
"public/audio/remember-tree.wav": "bc8e54f5407e8866bf1ca1ddfd4f6c63d85fee29bd9e430c7dd33e87974fc5b8",
|
||||
"public/audio/correction-tree.wav": "b8e8bbe6b8b14727efd953fae9d4aed2caeb004055d52f611c6378322847edbe",
|
||||
"public/audio/message-tree.wav": "5d684aa710a63d36ed8dcc2a8bfbdd5c71b0b1c63dad2a324adecb76591e85b8",
|
||||
"public/audio/last-tree.wav": "589e56d940a3c9e80ec02ae0b2dd93463fdc85ef019a753fcd0fded0752055f9",
|
||||
"public/audio/remember-hat.wav": "31a6a4270bf368cda419094d87a303ac3cd5c22539786cb165f8044b0b8e9d6e",
|
||||
"public/audio/first-umbrella.wav": "878e0bd2e6e4105f175aef51a028f6b141f3a2072be20f783193f3ba897a3ee0",
|
||||
"public/audio/luck-sea.wav": "47aa31d757c9fb49c9b53a1c052d90a5ced4be57549d649850d9b48f8864045b",
|
||||
"public/audio/middle-furniture.wav": "b45b1afc8d9b534ff3e0a2a2ecb99efc1f4e40d41f89f55c4ed8ba94ad6d76d4",
|
||||
"public/audio/repeat-sound.wav": "e9d636ff7f4777f38b1ff15bebdcec6fbde95b4b4b05625a7415b4cfa0025b59",
|
||||
"public/audio/first-sound.wav": "46f6adeed928a16af0700f1e8626cf8049f124632a04a5d10604426fb06f9596",
|
||||
"public/audio/mission-sound.wav": "659eb0e2b06e6b165b46744769743e032e2282519f8486c57bc45e0f7d07a069",
|
||||
"public/audio/luck-umbrella.wav": "8d3e8e8bc97e5fe3f3362184c4abb12f01a882a1f1174d2644f0f70aac677c0a",
|
||||
"public/audio/first-sea.wav": "0f0b39314c5f7d7168d4854003c0c284e7bc3438cdc4d1d1c5adab7cb5ed30e5",
|
||||
"public/audio/correction-apple.wav": "ccd7327a3fb54d3320d049ffdced3bc17595861cee69429c0ee97182d454195b",
|
||||
"public/audio/middle-market.wav": "c855b449e0d4ace74681bfe68e5e7f0b063568827ae872017234dbe8ae119e4c",
|
||||
"public/audio/message-furniture.wav": "26c331b7e12311236f4bb48f88918dfbf53cccd2f50b55741ea6ff4473e71dd8",
|
||||
"public/audio/repeat-sea.wav": "db2f235bee26ac804b5362e8e013b8f40c8da24fd3a34e0fb3b43c6d264feb36",
|
||||
"public/audio/first-meat.wav": "f51a37c1722fef581f7d642a4dcae7fcb9953b3c318dce971bf616cd1a81fecc",
|
||||
"public/audio/luck-meat.wav": "d36dfc395a5c53fbfa4abe9980db7bb59adfdac59e40318c4aca365365e3f2ab",
|
||||
"public/audio/correction-hat.wav": "f9f98c91cfbcfcb106eef7d5d3795a9cf3c3aab7e19a60f13d7dffe284d19f86",
|
||||
"public/audio/repeat-tree.wav": "8735c3d9672561ca237fa87317beec2878492eb9063d6048d5b214423561acc1",
|
||||
"public/audio/password-tree.wav": "67da8147296e35134ec254bc82b58317630061b2c64d2d63c4be197ce8692d50",
|
||||
"public/audio/mission-hat.wav": "308278ec2bd27d4224976a55632d1f7fa1edabb0792126d9d858a699c287aee4",
|
||||
"public/audio/middle-apple.wav": "8832f1b793ab3eedbe663875ea8dbeabb122c329bd5879437c71230b0418c3c8",
|
||||
"public/audio/first-market.wav": "1e00b8f70a796cdebb0feb00c605fece7488b06915e6e036f54206f05e201e0c",
|
||||
"public/audio/repeat-apple.wav": "cb7da4e9a1288cac64d168b241f27d7d2bc2dfecace58744f9bbf2792dfad04e",
|
||||
"public/audio/luck-tree.wav": "122f496834fb16d6da47f801e50e46e272e4e934af959467d1db4e490f79be7a",
|
||||
"public/audio/middle-meat.wav": "d416107cc05e7c5b92ca27100a10a8a9689de913346179945d5542de4a6bac0c",
|
||||
"public/audio/middle-umbrella.wav": "399ea2f681f755918f1117c8baba42739ceca64b307b999342f457a9235050b6",
|
||||
"public/audio/message-market.wav": "9242d4cd6e0030e6b073e4d2360f84aa8a454d1749711cdb2d64c14f28a7ea20",
|
||||
"public/audio/mission-market.wav": "cefa0e95649ea6bd1df4c8dfccd2b74b4f4c028714420ce1087b61db2f2a8d47",
|
||||
"public/audio/first-hat.wav": "17c8cde90567e7574b0c0702663bd70713054089ee920241b5444d9b7869eef5",
|
||||
"public/audio/first-tree.wav": "3178230fd5850b6277a2153b438ec5289720e3db7ac929914cc213964f004bd5",
|
||||
"public/audio/repeat-umbrella.wav": "5e59ef39113c3d5e106862356d715f4cef2862ef8ee02654a97e532675c1ac6d",
|
||||
"public/audio/password-apple.wav": "b6f5de3fe571fe3a7fdb722fe49250bcfeedef49475271e0ec76a7630907edd5",
|
||||
"public/audio/last-sea.wav": "f755452e1da44674aa1df7d12edffa988091b89a394e7eb6d4a00eb721f07cbf",
|
||||
"public/audio/correction-sea.wav": "9233431d78ab4b144e3c33ad0cf0d49fc0fb91b29514343230ba32987b794bb3",
|
||||
"public/audio/correction-furniture.wav": "5c004a7b2f5a4a918c9f689f1a2dcb219a620ed14313f40a9655b36dbf64948d",
|
||||
"public/audio/remember-sound.wav": "98387ccc7aab566f6487d4c250b2128082cc527e013a6f7b7bc4d0266ac295df",
|
||||
"public/audio/password-umbrella.wav": "ab3ca6398c879971dc793eb25b472fcc0db72d76e386f11ef4d32c639f37c69d",
|
||||
"public/audio/middle-tree.wav": "341888c75275c13eb31058f53a1d4276be0daa0a1b5a3a45522036928b83b0c1",
|
||||
"public/audio/password-meat.wav": "b009caadd56350d6a641ff17f0973e2b2724c183e1f45ae0bf3c483e237fa99e",
|
||||
"public/audio/mission-sea.wav": "8838d6a1ee8a790427dc5aa761e70b3d8872af62086efeed743297ff7f8b8a06",
|
||||
"public/audio/luck-hat.wav": "4ff43dd042f4b5451e9fdeb3edd59f1e389a7d1dd488094587a3a9fc7dfffa44",
|
||||
"public/audio/correction-sound.wav": "5a603bc69979603afddcaeb6edf500a7c540b72405daeb33f5335d746b327da1",
|
||||
"public/audio/first-apple.wav": "7c1dbcb3082055df2b8f087f7e906ec867c92f679de0894c34740c05e61a4bc1",
|
||||
"public/audio/first-furniture.wav": "29f007b385b7182db1d8aeccad4fc3c260df5e66e14e52a46b0ef0fcd0ff3a0a",
|
||||
"public/audio/middle-hat.wav": "b01ef9762ac84e3eb757243bc9286c62f7d45444a821ae35ac36a8b095e1598a",
|
||||
"public/audio/repeat-furniture.wav": "bf84dc6cff1f227924a3a62158d2fc18769fb0ca40b91418fa19e534dbf92f00",
|
||||
"public/audio/password-market.wav": "02e325fb753ef7a3ee585a03d2ca2aa3f1fbc58523b062222ae1136eeed7a95c",
|
||||
"public/audio/middle-oil.wav": "7a6b122b11c07da86c95fb78e2db2a70681b5219c63d6441fe56da1979ac1dc3",
|
||||
"public/audio/remember-umbrella.wav": "c8988e604ba05d52597e561389541e8f9cda86e052279f1862bbf8399ead314e",
|
||||
"public/audio/luck-market.wav": "356af25332bf2000ed349671f3ff39767929e1f4599af622c021f907d11fb7bf",
|
||||
"public/audio/last-hat.wav": "bdaf8fbc54df8061e9e58aa8c14b3044a6e863dc54973ee3ee6ae2c5ae1a28f1",
|
||||
"public/audio/luck-sound.wav": "34e4d9758d2ed448646fda364610e34779c84794403d9051ab3d8c1d33e2c80c",
|
||||
"public/audio/mission-apple.wav": "3ef42e276ff3500c3e197d149f29f79d6a0c1d5516ed1d5a2c57210333fded9c",
|
||||
"public/audio/last-market.wav": "7857e87e9dbfe8fe849cc0b18c1d45b60916cb337328099c7a87a42c82e2821e",
|
||||
"public/audio/message-umbrella.wav": "41d5866dae66600df4694a8312b531571d44cece6dba0e423e7c43d09d184819",
|
||||
"public/audio/message-apple.wav": "d85e6f47d871369f00de2274139e5ad6b4b5686b5e20e248df0ed6b9a320d942",
|
||||
"public/audio/correction-oil.wav": "f6eff0cdddcad9790351491e60c53cb2a70d222033a583652f2de0b8cd6abcc7",
|
||||
"public/audio/mission-tree.wav": "00d8e77ec0371971d632724d91f8cf8d947bfb83c582a513b6421be4c457a1da",
|
||||
"public/audio/first-oil.wav": "f415195e0cfc7ee711d09de7519e88eab62cc8b58d70772c83c3f5c27c267819",
|
||||
"public/audio/message-hat.wav": "5a713a8522b231bb8276805c014b385b9150b79f58ff2618446607e2b442495e",
|
||||
"public/audio/remember-oil.wav": "3ca98682ff06d1d6b8af02c0fd5b2124f42266ac989884223eff4a9bbde1287a",
|
||||
"public/audio/luck-furniture.wav": "52cb92cdb8ee92b6f581c9d68dbc346f180c470564809ba57185429c9eb84127",
|
||||
"public/audio/intro.wav": "90d9f46e6e3f9c8a0c1a781096df54d7809ef4ad38b289508ef7b8c0411465ce",
|
||||
"public/audio/mission-umbrella.wav": "4b4c858a25659540f9dbc524664496fc6de61ab8c1627f3cfee8c9c744e11d5b",
|
||||
"public/audio/mission-furniture.wav": "af82e03b686635c3356e706fe5b05c1231aeaaeab33f275aa5b8714988c65d43",
|
||||
"public/audio/middle-sea.wav": "b6dbe0af143ea775f05bd59a3d6af348bcc770ab378ac91ea75a56e06c326edf",
|
||||
"public/audio/remember-apple.wav": "1bf2aef9a9f030af1a8fd7dee8f44aa420a397b3ba99b575feeb3dc7a63ec191",
|
||||
"public/audio/last-oil.wav": "b5ce34950b8b31b1baf6ce55410797f0d8aa5478a670d6eace87cf76d134d6d3",
|
||||
"public/audio/remember-meat.wav": "9183ef90b64f5ceaf3bb0178c689231ff3e9981d6ce889124a15f2a6e2b7a344",
|
||||
"public/audio/luck-apple.wav": "7c8f413f4b7e164f090e508ba090448f1376c6012649bbb6a917d45851313883",
|
||||
"public/audio/last-umbrella.wav": "c801293a34013a8d93d3289a2cc87cd3eed83f97ba4647f5060efa00b117a9ad",
|
||||
"public/audio/password-hat.wav": "e91bfc97df90a1675b6cd856880ac15c54de32cfc3b23603bdd1c2c5ac3ce6b8",
|
||||
"public/audio/correction-umbrella.wav": "92b54f04884ab915783945077efd8f3bd443849a1720f72168b6348cae1f8e85",
|
||||
"public/audio/remember-furniture.wav": "442bdcb956f120c270e1f321feae0415c897de0183e468980fcc119b898b2a67",
|
||||
"public/audio/password-sea.wav": "03f45b8cb5b3dc72faf5c6e3d0e2a10cea6b60301ea400d0a4453596d2f0b337",
|
||||
"public/audio/remember-market.wav": "d89792da51c83ac49d27e55aa6d822a338899a5ee487b34b552748201e1522f6",
|
||||
"public/audio/password-oil.wav": "b472957b27ff98ea7b8894fa1ff12653f7e9f66f77870faa9e52a1c1bf116c41",
|
||||
"public/audio/mission-oil.wav": "5fb63e04520c312aa6b7b48b70c2f7c140b5ab480e5c6992edbc2ba85b9a06e7",
|
||||
"public/audio/password-sound.wav": "044aafff08a19e39f21e58b963644715a987cd155896998769ef8e9ce6449628"
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"failedTests": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 288 B |
|
After Width: | Height: | Size: 289 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 66 KiB |
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"failedTests": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 288 B |
|
After Width: | Height: | Size: 289 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 68 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"status": "failed",
|
||||
"failedTests": [
|
||||
"abdd2e2cf517d3c959fd-e748bd769b024912a05a",
|
||||
"abdd2e2cf517d3c959fd-f7936886d307bf504a2e",
|
||||
"abdd2e2cf517d3c959fd-297a2a889ff2a2c13233",
|
||||
"abdd2e2cf517d3c959fd-99533baf08fa35da0cd2"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
# Instructions
|
||||
|
||||
- Following Playwright test failed.
|
||||
- Explain why, be concise, respect Playwright best practices.
|
||||
- Provide a snippet of code with the fix, if possible.
|
||||
|
||||
# Test info
|
||||
|
||||
- Name: review-fixes.spec.ts >> 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다
|
||||
- Location: tests/browser/review-fixes.spec.ts:38:1
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.3333333333333333
|
||||
Received: 0
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="0" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
```
|
||||
|
||||
```yaml
|
||||
- progressbar "전체 진행률"
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.6666666666666666
|
||||
Received: 0.3333333333333333
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="1" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
```
|
||||
|
||||
```yaml
|
||||
- progressbar "전체 진행률"
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 1
|
||||
Received: 0.6666666666666666
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.33333333333333337
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="2" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
```
|
||||
|
||||
```yaml
|
||||
- progressbar "전체 진행률"
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { expect, test, type Page } from "@playwright/test";
|
||||
2 | import { WORDS } from "../../src/content";
|
||||
3 |
|
||||
4 | // 글자별 스타일 추측 대신 실제 Range 줄 상자를 비교해 어절 내부 분리를 검출한다.
|
||||
5 | async function copyLayout(page: Page, selector: string) {
|
||||
6 | return page.locator(selector).evaluateAll((elements) => elements.flatMap((element) => {
|
||||
7 | const problems: string[] = [];
|
||||
8 | const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);
|
||||
9 | while (walker.nextNode()) {
|
||||
10 | const node = walker.currentNode;
|
||||
11 | for (const match of (node.textContent ?? "").matchAll(/[가-힣]+/g)) {
|
||||
12 | const range = document.createRange();
|
||||
13 | range.setStart(node, match.index!);
|
||||
14 | range.setEnd(node, match.index! + match[0].length);
|
||||
15 | if (new Set(Array.from(range.getClientRects(), (r) => r.y)).size > 1)
|
||||
16 | problems.push(`split: ${match[0]}`);
|
||||
17 | }
|
||||
18 | }
|
||||
19 | if (element.scrollWidth > element.clientWidth) problems.push(`overflow: ${element.textContent}`);
|
||||
20 | return problems;
|
||||
21 | }));
|
||||
22 | }
|
||||
23 |
|
||||
24 | test("리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다", async ({ page }, info) => {
|
||||
25 | for (const width of [320, 360]) {
|
||||
26 | await page.setViewportSize({ width, height: 800 });
|
||||
27 | await page.goto("/");
|
||||
28 | expect.soft(await copyLayout(page, ".mode-option small")).toEqual([]);
|
||||
29 | await page.screenshot({ path: info.outputPath(`copy-${width}-home.png`), fullPage: true });
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
36 | });
|
||||
37 |
|
||||
38 | test("리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다", async ({ page }, info) => {
|
||||
39 | let target = "";
|
||||
40 | page.on("request", (r) => {
|
||||
41 | const path = new URL(r.url()).pathname;
|
||||
42 | if (path.startsWith("/audio/") && path !== "/audio/intro.wav") target = path;
|
||||
43 | });
|
||||
44 | await page.goto("/");
|
||||
45 | await page.getByRole("radio", { name: "보기에서 선택" }).check();
|
||||
46 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
> 50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
| ^ Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
54 | const answer = WORDS.find((w) => target.endsWith(`-${w.id}.wav`))!.answer;
|
||||
55 | await page.getByRole("button", { name: new RegExp(answer) }).click();
|
||||
56 | await page.getByRole("button", { name: index === 2 ? /결과 보기/ : /다음 문제/ }).click();
|
||||
57 | }
|
||||
58 | await page.screenshot({ path: info.outputPath("normal-results.png"), fullPage: true });
|
||||
59 | expect(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span")).toEqual([]);
|
||||
60 | });
|
||||
61 |
|
||||
```
|
||||
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 189 B |
|
After Width: | Height: | Size: 288 B |
|
After Width: | Height: | Size: 289 B |
@@ -0,0 +1,185 @@
|
||||
# Instructions
|
||||
|
||||
- Following Playwright test failed.
|
||||
- Explain why, be concise, respect Playwright best practices.
|
||||
- Provide a snippet of code with the fix, if possible.
|
||||
|
||||
# Test info
|
||||
|
||||
- Name: review-fixes.spec.ts >> 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다
|
||||
- Location: tests/browser/review-fixes.spec.ts:38:1
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.3333333333333333
|
||||
Received: 0
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="0" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
```
|
||||
|
||||
```yaml
|
||||
- progressbar "전체 진행률"
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 0.6666666666666666
|
||||
Received: 0.3333333333333333
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.3333333333333333
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="1" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
```
|
||||
|
||||
```yaml
|
||||
- progressbar "전체 진행률"
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toBeCloseTo(expected)
|
||||
|
||||
Expected: 1
|
||||
Received: 0.6666666666666666
|
||||
|
||||
Expected precision: 2
|
||||
Expected difference: < 0.005
|
||||
Received difference: 0.33333333333333337
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveAccessibleName(expected) failed
|
||||
|
||||
Locator: getByRole('progressbar')
|
||||
Expected: "현재 문항 진행률"
|
||||
Received: "전체 진행률"
|
||||
Timeout: 1000ms
|
||||
|
||||
Call log:
|
||||
- Expect "soft toHaveAccessibleName" getByRole('progressbar') with timeout 1000ms
|
||||
- waiting for getByRole('progressbar')
|
||||
11 × locator resolved to <progress max="3" value="2" aria-label="전체 진행률"></progress>
|
||||
- unexpected value "전체 진행률"
|
||||
|
||||
```
|
||||
|
||||
```yaml
|
||||
- progressbar "전체 진행률"
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 만나요",
|
||||
+ "split: 최대",
|
||||
+ ]
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { expect, test, type Page } from "@playwright/test";
|
||||
2 | import { WORDS } from "../../src/content";
|
||||
3 |
|
||||
4 | // 글자별 스타일 추측 대신 실제 Range 줄 상자를 비교해 어절 내부 분리를 검출한다.
|
||||
5 | async function copyLayout(page: Page, selector: string) {
|
||||
6 | return page.locator(selector).evaluateAll((elements) => elements.flatMap((element) => {
|
||||
7 | const problems: string[] = [];
|
||||
8 | const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);
|
||||
9 | while (walker.nextNode()) {
|
||||
10 | const node = walker.currentNode;
|
||||
11 | for (const match of (node.textContent ?? "").matchAll(/[가-힣]+/g)) {
|
||||
12 | const range = document.createRange();
|
||||
13 | range.setStart(node, match.index!);
|
||||
14 | range.setEnd(node, match.index! + match[0].length);
|
||||
15 | if (new Set(Array.from(range.getClientRects(), (r) => r.y)).size > 1)
|
||||
16 | problems.push(`split: ${match[0]}`);
|
||||
17 | }
|
||||
18 | }
|
||||
19 | if (element.scrollWidth > element.clientWidth) problems.push(`overflow: ${element.textContent}`);
|
||||
20 | return problems;
|
||||
21 | }));
|
||||
22 | }
|
||||
23 |
|
||||
24 | test("리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다", async ({ page }, info) => {
|
||||
25 | for (const width of [320, 360]) {
|
||||
26 | await page.setViewportSize({ width, height: 800 });
|
||||
27 | await page.goto("/");
|
||||
28 | expect.soft(await copyLayout(page, ".mode-option small")).toEqual([]);
|
||||
29 | await page.screenshot({ path: info.outputPath(`copy-${width}-home.png`), fullPage: true });
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
36 | });
|
||||
37 |
|
||||
38 | test("리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다", async ({ page }, info) => {
|
||||
39 | let target = "";
|
||||
40 | page.on("request", (r) => {
|
||||
41 | const path = new URL(r.url()).pathname;
|
||||
42 | if (path.startsWith("/audio/") && path !== "/audio/intro.wav") target = path;
|
||||
43 | });
|
||||
44 | await page.goto("/");
|
||||
45 | await page.getByRole("radio", { name: "보기에서 선택" }).check();
|
||||
46 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
54 | const answer = WORDS.find((w) => target.endsWith(`-${w.id}.wav`))!.answer;
|
||||
55 | await page.getByRole("button", { name: new RegExp(answer) }).click();
|
||||
56 | await page.getByRole("button", { name: index === 2 ? /결과 보기/ : /다음 문제/ }).click();
|
||||
57 | }
|
||||
58 | await page.screenshot({ path: info.outputPath("normal-results.png"), fullPage: true });
|
||||
> 59 | expect(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span")).toEqual([]);
|
||||
| ^ Error: expect(received).toEqual(expected) // deep equality
|
||||
60 | });
|
||||
61 |
|
||||
```
|
||||
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 171 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 65 KiB |
@@ -0,0 +1,186 @@
|
||||
# Instructions
|
||||
|
||||
- Following Playwright test failed.
|
||||
- Explain why, be concise, respect Playwright best practices.
|
||||
- Provide a snippet of code with the fix, if possible.
|
||||
|
||||
# Test info
|
||||
|
||||
- Name: review-fixes.spec.ts >> 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
- Location: tests/browser/review-fixes.spec.ts:24:1
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 탐험에서도",
|
||||
+ "split: 라운드",
|
||||
+ ]
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 3
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 입력",
|
||||
+ ]
|
||||
```
|
||||
|
||||
```
|
||||
Error: expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 1
|
||||
+ Received + 4
|
||||
|
||||
- Array []
|
||||
+ Array [
|
||||
+ "split: 만나요",
|
||||
+ "split: 최대",
|
||||
+ ]
|
||||
```
|
||||
|
||||
# Page snapshot
|
||||
|
||||
```yaml
|
||||
- generic [ref=f1e2]:
|
||||
- link "본문으로 건너뛰기" [ref=f1e3] [cursor=pointer]:
|
||||
- /url: "#main"
|
||||
- banner [ref=f1e4]:
|
||||
- generic [ref=f1e5]:
|
||||
- heading "단어를 맞춰라" [level=1] [ref=f1e11]
|
||||
- generic [ref=f1e12]: v0.2.3
|
||||
- generic: 소리에 집중하는 시간
|
||||
- main [ref=f1e13]:
|
||||
- generic [ref=f1e14]:
|
||||
- text: 지금까지의 소리 탐험
|
||||
- generic [ref=f1e15]: S
|
||||
- heading "문제 풀이를 종료했어요." [active] [level=2] [ref=f1e23]
|
||||
- paragraph [ref=f1e24]: 작은 소리에 집중한 당신, 다음 탐험에서도 만나요.
|
||||
- paragraph [ref=f1e25]: 응답 0문항 · 정답 0문항
|
||||
- generic [ref=f1e26]:
|
||||
- generic [ref=f1e27]:
|
||||
- strong [ref=f1e28]: "0"
|
||||
- text: 총 점수
|
||||
- generic [ref=f1e29]:
|
||||
- strong [ref=f1e30]: 0%
|
||||
- generic [ref=f1e31]: 정답률 · 0/0
|
||||
- generic [ref=f1e32]:
|
||||
- strong [ref=f1e33]: 0회
|
||||
- text: 최고 연속 정답
|
||||
- table "난이도별 결과" [ref=f1e34]:
|
||||
- rowgroup [ref=f1e35]:
|
||||
- row [ref=f1e36]:
|
||||
- columnheader "난이도" [ref=f1e37]
|
||||
- columnheader "SNR" [ref=f1e38]
|
||||
- columnheader "맞힌 문제" [ref=f1e39]
|
||||
- rowgroup [ref=f1e40]:
|
||||
- row [ref=f1e41]:
|
||||
- rowheader "1단계" [ref=f1e42]
|
||||
- cell "SNR +6 dB" [ref=f1e43]
|
||||
- cell "0 / 0" [ref=f1e44]
|
||||
- row [ref=f1e45]:
|
||||
- rowheader "2단계" [ref=f1e46]
|
||||
- cell "SNR +3 dB" [ref=f1e47]
|
||||
- cell "0 / 0" [ref=f1e48]
|
||||
- row [ref=f1e49]:
|
||||
- rowheader "3단계" [ref=f1e50]
|
||||
- cell "SNR 0 dB" [ref=f1e51]
|
||||
- cell "0 / 0" [ref=f1e52]
|
||||
- row [ref=f1e53]:
|
||||
- rowheader "4단계" [ref=f1e54]
|
||||
- cell "SNR -3 dB" [ref=f1e55]
|
||||
- cell "0 / 0" [ref=f1e56]
|
||||
- row [ref=f1e57]:
|
||||
- rowheader "5단계" [ref=f1e58]
|
||||
- cell "SNR -6 dB" [ref=f1e59]
|
||||
- cell "0 / 0" [ref=f1e60]
|
||||
- paragraph [ref=f1e61]: 단계 × 100점 + 연속 정답 보너스 (라운드 내 최대 20점)
|
||||
- button "처음 화면으로" [ref=f1e62] [cursor=pointer]
|
||||
- generic [ref=f1e63]:
|
||||
- generic [ref=f1e64]: ◖)) 전체 음량
|
||||
- slider "전체 음량" [ref=f1e65] [cursor=pointer]: "35"
|
||||
- status [ref=f1e66]: 35%
|
||||
- contentinfo [ref=f1e67]:
|
||||
- paragraph [ref=f1e68]: Designed by OZ at Heat-T Medical Inc.
|
||||
- paragraph [ref=f1e69]: 청각적 주의·식별 게임 · 의료적 진단이나 치료를 제공하지 않습니다.
|
||||
- generic [ref=f1e70]: 개인정보 수집 없이, 오직 플레이만.
|
||||
- link "환경음 출처·라이선스" [ref=f1e71] [cursor=pointer]:
|
||||
- /url: /AMBIENCE_NOTICES.md
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { expect, test, type Page } from "@playwright/test";
|
||||
2 | import { WORDS } from "../../src/content";
|
||||
3 |
|
||||
4 | // 글자별 스타일 추측 대신 실제 Range 줄 상자를 비교해 어절 내부 분리를 검출한다.
|
||||
5 | async function copyLayout(page: Page, selector: string) {
|
||||
6 | return page.locator(selector).evaluateAll((elements) => elements.flatMap((element) => {
|
||||
7 | const problems: string[] = [];
|
||||
8 | const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);
|
||||
9 | while (walker.nextNode()) {
|
||||
10 | const node = walker.currentNode;
|
||||
11 | for (const match of (node.textContent ?? "").matchAll(/[가-힣]+/g)) {
|
||||
12 | const range = document.createRange();
|
||||
13 | range.setStart(node, match.index!);
|
||||
14 | range.setEnd(node, match.index! + match[0].length);
|
||||
15 | if (new Set(Array.from(range.getClientRects(), (r) => r.y)).size > 1)
|
||||
16 | problems.push(`split: ${match[0]}`);
|
||||
17 | }
|
||||
18 | }
|
||||
19 | if (element.scrollWidth > element.clientWidth) problems.push(`overflow: ${element.textContent}`);
|
||||
20 | return problems;
|
||||
21 | }));
|
||||
22 | }
|
||||
23 |
|
||||
24 | test("리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다", async ({ page }, info) => {
|
||||
25 | for (const width of [320, 360]) {
|
||||
26 | await page.setViewportSize({ width, height: 800 });
|
||||
27 | await page.goto("/");
|
||||
28 | expect.soft(await copyLayout(page, ".mode-option small")).toEqual([]);
|
||||
29 | await page.screenshot({ path: info.outputPath(`copy-${width}-home.png`), fullPage: true });
|
||||
30 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
31 | await page.getByRole("button", { name: "문제 풀이 종료" }).click();
|
||||
> 32 | expect.soft(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span, .results-panel th, .results-panel td")).toEqual([]);
|
||||
| ^ Error: expect(received).toEqual(expected) // deep equality
|
||||
33 | expect.soft(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
||||
34 | await page.screenshot({ path: info.outputPath(`copy-${width}-results.png`), fullPage: true });
|
||||
35 | }
|
||||
36 | });
|
||||
37 |
|
||||
38 | test("리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다", async ({ page }, info) => {
|
||||
39 | let target = "";
|
||||
40 | page.on("request", (r) => {
|
||||
41 | const path = new URL(r.url()).pathname;
|
||||
42 | if (path.startsWith("/audio/") && path !== "/audio/intro.wav") target = path;
|
||||
43 | });
|
||||
44 | await page.goto("/");
|
||||
45 | await page.getByRole("radio", { name: "보기에서 선택" }).check();
|
||||
46 | await page.getByRole("button", { name: "게임 시작 · 소리 듣기" }).click();
|
||||
47 | for (let index = 0; index < 3; index++) {
|
||||
48 | const bar = page.getByRole("progressbar");
|
||||
49 | expect.soft(await bar.evaluate((el) => (el as HTMLProgressElement).position)).toBeCloseTo((index + 1) / 3);
|
||||
50 | await expect.soft(bar).toHaveAccessibleName("현재 문항 진행률", { timeout: 1000 });
|
||||
51 | await bar.screenshot({ path: info.outputPath(`progress-${index + 1}.png`) });
|
||||
52 | if (index) await page.getByRole("button", { name: /문장 듣기/ }).click();
|
||||
53 | await expect(page.getByRole("group", { name: "답 선택" })).toBeVisible({ timeout: 30000 });
|
||||
54 | const answer = WORDS.find((w) => target.endsWith(`-${w.id}.wav`))!.answer;
|
||||
55 | await page.getByRole("button", { name: new RegExp(answer) }).click();
|
||||
56 | await page.getByRole("button", { name: index === 2 ? /결과 보기/ : /다음 문제/ }).click();
|
||||
57 | }
|
||||
58 | await page.screenshot({ path: info.outputPath("normal-results.png"), fullPage: true });
|
||||
59 | expect(await copyLayout(page, ".results-panel h2, .results-panel p, .stats span")).toEqual([]);
|
||||
60 | });
|
||||
61 |
|
||||
```
|
||||
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 64 KiB |