nexus 감사 리플레이 심화 — 결정 재현·what-if 시뮬레이션
개요
nexus.crowny.org 규칙기반 의사결정 감사 콘솔(감사서버.js :9802)에 파운드리식 리플레이 2축을 심화.
①결정 재현(결정론 검증) ②what-if 반사실 시뮬레이션(팩트 변경→규칙 재평가+전 규칙 트레이스).
무엇을 했는지
- trace() 엔진(감사서버.js): 규칙엔진.한선 조건매칭을 JS로 미러 — =/<=/>=(정수) AND(;), first-match, catch-all(빈조건). 반환=발동규칙 + 전 규칙 {규칙,조건,결정,사상,매칭,발동} 트레이스.
- POST /api/replay {입력,원본사상}→넥서스.결정(입력) 재실행→{사상,출력,발동규칙,일치}. 결정론 검증.
- POST /api/whatif {규칙표,팩트}→trace(규칙표,팩트). 승인/배분/일정 3규칙표 전환.
- 프론트: 감사 각 행 ↻재현 버튼(일치 ✓/✗ 표시) + what-if 시뮬레이터 패널(규칙표 드롭다운+팩트입력+평가→발동규칙 강조·전 규칙 트레이스 색상 렌더).
검증(실측)
- replay "인건비 채용 400만원 승인"→음(R9), 일치=true (결정론 확인).
- whatif 자본지출 500만원→R10 임원승인(옴) 발동. 트레이스에 R18·R20도 매칭이나 first-match로 미발동 노출.
- 반사실: 40만원 유형만 변경→접대 R4반려(타)·운영비 R5자동(티)·인건비 R8팀장(옴)·구매 R13팀장(옴) 4갈래 분기.
- 배분규칙표 충분=1→R1 전량배정(티). GET / 200, 라이브 report R36 서빙.
관련 파일
- /Users/ef/crowny-butler/감사서버.js (trace, /api/replay, /api/whatif, 프론트)
- /Users/ef/crowny-butler/넥서스.js (결정 재현 대상 마스터 디스패처)
- /Users/ef/crowny-butler/libs/규칙엔진.한선 (trace 미러 정본)
- /Users/ef/crowny-butler/data/{승인규칙2,배분규칙,일정규칙}.psv
- /Users/ef/crowny-ai/public/hansuner/report/index.html (R36)
잔여 이슈
- trace()는 JS 미러 — 규칙엔진.한선과 로직 동치이나 별도 구현. 규칙엔진.toau를 직접 호출해 트레이스까지 반환하면 단일 정본화 가능(현재 규칙엔진은 발동규칙만 반환, 전 트레이스 미반환).
- 규칙 편집 UI(비개발자 규칙표 편집) 미착수.
추가 (단일 정본화 완료 — 같은 날)
규칙엔진.한선에
트레이스 모드 추가("트레이스|경로|팩트"→줄단위 "R우선|조건|결정|사상|매칭|발동"). 정상 모드 하위호환 유지(트레이스모드=0). 감사서버.js의 JS 미러 trace()를 제거하고
정본 규칙엔진.toau 직접 호출(spawnSync)로 교체 — trace 로직 정본이 이제 규칙엔진.한선 단일본. 재검증: 자본지출 500만→20규칙 트레이스·R10 발동·R18/R20 매칭노출, 반사실 40만원 유형별 타/티/옴/옴 4갈래 (JS 미러와 완전 일치). 남은 JS는 spawnSync 오케스트레이션 글루뿐.
→ 잔여이슈 "단일 정본화" 해소. 다음 후보=규칙 편집 UI(비개발자 규칙표 편집).