주제 13개 · Case 28 · Concept 5 · Reference 15 · Question 4 · Decision 4. 계약의 노드마다 종류가 요구하는 칸을 채우고, 본문이 있는 두 종류에는 SSOT 가 이미 그려 둔 도식 셋(value-boundaries · decision-path-404 · topic-variant-model)을 tech-log-studio/ 로 옮겨 붙였다. 새로 그린 그림은 없다. 검사 셋 전부 통과한다. check_body.mjs 56 편 중 본문이 있는 33 편 PASS check_prose.mjs 56 편 error 0 check_evidence.mjs --repo 포함 문제 없음 verify-tech-log-tree.py 프로젝트 5 · error 0 · warn 0 인용한 코드블록은 전부 SSOT 에서 찾아 대조했다. check_evidence.mjs 가 본문의 각 줄과 source 앵커와 계약 제목을 다시 확인한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
87 lines
3.7 KiB
Markdown
87 lines
3.7 KiB
Markdown
---
|
|
kind: CASE
|
|
slug: it-said-there-were-no-open-questions
|
|
title: 「이 프로젝트에 열린 질문이 없습니다」 — 실제로는 넷이 있었다
|
|
topic: failure-drawn-as-absence
|
|
topicName: 실패를 없음으로 그린다
|
|
project: TechLog
|
|
status: 게시 전
|
|
lastVerifiedOn: 2026-09-04
|
|
sourceRevision: tech-log@2026-09-02
|
|
source:
|
|
- final/document.md#§10.1
|
|
---
|
|
|
|
# 「이 프로젝트에 열린 질문이 없습니다」 — 실제로는 넷이 있었다
|
|
|
|
홈 「지금 집중하는 것」 편집기가 「이 프로젝트에 열린 질문이 없습니다」라고 적었다. 실제로는 넷이 있었고 공개 사이트에도 나오고 있었다. 편집기가 질문과 결정을 못 읽으면 빈 배열로 삼키고 있었다.
|
|
|
|
## 관계
|
|
|
|
- **화면은 못 읽은 것을 없다고 말하지 않는다**
|
|
이 사건에서 굳힌 규칙이다.
|
|
- **계약에 선언만 있고 구현이 없어 화면 다섯 곳이 비어 있었다**
|
|
못 읽은 원인이 그 기록에 있다 — 컨트롤러가 없었다.
|
|
- **한 칸의 실패가 옆 칸을 끌고 내려갔다**
|
|
같은 편집기에서 난 다른 부류의 실패다.
|
|
|
|
## 문제
|
|
|
|
홈 편집기에서 「지금 집중하는 것」에 걸 질문을 고르려 했다. 목록이 비어 있고 「이 프로젝트에 열린 질문이 없습니다」가 적혀 있었다.
|
|
|
|
같은 프로젝트의 공개 사이트에는 질문 넷이 나오고 있었다.
|
|
|
|
## 결론
|
|
|
|
편집기가 질문과 결정 목록을 못 읽으면 빈 배열로 삼키고 있었다. 서버는 404 를 주고 있었다 — 그 두 연산에 컨트롤러가 없었다.
|
|
|
|
작성자에게는 「아직 안 쓴 것」으로 읽힌다. 실제로는 쓴 것을 못 읽은 것이다.
|
|
|
|
> 거짓말을 하느니 못 읽었다고 말한다.
|
|
|
|
못 읽었을 때 못 읽었다고 적게 고쳤다. 같은 판단을 주제 탭에도 적용했다 — 탭 하나를 못 받아도 탭 줄과 나머지는 그대로 남고, 못 받은 탭에는 못 받았다고 적는다.
|
|
|
|
## 검증 환경
|
|
|
|
tech-log-frontend : 7acde27 · 3bb724b
|
|
tech-log-backend : 911e8ba — 없던 두 컨트롤러를 구현
|
|
확인 방식 : 편집기 목록과 공개 사이트의 같은 프로젝트를 대조
|
|
|
|
## 재현 조건
|
|
|
|
1. 프로젝트에 Open Question 을 하나 이상 게시한다
|
|
2. 그 목록을 주는 연산을 서버에서 막는다
|
|
3. 홈 편집기를 연다 — 옛 코드에서는 「없습니다」가, 지금은 못 읽었다는 문구가 나온다
|
|
|
|
## 본문
|
|
|
|
<!-- body:start -->
|
|
|
|
## 빈 배열이 두 가지를 뜻했다
|
|
|
|
편집기는 질문 목록을 받아 고를 수 있게 그린다. 목록이 비면 「이 프로젝트에 열린 질문이 없습니다」를 적는다.
|
|
|
|
요청이 실패했을 때도 빈 배열이 되고 있었다. 그래서 「없다」와 「못 읽었다」가 같은 화면이 됐다.
|
|
|
|
## 작성자가 무엇으로 읽었나
|
|
|
|
작성자는 자기가 쓴 것과 화면을 대조한다. 화면이 「없습니다」라고 하면 아직 안 썼거나 게시하지 않았다고 읽는다.
|
|
|
|
이 경우에는 넷이 있었고 공개 사이트에도 나오고 있었다. 편집기만 못 읽고 있었다.
|
|
|
|
## 못 읽었다고 적는다
|
|
|
|
> 거짓말을 하느니 못 읽었다고 말한다.
|
|
|
|
요청이 실패하면 실패했다고 적는다. 0건은 0건이라고 적는다. 이 둘을 구분할 수 있어야 작성자가 다음에 무엇을 할지 정할 수 있다.
|
|
|
|
## 같은 판단을 다른 화면에
|
|
|
|
주제 탭에도 같은 판단을 적용했다. 탭 하나를 못 받아도 탭 줄과 나머지 탭은 그대로 그려지고, 못 받은 탭에는 못 받았다고 적는다.
|
|
|
|
## 확인하지 못한 것
|
|
|
|
화면이 못 읽은 것을 없다고 그리는 곳을 전수로 세지 않았다. 고친 것은 홈 편집기와 주제 탭 둘이다.
|
|
|
|
<!-- body:end -->
|