@ihabdevteam/core 0.333.0 → 0.335.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,111 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.335.0 — 소리 차례가 **게을러진다** — 누를 때마다 합성을 짓고 있었다
11
+
12
+ 말귀_1 이 앞서 준 수를 **스스로 바로잡으며** 한 줄을 적었다 — *"`urlResolver` 가 0초에
13
+ 답했는데도 폴백까지 내려갔다면, 앞 차례의 답을 안 쓰고 지나간 것입니다."* 그 말이 맞았다.
14
+
15
+ 리졸버를 직접 불러 재니(그쪽 실측):
16
+ ```
17
+ 무게 urlResolver 0.0초 → https://… fallbackUrlResolver 3.3초 → https://…/auto/…
18
+ 떡가루 urlResolver 0.0초 → https://… fallbackUrlResolver 2.5초 → https://…/auto/…
19
+ HEAD 전부 200 audio/mpeg · 전부 https:// — 걸개에 안 걸린다
20
+ ```
21
+
22
+ ### 차례를 **다 모으고 나서** 틀고 있었다
23
+
24
+ ```js
25
+ for (const url of await questionSoundCandidates(text, null)) { … }
26
+ // ^^^^^ 여기서 리졸버 둘 다 부르고 기다린다
27
+ ```
28
+
29
+ 그래서 ①이 0초에 답해도 ③(서버 합성)을 **반드시** 불렀고, 첫 소리가 그 합성이 끝난 뒤에야
30
+ 났다. **합성은 돈과 시간을 쓰는 자리인데 쓰지도 않을 답을 누를 때마다 짓고 있었다.**
31
+
32
+ 이제 차례가 **게으르다** — 차례를 만드는 것만으로는 리졸버를 안 부르고, 앞이 답하면 뒤는
33
+ 아예 안 불린다. 날 주소가 있으면 리졸버를 하나도 안 부른다.
34
+
35
+ ### 못이 그 자리를 못 보고 있었다
36
+
37
+ 모듈 쪽에 게으름 못을 세우고 **누르는 쪽(팝업)이 다 모으도록 되돌려 깨 봤더니 안 울었다** —
38
+ 모듈만 게을러도 부르는 쪽이 모으면 그대로 되살아난다. **누르는 쪽에서 세는 못**을 따로 세웠다.
39
+
40
+ ### 주소를 하나도 못 얻었을 때도 말한다
41
+
42
+ ```
43
+ [core] "무게" 의 소리 주소를 한 자리에서도 못 얻었다 — 브라우저 낭독으로 간다.
44
+ ```
45
+ **뿌리는 아직 모른다.** ①(안 풀림)도 ②(걸개)도 아니라면 `<audio>.play()` 0회를 아직 설명
46
+ 못 한다. 찍히는 줄이 그 다음을 가른다 — 찍히면 리졸버가 **코어 쪽에서 안 보이는** 것이고
47
+ (묶음이 갈려 `globalThis` 를 서로 다르게 보는 자리), 안 찍히는데 소리가 없으면
48
+ `playOneShot` 뒤쪽이다.
49
+
50
+ ### 곁다리 — (304) 되살리는 규칙의 **자리**를 못으로 묶었다
51
+
52
+ 말귀_1 이 인쇄 실측 중에 *"그 규칙이 `@media print` 밖에 있다"* 고 물어 왔다. **밖이 맞다** —
53
+ 조건은 *"인쇄 중이냐"* 가 아니라 **"이 문서가 종이 문서냐"** 이고, 이 문서는 **새 창**과
54
+ **내려받은 HTML** 로도 열려 거기서는 사람이 화면으로 본다. 안으로 옮기면 그 둘에서만
55
+ 단추가 사라지는데 **그 둘은 아무도 안 재는 자리다.** 까닭을 적고 못으로 묶었다.
56
+
57
+ > 못을 세우다 두 번 데었다. ㉮ *"규칙이 `@media print` 보다 앞에 나오나"* 로 셌는데 그
58
+ > 파일엔 `@media print` 가 **여럿**이라(주석에도) 자리 번호로는 안 갈린다 — **중괄호 깊이**로
59
+ > 고쳤다. ㉯ 그 주석에 백틱을 썼다가 **template literal 이 거기서 끊겼다** — 이 파일에서
60
+ > 두 번째다.
61
+
62
+ ## 0.334.0 — (307)③ 소리 길이 **선 채로 끝났다** — 말귀_1 실측
63
+
64
+ 0.331.0 의 다시 듣기가 **반만 들어왔다.** 말귀_1 이 앱에서 쟀다:
65
+
66
+ ```
67
+ 단추 5/5 · 소리 0/5
68
+ 이름표는 '멈춤' 으로 바뀐다 ← 코어는 트는 중이라 믿는다
69
+ <audio>.play() 0회
70
+ speechSynthesis.speak 0회
71
+ fetch 는 간다: …/WordSound/… → /functions/v1/word-tts-speak
72
+ 28초를 기다려도 안 운다
73
+ ```
74
+
75
+ **`speak` 0회가 답을 가른다.** 코어의 `speak()` 는 목소리를 못 받아도 **1.5초 안에 반드시**
76
+ `synth.speak` 를 부른다. 0회라면 ④ 낭독까지도 못 간 것이고, 사슬이 그 앞 — **리졸버를
77
+ 기다리는 자리**에서 선 것이다.
78
+
79
+ ### ① 시한이 없었다
80
+
81
+ 앱 리졸버를 `await` 로 그냥 기다렸다. 안 풀리면 **길이 통째로 선다** — 단추는 `멈춤` 인 채
82
+ ②③④ 어디로도 못 간다. 한 바퀴에 **30초** 시한을 건다.
83
+
84
+ 30초는 지어낸 수가 아니다 — 이 저장소가 서버 합성에 **17~29초**가 걸린다고 적어 두었다
85
+ (`TrainingStepAudioPlayer`, (75) 2026-10-05). 더 짧으면 **멀쩡히 느린 합성을 잘라** 결함을
86
+ 가린다. 시한의 몫은 빠르게 하는 것이 아니라 **끝나게** 하는 것이다.
87
+
88
+ **자리마다가 아니라 남은 몫을 나눠 준다**(`남은 시간 ÷ 남은 자리 수`). 바퀴 하나로만 묶으면
89
+ 앞(저장소 찾기)이 시한을 다 먹어 **뒤(합성)가 굶는다** — 그런데 음원 없는 낱말을 살리는 것이
90
+ 뒤쪽이다. 앞이 빨리 답하면 남은 몫이 뒤로 흘러간다.
91
+
92
+ ### ② 걸개를 잘못 걸었다
93
+
94
+ 리졸버 답에도 `^(https?:|blob:|data:audio|/|\./)` 를 걸어 **맨 상대 경로**
95
+ (`audio-cache/foo.mp3`)를 조용히 버렸다. 그 걸개는 **줄 자료**용이다 — 거기엔 소리 자리에
96
+ 제목이 섞여 온다. 리졸버는 *"소리 주소를 돌려준다"* 는 약속을 진 함수라 그럴 일이 없다.
97
+ 이제 빈 글자만 거른다.
98
+
99
+ ### ③ 조용히 실패하던 것이 말한다
100
+
101
+ 개발 모드에서 한 번씩 찍는다 — 안 풀렸다 · 주소를 안 줬다(받은 것까지) · 던졌다.
102
+ **뿌리는 아직 추측이다**(안 풀린 것인지, 풀렸는데 걸개가 버린 것인지 코어는 못 가린다).
103
+ 고친 것은 둘 다 막고 **어느 쪽이었는지 콘솔이 말하게** 한 것이다.
104
+
105
+ ### 내 시험이 그 자리를 **한 번도 안 세웠다**
106
+
107
+ 못 열넷이 다 초록이었는데, 그 시험들의 흉내는 리졸버가 **바로 답한다.** **안 풀리는
108
+ 리졸버**를 한 번도 안 세워 본 것이다. 그 자리를 세우는 못 여덟을 더했다
109
+ (`test/questionSoundRouteStuck.test.ts`). 시한을 빼고 깨 보면 시험이 20초 시한에 걸려
110
+ 멈춘다 — 앱에서 난 바로 그 꼴이다.
111
+
112
+ > 말귀_1 이 적었다 — *"타입·린트·시험이 다 초록이어도 소리가 나는지는 안 재진다."*
113
+ > 내 쪽이 더 컸다. 흉내가 **빠른 길만** 흉내 내고 있었다.
114
+
10
115
  ## 0.333.0 — (212) 확인창 본문 첫 글자 앞에 한 칸
11
116
 
12
117
  사장님 지시다 — *"전체 다 들이라는게 아니라 **본문 맨 앞에 스페이스 하나** 추가하라고"*.