{ "version": "1.1", "id": "reproducibility-gap", "title": "명령으로 적는 것과 도는 것", "question": "절차를 명령으로 적으면 재현이 보장되는가", "type": "architecture", "direction": "TB", "audience": [ "실험 절차를 문서로 남기는 엔지니어" ], "summary": "문법이 멀쩡해도 조용히 실패한다. 바꾼 명령을 실제로 돌려봐야 안다.", "alt": "산문으로 적힌 측정 장치를 셸 표현식으로 바꾸고, 그것을 실행해 확인하는 단계까지 거치는 경로.", "long_description": "절차를 명령으로 적었지만 측정 장치 자체가 산문인 자리가 남아 있었다. 22.2초라는 헤드라인을 만든 부하 생성기가 실행 가능한 형태가 아니었고, RPO 측정의 로그인 루프와 sid 대조도 그랬으며, A-8 은 파일 하나에 쓰고 다른 파일을 읽고 있었다. 전부 셸 표현식으로 바꾸고 실제로 돌려서 확인했다. 그 확인에서 A-6 의 부하 생성기가 깨졌다. 일회성 파드의 출력 스트림이 유실됐고 상주 탐침에 파일로 모아 20/20 을 확인했다.", "source_context": { "document": "docs/keycloak-session-store/final/document.md", "document_sha256": "1d44cba1905544d92f1d26ae36a8deb64a3db3914d6b488fd30d6ae7f8cfbabe", "anchor": { "kind": "heading", "value": "재현 가능성을 어떻게 보장했나", "line": 660 } }, "composition": { "profile": "component-flow", "diagram_only": true, "reference_ids": [ "payment-event-flow" ], "rationale": "적힌 절차가 실제로 도는가를 무엇이 보장하는가가 지배적 질문이다. 검증 사슬이므로 component-flow 를 골랐다." }, "groups": [], "nodes": [ { "id": "prose", "label": "산문 상태의 측정 장치", "kind": "component", "role": "source", "emphasis": "warning", "description": "괄호와 설명으로 남아 있었다.", "details": [ "A-6 부하 생성기" ], "evidence": [ { "start_line": 598, "end_line": 610 } ], "assumption": false }, { "id": "command", "label": "셸 표현식", "kind": "component", "role": "control", "emphasis": "normal", "description": "붙여넣으면 도는 형태.", "details": [], "evidence": [ { "start_line": 598, "end_line": 614 } ], "assumption": false }, { "id": "execute", "label": "실제 실행 확인", "kind": "process", "role": "control", "emphasis": "primary", "description": "여기서 한 건이 깨졌다.", "details": [ "일회성 파드의 출력 유실" ], "evidence": [ { "start_line": 615, "end_line": 622 } ], "assumption": false }, { "id": "verified", "label": "재현 가능", "kind": "component", "role": "target", "emphasis": "primary", "description": "실행까지 확인된 것만.", "details": [ "상주 탐침 20/20" ], "evidence": [ { "start_line": 615, "end_line": 622 } ], "assumption": false } ], "edges": [ { "id": "p-c", "from": "prose", "to": "command", "label": "명령화", "kind": "request", "evidence": [ { "start_line": 598, "end_line": 614 } ], "assumption": false }, { "id": "c-e", "from": "command", "to": "execute", "label": "실행", "kind": "request", "evidence": [ { "start_line": 615, "end_line": 622 } ], "assumption": false }, { "id": "e-v", "from": "execute", "to": "verified", "label": "통과분 채택", "kind": "request", "evidence": [ { "start_line": 615, "end_line": 622 } ], "assumption": false } ], "legend": [], "metadata": { "rationale": "산문에서 명령으로, 명령에서 실행 확인으로 두 단계를 그렸다. 두 번째 단계에서 한 건이 깨졌다." } }