# 메서드와 그 자바독
78-  /** Whether text would survive sanitising unchanged, for asserting a message is already safe. */
79:  public boolean alreadySafe(String input, int maxLength) {
80-    return input != null
81-        && !input.isBlank()
82-        && sanitize(input, maxLength)
83-            .equals(input.trim().toLowerCase(Locale.ROOT).isEmpty() ? REDACTED : input.trim());
84-  }
85-}

# 그 이름이 나오는 자리 — 추적 파일 전부, 확장자를 가리지 않는다
src/adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/error/WebProblemSanitizer.java:79:  public boolean alreadySafe(String input, int maxLength) {

# 모든 참조에서 그 이름을 건드린 커밋
a24ece9c feat: web, websocket 어댑터 추가 구현

# 그 커밋에서 이 파일의 상태
a24ece9c 2026-08-28 feat: web, websocket 어댑터 추가 구현

A	src/adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/error/WebProblemSanitizer.java

# 선행 검사가 쓰는 판정과 삼항이 쓰는 판정
58:    if (input == null || input.isBlank()) {
66:    working = WHITESPACE.matcher(working).replaceAll(" ").trim();
73:      working = working.substring(0, maxLength).trim();
81:        && !input.isBlank()
83:            .equals(input.trim().toLowerCase(Locale.ROOT).isEmpty() ? REDACTED : input.trim());

# 이 리프의 런타임 소속
  adapter-inbound-web -> ['app-bootstrap', 'sample-portfolio']

# 이 리프가 선언한 구조 규칙 — 접근 제어자를 가리지 않고 센다
  32:  public static ArchRule controllersAreUseCaseAdapters() {
  51:  public static ArchRule controllersDeclareNoTransaction() {
  66:  public static ArchRule controllerTypesDeclareNoTransaction() {
  84:  public static ArchRule wireModelsAreNotPersistenceTypes() {
  103:  public static ArchRule applicationDoesNotSeeTransportTypes() {
  122:  public static ArchRule noGlobalResponseEnvelope() {
  213:  public static ArchRule stableDoesNotDependOnAdvanced() {
  229:  static ArchRule everyControllerIsPublic() {
# 그중 실제로 도는 것 — 두 목록에 담긴 것만 돈다
    webScopedRules()
    controllersAreUseCaseAdapters()
    controllersDeclareNoTransaction()
    controllerTypesDeclareNoTransaction()
    wireModelsAreNotPersistenceTypes()
    noGlobalResponseEnvelope()
    stableDoesNotDependOnAdvanced()
    crossLeafRules()
    applicationDoesNotSeeTransportTypes()
  공개 표면 기준선을 적용하는가 : 0
