Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
227 commits
Select commit Hold shift + click to select a range
a22659d
Add horizontal desktop printed enclosure and assembly instructions. S…
mbchars Oct 10, 2026
5c8e0be
tools: case-models builds mbchars' horizontal desktop case
claude Oct 10, 2026
646331c
web: /build's case switch and 3D preview get a fourth case, mbchars' …
claude Oct 10, 2026
dd528bc
docs: changelog for mbchars' horizontal desktop case and the fourth p…
claude Oct 10, 2026
9b64efd
Merge pull request #489 from Patternflow-lab/upstream/horizontal-desktop
engmung Oct 10, 2026
5ffe66e
Merge pull request #490 from engmung/dev
engmung Oct 10, 2026
06066c0
web: ZuperZuche's build joins the map - the first print, from Moscow
engmung Oct 10, 2026
a3bb6fa
web: the 3D preview names whose case it is, in the build map's label
engmung Oct 10, 2026
511e776
Merge pull request #491 from engmung/dev
engmung Oct 10, 2026
04062dc
web, docs: the first flash starts in download mode, /flash goes to th…
claude Oct 12, 2026
9a68428
docs: the README opens with the fixed lines and three ways in, and Fi…
claude Oct 12, 2026
c894a5f
docs: BUILD_GUIDE flashes in the Play guide's order, and the README's…
claude Oct 12, 2026
a5cbba9
Merge pull request #492 from Patternflow-lab/claude/patternflow-upstr…
engmung Oct 12, 2026
8955feb
## What changed
engmung Oct 13, 2026
94153d3
Merge pull request #493 from engmung/dev
engmung Oct 13, 2026
ffde537
docs: the cleanup has a baseline
patternflow-bot Oct 14, 2026
387487d
docs: cleanup step 1 is planned
patternflow-bot Oct 14, 2026
b55d59a
docs: the v2 build guide moved to `docs/legacy/BUILD_GUIDE_v2.md`
patternflow-bot Oct 14, 2026
e8519b4
docs: the doc map lists the Korean/English pairs
patternflow-bot Oct 14, 2026
6479937
docs: the doc map reads the YAML under `.github/`
patternflow-bot Oct 14, 2026
067b400
docs: `CHANGELOG.md` is split by release into `docs/releases/`
patternflow-bot Oct 14, 2026
d610762
docs: the community files moved to `.github/` and the audio guide to
patternflow-bot Oct 14, 2026
fb502f7
docs: cleanup step 2 is planned
patternflow-bot Oct 14, 2026
e877cf5
docs: cleanup step 3 is planned
patternflow-bot Oct 14, 2026
2d1029d
docs: the project's writing voice is written down
patternflow-bot Oct 14, 2026
d91857d
docs: cleanup step 4 is planned
patternflow-bot Oct 15, 2026
338bd35
docs: the docs index and the repository map catch up with step 1 of the
patternflow-bot Oct 15, 2026
58827ff
docs: cleanup step 5 is planned
patternflow-bot Oct 15, 2026
c46ffb1
web: `check:features` fails when /features and the feature folders
patternflow-bot Oct 15, 2026
e521f54
web: `check:links-absolute` fails on a GitHub link into the repository
patternflow-bot Oct 15, 2026
008fb81
hardware: `check:bom` and `check:bom-schematic` hold the BOM to the
patternflow-bot Oct 15, 2026
2848040
web: `check:editions` fails when the shelf and the bundles disagree
patternflow-bot Oct 15, 2026
383ab39
web: `check:presets` fails when a web preset cannot reach a panel
patternflow-bot Oct 15, 2026
2b2c084
web: `check:human-lock` fails a pull request that changes a word of the
patternflow-bot Oct 15, 2026
c10db85
web: `check:changelog` fails when `CHANGELOG.md` and `docs/releases/`
patternflow-bot Oct 15, 2026
4a5599b
web: every pull request runs the drift checks and the text lock
patternflow-bot Oct 15, 2026
85d261b
web: `check:roadmap` fails when a /roadmap node and its issues disagree
patternflow-bot Oct 15, 2026
01b2621
docs: the contributor docs say what CI runs on every pull request
patternflow-bot Oct 15, 2026
d81870c
web: `check:voice` points at the habits of generated prose, line by line
patternflow-bot Oct 15, 2026
d2d6e54
docs: `AGENTS.md` carries the writing-voice rule and the step 2 check
patternflow-bot Oct 15, 2026
f7d005b
docs: the doc map is regenerated at the close of step 2 of the cleanup
patternflow-bot Oct 15, 2026
9aa6921
web: five of the site's twelve lint warnings are gone
patternflow-bot Oct 15, 2026
5e8a223
web: the seven `<img>` lint warnings carry a named exception
patternflow-bot Oct 15, 2026
de7f61f
docs: where the panel size lives, line by line
patternflow-bot Oct 15, 2026
3f4903d
web: pattern Lab's July storage keys say who wrote them and when
patternflow-bot Oct 15, 2026
85989c1
web: the site's redirects and old routes say what links them
patternflow-bot Oct 15, 2026
e009c14
web: web CI fails on a lint warning
patternflow-bot Oct 15, 2026
e3ee779
firmware: the MIDI page counts 24 detents a turn, as the encoder has
patternflow-bot Oct 15, 2026
04aa6bb
web: the community's old formats say what wrote them and when
patternflow-bot Oct 15, 2026
2f301a2
firmware: the vendored HUB75 driver names the upstream commit it came
patternflow-bot Oct 15, 2026
d67355a
firmware: the vendored HUB75 driver takes upstream's fix for its config
patternflow-bot Oct 15, 2026
a9b8d3d
web: a new TODO or FIXME turns the drift checks red
patternflow-bot Oct 15, 2026
1dc3f5f
web: one file holds the values the firmware and the site both carry
patternflow-bot Oct 15, 2026
bdd7caa
docs: the any-resolution RFC has a draft
patternflow-bot Oct 15, 2026
3f6e659
docs: the Linux player has a draft RFC
patternflow-bot Oct 15, 2026
c24639e
firmware: the firmware reads the values it shares with the site from
patternflow-bot Oct 15, 2026
4e3ed53
web: the site's lint and test tooling is on its latest releases inside
patternflow-bot Oct 15, 2026
9b9d584
docs: `AGENTS.md` names `shared/`, the HUB75 driver's `UPSTREAM.md` and
patternflow-bot Oct 15, 2026
c204efe
docs: the two step 5 drafts are listed in `docs/README.md`
patternflow-bot Oct 15, 2026
b571af4
web: the site reads the panel size and the knob numbers from
patternflow-bot Oct 15, 2026
d6e6afd
web: drizzle is on its latest patch releases
patternflow-bot Oct 15, 2026
e39bf7e
docs: the repository maps catch up with step 3
patternflow-bot Oct 15, 2026
0606528
web: tailwind is on its latest 4.x release
patternflow-bot Oct 15, 2026
35eb866
web: react Three is on its latest releases inside the current majors
patternflow-bot Oct 15, 2026
dafbdf9
web: zustand is on its latest release inside the current major
patternflow-bot Oct 15, 2026
0224ca2
web: mediabunny is on its latest release inside the current major
patternflow-bot Oct 15, 2026
709326a
web: changes from Patternflow-lab/Patternflow#63
patternflow-bot Oct 15, 2026
0cb5974
web: posthog-js is on its latest release inside the current major
patternflow-bot Oct 15, 2026
b462bf8
web: better-auth is on its latest release inside the current major
patternflow-bot Oct 15, 2026
215f80b
web: react is on its latest release inside the current major
patternflow-bot Oct 15, 2026
9f53268
web: next is on its latest release inside the current major
patternflow-bot Oct 15, 2026
79a6285
docs: the doc map is regenerated at the close of step 3 of the cleanup
patternflow-bot Oct 15, 2026
275b13b
web: the guide's simulated board takes input that no hand made
patternflow-bot Oct 15, 2026
e03912e
tools: a virtual panel for the contract vectors
patternflow-bot Oct 15, 2026
30f06c9
tools: the virtual panel answers device state over REST
patternflow-bot Oct 15, 2026
ad5a775
tools: the virtual panel answers the pattern routes
patternflow-bot Oct 15, 2026
f89b763
tools: contract vectors have a format and a replay
patternflow-bot Oct 15, 2026
43b196f
web: `check:virtual-panel` runs every preset on the virtual panel
patternflow-bot Oct 15, 2026
d0e0644
tools: the virtual panel speaks MQTT
patternflow-bot Oct 15, 2026
b532c6f
tools: the virtual panel answers `/api/mqtt`
patternflow-bot Oct 15, 2026
1d9f519
tools: the virtual panel speaks OSC
patternflow-bot Oct 15, 2026
72152a3
docs: the REST contract has its first vectors
patternflow-bot Oct 15, 2026
4621694
docs: the MQTT contract has its first vectors
patternflow-bot Oct 15, 2026
59f575b
tools: oSC has contract vectors
patternflow-bot Oct 15, 2026
5605d26
docs: the REST vectors reach the rest of the core
patternflow-bot Oct 15, 2026
0c3c654
docs: the MQTT vectors reach the channels and the snapshot, and
patternflow-bot Oct 15, 2026
d4ed6bc
tools: the virtual panel takes the audio WebSocket
patternflow-bot Oct 15, 2026
e904385
tools: the virtual panel speaks RTP-MIDI
patternflow-bot Oct 15, 2026
0114653
tools: the audio WebSocket has contract vectors
patternflow-bot Oct 15, 2026
dbf408f
tools: the virtual panel sends MIDI back
patternflow-bot Oct 15, 2026
c976b7a
tools: mIDI has contract vectors
patternflow-bot Oct 15, 2026
543cb17
tools: mIDI out and `/api/midi` have contract vectors
patternflow-bot Oct 15, 2026
d349429
docs: the maps of the tree name the virtual panel and the contract
patternflow-bot Oct 15, 2026
d66684c
docs: the REST and MIDI specs say one thing where they said two
patternflow-bot Oct 15, 2026
483cd63
docs: `AGENTS.md` names the virtual panel, the contract vectors and
patternflow-bot Oct 15, 2026
7d06487
docs: the doc map is regenerated at the close of step 4 of the cleanup
patternflow-bot Oct 15, 2026
b6c1fae
docs: changelog for 81 workshop fork PRs
Oct 15, 2026
3b6e014
big cleanup
engmung Oct 15, 2026
987ea71
Merge pull request #495 from engmung/dev
engmung Oct 15, 2026
da45ad8
docs: the cleanup's progress log records steps 1 to 5 and the gate
patternflow-bot Oct 15, 2026
9d0c8e1
docs: changelog for Patternflow-lab/Patternflow#93
Oct 16, 2026
2b4fa1f
Merge pull request #496 from Patternflow-lab/upstream/1016-2f094fe
engmung Oct 16, 2026
5f2d5cd
Merge pull request #497 from engmung/dev
engmung Oct 16, 2026
fd52e50
web: Pattern Lab's pixel undo survives a matrix resize
patternflow-bot Oct 16, 2026
c34c926
web: a link to any page previews with that page's own title and picture
patternflow-bot Oct 16, 2026
152e3e9
web: Pattern Lab asks before Del removes a layer with work in it
patternflow-bot Oct 16, 2026
ab7ec95
web: Pattern Lab stacks its panels on a phone
patternflow-bot Oct 16, 2026
370ce50
web: Pattern Lab's wheel zoom no longer scrolls the panel under it
patternflow-bot Oct 16, 2026
94070ff
web: the home page video gives way to reduced motion, and the section
patternflow-bot Oct 16, 2026
ac0b97a
web: the links at the end of each guide say where they go
patternflow-bot Oct 16, 2026
7e75fdc
web: the Korean guides speak Korean to a screen reader
patternflow-bot Oct 16, 2026
a7282de
docs: changelog for 7 workshop fork PRs
Oct 16, 2026
cc644a3
Merge pull request #498 from Patternflow-lab/upstream/1017-e134a83
engmung Oct 16, 2026
9520f28
Merge pull request #499 from engmung/dev
engmung Oct 16, 2026
058c398
web: the Build guide keeps up with a finger on a phone
patternflow-bot Oct 17, 2026
e560601
docs: changelog for Patternflow-lab/Patternflow#104
Oct 17, 2026
6fdcbf5
Merge pull request #500 from Patternflow-lab/upstream/1017-c830467
engmung Oct 17, 2026
e420a8d
Merge pull request #501 from engmung/dev
engmung Oct 17, 2026
fa76be1
docs: changes from Patternflow-lab/Patternflow#105
patternflow-bot Oct 18, 2026
65c5aa0
web: the build map has a fourth kind of pin, a showing
patternflow-bot Oct 18, 2026
0f6c32b
docs: changelog for Patternflow-lab/Patternflow#106
Oct 18, 2026
537ac2f
Merge pull request #502 from Patternflow-lab/upstream/1018-70efd67
engmung Oct 18, 2026
00e43e4
Merge pull request #503 from engmung/dev
engmung Oct 18, 2026
5a54c97
journal: new post "good-moments"
engmung Oct 18, 2026
dc3ea13
journal: good-moments is highlighted
engmung Oct 18, 2026
b5b7fb8
Merge pull request #504 from engmung/dev
engmung Oct 18, 2026
bbf0fce
web: Pattern Lab's preview shows add layers the way the device does
patternflow-bot Oct 18, 2026
6bba03c
web: the Live Editor says why pasted code does not run
patternflow-bot Oct 19, 2026
ae93f27
web: community pages open when the browser blocks site data
patternflow-bot Oct 21, 2026
bef1137
web: the home page waits for the Pattern tab before fetching the code
patternflow-bot Oct 21, 2026
d8df3c2
web: the guide's tests give the same answer on a busy machine and a fast
patternflow-bot Oct 21, 2026
61ef7a4
web: Pattern Lab's "Copied" labels clear their timer when the panel
patternflow-bot Oct 21, 2026
edd6257
web: posthog-js loads after the page does
patternflow-bot Oct 21, 2026
2c7ba10
web: Closing Send or Publish from its backdrop keeps To hardware open
patternflow-bot Oct 21, 2026
5acec4a
web: Korean pages fetch 318 KB of Pretendard Hangul instead of 1.2 MB
patternflow-bot Oct 21, 2026
4eb0472
web: editing a deck no longer runs out after four changes
patternflow-bot Oct 21, 2026
14d80f1
web: the hero video has a stop button
patternflow-bot Oct 21, 2026
3067666
web: Pattern Lab's dialogs close on Esc, and its header menus close on a
patternflow-bot Oct 21, 2026
deb0041
web: the breadboard build guide fits the window from 1280px up, and
patternflow-bot Oct 21, 2026
7b841c5
web: the deck panel and the Send window stop waiting when the build
patternflow-bot Oct 21, 2026
f04324c
web: the Live Editor fits a phone screen
patternflow-bot Oct 21, 2026
6c4d1fc
docs: the build service docs describe the worker that runs today
patternflow-bot Oct 21, 2026
ed3d9fd
web: Pattern Lab's Pixel zoom follows the wheel's travel and holds the
patternflow-bot Oct 21, 2026
37b6e0b
web: the Live Editor's creation prompt gives the step one detent really
patternflow-bot Oct 21, 2026
a742185
web: community dialogs close with a thumb, and the atlas works from the
patternflow-bot Oct 21, 2026
e226525
web: Pattern Lab's Pixel panel opens with the whole picture in view
patternflow-bot Oct 21, 2026
acbe8da
web: the community rate limiter keeps an hour of builds through its
patternflow-bot Oct 21, 2026
c903df9
web: the project map's toggles fit a phone, and the map says which
patternflow-bot Oct 21, 2026
20403b6
web: changes from Patternflow-lab/Patternflow#130
patternflow-bot Oct 21, 2026
aa32509
web: the home tabs' link rows draw a focus ring, and each tab's title is
patternflow-bot Oct 21, 2026
5573fa0
web: a desk run of `check:drift` reports a skipped `links-absolute` as
patternflow-bot Oct 21, 2026
4025dd0
web: links drawn as buttons and cards keep their look on hover
patternflow-bot Oct 21, 2026
258bcf5
web: two unimported files and six uncalled exports are gone
patternflow-bot Oct 21, 2026
2c6a8fc
web: the 3D device and the Inside globe hold still for reduced motion
patternflow-bot Oct 21, 2026
652f971
docs: the docs index, the repository map and the contributor guide
patternflow-bot Oct 21, 2026
021eebf
web: the atlas says why it did not save a pin
patternflow-bot Oct 21, 2026
f4e3c5a
web: the guide's panel simulator fails a test when a firmware number it
patternflow-bot Oct 21, 2026
b3233ab
web: a pattern page stops counting the lines Pattern Lab writes on its
patternflow-bot Oct 21, 2026
5a29872
web: the atlas fits a phone
patternflow-bot Oct 21, 2026
bf1a654
web: the site's typecheck catches unused locals and parameters, switch
patternflow-bot Oct 21, 2026
bd20601
web: community fields a screen reader could not name now have names
patternflow-bot Oct 21, 2026
0486a9c
web: the home page's tabs open in a browser without WebGL
patternflow-bot Oct 21, 2026
6ceac0f
web: the home page poster comes at the width it is drawn
patternflow-bot Oct 22, 2026
34c5090
web: the Build and Pattern tabs, and the home page on a phone, no longer
patternflow-bot Oct 22, 2026
4f98d1d
web: community write routes answer a `null` body with a 400
patternflow-bot Oct 22, 2026
2dea66f
web: Pattern Lab and the Live Editor say when pasted code was cut off
patternflow-bot Oct 22, 2026
a8f01b0
web: Pattern Lab's Recent and Panels menus open inside a phone screen
patternflow-bot Oct 22, 2026
26a2ecb
web: changes from Patternflow-lab/Patternflow#150
patternflow-bot Oct 22, 2026
1676e1d
web: copy buttons in Pattern Lab and the Live Editor say "Copy failed"
patternflow-bot Oct 22, 2026
c98f122
web: sharing from Pattern Lab measures the code the way the community
patternflow-bot Oct 22, 2026
ea3efab
web: the community API no longer lets an edit move a pattern to MIT or
patternflow-bot Oct 22, 2026
985bd09
web: five community windows close on Esc and hand the focus back
patternflow-bot Oct 22, 2026
ebb01d0
web: the community atlas stands its filter chips above the map on a
patternflow-bot Oct 22, 2026
2ea1b3f
web: six pages stop prefetching the home page's 3D code
patternflow-bot Oct 22, 2026
33b467b
web: pages no longer preload fonts their text doesn't use
patternflow-bot Oct 22, 2026
b98361e
web: a wrapping knob on a range other than 0..1 hands the pattern every
patternflow-bot Oct 22, 2026
21d3783
web: a mask over a 0% layer in Pattern Lab gates nothing in the exports
patternflow-bot Oct 22, 2026
896c6d9
docs: changelog for 50 workshop fork PRs
Oct 22, 2026
734888b
Merge pull request #505 from Patternflow-lab/upstream/1022-22bfe99
engmung Oct 22, 2026
695da86
Merge pull request #506 from engmung/dev
engmung Oct 22, 2026
79abda1
web: add Dmitry Lee'O's build from Moscow to the map
engmung Oct 23, 2026
498087e
Merge pull request #507 from engmung/dev
engmung Oct 23, 2026
6a8b7ef
web: run CI on Node 22
engmung Oct 23, 2026
4371b59
web: update five dependencies past their security advisories
engmung Oct 23, 2026
be1de9b
Merge pull request #508 from engmung/dev
engmung Oct 23, 2026
e4f15be
Publish the "What Should I Do" journal post
engmung Oct 25, 2026
ee0af6b
Merge pull request #509 from engmung/dev
engmung Oct 25, 2026
917a6ad
web: Pattern Lab no longer has the AI gallery or a Gemini key
patternflow-bot Oct 23, 2026
9d7251c
web: Pattern Lab has text layers
patternflow-bot Oct 23, 2026
2e0064e
web: Pattern Lab's text layer copies out as code, and its firmware
patternflow-bot Oct 23, 2026
9804b19
web: Pattern Lab's text layers scroll, twinkle or run their colour ramp
patternflow-bot Oct 23, 2026
28383bd
web: tapping a tab in Pattern Lab on a phone no longer closes another
patternflow-bot Oct 23, 2026
c4b784d
web: a new code layer in Pattern Lab follows the knobs and lets the
patternflow-bot Oct 23, 2026
bf272a3
web: Pattern Lab's Panels menu brings a hidden panel to the front
patternflow-bot Oct 24, 2026
2d81213
web: Pattern Lab's To hardware waits for a translated layer before Next
patternflow-bot Oct 24, 2026
8eb667b
web: Pattern Lab's To hardware keeps only the header from a pasted chat
patternflow-bot Oct 24, 2026
45a8813
web: Pattern Lab's To hardware translates the layer that shows
patternflow-bot Oct 24, 2026
335adc3
web: Pattern Lab's stacked C++ header compiles whatever the knobs and
patternflow-bot Oct 24, 2026
eb484e7
web: Pattern Lab sends one code layer out at its preview brightness
patternflow-bot Oct 24, 2026
acb7bb5
web: changes from Patternflow-lab/Patternflow#199
patternflow-bot Oct 24, 2026
fa49799
web: a stacked Pattern Lab code layer goes out with the pixels the
patternflow-bot Oct 24, 2026
ea8f3ee
web: changes from Patternflow-lab/Patternflow#202
patternflow-bot Oct 24, 2026
0bb51cf
web: Pattern Lab's To hardware keeps the pasted header
patternflow-bot Oct 24, 2026
2022b98
web: Pattern Lab's dialogs stay open when a drag that began inside them
patternflow-bot Oct 24, 2026
7ed7024
web: Pattern Lab's Text panel turns a text effect's speed knob in place
patternflow-bot Oct 24, 2026
d2fbaa8
web: Pattern Lab's paste box asks in English, and the Code and Pixel
patternflow-bot Oct 24, 2026
c71f835
web: Pattern Lab's knob sliders turn one encoder detent per arrow key
patternflow-bot Oct 24, 2026
89c73ff
web: Pattern Lab's Layers and Knobs controls are fingertip-sized on
patternflow-bot Oct 24, 2026
fd33841
web: changes from Patternflow-lab/Patternflow#210
patternflow-bot Oct 24, 2026
1622536
web: Pattern Lab's Pixel zoom buttons keep the middle of the view still
patternflow-bot Oct 24, 2026
32cfdea
web: Pattern Lab's Share window closes on Esc
patternflow-bot Oct 24, 2026
0780e5f
web: add firmware header names the Lab's To hardware button
patternflow-bot Oct 24, 2026
59ca318
web: a community card reads a fine knob the way the Lab does
patternflow-bot Oct 24, 2026
5a4f68b
web: a downloaded community header carries one licence line
patternflow-bot Oct 24, 2026
aaf2f56
web: Pattern Lab's stylesheets drop 13 classes no component used
patternflow-bot Oct 24, 2026
8ccf6be
web: the Pattern and Build tabs' small notes keep their own size
patternflow-bot Oct 24, 2026
2f62ac4
web: Pattern Lab's modules export only what another file reads
patternflow-bot Oct 25, 2026
dd9b63d
web: Pattern Lab's twice-written helpers live in one place each
patternflow-bot Oct 25, 2026
a3092e9
web: the Layers panel has its own stylesheet
patternflow-bot Oct 25, 2026
f6cfcf1
web: Pattern Lab's header rules live with the dock
patternflow-bot Oct 25, 2026
2682d6c
docs: changelog for 33 workshop fork PRs
Oct 25, 2026
8f99c4d
Merge pull request #510 from Patternflow-lab/upstream/1025-9931790
engmung Oct 25, 2026
22cf039
Merge pull request #511 from engmung/dev
engmung Oct 25, 2026
938608f
docs: the manifesto names Pattern Lab's layers instead of batch gener…
Oct 25, 2026
e36fde0
web, docs: the /pattern card and AGENTS.md stop naming batch generati…
Oct 25, 2026
63a5817
Merge pull request #512 from Patternflow-lab/claude/lab-wording-after…
engmung Oct 25, 2026
d499b57
web: patternflow.work can run as a Cloudflare Worker (OpenNext), rebu…
Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This applies everywhere Patternflow people meet: this repository (issues, pull r

## How we treat each other

The rule was written before there was anything to build, as a short poem, and it is the sixth section of the [manifesto](docs/manifesto.md#6-how-we-treat-each-other). In full:
The rule was written before there was anything to build, as a short poem, and it is the sixth section of the [manifesto](../docs/manifesto.md#6-how-we-treat-each-other). In full:

> 아무것도 몰라도, 하고자 한다면 만들 수 있습니다.
> 도와주는 게 당연합니다. 고마운 게 당연합니다.
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ contact_links:
url: https://discord.gg/Vr9QtsxeTk
about: New here? Join the server, then jump into the channels above.
- name: Getting help — every venue in one table
url: https://github.com/engmung/Patternflow/blob/main/SUPPORT.md
url: https://github.com/engmung/Patternflow/blob/main/.github/SUPPORT.md
about: Where to ask what, including the venue that works where Discord is blocked.
- name: Contributing guide
url: https://github.com/engmung/Patternflow/blob/main/CONTRIBUTING.md
Expand Down
5 changes: 5 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,10 @@
## Tested
<!-- How did you check it works? (built locally, flashed the board, ran the site…) -->

## Which row
<!-- Which row of the table in CONTRIBUTING.md (https://github.com/engmung/Patternflow/blob/main/CONTRIBUTING.md#where-your-contribution-goes) this is: a guide fix, a feature, a remix… -->

---
- [ ] Touches `web/` → it builds (`npm run build`)
- [ ] Touches `firmware/` → every composition builds (`./firmware/bundles/build.sh all`), and the core still names no feature (`python firmware/toolchain/check_boundaries.py`)
- [ ] Touches a markdown file → its relative links resolve (`python3 .github/scripts/check_links.py`)
4 changes: 2 additions & 2 deletions SECURITY.md → .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ Please report privately through [GitHub's report form](https://github.com/engmun
## What is in scope

- **The community site** ([community.patternflow.work](https://community.patternflow.work)): accounts and sessions, uploads, the sandboxed iframe that runs published patterns, moderation.
- **The browser flasher and update handoff** ([patternflow.work/flash](https://patternflow.work/flash), `/update`): the firmware images it serves and where they come from.
- **The browser flasher and update handoff** (the **Flash Patternflow** button on [patternflow.work/pattern](https://patternflow.work/pattern) and in the Play guide, which installs the images under `/flash/`; and [`/update`](https://patternflow.work/update)): the firmware images they serve and where they come from.
- **The build worker** that turns a pattern into a `.pfm` module on the community host.
- **Published firmware images.** They must not carry credentials. Three early releases did carry the maintainer's Wi-Fi credentials, which is why the release workflow now refuses an image built with `patternflow_secrets.h`. If you find one that slipped through, that is a report.

## What is a documented trust model, not a vulnerability

The device's HTTP server on the LAN has **no authentication**: anyone on the same network can call any `/api/*` route, including `POST /update`. This is deliberate and documented in [docs/rest-api.md](docs/rest-api.md#transport) — the panel is an instrument on a home or venue network, with the same posture as ArduinoOTA's default. `PF_WEBUPDATE_ALWAYS_ARMED 0` is the one lever that narrows it. Reports that amount to "the LAN API is open" will be closed with a pointer here; reports of a way to reach that API from *outside* the LAN, or from a web page on another origin, are in scope.
The device's HTTP server on the LAN has **no authentication**: anyone on the same network can call any `/api/*` route, including `POST /update`. The same holds on the panel's own hotspot (`patternflow-xxxx`, raised when it finds no network it knows), whose password is the documented default `patternflow` until it is changed on the Wi-Fi page. This is deliberate and documented in [docs/rest-api.md](../docs/rest-api.md#transport) — the panel is an instrument on a home or venue network, with the same posture as ArduinoOTA's default. `PF_WEBUPDATE_ALWAYS_ARMED 0` is the one lever that narrows `/update`; the hotspot takes its own password, or is switched off, on the Wi-Fi page. Reports that amount to "the LAN API is open" will be closed with a pointer here; reports of a way to reach that API from *outside* the LAN, or from a web page on another origin, are in scope.

## Supported versions

Expand Down
12 changes: 11 additions & 1 deletion SUPPORT.md → .github/SUPPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,22 @@ One table for "where do I ask". Issues are for things that change this repositor
| :--- | :--- |
| Learn to build, play, make patterns for one or give it sound and MIDI | [The guide](https://patternflow.work/guide) — each step on a 3D Patternflow in the browser. A step that didn't get you through has a **Stuck here?** link, which opens an issue with that step filled in |
| Get unstuck building, soldering or flashing | [Discord → hardware-help](https://discord.com/channels/1497757947827327067/1499907910707187833) — photos and quick back-and-forth |
| Flash the DevKit for the first time, or get the panel onto Wi-Fi | [The Play guide's Flash chapter](https://patternflow.work/guide/play#flash), or [`BUILD_GUIDE.md` §8](../BUILD_GUIDE.md#8-firmware) in writing. The short version is below the table |
| Show a pattern I made, or get feedback on one | Publish it from the [Pattern Lab](https://patternflow.work/pattern-lab) to the [Community](https://community.patternflow.work/community), then [Discord → patterns](https://discord.com/channels/1497757947827327067/1499908302962819236) |
| Put my finished build on the [build map](https://patternflow.work/inside) | [Share your build](https://github.com/engmung/Patternflow/issues/new?template=share_build.yml) — or post it in Discord |
| Talk about where the project should go, or find people working on the same direction | [Discord](https://discord.gg/Vr9QtsxeTk) — the dev-log and the project channels |
| Report a bug, a wrong or missing doc, or propose a feature | [New issue](https://github.com/engmung/Patternflow/issues/new/choose) — pick the template |
| Report a security problem | [SECURITY.md](SECURITY.md) — privately, not as an issue |
| Contribute code, hardware files or docs | [CONTRIBUTING.md](CONTRIBUTING.md) |
| Contribute code, hardware files or docs | [CONTRIBUTING.md](../CONTRIBUTING.md) |

**The first flash, in short.**

1. The DevKit out of the board, on its **left** USB-C port (labelled `USB`), with a cable that carries data — a charge-only cable is the most common reason nothing shows up — in desktop Chrome or Edge. That port is for flashing and data only; the panel is always powered through `J4`, the screw terminal.
2. **Download mode, every first flash:** hold **BOOT**, tap **RST**, let go of BOOT. Then press **Flash Patternflow** (on the [Pattern tab](https://patternflow.work/pattern) under *Got the hardware?*, or in the Play guide) and pick the port (`USB JTAG/serial debug unit`).
3. **The Wi-Fi step usually does not appear** after *Installation complete!* That is expected: press **RST** once, press **Flash Patternflow** again, pick the port, choose **Connect to Wi-Fi**, and after about ten seconds of scanning type your network's name exactly (capitals count; 2.4 GHz only) and its password.
4. **If that will not take,** put the DevKit back in the board and power it: about 15 seconds after it finds no network it knows, the panel raises its own, `patternflow-xxxx` (password `patternflow`; hold **K2** to see the exact name). Not in your phone's list yet? Wait, and refresh the list. Join it (the phone will say the network has no internet, which is true; stay on it), open `http://192.168.4.1/`, and pick your network on the Wi-Fi page.

A board that already runs Patternflow is updated over Wi-Fi from its console's Update page instead — download mode erases the patterns and saved networks.

**If Discord is blocked where you live**, the community site still works for patterns and decks without it, and a bug or a documentation issue here reaches the maintainer the same day. A discussion venue that works everywhere is planned; until it exists, an issue is the fallback for a question too.

Expand Down
70 changes: 70 additions & 0 deletions .github/workflows/drift.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Drift checks

# The tree keeps some facts in two places by hand: the BOM and the build
# guide's parts table, a card on /editions and a folder under
# firmware/bundles/. Each check in web/scripts/drift/ compares one such pair
# and prints both sides when they part (docs/rfc-cleanup.md §2.4). check:ci
# runs them too, but Web CI starts only on web/ and hardware/case/. A pull
# request that edits only the BOM, a bundle or the changelog runs no web job,
# and that is the pull request a drift check is for. So this one runs on every
# pull request.
#
# PF_DRIFT_STRICT=1 turns a skip into a failure. At a desk a check skips a side
# it cannot read: a tag the clone lacks, no pdftotext, no gh login. Here every
# side can be read, so a skip means this file is missing something.
# fetch-depth: 0 brings the tags the absolute links point at, and the base
# commit check:human-lock compares with.
on:
pull_request:
push:
branches: [main]

concurrency:
group: drift-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read
issues: read

jobs:
check:
runs-on: ubuntu-latest
defaults:
run:
working-directory: web
env:
PF_DRIFT_STRICT: "1"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: web/package-lock.json

- name: Install dependencies
id: deps
run: npm ci

# check:bom-schematic reads the schematic's text layer with pdftotext,
# which the runner image does not carry.
- name: Install pdftotext
run: command -v pdftotext || { sudo apt-get update -q && sudo apt-get install -y -q poppler-utils; }

# check:roadmap asks gh for the state of each issue a roadmap node names.
- name: Drift checks
run: npm run check:drift
env:
GH_TOKEN: ${{ github.token }}

# Not a word of the maintainer's own writing changes (§2.9). It runs
# after a red drift step too, so one push shows both.
- name: Locked text
if: ${{ !cancelled() && steps.deps.outcome == 'success' && github.event_name == 'pull_request' && hashFiles('web/scripts/human-lock.ts') != '' }}
run: npm run check:human-lock
env:
PF_LOCK_BASE: ${{ github.event.pull_request.base.sha }}
7 changes: 4 additions & 3 deletions .github/workflows/web-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,17 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 22
cache: npm
cache-dependency-path: web/package-lock.json

- name: Install dependencies
run: npm ci

# Lint is a hard gate: lint errors can't reach main (warnings still pass).
# Lint is a hard gate, and a warning fails it like an error. The cleanup's
# step 3 took the site from twelve warnings to none; one more fails here.
- name: Lint
run: npm run lint
run: npm run lint -- --max-warnings=0

# `next build` type-checks only what it bundles; scripts/ and the smoke
# suites are outside that, and a type error there used to surface as a
Expand Down
Loading