# 도르래(pulley) 설계서 — 구현자용

설계·검증: Claude (coordinator). 구현: 이 문서를 받은 worker.
이 문서가 정한 것은 그대로 따른다. 정하지 않은 세부(색 미세조정, 작은 부품의 정확한 크기)는 기존 그림(`pages/differential/figure/`, `pages/gears/figure/build.mjs`)의 관례를 따른다.
**설계를 바꿔야 할 것 같으면 바꾸지 말고 `orca orchestration ask`로 묻는다.** 숫자를 조정했으면 worker_done 요약에 적는다.

## 0. 규칙 출처(먼저 읽기)
- `docs/concept.md` (문서·그림 규칙. 역사·종류·출처·formula 절 없음)
- `.agents/skills/isowiki-entry/SKILL.md`, `docs/knowhow.md`(특히 "그림 안 라벨", "휴대폰", "판과 모서리 문구")
- 코드 본보기: `pages/differential/figure/{model.mjs,scene.mjs,index.mjs,live.js}` 구조를 그대로 따른다.

## 1. 한 문장
같은 5 kg 추를 들 때, 아랫 블록을 받치는 줄 가닥이 1→4개로 늘면 손의 힘은 1/n로 줄고 손이 당기는 길이는 n배로 는다.

독자가 하는 일: 가닥 수 버튼(1·2·3·4)을 고르고, 손잡이를 끌어 내리거나 "당기기" 버튼을 누른다. 추가 올라가고, 판독값에 힘과 오른 높이가 나온다. 아무도 안 만지면 투어가 1→4가닥을 차례로 당겼다 놓는다.

## 2. 파일
```
pages/pulley/figure/model.mjs   순수 모형(브라우저에도 인라인됨: import 없이, export만)
pages/pulley/figure/scene.mjs   makeScene(k, G, M, P): 정적 부품 문자열 + 움직이는 부품(블록·줄·추·손잡이)을 상태로부터 그리는 함수
pages/pulley/figure/live.js     브라우저 스크립트(차동 장치 live.js 구조)
pages/pulley/figure/index.mjs   build({ id, fig }) → { html, live }
pages/pulley/index.md           본문(§8)
```
`index.mjs`는 differential의 index.mjs처럼 scene.mjs와 model.mjs 소스를 읽어 live에 인라인한다. live 스크립트는 `document.getElementById(id)` 안만 건드린다.

## 3. 모형 (model.mjs) — 단위 mm, N
```js
export const MASS = 5;                 // kg, 추
export const GRAV = 9.81;
export const LOAD = MASS * GRAV;       // 49.05 N
export const PULL_MAX = 120;           // 손잡이 최대 이동 mm
export const R = 24;                   // 도르래 바퀴: 줄 중심이 지나는 반지름 (지름 48)
export const ROPE = 5;                 // 줄 지름 (바퀴 지름/줄 지름 ≈ 10: 세 겹 꼰 섬유 줄 기준)
export const RL = 16;                  // 안내 도르래 반지름(줄 중심)
export const ZU = 380;                 // 윗 블록 핀 높이
export const ZL0 = 160;                // 아랫 블록 핀 높이(추가 받침 위에 있을 때)
export const Y_FRONT = 11, Y_BACK = -11; // 앞 바퀴(A, C)와 뒤 바퀴(B, D)의 중심 평면 y (1b: ±7 → ±11, 가닥이 화면에서 갈라져 보이게)
export const lift = (pull, n) => pull / n;          // 추가 오른 높이
export const force = (n) => LOAD / n;                // 이상적(마찰 없음) 손의 힘
// 가닥 k(줄 끝 고리에서부터 1, 2, …)와 k+1 사이의 바퀴는 자기 블록에 대해 k·lift 만큼 줄을 보내므로 k·lift/R 라디안 돈다.
export const turnOf = (k, liftMm, radius = R) => (k * liftMm) / radius;
```
모든 판독값, 추·아랫 블록 위치, 바퀴 회전각, 손잡이 위치는 이 모형에서만 나온다.

## 4. 세계와 카메라
- 1 단위 = 1 mm. x 오른쪽, y 앞(관찰자 쪽), z 위. `depthOf`가 클수록 관찰자에 가깝다.
- 카드 600 × 460. `k.fitProjection(points, 600, 460, { pad: 30, azimuth: 62, elevation: 24 })`. points: 판의 꼭짓점, 두 기둥 꼭대기, 손잡이 최저점(z 80).
  - 방위각 62°: 바퀴 면(y에 수직)이 잘 보인다. 화면 x = 0.883x − 0.469y.

### 고정 부품 (정적, scene에서 한 번 그린다)
| 부품 | 형상 |
|---|---|
| 받침판 | `basePlate(P, {x:-150,y:-90,w:300,d:180,r:8}, { label, strip })` (lib/common.mjs). label 판은 오른쪽 앞, strip(눈금자)은 앞쪽 가장자리 |
| 기둥 2 | 단면 16×16 사각 기둥: 왼쪽 x −126…−110, 오른쪽 x 110…126, y −8…8, z 0…446. 바닥에 30×30×4 받침 플랜지 + 모서리 나사 점 4 |
| 가로대 | x −126…126, y −8…8, z 430…446. 기둥과 만나는 곳에 삼각 보강판(앞·뒤) |
| 매다는 고리 | 가로대 밑면(z 430) 중앙에서 내려오는 고리 볼트(r 3, z 418…430) + 윗 블록 꼭대기 고리(z ZU+36…ZU+42)와 맞물린 링 |
| 윗 블록 | 핀 중심 (0, *, ZU). §5 블록 구조 |
| 안내 도르래 L | 중심 (80, 11, ZU+R−RL) = (80,11,388), 축 y, 줄 반지름 RL. 바퀴는 y 8…14. 오른쪽 기둥 안쪽 면(x 110)에서 x 74까지 나온 갈래 받침판 두 장(뒤 y 4…7, 앞 y 15…18, z 372…404, 바퀴 쪽 끝 둥글게), y축 핀 r 3 + 앞뒤 너트 |
| 추 받침 | 고무 받침 원판 r 56, z 0…10, 중심 (0,0) |
| 높이 자 | (−72, 34)에 선 띠: 폭 8, 두께 2, z 0…240, 눈금 10 mm마다(5번째 굵게) — 관찰자 쪽 면 |
| 당김 자 | 오른쪽 기둥 앞면(y 8) z 60…220에 눈금 띠, 10 mm마다(5번째 굵게) |

### 움직이는 부품 (상태 { n, pull }로 매 프레임 그린다)
| 부품 | 형상 / 위치 |
|---|---|
| 아랫 블록 | 핀 중심 (0, *, ZL), ZL = ZL0 + lift(pull, n). §5 블록 구조 |
| 걸이 막대 | 아랫 블록 바닥 고리(ZL−40)에서 추 윗면까지 r 3 막대 |
| 추 | 원기둥 r 50, 높이 80, 아랫면 z = ZL − 150 (휴지 때 10, 받침 위). 윗면 테두리 홈, 옆면에 "5 kg" (`k.faceTextSvg`) |
| 손잡이 | 줄 끝의 나무 토글: y축 원기둥 r 6, y −7…29, 중심 (96, 11, ZH), ZH = 200 − pull. 줄이 묶인 곳에 감은 매듭(링 2개) |
| 바퀴 A, B, C, D, L | §5. 회전각은 §6 |
| 줄 | §6 |

## 5. 블록 구조 (윗·아랫 같음)
뚜껑판으로 덮은 실제 블록 대신, 바퀴가 보이도록 **띠(strap) 세 장**으로 만든 열린 블록이다(본문 "이 그림에 대하여"에 적는다).
- 핀: y축 원기둥 r 4, y −20…20. 양 끝 너트 r 6(6각처럼 보이게 steps 6), 두께 2.
- 바퀴 2개: 앞 바퀴(윗=A, 아랫=C) y 8…14, 뒤 바퀴(윗=B, 아랫=D) y −14…−8. 바퀴와 띠 사이 와셔(r 6, 두께 1).
  - 옆모습(meridian, s는 y 방향): 테 r 28 (두께 1) → 홈 바닥 r 21 (가운데) → 테 r 28. `G.lathe`로 축 y의 프레임(`G.frameOf([0,y0,z],[0,1,0],[1,0,0],[0,0,1])`)에서 만든다.
  - 바퀴 면에 덜어낸 구멍 4개(r 4, 중심 반지름 13) + 허브 r 7 링. 구멍과 허브 표시는 회전각을 따라 매 프레임 다시 그린다(회전이 눈에 보이는 유일한 표시).
- 띠 세 장: 폭 x −6…6, 두께 3: 뒤 y −18…−15, 가운데 y −1.5…1.5, 앞 y 15…18. z는 핀 ±34. 위아래 끝은 둥글게(r 6). 핀 자리에 둥근 머리.
- 띠를 잇는 아래·위 볼트 2개(y축, r 2) — 띠 위 끝 z+30, 아래 끝 z−30.
- 줄 끝 고리(becket): 윗 블록은 가운데 띠 아래 끝 밑(0, 0, ZU−40)에 고리 r 4. 아랫 블록은 가운데 띠 위 끝 위(0, 0, ZL+40)에 고리 r 4. 고리는 늘 둘 다 그린다(쓰지 않는 상태도).
- 윗 블록 꼭대기: 링 (0,0,ZU+40). 아랫 블록 바닥: 링 (0,0,ZL−40) → 걸이 막대.

## 6. 줄 경로 (가장 중요)
줄은 손잡이에서 시작해 마지막에 줄 끝 고리에서 끝난다. 아래는 고리에서 시작하는 순서(가닥 번호 k가 1부터).
점 표기: `X·left` = 바퀴 X의 중심에서 x −R, 같은 z. `X·right` = x +R. `X·top`, `X·bottom` = z ±R. y는 그 바퀴의 평면.

| n | 고리 | 경로 |
|---|---|---|
| 1 | 아랫 블록 (0,0,ZL+40) | → A·left (가닥 1, 받침) → A 위로 4분의 1 감김 → A·top |
| 2 | 윗 블록 (0,0,ZU−40) | → C·right (가닥 1, 받침) → C 아래로 반 바퀴 → C·left → A·left (가닥 2, 받침) → A·top |
| 3 | 아랫 블록 (0,0,ZL+40) | → B·left (가닥 1, 받침) → B 위로 반 바퀴 → B·right → C·right (가닥 2, 받침; y −11→+11) → C 아래 반 바퀴 → C·left → A·left (가닥 3, 받침) → A·top |
| 4 | 윗 블록 (0,0,ZU−40) | → D·right (가닥 1, 받침) → D 아래 반 바퀴 → D·left → B·left (가닥 2, 받침) → B 위 반 바퀴 → B·right → C·right (가닥 3, 받침; y −11→+11) → C 아래 반 바퀴 → C·left → A·left (가닥 4, 받침) → A·top |

모든 n에서 이어서: A·top (0,11,ZU+R) → 수평으로 +x → L·top (80,11,388+RL) → L 위로 4분의 1 감김 → L·right (96,11,388) → 수직으로 손잡이 (96,7,ZH).
- 가닥 끝점은 정확히 접점이 아니라 바퀴 중심 ±R로 둔다(가닥이 약간 기울어도 된다. 접점 계산 불필요).
- **줄은 `kit/tube.mjs`로 그린다(1c).** 선 두 겹(stroke)으로 그리면 끝이 화면에 직각으로 잘리고, 음영이 줄 방향을 따르지 않고, 가닥과 감김의 이음이 꺾여 어색하다.
  - 상태 { n, pull }마다 줄 전체를 **한 경로**(3D 점 목록)로 만든다: 줄 끝 고리 → 가닥 1 → 감김 → 가닥 2 → … → A 위 → 안내 도르래 L 감김 → 손잡이. 감김은 `G.arcPoints`(바퀴 평면, 반지름 R 또는 RL, 8°마다 한 점).
  - `tubePieces(points, M.ROPE / 2, P, { maxLength: 12, breaks, caps: [true, true], rings: { pitch: 4, twist: 1.4, tone: "lo" } })`. `breaks`는 각 가닥과 감김의 경계 호길이(조각이 경계를 넘지 않게). 비틀린 `rings`가 세 겹 꼰 줄의 결을 만든다.
  - **받침 가닥(아랫 블록을 받치는 n개)** 조각은 `tubeSvg`가 만든 `<g class="tb">`에 `data-load`를 달고, 페이지 CSS로 그 `.tb-body`를 놋쇠(differential의 `color-mix(…,#d9963f)` 계열)로 칠한다. 나머지 줄은 kit 기본 `.tb-body`(종이색 몸 + 빛·그늘 띠). 가닥 수가 곧 놋쇠 줄 수다.
  - 조각의 층(§7)은 `piece.mid`의 y로: y ≤ −6 → 4층(뒤 평면), −6 < y < 6 → 6층(평면을 건너는 가닥), y ≥ 6 → 7층(앞 평면). 같은 층 안에서는 `G.dot3(piece.mid, G.viewOf(P))` 오름차순. 손 쪽 수평·수직 줄은 9층.
  - 바퀴 위 감김: 줄 바깥 반지름(R+2.5)이 테(28)보다 작으므로 옆에서는 가까운 테가 줄을 가리고, 위에서 내려다보면 윗 바퀴(A, B, L)의 위쪽 감김이 두 테 사이 홈에 보인다. 감김 조각은 그 바퀴를 그린 직후에 그리고, 이어서 그 바퀴의 **가까운 테 링**(r 26.5–28, 두께 1, 관찰자 쪽 면)을 한 번 더 그려 줄이 홈에 묻히게 한다. 아랫 바퀴(C, D)도 같은 순서(바퀴 → 감김 → 가까운 테).
  - 브라우저: differential이 lathe.mjs를 인라인하듯 `tube.mjs`를 live 스크립트에 인라인해 상태가 바뀌면 줄을 다시 만든다(프레임당 조각 약 100개).
- 줄 끝: 고리 쪽 끝은 고리 원에, 손잡이 쪽 끝은 손잡이 매듭에 닿는다.

### 바퀴 회전
가닥 k와 k+1 사이의 바퀴는 `M.turnOf(k, lift)`만큼 돈다(각자 블록 기준). 방향: 줄이 바퀴 위를 지나 손 쪽으로 가면 그 쪽으로 돈다 — 줄 이동 방향과 바퀴 가장자리 이동 방향이 같게. 안내 도르래 L은 `pull / RL` (= n·lift / RL). 쓰이지 않는 바퀴는 돌지 않는다.
→ 손에 가까운 바퀴일수록 빨리 돈다(본문 소재).

## 7. 그리는 순서 (뒤 → 앞)
방위각 62°에서 y가 큰 것이 앞, x가 큰 것도 앞. 층별로 그린다:
1. 받침판, 추 받침, 왼쪽 기둥, 높이 자, 가로대(위는 아무것도 겹치지 않음), 매다는 고리
2. 뒤 띠(윗·아랫), 핀의 뒤 너트
3. 뒤 바퀴 B, D (+ 구멍 표시), 그 위의 줄 원호
4. 뒤 평면 가닥: 양 끝 y가 −11 또는 0→−11 인 가닥 (n=3 가닥 1, n=4 가닥 1·2)
5. 가운데 띠(윗·아랫), 줄 끝 고리 두 개, 블록 위·아래 링, 걸이 막대
6. 평면을 건너는 가닥: 한 끝이 y 0 또는 −11이고 다른 끝이 +11 (n=1 가닥 1, n=2 가닥 1, n=3 가닥 2, n=4 가닥 3)
7. 앞 바퀴 A, C (+ 구멍 표시), 그 위의 줄 원호, 앞 평면 가닥(양 끝 y=+11)
8. 앞 띠, 핀의 앞 너트
9. 추(걸이 막대 아래), 안내 도르래 받침판 뒤 장 → L → L 위 줄 → 받침판 앞 장 → 손 쪽 수평·수직 줄 → 손잡이
10. 오른쪽 기둥(+ 당김 자). 손잡이 끝(y −11)이 기둥 뒤로 일부 숨는 것은 맞다.
11. 라벨(§9)

추는 아랫 블록보다 아래에 있어 겹치지 않는다. 겹치는 곳이 생기면 `k.depthOf`로 확인하고, 이 표와 다르게 해야 하면 ask로 묻는다.

## 8. 본문 (index.md)
frontmatter: title 도르래, en Pulley, part 1, description(80–120자), lead(한 문장: 무엇을 위한 것인가), card, related [lever, gears, hydraulic-jack, screw], revisions(마지막).
절(`## `): 왜 필요한가 / 어떻게 움직이나 / 가닥 수에 따라 / 바퀴가 도는 빠르기 / 왜 이렇게 생겼나 / 복합 도르래, 체인 호이스트, 평형추 / 이 그림에 대하여.
- "복합 도르래, 체인 호이스트, 평형추" 절(『도구와 기계의 원리』의 도르래 장이 이 셋을 짧게 소개한다. 각각 두세 문장):
  - 복합 도르래: 고정 도르래와 움직 도르래를 묶은 것. 이 그림의 장치가 복합 도르래다. 크레인의 갈고리 블록이 이렇게 생겼고, 정약용의 거중기도 위아래 도르래 4개씩의 복합 도르래다(사실 11, 12).
  - 체인 호이스트: 줄 대신 사슬을 쓰는 도르래. 그중 차동 도르래는 반지름이 조금 다른 두 바퀴를 한 축에 붙이고 끝없는 사슬을 건다. 두 반지름 차이가 작을수록 적은 힘으로 들고, 손을 놓아도 짐이 내려가지 않는다(사실 13). 사슬은 "그림에 없는" 장치이므로 그림 라벨과 낱말을 맞출 필요는 없지만, 고정 도르래·움직 도르래 낱말은 그림과 같게 쓴다.
  - 평형추: 고정 도르래 한쪽에 짐을, 다른 쪽에 무거운 추를 걸면 두 무게의 차이만큼만 들면 된다. 엘리베이터가 이 방식이다(사실 14, 16).
각 절의 사실과 숫자는 §11 "사실표"에 있는 것만 쓴다. 사실표에 없는 사실은 쓰지 않는다.
쉬운 문장, 그림 라벨과 같은 낱말. 수식 블록 없음. 손으로 따라 할 산수(49 ÷ 4 ≈ 12)는 된다.
되돌림 링크: `pages/hydraulic-jack/index.md`의 related에 pulley를 넣고 본문 한 문장에서 [[pulley|도르래]]로 링크한다(힘과 거리를 맞바꾸는 같은 원리). `pages/gears/index.md`는 이미 related에 pulley가 있다.
`build.mjs` LABELS에 related 키 중 없는 것이 있으면 추가.

## 9. 판(plate)
- fig: 인자로. title "도르래".
- hint: "끌어 내려 당기기 · 버튼으로 가닥 수"
- readout 예: "4가닥 · 12 N · 추 ↑3.0 cm" (휴대폰 25자 안쪽). 힘은 정수 N, 높이는 소수 한 자리 cm.
- keys: [{ mark: "lit", label: "아랫 블록을 받치는 줄: 가닥마다 같은 힘" }]
- caption: 모형값 요약(5 kg 추, 바퀴 지름 48 mm, 줄 5 mm, 마찰 없음, 손잡이 12 cm).
- controls(`lib/controls.mjs`): 그룹 "가닥" 버튼 1·2·3·4, 그룹 "손" 버튼 "당기기"/"놓기".
- 그림 안 라벨(knowhow "그림 안 라벨" 방식: 점 → 꺾인 지시선 → 카드 좌우 여백 글자, `free: "end"`): 윗 블록 · 아랫 블록 · 줄 끝 고리 · 안내 도르래 · 손잡이 · 추. 움직이는 부품의 앵커는 매 프레임 따라간다. 줄 끝 고리 라벨은 현재 n에서 쓰는 고리를 가리킨다.

## 10. 움직임 (live.js)
- 상태: n(1–4), pull(0–120), 목표 pull. pull은 지수 추종(시정수 ~0.35 s)으로 목표를 따라간다.
- 끌기: 무대에서 손가락/마우스를 누른 채 아래로 끌면 목표 pull = 시작값 + 끈 거리(화면 → 세계 z 환산). 8 px 넘게 끌 때만(휴대폰 세로 스크롤 유지, knowhow "휴대폰"). 놓으면 그 자리에 머문다.
- 버튼 "당기기" = 목표 120, "놓기" = 0. 가닥 버튼: pull > 0이면 먼저 0으로 내린 뒤(목표 0, 도착하면) n을 바꾼다. n이 바뀔 때 줄은 0.25 s 동안 이전 경로를 흐리게, 새 경로를 진하게(투명도 교차).
- 투어(손대지 않으면): n=1 당기기 → 1 s 멈춤 → 놓기 → n=2 … n=4 → 반복. 사용자가 조작하면 멈추고, 8 s 동안 조작이 없으면 다시 시작.
- 화면 밖이면 멈춤(IntersectionObserver), prefers-reduced-motion이면 투어 없음·즉시 이동.
- 버튼 aria-pressed를 투어 중에도 맞춘다.
- 판독값과 라벨 앵커는 같은 프레임에서 갱신.

## 11. 사실표 (본문에 쓸 수 있는 사실은 이것뿐. 출처는 본문에 싣지 않는다)
1. 고정 도르래: 축이 고정된 도르래. 줄을 당기는 힘의 크기는 같고 방향만 바꾼다.
2. 움직 도르래: 축이 짐과 함께 움직인다. 한 줄의 두 가닥이 받치므로 절반의 힘으로 들지만, 줄은 두 배 길이로 당긴다.
3. 이상적인 힘의 배율 = 움직이는 블록을 받치는(그 블록에 묶이거나 그 블록의 바퀴를 지나는) 줄 가닥 수.
4. 당긴 줄 길이 = 가닥 수 × 짐이 오른 높이. 힘이 줄어든 만큼 거리가 는다(일은 같다).
5. 방향만 바꾸는 도르래(이 그림의 안내 도르래)를 더 달아도 배율은 늘지 않는다.
6. 줄 끝을 움직이는 블록에 묶으면 가닥이 하나 더 생긴다(2가닥 → 3가닥). 그래서 줄 끝이 아랫 블록이면 홀수, 윗 블록이면 짝수 가닥.
7. 한 블록의 바퀴들은 서로 다른 빠르기로 돈다. 손 쪽(당기는 줄 쪽) 바퀴가 가장 빨리 돌고 가장 빨리 닳는다.
8. 바퀴 둘레의 홈은 줄이 바퀴에서 벗어나지 않게 잡아 준다.
9. 실제 도르래는 바퀴마다 마찰로 힘을 조금씩 잃는다. 강철 줄 4가닥 도르래의 실제 배율은 4가 아니라, 볼·롤러 베어링이면 약 3.8, 청동 축받이(부시)면 약 3.6이다. 섬유 줄과 작은 바퀴는 더 잃는다(바퀴 하나에 80–90% 정도만 전함).
10. 사람이 줄을 계속 당기며 쓰기 알맞은 힘은 100 N 안팎이다(움직이기 시작할 때 200 N 정도). — 그림의 5 kg 추(49 N)와 비교하는 데 쓸 수 있다.
11. 크레인은 위에 고정 블록, 아래에 갈고리(훅)가 달린 블록을 쓴다. 줄 끝을 묶는 고리를 베켓(becket)이라 한다 → 본문에서는 "줄 끝 고리"로 쓰고 처음 한 번 괄호로 푼다.
12. 거중기: 정약용이 『기중도설』에서 고안한 복합 도르래. 위에 도르래 4개, 아래 4개. 수원 화성(1794–1796년 공사)에 쓰였다. 들어 올린 무게 숫자는 자료마다 달라 쓰지 않는다.
13. 차동 도르래(체인 블록의 한 종류): 반지름이 조금 다른 두 바퀴를 한 축에 붙이고 끝없는 사슬을 건다. 두 반지름 차이가 작을수록 배율이 크고, 손을 놓아도 짐이 내려가지 않는다. 1854년 웨스턴이 만들었다.
14. 엘리베이터: 홈 파인 구동 바퀴가 마찰로 강철 줄을 잡아 움직인다. 줄 반대편의 균형추는 보통 칸 무게에 정원 무게의 40–50%를 더한 무게라서, 모터가 들 무게를 줄인다.
16. 평형추의 원리(사실 1과 14에서 나온 설명): 고정 도르래는 힘의 방향만 바꾸므로, 줄 양 끝에 짐과 평형추를 걸면 양쪽 무게가 서로 맞서고 모터나 사람은 그 차이만 움직이면 된다. 엘리베이터 균형추가 칸 무게에 정원 무게의 40–50%를 더한 무게인 것도 그래서다.
17. 낱말: "체인 호이스트"(사슬 도르래). 차동 도르래는 그 한 종류로 소개하고, 오늘날 체인 호이스트가 모두 차동 도르래라고 쓰지 않는다(확인 못 함).
15. 낱말: 고정 도르래, 움직 도르래, 복합 도르래(여러 도르래를 묶은 것), 도르래 바퀴는 "홈이 파인 바퀴". 블록 = 바퀴들을 한 축에 담은 틀.

## 12. 받아들임 기준 (worker가 직접 돌려 확인)
1. `npm run preview -- pulley` 성공 → `out/pulley-dark.html`, `out/pulley-light.html`
2. `CHROME_PATH=/usr/bin/google-chrome-stable npm run check -- pulley`: line ends 0 (두 테마)
3. `npm run build` 성공, 콘솔 오류 없음
4. `npm run check:provenance` 통과(§13 revision)
5. 각 단계 끝에 coordinator에게 `orca orchestration send`로 progress 보고(아래 dispatch 지시)

## 13. revision (손으로)
`pages/pulley/index.md`와 되돌림 링크를 건 페이지의 revisions 끝에 하나씩:
```yaml
  - date: 2026-10-14
    target: [figure, article]      # 되돌림 링크만 건 페이지는 [article]
    model: deepseek-v4.1-flash
    modelId: <pi 세션 로그(~/.pi/agent/sessions/…pulley…/*.jsonl)의 model_change.modelId>
    harness: pi 1.1.0 (orca orchestration)
    effort: null
    skills: [isowiki-entry@<git rev-parse HEAD:.agents/skills/isowiki-entry>, anatomy@<git rev-parse HEAD:.agents/skills/anatomy>]
    session: <pi 세션 ID>
    note: "도르래 문서 구현(설계: claude-opus-5-5, 설계서 out/pulley/design.md). <무엇을 했는지 한 줄>"
```
