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
@@ -10,13 +10,13 @@
## Elements and evidence
- **예측을 먼저 적는다** (process): 결과를 보고 나면 정직하게 쓸 수 없다. Evidence: L744L752.
- **주입이 걸렸는지 확인** (process): 아무 일도 없었다와 영향이 없다를 가른다. Evidence: L744L752.
- **대조군을 잡는다** (process): 가장 자주 어겨졌고 가장 비쌌다. Evidence: L744L753.
- **예측 선기록** (process): 결과를 보고 나면 정직하게 쓸 수 없다. Evidence: L744L752.
- **주입 검증** (process): 아무 일도 없었다와 영향이 없다를 가른다. Evidence: L744L752.
- **대조군 확보** (process): 가장 자주 어겨졌고 가장 비쌌다. Evidence: L744L753.
- **결론** (component): 세 단계를 거친 것만 남긴다. Evidence: L744L753.
## Relationships
- **대조군을 잡는다 → 결론:** 귀속. Evidence: L744L753.
- **예측을 먼저 적는다 → 주입이 걸렸는지 확인:** 주입 뒤. Evidence: L744L752.
- **주입이 걸렸는지 확인 → 대조군을 잡는다:** 관측 전. Evidence: L744L752.
- **대조군 확보 → 결론:** 귀속. Evidence: L744L753.
- **예측 선기록 → 주입 검증:** 주입 뒤. Evidence: L744L752.
- **주입 검증 → 대조군 확보:** 관측 전. Evidence: L744L752.
@@ -1,13 +1,13 @@
# 틀린 예측이 남긴 것
# Question: 예측을 지우지 않고 남기면 무엇이 달라지는가
direction: down
n0: "예측을 먼저 적는다" {
n0: "예측 선기록" {
shape: rectangle
}
n1: "주입이 걸렸는지 확인" {
n1: "주입 검증" {
shape: rectangle
}
n2: "대조군을 잡는다" {
n2: "대조군 확보" {
shape: rectangle
}
n3: "결론" {
@@ -2,9 +2,9 @@ digraph techviz {
graph [rankdir=TB, splines=ortho, nodesep=0.55, ranksep=0.85];
node [fontname=Helvetica, fontsize=11, margin="0.18,0.12", style="rounded,filled", fillcolor=white, color="#2d4357", penwidth=1.5];
edge [fontname=Helvetica, fontsize=10, color="#364b5f", penwidth=1.4, arrowsize=0.75];
n0 [label="예측을 먼저 적는다", shape=box, style="rounded,filled"];
n1 [label="주입이 걸렸는지 확인", shape=box, style="rounded,filled"];
n2 [label="대조군을 잡는다", shape=box, style="rounded,filled"];
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];
@@ -5,13 +5,13 @@
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="n_predict" value="예측을 먼저 적는다&lt;br/&gt;예측 다섯 개가 틀렸다" tooltip="결과를 보고 나면 정직하게 쓸 수 없다. | Evidence: L744-L752" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxCell id="n_predict" value="예측 선기록&lt;br/&gt;틀린 예측 5건" tooltip="결과를 보고 나면 정직하게 쓸 수 없다. | Evidence: L744-L752" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="70.0" y="60.0" width="150.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_verify" value="주입이 걸렸는지 확인&lt;br/&gt;아홉 번 조용 실패했다" tooltip="아무 일도 없었다와 영향이 없다를 가른다. | Evidence: L744-L752" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxCell id="n_verify" value="주입 검증&lt;br/&gt;조용 실패 9건" tooltip="아무 일도 없었다와 영향이 없다를 가른다. | Evidence: L744-L752" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="70.0" y="227.0" width="150.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_control" value="대조군을 잡는다" tooltip="가장 자주 어겨졌고 가장 비쌌다. | Evidence: L744-L753" 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_control" value="대조군 확보" tooltip="가장 자주 어겨졌고 가장 비쌌다. | Evidence: L744-L753" 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="70.0" y="394.0" width="150.0" height="64.0" as="geometry"/>
</mxCell>
<mxCell id="n_conclusion" value="결론" tooltip="세 단계를 거친 것만 남긴다. | Evidence: L744-L753" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
@@ -361,11 +361,11 @@
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "예측을 먼저 적는다\n예측 다섯 개가 틀렸다",
"text": "예측 선기록\n틀린 예측 5건",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "예측을 먼저 적는다\n예측 다섯 개가 틀렸다",
"originalText": "예측 선기록\n틀린 예측 5건",
"autoResize": true,
"lineHeight": 1.25
},
@@ -430,11 +430,11 @@
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "주입이 걸렸는지 확인\n아홉 번 조용 실패했다",
"text": "주입 검증\n조용 실패 9건",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "주입이 걸렸는지 확인\n아홉 번 조용 실패했다",
"originalText": "주입 검증\n조용 실패 9건",
"autoResize": true,
"lineHeight": 1.25
},
@@ -499,11 +499,11 @@
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "대조군을 잡는다",
"text": "대조군 확보",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "대조군을 잡는다",
"originalText": "대조군 확보",
"autoResize": true,
"lineHeight": 1.25
},
@@ -2,7 +2,7 @@
"harness_version": "0.2.0",
"spec_id": "wrong-predictions",
"spec_version": "1.1",
"spec_sha256": "1e7e2e947e2590ba086c056c82cf6d3fe4455c4c4137eb380c05c2495396ae8e",
"spec_sha256": "9afb114a63c78ec63e9c3dbafe7c902ccca77be9b9745ddebaf832f1ea2842cd",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "1d44cba1905544d92f1d26ae36a8deb64a3db3914d6b488fd30d6ae7f8cfbabe",
@@ -1,9 +1,9 @@
%% 틀린 예측이 남긴 것
%% question: 예측을 지우지 않고 남기면 무엇이 달라지는가
flowchart TB
n0["예측을 먼저 적는다"]
n1["주입이 걸렸는지 확인"]
n2["대조군을 잡는다"]
n0["예측 선기록"]
n1["주입 검증"]
n2["대조군 확보"]
n3["결론"]
n0 -->|"주입 뒤"| n1
n1 -->|"관측 전"| n2
@@ -61,19 +61,19 @@
<text class="edge-label" x="169.0" y="347.0">관측 전</text>
<g id="node-predict">
<rect class="node-shape kind-process emphasis-primary role-source" data-evidence="744-752" x="70.0" y="60.0" width="150.0" height="71.0" rx="7" />
<text class="node-label" x="145.0" y="87.0">예측을 먼저 적는다</text>
<text class="node-label" x="145.0" y="87.0">예측 선기록</text>
<line class="node-detail-divider" x1="84.0" y1="108.0" x2="206.0" y2="108.0" />
<text class="node-detail" x="86.0" y="125.0">예측 다섯 개가 틀렸다</text>
<text class="node-detail" x="86.0" y="125.0">틀린 예측 5건</text>
</g>
<g id="node-verify">
<rect class="node-shape kind-process emphasis-primary role-control" data-evidence="744-752" x="70.0" y="227.0" width="150.0" height="71.0" rx="7" />
<text class="node-label" x="145.0" y="254.0">주입이 걸렸는지 확인</text>
<text class="node-label" x="145.0" y="254.0">주입 검증</text>
<line class="node-detail-divider" x1="84.0" y1="275.0" x2="206.0" y2="275.0" />
<text class="node-detail" x="86.0" y="292.0">아홉 번 조용 실패했다</text>
<text class="node-detail" x="86.0" y="292.0">조용 실패 9건</text>
</g>
<g id="node-control">
<rect class="node-shape kind-process emphasis-warning role-control" data-evidence="744-753" x="70.0" y="394.0" width="150.0" height="64.0" rx="7" />
<text class="node-label" x="145.0" y="424.0">대조군을 잡는다</text>
<text class="node-label" x="145.0" y="424.0">대조군 확보</text>
</g>
<g id="node-conclusion">
<rect class="node-shape kind-component emphasis-primary role-target" data-evidence="744-753" x="70.0" y="554.0" width="150.0" height="64.0" rx="7" />

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB