pipeline: make tech-log-tree.json the one decomposition contract and enforce it

리뷰 두 건을 반영했다.

계약
- tech-log-tree.json 하나가 분해 계약이자 색인이다. 사람이 읽는 트리·Node Specification·
  후보 대장은 없어졌고, 문서에 남아 있던 그 개념을 걷어냈다
- candidateScope — 후보를 찾는 SSOT 범위. 접어 넣은 제2부·제3부는 근거이지 후보가 아니다
- sourceRepository — 분석한 저장소의 경로·리비전·판단 근거. 리비전을 모르면 null 로 두고
  지어내지 않는다. 갈래가 여럿이면 revisions
- 검사기: 계약 미채택·PENDING·PROMOTE↔글감 양방향·candidateScope·sourceRepository 를
  error/warn 으로 센다. 옛 스키마도 검사를 피하지 못한다. 테스트 22 → 31

기록 쓰기
- 템플릿 5종에 source·sourceRevision·topicName, Question 에 닫는 조건, 본문 없는 종류에서
  assets 제거. 고정 절 개수 삭제
- check_evidence.mjs — 인용한 코드가 SSOT 에 있는지, 앵커가 SSOT 를 가리키는지, 제목이
  계약과 같은지, 리비전이 저장소에 있는지. 게시된 기록에서 SSOT 와 다른 URL 을 잡았다

문체
- 문체 규칙의 정본을 ai-tells.md 로. explaining.md 의 질문체 제목·절 끝 대조 반복·그림 예고
  규칙을 삭제해 충돌을 없앴다. 첫 절 「설명 뒤에 평가를 붙이지 않는다」에 지우는 사례 네 유형
- voice 스킬의 「독자 쪽을 본다」를 자료에 오독 기록이 있을 때로 좁히고, 평가만 더한 예시를 교체
- check_prose: 안내 문장을 요구하던 경고 제거, 문장이 끝나지 않은 채 문단이 끝나는 조각 검사 추가

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
DongHyeonka
2026-09-07 12:39:20 +09:00
co-authored by Claude Fable 5.1
parent 73026cada6
commit 9d2a3725c5
54 changed files with 3583 additions and 871 deletions
@@ -3,11 +3,15 @@ id: <Studio 가 준 uuid. 아직 없으면 빈 값>
kind: CASE
slug: <slug>
title: <제목>
topic: <주제 이름>
topic: <topic-slug — 폴더 이름과 같다>
topicName: <화면에 보이는 주제 이름>
project: <프로젝트 이름>
status: 게시 전
studio: "<편집 화면 주소. 아직 없으면 빈 값>"
lastVerifiedOn: <실제로 확인한 날 또는 빈 값>
source:
- final/document.md#<anchor>
sourceRevision: <분석한 리비전>
assets:
- key: <본문의 :::evidence key 와 같은 값>
file: <../../../final/assets/… 상대 경로>
@@ -44,6 +48,6 @@ evidence:
<!-- body:start -->
<rich Case body>
<rich Case body — 절은 주장 하나와 그 근거가 이어지는 단위로 나눈다. 정해진 개수는 없다>
<!-- body:end -->
@@ -3,11 +3,15 @@ id: <Studio 가 준 uuid. 아직 없으면 빈 값>
kind: CONCEPT
slug: <slug>
title: <제목>
topic: <주제 이름>
topic: <topic-slug — 폴더 이름과 같다>
topicName: <화면에 보이는 주제 이름>
project: <프로젝트 이름>
status: 게시 전
studio: "<편집 화면 주소. 아직 없으면 빈 값>"
basisVersion: <무엇을 보고 썼는지. 예 Keycloak 26.7.0 · oidc-client-ts 3.3.0>
source:
- final/document.md#<anchor>
sourceRevision: <분석한 리비전>
assets:
- key: <본문의 :::evidence key 와 같은 값>
file: <../../../final/assets/… 상대 경로>
@@ -34,6 +38,8 @@ evidence:
## <단계마다 실제로 일어나는 일>
<설명할 단계가 몇 개인지가 절의 개수를 정한다. 미리 정해 둔 수에 맞추지 않는다>
## <그 설계가 막지 않는 것>
## <지금 확인한 범위>
@@ -3,18 +3,24 @@ id: <Studio 가 준 uuid. 아직 없으면 빈 값>
kind: PROJECT_DECISION
slug: <slug>
title: <제목>
topic: <주제 이름>
topic: <topic-slug — 폴더 이름과 같다>
topicName: <화면에 보이는 주제 이름>
project: <프로젝트 이름>
status: 게시 전
studio: "<편집 화면 주소. 아직 없으면 빈 값>"
decisionStatus: PROPOSED
assets:
- key: <본문의 :::evidence key 와 같은 값>
file: <../../../final/assets/… 상대 경로>
source:
- final/document.md#<anchor>
sourceRevision: <분석한 리비전>
evidence:
- <../../../final/evidence/raw/… 상대 경로>
---
<!--
본문이 없는 종류라 `assets` 를 두지 않는다. 칸이 평문으로 렌더링되므로 그림과 코드블록은
표시되지 않는다. 그런 자료는 근거로 건 Case 나 Concept 에 담는다.
-->
# <title>
<summary>
@@ -3,18 +3,24 @@ id: <Studio 가 준 uuid. 아직 없으면 빈 값>
kind: QUESTION
slug: <slug>
title: <제목>
topic: <주제 이름>
topic: <topic-slug — 폴더 이름과 같다>
topicName: <화면에 보이는 주제 이름>
project: <프로젝트 이름>
status: 게시 전
studio: "<편집 화면 주소. 아직 없으면 빈 값>"
questionStatus: OPEN
assets:
- key: <본문의 :::evidence key 와 같은 값>
file: <../../../final/assets/… 상대 경로>
source:
- final/document.md#<anchor>
sourceRevision: <분석한 리비전>
evidence:
- <../../../final/evidence/raw/… 상대 경로>
---
<!--
본문이 없는 종류라 `assets` 를 두지 않는다. 칸이 평문으로 렌더링되므로 그림과 코드블록은
표시되지 않는다. 그런 자료는 Case 나 Concept 에 담고 `관계`로 가리킨다.
-->
# <title>
<summary of unresolved issue>
@@ -49,3 +55,5 @@ evidence:
## 다음 검증
1. <next concrete verification>
닫는 조건 : <어떤 결과가 나오면 이 질문을 닫거나 Decision 으로 넘기는가>
@@ -3,17 +3,24 @@ id: <Studio 가 준 uuid. 아직 없으면 빈 값>
kind: REFERENCE
slug: <slug>
title: <제목>
topic: <주제 이름>
topic: <topic-slug — 폴더 이름과 같다>
topicName: <화면에 보이는 주제 이름>
project: <프로젝트 이름>
status: 게시 전
studio: "<편집 화면 주소. 아직 없으면 빈 값>"
assets:
- key: <본문의 :::evidence key 와 같은 값>
file: <../../../final/assets/… 상대 경로>
source:
- final/document.md#<anchor>
sourceRevision: <분석한 리비전>
evidence:
- <../../../final/evidence/raw/… 상대 경로>
---
<!--
본문이 없는 종류라 `assets` 를 두지 않는다. 이 기록의 칸은 평문으로 렌더링되므로 그림도
코드블록도 표시되지 않는다. 그림이 필요한 내용은 Case 나 Concept 에 담고 `관계`로 가리킨다.
`evidence` 는 이 기록이 인용한 측정 자료의 출처이고 화면에는 나오지 않는다.
-->
# <title>
<summary>