Skip to content

[DONE] 정리 3단계 PR 12 — 패널 드라이버가 원래 라이브러리의 첫 고침을 받아 줄 디코더 값이 늘 정해진다 - #48

Merged
patternflow-bot merged 2 commits into
devfrom
claude/patternflow-cleanup-step3-pr12-e5pfxz
Oct 15, 2026
Merged

patternflow-bot merged 2 commits into
devfrom
claude/patternflow-cleanup-step3-pr12-e5pfxz

Conversation

@patternflow-bot

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

Copy link
Copy Markdown

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

패널 드라이버에 원래 라이브러리의 고침 하나(7bf3b6c)를 들였어요. 3.0.13 은 패널 설정의 줄 디코더 값을 비워 둬서 스택에 남은 값이 들어갔는데, 이제 늘 기본값(TYPE138)이에요. 목록 첫 커밋 c09362a 가 이 값을 읽어 줄 주소를 정해서 이것부터 받았고, 패치 파일은 바이트까지 그대로예요.

좋아지는 것: 없음

체크리스트

  • 계획표 PR 12 줄 — 고칠 파일: 그 커밋이 고치는 원래 파일 · UPSTREAM.md · patternflow.patch
  • PR 11([DONE] 정리 3단계 PR 11 — 패널 드라이버가 원래 라이브러리와 다른 줄이 패치 한 장에 다 적힌다 #47)의 목록 아홉 개를 원래 레포에서 다시 확인, 받을 순서 정하기(아래 「가정」)
  • 7bf3b6c 를 src/hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h 에 그대로 붙이기(git apply, 한 줄)
  • UPSTREAM.md — 받은 커밋 한 줄, 다시 만드는 명령에 cherry-pick -n 한 줄
  • 패치 다시 만들기 — 바이트까지 같아요(sha256 그대로)
  • check_blit.py · check_oe.py · check_boundaries.py · check_presets.py · console_pages.py check · check_versions.py · check_sources.py
  • firmware-build.yml 다섯 조합 초록, 크기 비교
  • check:drift · check:human-lock · check:voice · doc-map · typecheck · lint · check:ci
  • dev(d910ecc)가 이미 브랜치에 들어 있다 — merge 할 것 없음
  • 창작자 몫: 기준 패널에 구워 보고 이 PR 에 한 줄(계획서 k12 · §2.5)

한 일

  • firmware/patternflow/src/hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h: 원래 레포 7bf3b6c(Christopher King, 2026-04-03, "Fix: Properly set line_decoder in HUB75_I2S_CFG struct constructor")를 그대로 붙였어요. 생성자 초기화 목록에 line_decoder(_line_drv) 하나가 들어가요. 필드 선언 순서(driver, line_decoder, double_buff)와 맞아서 -Wreorder 가 안 나요.
  • firmware/patternflow/src/hub75/UPSTREAM.md: 「Taken from upstream since」의 「None yet」 자리에 이 커밋 한 줄과 먼저 받은 까닭. 「Rebuilding the patch」 명령에 git -C "$U/upstream" cherry-pick -n 7bf3b6c… 한 줄. 맨 위 두 문단과 확인 명령 앞 문장은 「태그」를 「태그와 받은 커밋」으로 고쳤어요.
  • firmware/patternflow/src/hub75/patternflow.patch: 다시 만들었고 바뀐 바이트가 없어요. 고친 줄이 15 hunk 어디에도 안 걸리고 한 줄을 한 줄로 바꿔서 줄 번호도 그대로예요.

왜 c09362a 보다 먼저

3.0.13 의 HUB75_I2S_CFG 생성자는 _line_drv 를 받기만 하고 line_decoder 에 넣지 않아요. core_display.h:20 의 initDisplay() 는 mxconfig 를 스택에 만들어서, 그 필드는 그 자리에 남아 있던 값이에요. 지금 드라이버는 그 값을 SM5266P · SM5368 과만 견줘요(.cpp 173 · 1129–1194줄). 패널이 잘 나오니 그 둘은 아니었다는 것만 알 수 있어요.

목록 첫 커밋 c09362a 는 clearFrameBuffer() 에서 line_decoder == TYPE_DIRECT(2) 이면 줄 주소를 1 << row 로 바꿔요. 순서대로 받으면 그 PR 부터 7bf3b6c PR 이 머지될 때까지 모든 줄 주소가 스택에 남은 값에 달려요. 그 값은 조합마다, 앞서 부른 함수마다 다를 수 있어서 한 대에 구워 보는 것으로는 다섯 조합을 다 확인하지 못해요. 이것부터 받으면 그 값이 늘 TYPE138(0)이고 c09362a 의 새 줄은 이 패널에서 아무것도 안 해요.

바뀐 순서로 남은 여덟 개도 다 붙는지 해 봤어요. 7bf3b6c 다음 c09362a 538cb41 3ab92ad b40a838 203502b a15a887 6a49f09 c005c7b 순서로 「3.0.13 + 앞의 것」과 「이 폴더 + 앞의 것」 양쪽에 git apply 로 문맥 그대로 붙고, 끝에서 다시 만든 패치가 fuzz 0 으로 붙어 같은 트리가 돼요(15 hunk). 계획서 순서로도 똑같이 돼요. 다음 PR 12 는 c09362a 예요.

증거

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

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

sha256 이 PR 11 이 적은 값과 같아요. cherry-pick -n 줄을 빼고 다시 만들면 패치에 원래 레포의 그 줄이 16번째 hunk(.h @@ -347,7 +347,7 @@)로 들어가요. 그래서 그 줄이 있어야 패치가 우리 변경만 담아요. cherry-pick -n 은 git 사용자 설정 없이도(HOME 을 빈 폴더로) 돌아요.

펌웨어 검사:

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
check_versions.py:   versions agree: core v3.11.0, audio v0.7.0, performance v0.4.0
check_sources.py:    all checks passed

CI firmware-build.yml(8465f80) 다섯 조합 초록, 크기를 PR 11 이 적은 dev 값과 견줬어요:

composition   .bin bytes          RAM used  Flash used          static DRAM  IRAM    window left
audio         1208688 (+16)       105648    1208317 (+4)        161,216      71,951  330,304
clock         1187088 (+0)        86888     1186721 (+4)        141,976      71,471  349,544
default       1102688 (+16)       86600     1102317 (+4)        141,688      71,471  349,832
midi          1163488 (+16)       100000    1163117 (+4)        154,288      70,671  337,232
performance   1526640 (+16)       103108    1526269 (+4)        158,200      71,471  333,320

플래시 4바이트는 생성자에서 필드 하나를 쓰는 명령 하나예요. .bin 은 16바이트 단위로 채워서 +16 이거나 그대로예요. RAM · DRAM · IRAM 은 그대로예요. build.sh 판정은 다섯 다 ok, check_footprint.py 는 「every edition within tolerance」. 로그에 Wreorder 도, hub75 를 가리키는 warning: 도 없어요(midi 의 경고 141줄은 모두 NimBLE 의 CONFIG_BT_NIMBLE_NVS_PERSIST 재정의예요). PR 의 체크 여덟 개 모두 초록이에요.

사이트(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 d910ecc, 19 added lines in 2 files, nothing found
npm run check:human-lock → this diff touches 0 locked files

doc-map(git fetch --tags 뒤 — dev d910ecc 에서 돌려도 같은 두 줄이에요. 두 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

2026-10-doc-map.csv 는 dev 에서도 두 줄(2026-10-panel-geometry.md 의 링크)이 늘어요. 이 PR 과 상관없고 k27 몫이에요.

실행법

저장소 맨 위에서 firmware/patternflow/src/hub75/UPSTREAM.md 「Rebuilding the patch」의 두 명령을 그대로 돌려요. 첫째 뒤 git diff 가 비고, 둘째의 diff -r 이 아무것도 안 찍으면 돼요. GNU diff 가 필요해요.

가정

  • 순서: 계획서 k12 는 「목록의 순서대로」라고 해요. 목록 여섯째 7bf3b6c 를 첫째로 당겼어요. 까닭은 위 「왜 c09362a 보다 먼저」예요. 나머지 여덟은 목록 순서 그대로이고, 다음 PR 12 들이 UPSTREAM.md 「Taken from upstream since」를 보고 안 받은 것 중 맨 앞을 받으면 돼요. 그래서 그 절의 「oldest first」를 「받은 순서」로 고쳤어요.
  • 한 PR 에 한 커밋: 작업 글의 「PR 12 하나만」과 표의 「one PR per commit」을 함께 읽어 커밋 하나만 받았어요.
  • 다시 만드는 명령: PR 11 이 남긴 문장대로 cherry-pick -n 이에요. 커밋마다 줄을 따로 두지 않고, 다음 커밋은 같은 줄 끝에 해시를 이어 붙이게 적었어요(cherry-pick -n A B 는 차례로 붙여요).
  • build.sh all: 이 컨테이너에서 PlatformIO 는 깔리지만 espressif32 플랫폼을 못 받아요(Platform Manager: Installing espressif32 @ 7.0.1 → HTTPClientError). CI firmware-build.yml 다섯 조합으로 갈음했어요.
  • 구워 보기: 계획서가 창작자 몫으로 둔 기준 패널 확인은 제가 할 수 없어서 체크리스트에 열어 뒀어요.
  • check:drift 의 roadmap 은 이 세션의 gh 가 engmung/Patternflow 를 못 읽어 건너뛰었어요. CI 는 자기 토큰으로 읽어요.
  • CHANGELOG.md 는 고치지 않았어요. 넣을 줄은 아래에 있어요.

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

  • VENDORED.md 는 3.0.13 기준 이야기를 그대로 해요. 이 커밋은 우리 변경이 아니라서 거기 적을 것이 없어요.

Changelog

Firmware

  • The vendored HUB75 driver takes upstream's fix for its config constructor. HUB75_I2S_CFG now sets line_decoder from its argument (upstream 7bf3b6c), so the field is TYPE138 instead of whatever was on the stack where initDisplay() builds the config. src/hub75/UPSTREAM.md lists the commit and its rebuild cherry-picks it, so patternflow.patch still holds only Patternflow's changes and comes out byte for byte the same.

Upstream

  • What: take upstream 7bf3b6c into src/hub75/, so the HUB75_I2S_CFG constructor sets line_decoder; UPSTREAM.md lists it ahead of older commits and its rebuild cherry-picks it; patternflow.patch rebuilds byte for byte unchanged.
  • Checks: check_blit.py, check_oe.py, check_boundaries.py, npm run check:ci and check:drift pass; the patch on 3.0.13 with 7bf3b6c picked 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_01NitpYZAot3zeUJsjGVUSyf

… constructor

At 3.0.13 the field is never set, and c09362a, the oldest commit left
on the list, reads it to address every row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NitpYZAot3zeUJsjGVUSyf
@patternflow-bot patternflow-bot changed the title [WIP] 정리 3단계 PR 12 — 패널 드라이버에 원래 라이브러리 고침을 들인다 [WIP] 정리 3단계 PR 12 — 패널 드라이버가 원래 라이브러리의 첫 고침을 받아 줄 디코더 값이 늘 정해진다 Oct 15, 2026
@patternflow-bot patternflow-bot changed the title [WIP] 정리 3단계 PR 12 — 패널 드라이버가 원래 라이브러리의 첫 고침을 받아 줄 디코더 값이 늘 정해진다 [DONE] 정리 3단계 PR 12 — 패널 드라이버가 원래 라이브러리의 첫 고침을 받아 줄 디코더 값이 늘 정해진다 Oct 15, 2026
@patternflow-bot
patternflow-bot marked this pull request as ready for review October 15, 2026 06:27
@patternflow-bot
patternflow-bot merged commit ec707e2 into dev Oct 15, 2026
8 checks passed
@patternflow-bot
patternflow-bot deleted the claude/patternflow-cleanup-step3-pr12-e5pfxz branch October 15, 2026 06:29
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