세션 — 카톡관리 「저장」 일괄 반영 + 게시글 호칭 규칙 (2026-08-04)
지시 (신동승 차장)
"카톡 게시글 관리를 하는데 항목 한개 한개 체크할때마다 바로 반영으로 넘어가서 딜레이로 인한 내용 누락 문제가 있다. 항목 수정사항 반영된 것은 페이지에 행별로 임시 하이라이트를 해주고 최종 반영은 저장 버튼을 추가해서 여러 행에 대한 내용을 한번에 보내서 처리하겠다. 작업 진행해. 운영배포"
작업 중 추가 지시:
"기본 규칙 추가한다. 카톡 게시글에서 나의 지칭을 절대 페페라고 하지마라. '신동승 차장'이라고 해라. 현재 게시된 글들도 확인해서 모두 바로 전량 수정해라."
결과 — 운영 배포 완료
| 항목 | 상태 | 커밋 |
|---|---|---|
A 일괄 저장 API /api/kakao-board/op/bulk |
✅ | pfs master 9f9c7f3 |
| B 화면 = 체크는 표시만 + 저장 바 | ✅ | 〃 |
| C 수정 편집기 취소 회귀 수정 | ✅ | pfs master 9de058c |
| D 운영 배포(파일단위 포워드) | ✅ | pfs deploy-live abc5208 |
| E 게시글 호칭 = 신동승 차장 | ✅ | poin-agent c41e6fd + 게시글 v16 실반영 |
A·B 원인과 설계 — 왜 「표시 → 저장」인가
체크 한 건마다 /op 를 등록하고 곧바로 kbLoad() 로 목록 전체를 다시 그렸다.
그 왕복 사이(수백 ms~수 초)에 누른 체크는 새로 그려진 DOM에 없는 행을 향하거나
렌더 도중 사라져 조용히 날아갔다 — 이게 "딜레이로 인한 내용 누락"의 실체다.
바꾼 구조 = 클릭은 전송이 아니라 표시다.
- KB_PEND{행키 → 명령} 하나가 대기분의 단일 출처. 클릭 = 여기에 넣고 그 행만 다시 칠한다
(목록 재렌더 없음 → 그리는 중에 클릭이 사라질 구간 자체가 없다).
- 같은 버튼 재클릭 = 표시 해제. 저장 전이라 아무것도 안 나갔으니 되돌리기가 공짜다.
- 「저장」이 /op/bulk 로 전 행을 한 번에 넘긴다.
- 저장 대기 중엔 30초 자동 새로고침을 멈춘다 — 작성 중인 수정문·표시가 갱신에 쓸려나가면
그게 같은 사고의 재발이다.
- 저장 후 실패한 행만 표시로 남긴다(성공분은 사라짐) → 재시도가 자명하다.
서버는 단건 add_op를 그대로 반복 호출한다. 검증·세션·읽기전용 게이트가 단건과 완전히 같고
새 신뢰경계가 생기지 않는다. 실패분은 삼키지 않고 {room_name, id, action, err} 로 회신한다.
🔑 복원 i=0 함정: 실패 회신에서 식별자를 o.get("id") or o.get("i") 로 고르면
숨김이력 첫 줄(i=0)이 falsy라 빈 값이 되어 화면이 그 행을 다시 못 잡는다 → None 판정으로 분리.
C 배포 중 잡은 회귀
완료·취소 표시가 걸려 있는 행에서 ✎ 편집기를 열고 취소하면 kbPaint 가 edit 분기가 아니라
본문 복원을 건너뛰어 textarea HTML 이 그대로 남았다. 수정 표시가 아닌 모든 경우에
원문 복귀하도록 순서를 교정. 실브라우저 검증이 잡았다(자체검사로는 안 잡힌다 — DOM 문제).
E 게시글 호칭 — 「페페」 전량 제거
- 게시글 원문(
board.md·hidden.jsonl) 전수 grep = 실사용 1건 (ivision/board.md변동 반영 이력[페페 지시]) →[신동승 차장 지시]로 수정. 감시 데몬이board_hash변화를 보고 v16 으로 카톡에 실반영(19:27:05, 게시창 08~20시 내). - 재발 차단 = 나온 자리를 고쳤다. 모델이 지시 블록 머리말의 화자를 그대로 받아쓴다 →
[운영자 지시 — devplan 댓글]→[신동승 차장 지시 — …], 그리고 PROMPT 4-3 / REBUILD_PROMPT 7 에 "페페 금지" 를 명시. - 화면 별칭
kakao-rules.json"신동승": "페페 (1:1)"→"신동승 차장 (1:1)"(이 파일은 gitignore 대상 = 로컬 상태). - ⚠ 감시 데몬은 상승권한이라 코디가 재시작 못 한다 → 프롬프트 수정분은 다음 재시작부터 적용. 지금 도는 데몬은 구 프롬프트라 새 이력에 「페페」가 다시 들어갈 수 있다(신동승 차장 몫).
검증
- 자체검사 13항목 PASS —
pfs/scripts/test_kakao_board.py(일괄 3건 큐 적재 · 부분 실패 시 성공분만 적재+사유 회신 · 복원 i=0 식별자 · 빈/형식/201건 거부 · 일괄도 세션·읽기전용 게이트 통과).test_worklog_window.py9항목 PASS. - 실브라우저 23항목 ALL PASS × 테스트·운영 양쪽 —
pfs/scripts/_kb_save_ui_check.py(체크 시 POST 0건 · 하이라이트/배지 · 재클릭 해제 · 연속 클릭 3회 전부 반영 · 목록 미재렌더 · 수정 취소 원문복귀 · 표시 지우기 · bulk 계약 · 콘솔 오류 0). ⚠ 이 스크립트는.gitignore scripts/_*대상이라 커밋 안 됨(리포 규약, 로컬 보관). - 고객 게시글 무접촉 — 검증에서 저장은 없는 방(
__없는방_검증__)으로만 호출.
함정 · 규칙 (신규)
- Edit 도구가 LF 템플릿을 CRLF로 바꾼다 →
git diff가 1,527행 전체 리라이트로 부풀어 배포 경계 판정(파일 diff)이 무의미해진다. 커밋 전git diff --stat확인 →--ignore-all-space와 차이가 크면 LF로 정규화하고 다시 본다. - push 직후 검증은 배포보다 빠르다 — 테스트 자동배포 전 옛 템플릿으로 돌아 FAIL 1건이 났고 코드 문제로 오진할 뻔했다. 검증 전에 서빙되는 HTML에 새 문자열이 있는지 먼저 확인.
- 배포 경계 확인 =
git diff --stat origin/deploy-live <작업직전커밋> -- <대상파일>이 비어야 그 파일의 미배포분이 내 변경분뿐이다(AL발주서 QA 15파일 유입 방지).
후속 (같은 날) — 저장 바 위치: 아래 → 방 목록 최상단
지시 = "저장버튼이 아래쪽에 있어서 안보인다. 카톡방 최상단으로 위치 변경."
- 마크업을
#kb-app위로 옮기고sticky bottom:0→top:0. (deploy-live 1009332) - 🔴그런데 sticky가 안 붙었다 — 운영에서 스크롤하니
barY -1743으로 그냥 사라졌다. 원인 = 템플릿#main-wrapper{overflow:hidden}이 sticky의 스크롤포트를 가로챈다 (조상 체인 실측:main-wrapper ovf=hidden/body ovf=hidden auto). → 이 페이지에서만html > body #main-wrapper{overflow:visible}로 해제. (deploy-live fd8916b) 부작용은 고치기 전에 쟀다 — 1440px·390px, 모바일 사이드바 개폐 전 상태에서docW==clientW불변(가로 스크롤·클리핑 변화 없음). 그래서 전역이 아니라 이 페이지만 푼다. - 🔑검증이 결함을 통과시킨 이유 = 테스트 DB는 카톡 방이 2개뿐이라 문서높이 1,114 < 화면 950+ → 스크롤 여지가 없어 sticky가 깨져 있어도 통과했다. 검증식을 문서높이 > 화면높이일 때만 엄격 판정, 아니면 「스킵」이라고 출력에 적는 방식으로 교정(조용한 통과 금지).
- 재검증 = 운영 26항목 ALL PASS(문서높이 6,019에서 스크롤 후
barY=0) + 스크롤 상태 스크린샷 육안.
⏳ 신동승 차장 몫
- 운영 육안 —
/field/worklog카톡관리에서 여러 행 체크 → 색 표시 확인 → 「저장」 1회. - 감시 데몬 재시작(상승권한) — 호칭 프롬프트 반영. 재시작 전엔 새 이력에 「페페」 재발 가능.