Skip to content

[DONE] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 커밋 하나로 다시 얹혀, hub 가 거기서 다시 멈추지 않는다 - #94

Merged
patternflow-bot merged 101 commits into
mainfrom
claude/patternflow-upstream-cleanup-4y44wq
Oct 16, 2026
Merged

patternflow-bot merged 101 commits into
mainfrom
claude/patternflow-upstream-cleanup-4y44wq

Conversation

@patternflow-bot

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

Copy link
Copy Markdown

lsh / https://claude.ai/code/session_01DpjXsYZbwT5PpwzpNCEEqq

hub upstream 이 멈춘 포크 PR #93 을 원래 레포 dev 위에 커밋 하나로 다시 얹었어요. 진행 기록과 정리 RFC 는 hub 묶음이 포크 판으로 싣는 기록이라 빼고, 문서 지도 여섯 줄과 #93 을 가리키는 From 줄만 담았어요. 포크 main 도 merge 해서 충돌을 풀었고 트리는 그대로예요. CI 는 human-lock 하나만 빨간데, 포크 main 과 비교할 때만 그렇고 원래 레포 dev 와 비교하면 통과해요.

좋아지는 것: 없음

할 일

한 일

증거

$ git diff --stat refs/upstream/dev 9dff573 -- docs/investigations/2026-10-doc-map.csv docs/rfc-cleanup-progress.md docs/rfc-cleanup.md
(출력 없음: 원래 레포 dev 판 = 포크 9dff573 판)
$ cmp <(git show 2f094fe:docs/investigations/2026-10-doc-map.csv) docs/investigations/2026-10-doc-map.csv && echo identical-to-2f094fe
identical-to-2f094fe
$ git diff --stat 3b6e014 HEAD
 docs/investigations/2026-10-doc-map.csv | 6 ++++++

포크 main merge:

$ git diff --stat origin/main c894a5f7          # 출력 없음: 포크 main 트리 = c894a5f
$ git merge-base --is-ancestor c894a5f7 HEAD && echo in-upstream-dev
in-upstream-dev
$ git merge origin/main                          # CONFLICT 12 files
$ git diff --name-only HEAD                      # 충돌 12파일 말고 dev 와 다른 파일 없음
$ git checkout --ours -- <12 files> && git add <12 files>
diff vs pre-merge HEAD: 0 lines
$ git log --format='%h %p' -1                    # 8566dc6 fad02d5 60d9f21

지도를 다시 만들어 맞대 봄(커밋 안 함). 2f094fe 의 기록 둘을 이 트리에 얹고 npm run doc-map 하면 두 기록에서 나가는 줄 14개가 커밋한 CSV 의 14줄과 같다:

14 regen.txt / 14 committed.txt
rows from the two records: identical

기록 없이 이 트리 그대로 만들면 그 여섯 줄이 빠진다. 기록이 들어오기 전엔 그게 맞다.

검사(컨테이너, Node 22.22.0, npm ci 뒤, 원래 레포 태그 28개 fetch). merge 뒤 8566dc6 에서 링크와 drift 를 다시 돌렸다:

$ python3 .github/scripts/check_links.py
all 737 relative links resolve
$ PF_LOCK_BASE=3b6e014 npm run check:human-lock
this diff touches 0 locked files
check:human-lock: no locked words changed
$ PF_LOCK_BASE=3b6e014 npm run check:voice
read: 0 added lines in 0 files
check:voice: nothing found
$ (커밋 글) | npm run check:voice -- -
read: 9 lines in 1 file
check:voice: nothing found
$ npm run check:drift          # 30 s
passed   audio-vectors bom bom-schematic changelog editions features links-absolute markers
passed   midi-vectors mqtt-vectors osc-vectors presets rest-vectors shared virtual-panel
skipped  roadmap               # gh 로그인이 없다

8566dc6 의 CI:

base: 60d9f21 (PF_LOCK_BASE)
changed  docs/releases/v3.0.0.md
changed  docs/releases/v3.1.0.md
check:human-lock: 2 locked texts changed

까닭은 이 댓글에 적었다. base 인 포크 main 이 정리 전 판이라, 1단계 067b400b 가 두 릴리스의 긴 글을 -notes.md 로 그대로 옮기고 옛 자리에 CHANGELOG 절을 둔 것이 diff 에 든다. 옮긴 글은 바이트까지 같다. human-lock.ts 는 옛 경로가 남아 있으면 옮겨 간 곳을 찾지 않는다. 컨테이너에서 PF_LOCK_BASE=60d9f21 로 같은 실패를 냈고, 댓글의 고침을 얹으면 moved … word for word 둘에 통과하고 진짜 낱말 고침은 여전히 잡는 것까지 봤다(되돌림).

실행법

git fetch https://github.com/engmung/Patternflow dev
git diff --stat FETCH_HEAD origin/claude/patternflow-upstream-cleanup-4y44wq   # CSV 6줄만
git log --format=%B fad02d5 -1 | grep '^From'
cd web && npm ci && npm run check:drift
PF_LOCK_BASE=60d9f21 npm run check:human-lock   # 이 PR 의 CI 와 같은 실패
PF_LOCK_BASE=3b6e014 npm run check:human-lock   # 원래 레포 dev 기준이면 통과

가정

Changelog

Docs

  • The cleanup's progress log records steps 1 to 5 and the gate. docs/rfc-cleanup-progress.md has an entry for each step and checks the six items of §2.12 at 9dff573, and all six hold. docs/rfc-cleanup.md is marked done.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DpjXsYZbwT5PpwzpNCEEqq

mbchars and others added 30 commits October 10, 2026 11:29
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
…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
…review case

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

hardware+web: mbchars' horizontal desktop case as the third remix, and the fourth case in /build's 3D preview (supersedes engmung#488)
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>
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>
ZuperZuche's build joins the map; the 3D preview names whose case it is
…e 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
…rst 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
… 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
…w-upstream-docs-r4eab8

docs, web: the first flash starts in download mode everywhere, /flash goes to the guide, and the README is rewritten
**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>
patternflow-bot and others added 21 commits October 16, 2026 07:10
gogogo
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
@patternflow-bot patternflow-bot changed the title [WIP] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 겹침 없이 다시 얹힌다 [DONE] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 커밋 하나로 다시 얹혀, hub 가 거기서 다시 멈추지 않는다 Oct 16, 2026
@patternflow-bot
patternflow-bot marked this pull request as ready for review October 16, 2026 07:33
@patternflow-bot patternflow-bot changed the title [DONE] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 커밋 하나로 다시 얹혀, hub 가 거기서 다시 멈추지 않는다 [WIP] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 커밋 하나로 다시 얹혀, hub 가 거기서 다시 멈추지 않는다 Oct 16, 2026
fork main(60d9f21)의 트리는 원래 레포 dev 에 이미 든 c894a5f 와 같아서,
충돌한 줄마다 그 뒤 dev 가 고친 판이 맞다. 트리는 merge 전과 같다.

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

Copy link
Copy Markdown
Author

Drift checks 의 check:human-lock 이 8566dc6 에서 빨갛다(run 38869556133). 다른 아홉 job(펌웨어 다섯 · web · docs-links 등)은 초록이다.

base: 60d9f21 (PF_LOCK_BASE)
changed  docs/releases/v3.0.0.md
changed  docs/releases/v3.1.0.md
check:human-lock: 2 locked texts changed

이 PR 의 고침(fad02d5, CSV 6줄) 때문은 아니다. 이 PR 의 base 인 포크 main 60d9f21 은 원래 레포 main 에 #7~#9 만 얹은 판이라, base 와의 diff 에 원래 레포 dev 의 정리 전체가 들어간다. 그중 1단계 067b400b 가 v3.0.0.md·v3.1.0.md 의 긴 글을 v3.0.0-notes.md·v3.1.0-notes.md 로 옮기고 옛 자리에 CHANGELOG 절을 두었다. 옮긴 글은 바이트까지 같다(diff <(git show 60d9f21:docs/releases/v3.0.0.md) docs/releases/v3.0.0-notes.md 출력 없음, v3.1.0 도). human-lock.ts 는 옛 경로가 남아 있으면 그 글이 다른 파일로 옮겨 갔는지 보지 않고 changed 로 센다. 원래 레포 dev(3b6e014)를 base 로 하면 this diff touches 0 locked files 로 통과한다. 컨테이너에서 PF_LOCK_BASE=60d9f21 로 같은 실패를 냈다.

이 브랜치는 원래 레포로 가는 #93 몫만 싣는 거라 검사 고침은 넣지 않았다. 고친다면 이 정도다. 컨테이너에서 base 60d9f21 로 moved … word for word 둘에 통과하고, v3.0.0-notes.md 의 낱말 하나를 바꾸면 다시 1 locked text changed 로 빨개지는 것까지 봤다:

-function whereIs(text: string): string | null {
+function whereIs(text: string, not?: string): string | null {
 ...
-  return corpus.find((c) => c.text.includes(text))?.file ?? null;
+  return corpus.find((c) => c.file !== not && c.text.includes(text))?.file ?? null;
 }
 ...
     if (b ? a.plain.text === b.plain.text : !a.plain.text) same++;
-    else if (b) {
+    else if (b && whereIs(a.plain.text, c.path)) {
+      console.log(`moved    ${key} → ${whereIs(a.plain.text, c.path)}, word for word`);
+      moved++;
+    } else if (b) {

고치지 않으면 이 PR 의 base 가 포크 main 인 동안 이 검사는 계속 빨갛다. 실패한 job 은 한 번 다시 돌린다.


Generated by Claude Code

@patternflow-bot patternflow-bot changed the title [WIP] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 커밋 하나로 다시 얹혀, hub 가 거기서 다시 멈추지 않는다 [DONE] 정리 마지막 기록(포크 #93)이 원래 레포 dev 위에 커밋 하나로 다시 얹혀, hub 가 거기서 다시 멈추지 않는다 Oct 16, 2026
@patternflow-bot
patternflow-bot merged commit 62aab96 into main Oct 16, 2026
9 of 11 checks passed
@patternflow-bot
patternflow-bot deleted the claude/patternflow-upstream-cleanup-4y44wq branch October 16, 2026 08:42
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.

4 participants