Repository navigation
[DONE] 정리 2단계 PR 10 — BOM·묶음만 고친 PR 에서도 어긋남 검사와 직접 쓴 글 잠금이 돈다 - #32
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DyQnQUJ2K2X8ya4UcujAYC
Web CI starts only on web/ and hardware/case/, so a pull request that edits only the BOM or a bundle never ran check:drift. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DyQnQUJ2K2X8ya4UcujAYC
patternflow-bot
marked this pull request as ready for review
October 15, 2026 01:11
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.
ops / https://claude.ai/code/session_01DyQnQUJ2K2X8ya4UcujAYC
정리 2단계 계획서 표의 PR 10 이다. 지금까지 어긋남 검사(check:drift)는 웹 CI 안에서만 돌아서 BOM·빌드 가이드·펌웨어 묶음만 고친 PR 에서는 돌지 않았고, 직접 쓴 글 잠금(check:human-lock)은 어느 PR 에서도 돌지 않았다. 새 워크플로 하나가 모든 PR 에서 둘을 엄격하게 돌린다. 머지하면 PR 마다 "Drift checks" 줄이 하나 생기고, 어긋나거나 잠긴 글의 낱말이 바뀌면 그 줄이 빨개진다.
좋아지는 것: 무엇을 고친 PR 이든 어긋남과 직접 쓴 글 고침이 머지 전에 빨개진다 — 틀어진 채 안 들어간다
할 일
docs/investigations/2026-10-cleanup-step2-plan.md) 표의 PR 10 줄, 소견 1·2·4, D2·D5·D6, k10 과docs/rfc-cleanup.md§2.1·§2.4·§2.9·§2.11 을 읽는다fetch-depth: 0, strict), [DONE] 정리 2단계 PR 3 — BOM 이 빌드 가이드 부품표나 회로도와 어긋나면 CI 가 빨개지는 검사 둘을 단다 #28(pdftotext없으면 poppler 설치), [DONE] 정리 2단계 PR 8 — 일지·릴리스 노트·README 이야기처럼 직접 쓴 글의 낱말을 바꾼 PR 은 잠금 검사에 걸린다 #27(PF_LOCK_BASE에 base SHA).github/workflows/drift.yml(+70)actionlint로 문법을 본다typecheck,lint,doc-map을 돌린다(CSV 는 되돌린다)b5f24c5에서 successbe1c06f그대로라 이미 최신)한 일
.github/workflows/drift.yml, 이름은 "Drift checks", 작업 하나(check):pull_request(경로 거르개 없음), 그리고main으로의 push. 웹 CI 는web/**·hardware/case/**에서만 시작한다(소견 1).contents: read,issues: read.actions/checkout@v4에fetch-depth: 0: 절대 링크가 가리키는 태그(v1.0.0 부터 v3.1.0)와 잠금 검사가 견줄 base 커밋을 가져온다.web/에서npm ci(web-ci 와 같은 캐시 설정).pdftotext가 없으면poppler-utils를 깐다. check:bom-schematic 이 회로도 글자 층을 읽는 데 쓴다.npm run check:drift: 작업 전체에PF_DRIFT_STRICT=1, 이 단계에GH_TOKEN: ${{ github.token }}(k6 의gh api몫).npm run check:human-lock,PF_LOCK_BASE: ${{ github.event.pull_request.base.sha }}.web/scripts/human-lock.ts가 있을 때만 돌고, 앞의 어긋남 단계가 빨개도 돈다(!cancelled()이고npm ci가 성공했을 때). 한 번 push 로 둘 다 보이게 하려고.바뀐 줄: 1 파일, +70 −0.
증거
GitHub 에서 이 PR 의
b5f24c5로 돈 "Drift checks"(job 116190762131): 모든 단계 success. 단계 시간은 checkout 10초,npm ci2분 7초(캐시가 비어 있던 첫 판. 끝에 캐시를 저장했다), pdftotext 설치 17초, 어긋남 4초, 잠금 2초. 로그에서:웹 CI 의
check:ci에서는 회로도 비교가skipped(pdftotext 없음)로 지나가던 것(#28 로그)이 여기서 처음 실제로 비교된다.로컬(
b5f24c5, web/, 전체 이력과 태그 28개,pdftotext있음):actionlint 1.7.12 .github/workflows/drift.yml: 출력 없음, exit 0.PF_DRIFT_STRICT=1 npm run check:drift: 위와 같은 여섯 줄 passed, exit 0.PF_DRIFT_STRICT=1 PF_LOCK_BASE=$(git rev-parse origin/dev) npm run check:human-lock:no locked words changed, exit 0.npm run typecheck: exit 0.npm run lint: exit 0,✖ 12 problems (0 errors, 12 warnings)(원래 있던src/경고).git fetch --tags뒤npm run doc-map:1071 links from 214 files,0 do not resolve. 새 행 다섯은 dev 의 5단계 계획서와editions.ts것이라 이 PR 과 무관하고, 두 CSV 는git checkout으로 되돌렸다.워크플로의 각 부분이 왜 있는지, 빼거나 어긋나게 고친 판(버리는 클론·worktree 에서 돌리고 지움):
fetch-depth: 0없이:git clone --depth 1 --no-tags, strictlinks-absolutefailed, exit 1passed links-absolute, exit 0 — strict 가 없으면 태그 없는 CI 가 조용히 지나간다pdftotext가 없는 PATH, strictbom-schematicfailed, exit 1web/**·hardware/case/**)에 맞는 파일 없음 = 웹 CI 가 안 돈다. 이 워크플로의check:drift는failed bom, exit 1docs/manifesto.md한 낱말(same→very)check:human-lockchanged, exit 1PF_LOCK_BASE가 클론에 없는 커밋1번:
2번:
3번:
4번:
실행법
CI 와 같게 로컬에서:
GitHub 에서는 PR 의 Checks 탭 "Drift checks / check".
가정
.github/workflows/drift.yml하나만 만들었다.CHANGELOG.md,docs/rfc-cleanup-progress.md, doc-map CSV 는 안 고쳤다. 라벨cleanup·step-2는 포크에 없어서 달지 않았다(D7).main에서만 돈다. 포크의 dev 는 PR 로만 들어오니 PR 에서 이미 돈다.hashFiles('web/scripts/human-lock.ts')조건은 계획서 그대로 두었다. 포크 dev 에는 k8 이 이미 있지만, 원래 레포에는 hub 가 PR 을 하나씩 지어 보내니 k10 이 k8 보다 먼저 들어갈 수 있다. 그때 잠금 단계는 건너뛰고 빨개지지 않는다.PF_DRIFT_STRICT=1은 작업 전체에 두었다. 잠금 단계에서는PF_LOCK_BASE가 늘 있으니 결과가 달라지지 않지만, [DONE] 정리 2단계 PR 8 — 일지·릴리스 노트·README 이야기처럼 직접 쓴 글의 낱말을 바꾼 PR 은 잠금 검사에 걸린다 #27 이 그 단계에도 주라고 남겼다.check:voice는 넣지 않았다(D6, Q14 기본값).for another k
check:drift단계에GH_TOKEN이 있고issues: read다.gh는 ubuntu-latest 에 깔려 있다.engmung/Patternflow는 공개 레포라 포크의 토큰으로도 읽힐 것이고, k6 이 머지되면 이 워크플로가 첫 실제 실행이다(계획서 k6).check. 모든 PR 과mainpush 에서check:drift를 strict 로, PR 에서만check:human-lock을 base SHA 로 돌린다. 한 줄로: 「drift.ymlrunscheck:driftstrictly on every pull request, andcheck:human-lockagainst the pull request's base」.Changelog
Web
.github/workflows/drift.yml(Drift checks) runscheck:drifton every pull request and on push tomain; Web CI starts only onweb/andhardware/case/, so a pull request that edits only the BOM or a bundle never ran it. It fetches the tags and installspdftotextand runs withPF_DRIFT_STRICT=1, so a check that cannot read a side fails instead of skipping. On a pull request it also runscheck:human-lockagainst the base commit.Upstream
.github/workflows/drift.yml(Drift checks):npm run check:driftwithPF_DRIFT_STRICT=1on every pull request and on push to main, with full history, tags and pdftotext; on a pull request,npm run check:human-lockagainst the base SHA.actionlintclean;npm run typecheck,npm run lint(0 errors), strictnpm run check:drift(6 passed) andnpm run check:human-lockpass; a shallow clone, no pdftotext, a BOM-only edit and a locked word edit each fail it.npm run doc-map: 0 unresolved, CSVs restored.🤖 Generated with Claude Code
https://claude.ai/code/session_01DyQnQUJ2K2X8ya4UcujAYC