{ "assetKey": "a19-f015-compatibilitymatrix-extension", "kind": "terminal", "command": "set -e\nset -o pipefail\nM=src/messaging/messaging-testkit/src/main/java/dev/caskeleton/messaging/testkit/CompatibilityMatrix.java\nstrip() { sed -E 's#^src/[^:]*/src/(main|test)/[^:]*/([^:/]+):([0-9]+):# \\1 · \\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 \"# Tier 열거값 셋과 EXTENSION 의 뜻\"\ncut_range $M CompatibilityMatrix.java 23 32\n\necho\necho \"# 표 밖에 있는 bridge leaf\"\nprintf \" %-42s main %s 파일 · %s 줄\\n\" \"messaging-spring-cloud-stream-bridge\" \\\n \"$(find src/messaging/messaging-spring-cloud-stream-bridge/src/main -name '*.java' | wc -l)\" \\\n \"$(find src/messaging/messaging-spring-cloud-stream-bridge/src/main -name '*.java' -exec cat {} + | wc -l)\"\npython3 - <<'PY'\nimport json\nd = json.load(open('src/config/architecture/modules.json'))\ndef walk(o):\n if isinstance(o, dict):\n if 'bridge' in str(o.get('id', '')):\n print(f\" modules.json {o['id']} runtime_memberships={o.get('runtime_memberships')}\")\n for v in o.values(): walk(v)\n elif isinstance(o, list):\n for v in o: walk(v)\nwalk(d)\nPY\nn=$(grep -c 'stream-bridge' $M || true); echo \" ENTRIES 에 bridge 이름이 있는가 : $n\"\n\necho\necho \"# Entry 가 요구하는 것 — bridge 가 이 표의 행이 될 수 있는가\"\nawk 'NR>=66 && NR<=74 {printf \" CompatibilityMatrix.java:%d %s\\n\", NR, $0}' $M\ngrep -n 'hasLiveBrokerCertification' $M | head -2 | sed -E 's#^([0-9]+): *# CompatibilityMatrix.java:\\1 #'\n\necho\necho \"# 미등록 이름을 조용히 지원으로 두지 않는 장치\"\ngrep -n 'public static Entry of\\|throw new' $M | head -4 | sed -E 's#^([0-9]+): *# CompatibilityMatrix.java:\\1 #'\ngit grep -n 'anUnknownAdapterIsNotSilentlyTreatedAsSupported' -- 'src/**/*.java' | strip\necho \" 그 시험이 미등록 이름의 예로 쓰는 것, 그리고 of 를 부르는 main 코드 :\"\ngit grep -ni 'artemis' -- 'src/**/*.java' | strip\nm=$(git grep -n 'CompatibilityMatrix\\.' -- 'src/**/*.java' | grep '/main/' | grep -v '/CompatibilityMatrix.java' | wc -l || true)\necho \" CompatibilityMatrix 를 자기 파일 밖에서 쓰는 main 코드 : ${m:-0} 건\"\n\necho\necho \"# ENTRIES 다섯 항목이 각각 어떤 Tier 인가\"\ngrep -n 'Tier\\.' $M | grep -v 'enum\\|EXTENSION$' | sed -E 's#^([0-9]+): *# CompatibilityMatrix.java:\\1 #'\nfor t in STABLE EXPERIMENTAL EXTENSION; do\n n=$(grep -c \"Tier\\.$t\" $M || true); echo \" ENTRIES 안에서 Tier.$t 를 쓴 횟수 : $n\"\ndone\n\necho\necho \"# 운영자용 문서에는 등급 표가 둘이다\"\ngrep -n '^## .*등급' docs/messaging/support-matrix.md | sed 's#^# docs/messaging/support-matrix.md:#'\necho \" 브로커 등급 표의 Extension 행 :\"\ngrep -n 'Extension' docs/messaging/support-matrix.md | cut -c1-140 | sed 's#^# docs/messaging/support-matrix.md:#'\necho \" 그 문서가 이 leaf 를 언급하는 줄 (대소문자·구분자 무관) :\"\ngrep -n -iE 'stream[- ]bridge' docs/messaging/support-matrix.md | sed 's#^# docs/messaging/support-matrix.md:#' || echo \" 0 건\"\n\necho\necho \"# bridge 가 무엇이라고 스스로 적는가\"\nb=$(find src/messaging/messaging-spring-cloud-stream-bridge/src/main -name 'MessagingBindingBridge.java')\ngrep -n 'interoperability seam\\|not a second' $b | cut -c1-140 | sed -E 's#^([0-9]+): *# MessagingBindingBridge.java:\\1 #'\ng=$(find src/messaging/messaging-spring-cloud-stream-bridge/src/main -name 'StreamBridgePolicyGuard.java')\ngrep -nE 'if \\(|STREAM_BRIDGE_|native adapter|does not apply' $g | cut -c1-140 | sed -E 's#^([0-9]+): *# StreamBridgePolicyGuard.java:\\1 #'\n", "cwd": "/shared/codebase/clean-architecture-backend-template", "exitCode": 0, "executedAt": "2026-09-04T01:29:31+00:00", "sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916", "raw": "evidence/raw/a19-f015-compatibilitymatrix-extension.txt", "svg": "evidence/rendered/a19-f015-compatibilitymatrix-extension.svg", "rawSha256": "dbc3f5f10eaf1260c3096b9fef414439192fcfb72ffc1e4241ea5545a4f4db8b", "lines": 73, "redaction": "코드베이스 측정으로 교체" }