- analysis/·source-index·state.json 을 final/document.md 제2부·제3부로 접었다. SSOT 는 하나다 - 파일럿 — commit-ambiguity-as-a-result 를 새 기준으로 재선별. 후보 14 → 글감 5 (PROMOTE 5 · MERGE_INTO 3 · KEEP_IN_SSOT 4 · 보류 2). 기록 5건을 다시 썼고 그림 1개를 techviz 로 만들었다 - 재선별이 잡은 것: 제1부 §6.2·§11.1 이 자기 §13.2 와 어긋나 있었다(레인을 안 돌렸다 vs 돌렸다) — 정정. 이미 답이 나와 있던 Question 을 HEAD 재실행 질문으로 다시 세웠다. Concept 이 인용한 코드가 SSOT 에 없어 뺐다 - candidateScope·sourceRepository 기록. 나머지 43개 주제는 재선별 대기(PENDING 905) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
15 lines
4.5 KiB
JSON
15 lines
4.5 KiB
JSON
{
|
|
"assetKey": "a17-f002-stomp",
|
|
"kind": "terminal",
|
|
"command": "set -e\nset -o pipefail\nW=src/adapter/inbound/websocket/src/main/java/dev/caskeleton/adapter/inbound/websocket\nstrip() { sed -E 's#^src/[^:]*/websocket/([^:]*/)?([^:/]+):([0-9]+):# \\2:\\3 #'; }\ncut_range() { awk -v f=\"$2\" -v a=\"$3\" -v b=\"$4\" 'NR>=a && NR<=b {printf \" %s:%d %s\\n\", f, NR, $0}' \"$1\"; }\n\necho \"# ca-skeleton.websocket 어댑터가 등록하는 인터셉터 둘\"\nfor f in AuthenticatedHandshakeInterceptor WebSocketInboundAuthorizationInterceptor; do\n printf \" %-44s %s 줄\\n\" \"$f.java\" \"$(wc -l < $W/stomp/$f.java)\"\ndone\nawk 'NR>=30 && NR<=60 && (/Interceptor/ || /addInterceptors/ || /configureClientInboundChannel/ || /ConditionalOnProperty/) {printf \" stomp/WebSocketConfig.java:%d %s\\n\", NR, $0}' $W/stomp/WebSocketConfig.java\n\necho\necho \"# 같은 채널에 붙는 세 번째 인터셉터와 그 게이트\"\nprintf \" %-44s %s 줄\\n\" \"advanced/stomp/StompSecurityInterceptor.java\" \"$(wc -l < $W/advanced/stomp/StompSecurityInterceptor.java)\"\ncut_range $W/advanced/stomp/StompConfiguration.java advanced/stomp/StompConfiguration.java 24 27\nawk 'NR>=33 && NR<=41 && (/securityInterceptor/ || /configureClientInboundChannel/) {printf \" advanced/stomp/StompConfiguration.java:%d %s\\n\", NR, $0}' $W/advanced/stomp/StompConfiguration.java\n\necho\necho \"# 이 모듈이 출하 런타임 그래프에 있는가\"\nawk 'NR>=196 && NR<=200 {printf \" app-bootstrap/build.gradle:%d %s\\n\", NR, $0}' src/app-bootstrap/build.gradle\ncut_range src/adapter/inbound/websocket/CLAUDE.md websocket/CLAUDE.md 21 23\n\necho\necho \"# 정책 계층 — 네 패키지의 파일과 선언 형태와 줄 수\"\nfor d in security authz idempotency budget; do\n for f in $(find $W/$d -name '*.java' | sort); do\n k=$(grep -oE 'public (final class|record|enum|interface|class)' $f | head -1 || true)\n printf \" %-12s %-38s %-16s %s 줄\\n\" \"$d\" \"$(basename $f)\" \"${k#public }\" \"$(wc -l < $f)\"\n done\ndone\nprintf \" 합계 %s 파일\\n\" \"$(find $W/security $W/authz $W/idempotency $W/budget -name '*.java' | wc -l)\"\n\necho\necho \"# 그 열 타입을 stomp 패키지가 참조하는가, 그리고 어디서 생성되는가\"\nfor f in $(find $W/security $W/authz $W/idempotency $W/budget -name '*.java' | sed 's|.*/||;s|\\.java$||' | sort); do\n s=$(grep -rl \"\\b$f\\b\" $W/stomp 2>/dev/null | wc -l || true)\n n=$(git grep -c \"new $f(\" -- 'src/**/*.java' 2>/dev/null | grep '/main/' | wc -l || true)\n b=$(git grep -l \"$f \" -- 'src/**/*.java' 2>/dev/null | grep '/main/' | xargs grep -l '@Bean' 2>/dev/null | wc -l || true)\n printf \" %-34s stomp참조=%s main생성=%s 같은파일에@Bean있는main=%s\\n\" \"$f\" \"$s\" \"$n\" \"$b\"\ndone\n\necho\necho \"# 원문이 22 로 적은 수의 출처\"\ngrep -n '^# Sub-scope 04' /shared/document-detail/clean-architecture-backend-template/final/document.md#a17 \\\n | cut -c1-150 | sed 's#^# final/document.md#a17:#'\nt=0; for d in security authz idempotency budget error observability admin release; do\n n=$(find $W/$d -name '*.java' | wc -l); t=$((t+n)); printf \" %-14s %s\\n\" \"$d\" \"$n\"\ndone\necho \" 여덟 패키지 합계 $t\"\n\necho\necho \"# MessageAuthorizationPolicy 를 받는 자리와 그 받는 쪽의 생성자\"\ngrep -n 'public ' $W/authz/MessageAuthorizationPolicy.java | sed -E 's#^([0-9]+): *# authz/MessageAuthorizationPolicy.java:\\1 #'\ngit grep -n 'MessageAuthorizationPolicy' -- 'src/**/*.java' | grep '/main/' | grep -v '/MessageAuthorizationPolicy.java' | strip\ngrep -n 'public WebSocketPlatformStartupValidator\\|public void validate\\|undeclaredAmong' $W/config/WebSocketPlatformStartupValidator.java \\\n | sed -E 's#^([0-9]+): *# config/WebSocketPlatformStartupValidator.java:\\1 #'\ngit grep -n 'new WebSocketPlatformStartupValidator(' -- 'src/**/*.java' | strip\n\necho\necho \"# 리프의 CLAUDE.md 가 적는 범위와 인바운드 정책 절 전체\"\ncut_range src/adapter/inbound/websocket/CLAUDE.md websocket/CLAUDE.md 15 18\ncut_range src/adapter/inbound/websocket/CLAUDE.md websocket/CLAUDE.md 52 60\n",
|
|
"cwd": "/shared/codebase/clean-architecture-backend-template",
|
|
"exitCode": 0,
|
|
"executedAt": "2026-09-04T00:20:53+00:00",
|
|
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
|
|
"raw": "evidence/raw/a17-f002-stomp.txt",
|
|
"svg": "evidence/rendered/a17-f002-stomp.svg",
|
|
"rawSha256": "e44e2afd60df7cb8a83b19d83b709b1f8144576d4908e5d9bb90265b5ab4471c",
|
|
"lines": 98,
|
|
"redaction": "코드베이스 측정으로 교체"
|
|
}
|