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>
56 lines
5.0 KiB
Plaintext
56 lines
5.0 KiB
Plaintext
Command: current reachability and history for JpaTransactionConfig / TransactionProfileRegistry / removed declarative retry interceptor
|
|
Working directory: /shared/codebase/clean-architecture-backend-template
|
|
Executed at: 2026-08-29T08:05:13Z
|
|
Source revision: a24ece9cf797f7ea647e33bf846b115208ed1ba5
|
|
Observation boundary: Distinguishes a zero-direct-reference Spring configuration reached by component scan from a zero-production-reference registry left after declarative retry interceptor removal. It does not prove external consumers of non-api public classes.
|
|
--- stdout/stderr ---
|
|
=== JpaTransactionConfig current refs ===
|
|
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/config/JpaAdapterComponentsConfig.java:51: * same package — {@code JpaTransactionConfig} for {@code JpaTransactionSettings}, {@code
|
|
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/JpaTransactionConfig.java:24:public class JpaTransactionConfig {}
|
|
=== adapter component scan ===
|
|
* the JDBC one — and was registered by nothing but a test calling {@code ctx.register(...)}. So a
|
|
* single-instance deployment had no {@code DistributedLockPort} at all, and a multi-instance one
|
|
* could not start: the composition root's own {@code DistributedLockConfig} asks for a bean
|
|
* qualified {@code jdbcDistributedLock} that only that configuration declares.
|
|
*
|
|
* <p>Each package's {@code @ConfigurationProperties} type is enabled by a configuration inside that
|
|
* same package — {@code JpaTransactionConfig} for {@code JpaTransactionSettings}, {@code
|
|
* DistributedLockPersistenceConfig} for {@code LockSettings} — rather than from here. Enabling them
|
|
* centrally would give {@code config} an edge to {@code lock} and {@code transaction} that the
|
|
* module map does not grant it, and the map is right: this class knows which packages to scan, not
|
|
* what is inside them. They need enabling at all because {@code @ConfigurationPropertiesScan}
|
|
* excludes this tree as deliberately as {@code @ComponentScan} does.
|
|
*/
|
|
@Configuration(proxyBeanMethods = false)
|
|
@ComponentScan(
|
|
basePackages = {
|
|
"dev.caskeleton.adapter.outbound.persistence.audit",
|
|
"dev.caskeleton.adapter.outbound.persistence.failure",
|
|
"dev.caskeleton.adapter.outbound.persistence.idempotency",
|
|
"dev.caskeleton.adapter.outbound.persistence.lock",
|
|
"dev.caskeleton.adapter.outbound.persistence.outbox",
|
|
"dev.caskeleton.adapter.outbound.persistence.transaction"
|
|
})
|
|
public class JpaAdapterComponentsConfig {}
|
|
=== TransactionProfileRegistry current refs ===
|
|
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistry.java:16:public final class TransactionProfileRegistry {
|
|
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistry.java:20: public TransactionProfileRegistry(Map<String, TransactionProfile> profiles) {
|
|
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistry.java:37: public static TransactionProfileRegistry of(TransactionProfile... profiles) {
|
|
src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistry.java:44: return new TransactionProfileRegistry(byName);
|
|
src/adapter/outbound/persistence-jpa/src/test/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistryTest.java:14: private final TransactionProfileRegistry registry =
|
|
src/adapter/outbound/persistence-jpa/src/test/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistryTest.java:15: TransactionProfileRegistry.of(
|
|
src/adapter/outbound/persistence-jpa/src/test/java/dev/caskeleton/adapter/outbound/persistence/transaction/TransactionProfileRegistryTest.java:39: TransactionProfileRegistry.of(
|
|
=== removed interceptor history ===
|
|
COMMIT 2f5d2fc21954286213c1474d19935f571ef896ea feat: jpa, messaging, notification, mongo, graphql 어댑터터 구현체 추가
|
|
|
|
D src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/RetryableJpaTransactionInterceptor.java
|
|
D src/adapter/outbound/persistence-jpa/src/test/java/dev/caskeleton/adapter/outbound/persistence/transaction/RetryableJpaTransactionInterceptorTest.java
|
|
M src/app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/jpa/JpaTransactionAutoConfiguration.java
|
|
COMMIT 0e61f86eb58512fb117093c359492d2fe2958382 feat(jpa): implement the JPA relational persistence platform
|
|
|
|
A src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/transaction/RetryableJpaTransactionInterceptor.java
|
|
A src/adapter/outbound/persistence-jpa/src/test/java/dev/caskeleton/adapter/outbound/persistence/transaction/RetryableJpaTransactionInterceptorTest.java
|
|
A src/app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/jpa/JpaTransactionAutoConfiguration.java
|
|
|
|
Exit code: 0
|