Skip to content

[DONE] 정리 3단계 PR 11 — 패널 드라이버가 원래 라이브러리와 다른 줄이 패치 한 장에 다 적힌다 - #47

Merged
patternflow-bot merged 3 commits into
devfrom
claude/patternflow-cleanup-step3-pr11-bqe09l
Oct 15, 2026
Merged

patternflow-bot merged 3 commits into
devfrom
claude/patternflow-cleanup-step3-pr11-bqe09l

Conversation

@patternflow-bot

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

Copy link
Copy Markdown

dev / https://claude.ai/code/session_01H9pfuMEAzPQzhtkm5pMtct

패널 드라이버(src/hub75)가 원래 라이브러리 3.0.13 의 어느 커밋을 7월 31일에 베낀 것인지 UPSTREAM.md 에 적고, 그 뒤 고친 줄 전부를 patternflow.patch 한 장으로 뽑았어요. 머지하면 원래 라이브러리의 고침을 하나씩 받아올 바탕이 생기고(겹치지 않는 커밋 9개를 아래에 적었어요), 펌웨어 이미지는 다섯 조합 모두 크기까지 그대로예요.

좋아지는 것: 없음

체크리스트

  • 계획표 PR 11 줄 — 고칠 파일 다섯: UPSTREAM.md · patternflow.patch · VENDORED.md · core_display.h · core_canvas.h
  • 원래 레포를 읽기 전용으로 받아(질문 20 기본값) 3.0.13 이 바탕인지 확인
  • patternflow.patch — 깨끗한 3.0.13 에 붙이면 폴더가 그대로 나온다(diff -r 빈 출력)
  • UPSTREAM.md · VENDORED.md 「What this costs」 · 코어 주석 두 곳
  • 3.0.13 뒤 hunk 를 건드리지 않는 원래 레포 커밋 목록(오래된 것부터, 아래)
  • 펌웨어 검사 · typecheck · lint · check:ci · check:voice · check:human-lock · doc-map
  • CI firmware-build.yml 다섯 조합 초록, 크기가 dev 와 같다
  • dev(c836203)가 이미 브랜치에 들어 있다 — merge 할 것 없음

한 일

  • firmware/patternflow/src/hub75/UPSTREAM.md (새 파일, 70줄): 원래 레포, 태그 3.0.13 과 커밋 a6221865c71fd5aeba885c31b81fe41bd36c5705, 베낀 날(2026-07-31, 42bfc10), 안 베낀 파일(src/ 의 그림 셋, src/ 밖 전부, library.properties → UPSTREAM_library.properties), 원래 레포의 TODO(setupDMA()), 패치를 다시 만드는 명령과 확인 명령, k12 가 채울 「Taken from upstream since」.
  • firmware/patternflow/src/hub75/patternflow.patch (새 파일, 생성물 948줄 — D8 로 300줄 셈 밖): 3.0.13 src/ 와 이 폴더의 diff -ruN, 두 파일에 걸친 15 hunk(.cpp 10 · .h 5).
  • VENDORED.md 「What this costs」: 「additions 를 다시 얹는다」·「Nothing else is modified」 대신 UPSTREAM.md 와 패치를 가리킨다. 마커 없는 변경의 예로 lastFrameOnTime() 뒤 두 필드를 든다(15 hunk 중 7개에 마커가 없어요).
  • core_display.h · core_canvas.h 머리 주석 세 줄: 「one addition, blitRGB888()」 대신 패치를 가리킨다. 주석만 바뀌고 코드는 그대로다.

3.0.13 뒤 hunk 를 건드리지 않는 원래 레포 커밋 (k12 목록)

원래 레포 master 를 ee4a2dc(2026-10-15)에 고정하고, 3.0.13..ee4a2dc 에서 src/ 를 고친 merge 아닌 커밋 27개를 날짜 순서로 하나씩 붙여 봤어요. 아래 아홉은 「3.0.13 + 앞의 것」에도 「이 폴더 + 앞의 것」에도 문맥 그대로(git apply) 붙고, 그 위에 patternflow.patch 가 fuzz 0 으로 붙어 두 쪽이 같은 트리가 돼요. 순서대로 받아야 해요(2·7 은 1 위에서만 붙어요).

커밋 날짜 쓴 사람 제목 고치는 파일
1 c09362a 2025-08-09 board707 Add support of direct type line decoder. .cpp
2 538cb41 2025-08-14 board707 Invert ABCD pins for direct type decoder .cpp
3 3ab92ad 2025-10-29 mrcodetastic Update ESP32-VirtualMatrixPanel-I2S-DMA.h ESP32-VirtualMatrixPanel-I2S-DMA.h
4 b40a838 2026-02-04 Blaž Kristan Update ESP32-HUB75-MatrixPanel-I2S-DMA.h .h
5 203502b 2026-03-26 Konstantin Raev fix: guard gdma_transfer_config_t behind IDF >= 5.3.0, not 5.1.0 platforms/esp32s3/gdma_lcd_parallel16.cpp
6 7bf3b6c 2026-04-03 Christopher King Fix: Properly set line_decoder in HUB75_I2S_CFG struct constructor .h
7 a15a887 2026-05-13 board707 Fix ABCD bit inversion for DIRECT type decoder. Tested. .cpp · .h
8 6a49f09 2026-08-30 TopoAS Add two four-scan panel mappings: P8 40x20 (1/5 scan) and P5 64x32 (1/8 scan) ESP32-HUB75-VirtualMatrixPanel_T.hpp
9 c005c7b 2026-09-04 Joshua Ebert widen min_refresh_rate to uint16_t .h

1·2 는 날짜가 태그(2025-10-25)보다 앞서지만 3.0.13 에 없어요. board707 의 direct_decoder 가지가 2026-05-16 에 merge 됐어요(3171232).

빠진 18개와 까닭:

  • hunk 를 건드린다(4개): 47b312f CIE LUT(.cpp hunk 2, 파일 머리의 pfChainExtraPasses 자리) · 0e68abc 밝기 계산(.cpp hunk 10, setBrightnessOE 의 OE 창) · e676a16 refresh 하한(.cpp hunk 3, setupDMA 의 체인 고르기) · 9215e54 원래 레포가 따로 넣은 resumeDMAoutput()(.h hunk 2·3, 우리 것과 같은 자리·같은 이름).
  • 「3.0.13 + 앞의 아홉 중 그 전 것」 위에 붙지 않는다(14개, 빠진 커밋에 기대요): a5eb3fc, Marc MERLIN 의 d8f6f89 · 54cb3e2 · 4de6007, 10월의 커밋 10개(ESP32-P4 PARLIO 와 IDF 6 이식, 71d7dbe … ee4a2dc).
  • merge 커밋 28개는 src/ 에 충돌 해결을 남기지 않았어요(git show --cc 가 모두 비었어요). 그래서 merge 아닌 커밋만 세도 빠지는 변경이 없어요.

증거

바탕이 3.0.13 인지 — 이 폴더와 다른 줄 수(.cpp + .h, 나머지 파일은 셋 다 같음):

3.0.12: 762 85
3.0.13: 746 72
3.0.14: 932 105

3.0.13 뒤 커밋 99개는 모두 818줄 이상 달라요. 베낀 커밋 42bfc10 의 판은 3.0.13 에 95줄을 더했을 뿐 지운 줄이 없어요. UPSTREAM_library.properties 는 3.0.13 의 library.properties 와 바이트까지 같아요. diff -rq 로 다른 것은 .cpp · .h 둘과 이 폴더에만 있는 문서, 원래 레포에만 있는 그림 셋뿐이에요.

UPSTREAM.md 의 두 명령을 글자 그대로(GitHub 에서 새로 clone) 돌린 결과:

rebuild: identical to the committed patch
patching file ESP32-HUB75-MatrixPanel-I2S-DMA.cpp
patching file ESP32-HUB75-MatrixPanel-I2S-DMA.h
diff -r exit 0
3b251e58a429f23385e977bc1d9475bde2b995559b2a09825812cfedb3201038  firmware/patternflow/src/hub75/patternflow.patch

git apply -p1 로 붙여도 diff -r 이 비어요.

CI firmware-build.yml(3d6713e) 다섯 조합을 dev 와 같은 펌웨어 트리인 PR 10 머리(fd7f83f, git diff -- firmware 빈 출력)의 실행과 견줬어요. 모든 숫자가 같아요:

composition   .bin bytes  RAM used  Flash used  static DRAM  IRAM    window left
audio         1208672     105648    1208313     161,216      71,951  330,304
clock         1187088     86888     1186717     141,976      71,471  349,544
default       1102672     86600     1102313     141,688      71,471  349,832
midi          1163472     100000    1163113     154,288      70,671  337,232
performance   1526624     103108    1526265     158,200      71,471  333,320

build.sh 판정은 다섯 다 ok, check_footprint.py 는 「every edition within tolerance」. PR 의 체크 여덟 개 모두 초록이에요.

펌웨어 검사(드라이버 코드는 그대로라 같은 결과여야 해요):

check_boundaries.py: boundary holds: 73 core files know none of 42 feature namespaces across 9 features
check_presets.py:    presets in step: 34 twins, 14 web-only on purpose, 1 firmware-only on purpose
console_pages.py check: all 12 console headers match their HTML
check_blit.py:       blit exact: 82779840 DMA words, FIFO swap=0 / blit exact: 70709760 DMA words, FIFO swap=1
check_oe.py:         OE windows binary and response monotone; 13093 assertions, full scale 993

사이트(web/, npm ci 뒤):

npm run typecheck   → 출력 없음
npm run lint        → 경고 0
npm run check:ci    → exit 0 (check:panels: Test Files 35 passed, Tests 478 passed · check:sandbox-sync · check:modcache · check:drift 통과)
npm run check:voice → base c836203, 82 added lines in 4 files, nothing found
npm run check:human-lock → this diff touches 0 locked files

모듈 캐시 키(builderRev.ts)가 해시하는 헤더 넷(core_color.h · core_math.h · core_noise.h · core_module_loader.h)은 건드리지 않았어요.

doc-map(git fetch --tags 뒤, 이 브랜치와 dev 기준 c836203 이 같은 두 줄 — doc-map.ts 는 hub75/ 를 건너뛰어요. CSV 는 다시 checkout 했어요):

1074 links from 215 files → docs/investigations/2026-10-doc-map.csv
1366 Korean/English pairs → docs/investigations/2026-10-doc-parity.csv

실행법

저장소 맨 위에서 firmware/patternflow/src/hub75/UPSTREAM.md 의 「Rebuilding the patch」 두 명령을 그대로 돌리면 돼요. 첫째는 패치를 다시 만들고(git diff 가 비어야 해요), 둘째는 깨끗한 3.0.13 에 붙여 diff -r 이 아무것도 안 찍는지 봐요. GNU diff 가 필요해요.

가정

  • 원래 레포 읽기: 계획서 질문 20 의 기본값은 「hub 가 읽기 전용으로 붙인다」예요. 이 세션의 git 프록시가 공개 레포 익명 읽기를 그대로 내줘서 레포 밖(/workspace/mrcodetastic/)에 clone 했고, 세션에 붙인 것은 없어요.
  • 패치 꼴: 계획서대로 diff -ruN 이에요. 같은 트리에서 늘 같은 파일이 나오게 sed 로 타임스탬프와 diff 명령 줄을 지웠어요. a/ · b/ 머리라 patch -p1 과 git apply 둘 다 받아요. BSD diff 는 hunk 를 다르게 자를 수 있어서 GNU diff 라고 적었어요.
  • 「hunk 를 건드리지 않는다」의 뜻: hunk 는 앞뒤 문맥 세 줄까지예요. 커밋이 문맥 그대로 양쪽에 붙고 패치가 fuzz 0 으로 다시 붙어 같은 트리가 될 때만 목록에 넣었어요. 「3.0.13 뒤」는 3.0.13..master 라서, 태그보다 날짜가 앞서도 태그 뒤에 merge 된 가지의 커밋이 들어가요.
  • 목록은 계획서대로 PR 본문에 뒀어요. UPSTREAM.md 엔 k12 가 받은 커밋을 적을 「Taken from upstream since」 절만 두고, 다시 만들 때 받은 커밋을 cherry-pick -n 으로 얹어 패치가 우리 변경만 담게 한다고 한 문장 적었어요. k12 가 명령을 손볼 수 있어요.
  • VENDORED.md 는 계획서가 말한 「What this costs」만 고쳤어요. 맨 위 「Two additions.」(왜 베꼈는지의 기록)는 그대로예요.
  • build.sh all: 이 컨테이너엔 PlatformIO 가 없어서 CI firmware-build.yml 의 다섯 조합으로 갈음했어요(계획서 「The PRs in detail」 첫 문단대로).
  • CHANGELOG.md 는 고치지 않았어요(계획서: 각 PR 의 줄은 본문에). 넣을 줄은 아래에 있어요.

찾았지만 이 PR 의 파일 밖이라 고치지 않은 것:

  • 원래 레포의 LICENSE.txt(MIT, 「Copyright (c) 2018-2032 Faptastic」)가 폴더에 없고, hub75/ 의 어느 파일에도 그 저작권 문구가 없어요. MIT 는 사본에 그 문구를 두라고 해요. 라이선스 구분은 손대지 않는 규칙이라 창작자 판단으로 남겨요.
  • 원래 레포가 2026-07-05 에 자기 resumeDMAoutput() 을 넣었어요(9215e54). VENDORED.md 의 「Upstream's stopDMAoutput() is a one-way trip」은 3.0.13 엔 맞고 지금 원래 레포 master 엔 맞지 않아요.
  • .editorconfig 가 모든 파일의 줄 끝 공백을 지우라고 해요. 패치 문맥엔 원래 레포 코드의 줄 끝 공백이 있어서, 편집기로 열어 저장하면 hunk 가 깨져요. [*.patch] 에 trim_trailing_whitespace = false 를 두면 막히는데 이 PR 의 파일이 아니에요.
  • firmware/README.md 158–162줄은 아직 「carries Patternflow's additions」라고 해요. 계획서 k26 몫이에요.

Changelog

Firmware

  • The vendored HUB75 driver names the upstream commit it came from. firmware/patternflow/src/hub75/UPSTREAM.md gives ESP32-HUB75-MatrixPanel-DMA at tag 3.0.13 (a622186), copied on 31 July 2026, and patternflow.patch beside it is every change since: diff -ruN of upstream's src/ against the folder, which applied to a clean checkout of the tag gives the folder back. VENDORED.md and the comments in core_display.h and core_canvas.h point at the patch instead of counting the additions. The firmware is unchanged.

Upstream

  • What: add src/hub75/UPSTREAM.md (upstream tag 3.0.13, commit a622186, copied 31 July 2026) and src/hub75/patternflow.patch, the diff -ruN of upstream src/ against the folder; VENDORED.md and two core comments point at the patch.
  • Checks: npm run typecheck, npm run lint, npm run check:ci (with check:panels), check_boundaries.py, check_blit.py and check_oe.py pass; the patch on a clean 3.0.13 checkout gives an empty diff -r; build.sh all is green in firmware-build.yml.
  • Docs map: none

🤖 Generated with Claude Code

https://claude.ai/code/session_01H9pfuMEAzPQzhtkm5pMtct

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9pfuMEAzPQzhtkm5pMtct
The copy named a version but no commit, and "nothing else is modified" stopped being true in August.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9pfuMEAzPQzhtkm5pMtct
@patternflow-bot patternflow-bot changed the title [WIP] 정리 3단계 PR 11 [WIP] 정리 3단계 PR 11 — 패널 드라이버가 원래 라이브러리와 다른 줄이 패치 한 장에 다 적힌다 Oct 15, 2026
Seven of the patch's fifteen hunks have none, so "most of it is marked" said too little.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9pfuMEAzPQzhtkm5pMtct
@patternflow-bot patternflow-bot changed the title [WIP] 정리 3단계 PR 11 — 패널 드라이버가 원래 라이브러리와 다른 줄이 패치 한 장에 다 적힌다 [DONE] 정리 3단계 PR 11 — 패널 드라이버가 원래 라이브러리와 다른 줄이 패치 한 장에 다 적힌다 Oct 15, 2026
@patternflow-bot
patternflow-bot marked this pull request as ready for review October 15, 2026 06:11
@patternflow-bot
patternflow-bot merged commit d910ecc into dev Oct 15, 2026
8 checks passed
@patternflow-bot
patternflow-bot deleted the claude/patternflow-cleanup-step3-pr11-bqe09l branch October 15, 2026 06:14
engmung pushed a commit to engmung/Patternflow that referenced this pull request Oct 15, 2026
engmung pushed a commit to engmung/Patternflow that referenced this pull request Oct 15, 2026
Patternflow-lab#11
Patternflow-lab#12
Patternflow-lab#13
Patternflow-lab#15
Patternflow-lab#17
Patternflow-lab#14
Patternflow-lab#16
Patternflow-lab#19
Patternflow-lab#20
Patternflow-lab#18
Patternflow-lab#21
Patternflow-lab#23
Patternflow-lab#24
Patternflow-lab#25
Patternflow-lab#26
Patternflow-lab#28
Patternflow-lab#29
Patternflow-lab#30
Patternflow-lab#27
Patternflow-lab#31
Patternflow-lab#32
Patternflow-lab#34
Patternflow-lab#35
Patternflow-lab#33
Patternflow-lab#36
Patternflow-lab#37
Patternflow-lab#38
Patternflow-lab#39
Patternflow-lab#40
Patternflow-lab#41
Patternflow-lab#42
Patternflow-lab#43
Patternflow-lab#46
Patternflow-lab#44
Patternflow-lab#47
Patternflow-lab#48
Patternflow-lab#49
Patternflow-lab#45
Patternflow-lab#50
Patternflow-lab#51
Patternflow-lab#52
Patternflow-lab#54
Patternflow-lab#57
Patternflow-lab#55
Patternflow-lab#53
Patternflow-lab#56
Patternflow-lab#59
Patternflow-lab#58
Patternflow-lab#60
Patternflow-lab#61
Patternflow-lab#62
Patternflow-lab#63
Patternflow-lab#64
Patternflow-lab#65
Patternflow-lab#66
Patternflow-lab#67
Patternflow-lab#68
Patternflow-lab#69
Patternflow-lab#70
Patternflow-lab#72
Patternflow-lab#73
Patternflow-lab#71
Patternflow-lab#75
Patternflow-lab#74
Patternflow-lab#77
Patternflow-lab#78
Patternflow-lab#76
Patternflow-lab#79
Patternflow-lab#80
Patternflow-lab#81
Patternflow-lab#82
Patternflow-lab#84
Patternflow-lab#83
Patternflow-lab#85
Patternflow-lab#86
Patternflow-lab#87
Patternflow-lab#88
Patternflow-lab#90
Patternflow-lab#91
Patternflow-lab#89
Patternflow-lab#92
patternflow-bot added a commit that referenced this pull request Oct 16, 2026
… 않는다 (#94)

* Add horizontal desktop printed enclosure and assembly instructions. Switch username to mbchars.

* tools: case-models builds mbchars' horizontal desktop case

mbchars.py puts the remix's printed parts together from its STLs (no
assembled file exists): the three front sections where the joint bars'
36 mm insert pitch puts their lug holes, the covers on the sixteen inserts,
the USB retainer on its boss and the stands on the bottom edge, each step
checked against the README (410.28 x 176.16 x 42 mm), the board's encoder
grid, the 320 x 160 mm panel and boolean overlaps. assemble.mjs learns
ledTurn (the panel lies the long way here) and knobLook (the official knob,
printed white), and lib/looks.mjs pla_orange, the 3MF's own #F46B16. The
other three models rebuild byte-identical; the new one is 380 KB.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGBYm64PnfneJq2ZDJ8Gs7

* web: /build's case switch and 3D preview get a fourth case, mbchars' horizontal desktop one

The card is the remix README's own facts and photos (resized to 1200 px),
the preview shows the device in the case, and the switch is four tabs, two
by two on a phone. A case too wide for the view at the one scale (this one,
41 cm across on a desktop's tall canvas) is drawn smaller by as little as
keeps it clear of the arrows; every case still fits at the one scale on a
phone, and the three upright ones on a desktop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGBYm64PnfneJq2ZDJ8Gs7

* docs: changelog for mbchars' horizontal desktop case and the fourth preview case

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QGBYm64PnfneJq2ZDJ8Gs7

* web: ZuperZuche's build joins the map - the first print, from Moscow

Found by accident, with the PCBs ordered ten minutes later; the 3D printer came
a month on, bought for the case, and the case was the first thing it printed.
Moscow was given, so the pin is on the city.

The blurb stops at the printer. The maker's note about making the patterns with
AI is left out on purpose, and there are no pronouns for the maker: the message
does not say.

Three photos: a pixel-art Mount Fuji beside a modular synth, a pixel-art frog
pond seen from above, and a cat plush in front of the panel.

groups.test.ts pins the number of countries on the real map; Russia is new, so
11 becomes 12.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* web: the 3D preview names whose case it is, in the build map's label

On the Build tab the name on the case's tab (Official, Besoiobiy,
SimonePDA, mbchars) stands over the device, on the build map's dark
highlight. It follows the pick at once, as the tab does, and reads
Official for a case whose model did not load. The knob hint moves under
it while it is up. Changelog also gets the line for the arrows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* web, docs: the first flash starts in download mode, /flash goes to the guide's Flash chapter, and the README is new from its first screen

The Play guide's 01 Flash (and /ko) puts hold BOOT, tap RST before Flash
Patternflow on every first flash, assumes the Wi-Fi step after
"Installation complete!" usually does not come (RST, Flash Patternflow
again, Connect to Wi-Fi), and ends on the panel's own patternflow-xxxx
network at 192.168.4.1 for when that does not take; the device simulator
draws the NETWORK screen's hotspot. The Build guide's flash card, the
Pattern tab's notes and the breadboard page give the same order. The bare
/flash, which the device's Update page and every release's FLASHING.md
point at, redirects to /guide/play#flash; /flash/manifest.json and
/flash/bin/* are untouched. flash.test.ts pins the card order and anchors.

The README opens with a one-line definition, the hero, the
photosensitivity warning, four doors (Build, Play, Make patterns, Add
sound) and First light; the story, community, facts and editions follow,
shorter. The docs that give the first flash (firmware/README.md,
PATTERN_GUIDE.md, SUPPORT.md, docs/assembly/) say the same order, the
indexes list the guide pages, the three case remixes and the bundles that
exist, and stale wording (the custom slots, "variant", the dead /flash
page) is gone. CONTRIBUTING.md gets a row for the interactive guide's
copy, and the pull request template asks for the row and the link check.

From #7 (caaf2c1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VaFtEmtx2AkdH1wnbQpV3Z

* docs: the README opens with the fixed lines and three ways in, and First light follows the build

The opening is L1 + L2 + L3 from docs/manifesto.md (Paik moves to Where it
began, in L5's own words), with Play one in your browser, Build one and Get
one assembled under the badges. First light moves below the build, gains the
steps it was missing (unplug before seating, Origin as the sign of success,
Format storage on the first Basics install) and states the J4 rule as data
never power on the DevKit's ports. Stale lines are corrected against the
repo: sound and MQTT shipped in editions, MIDI arrived in 3.9.0, 3.10.5
fixed four requests, and the photosensitivity warning is the manifesto's
full text.

From #8 (bfc4b22).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VaFtEmtx2AkdH1wnbQpV3Z

* docs: BUILD_GUIDE flashes in the Play guide's order, and the README's campaign is still open

BUILD_GUIDE §8.1 now goes download mode first (hold BOOT, tap RST),
Flash Patternflow, the Wi-Fi as a second go after RST, the DevKit seated
with the power bank unplugged, then the panel's own patternflow-xxxx
network (K2 shows its name before the hotspot is up), then the Basics
pack: the Play guide's 01 Flash card for card. §7 no longer seats the
DevKit before it has firmware, so it is Wiring, and 7.4 names the step
that powers up. The README's First light points at §8 again, and Crowd
Supply reads as it stands: past its goal, open until 15 October; the
200% figure stays in the dated timeline. Besoiobiy's case README cites
the renumbered steps.

From #9 (16eca1b).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VaFtEmtx2AkdH1wnbQpV3Z

* ## What changed

**New journal post** — `fine` (ko + en), published 2026-10-13. Not highlighted.

Putting the blog off but not past a week, a hand-written paper diary after months, being selected for Anthropic's Claude startup program, reading and music slipping, AI making time feel more pressing, the interview shoot for the introduction video at the startup center studio, the funding ending in two days, the apartment renovation that still hasn't happened, the visually impaired artist enjoying the Patternflow at the Seoul Station teardown, and parts bought for a workshop.

**Two photos**, resized to 2000 px on the long side:
- the interview studio (faces already pixelated in the source), after the interview paragraph; also the cover, since the author prefers not to lead with a face
- the Seoul Station exhibition before the teardown, after the teardown paragraph

## Notes

- The draft pasted the Korean section twice in `_temp/blog.md`; the second copy was clean and is the one used, so the text matches the English paragraph for paragraph (13 each).
- Verified against the dev server: both language versions return 200, both images serve, and the index hero is this post with the interview photo as its thumbnail. Not in the highlighted rows.
- `dev` and `main` were identical before this commit, so the PR carries only the post.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
BODY
journal: new post "fine"

Post (ko+en), not highlighted: the paper diary, the Claude startup
program, the interview shoot for the introduction video, the
funding ending in two days, the apartment still unrenovated, and the
visually impaired artist enjoying the Patternflow at the teardown.

Two photos at 2000 px: the interview studio (faces already
pixelated), also the cover, and the exhibition before the teardown.
The draft pasted the Korean section twice; the clean second copy is
used.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: the cleanup has a baseline

From #11

* docs: cleanup step 1 is planned

From #12

* docs: the v2 build guide moved to `docs/legacy/BUILD_GUIDE_v2.md`

From #13

* docs: the doc map lists the Korean/English pairs

From #15

* docs: the doc map reads the YAML under `.github/`

From #17

* docs: `CHANGELOG.md` is split by release into `docs/releases/`

From #14

* docs: the community files moved to `.github/` and the audio guide to

From #16

* docs: cleanup step 2 is planned

From #19

* docs: cleanup step 3 is planned

From #20

* docs: the project's writing voice is written down

From #18

* docs: cleanup step 4 is planned

From #21

* docs: the docs index and the repository map catch up with step 1 of the

From #23

* docs: cleanup step 5 is planned

From #24

* web: `check:features` fails when /features and the feature folders

From #25

* web: `check:links-absolute` fails on a GitHub link into the repository

From #26

* hardware: `check:bom` and `check:bom-schematic` hold the BOM to the

From #28

* web: `check:editions` fails when the shelf and the bundles disagree

From #29

* web: `check:presets` fails when a web preset cannot reach a panel

From #30

* web: `check:human-lock` fails a pull request that changes a word of the

From #27

* web: `check:changelog` fails when `CHANGELOG.md` and `docs/releases/`

From #31

* web: every pull request runs the drift checks and the text lock

From #32

* web: `check:roadmap` fails when a /roadmap node and its issues disagree

From #34

* docs: the contributor docs say what CI runs on every pull request

From #35

* web: `check:voice` points at the habits of generated prose, line by line

From #33

* docs: `AGENTS.md` carries the writing-voice rule and the step 2 check

From #36

* docs: the doc map is regenerated at the close of step 2 of the cleanup

From #37

* web: five of the site's twelve lint warnings are gone

From #38

* web: the seven `<img>` lint warnings carry a named exception

From #39

* docs: where the panel size lives, line by line

From #40

* web: pattern Lab's July storage keys say who wrote them and when

From #41

* web: the site's redirects and old routes say what links them

From #42

* web: web CI fails on a lint warning

From #43

* firmware: the MIDI page counts 24 detents a turn, as the encoder has

From #46

* web: the community's old formats say what wrote them and when

From #44

* firmware: the vendored HUB75 driver names the upstream commit it came

From #47

* firmware: the vendored HUB75 driver takes upstream's fix for its config

From #48

* web: a new TODO or FIXME turns the drift checks red

From #49

* web: one file holds the values the firmware and the site both carry

From #45

* docs: the any-resolution RFC has a draft

From #50

* docs: the Linux player has a draft RFC

From #51

* firmware: the firmware reads the values it shares with the site from

From #52

* web: the site's lint and test tooling is on its latest releases inside

From #54

* docs: `AGENTS.md` names `shared/`, the HUB75 driver's `UPSTREAM.md` and

From #57

* docs: the two step 5 drafts are listed in `docs/README.md`

From #55

* web: the site reads the panel size and the knob numbers from

From #53

* web: drizzle is on its latest patch releases

From #56

* docs: the repository maps catch up with step 3

From #59

* web: tailwind is on its latest 4.x release

From #58

* web: react Three is on its latest releases inside the current majors

From #60

* web: zustand is on its latest release inside the current major

From #61

* web: mediabunny is on its latest release inside the current major

From #62

* web: changes from #63

From #63

* web: posthog-js is on its latest release inside the current major

From #64

* web: better-auth is on its latest release inside the current major

From #65

* web: react is on its latest release inside the current major

From #66

* web: next is on its latest release inside the current major

From #67

* docs: the doc map is regenerated at the close of step 3 of the cleanup

From #68

* web: the guide's simulated board takes input that no hand made

From #69

* tools: a virtual panel for the contract vectors

From #70

* tools: the virtual panel answers device state over REST

From #72

* tools: the virtual panel answers the pattern routes

From #73

* tools: contract vectors have a format and a replay

From #71

* web: `check:virtual-panel` runs every preset on the virtual panel

From #75

* tools: the virtual panel speaks MQTT

From #74

* tools: the virtual panel answers `/api/mqtt`

From #77

* tools: the virtual panel speaks OSC

From #78

* docs: the REST contract has its first vectors

From #76

* docs: the MQTT contract has its first vectors

From #79

* tools: oSC has contract vectors

From #80

* docs: the REST vectors reach the rest of the core

From #81

* docs: the MQTT vectors reach the channels and the snapshot, and

From #82

* tools: the virtual panel takes the audio WebSocket

From #84

* tools: the virtual panel speaks RTP-MIDI

From #83

* tools: the audio WebSocket has contract vectors

From #85

* tools: the virtual panel sends MIDI back

From #86

* tools: mIDI has contract vectors

From #87

* tools: mIDI out and `/api/midi` have contract vectors

From #88

* docs: the maps of the tree name the virtual panel and the contract

From #90

* docs: the REST and MIDI specs say one thing where they said two

From #91

* docs: `AGENTS.md` names the virtual panel, the contract vectors and

From #89

* docs: the doc map is regenerated at the close of step 4 of the cleanup

From #92

* docs: changelog for 81 workshop fork PRs

#11
#12
#13
#15
#17
#14
#16
#19
#20
#18
#21
#23
#24
#25
#26
#28
#29
#30
#27
#31
#32
#34
#35
#33
#36
#37
#38
#39
#40
#41
#42
#43
#46
#44
#47
#48
#49
#45
#50
#51
#52
#54
#57
#55
#53
#56
#59
#58
#60
#61
#62
#63
#64
#65
#66
#67
#68
#69
#70
#72
#73
#71
#75
#74
#77
#78
#76
#79
#80
#81
#82
#84
#83
#85
#86
#87
#88
#90
#91
#89
#92

* 시작 — 정리 마지막 기록을 원래 레포 dev 위에 다시 짠다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DpjXsYZbwT5PpwzpNCEEqq

* docs: the doc map lists the six links the cleanup's closing entry adds

The progress log's entries for steps 1 to 5 and the gate link
contract-vectors.md, the doc-parity list, the panel-geometry record and
the two RFC drafts. The cleanup RFC's status line links the log. Each of
the six resolves. The log and the RFC come over with the cleanup's
records, so until they land the map is six rows ahead of the tree.

From #93 (2f094fe).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DpjXsYZbwT5PpwzpNCEEqq

---------

Co-authored-by: Mykyta Bilous <belousnikita@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Lee Seunghun <122682380+engmung@users.noreply.github.com>
Co-authored-by: pi-hub <pi-hub@localhost>
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