# 사슬의 나머지가 사라진 지점
2f5d2fc2 feat: jpa, messaging, notification, mongo, graphql 어댑터터 구현체 추가
0e61f86e feat(jpa): implement the JPA relational persistence platform
 .../transaction/RetryableJpaTransaction.java       |   44 -
 .../RetryableJpaTransactionInterceptor.java        |  109 --
 .../RetryableJpaTransactionInterceptorTest.java    |  211 ---
 909 files changed, 62488 insertions(+), 6332 deletions(-)
#   그 클래스가 지금 main 에 남긴 줄: 0

# 삭제되기 직전, 그 인터셉터가 레지스트리를 어떻게 썼는가
30:  public static final int DEFAULT_ORDER = Ordered.HIGHEST_PRECEDENCE + 100;
41:  private final TransactionProfileRegistry profiles;
45:      FullTransactionRetryCoordinator coordinator, TransactionProfileRegistry profiles) {
50:      FullTransactionRetryCoordinator coordinator, TransactionProfileRegistry profiles, int order) {
66:    TransactionProfile profile = profiles.require(policy.profile());
69:      return coordinator.execute(operation, profile, () -> proceed(invocation), transactionKey);

# 같은 커밋이 레지스트리 javadoc 에서 애너테이션 이름만 지웠다
- * default would mean a typo in {@code @RetryableJpaTransaction(profile = "order-wrtie")} silently
- * runs with someone else's isolation, timeout, and retry budget.
+ * default would mean a typo in a profile name of {@code "order-wrtie"} silently runs with someone
+ * else's isolation, timeout, and retry budget.

# 문자열 이름을 fail-closed 로 찾는 형제는 하나뿐이다
77:  public SafeSortField require(String publicName) {
65:    SafeSortField field = registry.require(parts[0].trim());
#   다른 둘은 키 타입이 달라 오타가 들어올 자리가 없다
61-   */
62:  public GrpcChannelRuntime require(GrpcChannelProfileName profileName) {
150-  /** The descriptor for a profile; every enum constant is always present. */
151:  public MongoConsistencyDescriptor require(MongoConsistencyProfile profile) {

# ADR 은 결정 절과 강제 절 양쪽에서 사라진 것을 전제한다
16:retry advice is ordered outside Spring's transaction advice so each attempt begins a new
37:`FullTransactionRetryCoordinatorTest`; `RetryableJpaTransactionInterceptor.DEFAULT_ORDER`.
#   DEFAULT_ORDER 가 소스 전체에 있는 줄: 0
#   JPA 리프 main 에 MethodInterceptor 나 Advisor 가 있는 줄: 0

# 레지스트리를 지키는 유일한 테스트가 고정하는 것
11:/** Plan Task 9 — profile lookup is fail-closed (design §9.2). */
20:  @DisplayName("a registered profile resolves")
27:  @DisplayName("a mistyped profile name fails rather than falling back to a default")
35:  @DisplayName("a duplicate registration is rejected")
