@ihabdevteam/core 0.348.0 → 0.349.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,84 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.349.0 — 사전에서 죽은 열쇠 277개를 걷었다
11
+
12
+ ### 사전에서 죽은 열쇠 277개를 걷었다 — 첫 화면 조각에서 약 16KB
13
+
14
+ 말귀 청(2026-10-20). 코어 `ko.json` 1,010 열쇠 가운데 **앱도 코어도 안 부르는** 것들이 첫 화면
15
+ 조각(`index-*.js`, gzip 100KB)에 그대로 실리고 있었다. 말귀가 재어 289개를 짚고 목록을
16
+ `docs/CORE_DEAD_I18N_KEYS_2026-10-20.md` 로 넘기며 *"걷기 전에 코어 쪽에서 한 번 더 보라"* 고
17
+ 적어 두었다. 봤더니 **열하나가 살아 있었다.**
18
+
19
+ | | 전 | 후 |
20
+ |---|---|---|
21
+ | `ko.json` | 1,010 | **733** (277 지움) |
22
+ | `en.json` | 1,028 | **749** |
23
+
24
+ 갈래가 통째로 사라진 것: `game` · `landing` · `login` · `help` · `company` · `inquiry` ·
25
+ `homework` · `trainingSettings` · `accessLinkManager` · `searchField` · `myWordTraining` ·
26
+ `trainingPlanRun` · `trainingSetPage` · `wordTrainingPreview`.
27
+
28
+ #### 살려 둔 열하나 — 말귀 잼이 못 보는 세 자리
29
+
30
+ 그쪽 잼은 코어 `dist/**/*.js` 를 봤는데 거기 **놀이터도 시험도 없고**, 앱 쪽은 `deadI18nKeys`
31
+ 가 얼린 목록(= 앱 **화면**이 안 부르는 것)이라 **앱 시험**이 빠진다.
32
+
33
+ | 열쇠 | 어디서 쓰나 |
34
+ |---|---|
35
+ | `training.result.elapsed` | 놀이터 `BarChartPage:229·232` |
36
+ | `trainingStatus.weekly.title` · `.daily` | 놀이터 `BarChartPage:165·168·181·194` |
37
+ | `trainingStatus.homework.totalRate` | 놀이터 `RingChartPage:122·123` |
38
+ | `training.audioStatus.synthesizing` | 코어 시험 `audioStatusSynthesizing:33` |
39
+ | `trainingMiss.runs` · `.skippedOnly` | 코어 시험 `enPluralForms:48·53·54` |
40
+ | `customers.visitHistory.registerTitle` · `.popupTitle` · `customers.schedule.registerTitle` | **말귀 시험** `customerPopupTitleSpacing` |
41
+ | `wordPairs.confirmMessage` | 코어 시험 `enPluralForms` 의 `EXCLUDED` 목록 |
42
+
43
+ 말귀 시험 셋이 특히 그렇다 — 그쪽 `test/i18nResources` 가 **코어 사전 위에 앱 사전을 얹어**
44
+ 주고, 이 셋은 **코어에만 있다.** 그 파일 머리말이 바로 이 날을 적어 두고 있었다:
45
+ *"코어가 옛 사본을 걷는 날 한꺼번에 빨개진다."*
46
+
47
+ #### 영어 복수 짝이 목록에 없었다 — 찾아낸 것 여덟, 지운 것 **넷**
48
+
49
+ 그쪽 목록은 `ko.json` 열쇠로 만들어져 **`_one`/`_other` 가 빠져 있다**(en 이 18개 많은 까닭).
50
+ 열쇠만 지우면 그 짝이 en 에 남는다. 목록 열쇠의 짝으로 **여덟**을 찾아 그중 **넷**을 걷었다 —
51
+ 나머지 넷은 위에서 살려 둔 열쇠의 짝이라 함께 남는다.
52
+
53
+ ```
54
+ 지웠다 accessLinkManager.uses_one · _other · trainingStatus.time.countLabel_one · _other
55
+ 남겼다 trainingMiss.runs_one · _other · trainingMiss.skippedOnly_one · _other
56
+ ```
57
+
58
+ **찾아낸 수와 지운 수를 같은 칸에 적지 않는다** — 말귀에 처음 알릴 때 여덟을 지운 수인 양
59
+ 적었다가 바로잡았다. 빈 마디도 걷었다.
60
+
61
+ ko 277 · en 279(복수 짝 넷 포함)를 지웠다. 둘의 차는 ko 에만 있던 열쇠 둘이다.
62
+
63
+ #### 소비자는 넷이다 — 말귀가 잰 둘이 다가 아니다
64
+
65
+ `kscan` · `sound-localization-system` · `ihab_offcial_web/admin` 도 코어를 쓴다. 셋 다 `t()` 를
66
+ **직접 안 부르고**(코어 컴포넌트가 제 안에서 부른다) 0건이 걸렸다. 앞 둘은 아직 `^0.211.0` 이라
67
+ 이 판이 닿지도 않는다. **안 재고 0건인 것과 재서 0건인 것은 다르다.**
68
+
69
+ #### 내 그물이 세 번 성겼다 — 셋째는 **관문이** 잡았다
70
+
71
+ ① 처음엔 **289 중 289가 "살아 있다"** 로 나왔다 — 말귀의 **얼린 목록 자체**
72
+ (`deadI18nKeys.test.ts`, 276건)를 쓰임으로 세고 있었고, **kscan 을 통째로 건너뛰었다**(소스가
73
+ `src/` 가 아니라 Next.js 꼴이라 `src` 만 짚은 훑기에 안 걸렸다).
74
+
75
+ ② 고쳐서 31로 줄였더니 다섯이 **더 긴 열쇠의 앞머리**였다 — `store.import` 가
76
+ `store.importAria` 에, `usage.pending.title` 이 `usage.pending.titleSpeechear` 에.
77
+ **경계 없는 찾기는 짧은 열쇠를 전부 살려 낸다.**
78
+
79
+ ③ 그래서 앞뒤로 `(?<![A-Za-z0-9_.])…(?![A-Za-z0-9_.])` 를 둘렀더니 이번엔
80
+ `training.audioStatus.synthesizing` 를 **놓쳤다.** 그 시험은 열쇠를 글자가 아니라 **속성으로**
81
+ 탄다 — `(d as …).training.audioStatus.synthesizing`, 앞 글자가 `.` 이다. 지우고 관문을 돌려
82
+ **빨강으로 알았다.**
83
+
84
+ **앞뒤 경계는 다르다.** 뒤는 `.` 을 막아야 하고(긴 열쇠에 안 걸리게), 앞은 막으면 안 된다
85
+ (속성으로 타는 쓰임을 놓친다). 앞에 긴 길이 붙어 헛걸리는 쪽은 **열쇠를 살려 두는** 쪽이라
86
+ 지우기 판단에서는 안전한 틀림이다.
87
+
10
88
  ## 0.348.0 — 다시 듣기가 같은 소리를 또 받던 것 (311, 급함)
11
89
 
12
90
  **사장님이 폰에서 숙제 단어훈련을 하시다 신고하셨다** — *"소리가 끊기고, 재생바와 사운드