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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user