@ihabdevteam/core 0.284.0 → 0.288.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,109 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.288.0
11
+
12
+ ### 뜸 중에 **소음 설정을 만져도** 소리의 때가 안 밀린다 — 못 둘 (시험만, **동작 불변**)
13
+
14
+ 치료사가 뜸이 도는 동안 소음 슬라이더를 만지는 길이다. 소음 설정이 바뀌면 `useNoiseFade` 의
15
+ 설정 효과가 다시 도는데, 그 안에서 *"메인이 도나"* 를 묻는 자리가 셋이다. 거기서 뜸을 잘못
16
+ 읽으면 **설정을 만졌을 뿐인데 단어가 늦게 난다.** 지금은 멀쩡하다 — 앞뜸 400ms 에 소음을
17
+ 끄면 656ms 에 소음이 멎고 단어는 제 때 1000ms 에 난다. **고친 것이 아니라 지킨 것**이다.
18
+ 3·5단계가 그 자리를 또 만진다.
19
+
20
+ **자가 먼저 고장나 있었다.** 못을 박고 깨 보니 **둘 다 안 울었다.** 가짜 `<audio>` 가
21
+ `load()` 때 `canplay` 를 안 뿜어서다 — 소음 *종류* 를 바꾸는 갈래는 `canplay` 를 기다렸다가
22
+ 다시 켜는데, 그 일이 아예 안 일어났다. 자를 고치고서야 울었다. 이 저장소에서 제 눈을 고친
23
+ 것이 아홉 번째다.
24
+
25
+ **그리고 셋 중 하나는 지금 겹옷이다.** 깨도 4376 개가 다 통과한다 — 뜸이 시작될 때 재생기가
26
+ `playbackState` 를 `'playing'` 으로 올려 **옆 조건이 이미 참**이기 때문이다. 안 울리는 것이
27
+ *안전한 것*이 아니라 **덮여 있는 것**이라, 그 사정을 코드 그 자리에 적었다. 지우려면
28
+ *"뜸이면 `playbackState` 가 `'playing'` 이다"* 를 먼저 문으로 세워야 한다 — 안 세우고
29
+ 지우면 다음에 그 하나가 안 따라간다.
30
+
31
+ > 지난밤의 결 그대로다: **죽은 코드를 지키는 시험은 통과한다.** 그래서 못이 안 울 때 가장
32
+ > 먼저 물을 것은 "안전한가" 가 아니라 **"그 길이 닿는 길인가"** 다.
33
+
34
+ ## 0.287.0 — **레지스트리에 없다**
35
+
36
+ 0.288.0 이 이 판의 코드에 **시험과 주석만** 더한 것이라, 둘을 줄에 세우는 대신 높은 쪽
37
+ 하나만 걸었다(`RELEASE.md` — *발행 일감은 한 번에 하나만, 늘 가장 높은 판으로*).
38
+ **아래 내용은 0.288.0 에 그대로 들어 있다.**
39
+
40
+ ### 껍데기를 걷고, **그만두는 뜻을 세는 토큰을 하나로** ((85) 2d, **동작 불변**)
41
+
42
+ 2a 에서 껍데기 셋(`뜸Ref` · `뜸취소` · `뜸기다리기`)으로 시작했다. 2c 에 하나, 2d 에 **영**이
43
+ 됐다 — 부르는 쪽이 진행기를 바로 쓴다. 껍데기는 옮기는 동안만 쓰는 발판이고, 남겨 두면
44
+ *"진행기를 쓴다"* 는 말과 *"제 손으로 든다"* 는 사실이 갈라진다.
45
+
46
+ 그리고 `jumpTokenRef` 가 **세대와 같은 일**이었다 — `멈춤의도()` 가 둘 다 올리고 트랙 이동이
47
+ 둘 다 집었다. 그런데 **가리는 범위가 달랐다**: 토큰은 **이동끼리만** 가리고 뜸 사슬은 못
48
+ 가렸다. 0.282.0 의 결함(뜸 중 번호 단추 → 다른 번호가 두 번)이 바로 그 틈이었다. 세대
49
+ 하나로 합쳤다.
50
+
51
+ **(85) 2단계가 끝났다.** 처음 세어 본 자리와 견주면:
52
+
53
+ 그만두는 뜻을 적던 곳 넷(재생의도Ref · 세대 · 뒤뜸에서멈춤Ref · 이어가기Ref) → **하나**
54
+ "지금 도는가" 를 셈한 곳 셋(틱 · 소음 · 토글) → **하나**
55
+ 트랙 이동을 가리던 토큰 둘(jumpTokenRef · 세대) → **하나**
56
+
57
+ **결함이 난 자리마다 ref 가 하나씩 늘고 있었다.** 0.278.0 이 둘을 더했고 0.282.0 이 또 한
58
+ 자리를 빠뜨렸다 — 적는 곳이 늘수록 빠뜨릴 자리도 는다. 이제 하나다.
59
+
60
+ > 글자를 짚는 시험 넷이 이 단계에서 빨개졌다 — **뜻은 그대로인데 이름이 바뀌어서**다.
61
+ > 이름 대신 **차례**를 묻도록 고쳤다(앞 뜸이 `play()` 앞에 있는가). 그중 하나는 **내가
62
+ > 주석에 적어 둔 옛 이름**을 코드로 읽고 울었다 — 오늘 같은 자리에서 두 번째라, 그 시험들은
63
+ > 이제 주석을 걷고 센다.
64
+
65
+ ## 0.286.0
66
+
67
+ ### 묻는 쪽이 **자리를 안 받는다** — `isRunning()` 하나로 ((85) 2c, **동작 불변**)
68
+
69
+ *"지금 시간표가 도는가"* 의 셈(`phase !== 'sound' && at > 0`)이 **세 벌**로 흩어져 있었다 —
70
+ 틱 · 소음 · 토글이 각자 자리(`padRef`)를 **받아 제 손으로** 셌다. 그래서 "뜸이란 무엇인가"
71
+ 가 자리마다 조금씩 달라질 수 있었고, 오늘 결함 **여섯**이 다 그 틈에서 났다(소음 감시 ·
72
+ 재생판 · 토글 · 그 토글의 두 번째 벌 · 번호 단추 · 스피커 자물쇠).
73
+
74
+ 이제 묻는 쪽은 **자리를 안 받는다.** 진행기를 받아 `isRunning()` 에게 묻는다 — 받으면 또
75
+ 제 손으로 셈하게 되므로, 자리 자체를 안 넘긴다. `뜸Ref` 껍데기도 가리킬 것이 없어져 사라졌다.
76
+
77
+ `test/usePlaybackSequencer.test.ts` 가 **그 셈이 진행기 밖에 또 있지 않은지** 센다(주석을
78
+ 걷고). 묻는 쪽이 `padRef` 를 다시 받으면 그것도 운다.
79
+
80
+ ### 0.271.0 에 세운 문이 **되돌아감을 잡았다**
81
+
82
+ 진행기를 넘기자 **앞뜸에 재생바가 멈췄다.** 진행기가 판마다 **새 객체**라 틱의 `start` 가
83
+ 매번 새로 지어지고, 손잡이 효과가 다시 돌며 **재생 도중 진행 사슬을 끊은** 것이다.
84
+
85
+ `audioProgressChainRerender`(0.271.0)가 바로 울었다. 그 문이 없었으면 **"앞뜸에 재생바가 안
86
+ 움직인다"** 를 또 사용자가 짚을 뻔했다 — (86) 으로 이미 한 번 짚으신 바로 그 자리다.
87
+ 진행기 겉을 `useMemo` 로 고정했다.
88
+
89
+ > 그 문은 (77) 을 좇다 "지금은 안 끊기지만 끊길 수 있는 자리" 로 세운 것이었다. **그때는
90
+ > 아무것도 안 잡던 문**이다. 보름이 아니라 **엿새 만에** 제 값을 했다.
91
+
92
+ 못은 **90가지**가 됐다.
93
+
94
+ ## 0.285.0
95
+
96
+ ### 멈춘 자리를 **진행기가 적어 둔다** — `pause` / `resume` ((85) 2b, **동작 불변**)
97
+
98
+ "멈췄다 다시 누르면 어디서부터인가" 를 재생기가 ref 둘(`뒤뜸에서멈춤Ref` · `이어가기Ref`)로
99
+ 들고 있었다. 그래서 **멈추는 자리마다 그 둘을 맞춰 적어야** 했다 — 네 자리 중 한 곳만
100
+ 빠뜨리면 틀린 데서 이어 간다. 실제로 0.278.0 에서 그 둘을 더했는데 0.282.0 에 번호 단추가
101
+ 또 한 자리를 빠뜨려 따로 지워 줘야 했다.
102
+
103
+ **어느 구간에서 멈췄는지는 자리를 쥔 쪽이 안다.** 진행기로 옮긴다 — `pause(이어가기)` 로
104
+ 적고 `resume()` 으로 묻는다. 답은 둘이다: `'restart'`(앞뜸이었다 → 앞뜸부터 다시) 또는
105
+ 이어 갈 함수(사이·뒤뜸이었다 → 다음 소리로). 재생기의 ref 둘은 사라졌다.
106
+
107
+ > **`abort()` 가 그 적바림까지 지우게 했다가 못이 울렸다.** `멈춤의도()` 안에서 `pause()`
108
+ > 다음에 `abort()` 가 불리는데, `abort()` 가 지우면 멈춘 자리를 바로 잃어 **이을 때 앞 소리가
109
+ > 또 난다.** 둘은 하는 일이 다르다 — `pause` 는 적고 `abort` 는 걷는다.
110
+
111
+ 못은 **85가지**가 됐다.
112
+
10
113
  ## 0.284.0
11
114
 
12
115
  ### 남이 스피커를 가져가도 **뜸은 제 것인 줄 알고 소리를 냈다** — 여섯 번째 같은 꼴 ((85) 2b)