rewriting-technical-prose-naturally 를 서브에이전트 셋으로 나눠 56편에 적용했다. ai-tells.md 의 첫 절대로 다른 표현으로 바꾸는 대신 문장을 통째로 지웠다. 설명한 것의 중요성을 다시 평가하는 꼬리 19 이미 설명한 것을 추상어로 되풀이 19 독자에게 읽는 법을 지시하거나 오해를 가정 9 자료가 뒷받침하지 않는 덧붙인 이득 4 문서군 전체의 문형 편중도 풀었다 — 함께 27→7(한 묶음), 그대로 22→12(두 묶음), 하게 된다 1→0. 한 편에서 세 번 반복되던 「같은 병이 ~에서도 났다」와 두 기록에 같은 문장으로 있던 세 쌍을 갈랐다. 계약 제목 「여덟 자리」가 본문의 「여덟 곳」과 어긋나 있었다. 제목이 spatial-metaphor 규칙에도 걸리므로 계약과 기록을 함께 「여덟 곳」으로 맞췄다. 검사 넷 전부 통과한다 — check_prose 56편 error 0 · check_body PASS · check_evidence --repo 문제 없음 · verify-tech-log-tree error 0 warn 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
79 lines
3.3 KiB
Markdown
79 lines
3.3 KiB
Markdown
---
|
|
kind: CASE
|
|
slug: an-error-message-that-guessed
|
|
title: 서버는 하나를 답했는데 화면은 추측 셋을 출력했다
|
|
topic: one-thing-many-names
|
|
topicName: 같은 것이 화면마다 다른 이름
|
|
project: TechLog
|
|
status: 게시 전
|
|
lastVerifiedOn: 2026-09-04
|
|
sourceRevision: tech-log@2026-09-02
|
|
source:
|
|
- final/document.md#§13.4
|
|
---
|
|
|
|
# 서버는 하나를 답했는데 화면은 추측 셋을 출력했다
|
|
|
|
작업본 삭제가 실패하면 화면이 「게시됐거나, 참조하는 곳이 있거나, 누가 먼저 고쳤을 수 있습니다」라고 적었다. 세 가지 추측이다. 서버는 정확히 하나를 답하고 있었다.
|
|
|
|
## 관계
|
|
|
|
- **삭제를 막는 이유 다섯 가지가 전부 같은 한 문장으로 나온다**
|
|
이 화면 문구를 고친 뒤에도 남은 문제다.
|
|
- **화면은 못 읽은 것을 없다고 말하지 않는다**
|
|
화면이 모르는 것을 말할 때의 짝이 되는 규칙이다.
|
|
- **한 화면에 종류 이름이 아홉 개 떠 있었다 — 표가 여섯 벌이었다**
|
|
같은 시기에 문구를 한 곳으로 모은 사건이다.
|
|
|
|
## 문제
|
|
|
|
작업본 삭제가 실패하면 화면이 세 가지 추측을 나열했다.
|
|
|
|
서버는 정확히 하나를 답하고 있었다 — 「이 기록을 참조하는 곳이 있어 삭제할 수 없습니다」.
|
|
|
|
## 결론
|
|
|
|
화면이 서버의 답을 쓰지 않고 자기가 가능한 원인을 나열하고 있었다.
|
|
|
|
그래서 버전 충돌이 「사용 중」으로 읽혔다. 어떤 삭제는 되고 어떤 삭제는 안 되는 것을 지켜보는 작성자는 둘을 구분할 방법이 없었다.
|
|
|
|
게이트웨이가 서버의 클라이언트 안전 메시지를 실어 나르고 화면이 그것을 보이게 했다.
|
|
|
|
## 검증 환경
|
|
|
|
tech-log-frontend : 1801414
|
|
tech-log-backend : 857e6a9 — 삭제 거절 사유를 클라이언트 안전 메시지로 답함
|
|
확인 방식 : 실패하는 삭제를 실제로 시도해 화면 문구와 서버 응답을 대조
|
|
|
|
## 재현 조건
|
|
|
|
1. 다른 기록이 참조하는 작업본을 지운다 — 서버가 참조 사유를 답한다
|
|
2. 버전이 어긋난 상태로 작업본을 지운다 — 서버가 다른 사유를 답한다
|
|
3. 두 경우의 화면 문구가 다른지 본다
|
|
|
|
## 본문
|
|
|
|
<!-- body:start -->
|
|
|
|
## 화면이 세 가지를 추측했다
|
|
|
|
화면 문구는 「게시됐거나, 참조하는 곳이 있거나, 누가 먼저 고쳤을 수 있습니다」였다. 세 가지 원인을 나열하고 어느 것인지는 말하지 않는다.
|
|
|
|
서버는 하나를 답하고 있었다. 게이트웨이가 그 답을 버리고 화면이 자기 목록을 그렸다.
|
|
|
|
## 무엇이 구분되지 않았나
|
|
|
|
버전 충돌은 「누가 먼저 고쳤다」이고 참조 존재는 「사용 중」이다. 문구가 셋을 한꺼번에 적으므로 작성자는 둘을 구분할 수 없다.
|
|
|
|
버전 충돌이면 다시 받아서 지우면 되고, 참조가 있으면 그 참조를 먼저 풀어야 한다.
|
|
|
|
## 서버의 답을 실어 나른다
|
|
|
|
게이트웨이가 서버의 클라이언트 안전 메시지를 그대로 싣고 화면이 그것을 보인다.
|
|
|
|
## 확인하지 못한 것
|
|
|
|
서버가 답하는 그 한 문장이 다섯 이유를 다 같은 말로 덮고 있다. 참조 검사가 다섯 테이블을 하나로 묶어 검사하기 때문이고, 그 문제는 아직 열려 있다.
|
|
|
|
<!-- body:end -->
|