@ihabdevteam/core 0.269.0 → 0.271.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,94 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.271.0
11
+
12
+ ### 진행 사슬이 **틀이 느리면 스스로 말한다** — 개발 중에 한 번 (말귀 신고 (77) 을 좇다)
13
+
14
+ 말귀가 "재생바가 소리 중에 얼어붙고 **경계에서만** 뛴다" 를 재서 보냈다(요청 (77),
15
+ 0.267.0 은 촘촘했는데 0.270.0 은 성기다). 나도 놀이터에 앱과 같은 꼴(소음 켬 · 파형 끔 ·
16
+ 소리 둘 · 앞뒤 뜸)을 세워 재니 **똑같이 1초에 한 번씩 계단으로** 올라갔다.
17
+
18
+ **두 각도로 파고 둘 다 깨끗했다.**
19
+
20
+ 1. **셈** — 틀을 손으로 돌려 틱을 몰았다(`test/useProgressTicker.test.tsx`, 다섯 개 새로).
21
+ 앞 뜸 0→25%, 소리 25→75%, 뒤 뜸 75→100%, 뜸 0 이면 50%. **세 구간 모두 매 틀
22
+ 나아가고** 경계에서 뒤로 안 튄다. (74)③ 은 그동안 순수 함수와 배선으로만 잡혀 있었고
23
+ "사슬이 세 구간을 지나며 실제로 움직이나" 는 아무도 안 봤다.
24
+ 2. **사슬이 끊기나** — 손잡이 효과의 치우기가 `stopTicker()` 를 부른다. 그 효과의 입력이
25
+ 하나라도 판마다 새로 지어지면 **재생 도중 사슬이 끊기고**, 다음 구간까지 아무도 다시
26
+ 안 걸어 **마커와 파형이 함께 얼어붙는다** — 신고된 모양 그대로다. 지금 코드는 안
27
+ 끊긴다(`test/audioProgressChainRerender.test.tsx`). 끊기게 만들어 보면 빨개진다.
28
+
29
+ **그러고 나서야 틀 세기를 달았다.**
30
+
31
+ 101ms left=100% 틀=0
32
+ 1002ms left=100% 틀=1
33
+ 2001ms left=100% 틀=2
34
+
35
+ **1초에 틀 하나.** 숨은 칸에서 브라우저가 `requestAnimationFrame` 을 줄인 것이다. 이 사슬은
36
+ **매 틀** 값을 쓰므로, 틀이 1초에 하나면 바도 1초에 한 번만 움직인다 — **값은 다 맞는데
37
+ 멈춘 것처럼 보인다.**
38
+
39
+ 그 한 줄을 먼저 알았으면 거기서 끝났을 일이라, **사슬이 스스로 말하게** 한다. 틀 사이가
40
+ 400ms 를 넘으면 개발 판에서 **한 번** 찍는다 — 몇 ms 인지와 함께, **칸이 숨었는지 보이는지로
41
+ 다른 말**을 한다(숨었으면 "지금 재는 값은 사람이 보는 화면과 다르다", 보이면 "같은 화면에서
42
+ 무거운 일이 도는지 보라"). 운영 빌드에서는 아무 일도 안 한다.
43
+
44
+ **(77) 은 코어 결함이 아니었다 — 말귀가 틀 수를 달아 가름냈다(거둬들였다).** 같은 코드 ·
45
+ 같은 화면에서 두 번 쟀다:
46
+
47
+ 틀이 도는 자리 (3초에 361틀 = 120fps)
48
+ 966ms left 0.339879% 틀=114 ← 뜸 시작, 여기서부터 촘촘히
49
+ 1570ms left 23.1873% 틀=186
50
+ 2053ms left 41.1992% 틀=243 ct=0.09 ← 소리 중에도 이어진다
51
+
52
+ 틀이 안 도는 자리 (바로 다음 호출)
53
+ 848ms ~ 2908ms left 100% 틀=0 ← 내내 얼어붙음
54
+
55
+ **틀이 0 이면 안 움직이고, 틀이 돌면 매끄럽다.** "경계에서만 뛴다" 도 틀이 1초에 한둘이라
56
+ 그 사이 값만 보인 것이었다.
57
+
58
+ > **자료는 이미 답을 들고 있었다.** 신고에 "`left` 와 `clip` 이 **늘 짝을 맞춘다**" 가 적혀
59
+ > 있었는데, 셈이 틀렸다면 **값이 틀리게** 나오지 짝을 맞춘 채 **덜 자주** 나오지는 않는다.
60
+ > 짝은 맞는데 드물다 — 그건 셈이 아니라 **부르는 쪽**이다. 같은 줄을 양쪽이 반대로 읽었고,
61
+ > 가른 것은 **틀 수 한 줄**이었다. 그래서 이 판이 그 한 줄을 사슬에 박아 둔다.
62
+
63
+ ## 0.270.0
64
+
65
+ ### 소리 한 번에 **낭독기가 말을 두 마디** 했다 — 알릴 값이 있는 것만 읽는다 (사장님 결정 (나))
66
+
67
+ 불러오는 자리(`audio-player__loading`)는 `role="status" aria-live="polite"` 라 **글이 바뀔
68
+ 때마다 읽힌다.** 그 글은 `STATUS_MESSAGES` 다 — 0.265.0 에 "나머지 상태 말은 개발용이라
69
+ 그대로 둔다" 고 적었는데, **그것이 틀렸다.** 개발용이 아니라 **화면에 그려지고 낭독기가
70
+ 읽는** 글이다.
71
+
72
+ 놀이터 실측(소리가 이미 캐시에 있는 **가장 짧은 판**):
73
+
74
+ 94ms "오디오 길이 측정…"
75
+ 746ms "준비 완료"
76
+ 839ms 사라짐
77
+
78
+ 곧 단어 소리를 한 번 누를 때마다 낭독기 쓰는 사람은 개발자 말을 **두 마디** 듣는다. 느린
79
+ 망에서는 `리소스 매핑 중…` · `서명 URL 조회…` · `다운로드 중…` 까지 줄줄이 선다 — (75) 가
80
+ 짚은 것과 **같은 결함**이고, TTS 가 아닌 길(단어 훈련 소리가 전부 지나는 길)에 남아 있었다.
81
+ (75) 는 17~29초라 눈에 띄었고 이쪽은 1초 아래라 안 띄었을 뿐이다. **낭독기에는 길이가
82
+ 상관없다.**
83
+
84
+ `ANNOUNCED_STATUSES` 를 둔다. **`준비 완료` 는 일이 끝난 뒤의 알림이라 안 읽는다** — 끝난
85
+ 것은 **소리가 나는 것으로** 이미 안다. `대기` 도 아직 아무 일도 안 일어난 자리다. 기다리는
86
+ 중임을 알리는 것과 잘못됐음을 알리는 것만 읽는다.
87
+
88
+ **보이는 글은 안 바뀐다.** 눈으로 보는 사람에게는 전과 똑같다.
89
+
90
+ `test/audioStatusAnnounce.test.tsx` 가 **글 · 색 · 읽힘 셋이 같은 상태를 덮는지** 센다 —
91
+ 상태를 새로 더하면 "이것은 읽혀야 하나" 를 **반드시 정하게** 된다. 늘 읽히게 되돌리면
92
+ 실제로 빨개지는지 확인했다.
93
+
94
+ > **사람이 쓸 말로 묶는 쪽((가))은 안 했다** — `소리를 준비하고 있습니다…` 한 마디로 묶고
95
+ > 세부는 개발 판에서만 보이게 하는 것. **보이는 글이 바뀌는 일**이라 쓰는 사람에게 묻는
96
+ > 중이다(말귀가 전한 사용자 말: *"얼마나 걸릴지, 고장인지 기다리는 중인지 알 길이 없다"*).
97
+
10
98
  ## 0.269.0
11
99
 
12
100
  ### 소음 설정의 **모양**도 함께 연다 — `CoreNoiseSettings` · `CoreNoiseType`
@@ -39,6 +127,21 @@ All notable changes to this project will be documented in this file.
39
127
  자(이쪽은 `play`/`pause` 호출을 가로채고, 그쪽은 소음 요소를 쥐고 80ms 마다 값을 뜸)로
40
128
  닿았다.
41
129
 
130
+ **그 자리에서 (74)③④ 의 나머지도 쟀다** — 소음을 켠 채, 뒤 뜸까지.
131
+
132
+ 15324 ended (소리 끝)
133
+ 15405 채움 93.89% ← 뒤 뜸이 시작된다. 셈으로는 14171/15090 = 93.91%
134
+ 16301 채움 99.75%
135
+ 16401 채움 100% ← 뒤 뜸 1000ms 가 끝나는 자리
136
+
137
+ **뒤 뜸 내내 고르게 올라가 정확히 100% 에 닿는다** — 멈췄다 뛰지 않는다. 앞 뜸 쪽은
138
+ 0.267.0 에서 쟀고(901ms 에 0.23%), 이것이 그 반대쪽이다.
139
+
140
+ 파형(④)도 같은 자리에서 봤다 — 94칸, **앞뒤 뜸 자리는 소음 막대가 0.38 로 서 있고**
141
+ (45px, 층 불투명도 1) 소음 막대 중 숨은 것은 **0** 이다. 그 자리의 문장 막대는 0 이라
142
+ 숨는데, 그것이 0.266.0 에 적은 규칙 그대로다 — **깔개가 있으면 숨긴다.** 뜸 구간에
143
+ 소음이 실제로 나므로(0.268.0) 화면과 귀가 같은 것을 말한다.
144
+
42
145
  > **겹치기(뜸과 불러오기)는 안 한다.** 소음이 뜸에 깔리게 되면서 그 1초가 "빈 1초" 가
43
146
  > 아니라 **"소음만 깔리는 1초"** 가 됐다 — 소음 하 훈련에서 귀가 소음에 자리를 잡는
44
147
  > 시간이다. 겹치면 그 길이가 **망 속도로 정해진다**(빠르면 사라지고 느리면 남는다).