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:
co-authored by
Claude Opus 5
parent
75bed382c8
commit
95c0e680b5
+4
-4
@@ -13,10 +13,10 @@ Q1 은 저장소를 밖으로 빼면 다중 인스턴스와 재시작은 풀리
|
||||
- **열린 질문 네 개** (component): 설계로는 답할 수 없었다. Evidence: L682–L690.
|
||||
- **저장소 선택** (process): 다중 인스턴스와 재시작은 여기서 풀린다. Evidence: L682–L692.
|
||||
- **스키마와 조회 키** (process): 덮어쓰기와 정리 누락은 여기가 원인이다. Evidence: L682–L694.
|
||||
- **세션은 스냅샷이다** (process): 클레임 변경이 반영되지 않는 이유. Evidence: L682–L696.
|
||||
- **세션 스냅샷** (process): 클레임 변경이 반영되지 않는 이유. Evidence: L682–L696.
|
||||
|
||||
## Relationships
|
||||
|
||||
- **열린 질문 네 개 → 저장소 선택:** 먼저 여기를 본다. Evidence: L682–L692.
|
||||
- **저장소 선택 → 스키마와 조회 키:** 여기서 풀리지 않는 것. Evidence: L682–L694.
|
||||
- **스키마와 조회 키 → 세션은 스냅샷이다:** 남는 것. Evidence: L682–L696.
|
||||
- **열린 질문 네 개 → 저장소 선택:** 1차 검토. Evidence: L682–L692.
|
||||
- **저장소 선택 → 스키마와 조회 키:** 미해결 잔여. Evidence: L682–L694.
|
||||
- **스키마와 조회 키 → 세션 스냅샷:** 최종 잔여. Evidence: L682–L696.
|
||||
|
||||
+4
-4
@@ -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: "최종 잔여"
|
||||
|
||||
+4
-4
@@ -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];
|
||||
}
|
||||
|
||||
+5
-5
@@ -11,23 +11,23 @@
|
||||
<mxCell id="n_store-choice" value="저장소 선택<br/>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="스키마와 조회 키<br/>세션 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="스키마와 조회 키<br/>키에 세션 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="세션은 스냅샷이다<br/>재인증까지 옛 값" 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="세션 스냅샷<br/>재인증까지 옛 값" 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>
|
||||
|
||||
+12
-12
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
-4
@@ -4,7 +4,7 @@ flowchart TB
|
||||
n0["열린 질문 네 개"]
|
||||
n1["저장소 선택"]
|
||||
n2["스키마와 조회 키"]
|
||||
n3["세션은 스냅샷이다"]
|
||||
n0 -->|"먼저 여기를 본다"| n1
|
||||
n1 -->|"여기서 풀리지 않는 것"| n2
|
||||
n2 -->|"남는 것"| n3
|
||||
n3["세션 스냅샷"]
|
||||
n0 -->|"1차 검토"| n1
|
||||
n1 -->|"미해결 잔여"| n2
|
||||
n2 -->|"최종 잔여"| n3
|
||||
|
||||
+8
-8
@@ -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 |
Reference in New Issue
Block a user