← 목록
기타 2026-07-18 4KB 읽기 4분

Crowny Factory 서버 (factory.crowny.org:8300) — 1차 구현

개요

/Users/ef/crowny-factory/서버.한선 — 팩토리엔진.한선(SSOT) 배선 + PSV append-log 영속 + EV 연계 HTTP 서버. CROWNY_STRICT=1 컴파일 경고 0, 전체 API 스모크 + 재기동 상태복원 검증 PASS.

무엇을 했는지

  • 정적: GET /, GET /앱public/앱.html 서빙 (파일소켓전송)
  • GET: health, manifest(connectors+learn_stats), kpi, slots, vins, po, lots, jigs, certs, process, process/sop?id=, fab/card?id=
  • POST: po/order, lot/pass, lot/deviate, vin/andon-clear, vin/move, vin/torque, eol/pass, ship/confirm, knowhow/add, knowhow/adopt, ev/pull?id=
  • 상태모델: data/이벤트.psv append-only (ts|kind|id|f1|f2|f3|f4|audit), "현재값"=kind+id 매칭 마지막 행(latest-wins) — 재기동 시 파일이 그대로 남아 자동 복원(별도 재생 루프 불필요).
  • EV 연계(POST /api/ev/pull?id=): 원시소켓 대신 체계()+curl -m 5ev.crowny.org:9616/api/erp/order 호출(소켓받기 recv 타임아웃 없음 함정 회피). id는 [A-Za-z0-9_-]만 허용해 커맨드 인젝션 차단. EV 다운/404 시 ok:0 정직 응답(폴백 목 없음) — 라이브 확인.
  • 서버는 판정로직 없이 팩토리엔진.한선의 *_유효/*_전이/*_감사로그 함수만 호출(SSOT 원칙 준수).

★VM 함정 신규 발견 (2026-07-18)

버퍼파일읽기+버퍼문자열+버퍼해제 조합을 중첩 함수 반환 체인 안에서 쓰면(예: A→B→C 3단 호출, C가 버퍼로 파일을 읽어 반환) 버퍼해제()가 스택에 잔여값을 남겨, 그 반환값이 상위에서 "리터럴" + 함수호출() 형태로 인라인 연결될 때 리터럴이 증발하고 잔여값("0")만 출력되는 콜프레임 오염이 재현됨(기존 기록된 정규매치 인자중첩 함정과 동일 계열). 격리 재현 스크립트로 확인 — 함수 결과를 변수에 먼저 담아도 최종 호출부가 inline concat이면 재발.
  • 우회: 읽기()(64KB 절단 있음) 사용. 본 서버 이벤트로그는 세션 규모상 64KB 이내라 안전.
  • ~/.claude/templates/한선씨-가드레일.md에도 반영 필요(잔여 이슈).

관련 파일

  • /Users/ef/crowny-factory/서버.한선 (신규, ~700줄)
  • /Users/ef/crowny-factory/팩토리엔진.한선 (SSOT, 기존)
  • /Users/ef/crowny-factory/data/이벤트.psv (런타임 생성, 검증 후 비움)
  • /Users/ef/crowny-factory/public/앱.html (기존 UI, fetch 경로 그대로 매칭)

검증 결과

  1. CROWNY_STRICT=1 hanseonc_high 서버.한선 → 경고 0
  2. 포그라운드 기동 → curl 스모크: health 200, slots/vins/po/lots/jigs/certs/process 배열 정상, po/order 전이+이벤트append 확인, eol/pass 순차위반 거부(ok:-1)+정상통과+재위반거부 확인, lot/pass·lot/deviate(합격후 거부) 확인, vin/andon-clear·vin/move(SSOT 서버측 재계산)·vin/torque 확인, knowhow/add→knowhow/adopt(SOP버전+1, maam보상) 확인, process/sop JSON 파싱 가능(python json.tool) 확인, ev/pull 라이브 EV 주문 연동 성공 + 404 정직응답 + id 인젝션 차단 확인, / 앱.html 서빙(85405B) 확인
  3. 서버 kill → 재기동 → po 상태·vin cell/andon/torque·lot 합격·EV-pull 신규슬롯·eolDone 위치 전부 복원 확인
  4. kill 정리 완료, data/이벤트.psv 검증 후 비움(운영 시작은 오케스트레이터/사용자 기동)

잔여 이슈

  • 포트 8300은 crowny-ports.sh에 이미 등록되어 있음(사전조건 충족, 별도 조치 불필요)
  • LaunchAgent 등록/영속 기동은 이번 작업 범위 밖(가드레일 5번 — 오케스트레이터가 처리)
  • 버퍼파일읽기 계열 VM 함정은 가드레일 문서 갱신 필요(다른 세션 재발 방지)