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
+1
-1
@@ -17,7 +17,7 @@ certbot renew 는 archive 디렉터리에 새 인증서를 쓰고 live 심볼릭
|
||||
|
||||
## Relationships
|
||||
|
||||
- **live/fullchain.pem → nginx 워커:** reload 없이는 닿지 않는다. Evidence: L536–L540.
|
||||
- **live/fullchain.pem → nginx 워커:** reload 필요. Evidence: L536–L540.
|
||||
- **renewal-hooks/deploy → nginx 워커:** reload 신호. Evidence: L556–L562.
|
||||
- **certbot renew → renewal-hooks/deploy:** 갱신 성공 시 호출. Evidence: L527–L533.
|
||||
- **certbot renew → live/fullchain.pem:** 새 인증서 기록. Evidence: L504–L510.
|
||||
|
||||
+1
-1
@@ -14,6 +14,6 @@ n3: "nginx 워커" {
|
||||
shape: rectangle
|
||||
}
|
||||
n0 -> n1: "새 인증서 기록"
|
||||
n1 -> n3: "reload 없이는 닿지 않는다"
|
||||
n1 -> n3: "reload 필요"
|
||||
n0 -> n2: "갱신 성공 시 호출"
|
||||
n2 -> n3: "reload 신호"
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ digraph techviz {
|
||||
n2 [label="renewal-hooks/deploy", shape=box, style="rounded,filled"];
|
||||
n3 [label="nginx 워커", shape=box, style="rounded,filled"];
|
||||
n0 -> n1 [label="새 인증서 기록", style=solid];
|
||||
n1 -> n3 [label="reload 없이는 닿지 않는다", style=solid];
|
||||
n1 -> n3 [label="reload 필요", style=solid];
|
||||
n0 -> n2 [label="갱신 성공 시 호출", style=solid];
|
||||
n2 -> n3 [label="reload 신호", style=solid];
|
||||
}
|
||||
|
||||
+5
-5
@@ -11,15 +11,15 @@
|
||||
<mxCell id="n_deploy-hook" value="renewal-hooks/deploy<br/>nginx -t && nginx -s reload" tooltip="갱신이 실제로 일어났을 때만 실행된다. 이 실험대에서는 비어 있었다. | Evidence: L527-L533" 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="380.0" y="60.0" width="223.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_live-link" value="live/fullchain.pem<br/>archive/cert2.pem 을 가리킨다" tooltip="심볼릭 링크. 경로는 그대로이고 가리키는 대상만 바뀐다. | Evidence: L536-L540" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=cylinder3;boundedLbl=1;backgroundOutline=1;fillColor=#eef6fb;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="390.5" y="203.0" width="202.0" height="97.0" as="geometry"/>
|
||||
<mxCell id="n_live-link" value="live/fullchain.pem<br/>→ archive/cert2.pem" tooltip="심볼릭 링크. 경로는 그대로이고 가리키는 대상만 바뀐다. | Evidence: L536-L540" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=cylinder3;boundedLbl=1;backgroundOutline=1;fillColor=#eef6fb;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="408.0" y="203.0" width="167.0" height="97.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_nginx" value="nginx 워커<br/>마스터 유지 · 워커 교체" tooltip="기동 시점에 읽은 인증서를 메모리에 들고 있다. reload 해야 새 워커가 새 인증서를 읽는다. | Evidence: L541-L548" 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="763.0" y="144.5" width="150.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e_needs-reload" value="reload 없이는 닿지 않는다" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_live-link" target="n_nginx">
|
||||
<mxCell id="e_needs-reload" value="reload 필요" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_live-link" target="n_nginx">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="701.8" y="220.2" as="offset"/>
|
||||
<mxPoint x="693.0" y="220.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_reload" value="reload 신호" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_deploy-hook" target="n_nginx">
|
||||
@@ -34,7 +34,7 @@
|
||||
</mxCell>
|
||||
<mxCell id="e_write" value="새 인증서 기록" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_certbot" target="n_live-link">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="329.2" y="220.2" as="offset"/>
|
||||
<mxPoint x="338.0" y="220.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
|
||||
+20
-20
@@ -6,9 +6,9 @@
|
||||
{
|
||||
"id": "edge-needs-reload",
|
||||
"type": "arrow",
|
||||
"x": 592.5,
|
||||
"x": 575.0,
|
||||
"y": 189.0,
|
||||
"width": 170.5,
|
||||
"width": 188.0,
|
||||
"height": 62.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -36,15 +36,15 @@
|
||||
62.5
|
||||
],
|
||||
[
|
||||
85.25,
|
||||
94.0,
|
||||
62.5
|
||||
],
|
||||
[
|
||||
85.25,
|
||||
94.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
170.5,
|
||||
188.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
@@ -66,9 +66,9 @@
|
||||
{
|
||||
"id": "edge-label-needs-reload",
|
||||
"type": "text",
|
||||
"x": 633.75,
|
||||
"x": 648.0,
|
||||
"y": 208.25,
|
||||
"width": 136,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -94,11 +94,11 @@
|
||||
"locked": false,
|
||||
"fontSize": 13,
|
||||
"fontFamily": 5,
|
||||
"text": "reload 없이는 닿지 않는다",
|
||||
"text": "reload 필요",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": null,
|
||||
"originalText": "reload 없이는 닿지 않는다",
|
||||
"originalText": "reload 필요",
|
||||
"autoResize": true,
|
||||
"lineHeight": 1.25
|
||||
},
|
||||
@@ -305,7 +305,7 @@
|
||||
"type": "arrow",
|
||||
"x": 220.0,
|
||||
"y": 189.0,
|
||||
"width": 170.5,
|
||||
"width": 188.0,
|
||||
"height": 62.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -333,15 +333,15 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
85.25,
|
||||
94.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
85.25,
|
||||
94.0,
|
||||
62.5
|
||||
],
|
||||
[
|
||||
170.5,
|
||||
188.0,
|
||||
62.5
|
||||
]
|
||||
],
|
||||
@@ -363,7 +363,7 @@
|
||||
{
|
||||
"id": "edge-label-write",
|
||||
"type": "text",
|
||||
"x": 284.25,
|
||||
"x": 293.0,
|
||||
"y": 208.25,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
@@ -540,9 +540,9 @@
|
||||
{
|
||||
"id": "node-live-link",
|
||||
"type": "rectangle",
|
||||
"x": 390.5,
|
||||
"x": 408.0,
|
||||
"y": 203.0,
|
||||
"width": 202.0,
|
||||
"width": 167.0,
|
||||
"height": 97.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -570,9 +570,9 @@
|
||||
{
|
||||
"id": "node-label-live-link",
|
||||
"type": "text",
|
||||
"x": 400.5,
|
||||
"x": 418.0,
|
||||
"y": 213.0,
|
||||
"width": 182.0,
|
||||
"width": 147.0,
|
||||
"height": 77.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -598,11 +598,11 @@
|
||||
"locked": false,
|
||||
"fontSize": 15,
|
||||
"fontFamily": 5,
|
||||
"text": "live/fullchain.pem\narchive/cert2.pem 을 가리킨다",
|
||||
"text": "live/fullchain.pem\n→ archive/cert2.pem",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": null,
|
||||
"originalText": "live/fullchain.pem\narchive/cert2.pem 을 가리킨다",
|
||||
"originalText": "live/fullchain.pem\n→ archive/cert2.pem",
|
||||
"autoResize": true,
|
||||
"lineHeight": 1.25
|
||||
},
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"harness_version": "0.2.0",
|
||||
"spec_id": "renewal-to-serving-gap",
|
||||
"spec_version": "1.1",
|
||||
"spec_sha256": "3e3db52f9abd54ed3f8d6d45e2bff22ba1c2fa312dfb8185d7d5c5c3b5ea24be",
|
||||
"spec_sha256": "27876093d869fde6f95f5f296995ef24011354039da6da56a049d114068545d4",
|
||||
"source_context": {
|
||||
"document": "docs/keycloak-session-store/final/document.md",
|
||||
"document_sha256": "609353e10bfd37a9bbb6a79ecf2a32f3d3c02d5d161879a14ad4713e49e7e5e8",
|
||||
|
||||
+1
-1
@@ -6,6 +6,6 @@ flowchart LR
|
||||
n2["renewal-hooks/deploy"]
|
||||
n3["nginx 워커"]
|
||||
n0 -->|"새 인증서 기록"| n1
|
||||
n1 -->|"reload 없이는 닿지 않는다"| n3
|
||||
n1 -->|"reload 필요"| n3
|
||||
n0 -->|"갱신 성공 시 호출"| n2
|
||||
n2 -->|"reload 신호"| n3
|
||||
|
||||
+9
-9
@@ -50,18 +50,18 @@
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="canvas" width="958" height="345" />
|
||||
<polyline class="edge kind-blocked style-solid emphasis-normal" points="592.5,251.5 677.8,251.5 677.8,189.0 763.0,189.0" data-evidence="536-540" />
|
||||
<rect class="edge-label-bg" x="635.8" y="206.2" width="131.9" height="22" rx="3" />
|
||||
<text class="edge-label" x="701.8" y="221.2">reload 없이는 닿지 않는다</text>
|
||||
<polyline class="edge kind-blocked style-solid emphasis-normal" points="575.0,251.5 669.0,251.5 669.0,189.0 763.0,189.0" data-evidence="536-540" />
|
||||
<rect class="edge-label-bg" x="653.9" y="206.2" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="693.0" y="221.2">reload 필요</text>
|
||||
<polyline class="edge kind-request style-solid emphasis-normal" points="603.0,95.5 683.0,95.5 683.0,171.0 763.0,171.0" data-evidence="556-562" />
|
||||
<rect class="edge-label-bg" x="667.9" y="119.2" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="707.0" y="134.2">reload 신호</text>
|
||||
<polyline class="edge kind-request style-solid emphasis-normal" points="220.0,171.0 300.0,171.0 300.0,95.5 380.0,95.5" data-evidence="527-533" />
|
||||
<rect class="edge-label-bg" x="281.5" y="119.2" width="85.0" height="22" rx="3" />
|
||||
<text class="edge-label" x="324.0" y="134.2">갱신 성공 시 호출</text>
|
||||
<polyline class="edge kind-write style-solid emphasis-normal" points="220.0,189.0 305.2,189.0 305.2,251.5 390.5,251.5" data-evidence="504-510" />
|
||||
<rect class="edge-label-bg" x="293.4" y="206.2" width="71.6" height="22" rx="3" />
|
||||
<text class="edge-label" x="329.2" y="221.2">새 인증서 기록</text>
|
||||
<polyline class="edge kind-write style-solid emphasis-normal" points="220.0,189.0 314.0,189.0 314.0,251.5 408.0,251.5" data-evidence="504-510" />
|
||||
<rect class="edge-label-bg" x="302.2" y="206.2" width="71.6" height="22" rx="3" />
|
||||
<text class="edge-label" x="338.0" y="221.2">새 인증서 기록</text>
|
||||
<g id="node-certbot">
|
||||
<rect class="node-shape kind-process emphasis-primary role-source" data-evidence="499-504" x="70.0" y="144.5" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="145.0" y="171.5">certbot renew</text>
|
||||
@@ -75,10 +75,10 @@
|
||||
<text class="node-detail" x="396.0" y="125.0">nginx -t && nginx -s reload</text>
|
||||
</g>
|
||||
<g id="node-live-link">
|
||||
<rect class="node-shape kind-datastore emphasis-primary role-store" data-evidence="536-540" x="390.5" y="216.0" width="202.0" height="71.0" /><ellipse class="node-shape kind-datastore emphasis-primary role-store" cx="491.5" cy="216.0" rx="101.0" ry="13.0" /><path class="storage-bottom" d="M 390.5 287.0 A 101.0 13.0 0 0 0 592.5 287.0" />
|
||||
<rect class="node-shape kind-datastore emphasis-primary role-store" data-evidence="536-540" x="408.0" y="216.0" width="167.0" height="71.0" /><ellipse class="node-shape kind-datastore emphasis-primary role-store" cx="491.5" cy="216.0" rx="83.5" ry="13.0" /><path class="storage-bottom" d="M 408.0 287.0 A 83.5 13.0 0 0 0 575.0 287.0" />
|
||||
<text class="node-label" x="491.5" y="243.0">live/fullchain.pem</text>
|
||||
<line class="node-detail-divider" x1="404.5" y1="264.0" x2="578.5" y2="264.0" />
|
||||
<text class="node-detail" x="406.5" y="281.0">archive/cert2.pem 을 가리킨다</text>
|
||||
<line class="node-detail-divider" x1="422.0" y1="264.0" x2="561.0" y2="264.0" />
|
||||
<text class="node-detail" x="424.0" y="281.0">→ archive/cert2.pem</text>
|
||||
</g>
|
||||
<g id="node-nginx">
|
||||
<rect class="node-shape kind-service emphasis-primary role-target" data-evidence="541-548" x="763.0" y="144.5" width="150.0" height="71.0" rx="7" />
|
||||
|
||||
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Reference in New Issue
Block a user