docs(keycloak-session-store): take the sentences out of the diagram canvases

The skill says drawings carry names and sentences go in <desc> and the
paragraph beside the figure. I put sentences in node details and edge labels
instead, and 27 of the 28 diagrams shipped with prose inside the canvas —
"예측 다섯 개가 틀렸다", "아홉 번 조용히 실패했다", "막혀서 닿지 않는다".

Only label and details render on the canvas; description does not. So every
sentence moved to a noun phrase and the meaning stays in description, which
was already carrying it.

  막혀서 닿지 않는다              -> 차단
  아홉 번 조용히 실패했다         -> 조용한 실패 9건
  예측 다섯 개가 틀렸다           -> 틀린 예측 5건
  로그아웃이 정리하지 않는다      -> 로그아웃 미정리
  볼륨이 없으면 여기까지다        -> 볼륨 없음

Three node labels were sentences too and became names: 세션 스냅샷, 예측
선기록, 대조군 확보.

What stays is what the rules protect — identifiers, commands and measured
values: PRIMARY KEY (client_registration_id, principal_name),
ValidationFailedException: 1 changesets check sum, nginx -t && nginx -s
reload, SET LOCAL synchronous_commit TO OFF. Those are names of things, not
prose about them.

294 canvas strings across 28 diagrams, none matching a sentence ending,
average 11 characters. All 28 still lint clean and re-rendered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
DongHyeonka
2026-09-05 11:50:33 +09:00
co-authored by Claude Opus 5
parent 75bed382c8
commit 95c0e680b5
221 changed files with 1156 additions and 1152 deletions
@@ -13,10 +13,10 @@ Q1 은 저장소를 밖으로 빼면 다중 인스턴스와 재시작은 풀리
- **열린 질문 네 개** (component): 설계로는 답할 수 없었다. Evidence: L682L690.
- **저장소 선택** (process): 다중 인스턴스와 재시작은 여기서 풀린다. Evidence: L682L692.
- **스키마와 조회 키** (process): 덮어쓰기와 정리 누락은 여기가 원인이다. Evidence: L682L694.
- **세션 스냅샷이다** (process): 클레임 변경이 반영되지 않는 이유. Evidence: L682L696.
- **세션 스냅샷** (process): 클레임 변경이 반영되지 않는 이유. Evidence: L682L696.
## Relationships
- **열린 질문 네 개 → 저장소 선택:** 먼저 여기를 본다. Evidence: L682L692.
- **저장소 선택 → 스키마와 조회 키:** 여기서 풀리지 않는 것. Evidence: L682L694.
- **스키마와 조회 키 → 세션 스냅샷이다:** 남는 것. Evidence: L682L696.
- **열린 질문 네 개 → 저장소 선택:** 1차 검토. Evidence: L682L692.
- **저장소 선택 → 스키마와 조회 키:** 미해결 잔여. Evidence: L682L694.
- **스키마와 조회 키 → 세션 스냅샷:** 최종 잔여. Evidence: L682L696.
@@ -10,9 +10,9 @@ n1: "저장소 선택" {
n2: "스키마와 조회 키" {
shape: rectangle
}
n3: "세션 스냅샷이다" {
n3: "세션 스냅샷" {
shape: rectangle
}
n0 -> n1: "먼저 여기를 본다"
n1 -> n2: "여기서 풀리지 않는 것"
n2 -> n3: "남는 것"
n0 -> n1: "1차 검토"
n1 -> n2: "미해결 잔여"
n2 -> n3: "최종 잔여"
@@ -5,8 +5,8 @@ digraph techviz {
n0 [label="열린 질문 네 개", shape=box, style="rounded,filled"];
n1 [label="저장소 선택", shape=box, style="rounded,filled"];
n2 [label="스키마와 조회 키", shape=box, style="rounded,filled"];
n3 [label="세션 스냅샷이다", shape=box, style="rounded,filled"];
n0 -> n1 [label="먼저 여기를 본다", style=solid];
n1 -> n2 [label="여기서 풀리지 않는 것", style=solid];
n2 -> n3 [label="남는 것", style=solid];
n3 [label="세션 스냅샷", shape=box, style="rounded,filled"];
n0 -> n1 [label="1차 검토", style=solid];
n1 -> n2 [label="미해결 잔여", style=solid];
n2 -> n3 [label="최종 잔여", style=solid];
}
@@ -11,23 +11,23 @@
<mxCell id="n_store-choice" value="저장소 선택&lt;br/&gt;Redis · PostgreSQL" tooltip="다중 인스턴스와 재시작은 여기서 풀린다. | Evidence: L682-L692" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="70.0" y="227.0" width="160.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_schema" value="스키마와 조회 키&lt;br/&gt;세션 id 가 키에 없다" tooltip="덮어쓰기와 정리 누락은 여기가 원인이다. | Evidence: L682-L694" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxCell id="n_schema" value="스키마와 조회 키&lt;br/&gt;키에 세션 id 없음" tooltip="덮어쓰기와 정리 누락은 여기가 원인이다. | Evidence: L682-L694" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxGeometry x="75.0" y="394.0" width="150.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_snapshot" value="세션 스냅샷이다&lt;br/&gt;재인증까지 옛 값" tooltip="클레임 변경이 반영되지 않는 이유. | Evidence: L682-L696" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxCell id="n_snapshot" value="세션 스냅샷&lt;br/&gt;재인증까지 옛 값" tooltip="클레임 변경이 반영되지 않는 이유. | Evidence: L682-L696" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxGeometry x="75.0" y="561.0" width="150.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="e_q-s" value="먼저 여기를 본다" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_questions" target="n_store-choice">
<mxCell id="e_q-s" value="1차 검토" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_questions" target="n_store-choice">
<mxGeometry relative="1" as="geometry">
<mxPoint x="174.0" y="179.0" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_s-sc" value="여기서 풀리지 않는 것" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_store-choice" target="n_schema">
<mxCell id="e_s-sc" value="미해결 잔여" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_store-choice" target="n_schema">
<mxGeometry relative="1" as="geometry">
<mxPoint x="174.0" y="346.0" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_sc-sn" value="남는 것" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_schema" target="n_snapshot">
<mxCell id="e_sc-sn" value="최종 잔여" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_schema" target="n_snapshot">
<mxGeometry relative="1" as="geometry">
<mxPoint x="174.0" y="513.0" as="offset"/>
</mxGeometry>
@@ -94,11 +94,11 @@
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "먼저 여기를 본다",
"text": "1차 검토",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "먼저 여기를 본다",
"originalText": "1차 검토",
"autoResize": true,
"lineHeight": 1.25
},
@@ -165,9 +165,9 @@
{
"id": "edge-label-s-sc",
"type": "text",
"x": 126.0,
"x": 129.0,
"y": 334.0,
"width": 96,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
@@ -193,11 +193,11 @@
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "여기서 풀리지 않는 것",
"text": "미해결 잔여",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "여기서 풀리지 않는 것",
"originalText": "미해결 잔여",
"autoResize": true,
"lineHeight": 1.25
},
@@ -292,11 +292,11 @@
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "남는 것",
"text": "최종 잔여",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "남는 것",
"originalText": "최종 잔여",
"autoResize": true,
"lineHeight": 1.25
},
@@ -499,11 +499,11 @@
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "스키마와 조회 키\n세션 id 가 키에 없다",
"text": "스키마와 조회 키\n키에 세션 id 없음",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "스키마와 조회 키\n세션 id 가 키에 없다",
"originalText": "스키마와 조회 키\n키에 세션 id 없음",
"autoResize": true,
"lineHeight": 1.25
},
@@ -568,11 +568,11 @@
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "세션 스냅샷이다\n재인증까지 옛 값",
"text": "세션 스냅샷\n재인증까지 옛 값",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "세션 스냅샷이다\n재인증까지 옛 값",
"originalText": "세션 스냅샷\n재인증까지 옛 값",
"autoResize": true,
"lineHeight": 1.25
}
@@ -2,7 +2,7 @@
"harness_version": "0.2.0",
"spec_id": "open-questions-answered",
"spec_version": "1.1",
"spec_sha256": "393e86220223912183fd40cfdd76266b6180959ba3ba863884a18e491631d6e2",
"spec_sha256": "176dac77a298b7d32cd7e1958a7468f496a070983e0ca7cbfc1af1a636e7579c",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "1d44cba1905544d92f1d26ae36a8deb64a3db3914d6b488fd30d6ae7f8cfbabe",
@@ -4,7 +4,7 @@ flowchart TB
n0["열린 질문 네 개"]
n1["저장소 선택"]
n2["스키마와 조회 키"]
n3["세션 스냅샷이다"]
n0 -->|"먼저 여기를 본다"| n1
n1 -->|"여기서 풀리지 않는 것"| n2
n2 -->|"남는 것"| n3
n3["세션 스냅샷"]
n0 -->|"1차 검토"| n1
n1 -->|"미해결 잔여"| n2
n2 -->|"최종 잔여"| n3
@@ -51,14 +51,14 @@
</defs>
<rect class="canvas" width="680" height="677" />
<polyline class="edge kind-request style-solid emphasis-normal" points="150.0,131.0 150.0,179.0 150.0,179.0 150.0,227.0" data-evidence="682-692" />
<rect class="edge-label-bg" x="134.8" y="165.0" width="78.3" height="22" rx="3" />
<text class="edge-label" x="174.0" y="180.0">먼저 여기를 본다</text>
<rect class="edge-label-bg" x="148.2" y="165.0" width="51.5" height="22" rx="3" />
<text class="edge-label" x="174.0" y="180.0">1차 검토</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="150.0,298.0 150.0,346.0 150.0,346.0 150.0,394.0" data-evidence="682-694" />
<rect class="edge-label-bg" x="124.8" y="332.0" width="98.4" height="22" rx="3" />
<text class="edge-label" x="174.0" y="347.0">기서 풀리지 않는 것</text>
<rect class="edge-label-bg" x="144.9" y="332.0" width="58.2" height="22" rx="3" />
<text class="edge-label" x="174.0" y="347.0">미해결 잔</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="150.0,465.0 150.0,513.0 150.0,513.0 150.0,561.0" data-evidence="682-696" />
<rect class="edge-label-bg" x="151.6" y="499.0" width="44.8" height="22" rx="3" />
<text class="edge-label" x="174.0" y="514.0">남는 것</text>
<rect class="edge-label-bg" x="148.2" y="499.0" width="51.5" height="22" rx="3" />
<text class="edge-label" x="174.0" y="514.0">최종 잔여</text>
<g id="node-questions">
<rect class="node-shape kind-component emphasis-primary role-source" data-evidence="682-690" x="73.5" y="60.0" width="153.0" height="71.0" rx="7" />
<text class="node-label" x="150.0" y="87.0">열린 질문 네 개</text>
@@ -75,11 +75,11 @@
<rect class="node-shape kind-process emphasis-warning role-control" data-evidence="682-694" x="75.0" y="394.0" width="150.0" height="71.0" rx="7" />
<text class="node-label" x="150.0" y="421.0">스키마와 조회 키</text>
<line class="node-detail-divider" x1="89.0" y1="442.0" x2="211.0" y2="442.0" />
<text class="node-detail" x="91.0" y="459.0">세션 id 가 키에 없다</text>
<text class="node-detail" x="91.0" y="459.0">키에 세션 id 없음</text>
</g>
<g id="node-snapshot">
<rect class="node-shape kind-process emphasis-warning role-target" data-evidence="682-696" x="75.0" y="561.0" width="150.0" height="71.0" rx="7" />
<text class="node-label" x="150.0" y="588.0">세션 스냅샷이다</text>
<text class="node-label" x="150.0" y="588.0">세션 스냅샷</text>
<line class="node-detail-divider" x1="89.0" y1="609.0" x2="211.0" y2="609.0" />
<text class="node-detail" x="91.0" y="626.0">재인증까지 옛 값</text>
</g>

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB