← 목록
기타 2026-07-19 5KB 읽기 5분

티옴타톡 — 발견 피드+게이트+예약 서버 통합 (§② 완성)

개요

tok.tiomta.com:9979 티옴타톡 서버에 발견 피드(회차예약.한선) 엔진을 실배선하고, 게이지단계 offset 버그를 정본(§H1 offset=8)으로 교정, 데모 장면 6건을 시드했다.

무엇을 했는지

A. 게이지단계 offset 교정 (회차예약.한선)

  • 기존 raw = 90 + 델타(offset=9, 잘못된 테스트케이스로 구현됨)를
raw = 80 + 델타(offset=8, 스펙 §② 정본)로 교정.
  • 셀프테스트 6케이스 갱신: n=cap→80, n=cap/3→70, n=3×cap→90(상한클램프),
n=cap×3⁻⁸→3(하한클램프), n=0→3, 2회째 호출 재검증.
  • CROWNY_STRICT=1 컴파일 경고 0, 단독 실행 셀프테스트 58/58 PASS.

B. 서버 통합 (티옴타톡서버.한선)

  • 가져오기 "회차예약.한선" 추가.
  • 원장훅 실배선: 회차예약.한선의 _원장훅회차 스텁을 서버 파일 안에서
동일 이름으로 재정의해 실제 원장기록() 호출로 교체 (컴파일러가 "이름 충돌(name conflict)" 경고를 내지만 마지막 정의가 이기는 의도된 오버라이드 — 파일 간 함수명 충돌 하드에러 함정과는 다른 케이스).
  • 신규 라우트 6종: GET /api/feed/scenes(장면+게이지단계 JSON),
GET /api/member/<ID>, POST /api/member/level, POST /api/reserve, GET /api/reserve/my/<회원>, GET /앱 · GET /앱/발견.html(정적 서빙).
  • 기존 라우트(threads/thread/send/recommend/mam/ladder/balance/verify)·
상태줄 테이블 회귀 없음 확인.

C. 시드 데이터

  • data/scenes.psv 6장면 시드(에스텔크림v3 cap6561/울푸드발효액 cap5000/
루디아컬렉션/빠델라디파파식사권 cap5000/더카리스카페권/복간본), 게이지단계가 3~90 전 구간에 분포하도록 cap·예약수 분산.
  • 기존 자체시험 픽스처(members.psv/reserved.psv) 제거, scenes.psv만 유지.

D. 종단 검증 (임시 포트 19979 sed 사본, 원본 소스는 9979 유지)

  • 3파일 CROWNY_STRICT=1 컴파일 경고 0(단 _원장훅회차 의도된 재정의 경고 1건은 예외).
  • /health 200, /api/feed/scenes 6장면(SCN001 cap=6561·count=2187→gaugeStep=70 확인),
회원 여정(신규 0→1 성공, 0→2 직접전이 거부 400), /api/reserve (L0 403 · 헤더누락 403 · L1 성공 201+원장높이 1 · L1→L2 자동전이 확인 · 고마워요 4인 400), /api/reserve/my 200, /앱·/앱/발견.html 200 + Content-Type: text/html; charset=utf-8 + 51414바이트 정상 서빙.
  • 회귀: /api/tok/threads 200, /api/ledger/verify 200, 미등록 경로 404.

신규 VM 함정 발견 (가드레일 템플릿 갱신 대상)

  1. 비교식 그리고(AND) 복합조건은 각 피연산자를 괄호로 감싸야 함
만약 (a == b 그리고 c > d)는 무한루프(잘못된 우선순위 파싱). 만약 ((a == b) 그리고 (c > d))로 반드시 감쌀 것.
  1. 비교식 결과를 변수에 직접 대입하면 무한루프변수 x = (a == b) 단독도
실행 시 무한 반복 출력(같은 줄이 계속 재실행됨). 괄호를 씌워도 재현됨 — 비교 결과는 만약/동안 조건 절에서 직접 평가하고 변수에 먼저 담지 말 것.
  1. BUF_WRITE(버퍼쓰기) 인자 순서 오문서화 — hanseonc_high.c 주석 테이블은
버퍼쓰기(버퍼,위치,값)이라 적혀 있지만, crownyc.c 실제 구현(opcode391)은 버퍼,문자열핸들,오프셋 순으로 pop한다. 즉 3번째 인자를 정수 오프셋으로, 2번째 인자를 문자열 핸들로 취급 — 정수 바이트값을 직접 쓸 수 없다 (문자열이 통째로 오프셋 위치에 복사됨). 바이트 단위 버퍼 조립은 이 API로 시도하지 말 것(이번 세션 URL퍼센트디코더 시도 → 폐기, 대신 알려진 고정 경로 2종을 대문자 비교 리터럴 매칭으로 우회).

이 3건은 ~/.claude/templates/한선씨-가드레일.md에도 반영 필요(다음 세션 담당).

관련 파일

  • /Users/ef/crowny-tiomta/tok/회차예약.한선 — 게이지단계 offset 교정 + 셀프테스트 갱신
  • /Users/ef/crowny-tiomta/tok/티옴타톡서버.한선 — 회차예약 라우트 6종 통합, 원장훅 실배선
  • /Users/ef/crowny-tiomta/tok/data/scenes.psv — 데모 장면 6건 시드
  • /Users/ef/crowny-tiomta/tok/스펙.md — 정본 계약(변경 없음, 참조만)

잔여 이슈

  • 라이브 9979 서비스(.toau)는 이번 세션에서 재컴파일/재기동하지 않음 —
메인 세션이 hanseonc_high 재컴파일 후 LaunchAgent 재기동 필요 (기동 시 TIOMTA_LEDGER_LIB=1 TIOMTA_TOK_LIB=1 TIOMTA_CELL_LIB=1 TIOMTA_ROUND_LIB=1 4개 게이트 전부 plist EnvironmentVariables에 있는지 확인 — 하나라도 누락되면 기동마다 해당 엔진 자체시험이 돌며 data/ 를 rm -f 함).
  • URL 퍼센트디코딩은 /앱·/앱/발견.html 2개 고정 경로만 대문자 리터럴
매칭으로 처리(일반 디코더 아님) — 향후 한글 경로가 늘어나면 위 VM 함정을 피하는 일반 디코더(예: 파일 경유 printf 우회 등)가 필요.