The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.
Follows the import procedure in README.md.
source/ the originating repository verbatim — 78 documents, 28 SVGs,
8 manifests, plus .source-revision recording the commit
final/ the SSOT
document.md 729 lines written from the 29 experiment documents, not
concatenated: what was predicted, what was measured, and
where the measurement itself was wrong
evidence/raw 125 outputs, flattened to <experiment>__<file> because
the originals collided (01-baseline.txt appeared three
times) and the audit only globs the top level
evidence/meta one per raw file; command and exitCode are null and the
README says why rather than inventing them
evidence/browser 22 captures
assets/ three diagrams through techviz
.techviz/ their VizSpecs
A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.
Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.
verify-pipeline.py passes. audit-records.py reports no issues.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
245 lines
45 KiB
XML
245 lines
45 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="4506" viewBox="0 0 1200 4506" role="img">
|
|
<title>terminal evidence</title>
|
|
<desc>Terminal-style rendering generated from retained command output. Sensitive-looking values are redacted in the visual asset.</desc>
|
|
<rect x="1" y="1" width="1198" height="4504" rx="14" fill="#0d1117" stroke="#30363d"/>
|
|
<rect x="1" y="1" width="1198" height="44" rx="14" fill="#161b22"/>
|
|
<rect x="1" y="30" width="1198" height="14" fill="#161b22"/>
|
|
<circle cx="24" cy="22" r="6" fill="#ff5f57"/>
|
|
<circle cx="44" cy="22" r="6" fill="#febc2e"/>
|
|
<circle cx="64" cy="22" r="6" fill="#28c840"/>
|
|
<text x="92" y="27" fill="#8b949e" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">terminal evidence</text>
|
|
<text x="24" y="68" fill="#c9d1d9" font-size="15" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">$ set -e
|
|
set -o pipefail
|
|
B=src/app-bootstrap/src/main/java/dev/caskeleton/bootstrap
|
|
A=src/messaging/messaging-spring-boo</tspan><tspan x="24" dy="22">t-starter/src/main/java/dev/caskeleton/messaging/autoconfigure
|
|
strip() { sed -E 's#^src/[^:]*/src/(main|test)/java/dev/c</tspan><tspan x="24" dy="22">askeleton/([^:]*)/([^:/]+):([0-9]+):# \1 · \2/\3:\4 #'; }
|
|
cut_range() { awk -v f="$2" -v a="$3" -v b="$4" 'NR>=a && NR</tspan><tspan x="24" dy="22"><=b {printf " %s:%d %s\n", f, NR, $0}' "$1"; }
|
|
|
|
echo "# 가족 문서가 이 항목을 어떻게 들고 있는가"
|
|
grep -n 'MSG-015' src</tspan><tspan x="24" dy="22">/messaging/CLAUDE.md | cut -c1-150 | sed 's#^# messaging/CLAUDE.md:#'
|
|
|
|
echo
|
|
echo "# 두 스택의 설정 클래스와 생산자 빈"
|
|
</tspan><tspan x="24" dy="22">cut_range $B/messaging/KafkaSenderConfig.java bootstrap/messaging/KafkaSenderConfig.java 37 39
|
|
cut_range $B/messaging/Ka</tspan><tspan x="24" dy="22">fkaSenderConfig.java bootstrap/messaging/KafkaSenderConfig.java 61 63
|
|
awk 'NR>=126 && NR<=131 {printf " autoconfigure/K</tspan><tspan x="24" dy="22">afkaMessagingAutoConfiguration.java:%d %s\n", NR, $0}' $A/KafkaMessagingAutoConfiguration.java
|
|
|
|
echo
|
|
echo "# 플랫폼 쪽이</tspan><tspan x="24" dy="22"> 켜지는 사슬"
|
|
git grep -n 'prefix = MessagingSettings.PREFIX, name = "enabled"' -- 'src/**/*.java' | strip
|
|
git grep -n '</tspan><tspan x="24" dy="22">"kafka", KafkaMessagingAutoConfiguration.class' -- 'src/**/*.java' | strip
|
|
|
|
echo
|
|
echo "# broker 만 준 시험이 통과하는 이</tspan><tspan x="24" dy="22">유 — 게이트 뒤 설정을 손으로 등록한다"
|
|
git grep -n 'withUserConfiguration(KafkaAdapterConfig' -- 'src/**/*.java' | stri</tspan><tspan x="24" dy="22">p
|
|
O=src/app-bootstrap/src/test/java/dev/caskeleton/adapter/outbound/OptionalAdapterBeanGatingTest.java
|
|
awk 'NR>=59 && NR</tspan><tspan x="24" dy="22"><=70 {printf " test · OptionalAdapterBeanGatingTest.java:%d %s\n", NR, $0}' $O
|
|
echo " 두 시험이 컴포지션 루트를 쓰는</tspan><tspan x="24" dy="22">가 :"
|
|
for f in src/adapter/outbound/messaging/src/test/java/dev/caskeleton/adapter/outbound/messaging/MessagingConfigTes</tspan><tspan x="24" dy="22">t.java $O; do
|
|
n=$(grep -c 'CaSkeletonApplication' "$f" || true)
|
|
printf " %-40s CaSkeletonApplication 언급 %s 건\n</tspan><tspan x="24" dy="22">" "$(basename $f)" "${n:-0}"
|
|
done
|
|
echo " KafkaSenderConfig 가 그 슬라이스에 등록되는가 :"
|
|
for f in src/adapter/outbound</tspan><tspan x="24" dy="22">/messaging/src/test/java/dev/caskeleton/adapter/outbound/messaging/MessagingConfigTest.java $O; do
|
|
n=$(grep -c 'KafkaS</tspan><tspan x="24" dy="22">enderConfig' "$f" || true)
|
|
printf " %-40s KafkaSenderConfig 언급 %s 건\n" "$(basename $f)" "${n:-0}"
|
|
done
|
|
|
|
echo
|
|
ech</tspan><tspan x="24" dy="22">o "# 이 조합을 거르는 검증기가 있는가"
|
|
V=$(find src -name CapabilityDependencyValidator.java -path '*/main/*')
|
|
awk 'NR>=</tspan><tspan x="24" dy="22">64 && NR<=80 {printf " CapabilityDependencyValidator.java:%d %s\n", NR, $0}' $V
|
|
|
|
echo
|
|
echo "# 운영 문서가 이 키를 무엇</tspan><tspan x="24" dy="22">이라고 설명하는가"
|
|
awk 'NR>=26 && NR<=32 {printf " docs/runbooks/outbox-publish-failed.md:%d %s\n", NR, $0}' docs/runbo</tspan><tspan x="24" dy="22">oks/outbox-publish-failed.md
|
|
|
|
echo
|
|
echo "# 출하 설정이 두 키를 어떻게 주는가"
|
|
grep -n 'APP_MESSAGING_ENABLED\|APP_MESSAG</tspan><tspan x="24" dy="22">ING_BROKER' src/config/runtime/compose-profile-contracts.json | head -8 | sed 's#^# compose-profile-contracts.json:#'
|
|
f</tspan><tspan x="24" dy="22">or f in src/.env src/.env.example src/.env.local.example; do
|
|
[ -f "$f" ] && grep -n 'APP_MESSAGING_BROKER\|APP_MESSAGI</tspan><tspan x="24" dy="22">NG_ENABLED' "$f" | sed "s#^# $(basename $f):#"
|
|
done
|
|
|
|
echo
|
|
echo "# KafkaSenderConfig 가 조건에서 물러나는가"
|
|
awk 'NR>=60</tspan><tspan x="24" dy="22"> && NR<=65 {printf " KafkaSenderConfig.java:%d %s\n", NR, $0}' $B/messaging/KafkaSenderConfig.java
|
|
|
|
echo
|
|
echo "# 이음매</tspan><tspan x="24" dy="22"> 설정 클래스 자신은 스캔 대상인가"
|
|
head -1 $B/messaging/KafkaSenderConfig.java | sed 's#^# KafkaSenderConfig.java:1 #'</tspan><tspan x="24" dy="22">
|
|
n=$(grep -c 'bootstrap\\.messaging' $B/CaSkeletonApplication.java || true)
|
|
echo " AUTO_CONFIGURED_PACKAGES 가 bootstra</tspan><tspan x="24" dy="22">p.messaging 을 제외하는가 : ${n:-0} 건"
|
|
|
|
echo
|
|
echo "# 이음매 쪽 생산자가 요구하는 설정 빈은 어디서 오는가"
|
|
git grep -n '</tspan><tspan x="24" dy="22">EnableConfigurationProperties(KafkaAdapterSettings.class)' -- 'src/**/*.java' | strip
|
|
git grep -n 'Import({MessagingConf</tspan><tspan x="24" dy="22">ig.class, KafkaAdapterConfig.class})\|prefix = "app.messaging", name = "enabled"' -- 'src/**/*.java' | strip
|
|
|
|
echo
|
|
echo </tspan><tspan x="24" dy="22">"# 그 설정 클래스가 컴포넌트 스캔으로 들어올 수 있는가"
|
|
awk 'NR>=41 && NR<=57 {printf " CaSkeletonApplication.java:%d %</tspan><tspan x="24" dy="22">s\n", NR, $0}' $B/CaSkeletonApplication.java
|
|
awk 'NR>=100 && NR<=101 {printf " CaSkeletonApplication.java:%d %s\n", NR,</tspan><tspan x="24" dy="22"> $0}' $B/CaSkeletonApplication.java
|
|
grep -n 'adapter\\\\.outbound\\\\.messaging' $B/CaSkeletonApplication.java | sed -E </tspan><tspan x="24" dy="22">'s#^([0-9]+): *# CaSkeletonApplication.java:\1 #'
|
|
echo " ConfigurationPropertiesScan 목록에 adapter.outbound.messagin</tspan><tspan x="24" dy="22">g 이 있는가 :"
|
|
n=$(awk 'NR>=58 && NR<=82' $B/CaSkeletonApplication.java | grep -c 'adapter.outbound.messaging' || true)
|
|
</tspan><tspan x="24" dy="22">echo " $n 건"
|
|
|
|
echo
|
|
echo "# broker=kafka 를 쓰는 시험마다 같은 파일이 enabled 를 주는가"
|
|
for f in $(git grep -l 'app.</tspan><tspan x="24" dy="22">messaging.broker=kafka' -- 'src/**/*.java' | grep '/test/'); do
|
|
b=$(grep -c 'app.messaging.broker=kafka' "$f" || true)</tspan><tspan x="24" dy="22">
|
|
e=$(grep -c 'app.messaging.enabled=' "$f" || true)
|
|
printf " %-46s broker=kafka %s 줄 · enabled= %s 줄\n" "$(basen</tspan><tspan x="24" dy="22">ame $f)" "$b" "$e"
|
|
done
|
|
echo " enabled 를 한 줄도 주지 않는 파일의 시험 이름 :"
|
|
for f in $(git grep -l 'app.messaging.b</tspan><tspan x="24" dy="22">roker=kafka' -- 'src/**/*.java' | grep '/test/'); do
|
|
e=$(grep -c 'app.messaging.enabled=' "$f" || true)
|
|
if [ "$e" = </tspan><tspan x="24" dy="22">"0" ]; then grep -n 'void .*(' "$f" | sed -E "s#^([0-9]+): *# $(basename $f):\1 #"; fi
|
|
done
|
|
</tspan></text>
|
|
<text x="24" y="992" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">cwd: /shared/codebase/clean-architecture-backend-template</tspan></text>
|
|
<text x="24" y="1014" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">time: 2026-09-04T01:37:31+00:00 · exit 0</tspan></text>
|
|
<line x1="24" y1="1028" x2="1176" y2="1028" stroke="#30363d"/>
|
|
<text x="24" y="1068" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 가족 문서가 이 항목을 어떻게 들고 있는가</tspan></text>
|
|
<text x="24" y="1090" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> messaging/CLAUDE.md:70:## application이 이 family에 도달하는 경로 (MSG-015, 미해결)</tspan></text>
|
|
<text x="24" y="1112" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> messaging/CLAUDE.md:82:이것이 리뷰의 **MSG-015 (P0)** 이며 닫히지 않았다. 지금 안전한 이유는 설계가 아니라 기본값이다 —</tspan></text>
|
|
<text x="24" y="1134" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="1156" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 두 스택의 설정 클래스와 생산자 빈</tspan></text>
|
|
<text x="24" y="1178" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> bootstrap/messaging/KafkaSenderConfig.java:37 @Configuration(proxyBeanMethods = false)</tspan></text>
|
|
<text x="24" y="1200" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> bootstrap/messaging/KafkaSenderConfig.java:38 @ConditionalOnProperty(name = "app.messaging.broker", havingValue = "kafka")</tspan></text>
|
|
<text x="24" y="1222" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> bootstrap/messaging/KafkaSenderConfig.java:39 public class KafkaSenderConfig {</tspan></text>
|
|
<text x="24" y="1244" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> bootstrap/messaging/KafkaSenderConfig.java:61 @Bean(name = "kafkaSeamProducer", destroyMethod = "close")</tspan></text>
|
|
<text x="24" y="1266" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> bootstrap/messaging/KafkaSenderConfig.java:62 @ConditionalOnMissingBean(name = "kafkaSeamProducer")</tspan></text>
|
|
<text x="24" y="1288" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> bootstrap/messaging/KafkaSenderConfig.java:63 public Producer<String, String> kafkaSeamProducer(KafkaAdapterSettings setting</tspan><tspan x="24" dy="22">s) {</tspan></text>
|
|
<text x="24" y="1332" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> autoconfigure/KafkaMessagingAutoConfiguration.java:126 * @return the producer, closed with the context</tspan></text>
|
|
<text x="24" y="1354" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> autoconfigure/KafkaMessagingAutoConfiguration.java:127 */</tspan></text>
|
|
<text x="24" y="1376" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> autoconfigure/KafkaMessagingAutoConfiguration.java:128 @Bean(destroyMethod = "close")</tspan></text>
|
|
<text x="24" y="1398" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> autoconfigure/KafkaMessagingAutoConfiguration.java:129 @ConditionalOnMissingBean</tspan></text>
|
|
<text x="24" y="1420" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> autoconfigure/KafkaMessagingAutoConfiguration.java:130 public org.apache.kafka.clients.producer.Producer<byte[], byte[]> mes</tspan><tspan x="24" dy="22">sagingKafkaProducer(</tspan></text>
|
|
<text x="24" y="1464" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> autoconfigure/KafkaMessagingAutoConfiguration.java:131 org.springframework.core.env.Environment environment) {</tspan></text>
|
|
<text x="24" y="1486" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="1508" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 플랫폼 쪽이 켜지는 사슬</tspan></text>
|
|
<text x="24" y="1530" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · messaging/autoconfigure/MessagingPlatformRootAutoConfiguration.java:28 @ConditionalOnProperty(prefix = MessagingSettin</tspan><tspan x="24" dy="22">gs.PREFIX, name = "enabled", havingValue = "true")</tspan></text>
|
|
<text x="24" y="1574" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · messaging/autoconfigure/MessagingProviderSelection.java:48 "kafka", KafkaMessagingAutoConfiguration.class,</tspan></text>
|
|
<text x="24" y="1596" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="1618" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># broker 만 준 시험이 통과하는 이유 — 게이트 뒤 설정을 손으로 등록한다</tspan></text>
|
|
<text x="24" y="1640" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · adapter/outbound/messaging/MessagingConfigTest.java:41 .withUserConfiguration(KafkaAdapterConfig.class)</tspan></text>
|
|
<text x="24" y="1662" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:59 private final ApplicationContextRunner runner =</tspan></text>
|
|
<text x="24" y="1684" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:60 new ApplicationContextRunner()</tspan></text>
|
|
<text x="24" y="1706" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:61 // Registered as a real auto-configuration entry, which is how the com</tspan><tspan x="24" dy="22">position root</tspan></text>
|
|
<text x="24" y="1750" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:62 // reaches it: the HTTP Client platform's off state is a property of t</tspan><tspan x="24" dy="22">hat entry, not of a</tspan></text>
|
|
<text x="24" y="1794" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:63 // hand-assembled subset of its children.</tspan></text>
|
|
<text x="24" y="1816" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:64 .withConfiguration(AutoConfigurations.of(HttpClientPlatformAutoConfigu</tspan><tspan x="24" dy="22">ration.class))</tspan></text>
|
|
<text x="24" y="1860" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:65 .withUserConfiguration(</tspan></text>
|
|
<text x="24" y="1882" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:66 OutboundSupportConfig.class,</tspan></text>
|
|
<text x="24" y="1904" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:67 MessagingConfig.class,</tspan></text>
|
|
<text x="24" y="1926" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:68 KafkaAdapterConfig.class,</tspan></text>
|
|
<text x="24" y="1948" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:69 NotificationConfig.class,</tspan></text>
|
|
<text x="24" y="1970" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OptionalAdapterBeanGatingTest.java:70 SlackNotificationAdapterConfig.class,</tspan></text>
|
|
<text x="24" y="1992" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 두 시험이 컴포지션 루트를 쓰는가 :</tspan></text>
|
|
<text x="24" y="2014" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java CaSkeletonApplication 언급 0 건</tspan></text>
|
|
<text x="24" y="2036" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java CaSkeletonApplication 언급 0 건</tspan></text>
|
|
<text x="24" y="2058" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig 가 그 슬라이스에 등록되는가 :</tspan></text>
|
|
<text x="24" y="2080" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java KafkaSenderConfig 언급 0 건</tspan></text>
|
|
<text x="24" y="2102" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java KafkaSenderConfig 언급 0 건</tspan></text>
|
|
<text x="24" y="2124" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="2146" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 이 조합을 거르는 검증기가 있는가</tspan></text>
|
|
<text x="24" y="2168" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:64 }</tspan></text>
|
|
<text x="24" y="2190" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:65 if (relay && !outbox) {</tspan></text>
|
|
<text x="24" y="2212" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:66 violations.add(</tspan></text>
|
|
<text x="24" y="2234" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:67 "ca-skeleton.outbox.relay-enabled=true only starts the scheduler for a capabil</tspan><tspan x="24" dy="22">ity that is "</tspan></text>
|
|
<text x="24" y="2278" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:68 + "off; set ca-skeleton.outbox.enabled=true or turn the relay off.");</tspan></text>
|
|
<text x="24" y="2300" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:69 }</tspan></text>
|
|
<text x="24" y="2322" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:70 if (messaging && broker.isEmpty()) {</tspan></text>
|
|
<text x="24" y="2344" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:71 violations.add(</tspan></text>
|
|
<text x="24" y="2366" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:72 "app.messaging.enabled=true needs a transport; set app.messaging.broker to a r</tspan><tspan x="24" dy="22">egistered "</tspan></text>
|
|
<text x="24" y="2410" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:73 + "broker id.");</tspan></text>
|
|
<text x="24" y="2432" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:74 }</tspan></text>
|
|
<text x="24" y="2454" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:75 if ("jdbc"</tspan></text>
|
|
<text x="24" y="2476" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:76 .equalsIgnoreCase(</tspan></text>
|
|
<text x="24" y="2498" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:77 environment.getProperty(</tspan></text>
|
|
<text x="24" y="2520" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:78 "ca-skeleton.capabilities.idempotency.provider", "disabled"))</tspan></text>
|
|
<text x="24" y="2542" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:79 && !jpa) {</tspan></text>
|
|
<text x="24" y="2564" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CapabilityDependencyValidator.java:80 violations.add(</tspan></text>
|
|
<text x="24" y="2586" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="2608" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 운영 문서가 이 키를 무엇이라고 설명하는가</tspan></text>
|
|
<text x="24" y="2630" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:26 ### Step 1 — 확인</tspan></text>
|
|
<text x="24" y="2652" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:27 1. ERROR log에서 `OUTBOX_PUBLISH_FAILED` 라인 확인: `event_type`, `event_id`, `corre</tspan><tspan x="24" dy="22">lation_id`, `attempt_count` 추출</tspan></text>
|
|
<text x="24" y="2696" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:28 2. broker 상태 확인: `APP_MESSAGING_BROKER` 값과 broker endpoint 가용성. 이 키는 활</tspan><tspan x="24" dy="22">성화 스위치가</tspan></text>
|
|
<text x="24" y="2740" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:29 아니라 **선택자**다 — messaging을 끄는 것은 `APP_MESSAGING_ENABLED=false`이고, </tspan><tspan x="24" dy="22">이 값을 비운다고</tspan></text>
|
|
<text x="24" y="2784" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:30 messaging이 꺼지지는 않는다.</tspan></text>
|
|
<text x="24" y="2806" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:31 - `APP_MESSAGING_BROKER`가 공백인 채로 relay가 켜져 있으면 **애플리케이션이 기동</tspan><tspan x="24" dy="22">하지 않는다**</tspan></text>
|
|
<text x="24" y="2850" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> docs/runbooks/outbox-publish-failed.md:32 (`OutboxRelayBrokerRequirementValidator`, MSG-024). 이 조합에서는 publish가 전</tspan><tspan x="24" dy="22">부</tspan></text>
|
|
<text x="24" y="2894" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="2916" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 출하 설정이 두 키를 어떻게 주는가</tspan></text>
|
|
<text x="24" y="2938" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> compose-profile-contracts.json:170: "APP_MESSAGING_ENABLED": "true",</tspan></text>
|
|
<text x="24" y="2960" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> compose-profile-contracts.json:171: "APP_MESSAGING_BROKER": "kafka",</tspan></text>
|
|
<text x="24" y="2982" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> compose-profile-contracts.json:202: "APP_MESSAGING_ENABLED": "true",</tspan></text>
|
|
<text x="24" y="3004" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> compose-profile-contracts.json:203: "APP_MESSAGING_BROKER": "kafka",</tspan></text>
|
|
<text x="24" y="3026" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> compose-profile-contracts.json:604: "APP_MESSAGING_ENABLED": "true",</tspan></text>
|
|
<text x="24" y="3048" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> compose-profile-contracts.json:605: "APP_MESSAGING_BROKER": "kafka",</tspan></text>
|
|
<text x="24" y="3070" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> .env:38:APP_MESSAGING_BROKER=</tspan></text>
|
|
<text x="24" y="3092" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> .env.example:229:APP_MESSAGING_BROKER=</tspan></text>
|
|
<text x="24" y="3114" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> .env.example:299:APP_MESSAGING_ENABLED=false</tspan></text>
|
|
<text x="24" y="3136" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> .env.local.example:20:APP_MESSAGING_ENABLED=false</tspan></text>
|
|
<text x="24" y="3158" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> .env.local.example:21:APP_MESSAGING_BROKER=</tspan></text>
|
|
<text x="24" y="3180" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="3202" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># KafkaSenderConfig 가 조건에서 물러나는가</tspan></text>
|
|
<text x="24" y="3224" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:60 */</tspan></text>
|
|
<text x="24" y="3246" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:61 @Bean(name = "kafkaSeamProducer", destroyMethod = "close")</tspan></text>
|
|
<text x="24" y="3268" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:62 @ConditionalOnMissingBean(name = "kafkaSeamProducer")</tspan></text>
|
|
<text x="24" y="3290" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:63 public Producer<String, String> kafkaSeamProducer(KafkaAdapterSettings settings) {</tspan></text>
|
|
<text x="24" y="3312" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:64 Map<String, Object> config = new HashMap<>();</tspan></text>
|
|
<text x="24" y="3334" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:65 config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, String.join(",", settings.brokers()));</tspan></text>
|
|
<text x="24" y="3356" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="3378" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 이음매 설정 클래스 자신은 스캔 대상인가</tspan></text>
|
|
<text x="24" y="3400" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> KafkaSenderConfig.java:1 package dev.caskeleton.bootstrap.messaging;</tspan></text>
|
|
<text x="24" y="3422" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> AUTO_CONFIGURED_PACKAGES 가 bootstrap.messaging 을 제외하는가 : 0 건</tspan></text>
|
|
<text x="24" y="3444" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="3466" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 이음매 쪽 생산자가 요구하는 설정 빈은 어디서 오는가</tspan></text>
|
|
<text x="24" y="3488" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · adapter/outbound/messaging/kafka/KafkaAdapterConfig.java:19 @EnableConfigurationProperties(KafkaAdapterSettings.class)</tspan></text>
|
|
<text x="24" y="3510" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · adapter/outbound/messaging/autoconfigure/MessagingBridgeRootAutoConfiguration.java:21 @ConditionalOnProperty(prefix = </tspan><tspan x="24" dy="22">"app.messaging", name = "enabled", havingValue = "true")</tspan></text>
|
|
<text x="24" y="3554" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · adapter/outbound/messaging/autoconfigure/MessagingBridgeRootAutoConfiguration.java:23 @Import({MessagingConfig.class, </tspan><tspan x="24" dy="22">KafkaAdapterConfig.class})</tspan></text>
|
|
<text x="24" y="3598" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="3620" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 설정 클래스가 컴포넌트 스캔으로 들어올 수 있는가</tspan></text>
|
|
<text x="24" y="3642" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:41 @ComponentScan(</tspan></text>
|
|
<text x="24" y="3664" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:42 basePackages = {</tspan></text>
|
|
<text x="24" y="3686" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:43 "dev.caskeleton.bootstrap",</tspan></text>
|
|
<text x="24" y="3708" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:44 "dev.caskeleton.adapter",</tspan></text>
|
|
<text x="24" y="3730" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:45 "dev.caskeleton.application",</tspan></text>
|
|
<text x="24" y="3752" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:46 "dev.caskeleton.domain",</tspan></text>
|
|
<text x="24" y="3774" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:47 "dev.caskeleton.shared"</tspan></text>
|
|
<text x="24" y="3796" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:48 },</tspan></text>
|
|
<text x="24" y="3818" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:49 excludeFilters = {</tspan></text>
|
|
<text x="24" y="3840" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:50 @ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),</tspan></text>
|
|
<text x="24" y="3862" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:51 @ComponentScan.Filter(</tspan></text>
|
|
<text x="24" y="3884" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:52 type = FilterType.CUSTOM,</tspan></text>
|
|
<text x="24" y="3906" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:53 classes = AutoConfigurationExcludeFilter.class),</tspan></text>
|
|
<text x="24" y="3928" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:54 @ComponentScan.Filter(</tspan></text>
|
|
<text x="24" y="3950" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:55 type = FilterType.REGEX,</tspan></text>
|
|
<text x="24" y="3972" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:56 pattern = CaSkeletonApplication.AUTO_CONFIGURED_PACKAGES)</tspan></text>
|
|
<text x="24" y="3994" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:57 })</tspan></text>
|
|
<text x="24" y="4016" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:100 static final String AUTO_CONFIGURED_PACKAGES =</tspan></text>
|
|
<text x="24" y="4038" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:101 "dev\\.caskeleton\\.bootstrap\\.autoconfigure\\..*"</tspan></text>
|
|
<text x="24" y="4060" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> CaSkeletonApplication.java:105 + "|dev\\.caskeleton\\.adapter\\.outbound\\.messaging\\..*"</tspan></text>
|
|
<text x="24" y="4082" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> ConfigurationPropertiesScan 목록에 adapter.outbound.messaging 이 있는가 :</tspan></text>
|
|
<text x="24" y="4104" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 0 건</tspan></text>
|
|
<text x="24" y="4126" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="4148" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># broker=kafka 를 쓰는 시험마다 같은 파일이 enabled 를 주는가</tspan></text>
|
|
<text x="24" y="4170" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java broker=kafka 3 줄 · enabled= 0 줄</tspan></text>
|
|
<text x="24" y="4192" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java broker=kafka 1 줄 · enabled= 0 줄</tspan></text>
|
|
<text x="24" y="4214" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingLiveRoundTripQualificationTest.java broker=kafka 1 줄 · enabled= 1 줄</tspan></text>
|
|
<text x="24" y="4236" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingStarterOffContractTest.java broker=kafka 3 줄 · enabled= 7 줄</tspan></text>
|
|
<text x="24" y="4258" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> enabled 를 한 줄도 주지 않는 파일의 시험 이름 :</tspan></text>
|
|
<text x="24" y="4280" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java:25 void blankBrokerBindsDisabledSentinelsCharacterization() {</tspan></text>
|
|
<text x="24" y="4302" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java:39 void selectedKafkaBrokerWithoutProjectSenderFailsStartupCharacterization() {</tspan></text>
|
|
<text x="24" y="4324" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java:54 void selectedBrokerIdMismatchFailsStartupCharacterization() {</tspan></text>
|
|
<text x="24" y="4346" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MessagingConfigTest.java:76 public void send(</tspan></text>
|
|
<text x="24" y="4368" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java:77 void allOptionalAdaptersAreDisabledByDefaultAndTheAppStillStarts() {</tspan></text>
|
|
<text x="24" y="4390" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java:114 void kafkaSelectedRegistersTheBrokerAndBindsTheRealPublishers() {</tspan></text>
|
|
<text x="24" y="4412" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java:135 void slackWebhookEnabledContributesTheProviderAndRoutesBoundNotifications() {</tspan></text>
|
|
<text x="24" y="4434" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java:153 void googleEmailEnabledContributesTheProviderAndRoutesBoundNotifications() {</tspan></text>
|
|
<text x="24" y="4456" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OptionalAdapterBeanGatingTest.java:170 void aRouteBindingToADisabledProviderFailsStartup() {</tspan></text>
|
|
</svg>
|