merge: integrate messaging R2 polling producer

# Conflicts:
#	docs/superpowers/specs/2026-07-28-messaging-production-capability-design.md
#	src/app-bootstrap/gradle.lockfile
#	src/app-bootstrap/src/test/java/dev/caskeleton/bootstrap/architecture/ArchitectureViolationFixtureTest.java
#	src/build.gradle
This commit is contained in:
donghyeon-ka
2026-08-01 00:04:02 +09:00
92 changed files with 10591 additions and 54 deletions
@@ -1,7 +1,7 @@
# Messaging Production Capability Deep Design
- 작성일: 2026-07-28
- 상태: 상세 설계 승인, 실행 계획 작성·독립 검토 완료, 구현 미착수
- 상태: 상세 설계 승인, P0 characterization 및 P1 implementation candidate 완료, P2 이후 미착수
- 기준: Java 21, Spring Boot 4.0.0, Gradle 멀티모듈 Clean Architecture
- 현재 outbound leaf: `adapter-outbound-messaging`
- 미래 inbound leaf: `adapter-inbound-messaging-kafka`
@@ -124,8 +124,8 @@ cdc = disabled
| Phase | 산출물 | 2026-07-28 상태 | 허용 표현 |
| --- | --- | --- | --- |
| P0 | current truth, design, characterization | `IMPLEMENTATION_PLAN_READY` | 설계·실행 계획 완료, 구현 미착수 |
| P1 | event contract/catalog/envelope/schema | `NOT_STARTED` | 미구현 |
| P0 | current truth, design, characterization | `CHARACTERIZED` | legacy R0 동작 고정, production 동작 변경 없음 |
| P1 | event contract/catalog/envelope/schema | `IMPLEMENTED_CANDIDATE` | deterministic local wire contract 후보, production 미연결 |
| P2 | immutable event + polling delivery v2 | `NOT_STARTED` | legacy polling만 존재 |
| P3 | Spring Kafka ACK-aware producer | `NOT_STARTED` | Kafka seam R0 |
| P4 | security/observability/fault/real-service R2 evidence | `NOT_STARTED` | R2 주장 금지 |
@@ -136,6 +136,20 @@ cdc = disabled
Phase 진행도와 capability readiness는 별도 축이다. 예를 들어 P3 코드가 존재해도 exact selected
profile이 real Kafka, 보안, fault, shutdown evidence를 통과하지 않으면 R2가 아니다.
P1 후보는 closed application contract SPI, generic/sample schema, exact destination/card binding,
single-snapshot deterministic envelope, pinned local Draft 2020-12 validation과 payload-free build
evidence까지 구현했다. `verifyMessagingJsonSchemaV1` 28개와 `verifyMessagingContracts` 82개
scenario가 실패/skip 없이 통과했으며 생성 manifest도 공통 Draft 2020-12 schema로 실제
검증한다. `json-schema-envelope.v1``implemented-candidate`이고 evidence fingerprint는
release attestation이 아니므로 비워 둔다. Kafka ACK producer, durable outbox v2, production
runtime wiring, full validator compatibility와 regex execution timeout은 여전히 미구현/미증명이다.
P0 characterization은 blank broker의 disabled sentinel, 선택 broker의 sender 누락 및 broker ID
불일치 startup 실패, legacy void sender 정상 반환 뒤 `PUBLISHED`, sender 예외 뒤 `FAILED/DEAD`,
상태 mark 실패 뒤 `IN_FLIGHT`와 duplicate 가능 구간, 같은 transaction의 append rollback,
`occurred_at` timestamp만 사용하는 FIFO의 동률 한계를 현재 truth로 고정한다. 여기서 legacy
void 반환은 broker acknowledgement가 아니다.
## 1. 설계 판정
이번 설계는 provider-neutral semantic contract와 Kafka reference implementation을 분리한다.
@@ -1056,10 +1070,9 @@ transaction/inbox provider를 조립한다.
- provider setting;
- feature-specific topic.
현재 `shared-contract/CLAUDE.md`에는 messaging schema resource가 아직 책임으로 등록되어 있지
않다. P1에서 공통 envelope schema를 추가하는 변경은 같은 commit scope에서 해당
`CLAUDE.md`의 Responsibility를 갱신하고 Java-stdlib-only 규칙과 business-free 검증을
추가해야 한다. 이 정책 갱신 없이 resource만 넣지 않는다.
P1 구현에서 공통 envelope schema와 함께 `shared-contract/CLAUDE.md`의 Responsibility,
Java-stdlib-only 규칙, business-free 검증을 갱신했다. 이후 schema resource를 확장할 때도
이 세 계약을 같은 변경 범위에서 유지한다.
### 9.7 `app-bootstrap`
@@ -5429,7 +5442,7 @@ Kafka에 갈 수 있는 시점부터 old/new relay를 동시에 켜는 rollback
- LLM Wiki capture.
현재 문서 상태는 사용자 승인에 따라
`상세 설계 승인, 실행 계획 작성·독립 검토 완료, 구현 미착수`다.
`상세 설계 승인, P0 characterization 및 P1 implementation candidate 완료, P2 이후 미착수`다.
### 31.2 First R2 implementation complete