Skip to content

[DONE] 다음 열 바퀴가 Pattern Lab 부터 아무도 안 읽는 코드와 CSS, 낡은 사진을 걷는다 - #235

Merged
patternflow-bot merged 3 commits into
devfrom
claude/pf-round-cleanup-candidates-x6n0od
Oct 25, 2026
Merged

patternflow-bot merged 3 commits into
devfrom
claude/pf-round-cleanup-candidates-x6n0od

Conversation

@patternflow-bot

@patternflow-bot patternflow-bot commented Oct 24, 2026 •

Copy link
Copy Markdown

studio / https://claude.ai/code/session_01RgUtyMgokRY3RavaQaQHqA

바퀴 후보 표를 정리 줄 열다섯으로 다시 채웠어요. 17위가 Pattern Lab 이에요. 아무도 안 읽는 export 59개, 두세 번 적힌 도우미 다섯, 패널 하나만 쓰는 공용 CSS 규칙 66개, 걷은 Gallery 탭이 남은 사진 셋, 좁힐 수 있는 ! 일곱이에요. 머지하면 바퀴 91100 이 이 표에서 한 줄씩 골라 걷어요.

좋아지는 것: 없음

지금 Make 가이드의 Lab 사진. Code 줄에 걷은 Gallery 탭이 있다

지금 Pattern Guide 4절의 Lab 사진. GALLERY 탭이 있고 Text 가 없다

체크리스트

한 일

incoming/ROUND.md 의 「후보」 절만 고쳤어요. 머리 문단은 10월 25일 dev(902f5ea)와 바퀴 91 부터 100 까지 쓴다는 것, 그리고 줄을 고른 기준이에요. 표에 「확인」 칸을 더해서, 그 바퀴가 무엇을 돌려 끝난 걸 보이는지 줄마다 적었어요.

순위 무엇 잰 것
1 Lab 의 안 쓰는 이름 둘, 밖으로 안 나가는 export 57개 knip 59개 → export 를 떼고 tsc 하면 오류 둘
2 Lab 에 두세 번 적힌 도우미 다섯 FNV-1a 셋, 내려받기 셋, commentSafe · roundRangeValue · sortedLane 둘씩
3 Layers 규칙 24개가 dock 틀 CSS 에서 Layers CSS 로 LabPanels.module.css:314~:501 을 LayersPanel.tsx 만 읽어요
4 Lab 머리줄 규칙 24개가 공용 CSS 에서 셸 CSS 로 PatternLab.module.css 153줄을 PatternLabClient.tsx 만 읽어요
5 Preview, Pixel, Ramp, Knobs 만 쓰는 규칙 18개 LabPanels.module.css 142줄
6 Gallery 탭이 남은 Lab 사진 셋 lab.webp, 11-pattern-lab.png, 13-color-ramp.png
7 Lab 의 ! 일곱 AST 로 17곳, 그 가운데 타입 구멍 일곱
8 globals.css 의 옛 Inside 규칙 377줄 클래스 27개, 규칙 62개, 8,387 B
9 Lab 밖 CSS 모듈의 죽은 클래스 23개, 시험을 사이트 전체로 모듈 36개 가운데 다섯
10 globals.css 에 남은 죽은 규칙 70개 292줄, 애니메이션 둘, 변수 넷
11 Lab 밖의 안 쓰는 이름 다섯, 가이드 글꼴 수 둘 1위와 같은 tsc 에서 일곱
12 verbatimModuleSyntax 와 allowUnreachableCode: false 오류 10 + 1, tools/ 쪽 0
13 PatternPanel.tsx 의 타입 검사 3초 2.97초 → ComponentType 이면 0.23초
14 web/ARCHITECTURE.md 첫 화면 구성도 틀린 말 다섯
15 가이드 시뮬레이터의 펌웨어 줄 번호 이름 붙은 12곳이 다 어긋나요

지난 표의 37~40위는 13, 8, 14, 15위가 됐어요. 37위는 오늘 재니 9.3초가 아니라 2.97초라 그 값으로 고쳤고, 38위는 377줄로, 40위는 「30곳 가운데 27곳」 대신 이름이 붙은 12곳으로 고쳤어요.

증거

knip 은 스크래치에 깔아 web/ 에서 돌렸어요.

$ knip --no-progress --reporter compact
Unused files (109)          ← 저널 MDX 74개, drift 스크립트, public 의 iframe 파일은 다른 길로 읽혀요
Unlisted dependencies (12)
Unused exports (64)
Unused exported types (99)
Duplicate exports (1)       src/lib/pattern/packs.ts: BASICS_PACK, DEFAULT_PACK

export 마다 그 이름을 web/src, web/scripts, web/test, tools, firmware/toolchain, docs 에서 git grep -w 했어요. 다른 파일에 없는 192개를 스크래치 worktree 에서 다 떼고 tsc --noEmit 을 돌렸어요(noUnusedLocals 가 켜져 있어요).

110 files changed, 192 insertions(+), 192 deletions(-)    ← Lab 은 32개 파일에 59개
error TS 9개, 다 TS6133 · TS6196
src/app/pattern-lab/panels/director/useTimelineZoom.ts:79   'TimelineZoom' is declared but never used.
src/lib/lab/capture/shaderSource.ts:71                      'SHADER_PREAMBLE_LINES' ... never read.
src/lib/community/server/builds.ts:14                       'BuildStatus'
src/lib/community/workshop.ts:36                            'FLOOR_COLUMNS'
src/lib/guide/glcdFont.ts:310 / :312                        'GLCD_ADVANCE' / 'GLCD_LINE_HEIGHT'
src/lib/journal.ts:117                                      'getJournalPost'
src/lib/pattern/controls.ts:97                              'KnobValues'
src/lib/pattern/packs.ts:82                                 'DEFAULT_PACK'

jscpd 는 Lab 에서 거의 아무것도 못 찾았어요. 그래서 같은 이름 함수를 따로 찾았어요.

$ jscpd --min-lines 6 --min-tokens 60 src/lib/lab src/app/pattern-lab
Found 7 clones.        (12줄 기준이면 1개, 0.06%)
$ git grep -E '^(export )?function (\w+)' src/lib/lab src/app/pattern-lab | 이름 | uniq -d
commentSafe downloadBlob hash roundRangeValue sortedLane   (몸이 같아요) · read write (몸이 달라요)
$ git grep -n 2166136261 -- src
lib/lab/capture/probe.ts:359 · lib/lab/capture/shaderStore.ts:30 · lib/lab/hardwarePastes.ts:27 · components/sections/InsideGlobe/Globe.tsx:193

Lab 공용 CSS 를 읽는 파일로 나눴어요(import x from "…module.css" 를 찾아 x.name 을 모아요).

LabPanels.module.css   classes 41  importers 13  used by one file 36  dead 0
   LayersPanel.tsx      24 rules  :314~:472 :479~:501
   PatternLabClient.tsx (dock 틀)  :1~:44 :48~:118 :128~:146
   PreviewPanel.tsx :266~:312 · PixelPanel.tsx :503~:553 · PixelToolbars.tsx :564~:591 · RampPanel.tsx :593~:652 · KnobsPanel.tsx :624~:627
PatternLab.module.css  classes 22  importers 8  used by one file 13  dead 0
   PatternLabClient.tsx 24 rules 153 lines  :1~:89 :129~:168 :177~:193 :367~:393
   HardwareModal.tsx     :210~:214

꺼진 타입 규칙마다 npx tsc --noEmit --incremental false <규칙> 으로 센 오류예요(Lab / 나머지).

--allowUnreachableCode false            1   (0 / 1)   deviceSim.ts:767
--noImplicitReturns                     1 + tools/virtual-panel 1
--verbatimModuleSyntax                 10   (0 / 10)
--erasableSyntaxOnly                   10   (4 / 6)
--exactOptionalPropertyTypes           33   (4 / 29)   app/editions 에 2개
--noUncheckedIndexedAccess           1890   (488 / …)
--noPropertyAccessFromIndexSignature 3163   (464 / …)
eslint --report-unused-disable-directives   0
any 0 · @ts-ignore 0 · Lab 의 eslint-disable 0 · Lab 의 NonNullExpression 108(시험 밖 17)
$ npx tsc --noEmit --extendedDiagnostics
Files 3700 · Check time 17.67s · Total time 21.61s
$ npx tsc --noEmit --generateTrace …   (checkSourceFile 합)
2973 ms  src/components/sections/PatternPanel.tsx    (:22 1424 ms, :338~:353 1461 ms)
1299 ms  src/lib/community/server/db.ts
 302 ms  src/components/community/AtlasClient.tsx

CSS 는 레포의 postcss 로 읽었어요. :global(...) 과 :not/:is/:where/:has 안의 클래스는 따로 다뤘어요.

globals.css   classes 191  dead 60  rules 139  ← :1117~:1493 한 덩어리가 62 rules · 377 lines · 8,387 B (gzip 1,854)
              75,019 B (gzip 14,965) → 저널 규칙까지 다 빼면 57,328 B (gzip 12,150)
CSS modules outside pattern-lab   files 36  classes 1,163  dead 23  rules 30
   Roadmap.module.css 11 · Community.module.css 9 · Desk 1 · Atlas 1 · BuildPanel 1
@keyframes 32 defined, dead 1 (Guide.module.css:254 draw) · custom properties 151, never read 4
public/ (journal, flash 빼고) 209 files, unused 2: fonts/Pretendard-Bold.woff2, Pretendard-Regular.woff2 (1,557,048 B)

시험 시간도 봤는데 줄로 만들 만한 게 없었어요.

$ npx vitest run --reporter=json
files 100 · tests 1261 passed · 43 s wall · 가장 느린 파일 lib/lab/textExport.test.ts 3.2 s

글 검사예요.

$ npm run check:voice -- ../incoming/ROUND.md
read: 202 lines in 1 file
check:voice: nothing found

$ npm run check:human-lock
this diff touches 0 locked files
check:human-lock: no locked words changed

화면을 바꾸지 않아서 사진은 없어요. 위 두 장은 6위가 다시 찍을 지금 사진이에요. 표만 고쳐서 lint, typecheck, build, check:ci 는 돌리지 않았어요(후보 채우기의 증거는 잰 명령과 출력이에요).

실행법

incoming/ROUND.md 의 「후보」 표를 읽어요. 1위를 손으로 다시 재려면 스크래치에 npm i knip@5 를 깔고 web/ 에서 <스크래치>/node_modules/.bin/knip --reporter compact 를 돌려요. 그 목록 가운데 Lab 경로가 1위의 59개예요.

가정

  • 이 PR 엔 ## 바퀴 절을 두지 않았어요. 바퀴 PR 이면 바퀴 91 이 되어 정리 줄을 고르는 바퀴가 아홉뿐이에요. 총괄이 맡긴 「91~100바퀴용」 표라서, 다음 바퀴가 91 로 표의 1위를 골라요.
  • 「후보 채우기」 2번은 25~40줄과 UI · 근간 · 준비를 섞으라고 하지만, 창작자가 정리 쪽으로만 열 바퀴를 원해서 정리 줄만 15개 두었어요. 고르는 차례 6번은 남은 줄이 셋보다 적으면 바퀴가 표를 다시 채우니, 바퀴 100 까지 줄을 고르려면 12줄이 있어야 해요. 셋을 더 둬서 손이 덜 간 바퀴가 있어도 100 까지 가요.
  • 창작자 말 「패턴랩 정리」 대로 Pattern Lab 줄을 1~7위에 올렸어요. 총괄의 「안 쓰는 의존성」 은 package.json 이 「안 하는 것」 이라 줄로 넣지 않았어요. knip 은 안 쓰는 의존성을 하나도 내지 않았고, 대신 아래 「표 밖」 에 적었어요.
  • 총괄 말대로 「후보」 절만 고쳤어요. 「후보 채우기」 는 「창작자가 열어야 하는 것」 절도 다시 보라고 하지만 그 절은 그대로예요. 거기 들어갈 것은 아래 「표 밖」 에 적었어요.
  • 지난 표의 UI 줄 열하나(26~36위)는 뺐어요. 902f5ea 의 incoming/ROUND.md 에 그대로 있어서, 정리 바퀴가 끝나고 다시 채울 때 쓸 수 있어요.
  • 10위는 저널 쪽 죽은 규칙(journal-list-number, journal-figure 들)을 뺐어요. 저널은 창작자 영역이고, 저널 MDX 가 앞으로 그 이름을 쓸 수 있어요.
  • 12위에 --noImplicitReturns 를 넣지 않았어요. tools/virtual-panel/tsconfig.json 이 web/tsconfig.json 을 이어받아서, 켜면 tools/virtual-panel/transports/mqtt.ts:256 이 빨개지고 tools/ 는 「안 하는 것」 이에요.
  • incoming/ 만 고쳐서 원래 레포로 가지 않아요. 그래서 ## Changelog 절은 두지 않았어요(지난 후보 채우기 [DONE] Pattern Lab 에 처음 온 사람이 막히는 곳 16개를 재서 바퀴 후보 표 맨 위에 넣는다 #188 과 같아요).
  • 표 밖, 창작자가 볼 것:
    • AGENTS.md:14 가 lib/ai/ 를 「the Gemini client」 라고 해요. [DONE] Pattern Lab 에서 AI 갤러리와 Gemini 키 칸이 없어지고, Copy prompt 옆에서 v-field · rgb 를 고른다 #183 뒤로 그 폴더엔 Copy prompt 글(variantPrompt.ts)과 색 방식(settings.ts)만 있어요.
    • fflate(파일 6개), postprocessing(4개), @mdx-js/mdx, postcss 를 코드가 바로 불러오는데 web/package.json 에 없어요. 다른 꾸러미를 따라 깔려서 지금은 돌아요.
    • web/public/fonts/Pretendard-Bold.woff2 와 Pretendard-Regular.woff2(합쳐 1.48 MiB)는 어느 쪽도 받지 않는데 사이트가 내줘요. globals.css:23 의 말대로 부분 글꼴을 잘라 낸 원본이라 지우지 말고 public/ 밖으로 옮길 거리예요.
    • incoming/ROUND.md:129 의 ```md 펜스가 :144 까지 가서, 「창작자 지시」 절 전체가 코드 블록 안에 들어가 있어요. ## 바퀴 예시를 감싸던 펜스예요.

경험

언제: knip 이 낸 「안 쓰는 export」 로 바퀴 후보나 지울 거리를 정할 때
교훈: 목록을 그대로 믿지 말고, 다른 파일에 이름이 없는 export 의 export 를 스크래치 worktree 에서 다 떼고 tsc --noEmit 을 돌려 noUnusedLocals 가 잡는 것만 「아무도 안 읽는 이름」 으로 센다
근거: PR #235 에서 knip 이 안 쓴다고 낸 export 267개(타입 포함) 가운데 다른 파일에 이름이 없는 192개를 떼자 오류는 9개뿐이었고, knip 이 안 쓴다고 한 BreadboardDiagram.tsx 는 app/build/breadboard/page.tsx 가 부르고 있었다

다음 바퀴

  • 1위 「Pattern Lab 코드에서 아무도 읽지 않는 이름 둘이 빠지고, 다른 파일이 읽지 않는 export 57개가 파일 안으로 들어간다」: 지우는 건 둘이고 나머지는 export 낱말만 떼요. 32개 파일이지만 줄은 59줄이에요.
  • 2위 「Pattern Lab 에 두세 번 적힌 도우미 다섯이 한 곳에서 온다」: 해시를 모아도 hardwarePastes 와 shaderStore 의 저장 키가 바뀌지 않는지 시험으로 봐요.
  • 3위 「Layers 패널의 규칙 24개가 dock 틀 CSS 에서 Layers 패널의 CSS 로 간다」: 바퀴 89 의 getComputedStyle 비교를 그대로 써요.

https://claude.ai/code/session_01RgUtyMgokRY3RavaQaQHqA


Generated by Claude Code

@patternflow-bot patternflow-bot changed the title [WIP] 다음 열 바퀴가 안 쓰는 코드와 낡은 문서를 걷어 내는 정리 일만 고른다 [WIP] 다음 열 바퀴가 Pattern Lab 부터 아무도 안 읽는 코드와 CSS, 낡은 사진을 걷는다 Oct 24, 2026
@patternflow-bot patternflow-bot changed the title [WIP] 다음 열 바퀴가 Pattern Lab 부터 아무도 안 읽는 코드와 CSS, 낡은 사진을 걷는다 [DONE] 다음 열 바퀴가 Pattern Lab 부터 아무도 안 읽는 코드와 CSS, 낡은 사진을 걷는다 Oct 25, 2026
@patternflow-bot
patternflow-bot marked this pull request as ready for review October 25, 2026 00:00
@patternflow-bot
patternflow-bot merged commit a5f7997 into dev Oct 25, 2026
2 checks passed
@patternflow-bot
patternflow-bot deleted the claude/pf-round-cleanup-candidates-x6n0od branch October 25, 2026 00:02
patternflow-bot pushed a commit that referenced this pull request Oct 25, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLauBYuJBXD9L9NRJjxCqK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants