{ "assetKey": "a13-f003-accesscontext", "kind": "terminal", "command": "set -e\nset -o pipefail\nS=src/application-core/src/main/java/dev/caskeleton/application/notification/platform/security\nA=src/adapter/outbound/notification/src/main/java/dev/caskeleton/adapter/outbound/notification/platform/security\necho \"# 두 번 선언되는 성질\"\ngrep -n \"\" $S/AccessContext.java | sed -n \"5,19p\"\ngrep -n \"\" $S/ContactPointProtector.java | sed -n \"11,12p\"\necho\necho \"# 유일한 구현의 복호화 메서드\"\ngrep -n \"\" $A/AesGcmContactPointProtector.java | sed -n \"/public ContactPointValue reveal/,/^ *[0-9]*: }/p\"\necho\necho \"# 저장소 전체에서 이 레코드를 만드는 곳\"\ngrep -rn \"new AccessContext(\\|AccessContext.dispatch(\" --include=*.java src | sed \"s|.*/java/dev/caskeleton/| |\"\necho\necho \"# 세 필드 접근자 호출 수 (저장소 전체)\"\nfor a in purposeCode actorRef auditRequired; do\n printf \" %-14s : %s\\n\" \"$a\" \"$(grep -rn \"\\.$a()\" --include=*.java src | wc -l)\"\ndone\necho \" actorRef 가 잡히는 곳\"\ngrep -rn \"\\.actorRef()\" --include=*.java src | sed \"s|.*/java/dev/caskeleton/| |\"\necho\necho \"# 감사 설비는 있다\"\ngrep -rn \"interface NotificationAuditPort\" --include=*.java src | sed \"s|.*/java/dev/caskeleton/| |\"\ngrep -rn \"implements NotificationAuditPort\" --include=*.java src | sed \"s|.*/java/dev/caskeleton/| |\"", "cwd": "/shared/codebase/clean-architecture-backend-template", "exitCode": 0, "executedAt": "2026-09-02T14:58:27+00:00", "sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916", "raw": "evidence/raw/a13-f003-accesscontext.txt", "svg": "evidence/rendered/a13-f003-accesscontext.svg", "rawSha256": "380462c92ece63e643151777fc99721e4425c649f4a8dc918e7678d675c89ce4", "lines": 63, "redaction": "none — 코드베이스 정적 검색" }