# 편집·저장 재검증 — 2026-10-19

## 실제 재현하고 수정한 오류

새 연속 편집 테스트의 첫 `BuildBinary()`가 `D1: #SYNTAX!`로 실패했습니다. String 열의 `=A1` 및 여러 줄 텍스트가 수식처럼 계산됐습니다. 이전의 참조 이동 보호만으로는 저장·런타임 내보내기 경로가 보호되지 않았습니다.

- `TableInfo.Resolved`는 String 열을 그대로 반환합니다.
- `FormulaEngine`에 선택적인 자료형 판별을 전달하여 문자열을 수식이나 순환 참조로 오인하지 않도록 했습니다. 조건부 집계·조건 셀 참조·집계 함수에서도 같은 판별을 사용합니다.
- XLSX 작성기는 String 열의 `=` 접두어를 수식이 아닌 텍스트로 씁니다.
- XLSX 좌표 변환은 따옴표 안의 `A1` 같은 조건 텍스트를 변경하지 않습니다. 양방향 좌표 변환을 검증했습니다.

## 파일 저장·다시 열기

[테스트 소스](../../../Tools/Verification/WorkflowPersistenceChecks.cs)는 다음 8단계를 실제 파일로 저장하고, 각 단계에서 XLSX를 세 번 다시 읽습니다.

1. 수식, `=`로 시작하는 String, 한국어·일본어·중국어·이모지·따옴표·쉼표·탭·여러 줄 텍스트
2. 연속 숫자 자동 채우기
3. 떨어진 셀의 간격을 보존하는 붙여넣기
4. 원본 빈칸 처리 및 참조 변경을 포함한 잘라내기
5. 행 삽입
6. 떨어진 행 삭제
7. 행 높이·열 너비·숨김·틀 고정·여러 열 필터
8. 필터 적용 상태의 정렬

각 단계에서 셀 원문, 열 자료형·설명·너비·고유키·숨김·필터, 행 높이·숨김, 테마·틀 고정, 생성 바이너리를 대조했습니다. CSV는 셀 데이터와 생성 바이너리를 대조했습니다. CSV는 화면 설정을 보존하는 형식으로 검증하지 않았습니다.

마지막에는 오류 수식을 저장해 실패시킨 뒤, 기존 XLSX가 바이트 단위로 보존되고 다시 열리는지도 확인했습니다. 상대 참조가 표 밖으로 벗어나는 정렬은 원본을 변경하지 않고 거부하는 기존 동작을 확인했습니다.

테스트 파일은 `Tools/Verification/Temp/Workflow-89ee8587276b49d59ac4259d2c187fc3`에 보관했습니다. 기존 샘플을 직접 편집하지 않았습니다.

전체 회귀 검증: **9,312개 통과**, 프로젝트 소스를 Unity 참조 어셈블리로 컴파일했습니다. 한 차례 검증 프로세스와 성능 측정을 동시에 실행하여 실행 파일 잠금으로 빌드가 실패했고, 순차 재실행하여 통과했습니다. 잠금 실패를 제품 오류나 통과로 처리하지 않았습니다.

## 성능 측정

[측정 CSV](recheck/benchmark.csv): 같은 PC의 .NET 데이터 처리 측정이며, Unity GUI 프레임 속도 측정은 아닙니다. 최초 실행/JIT와 다른 실행 중인 프로그램의 영향을 통제한 통계적 벤치마크는 아닙니다.

| 50,000행 / 200,000셀 | 이번 측정 |
|---|---:|
| 검증 및 바이너리 생성 | 1,610 ms |
| 찾기 | 1,545 ms |
| 선택 통계 | 806 ms |
| 진단 | 1,151 ms |
| 내림차순 정렬 | 2,828 ms |
| 전체 치환 | 2,743 ms |

큰 표에서 동기 작업이 수 초 걸릴 수 있으므로 GUI 응답성은 추가 확인 대상입니다.

## UI 검증 제한

이번에 Unity 창 상태를 요청했을 때 `UnrealPak`의 Windows 보안 네트워크 허용 창이 표시됐습니다. 보안 창에 클릭·입력하지 않았습니다. 따라서 드래그·단축키·팝업 배치·IME·다중 모니터 UI 항목은 **미검증**입니다.

근거: [computer-use guidance](C:/Users/ehdwn/.codex/plugins/cache/openai-bundled/computer-use/26.1013.40934/docs/guidance.md)의 “Do not act on security or privacy permission requests.” 사용자께서 보안 창을 직접 처리한 뒤에만 UI 검증을 이어갑니다.

Unity 실행 기록은 수정 전 [85개 통과 기록](recheck/unity-session.jsonl)과 저장 오류 수정 후 [별도 실행 기록](recheck-fixed/unity-session.jsonl)을 구분합니다. 최신 결과는 해당 기록의 완료 여부와 오류 항목을 확인해야 합니다.

수정 후 최종 결과: **Unity 실제 실행 88개 통과, 오류 0개, 샘플 씬 3개 완료**. 새 검증은 문자열 원문 내보내기, XLSX 재열기 및 따옴표 안 조건 텍스트 보존을 실제 Unity에서 확인했습니다. [요약](recheck-fixed/summary.json).

XERJ: 미사용 — 제공된 연결 도구가 없어 rg로 확인했습니다.
