2026-09-09(수) 세션 — 당근 AI스터디 devplan 페이지 신설 + 1차 ai-study 폐기
기록: [코디] · 지시: [페페] 26.9.9 채팅 (원문은 페이지 「지시문 기록」 절에 그대로 보존)
무엇
[페페] 「ai스터디 이전에 했던 것은 폐기다. 사이트 내리고 자료는 그대로 보관해서 새로 시작한 ai스터디에 참고자료로 사용한다. … devplan에 당근 AI스터디 페이지 만들고 좌측 사이드 메뉴. 1.관리페이지 2.멤버페이지 … 3. 현재 멤버 바이브코딩이 첫 계획을 올렸다. 당근 어플 접속해서 내용 확인하고 … 사이드 메뉴 세번째로 AI 기본 세팅. 그릴링 없이 코디 추천으로 완료해라.」
[코디] 네 갈래로 나눠 처리했다.
① 당근 수집 — 노트20 「칼리」 계정
모임 「AI스터디 AI코딩 업무자동화」 접속 → 게시글 4건 확인(페페 3 + 바이브코딩 1) → 바이브코딩 가입인사 전문 + 멤버 6인 명부 수집.
🔑본문은 스크린샷이 아니라 접근성 노드 덤프로 받았다 — WebView 라 화면이 잘리고 툴팁이 한 줄을 가린다. 함정 전문 = rules.md 🆕 맨 위.
② devplan 페이지 — 단일 HTML + JSON 데이터 + 파이썬 빌더
- 산출 =
C:\dev\devplan\danggeun-ai-study.html(69KB), 빌더 =C:\dev\devplan\build_danggeun.py, 데이터 =C:\dev\devplan\danggeun\{directives,members,admin,setup}.json. - 좌측 사이드 3분류 = ①관리페이지(운영현황·진행계획 rev·주기작업·지시문 원문 타임라인·1차 보관·공개 체크리스트) ②멤버페이지(멤버 상단 탭 4개) ③AI 기본 세팅.
- 멤버 추가 =
members.json항목 1개 append + 재빌드. HTML 수술 없음. - 도식 2종 인라인 SVG — 프로젝트 트리(큰 프로젝트 1 → 하위 7) + 멤버/AI 스윔레인 파이프라인(왼쪽 멤버 · 가운데 단계 · 오른쪽 AI). 노드 규격·간격은 상수 고정, 자체검사가 간격 균등·라벨 실폭·캔버스 이탈을 잡는다.
- 나노바나나 = 히어로 1장(
media/danggeun/hero.png, 글자 0 · 노트북→문서/메일/달력/엑셀/체크리스트→대시보드 흐름). 글자·도형은 SVG/CSS 로만. - web-designer 상담(UI 착수 전 필수) 처방 반영 = 흰글자-on-accent 3.25:1 →
--accent-deep5.82:1 교체 · 배지 텍스트는--ink고정 · 멤버 탭 sticky 가로스크롤 pill · 행위자 색 관례(멤버=accent / AI=live) · 네비 미답변 카운트 배지.
③ 바이브코딩 계획 체계화
큰 프로젝트 = 업무 대시보드(셀프 AX + 직장 AX), 하위 6종 + 상시 1: P1 회의록 초안(쉬움·1순위) → P5 위원회 명부·공문(쉬움·2) → P2a 정기 안내메일(보통·3) → P3 타 대학 사례조사(보통·4) → P2b 회신 수집·취합·리턴(어려움·5) → P4 행사 기획·홍보(보통·6) / P6 메모·리마인드(상시). 그릴링 12문(각 문항에 코디 추천안) + 7단계 파이프라인(S1 세팅 → S2 업무해부 → S3 파일럿 선정 → S4 손으로 1회 왕복 → S5 규칙 고정 → S6 자동화 → S7 확장·통합), 단계마다 멤버/AI 할 일 분리. 🔑파일럿 추천 = P1 회의록 — 양식 고정·입력 작음·눈으로 바로 검증이라 첫 성공이 가장 싸다.
④ 1차 ai-study 내림 (자료는 전량 보관)
- Funnel 경로 3개만 off (
/study·/study-qa·/study-hook). ⛔funnel reset안 씀 — 다른 8경로가 통째로 날아간다. - 서버 프로세스 4개 종료(8801·8802·8803·8804) · HKCU Run 자동시작 4값 삭제(삭제 전 Run 키 전체 export 백업).
- 파일·데이터는 손대지 않았다 —
C:\dev\ai-study\{site,prod,data,tools}전량 보존. 계정·토큰·QA·제출물 그대로. - 남은 것 = GitHub webhook
653764844(받는 서버가 없어 무해,gh미인증이라 코디가 못 지움).
검증
| 항목 | 결과 |
|---|---|
| 빌더 자체검사 16항목 | ALL PASS (marker orient·hex 0·13px·qahelper·쉘 미적용·keep-all·탭 쌍 4·첫 탭만 열림·레인 미겹침·캔버스 내부·간격 균등·라벨 3줄·히어로 존재) |
check_font.py / check_theme.py |
FAIL 0 / FAIL 0 WARN 0 |
| Playwright 실측 1600·1280·390 | 콘솔에러 0 · 404 0 · 가로스크롤 0 · 렌더 폰트 13px+ · 멤버 탭 전환 OK |
| 허브 등록 | projects.json 카드 추가 · project_state.json 항목 신설 · build_hub.py --selftest 81건 통과 → index.html 재생성 · 사이드바 「AI스터디」를 새 페이지로 교체 후 --renav 40개 |
| 1차 내림 | 공개 URL /study·/study-qa 404(502 아님) · 대조군 /wmc/ 200 · /agent 401 유지 · 8801~8804 LISTENING 0 · reg query ai_study* 0 |
🔁 같은 날 rev2 — 6장 분리 + 그릴링 자동저장
[페페] 「큰메뉴 1,2,3을 각각 다른 페이지로 분리해줘. 현재 스크롤 1페이지 통합에서 3개로 분리. 멤버별 페이지도 상단에 멤버 이름은 남기되 별도 페이지로 분리하자. 반응형 페이지로 보완할건데 한페이지 통합하면 서로 영향이 간다. 멤버별 그릴링 항목에는 입력창 만들어줘라. 입력하면 자동 저장.」
분리 — 1장 → 6장
danggeun-ai-study.html(관리) · danggeun-member-{vibecoding,haedali,claude-well,pyeongil}.html · danggeun-setup.html.
빌더가 한 번에 6장을 찍는다. 🔑허브가 가리키는 주소는 그대로 뒀다(/danggeun-ai-study.html = 관리페이지) — 카드·사이드바·시드 링크가 하나도 안 깨진다.
멤버 상단 탭은 버튼 → 페이지 링크로 전환(현재 멤버만 aria-current="page"). 좌측 네비는 대분류 3개 + 활성 그룹의 하위 앵커만 펼친다(다른 페이지 앵커는 죽은 링크가 되니 안 그린다).
그릴링 자동저장
문항마다 textarea + 저장 버튼 없음. 타자 멈춘 뒤 0.7초와 blur 두 곳에서 쏜다(디바운스만 두면 타자 치다 탭을 닫을 때 마지막 입력이 날아간다).
- 백엔드 = 신설 C:\dev\devplan\danggeun_api.py + app.py API 2개 (GET /api/danggeun/answers · POST /api/danggeun/grill). 락파일로 직렬화, 4,000자 상한, slug/qid 형식 검증.
- 🔑원장을 members.json 과 갈랐다(danggeun/answers.json) — 한 파일이면 재빌드가 멤버 답을 덮는다. 빌더는 읽기만 해서 정적 HTML 에도 굽고, 페이지는 열릴 때 다시 fetch 해 최신으로 덮는다.
- 🔑질문 id = 질문 원문 sha1 앞 8자. 인덱스(q1…)면 질문 하나만 끼워 넣어도 답이 통째로 밀린다.
- 빈 칸 = 삭제(미답변 복귀). 저장되면 「답변됨」 배지 · 좌측 네비 미답변 카운트 · 1/12 답변 카운터가 즉시 갱신된다.
검증 (rev2)
| 항목 | 결과 |
|---|---|
| 빌더 자체검사 | ALL PASS (6장 × hex0·13px·qahelper·쉘미적용·문서완결·marker + 페이지별 분리 검사 + 탭 링크 4×4 + qid 유일 + API 연결) |
check_font / check_theme × 6장 |
FAIL 0 / FAIL 0 WARN 0 |
| Playwright 6장 × 3폭(1600·1280·390) | 콘솔에러 0 · 404 0 · 가로스크롤 0 · 렌더 폰트 13px+ |
| 자동저장 실타자 왕복 | 입력 → 「저장됨 14:52」 · 서버 원장 반영 · 카운터 1/12 · 네비 배지 11 · 새로고침 후 값·배지 복원 · 비우면 원장에서 삭제 |
| API 왕복 | restart.py 로 8799 재기동(PID 1개 확인) 후 GET/POST/DELETE 정상 |
🔴밟은 함정 4개(전문 = rules.md 🆕 맨 위) — ①6장이 CSS 를 공유해서 「이 문자열 없음」 검사가 전부 오탐(마크업만 잘라서 봐야 한다) ②app.py 만 고치고 재기동을 안 하면 API 가 404 ③Git Bash curl -d '한글' 이 cp949 로 나가 서버가 UTF-8 디코드 실패(셸이 범인) ④모바일에서 sticky 탭바와 fixed 햄버거가 겹침.
🔁 같은 날 rev3 — 그릴링 기본 펼침 + 독립 검토본 발송
[페페] 「그릴링 질문 입력창 기본 펼침으로 하고 상단에 접힘/펼침 버튼 달아줘라. 멤버 바이브코딩 페이지 독립 html로 빼서 나한테 텔레그램 보내줘. 1차 검토 받을 예정. 답변 자동저장은 유지하되 코디 연결은 필요없다. 단순 내용 확인 및 그릴링 메모용이다.」
- 그릴링 12문 기본 펼침 + 상단 「전체 접기 / 전체 펼치기」 버튼(질문 제목 개별 여닫기는 그대로).
- 독립 검토본 신설 =
C:\dev\devplan\danggeun\standalone\danggeun-vibecoding-review.html(51KB). 부트스트랩·qahelper·좌측 네비 없이 파일 하나로 열린다. 저장은 브라우저 localStorage 뿐 = 서버 전송 0(페페 「코디 연결 필요없다」). - 🔑색 단일 출처를 안 깼다 — 독립본은
/assets/theme.css를 못 링크하므로 빌드 시점에 그 파일의:root{…}를 추출해 인라인(theme_tokens()). 손으로 베끼지 않는다. - 🔑저장 로직은 한 벌로 두고
window.DG_LOCAL로 서버/로컬을 가른다. 두 벌로 갈라 두면 한쪽만 고쳐진다. - 발송 = 텔레그램
sendDocument, 파일명당근AI스터디_바이브코딩_계획검토.html(broker config 토큰 재사용). ok=True · 51,501 bytes 수신 확인.
검증(rev3) — 빌더 자체검사 ALL PASS(독립본 전용 8항목 포함) · check_font/check_theme 6장 FAIL 0 ·
사이트 6장×3폭 재실측 ALL PASS(기본 12문 펼침 · 전체 접기 버튼 포함) ·
🔑독립본은 file:// 로 열고 context.route 로 file 이외 요청을 전부 차단한 채 실측 = 외부 요청 0건 · 콘솔 0 · 가로스크롤 0 · 13px+ · 크림 배경(토큰 적용) · 12/12 기본 펼침 · 접기/펼치기 동작 · 로컬 자동저장 → localStorage 기록 → 새로고침 복원.
🔴함정 3개 = ①독립본은 theme.css 링크 불가(빌드 시 굽기) ②「자립인가」는 문자열로 못 잰다(요청 차단 실측이 유일한 증명) ③기본 펼침으로 바꾸면 「눌러서 펼친 뒤 입력」하던 기존 테스트가 반대로 동작해 죽는다.
🔁 같은 날 rev4 — 리스너(새 글 → 멤버 페이지 자동 생성)
[페페] 「리스너 만들어서 다른 멤버 가입인사 또는 개발목표 관련 내용이 올라오면 페이지 생성해줘.」
- 신설 =
C:\dev\devplan\danggeun\watch.py(+watch_hidden.vbs·watch_task_install.ps1). 예약작업Cody\danggeun-watch— 08:10~23:10 2시간 간격, 창 없이. 상주 프로세스 0. - 도는 순서 = 폰 락 → 당근 앱 → 최신 글을 열고 「이전」 링크를 따라 거슬러 순회(최대 12건) →
새 글 판정(
seen.json지문 대조) → 원문 보관(incoming/) →members.json갱신(모르는 닉네임이면 항목 자동 생성) →build_danggeun.py(=여기서 이미 그 멤버 페이지가 생긴다) → 헤드리스claude -p로 큰/하위 프로젝트 분해 + 그릴링 8~12문 생성 → 재빌드 → 단독 검토본 텔레그램 발송. - 🔑피드 목록이 아니라 「상세 → 이전」 순회다 — 모임 홈 피드는 WebView 라 글 카드가 노드에 안 잡히는 구간이 있다.
- 🔑글 지문 = 작성자 + 본문 앞 120자 sha1. 당근이 주는 안정 id 가 노드 덤프에 안 나온다.
- 🔑모임장·코디(칼리) 글은 기록만 하고 페이지를 만들지 않는다. 잡담은 낱말 2개 이상 규칙으로 거른다.
- 🔑자동 분해가 실패해도 원문 접수 페이지는 남는다 — 알림에 「코디 수동 필요」로 찍는다. 분해 결과는 초안이고 코디가 검수한다.
- 🔑폰이 카톡(poin-agent)에 잡혀 있으면 90초 대기 후 조용히 다음 주기로 넘긴다(exit 0). 실패 알림이 아니다 —
2시간마다 도는 리스너에 7분 대기 후 오경보는 잡음이다. 락파일은 30분 stale 해제(SIGTERM 이면
finally가 안 돈다).
검증(rev4) — watch.py --demo 21항목 통과(노드 파싱·화면장식 제거·대상 판정·지문 결정성·slug 충돌·파이프라인 골격·「이전」 좌표·글자탭·좌표 하드코딩 금지) ·
빌더 자체검사 ALL PASS · 예약작업 등록 확인(다음 실행 18:10).
폰 실주행 6회 — 여기까지 뚫었다
| 구간 | 상태 |
|---|---|
| 화면 잠금 해제 · 앱 기동 | ✅ |
| 광고동의 인터스티셜 닫기 | ✅ (인터스티셜 닫음 로그) |
| 나의 당근 → 모임 → 우리 모임 진입 | ✅ (전부 글자 노드로 탭) |
| 글 상세 진입 | ✅ (앵커 「추천순으로 보기」 + 상대 오프셋) |
| 상세 본문 파싱 | ❌ 여기서 막혔다 — 본문 파싱 실패 |
| 순회 종료·판정·정상 종료 | ✅ (오경보 없이 exit 0) |
🔴남은 한 구간 = 「어느 카드를 열었나」. 앵커 오프셋이 첫 글이 아니라 엉뚱한 카드(또는 인기글 블록)를 열고 있다.
다음 세션은 상세 진입 직후 스크린샷 1장을 떠서 어느 글인지 눈으로 확인하고 OFFSETS 를 맞추면 된다 —
파싱 로직 자체는 이 세션에서 수집한 실제 노드 덤프로 검증돼 있다(demo 통과).
⚠예약작업은 켜둔 채로 둔다 — 읽기 전용이고 못 열면 아무 것도 안 누르고 조용히 넘어간다(오경보 없음).
2시간마다 남는 watch.log 가 다음 세션의 진단 자료다.
다음
⏳페페 = ①바이브코딩 독립 검토본 1차 검토 회신(발송 완료) ②공개 시점·범위 ③그릴링 12문 전달 경로 ④그릴링 답을 어디에 모을지(사이트 원장 vs 독립본 로컬 — 코디가 받아야 하면 공개 경로+인증 필요) ⑤webhook 삭제 여부.
⏳코디 = 리스너 첫 실주행 로그 확인(danggeun/watch.log — 수집 N건이 찍히는지) · 반응형 보완(페이지가 갈렸으니 한 장씩 독립 수정) · 멤버 3인 가입인사 대기 → 올라오면 주기 작업 7단계.