주제 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>
4.0 KiB
kind, slug, title, topic, topicName, project, status, sourceRevision, source
| kind | slug | title | topic | topicName | project | status | sourceRevision | source | |
|---|---|---|---|---|---|---|---|---|---|
| CASE | an-operation-you-can-see-but-cannot-call | 타입에는 보이는데 부를 수 없는 연산이 네 번 나왔다 | declared-but-not-implemented | 계약에 선언만 있고 구현이 없다 | TechLog | 게시 전 | tech-log@2026-09-02 |
|
타입에는 보이는데 부를 수 없는 연산이 네 번 나왔다
계약에서 타입이 생성되므로 에디터에서는 그 연산이 멀쩡히 보인다. 기여 목록에 등록하지 않으면 실행할 때 부를 수가 없고, 게이트웨이는 다른 연산으로 떨어진다. 개념 화면이 질문 조회를 부르고 개념 삭제가 질문 삭제를 불렀다. 같은 누락을 네 번 만났다.
관계
- 계약에 선언만 있고 구현이 없어 화면 다섯 곳이 비어 있었다 이쪽은 서버에 구현이 없었고, 여기서는 프론트가 등록을 빠뜨렸다.
- 계약과 구현은 서버와 화면 양쪽에서 전수 대조한다 이 누락을 잡는 가드가 그 기준에 있다.
- 구현이 종류를 좁게 적어도 넓은 포트를 만족했다 같은 개념 삭제 경로에서 타입 검사가 통과시킨 다른 결함이다.
문제
관리 계약의 연산은 tech-log-management-contract-contribution.ts 에 등록해야 실행 시 부를 수 있다. 계약에서 타입은 생성되므로 등록을 빠뜨려도 컴파일은 통과한다.
등록되지 않은 연산을 부르면 게이트웨이가 그 연산을 찾지 못하고 옆의 분기로 떨어진다. 그래서 증상이 「없는 연산」이 아니라 「다른 연산이 실행됨」으로 나온다.
결론
네 번 났고 전부 같은 원인이었다.
getPublicConcept : 개념 화면이 질문 조회를 불렀다
deleteConceptDraft : 개념 삭제가 질문 삭제를 불렀다
listStudioQuestions · listStudioProjectDecisions : 홈 편집기가 빈 목록을 그렸다
축(variant) CRUD 네 연산 : 축 화면이 데이터를 받지 못했다
공개 계약은 전수 대조하고, 관리 계약은 「한 종류만 빠진 항목」을 보는 가드를 뒀다. 깨진 것이 늘 그 모양이었다.
검증 환경
tech-log-frontend : 15e6ea8 이후 계약 : studio-management-v1 86 operation · public-v1 20 operation 확인 방식 : 계약이 선언한 연산과 기여 목록을 대조하는 테스트
재현 조건
- 계약에 연산을 더하고 타입을 생성한다
- 기여 목록에 등록하지 않은 채 그 연산을 부르는 화면을 연다
- 개발자도구 네트워크에서 실제로 나가는 경로를 본다 — 등록된 다른 연산의 경로가 나간다
본문
등록하지 않으면 옆으로 떨어진다
개념 삭제가 계속 질문 삭제 경로로 나갔고, 배포된 번들에서 서버 로그에 DELETE /api/v1/studio/questions/{id} 404 가 찍혔다. 개념 상세 주소도 마찬가지로 질문 조회를 불러 404 를 받았다.
증상이 「연산을 찾을 수 없습니다」였다면 바로 보였을 것이다. 게이트웨이가 옆 분기로 떨어지므로 서버는 정상적으로 응답하고, 다만 다른 기록을 다룬다.
네 번의 누락
getPublicConcept— 개념 화면이 질문 조회를 불렀다deleteConceptDraft— 개념 삭제가 질문 삭제를 불렀다listStudioQuestions와listStudioProjectDecisions— 홈 편집기가 빈 목록을 그렸다- 축(variant) CRUD 네 연산 — 축 화면이 데이터를 받지 못했다
가드 둘
축 CRUD 를 더한 커밋에서 가드를 둘 넣었다. 공개 계약은 전수 대조한다 — 계약이 선언한 연산이 기여 목록에 전부 있는지 본다. 관리 계약은 86 operation 이라 전수 대조가 무겁고, 대신 「한 종류만 빠진 항목」을 본다.
확인하지 못한 것
관리 계약 쪽 가드는 종류가 빠진 것만 본다. 연산 전체를 빠뜨리는 경우는 이 가드가 잡지 않고, 그 상태를 만들어 확인하지도 않았다.