user_brief 작업 이력 (archive)
user_brief 작업 이력입니다. 기존 루트
HANDOFF.md의 완료된 작업(M1~M5·S6 로컬)과 보류·역사 참고 섹션을 위치만 옮긴 것(내용 보존)입니다.
cody-rules (2026-08-04 완료 · 2026-08-05 HANDOFF NOW 에서 원문 cut 이관)
🆕cody-rules [코디] 26.8.4 신규 — 코디 지침·규칙 유지보수(지속 과제). 세션릴레이 미발동 근본원인 = 규칙이 아니라 신호 부재(218세션 실측: 임계 초과 162건 중 릴레이 22건, 140건 미실행). 조치 = tools/ctxmeter가 컨텍스트 숫자의 단일 출처 — UserPromptSubmit 훅이 매 턴 코디에 [컨텍스트] N%를 주입하고 50%(=500k토큰) 넘으면 릴레이 지시문까지 낸다(실동작 확인됨). ⚠statusLine은 CLI 전용이라 VS Code 확장 UI엔 안 뜬다 → 페페 지시로 제거, 페페가 숫자 보는 경로 = 코디가 답변 끝에 한 줄 적기(규칙화). ccusage 제거(페페 지시 — Opus 5를 200k로 계산, 같은 입력에 60%·301% 오락가락) · autocompact override 제거(릴레이와 같은 50%에서 다퉈 압축이 이기면 세션이 안 넘어감). 규칙 코퍼스 = 항상로드 93.7KB→36.1KB(61%↓), tooling.md·workflow.md는 조건부 전환(삭제 아님·원자규칙만 CLAUDE.md로), 중복 제거(시드체인 3곳·작업전3단계 5곳·규칙표 3곳·cp949 2곳), 🔴pfs 운영배포 모순 해소(전역은 "지시문=승인"인데 pfs는 "채팅 직접입력만" — 전역에 예외 명시). 정보손실 33항목 전수 대조 0. 🔴실장애 복구 = HANDOFF 캡 60자 초과로 빌드 342회 연속 실패(14시간 파이프라인 정지, 로그에만 남아 무인지) → 완료건 5건 archive 이관 + 실패 전환 시 텔레그램 알림 신설. ⏳페페 몫 = 제안 승인(BRIEF 캡 하드실패→자동절단+배너 전환). 훅은 실동작 확인 완료. → devplan cody-rules.html · projects/user_brief/session-2026-08-04-cody-rules-refactor.md
완료된 작업 (M1 — 커밋 5c0bb06)
notion_props.py분리 +export_notion.py리팩터(출력 동일성 정적 증명: 트래커 .md 바이트 동일).build_db.py: 트래커 JSON →tasks89행. 검증 통과(COUNT 89·DISTINCT id 89·빈 task 0·status⊆허용·phase_order 0~3+NULL 3건·영문 13컬럼).- Evidence 스파이크:
report/생성, sqlite 소스 복사,index.mdDataTable 1개.npm run build성공, prerendered arrow 89×13. .gitignore보완. 커밋5c0bb06. 채티 독립 교차검증 통과.
완료된 작업 (M2 — 커밋 5bc11b5)
코디 구현 + 채티 독립 교차검증 통과. 지시문 CODI_M2_pages_charts_roadmap_verify.md.
1. build_db.py에 docs_pages 테이블(별도 함수·멱등, tasks 적재 로직 불변). 8행·빈 title 0.
2. Evidence 페이지 5종(index·tracker·charts·roadmap·pages) + docs 정적 복사 + rebuild_report.ps1 + Playwright 7/7. (이후 M3에서 IA 재편.)
완료된 작업 (S6 로컬 — 커밋 c856a72)
SARA 비종속 결정 + 로컬 서빙. serve_report.ps1(npx serve report/build, 127.0.0.1:8788, -s 금지). SARA에 mount 안 함(StaticFiles 인프라 없음, 분리 부담 회피).
완료된 작업 (M3 — 커밋 42efb77)
코디 구현 + 채티 독립 교차검증 통과. 지시문 CODI_M3_ui_color_sidebar_docs.md(개정). GPT 협의 adh_report_33.md 결론 반영.
1. A charts·roadmap 페이지 삭제(독립 메뉴 폐지). F 문서 1건 git rm(docs 8→7).
2. E docs/_order.json(노션 순서 7) + build_db.py에 docs_pages.sort_order 1컬럼(tasks 스키마·COL_MAP·적재 로직 불변). docs.md는 order by sort_order.
3. B /SARA = 요약 strip + SARA.md 허브 본문(이번엔 방식① 직접 임베드 — M3b에서 방식②로 전환).
4. C 트래커 인-컨텍스트: 요약카드 + Phase 완료율 바 + 상태 이모지(상태 2위젯, 중복 없음).
5. D render_docs.py: 스티키 TOC·blockquote 콜아웃·브레드크럼/메타.
6. G verify.spec.ts: PAGES 4종·EXPECT_DOCS 7·charts/roadmap 테스트 제거·허브 본문/TOC·콜아웃 검증.
7. rebuild_report.ps1: 빌드 전 .evidence·build 정리(orphan 잔존 방지). serve_report_hidden.vbs 동봉.
- 채티 교차검증(독립 재현): 커밋 42efb77 master 로컬·push 없음 / tasks 89·docs_pages 7 / sort_order 노션순 1~7·삭제문서 제외 / build_db.py tasks 로직·COL_MAP 불변(diff 확인) / SARA/에 charts·roadmap 부재·build/docs 7개·삭제문서 잔존 0(orphan 정리 작동) / 콜아웃 callout callout-info·TOC class 확인 / 시크릿 누수 0.
완료된 작업 (M3b — 커밋 854c38f)
코디 구현 + 채티 독립 교차검증 통과. 지시문 CODI_M3b_sara_iframe.md.
1. report/pages/SARA/index.md: --- 아래 docs/SARA.md 본문 복사본 전체 제거 → ## SARA 허브 문서 헤딩 + <iframe src="/docs/SARA.html" style="…height:85vh…" loading="lazy"> 하나로 교체(고정 85vh·iframe 내부 스크롤, 자동높이 스크립트 미사용). 요약 strip(KPI BigValue 5·Phase 완료율 바·바로가기) 유지. 안내문 "스냅샷" → "재빌드로 자동 갱신" 정정.
2. render_docs.py·build_db.py 무변경(SARA.html 그대로 임베드). iframe 안에 브레드크럼·백링크가 함께 보이는 트레이드오프는 단순 우선 수용.
3. verify.spec.ts: /SARA 본문 텍스트(한 줄 요약) 검증 제거 → iframe[src*="/docs/SARA.html"] 1 + /docs/SARA.html 200으로 교체. 요약 strip(BigValue 전체 작업+BarChart canvas≥1) 유지. 전체 8 테스트.
- 채티 교차검증(독립 재현): HEAD 854c38f master·워킹트리 clean·원격 없음(push 없음) / 커밋이 건드린 파일 4(index.md·verify.spec.ts·CODI_M3b_sara_iframe.md·HANDOFF) — render_docs.py·build_db.py·docs/·스키마 미포함(stat 확인) / build/SARA/index.html에 iframe 참조 1·본문텍스트(한 줄 요약) 0(방식① 회귀 없음), build/docs/SARA.html(재렌더 25KB)에 본문 3건 존재 / tasks 89·docs_pages 7 불변 / 시크릿 누수 0. Playwright 8/8은 코디 보고+테스트/산출물 정합으로 확인(채티 직접 재실행은 안 함).
- 커밋 동봉 메모: M3b 커밋에 CODI_M3b_sara_iframe.md(지시문)와 당시 미커밋이던 HANDOFF가 함께 들어감(내용 수정 없이). 원격 없는 로컬 단독 이력이라 분리 실익 낮아 그대로 둠 — 이 HANDOFF 갱신 커밋이 최신화.
완료된 작업 (M4 — 멀티프로젝트·에이전트 시드 전환) — 합의 #34+#35 구현 완료
합의 출처: adh_report_34.md(#34) + #35(멀티프로젝트·6분류·inbox). 상세·전제·단계별 검증은 design.md(구 PLAN §13). 코디 지시문 = CODI_M4_multiproject_seed.md.
8단계 전부 단계별 검증 통과: ① docs_manifest.json(8엔트리·id 유일) + validate_manifest.py(1:1·비0 종료) → ② git mv 7건 projects/sara/(rename 인식·H1 보존) + memory.md 신규, docs/·_order.json 소멸 → ③ build_db·render_docs manifest 전환 + URL /docs/sara/<stem>.html(docs_pages 7행·title=manifest·html_path 네임스페이스, render 서브트리 청소·orphan 0) → ④ tasks.project(89행 전부 'sara', 14컬럼; COL_MAP·적재 로직 불변) → ⑤ data/decisions.json(active 7: sara 4 + global 3) → ⑥ build_brief.py + BRIEF.sara.md(8,494자·12,000 이하)·BRIEF.global.md(196자) + rebuild에 build_brief 단계 → ⑦ inbox/(임시물 10건 이동·빌드 비노출) + validator는 projects/*/*.md만 검사 → ⑧ export_notion.py DOCS→inbox/notion_export/(코드만, 미실행).
검증: rebuild_report.ps1 -Verify Playwright 8/8 통과, /docs/sara/SARA.html 200·iframe 1. tasks 89 · docs_pages 7 · EXPECT_DOCS 7 불변. 시크릿 누수 0. 로컬 커밋(push 없음).
되돌리기: 전부 git 추적 변경 → 커밋 전이면 git reset --hard 854c38f, 후면 git revert. 데이터(sqlite 생성물·트래커 시드 JSON) 불변.
완료된 작업 (M5 — user_brief 2번째 프로젝트 편입) — 지시문 CODI_M5_user_brief_project.md
user_brief 자체를 SARA와 동일 방식의 2번째 프로젝트로 편입(노션 추출 없음, memory 단독).
1. projects/user_brief/memory.md 신규(목적·구조·파이프라인·확정결정·마일스톤·핵심학습 요지, 지시문 본문 그대로).
2. docs_manifest.json += ub-memory(project=user_brief·category=memory·order 1·seed). 9엔트리(sara 8 불변). validator projects/{sara,user_brief}/*.md ⟷ manifest 1:1 통과.
3. data/decisions.json += user_brief active 4(저장소·HTML·서빙·멀티프로젝트). 11건(기존 7 불변).
4. 코드 견고성(④): user_brief는 tasks 0·docs_pages 0(memory 제외). build_db·render_docs·validate_manifest는 무수정 통과. build_brief.py만 최소 방어 2곳(# per CODI_M5): tasks_rollup total=0 → "작업 없음" 단일 줄, build_global index 없는 프로젝트 goal=첫 엔트리 fallback + 0-task는 완료율 대신 "문서·메모리 전용 (작업 없음)".
5. rebuild_report.ps1 -Verify Playwright 8/8 통과. BRIEF.user_brief.md(2,751자·≤12,000)·BRIEF.global.md에 user_brief 1줄. SARA 불변(tasks 89·docs_pages 7·BRIEF.sara.md 바이트 동일·render sara/ 7·user_brief/ 미생성). 시크릿 0. 로컬 커밋(push 보류).
⚠ 아래는 M4 이전 "docs/SARA 재구성" 계획 — 제목 단순화(rename)는 #35에서 폐기(이동만 유지)되어 무효. 카테고리·이동·영향범위 정보만 역사 참고용.
(보류·역사 참고) docs/SARA 재구성 — 계획 완료·사용자 결정 대기 / 수동 모드
목적: 앞으로 각 프로젝트 메모리(기존 노션 페이지)를 user_brief 폴더에서 관리. 1단계로 (1) docs/의 SARA 페이지 제목 단순화(이모지·기호 제거), (2) 프로젝트별 SARA/ 폴더로 이동. data/만 예외(통합 SQLite는 최상위 유지).
진행 방식: 수동 — 사용자가 코디에게 지시문 전달. 채티는 계획·지시문 작성. 현재 상태: 계획 보고 완료, 아래 결정 2건 확정 후 채티가 코디용 지시문(.md) 작성 예정.
핵심 발견(채티 조사 완료):
- 리포트 표시 "제목"은 파일명이 아니라 각 .md 첫 H1(# …). 파일명만 바꾸면 화면 제목엔 이모지 잔존 → 제목 정리는 파일명+H1 둘 다(본문 불변).
- export_notion.py 재실행은 노션 원본(이모지 제목)으로 .md 덮어씀(slug()이 이모지 보존, H1=노션 제목). 즉 이번 정리는 로컬=진실 원천 전환 의미. 재추출은 의도적 수동 재pull(로컬 편집 클로버).
영향 범위(조사 완료) — docs→SARA 하위 이동 + 이름 정리 시:
- 바꿀 곳: build_db.py(DOCS_DIR·DOCS_ORDER 2줄) · render_docs.py(DOCS_SRC 1줄) · export_notion.py(DOCS 1줄) · docs/_order.json(파일명 6개 + 위치 이동) · .gitignore(docs/_json/) · 실제 파일 이동 + .md 6개 이름변경 + H1 7개 정리 + report/static/docs/*.html 재생성(git 추적 중 → 옛 이모지 HTML 자동 교체).
- 안 바꿀 곳(최소 범위 — URL/라우트 유지): 렌더 출력 report/static/docs/·URL /docs/*.html / index.md iframe /docs/SARA.html(SARA.md 이름 유지 → 유효) / docs.md(docs_pages 동적 생성·무수정) / verify.spec.ts(EXPECT_DOCS=7·일반 링크검증 → 통과 유지).
[결정 1] SARA 레이아웃: A. SARA/docs/(추천) — 파이프라인 "docs" 어휘(DOCS_DIR→docs_pages→/SARA/docs→/docs)를 1:1 유지, 경로 한 토막만 변경, 향후 <프로젝트>/docs/ 균일. / B. SARA/ 직하 평면(더 단순, "docs" 한 겹 사라짐).
[결정 2] 제목 적용 범위: 추천 = 파일명+H1 둘 다(본문 불변). / 대안 = 파일명만(화면 제목 이모지 잔존).
제안 제목 매핑(이모지·장식기호[— · # () []] 제거, 핵심어·한국어·띄어쓰기 유지; 파일명=H1 동일):
| 순서 | 현재 → 제안 |
|---|---|
| 1 | SARA.md(# SARA) → 변경 없음(허브·iframe 연결·이미 깨끗) |
| 2 | 🗂️ 세부 상의 — SARA 시스템 설계 → SARA 시스템 설계 |
| 3 | 📦 SARA 통합 인수인계서 (최신·단일 시드) → SARA 통합 인수인계서 |
| 4 | 🗄️ 인수인계서 이력 아카이브 → 인수인계서 이력 아카이브 |
| 5 | 🚨 [긴급·1순위] 멀티에이전트 통합 아키텍처 — 세부 상의 (cmdboard 자원 참조) → 멀티에이전트 통합 아키텍처 |
| 6 | 협의 결과 — (다) CLI 러너 설계 확정 (hub #28, 2026-06-01) → CLI 러너 설계 확정 |
| 7 | 🔍 EVALUATOR 웹페이지 실사용 평가 — 설계 제안 → EVALUATOR 웹페이지 평가 |
(날짜·"긴급·1순위"·"최신·단일 시드"·"hub #28"·"세부 상의" 등 부가어 제거. 사용자가 남길 항목 지정 가능. 파일명 공백·한글 OK — docs.md가 encodeURIComponent 처리.)
export_notion 처리(추천): DOCS 경로만 SARA/docs로 맞추고, "재실행 시 로컬 편집 덮어씀" 경고 주석 1줄 추가. 이번 작업에서 스크립트 실행 안 함.
검증 기준(지시문에 넣을 성공 조건): SARA/docs/에 .md 7 + _order.json(갱신)·docs/ 소멸·data/ 불변 / docs_pages 7행·제목·파일명 이모지 0 / report/static/docs/ 깨끗한 7개·이모지 잔존 0 / rebuild_report.ps1 -Verify → Playwright 8/8 / iframe /docs/SARA.html 200 / 시크릿 누수 0.
되돌리기: 전부 git 추적 변경 → git revert 또는 폴더 원위치 + 상수 복원. 데이터(sqlite·트래커 시드) 불변.
2026-07-24 이관 — 루트 HANDOFF NOW 완료건 (원문 그대로)
2026-07-24 페페 지시(HANDOFF NOW=진행중만, 완료는 즉시 프로젝트 archive로)에 따라 루트
HANDOFF.md의 완료 항목을 각 프로젝트archive.md로 이관. 이때 루트의### ✅ 최근 완료 (프로젝트별 최신 1줄 — 상세는 각 handoff)섹션은 전 항목 이관으로 소멸(항목 원문은 각 프로젝트 archive의 같은 제목 절에 보존).
- user_brief(2026-07-05): 관계도 드래그 후 오클릭 방지(8788 라이브). 상세 =
projects/user_brief/handoff.md. - 기타 완료 이력(미니PC 이전·MCP 복구·devplan 대시보드·Visual Studio MCP·홈페이지 사업 제안서 등 06-18~06-24) →
inbox/handoff-archive-20260707.md(파이프라인 밖 백업)(2026-07-07 대청소 시 이관한 구 NOW 전문).
루트 HANDOFF NOW 이관 (2026-07-27, 캡 20,000자 시행)
루트
HANDOFF.mdNOW가 39,399자로 비대해져 매 세션 시드복원 비용이 커짐(적대검증 4자 합의 1순위) →build_brief.py의CHAR_CAP게이트를 루트 HANDOFF에도 적용하고 NOW 항목 원문을 여기로 그대로 cut 이관했다(삭제 0). NOW에는 1~2줄 요약 + 이 문서 포인터만 남는다.
- ✅완료(전역지침 CLAUDE.md 재편·
C:\dev\user_brief\rules\신설, 코디 2026-07-24, 페페 지시):C:\dev\CLAUDE.md(18.7KB) 비대 + 세션 시작 시드복원 구문이 하단에 묻힘 → §0 최상단 신설(시드체인 ①HANDOFF→②CLAUDE→③BRIEF.global→④BRIEF.+ 규칙파일 로드표 + 작업 전 필수 3단계 + 작업 끝 루틴) + 세부규칙 카테고리 4파일 원문 이관(
rules/tooling.md·workflow.md·notify.md·ytmine.md, 삭제 0·센티널 52/52 검증). CLAUDE.md=4.4KB 진입점. 포인터 동기화(이 파일 배너·user_brief/CLAUDE.md). 상세=projects/user_brief/handoff.mdNOW 최상단.
26.7.30 루트 NOW 캡 정리로 이관 (원문 그대로)
- ✅2026-07-27 OAuth 토큰 단일 출처화 — 페페가
C:\dev\.secrets\.env로 이동 → 코디가 전수검사·경로갱신. 소비자 9곳(cmdboard/bridge config·SARA·vscode_sara·agent-dialogue-hub은load_dotenv(r"C:\dev\.secrets\.env")추가, talklog 3개 스크립트·bridge 점검 ps1은 경로상수) + 프로젝트.env5곳 토큰줄 제거(포인터 주석) + 문서/템플릿 10곳. 검증=4개 앱 실제 로드 108자·타 키 유지. 이어서 토큰 회전 완료(페페claude setup-token재발급→.secrets\.env교체, 코디 재검증: 앱 4 + talklog 3 모두 새 값, 빈 CONFIG_DIRclaude -p→PONG로 실인증 확인). ⏳잔여=옛 토큰 폐기 가능여부 확인 + 평문 사본 20여곳 정리 판단. 규칙=rules/tooling.md"시크릿 파일 위치".
(HANDOFF NOW 이관 2026-07-31)
- ✅2026-07-29 remember 플러그인 중단(페페 지시) — VS Code 확장
Subprocess init 60000ms 타임아웃다발의 원인이 이 플러그인의 PostToolUse 훅(툴 호출마다 + 서브에이전트마다) + 임계 초과 시claude -pHaiku 요약 프로세스.claude plugin disable로 user 스코프 비활성(폴더는 존치 — 캐시에 0.8.2/0.8.9/0.9.0 공존). 잃은 것=세션시작 자동회상·.remember자동기록·프롬프트 시각스탬프·/remember:*스킬 → 연속성은 이제 user_brief 시드 체인 단일 경로. 안 잃은 것=시드 전부·네이티브 auto-memory·ponytail·voicecody. 적용은 새 세션부터(기존 창은 훅 계속). 상세=rules/tooling.md"remember 플러그인 중단".
26.8.2 루트 NOW 캡 정리로 이관 (원문 그대로)
- ✅2026-07-30 BRIEF 캡 초과 해소 —
BRIEF.pfs.md20,108자로 자동 재빌드가 계속 FAIL 중이었다. 범인은 본문이 아니라 세션 문서 44건 포인터 나열(4,972자=25%) —session-*만 세션마다 +1로 무한 증가하는 구조.build_brief.py에ARCHIVE_SESSION_KEEP=8(나머지는sessions.md1줄 롤업, 인덱스가 전량 보유 = 손실 0) → pfs 16,251. 부수로 HANDOFF WARN도 규칙대로 해소(poincad2 7/27 완료 3건 archive cut). 빌드 exit 0·WARN 0. →rules/repo.md"빌드·검증" - ✅2026-07-30 user_brief 전문검색(FTS) 신설 —
mem_find.py가 태그 매칭뿐이라 도메인 KB 35개(furniture-expert/kb·practice·ai-study/kb= 매니페스트 밖)가 검색 사각지대였다.build_db.py가data/fts.sqlite(2749섹션, trigram)를 같이 빌드 →PYTHONUTF8=1 python scripts/mem_find.py --text <단어들> [--project <P>]로 본문 검색(출력경로#섹션+스니펫, 0.1초). 자동 재빌드 5분 주기에 편승, 신규 파일·의존성 0. 함정 = trigram 필수(unicode61은 한글 조사 못 넘음)·fts5에 접두사 LIKE는 조용히 빈 결과(instr로 회피). 검증 =--selftest8 + 실검색 4종. ⏳다음 후보 = 카톡·유튜브 KB로 인덱스 확장(C안). →projects/user_brief/handoff.md·rules/repo.md"전문검색"
자동 재빌드 실패 대처 — 캡 40,000 + 경고선 신설 (2026-08-06 완료 · 2026-08-08 HANDOFF NOW 에서 원문 cut 이관)
🆕user_brief 자동 재빌드 실패 대처 — 캡 20,000→40,000 + 경고선 25,000 신설 [코디] 26.8.6 ✅완료(페페 지시). 실패 원인 = 하드캡 하나뿐이라 20,000을 1자만 넘겨도 5분마다 빌드가 죽었다(8/4 172회·14시간, 8/5 2회, 8/6 1회 = 전부 HANDOFF 캡). 🔑경고와 차단을 분리 = 25,000 CLEANUP-WARN+텔레그램 1회(여기서 정리) / 40,000 하드캡(안전망). 경고를 로그에만 찍으면 26.8.4와 똑같이 아무도 안 보므로 실패 센티널과 같은 방식으로 알림(.autorebuild_warn, 상태 전환 시 1회·대상 바뀌면 재알림). 포인터 bloat 감지선은 CHAR_CAP×0.2 → 고정 4,000(캡 비례면 감도가 같이 풀린다). 검증 = 경고선 임시 15,000으로 낮춰 auto_rebuild e2e 2회(경고 발생 → 센티널·텔레그램 / 복귀 → 센티널 자동 삭제), 빌드 exit 0·현재 최대 HANDOFF 17,858자. 2순위 원인 = build_db.py 매니페스트 불일치(등록 전 5분 주기에 걸림)로 자가복구되므로 그대로 둔다. → rules/{repo,runbook}.md · projects/user_brief/handoff.md
코디 지침 재배치 + notify 래퍼 (2026-08-06 완료 · 2026-08-08 HANDOFF NOW 에서 원문 cut 이관)
🆕코디 지침 재배치 + notify 래퍼 [코디] 26.8.6 ✅완료(페페 지적 "텔레그램 보고가 안 왔다"). 🔴원인 = /notify-done 은 슬래시 명령이 아닌데 지침에 슬래시로 적혀 있어 "스킬 목록에 없는 명령"으로 보고 건너뛰었다(한 세션 5개 답변 연속 누락 · 8/2 재발). broker 는 멀쩡했다. 🔑수정 = ①CLAUDE.md 재배치 — 위치가 곧 실행 시점: 최상단=매 세션 시작 / 최하단 「⛔ 답변 보내기 직전」=매 답변 6항목(알림·3단계 보고·시드 1줄·컨텍스트 %·rules 🆕 append·사이트맵/허브) ②래퍼 tools/notify.py 신설 — python tools/notify.py done "요약" "상세" 한 줄. 검증 = done·step 실발송 telegram_ok=1·한글 온전. 메모리 frequent-tool-mistakes 2순위. → rules/notify.md 🆕
🧹 루트 HANDOFF NOW 이관(2026-08-23 캡 경고 정리)
- 🆕user_brief 관계도 링크 닫힘 — 근본원인 수정(재빌드 중 8788 404) [코디] 26.8.19(수) ✅. 증상 =
100.108.234.45:8788/docs/graph가 열렸다 안 열렸다 한다. 서버는 안 죽었다(8788 LISTEN·serve 정상) — 죽은 건 문서루트였다. 🔑scripts/auto_rebuild.sh가npm build전에rm -rf .evidence build를 했는데 그build가 8788 이 서빙하는 바로 그 폴더다 → 빌드 ~60초 내내 전 경로 404, npm 빌드가 실패하면 영구 404. autorebuild 는 5분 주기라 문서 작업 중엔 5분마다 1분씩 사이트가 사라진다(실측: 10:50:03 시작 → 10:51:06 복구). 🔧수정 = 선삭제 폐지 + 빌드 후 원본 트리.evidence/template/build에 없는 파일만 정리(bash=rm,rebuild_report.ps1=robocopy /MIR) — evidence 는fs.copySync(outDir,'./build')라 덮어쓰기만 하고 삭제분을 안 지운다. ⚠중간에 밟은 함정 = 정리 기준을 mtime 으로 뒀다가 문서 256개를 지웠다(render_docs.py는 바뀐 문서만 다시 쓰고 Windows 파일복사는 원본 시각을 보존한다) → 기준은 원본 트리 존재 여부여야 한다. +휠 줌 = 기본 ×3 이 한 칸에 너무 크게 튄다는 지적 → OrbitControls 기본값 ×1(Shift ×3 · Alt 0.3 미세 · Ctrl ×1.6), 배지 문구도 동기화. +2차 지시 3건(같은 세션) = ①거리 페이드 제거(scene.fog삭제 — 멀어져도 색 고정) ②장식 별 전량 삭제(배경 2,000개 + 은하 핵 프로젝트당 200+55n개. 실제 문서 노드와 구분이 안 된다는 지적. 성운·라벨은 유지) ③휠 줌을 OrbitControls 에서 분리(enableZoom=false+ 자체 처리). 🔑줌이 계속 극단적이던 진짜 이유 = OrbitControls 가0.95^(zoomSpeed·|deltaY|/(100·dpr))라 마우스·트랙패드·화면배율마다 한 칸 폭이 제각각이다 — zoomSpeed 를 3→1 로 낮춰도 장치가 큰 deltaY 를 보내면 여전히 튄다. → deltaY 크기를 아예 안 보고 한 칸 = 항상 6%(Shift ×3 · Alt 0.25 미세 · Ctrl ×1.6). +funnel 루트/→ 8788 복구(페페 지시) = 매핑은 원래 있었는데 serve 가 Tailscale IP 단독 바인드라 funnel 이 프록시할127.0.0.1:8788이 없어 계속 502였다(26.8.11 ai-study 장애의 착지점) → serve 에 루프백 리스너 추가(-l다중,serve_report.ps1·serve_watchdog.cmd둘 다). ⚠funnel 타깃을100.x테일넷 IP 로 바꾸는 건 오답 — tailscaled 가 자기 자신으로 프록시하며 응답이 멎는다(502→타임아웃, 실측 후 되돌림). 검증 = 강제 재빌드 중 3초 간격 40회 폴링 전부 200(파일 509개 유지·이전엔 같은 구간이 전부 404) ·rebuild_report.ps1경로도 재빌드 중 404 0회 · 관계도 육안(캡처) 렌더·관계선 정상·배지 ×1.0. 커밋 = user_briefaec61f1·5c78b1b·9d8eaf3. 2차 검증 = 콘솔 에러 0 ·deltaY 4000단발도 6% 한 칸(캡처) · funnel/·/docs/graph200(직전 502) ·/study302·/study-qa200·/agent401 회귀 없음. →projects/user_brief/memory.md핵심 학습 3줄 추가. ⏳페페 = 브라우저 육안 1회(휠 감도·별 사라짐·먼 은하 색). 한 칸이 아직 크면ZOOM_STEP1.06 → 1.03 한 줄