# Changelog 본 형식 = [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) 형식을 따름. 버전 규칙 = [Semantic Versioning](https://semver.org/spec/v2.0.0.html). **EN —** Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). > **eslint-plugin-dsmonitor** 측 version history → [eslint-plugin-dsmonitor/CHANGELOG.md](./eslint-plugin-dsmonitor/CHANGELOG.md) > **EN —** **eslint-plugin-dsmonitor** version history → [eslint-plugin-dsmonitor/CHANGELOG.md](./eslint-plugin-dsmonitor/CHANGELOG.md) ## [0.8.7] — 2026-06-23 ### 변경 / Changed - **한 —** README 가 비개발자(기획·퍼블리싱) 진입을 우선하도록 재구성됩니다. 섹션 순서가 "시작하기"(측정 항목 → 설치 → 빠른 시작 → CLI → 출력물 위치 → 보고서 활용) 와 "심화 레퍼런스"(설정 가이드 → 환경별 예 → Figma 동작 원리 → ESLint → 사이드카 plugin → 환경변수 → FAQ) 두 띠로 나뉩니다. 옛 흐름에서 맨 뒤에 있던 출력물 위치·보고서 활용이 실행 단계 직후로 올라오고, 옛 §2 의 사이드카 plugin 개념 설명이 작성 가이드와 함께 §11 로 통합됩니다. 헤더 번호와 본문 상호참조가 함께 재번호됩니다. 코드·동작 변경 없음 (문서 전용). - **EN —** The README is restructured to put non-developer (planning / publishing) onboarding first. Sections are split into two bands — "Getting started" (Measurement Areas → Installation → Quick Start → CLI → Output Locations → Reading the Reports) and "Reference" (Configuration Guide → Per-stack Sketches → How Figma Matching Works → ESLint → Sidecar Plugins → Environment Variables → FAQ). Output Locations and Reading the Reports, previously at the very end, move up to right after the run step, and the sidecar-plugin concept (formerly §2) is merged into the authoring guide at §11. Header numbers and in-text cross-references are renumbered accordingly. No code or behavior change (docs only). ### 추가 / Added - **한 —** 비개발자 진입 보강 블록이 한국어·영어 정본에 1:1 로 추가됩니다 — 상단 목차 + 역할별 읽기 경로, 설치 사전 조건(Node.js 18+ · npm · 프로젝트 루트 터미널), "비개발자 5분 시작" 박스와 대시보드 여는 법(`open …/dashboard-*.html` · Windows `start` · 탐색기 더블클릭), 설정 가이드 머리말의 "(필수)" 의미 주석, FAQ 의 용어 풀이 표, `overview-for-stakeholders.md` 안내. - **EN —** Non-developer onboarding blocks are added 1:1 to both the Korean and English references — a top table of contents + role-based reading paths, installation prerequisites (Node.js 18+ · npm · terminal at the project root), a "Non-developer 5-minute start" box with how to open the dashboard (`open …/dashboard-*.html` · Windows `start` · double-click in the file explorer), a "(required)"-label clarification in the configuration-guide intro, a glossary table in the FAQ, and a pointer to `overview-for-stakeholders.md`. ### 참고 / Notes - 문서 전용 release. 측정 데이터 / baseline JSON shape / sub-key 명칭 / CLI 동작 모두 변경 없음. 정렬 라인 diff 로 레퍼런스 본문 무손실 확인. - Docs-only release. Measurement data, baseline JSON shape, sub-key names, and CLI behavior are all unchanged. Reference content verified intact via a sorted-line diff. - 영어 정본의 "지원 기술 스택" 섹션 누락(옛 비대칭)은 이번 범위 밖 — 다음 release 후보. - The missing "Supported Tech Stacks" section in the English reference (a pre-existing asymmetry) is out of scope here — a follow-up candidate. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.6] — 2026-05-29 ### 정정 / Fixed - **한 —** dashboard summary 탭 "금지 CSS 클래스 (활용 횟수)" 카드 안 emph-row 정렬이 카운트 내림차순으로 정정됩니다. 옛 0.8.5 까지 매트릭스 정의 순서 그대로 노출 (예: tailwind-project = `Bootstrap utility` → `@apply-mixed` → `raw CSS`) 흐름이라 code 탭 ForbiddenSection / StylingMethodSection 의 카운트 내림차순 정렬 흐름과 어긋남. 0.8.6 부터 transformer (`baseline-to-summary-data.ts`) 안 `forbiddenByPreset` 배열 생성 시점에 카운트 내림차순 sort 적용 — code 탭 정렬 흐름 일관. - **EN —** The dashboard summary tab "금지 CSS 클래스 (활용 횟수)" card now sorts emph-rows by count descending. Through 0.8.5 the rows followed the matrix definition order (e.g. for tailwind-project: `Bootstrap utility` → `@apply-mixed` → `raw CSS`), out of step with the code-tab ForbiddenSection / StylingMethodSection which already sort by count. Starting with 0.8.6 the transformer (`baseline-to-summary-data.ts`) sorts `forbiddenByPreset` by count descending — consistent with the code tab. ### 참고 / Notes - 옛 0.8.5 출시 직후 hotfix patch. 측정 데이터 / baseline JSON shape / sub-key 명칭 / 매핑 정의 모두 변경 없음 — summary 탭 emph-row 정렬 흐름만 정정. - Hotfix patch following 0.8.5. Measurement data, baseline JSON shape, sub-key names, and mapping definitions are all unchanged — summary tab emph-row sort order only. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.5] — 2026-05-29 ### 정정 / Fixed - **한 —** dashboard summary 탭 "금지 CSS 클래스" 카드가 preset 매트릭스 흐름 + 한글 라벨로 정정됩니다. 옛 0.8.4 까지 summary 카드 안 emph-row 2개 (`bootstrap-utilities` / `tailwind-classes`) 가 hard-code 로 노출 — preset 무관 흐름이라 tailwind-project 환경에서 `tailwind-classes` 가 의미 X 자리에 노출되고, emph-row 라벨도 영문 코드 키 직접 표시 (한글 라벨 적용 X). 옛 0.8.3 매트릭스 필터링 + 0.8.4 라벨 정정이 code 탭 한정 흐름이었음. 0.8.5 부터 summary 카드도 `FORBIDDEN_BY_PRESET` 매트릭스 + `FORBIDDEN_LABELS` 매핑 활용 — tailwind-project 환경 = `Bootstrap utility` / `@apply-mixed` / `raw CSS` 3 emph-row, scss-project = 4 emph-row, bootstrap / css-modules-project 도 각자 매트릭스 따라 결정. 카드 제목도 옛 `금지 CSS 클래스 개수` 에서 `금지 CSS 클래스 (활용 횟수)` 로 정정 — code 탭 일관 (occurrence 단위 명시). - **EN —** The dashboard summary tab "forbidden CSS class" card now uses preset-matrix flow + Korean labels. Through 0.8.4 the card emitted two hard-coded emph-rows (`bootstrap-utilities` / `tailwind-classes`) regardless of preset, so tailwind-project setups saw irrelevant rows and the labels showed raw English keys (no Korean mapping). The 0.8.3 matrix filtering + 0.8.4 label rename only covered the code tab. Starting with 0.8.5 the summary card also consumes `FORBIDDEN_BY_PRESET` + `FORBIDDEN_LABELS` — tailwind-project shows `Bootstrap utility` / `@apply-mixed` / `raw CSS` (3 rows), scss-project 4 rows, bootstrap / css-modules-project follow their own matrix. The card title is also updated from `금지 CSS 클래스 개수` to `금지 CSS 클래스 (활용 횟수)` to match the code-tab convention (explicit occurrence unit). ### 변경 / Changed - **한 —** `SummaryTabData` 안 옛 derived field (`forbiddenBootstrap` / `forbiddenTailwind`) 가 폐기되고 신규 `forbiddenByPreset` 배열 필드 1개로 통일됩니다. transformer (`baseline-to-summary-data.ts`) 가 preset 매트릭스 + 라벨 매핑 결과를 미리 build, JSX 는 단순 map 흐름. dashboard HTML inject 자체로 활용되는 derived field 라 외부 분석 도구에 영향 X (baseline JSON shape 자체는 그대로). - **EN —** The legacy derived fields (`forbiddenBootstrap` / `forbiddenTailwind`) on `SummaryTabData` are dropped in favour of a single `forbiddenByPreset` array. The transformer (`baseline-to-summary-data.ts`) precomputes the matrix + label mapping result so JSX is a simple `.map`. These fields only feed dashboard HTML; downstream analysis tooling that reads baseline JSON is unaffected. - **한 —** preset 매트릭스 + 라벨 매핑 정의가 transformer (TS) 와 code-tab.jsx (babel-inline) 두 곳에 중복 정의됩니다 — babel-inline jsx 가 ESM import 흐름이 아니라 자연스러운 중복. 다음 release 에서 통합 흐름 결정 가능 (예: `shell.ts` 안 `window.__FORBIDDEN_META` inject 활용). - **EN —** The preset matrix and label mapping are duplicated in two places — the TS transformer and `code-tab.jsx` (babel-inline). The duplication is acceptable for now because the inline JSX cannot use ESM imports; a follow-up release may consolidate them (e.g. injecting `window.__FORBIDDEN_META` from `shell.ts`). ### 참고 / Notes - 옛 0.8.4 출시 직후 hotfix patch. 측정 데이터 / baseline JSON shape / sub-key 명칭 모두 변경 없음 — summary 탭 렌더링 정정 + transformer 안 derived field 정리. - Hotfix patch following 0.8.4. Measurement data, baseline JSON shape, and sub-key names are all unchanged — summary tab render fix plus derived-field tidy-up in the transformer. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.4] — 2026-05-29 ### 정정 / Fixed - **한 —** dashboard 두 카드의 metric 단위가 카드 제목에 명시됩니다 — 금지 CSS 클래스 카드는 활용 횟수 (occurrence) 단위 (`forbiddenClassCount.byId` = `forbiddenOccurrences`), 스타일링 방식 분포 카드는 영향 코드 파일 수 단위 (`stylingMethodDistribution.counts.forbidden` = `forbiddenFileCounts`) — 같은 sub-key id 가 두 카드에서 다른 metric 으로 노출되던 흐름이 옛 0.8.0 도입 시점부터 의도된 설계였으나 단위 명시가 없어 사용자 혼동을 유발했습니다. 새 카드 제목 — `금지 CSS 클래스 (활용 횟수)` / `스타일링 방식 분포 (영향 코드 파일 수)`. - **EN —** Metric units are now spelled out in the card titles. The forbidden CSS class card surfaces occurrence counts (`forbiddenClassCount.byId` = `forbiddenOccurrences`), while the styling-method-distribution card surfaces file counts (`stylingMethodDistribution.counts.forbidden` = `forbiddenFileCounts`). The two cards have always shown different metrics for the same sub-key id (by design since 0.8.0), but the lack of explicit unit labels confused users. New titles — `금지 CSS 클래스 (활용 횟수)` / `스타일링 방식 분포 (영향 코드 파일 수)`. - **한 —** 금지 CSS 클래스 카드 dist-row 의 두 줄 흐름 (한글 라벨 + 영문 mono) 이 한 줄 흐름으로 회귀합니다. 한글 라벨 (`Bootstrap utility`) 과 영문 mono (`(bootstrap-utilities)`) 가 거의 동일 흐름이라 시각 중복 — 한글 라벨 단독 표시로 정리. 스타일링 방식 분포 카드는 옛 두 줄 흐름 그대로 유지 (다른 카테고리 — allowed / forbidden / orphanClass / noClass — 가 섞여 영문 mono 식별자 역할 필요). - **EN —** The two-line dist-row layout in the forbidden CSS class card reverts to a single line. The Korean label (`Bootstrap utility`) and the mono key (`(bootstrap-utilities)`) read nearly identically, so the second line was visual redundancy. The styling-method-distribution card keeps the two-line layout (different categories — allowed / forbidden / orphanClass / noClass — mix in there, so the mono key still serves as an identifier). - **한 —** 금지 CSS 클래스 카드의 그룹별 분포가 preset 매트릭스 따라 필터링됩니다. 옛 흐름은 baseline JSON 안 `byId` 모든 sub-key 를 그대로 노출 — `analyzeStyling()` 안 forbidden / matrix sub-key 초기화 흐름이 preset 별 자동 필터링을 보장한다고 옛 0.8.3 분석에서 단정했으나, 실제로는 baseline JSON 안 다른 preset 의 sub-key 가 0 카운트로 그대로 남아 dashboard 에 잘못 노출되던 케이스가 있었습니다. 0.8.4 는 dashboard 표시 흐름에서 `FORBIDDEN_BY_PRESET` 매트릭스로 한 번 더 필터링 — baseline JSON raw key 는 옛 그대로 보존 (호환성 유지). - **EN —** Forbidden CSS class card group distribution now filters by preset matrix. Previously every sub-key under baseline JSON `byId` was rendered as-is. The 0.8.3 analysis claimed `analyzeStyling()` already pruned per-preset, but residual sub-keys from other presets could still leak in at zero counts and surface in the dashboard. 0.8.4 applies `FORBIDDEN_BY_PRESET` matrix filtering at the render layer too — raw keys in baseline JSON are unchanged (compatibility preserved). - **한 —** 스타일링 방식 분포 카드 row 위치가 카테고리 그룹으로 분리됩니다 — 측정 대상 (권장 방식 / 전역 허용 / 금지 sub-key) 가 위쪽, 측정 대상 X (className 없음 / 고아 클래스) 가 아래쪽. 그룹 안 카운트 내림차순. 옛 흐름 (전체 카운트 내림차순) 은 noClass / orphanClass 가 측정 대상 row 들과 섞여 측정 대상 / 측정 대상 X 경계가 흐려졌습니다. - **EN —** Styling-method-distribution card rows are now grouped by category — measured rows (preferred method / allowedGlobal / forbidden sub-keys) at the top, excluded rows (noClass / orphanClass) at the bottom. Sort by count is preserved within each group. The previous single-list sort caused noClass / orphanClass to land between measured rows, obscuring the boundary. - **한 —** 스타일링 방식 분포 카드의 cross-ref-pill 표기가 `분모: 527 (전체 코드 파일)` 에서 `전체 코드 파일: 527` 로 정정됩니다. 옛 표기 안 `분모` 가 `preferredCompliance` 계산식 안 `분모` 표기와 헷갈리던 흐름 해소. `preferredCompliance` fnote 안 `분모` 표기 자체는 옛 그대로 (계산식 분모 의미 정확). - **EN —** The cross-ref-pill in the styling-method-distribution card now reads `전체 코드 파일: 527` instead of `분모: 527 (전체 코드 파일)`. The previous wording conflicted with the `분모` (denominator) appearing in the `preferredCompliance` formula breakdown. The fnote's `분모` wording inside the formula is preserved (still accurate there). - **한 —** dashboard footer 의 버전 표기가 dsmonitor 패키지 버전과 자동 일관됩니다. 옛 `v0.1 · 2026-04-24` hard-code 가 `v · ` 형식으로 동적 결정 — shell.ts 안 `readDsMonitorMeta()` 가 패키지 자체의 `package.json` 을 read 해 `window.__DSMONITOR_META` 로 inject. release 시점 자동 갱신. - **EN —** The dashboard footer version label now auto-syncs with the dsmonitor package version. The hard-coded `v0.1 · 2026-04-24` becomes `v · ` — `shell.ts`'s `readDsMonitorMeta()` reads the package's own `package.json` and injects `window.__DSMONITOR_META`. Updates automatically on every release. ### 변경 / Changed - **한 —** matrix forbidden sub-key 명칭 변경 — `scss-modules` → `scss-imports`. 옛 명칭이 CSS Modules 흐름 (`.module.css`) 과 헷갈리던 점 정정. 본 sub-key 는 tailwind-project preset 안 SCSS 파일 import 자체를 금지하는 의도 (옛 preset 정의 안 영문 라벨 `SCSS / Sass imports` 와 일관). **옛 baseline 호환 X** — 옛 baseline 안 `scss-modules` 카운트는 새 baseline 안 `scss-imports` 자리로 직접 비교 X. 옛 preset 정의 흐름이 `classPatterns: []` 빈 정의라 실제 카운트는 0 — 영향 LOW. - **EN —** The matrix forbidden sub-key is renamed — `scss-modules` → `scss-imports`. The previous name collided with CSS Modules (`.module.css`); the sub-key in tailwind-project preset is about banning SCSS file imports outright (matches the preset's existing English label `SCSS / Sass imports`). **Breaking for 0.8.3 baselines** — `scss-modules` counts cannot be directly compared to `scss-imports` in 0.8.4. Impact is low since the preset's empty `classPatterns: []` produced zero counts in practice. - **한 —** README 안 도입성 표현이 일반 설명 (`DSMonitor`) 으로 정정됩니다 — README 두 정본 (한국어 / 영어) 의 제목 (`# DSMonitor`) + 도입문 4곳. 코드 기반 (CLI / 패키지명 / `dsmonitor.config.ts` / 파일 경로 / import 등) 안 lowercase `dsmonitor` 는 옛 그대로 보존 (실제 코드 흐름과 일관). - **EN —** README introductory copy switches to `DSMonitor` (general phrasing) — title (`# DSMonitor`) and four intro sentences across both references (Korean / English). Code-grounded references (CLI, package name, `dsmonitor.config.ts`, file paths, imports) keep the lowercase `dsmonitor` (matching actual code usage). ### 옛 사용자 영향 / Migration notes - **한 —** `scss-modules` → `scss-imports` 명칭 변경으로 옛 baseline 호환 X. 옛 baseline 안 `scss-modules` 카운트는 새 baseline 안 `scss-imports` 자리로 직접 비교 X. 옛 preset 정의 흐름이 `classPatterns: []` 빈 정의라 실제 카운트는 0 — 새 baseline 측정 권장 (선택). - **EN —** The `scss-modules` → `scss-imports` rename breaks 0.8.3 baseline compatibility. Counts under `scss-modules` cannot be directly compared with `scss-imports` in 0.8.4. The preset's empty `classPatterns: []` made the actual counts zero in practice — re-measure is optional. ### 참고 / Notes - 옛 0.8.3 출시 직후 hotfix patch. 측정 데이터 변경 X — UI 정정 + sub-key 명칭 정정만. - Hotfix patch following 0.8.3. Measurement logic unchanged — UI fixes plus a sub-key rename. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.3] — 2026-05-29 ### 정정 / Fixed - **한 —** dashboard 스타일링 방식 분포 카드의 forbidden row 가 preset 따라 필터링됩니다. 옛 0.8.2 까지 9 row 전수 hard-code 표시 흐름이라 tailwind-project 환경에서 의미 없는 row (`금지 (tailwind-classes)` / `금지 (Tailwind via wrapper)`) 가 항상 0 카운트로 노출되어 사용자 혼동을 유발했습니다. 0.8.3 부터 preset 별 의미 있는 forbidden sub-key 매트릭스 (`FORBIDDEN_BY_PRESET`) 따라 row 결정 — tailwind-project 안 `bootstrap-utilities` / `apply-mixed` / `raw-css`, scss-project 안 `bootstrap-utilities` / `tailwind-classes` / `apply-mixed` / `tailwind-via-wrapper`, bootstrap-project 안 `tailwind-classes` / `inline-styles`, css-modules-project 안 `bootstrap-utilities` / `tailwind-classes` / `global-css`. 매트릭스에 정의된 sub-key 는 카운트 0 이라도 row 노출 (preset 정의 흐름 존중 + 미래 확장 자동). 알 수 없는 preset 시점에 forbidden row 0 (fallback). baseline JSON 안 `byId` raw key 자체는 그대로 보존되어 옛 분석 도구 호환성에 영향이 없습니다. - **EN —** Dashboard styling-method-distribution card filters forbidden rows by preset. Through 0.8.2 the row array was hard-coded to nine rows regardless of preset, so tailwind-project setups always saw irrelevant rows (`금지 (tailwind-classes)` / `금지 (Tailwind via wrapper)`) sitting at zero, which caused confusion. Starting with 0.8.3 the rows come from a preset-keyed matrix (`FORBIDDEN_BY_PRESET`) — tailwind-project shows `bootstrap-utilities` / `apply-mixed` / `raw-css`, scss-project shows `bootstrap-utilities` / `tailwind-classes` / `apply-mixed` / `tailwind-via-wrapper`, bootstrap-project shows `tailwind-classes` / `inline-styles`, css-modules-project shows `bootstrap-utilities` / `tailwind-classes` / `global-css`. Sub-keys defined in the matrix render even at zero (respecting preset intent + future-proofing). Unknown presets fall back to no forbidden rows. Raw `byId` keys in baseline JSON are unchanged — downstream tooling is unaffected. ### 변경 / Changed - **한 —** dashboard `FORBIDDEN_LABELS` 매핑이 ForbiddenSection (금지 CSS 클래스 카드) + StylingMethodSection (스타일링 방식 분포 카드) 두 곳에서 공통 활용되도록 통합됩니다. 옛 5 entry (`bootstrap-utilities` / `tailwind-classes` / `apply-mixed` / `tailwind-via-wrapper` / `raw-css`) 가 8 entry 로 확장 — `inline-styles` (bootstrap-project) / `global-css` (css-modules-project) / `scss-modules` (tailwind-project) 가 추가됐고, StylingMethodSection 안 옛 hard-code 라벨 (`금지 (bootstrap-utilities)` / `금지 (tailwind-classes)`) 이 본 매핑 흐름을 활용해 한글 표현 (`금지 (Bootstrap utility)` / `금지 (Tailwind utility)`) 으로 정정됩니다. 코드 중복 제거. - **EN —** The `FORBIDDEN_LABELS` mapping is now shared between the ForbiddenSection (forbidden CSS class card) and the StylingMethodSection (styling-method-distribution card). The mapping grows from 5 entries to 8 — adding `inline-styles` (bootstrap-project), `global-css` (css-modules-project), and `scss-modules` (tailwind-project). Hard-coded English-id labels in StylingMethodSection (`금지 (bootstrap-utilities)` / `금지 (tailwind-classes)`) are replaced with the mapped Korean phrasing (`금지 (Bootstrap utility)` / `금지 (Tailwind utility)`). - **한 —** ForbiddenSection (금지 CSS 클래스 카드) 그룹별 분포 dist-row 의 label 컬럼 width 가 StylingMethodSection 과 동일한 220px 로 통일됩니다 (옛 110px → 220px). 두 카드 안 한글 라벨 첫 줄 + 영문 mono 두 번째 줄 정렬 흐름이 균일. - **EN —** The ForbiddenSection (forbidden CSS class card) group-distribution dist-row label column is widened to 220px to match StylingMethodSection (was 110px). Both cards now align the Korean label + mono machine key pair consistently. ### 참고 / Notes - 옛 0.8.2 출시 직후 hotfix patch. 측정 데이터 / baseline JSON shape / sub-key 명칭 모두 변경 없음 — UI 렌더링 정정만. - Hotfix patch following 0.8.2. Measurement data, baseline JSON shape, and sub-key names are all unchanged — render-layer only. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.2] — 2026-05-28 ### 정정 / Fixed - **한 —** dashboard 스타일링 방식 분포 카드의 dist-row 와 금지 CSS 클래스 그룹별 분포 카드의 dist-row 가 두 줄 흐름으로 정정됩니다. 옛 0.8.1 까지 한글 라벨 + 영문 mono 가 한 줄에 spread 되던 흐름이 좁은 label 컬럼 (110px / 220px) 에서 줄바꿈 깨짐 — 한글 끝 부분 줄 끝 + 영문 mono `(...)` 부분이 다음 줄 시작으로 어색하게 끊기던 시각 부조화 정정. 0.8.2 부터 한글 라벨이 첫 줄, 영문 mono 가 두 번째 줄 (작게) 로 명시 두 줄. row 높이가 약간 ↑ (대략 10px → 26px) 합니다. CSS `align-items: center` 그대로 유지 — dbar / count 가 두 줄 라벨의 가운데와 자연스럽게 정렬. MigrationSection dist-row (컴포넌트별 분포) 와 TotalsSection 표 (파일 집계) 는 옛 흐름 그대로 유지 — MigrationSection 은 영문 mono 병기 흐름 자체가 없고, TotalsSection 은 한글 + 영문 mono 가 한 줄에 들어가 줄바꿈 risk 가 낮습니다. - **EN —** Dist-rows in the styling-method-distribution card and the forbidden-CSS-class group distribution card now use a two-line layout. Through 0.8.1 the Korean label and the mono machine key sat on one spread line, which wrapped awkwardly inside the narrow label column (110px / 220px) — the mono `(...)` portion broke onto the next line out of alignment with the rest of the row. 0.8.2 puts the Korean label on the first line and the mono key on a smaller second line. Row height grows slightly (≈ 10px → 26px). `align-items: center` is preserved so the dbar / count are vertically centred against the two-line label. MigrationSection dist-rows (component breakdown) and the TotalsSection table (file totals) keep their existing layout — MigrationSection has no mono pairing, and TotalsSection fits its label + mono on one line without wrapping. - **한 —** dashboard 스타일링 방식 분포 카드의 옛 안내 텍스트 (`orphanClass` / `noClass` / `allowedGlobal` 설명 fnote) 가 제거됩니다. 옛 안내 텍스트는 옛 0.8.0 라벨 한글화 (`고아 클래스 (정의 못 찾음)` / `className 없음 (스타일 안 씀)` / `전역 허용`) 와 옛 0.8.1 신규 sub-key 한글 설명 dist-row 추가로 정보가 이미 라벨 자체에 흡수된 상태였습니다. 안내 텍스트 안 "SCSS 정의를 찾을 수 없는" 표현이 preset 이 tailwind 인 환경에서 부정확한 점, "앤 전역 CSS 클래스" 의 typo 도 함께 정리됩니다. - **EN —** The legacy informational fnote in the styling-method-distribution card (describing `orphanClass` / `noClass` / `allowedGlobal`) is removed. With the 0.8.0 Korean label rename (`고아 클래스 (정의 못 찾음)` / `className 없음 (스타일 안 씀)` / `전역 허용`) and the 0.8.1 description rows for the new sub-keys, the fnote was redundant — its "SCSS 정의를 찾을 수 없는" wording was also inaccurate in tailwind preset setups, and a Korean typo ("앤 전역 CSS 클래스") got cleaned up along the way. - **한 —** dashboard 안 SCSS 단어 활용 4곳이 preset 무관 표현으로 정정됩니다 — (1) 고아 클래스 샘플 Disclosure summary "SCSS 정의 못 찾은 className" → "정의 못 찾은 className", (2) ScssSection 카드 제목 "SCSS 변수 준수율" → "변수 준수율", (3) Summary Layer 01 / Code 설명 "SCSS · TS · DS 사용 규칙" → "스타일 · TS · DS 사용 규칙", (4) StylingMethodSection fnote "분자: SCSS + allowedGlobal" → "분자: 권장 방식 + allowedGlobal" (preset 무관 단순화). preset 이 tailwind / scss / bootstrap / css-modules 중 어느 흐름이든 표현이 자연스럽습니다. `id="scss"` / `field="scssVariableCompliance"` machine key + `ScssSection` 코드 식별자 는 옛 그대로 보존 (사용자 노출 X / Tier 2 옛 규약 유지). - **EN —** Four user-facing "SCSS" references in the dashboard are reworded to preset-agnostic phrasing — (1) the orphan-class samples Disclosure summary drops "SCSS 정의 못 찾은" in favour of "정의 못 찾은", (2) the variable-compliance card title drops "SCSS" ("변수 준수율"), (3) the Summary Layer 01 / Code description leads with "스타일" instead of "SCSS", (4) the styling-method-distribution fnote uses "권장 방식" instead of the literal "SCSS". The phrasing now reads naturally whether the preset is tailwind / scss / bootstrap / css-modules. Machine keys (`id="scss"` / `field="scssVariableCompliance"`) and the `ScssSection` code identifier are preserved (Tier 2 — not user-facing). ### 참고 / Notes - 옛 0.8.1 출시 직후 hotfix patch. 측정 데이터 / baseline JSON shape / sub-key 명칭 모두 변경 없음 — UI 렌더링 정정만. - Hotfix patch following 0.8.1. Measurement data, baseline JSON shape, and sub-key names are all unchanged — render-layer only. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.1] — 2026-05-28 ### 정정 / Fixed - **한 —** Tailwind utility detect 정규식이 보강되어 `mr-auto` / `space-y-6` / `text-xs` / `font-bold` / `rounded-md` / `shadow` / `hidden` / `hover:bg-blue-500` / `sm:flex` / `dark:bg-zinc-900` / `-mt-4` / `w-[200px]` / `text-[#fff]` 같은 흔한 utility 가 모두 매치됩니다. 옛 0.8.0 이하 정규식은 좁은 union (`(?:m|p)-\d+`) 형태라 위 케이스가 detect 누락되어 tailwind-project 환경에서 정상 활용이 orphanClass 로 잘못 카운트되거나, scss-project 환경에서 금지 카운트가 누락되는 false negative 가 있었습니다. 0.8.1 부터 `presets/_tailwind-detect.js` 공통 helper 가 Tailwind v3 / v4 utility prefix 전수 + literal + variant prefix (응답형 / 상태 / dark / aria) + 음수 + arbitrary value 를 한 흐름으로 매치합니다. 4 preset (tailwind / scss / bootstrap / css-modules) 모두 본 helper 활용. - **EN —** The Tailwind utility detect regex is widened so common utilities such as `mr-auto`, `space-y-6`, `text-xs`, `font-bold`, `rounded-md`, `shadow`, `hidden`, `hover:bg-blue-500`, `sm:flex`, `dark:bg-zinc-900`, `-mt-4`, `w-[200px]`, `text-[#fff]` all match. Through 0.8.0 the regex was a narrow union (`(?:m|p)-\d+`) and missed these cases, causing legitimate Tailwind usage in tailwind-project setups to be mis-bucketed as orphanClass and forbidden counts in scss-project setups to underreport. Starting with 0.8.1 the shared `presets/_tailwind-detect.js` helper matches the full Tailwind v3 / v4 utility prefix set + literals + variant prefixes (responsive / state / dark / aria) + negatives + arbitrary values. All four presets (tailwind / scss / bootstrap / css-modules) consume the helper. - **한 —** dashboard `preferredCompliance` 계산식 안 분자 / 분모 row 의 한글 설명이 `preferredId` 따라 동적 결정됩니다. 옛 0.8.0 까지는 `k === "scss"` hard-code 로 `"권장 (scss) 파일"` 표기가 박혀 있어 tailwind-project 환경에서 본 row 라벨이 빈 칸 노출되던 흐름 정정. 분모 row 의 옛 표현 (`"주 마이그레이션 대상"` / `"소수 (Phase B 대상)"`) 은 자명한 표현 (`"Bootstrap 잔재"` / `"Tailwind utility 잔재"`) 으로 정정되고, 0.8.0 도입 matrix 신규 sub-key (`apply-mixed` / `tailwind-via-wrapper` / `raw-css`) 의 한글 설명도 본 row 에 함께 표시됩니다. - **EN —** The Korean descriptions on numerator / denominator rows in the `preferredCompliance` breakdown are now derived from `preferredId`. Through 0.8.0 the code hard-coded `k === "scss"` so the row label appeared blank in tailwind-project setups. Denominator-row prose is also clarified (`"주 마이그레이션 대상"` → `"Bootstrap 잔재"`, `"소수 (Phase B 대상)"` → `"Tailwind utility 잔재"`), and the 0.8.0 matrix sub-keys (`apply-mixed` / `tailwind-via-wrapper` / `raw-css`) gained their own descriptions on this row. - **한 —** dashboard 안 dist-row + 파일 집계 표 안 영문 key 노출이 정정됩니다 — 한글 라벨을 주로 두고 영문 mono key 를 작게 병기. 영향 위치 3곳 — 금지 CSS 클래스 그룹별 분포 (옛 preset id 만 노출), 파일 집계 표 (옛 2 컬럼 `필드` / `설명` 분리 → 1 컬럼 합병), 스타일링 방식 분포 dist-row. baseline JSON 안 raw key 는 그대로 보존되어 옛 분석 도구 호환성 영향이 없습니다. - **EN —** Dist-row labels and the totals card table now lead with the Korean label and append the machine key in a smaller mono tag. Three affected spots — forbidden CSS class group distribution (previously displayed the raw preset id), the totals table (collapses the previous two-column `필드` / `설명` layout into a single column), and the styling-method-distribution dist-row. Raw keys in baseline JSON are unchanged — downstream analysis tooling is unaffected. - **한 —** dashboard `preferredCompliance` 계산식 disclosure summary 와 formula title 에 한글 주제어가 병기됩니다 (`"권장 방식 준수율 (preferredCompliance) 계산식"`). 옛 mono 영문 단독 표기 흐름 정정. - **EN —** The disclosure summary and formula title for the `preferredCompliance` breakdown now show the Korean topic alongside the mono key (`"권장 방식 준수율 (preferredCompliance) 계산식"`). Previously only the mono key was shown. ### 변경 / Changed - **한 —** matrix forbidden sub-key 명칭 변경 — `scss-style-raw-css` → `raw-css`. 옛 명칭이 길고 "scss-style" 단어가 박혀있어 tailwind-project 환경과 혼동되던 흐름 정정. **옛 0.8.0 baseline 호환 X** — 0.8.0 baseline 안 `scss-style-raw-css` 카운트는 0.8.1 baseline 안 `raw-css` 자리로 직접 비교 X. 0.8.0 출시 직후 hotfix 라 영향 LOW. 새 baseline 측정 흐름으로 정정 완료. - **EN —** The matrix forbidden sub-key is renamed — `scss-style-raw-css` → `raw-css`. The previous name was long and the `scss-style` token caused confusion in tailwind-project setups. **Breaking for 0.8.0 baselines** — counts under `scss-style-raw-css` in a 0.8.0 baseline cannot be directly compared to `raw-css` in 0.8.1. Impact is low (0.8.1 ships immediately after 0.8.0). Re-measure to get a clean baseline. ### 옛 사용자 영향 / Migration notes - **한 —** Tailwind detect 보강으로 tailwind-project 환경에서 옛 orphanClass 로 잡혔던 정상 utility 가 `allowed.tailwind` 로 이동합니다. 본 결과 = orphanClass 감소 / allowed.tailwind 증가 / preferredCompliance % 변동 예상. scss-project 환경에서는 옛 누락 utility 가 새로 `forbidden.tailwind-classes` 로 잡혀 금지 카운트가 증가할 수 있습니다. portal-iris-web 외 다른 사용자 환경에서도 같은 흐름 — 0.7.x 이하 baseline 과 0.8.1 baseline 수치 직접 비교 X. 0.8.1 baseline 을 새 기준선으로 활용 권장. - **EN —** Wider Tailwind detect moves legitimate utilities previously bucketed as orphanClass into `allowed.tailwind` in tailwind-project setups — expect orphanClass to drop, `allowed.tailwind` to rise, and `preferredCompliance` to shift. In scss-project setups, utilities previously missed are newly counted as `forbidden.tailwind-classes`, so the forbidden count may rise. Do not compare 0.7.x baselines (or 0.8.0 baselines) directly with 0.8.1; treat 0.8.1 as a fresh reference. - **한 —** 0.8.0 baseline 사용자는 `scss-style-raw-css` → `raw-css` 명칭 변경 영향 — 옛 baseline 안 카운트와 0.8.1 baseline 안 카운트 직접 비교 X. 새 baseline 측정 권장. - **EN —** Users with a 0.8.0 baseline are affected by the `scss-style-raw-css` → `raw-css` rename — counts in 0.8.0 cannot be directly compared with 0.8.1. Re-measure to refresh the baseline. ### 참고 / Notes - 옛 0.8.0 출시 직후 hotfix patch. baseline JSON shape 안 옛 sub-key (`bootstrap-utilities` / `tailwind-classes` / `apply-mixed` / `tailwind-via-wrapper`) 는 그대로 보존, `scss-style-raw-css` → `raw-css` 단일 명칭 정정만. - Hotfix patch following 0.8.0 (released the same day). The baseline JSON shape keeps existing sub-keys; only `scss-style-raw-css` is renamed to `raw-css`. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.8.0] — 2026-05-28 ### 추가 / Added - **한 —** baseline JSON 안 `code.classDefinitions` section 이 신규 추가됩니다 (3 배열 — `pureApply` / `applyMixed` / `pureCss`). `globalStyleSources` glob 에 매치되는 모든 SCSS / CSS 파일을 파싱해 각 클래스 정의 내용을 `@apply` directive 와 일반 CSS property 의 조합으로 분류한 결과입니다. 같은 className 이 여러 rule (예: light / dark theme) 에 등장하면 첫 정의를 우선 보존하고 분류는 OR 통합합니다 — 한 rule 라도 `@apply` 와 일반 CSS property 가 섞이면 전체를 `applyMixed` 로 격상. 본 결과 자체는 dashboard 에 별도 카드로 노출되지 않고, 아래 `forbiddenClassCount` 및 `stylingMethodDistribution` 의 matrix 산정 입력으로 활용됩니다. - **EN —** A new `code.classDefinitions` section (`pureApply` / `applyMixed` / `pureCss` arrays) is added to baseline JSON. All SCSS / CSS files matched by `globalStyleSources` are parsed and every class definition is categorised by whether it contains `@apply` directives, regular CSS properties, or both. When the same className appears in multiple rules (e.g. light / dark theme), the first definition wins for ordering and the categorisation is OR-merged — a single rule mixing `@apply` with regular CSS escalates the whole entry to `applyMixed`. The section is not surfaced as a dedicated dashboard card; it feeds the matrix used by `forbiddenClassCount` and `stylingMethodDistribution`. - **한 —** `forbiddenClassCount.byId` 와 `stylingMethodDistribution.counts.forbidden` 에 matrix 산정으로 검출되는 신규 sub-key 가 추가됩니다 — `apply-mixed` (두 preset 공통), `tailwind-via-wrapper` (scss-project 한정), `scss-style-raw-css` (tailwind-project 한정). 옛 sub-key (`bootstrap-utilities`, `tailwind-classes`) 는 그대로 보존되어 옛 분석 도구 호환성에 영향이 없습니다. dashboard 의 스타일링 방식 분포 카드 안 신규 row 는 tooltip 으로 위반 사유가 preset 기준으로 표시됩니다. - **EN —** `forbiddenClassCount.byId` and `stylingMethodDistribution.counts.forbidden` gain new sub-keys driven by the matrix — `apply-mixed` (both presets), `tailwind-via-wrapper` (scss-project only), `scss-style-raw-css` (tailwind-project only). Existing sub-keys (`bootstrap-utilities`, `tailwind-classes`) are preserved so downstream analysis tooling remains compatible. The new rows in the styling-method-distribution card surface a preset-specific reason via tooltip. ### 변경 / Changed - **한 —** `stylingMethodDistribution` 산정 흐름이 matrix 기반으로 갱신됩니다. preset 의 `preferred` 가 `scss` 또는 `tailwind` 일 때 한정해, 옛 `allowedGlobal` 로 분류되던 파일 가운데 사용 중인 global class 의 정의가 (1) `applyMixed` 면 모든 preset 에서 금지 (`apply-mixed`), (2) `pureApply` 면 scss-project 에서 금지 (`tailwind-via-wrapper`) / tailwind-project 에서 정상, (3) `pureCss` 면 scss-project 에서 정상 / tailwind-project 에서 금지 (`scss-style-raw-css`) 로 재분류됩니다. 한 파일이 여러 case 에 걸치는 경우 worst-first 우선순위로 결정됩니다. `preferred` 가 그 외 (`bootstrap` / `css-modules`) 인 경우 옛 흐름이 그대로 보존됩니다. - **EN —** `stylingMethodDistribution` now uses a matrix-based classification. Only when the preset's `preferred` is `scss` or `tailwind`, files previously bucketed as `allowedGlobal` are re-checked against the definition type of the global classes they use: (1) `applyMixed` is forbidden in both presets (`apply-mixed`), (2) `pureApply` is forbidden in scss-project (`tailwind-via-wrapper`) but allowed in tailwind-project, (3) `pureCss` is allowed in scss-project but forbidden in tailwind-project (`scss-style-raw-css`). Files matching multiple cases resolve worst-first. Other `preferred` values (`bootstrap` / `css-modules`) keep the legacy flow as-is. - **한 —** dashboard Code 탭 카드 순서가 테마별 그룹화 흐름으로 재정렬됩니다 — scope 개요 (파일 집계 / DS 커버리지) → 마이그레이션 (마이그레이션 후보 파일 / TypeScript 마이그레이션) → CSS 컴플라이언스 (금지 CSS 클래스 / 스타일링 방식 분포) → 변수 + 색상 (SCSS 변수 준수율 / 하드코딩 색상). 카드 자체 본문 / 데이터는 변경 X. - **EN —** Code-tab card order is regrouped by theme — scope overview → migration → CSS compliance → variables + colors. Card bodies and data are unchanged. - **한 —** dashboard 안 일부 한글 라벨이 정정됩니다 — 스타일링 방식 분포 카드 안 권장 방식 row 라벨은 `preferredId` 따라 동적 결정 (옛 "권장 (scss)" hard-code 정정), 고아 클래스 라벨은 preset 무관 표현으로 "고아 클래스 (정의 못 찾음)" (옛 "SCSS 정의 못 찾음" 정정). 옛 분석 도구가 활용하는 baseline JSON 안 machine key (`allowedGlobal`, `noClass`, `forbidden.*` 등) 는 그대로 보존됩니다. - **EN —** A few Korean dashboard labels are corrected — the "preferred" row label in the styling distribution card is now derived from `preferredId` (replacing the hard-coded `"권장 (scss)"`), and the orphan-class label is preset-agnostic (`"고아 클래스 (정의 못 찾음)"`, dropping the misleading "SCSS"). The machine keys in baseline JSON (`allowedGlobal`, `noClass`, `forbidden.*`, etc.) are unchanged. - **한 —** `dsmonitor init` 으로 생성되는 `dsmonitor.config.ts` 템플릿이 정리됩니다 — 변수명을 `stylingPolicy` 로 통일하고 (config key 와 동일), preset 선택을 import 한 줄 교체로 마무리하도록 shorthand 화 (`stylingPolicy: scssPreset` → `stylingPolicy,`). 옛 0.7.3 의 ESM 호환 흐름은 그대로 유지됩니다. - **EN —** The `dsmonitor.config.ts` template emitted by `dsmonitor init` is tidied — the imported preset is now bound to the variable `stylingPolicy` (matching the config key), and the policy line is shortened to `stylingPolicy,` so switching presets is a one-line import swap. The 0.7.3 ESM compatibility behavior is preserved. - **한 —** `presets/scss-project.js` 주석과 README 안 preset 설명이 정정됩니다 — preset 명칭은 "scss" 지만 `.css` 만 활용하는 React + CSS files 환경 / 혼합 환경 모두 적용된다는 점이 명시됩니다. README 안 옛 `stylingPolicy: require("dsmonitor/presets/...")` 흔적은 ESM `import` 형식으로 일괄 교체됩니다 (한국어 / 영어 정본 1:1). - **EN —** `presets/scss-project.js` and the matching README entry are revised to make clear that the preset covers class-based CSS / SCSS broadly — both `.css`-only React projects and SCSS projects fit. Remaining `stylingPolicy: require("dsmonitor/presets/...")` snippets in the README are replaced with the ESM `import` form (Korean / English mirrored). ### 정정 / Fixed - **한 —** dashboard 안 분모 0 케이스 (예: Figma DS 파일 안 styles=0 / variables=0 / tsFiles + jsFiles=0 / forbidden 전체 0건 등) 에서 `NaN%` 로 표시되던 카드들이 `0.0%` 로 정정됩니다. 영향 카드 — DS 토큰 매칭률 (Styles) (root.jsx), DS 토큰 매칭률 (Styles + Variables) (figma-tab.jsx, primary + DS 별 row), 금지 CSS 클래스 그룹 분포 (code-tab.jsx), 스타일링 방식 분포 카운트 (code-tab.jsx), 하드코딩 색상 상위 파일 점유 (code-tab.jsx), TypeScript 마이그레이션 카드 (code-tab.jsx). 측정 데이터 자체에는 영향이 없고 렌더링 layer 에만 영향이 있습니다. - **EN —** Dashboard cards that previously rendered `NaN%` when a denominator was zero (e.g. Figma DS file with `styles=0` / `variables=0`, `tsFiles + jsFiles = 0`, total forbidden count = 0) now render `0.0%`. Affected cards — DS token match rate (Styles, in root.jsx), DS token match rate (Styles + Variables, primary + per-DS rows in figma-tab.jsx), forbidden CSS class group distribution (code-tab.jsx), styling-method-distribution counts (code-tab.jsx), top-file share of hardcoded colors (code-tab.jsx), TypeScript migration card (code-tab.jsx). No measurement data changes — render-layer only. ### 옛 사용자 영향 / Migration notes - **한 —** matrix 산정 도입으로 `scss-project` / `tailwind-project` 환경에서 옛 baseline 의 `forbiddenClassCount` / `stylingMethodDistribution` 수치와 0.8.0 수치가 어긋날 수 있습니다 — 의도된 변경 (측정 로직 정확도 ↑). 0.7.x 이하 baseline 과 0.8.0 baseline 수치를 직접 비교하지 말고, 0.8.0 baseline 을 새 기준선으로 활용하시기 바랍니다. tailwind-project 환경에서는 raw CSS 클래스가 새로 금지로 잡혀 금지 카운트가 증가할 수 있고, scss-project 환경에서는 pure-@apply wrapper 가 새로 금지로 잡혀 금지 카운트가 증가할 수 있습니다. `preferred` 가 `bootstrap` / `css-modules` 인 환경은 옛 흐름 그대로 — 수치 변경 없습니다. - **EN —** With the new matrix in place, `forbiddenClassCount` / `stylingMethodDistribution` values may diverge from prior baselines in `scss-project` / `tailwind-project` setups — this is intended (more accurate measurement). Do not compare 0.7.x and 0.8.0 baseline numbers directly; treat the 0.8.0 baseline as the new reference. In tailwind-project setups, raw CSS classes may newly count as forbidden; in scss-project setups, pure-`@apply` wrappers may newly count as forbidden. `preferred = bootstrap` / `css-modules` setups are unaffected. ### 참고 / Notes - 0.x.x 유연성을 활용한 minor release — matrix 산정 도입은 측정 의미를 갱신하는 변경입니다. baseline JSON shape 자체는 옛 key 보존 + 신규 key 추가 흐름 (옛 분석 도구 호환). - A minor release that updates the meaning of existing metrics. baseline JSON shape preserves prior keys and only adds new ones (compatible with existing analysis tooling). - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.7.3] — 2026-05-28 ### 정정 / Fixed - **한 —** `dsmonitor init` 으로 생성되는 `dsmonitor.config.ts` 템플릿 안 `stylingPolicy: require("dsmonitor/presets/scss-project")` 호출이 ESM static import 로 교체되었습니다. dsmonitor cli 는 user config 를 `tsx/esm/api` 로 load 하기 때문에 `"type": "module"` 프로젝트는 항상 ESM context 로 평가되며, 옛 표기는 `ReferenceError: require is not defined` 로 실패했습니다. 0.7.3 부터 템플릿 상단에 `import scssPreset from "dsmonitor/presets/scss-project.js"` 한 줄이 emit 되고, 4종 preset 선택 안내 주석도 ESM import 형식으로 정정됩니다. 옛 user config (이미 `init` 으로 생성된 파일) 안 `require()` 호출은 본 import 한 줄로 교체하면 옛 동작 그대로 복구됩니다. - **EN —** The `stylingPolicy: require("dsmonitor/presets/scss-project")` line in the `dsmonitor.config.ts` template emitted by `dsmonitor init` is now an ESM static import. The dsmonitor cli loads user configs through `tsx/esm/api`, so `"type": "module"` projects always evaluate the file as ESM, and the previous form threw `ReferenceError: require is not defined`. Starting with 0.7.3 the template emits `import scssPreset from "dsmonitor/presets/scss-project.js"` at the top and the four-preset selection comments are written in ESM import form. Existing user configs already produced by `init` can be fixed by replacing the `require()` call with the equivalent import line. - **한 —** `codeTokens.parsers` 안 `scss` / `cssVariables` 파서의 `files` 항목이 glob 패턴을 정식 지원합니다 (예: `["src/styles/**/*.css"]`). 0.7.2 까지는 entry 를 literal path 로 해석해 `globalStyleSources` 와 같은 경로를 등록한 환경에서도 `dsmonitor doctor` 가 `not found` 로 보고하고 audit 실행 시점에 `file_not_found` warning 이 발생했습니다. 0.7.3 는 `*`, `?`, `{`, `[` 가 포함된 entry 를 `fast-glob` 으로 확장해 매치된 파일만 파서에 전달합니다. literal path 흐름은 옛 동작 그대로 보존되고, glob match 0건은 옛 file_not_found 와 동일한 자리 (`dsmonitor doctor` 결과 + parser warning) 에 보고됩니다. - **EN —** `codeTokens.parsers` `scss` / `cssVariables` parsers now accept glob patterns in their `files` array (e.g. `["src/styles/**/*.css"]`). Through 0.7.2 each entry was treated as a literal file path, so setups that registered the same path as `globalStyleSources` would still be reported as `not found` by `dsmonitor doctor` and trigger `file_not_found` warnings during audit. 0.7.3 expands entries containing `*`, `?`, `{`, `[` via `fast-glob` and forwards only the matched files to the parser. Literal paths keep their existing behavior, and a glob with zero matches is reported in the same surfaces (`dsmonitor doctor` + parser warning). ### 참고 / Notes - 본 release 는 두 버그 수정에 한정된 patch 입니다. 외부 API / config schema 변경 X. - Patch release scoped to the two bug fixes — no public API or config schema changes. - `npm run typecheck` + `npm run build` 통과 / Verified. ## [0.7.2] — 2026-05-26 ### 추가 / Added - **한 —** `migrationCandidates.excludeOfficialPaths` 옵션이 신규 추가되었습니다 (default `true`). `designSystem.officialPaths` 에 매치되는 파일을 마이그레이션 후보 검출에서 자동으로 제외해, DS 본체 안에서 자연스럽게 쓰이는 native HTML (예: `Button.tsx` 가 내부에서 `