Repository navigation
[DONE] 정리 2단계 PR 8 — 일지·릴리스 노트·README 이야기처럼 직접 쓴 글의 낱말을 바꾼 PR 은 잠금 검사에 걸린다 - #27
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
The maintainer's writing (rfc-cleanup.md §2.9) was locked by a rule only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
…nged text Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
…lock branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
Same checks; entities are blanked rather than decoded, and the roadmap reads plain literals only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
patternflow-bot
marked this pull request as ready for review
October 15, 2026 00:58
This was referenced Oct 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
studio / https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih
정리 2단계 계획서 표의 PR 8 이다. 일지, 매니페스토, 릴리스 노트, README 의 이야기 세 절, RFC 의 Part 1, 로드맵 설명처럼 직접 쓴 글을 PR 이 한 낱말이라도 바꾸면 빨개지는 검사(check:human-lock)를 넣는다. 마크업이나 링크·그림 경로만 바꾸거나 글을 그대로 옮기면 통과한다. 머지하면 바로 돌릴 수 있고, 모든 PR 에서 돌게 하는 것은 같은 단계의 워크플로 PR(k10)이다.
좋아지는 것: 직접 쓴 글의 낱말을 바꾼 PR 은 검사에 걸린다 — 쓴 그대로 남는다
할 일
docs/investigations/2026-10-cleanup-step2-plan.md) 표의 PR 8 줄, 소견 10, D2·D5, k8 과docs/rfc-cleanup.md§2.1·§2.9·§2.11 을 읽는다web/scripts/human-lock.ts,web/scripts/lib/pr-base.ts,docs/.human-writtentypecheck,lint,check:drift,check:ci,doc-map을 돌린다(CSV 는 되돌린다)898c46f, [DONE] 정리 2단계 첫 PR — 드리프트 검사를 한 번에 돌리는 틀과, /features 목록이 기능 폴더와 어긋나면 CI 가 빨개지는 첫 검사 #25·[DONE] 정리 2단계 PR 2 — GitHub 절대 주소 링크 118개가 닿는지 보는 검사를 단다 #26·[DONE] 정리 2단계 PR 3 — BOM 이 빌드 가이드 부품표나 회로도와 어긋나면 CI 가 빨개지는 검사 둘을 단다 #28·[DONE] 정리 2단계 PR 4 — /editions 진열대가 펌웨어 묶음·이미지 폴더·릴리스 스크립트와 어긋나면 CI 가 빨개지는 검사 #29 까지)c847a92에서check·build모두 success. [DONE] 정리 2단계 PR 4 — /editions 진열대가 펌웨어 묶음·이미지 폴더·릴리스 스크립트와 어긋나면 CI 가 빨개지는 검사 #29 를 merge 한fd0d23e는 로컬 검사를 다시 돌렸다한 일
web/scripts/human-lock.ts(npm run check:human-lock, 이름은 [DONE] 정리 2단계 첫 PR — 드리프트 검사를 한 번에 돌리는 틀과, /features 목록이 기능 폴더와 어긋나면 CI 가 빨개지는 첫 검사 #25 가 package.json 에 넣어 두었다): 소견 10 의 자리를 잠근다. 일지 폴더의 모든 파일,docs/manifesto.md,docs/releases/*.md, README 의 세 절(##제목에서 다음##까지),docs/rfc-*.md의 Part 1(다음 같은 단계 제목까지), 로드맵의detail·detailKo(TypeScript 파서로 읽어 노드 id 로 짝짓는다), 그리고docs/.human-written의 경로. 기준 판과 작업 트리 판을 평문으로 견준다. 평문은 마크다운·MDX 문법(제목·인용·목록 표시, 강조·코드 표시, 펜스, 표 파이프, 가로줄, 주석, 엔티티, 태그, 링크 대상, 맨 URL, 프런트매터 키)과 공백을 모두 뺀 글자다. 문법을 지우지 않고 같은 길이의 빈칸으로 바꿔서 글자마다 원래 자리를 기억하고, 바뀐 곳을파일:줄과 함께 원문으로 보여 준다(«» 가 바뀐 부분).web/scripts/lib/pr-base.ts: D5 의 기준 찾기(PF_LOCK_BASE→origin/dev와의 merge-base →origin/main→ 없으면 skip)와 그 뒤로 바뀐 파일 목록, 커밋 시점 파일 읽기. k9(voice-lint)도 같은 기준을 쓰게 따로 뺐다.docs/.human-written: 주석 한 줄, 경로 없음(답 5).바뀐 줄: 3 파일, +293 −0.
증거
지금 브랜치(
fd0d23e, web/):npm run check:human-lock: exit 0npm run typecheck: exit 0.npm run lint: exit 0,✖ 12 problems (0 errors, 12 warnings)— 모두 원래 있던src/의 경고이고 새 파일에는 없다.npm run check:drift:passed bom,passed bom-schematic,passed editions,passed features,passed links-absolute, exit 0.npm run check:ci([DONE] 정리 2단계 PR 3 — BOM 이 빌드 가이드 부품표나 회로도와 어긋나면 CI 가 빨개지는 검사 둘을 단다 #28·[DONE] 정리 2단계 PR 4 — /editions 진열대가 펌웨어 묶음·이미지 폴더·릴리스 스크립트와 어긋나면 CI 가 빨개지는 검사 #29 를 merge 하기 전5b9e13d에서. 그 뒤 들어온 것은 drift 검사 셋이고 위에서 돌렸다): exit 0,Test Files 35 passed (35),Tests 478 passed (478).c847a92에서build·check두 작업 모두 success.git fetch --tags뒤npm run doc-map:1070 links from 213 files → docs/investigations/2026-10-doc-map.csv,0 do not resolve. 새 행 넷은 dev 의 5단계 계획서 것이라 이 PR 과 무관하고, 두 CSV 는git checkout으로 되돌렸다.일부러 고친 판(버리는 worktree 에서 고치고 돌린 뒤 되돌림, 기준은 dev 의 merge-base):
git mv로 새 이름에, 그림 경로도 바꿈docs/story.md로 옮기고 안내 한 줄.human-written에 디렉터리 하나를 더하고 그 아래 파일 한 낱말PF_LOCK_BASE)PF_LOCK_BASE가 없는 커밋PF_DRIFT_STRICT=1300줄로 줄이기 전 판과 줄인 판으로 열다섯 가지를 다 돌려, 출력이 base SHA 말고는 한 줄도 다르지 않은 것을
diff로 봤다.1번:
5번:
7번:
11번:
13·14번:
실행법
가정
CHANGELOG.md,docs/rfc-cleanup-progress.md, doc-map CSV 는 안 고쳤다. 라벨cleanup·step-2는 포크에 없어서 달지 않았다.check:ci에는 넣지 않았다. 계획서대로 k10 의 워크플로가 PR 에서PF_LOCK_BASE를 넘겨 돌린다. 드리프트 러너 밖에서npm run으로 도니 skip 은 k1 의 75 가 아니라 0 으로 끝낸다(PF_DRIFT_STRICT=1이면 1, D2 그대로).PF_LOCK_BASE가 이 클론에 없는 커밋이면 skip 이 아니라 실패로 했다. 값이 틀린 것이라서.&↔&를 바꾸면 걸린다. 드물고 안전한 쪽). 로드맵 문자열은 평범한 리터럴만 읽는다(지금 166개 모두 그렇다). 리터럴이 아니게 바뀌면 removed 로 걸린다.alt·title·aria-label값은 낱말이라 남긴다(마크다운 그림의 alt 와 맞춘다). 프런트매터 값은 글로 세고, 경로·URL 값만 뺀다. 그래서draft·date를 바꿔도 걸린다. 체크박스[ ]/[x]는 했는지 안 했는지의 기록이라 글로 남긴다. 밑줄은 낱말 가장자리에 붙은 것만 강조로 보고 지운다(preset_origin.h같은 이름은 그대로).docs/story.md) 다음 PR 부터는 잠기지 않는다. 그건 창작자가docs/.human-written에 더할 일로 남긴다.##까지라### Sponsor까지 잠긴다.docs/아래rfc-*.md중 「Part 1」 제목이 있는 것이다. 진행 기록(-progress.md)은 Part 1 이 없어 잠길 것이 없다. Part 1 의 끝은 다음 같은 단계 제목이다.status,issues를 바꾸면 통과한다(k14 가 고칠 수 있는 것).docs/.human-written: 기준 판과 지금 판의 목록을 합쳐 잠근다. 목록에서 경로를 빼면 실패하게 했다. 계획서에 없는 동작이지만, 빼는 것만으로 잠금을 피해 갈 수 있어서다(Q13 기본값대로 창작자는 빨간 줄 위로 머지하면 된다). 디렉터리 경로는 그 아래를 다 잠근다.for another k
import { findBase, changedSince, readAt, readNow, git, ROOT } from "./lib/pr-base".findBase()는{ sha, from }이나{ sha: null, why, fatal }을 돌려준다(fatal은PF_LOCK_BASE가 틀렸을 때). 더한 줄은git(["diff", "-U0", sha])로 읽으면 된다.PF_LOCK_BASE: ${{ github.event.pull_request.base.sha }}와fetch-depth: 0이 있어야 기준을 읽는다. 그 단계에도PF_DRIFT_STRICT=1을 주면 기준을 못 찾을 때 통과하지 않는다.npm run check:human-lock, 설명 한 줄은 「잠긴 글의 낱말이 바뀌면 실패, 마크업·경로·그대로 옮김은 통과」.Changelog
Web
check:human-lockfails a pull request that changes a word of the maintainer's own writing. The journal, the manifesto, the release notes, the README's three story sections, Part 1 of each RFC and the roadmap'sdetailanddetailKostrings are compared with the pull request's base as plain text, with the Markdown, MDX and whitespace taken out. Markup, link paths and image paths can change; a typo fix cannot. A locked file moved word for word passes, and the run says the move needs the maintainer's approval.docs/.human-writtentakes more paths, one per line.Upstream
check:human-lock(web/scripts/human-lock.ts): a PR that changes a word of the text rfc-cleanup.md section 2.9 locks fails it; markup, link and image path edits and verbatim moves pass.web/scripts/lib/pr-base.tsfinds the PR base;docs/.human-writtenstarts empty.npm run typecheck,npm run lint(0 errors),npm run check:ci,npm run check:human-lock(passes; seven throwaway word edits and a deletion fail it, markup-only edits and moves pass),npm run doc-map(1070 links, 0 unresolved, CSVs restored).🤖 Generated with Claude Code
https://claude.ai/code/session_01YDk7JRDmTHg8hV22rdfCih