2 lines
158 KiB
JSON
2 lines
158 KiB
JSON
{"audit_request":{"assertions":[{"assertion_id":"A-ARCH-001","condition":"unconditional","line_end":1787,"line_start":1787,"modality":"must","object":"PostgreSQL as the single mandatory external dependency (Redis/Kafka/Email/Slack/Google 은 모두 optional)","predicate":"requires","quote":"**핵심 메시지**: Application 은 **단 하나의 mandatory 외부 의존성 = PostgreSQL** 만 가진다. Redis / Kafka / Email / Slack / Google 은 모두 optional — adapter 를 끄거나 외부 장애 시에도 앱 자체는 살아 있어야 한다.","scope":"external dependency & trust boundary (§30-2)","source_surface":"SURF-BD0C46258879A2209E19","subject":"Application"},{"assertion_id":"A-ARCH-002","condition":"Mandatory adapter (PostgreSQL) 장애","line_end":1799,"line_start":1799,"modality":"must","object":"mandatory adapter (PostgreSQL) 장애 시 /readyz 실패 + traffic 차단","predicate":"has_failure_behavior","quote":"- Mandatory adapter (PostgreSQL) 장애 → app 자체가 `/readyz` 실패, traffic 차단","scope":"§11 Adapter Failure Contract","source_surface":"SURF-BD0C46258879A2209E19","subject":"app"},{"assertion_id":"A-ARCH-003","condition":"Optional internal adapter (Redis/Kafka) 장애","line_end":1800,"line_start":1800,"modality":"must","object":"optional internal adapter (Redis/Kafka) 장애 시 해당 기능만 degrade, app 자체는 healthy","predicate":"has_failure_behavior","quote":"- Optional internal adapter (Redis/Kafka) 장애 → 해당 기능만 degrade, app 자체는 healthy","scope":"§11 Adapter Failure Contract","source_surface":"SURF-BD0C46258879A2209E19","subject":"app"},{"assertion_id":"A-ARCH-004","condition":"unconditional","line_end":1772,"line_start":1772,"modality":"must_not","object":"depending on any other module or Spring/JPA/HTTP/cloud SDK (순수 Java 만)","predicate":"forbids","quote":"- `domain` → 어떤 다른 모듈 또는 Spring/JPA/HTTP/cloud SDK (순수 Java 만)","scope":"module dependency HARD-STOP (§30-1)","source_surface":"SURF-BD0C46258879A2209E19","subject":"domain"},{"assertion_id":"A-ARCH-005","condition":"unconditional","line_end":1773,"line_start":1773,"modality":"must_not","object":"depending on infra 또는 presentation (포트로만 통신)","predicate":"forbids","quote":"- `service` → `infra` 또는 `presentation` (포트로만 통신)","scope":"module dependency HARD-STOP (§30-1)","source_surface":"SURF-BD0C46258879A2209E19","subject":"service"},{"assertion_id":"A-ARCH-006","condition":"unconditional","line_end":1766,"line_start":1766,"modality":"may","object":"presentation / service / infra / domain as composition root","predicate":"uses","quote":"- `cmd → presentation / service / infra / domain` — composition root","scope":"module dependency allowed direction (§30-1)","source_surface":"SURF-BD0C46258879A2209E19","subject":"cmd"},{"assertion_id":"A-ARCH-007","condition":"unconditional","line_end":1778,"line_start":1778,"modality":"observed","object":"Gradle project-dependency direction (Clean Architecture)","predicate":"validates","quote":"- `./gradlew verifyCleanArchitectureDependencies` — Gradle project-dependency check","scope":"module dependency verification (§30-1)","source_surface":"SURF-BD0C46258879A2209E19","subject":"./gradlew verifyCleanArchitectureDependencies"},{"assertion_id":"A-ARCH-008","condition":"unconditional","line_end":1803,"line_start":1803,"modality":"must_not","object":"being hard-coded to behave like a mandatory dependency (null 검사 없는 의존) -> §11 위반","predicate":"forbids","quote":"**금지**: optional adapter 가 mandatory 처럼 동작하도록 hard-coded (e.g., service 가 `RedisCachePort` 를 null 검사 없이 의존) → §11 위반.","scope":"§11 Adapter Failure Contract","source_surface":"SURF-BD0C46258879A2209E19","subject":"optional adapter"},{"assertion_id":"A-BND-001","condition":"unconditional","line_end":48,"line_start":48,"modality":"must_not","object":"using ProblemDetail; 자체 structured envelope 응답을 사용","predicate":"forbids","quote":"- `ProblemDetail` 사용 안 함. 자체 structured envelope 응답을 사용.","scope":"하지 않는 것 (§2)","source_surface":"SURF-B51080C04B900DD1ABC2","subject":"ca-skeleton"},{"assertion_id":"A-BND-002","condition":"unconditional","line_end":51,"line_start":51,"modality":"must_not","object":"loading Kafka/Redis/Slack/Google Email as a heavy default dependency","predicate":"forbids","quote":"- Kafka/Redis/Slack/Google Email을 기본 dependency로 무겁게 탑재하지 않음.","scope":"하지 않는 것 (§2)","source_surface":"SURF-B51080C04B900DD1ABC2","subject":"ca-skeleton"},{"assertion_id":"A-BND-003","condition":"unconditional","line_end":52,"line_start":52,"modality":"must_not","object":"exposing raw exception, SQL, token, request/response body to client response or default log","predicate":"forbids","quote":"- raw exception, SQL, token, request/response body를 클라이언트 응답이나 기본 로그에 노출하지 않음.","scope":"하지 않는 것 (§2)","source_surface":"SURF-B51080C04B900DD1ABC2","subject":"ca-skeleton"},{"assertion_id":"A-BND-004","condition":"unconditional","line_end":53,"line_start":53,"modality":"must_not","object":"deriving directly to wiki/interview / wiki/portfolio / wiki/blog; must promote to wiki/projects canonical first","predicate":"forbids","quote":"- `wiki/interview/`, `wiki/portfolio/`, `wiki/blog/`로 직접 파생하지 않음. 먼저 `wiki/projects/` canonical 문서로 승급.","scope":"하지 않는 것 (§2)","source_surface":"SURF-B51080C04B900DD1ABC2","subject":"ca-skeleton"},{"assertion_id":"A-BND-005","condition":"unconditional","line_end":50,"line_start":50,"modality":"observed","object":"is a contract verification tool, not a business feature","predicate":"other","quote":"- 단, skeleton 계약 검증을 위한 sample domain fixture는 둠. 이 sample은 비즈니스 기능이 아니라 contract 검증 도구임.","scope":"하지 않는 것 (§2)","source_surface":"SURF-B51080C04B900DD1ABC2","subject":"sample domain fixture"},{"assertion_id":"A-DEC-001","condition":"unconditional","line_end":1209,"line_start":1209,"modality":"must","object":"envelope schema 와 error.category enum 의 단일 owner","predicate":"owns","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |","scope":"DEC-...-ERROR-ENVELOPE-001 (error-envelope)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"foundation"},{"assertion_id":"A-DEC-002","condition":"unconditional","line_end":1210,"line_start":1210,"modality":"must","object":"OpenAPI drift 의 release-blocking 판정권","predicate":"owns","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |","scope":"DEC-...-OPENAPI-001 (openapi)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"verification suite"},{"assertion_id":"A-DEC-003","condition":"unconditional","line_end":1206,"line_start":1206,"modality":"must","object":"separation of domain-core / application-core / adapter-* / shared-contract / app-bootstrap / sample-portfolio responsibilities","predicate":"enforces","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |","scope":"DEC-...-MODULE-LAYOUT-001 (module-layout)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"Gradle multi-module"},{"assertion_id":"A-DEC-004","condition":"unconditional","line_end":1207,"line_start":1207,"modality":"must","object":"TransactionPort 또는 TransactionalUseCaseRunner instead of Spring transaction annotation","predicate":"uses","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |","scope":"DEC-...-TRANSACTION-001 (transaction)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"application"},{"assertion_id":"A-DEC-005","condition":"unconditional","line_end":1211,"line_start":1211,"modality":"must","object":"readiness healthy 전환 (startup 실행, migration 완료 후에만 healthy)","predicate":"runs_before","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |","scope":"DEC-...-MIGRATION-001 (migration)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"Flyway"},{"assertion_id":"A-DEC-006","condition":"unconditional","line_end":1213,"line_start":1213,"modality":"must","object":"broker-agnostic outbox (Kafka 는 optional adapter)","predicate":"produces","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |","scope":"DEC-...-EVENT-BROKER-001 (event-broker)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"core"},{"assertion_id":"A-DEC-007","condition":"unconditional","line_end":1220,"line_start":1220,"modality":"must_not","object":"use in unit·architecture·contract test (허용: persistence/outbound integration test)","predicate":"forbids","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |","scope":"DEC-...-TESTCONTAINERS-001 (testcontainers)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"Testcontainers"},{"assertion_id":"A-DEC-008","condition":"multi-instance activation","line_end":1212,"line_start":1212,"modality":"must","object":"DB advisory lock (single-instance 가 default)","predicate":"requires","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |","scope":"DEC-...-SCHEDULER-LOCK-001 (scheduler-lock, conditional-default)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"scheduler/outbox"},{"assertion_id":"A-DEC-009","condition":"unconditional","line_end":1221,"line_start":1221,"modality":"must","object":"Java 21 LTS","predicate":"other","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |","scope":"DEC-...-STACK-LANGUAGE-001 (stack-language)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"application language"},{"assertion_id":"A-DEC-010","condition":"unconditional","line_end":1225,"line_start":1225,"modality":"must","object":"PostgreSQL 16 단일 stack","predicate":"other","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |","scope":"DEC-...-STACK-DATABASE-001 (stack-database)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"database"},{"assertion_id":"A-DEC-011","condition":"unconditional","line_end":1214,"line_start":1214,"modality":"must","object":"default resilience library (Spring Retry 는 simple blocking retry 에만 허용)","predicate":"other","quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |","scope":"DEC-...-RESILIENCE-001 (resilience)","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"Resilience4j"},{"assertion_id":"A-DEC-012","condition":"multi-instance 지원을 주장할 때","line_end":1241,"line_start":1241,"modality":"must","object":"적용 영역 contract test 존재 (없으면 문서/README에 single-instance skeleton 명시)","predicate":"requires","quote":"multi-instance를 지원한다고 말하려면 위 행 중 적용 영역의 contract test가 있어야 합니다. 없으면 문서와 README에 `single-instance skeleton`이라고 명시합니다.","scope":"multi-instance activation table","source_surface":"SURF-29C87EF921149E2B5CD1","subject":"multi-instance support claim"},{"assertion_id":"A-RT-001","condition":"unconditional","line_end":425,"line_start":425,"modality":"must","object":"covers lifecycle failures that occur without business logic","predicate":"other","quote":"서버 운영에서 business logic 없이도 발생하는 lifecycle 실패를 다룹니다.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-002","condition":"unconditional","line_end":427,"line_start":427,"modality":"must","object":"defines actuator health/readiness/liveness 기준","predicate":"other","quote":"- actuator health/readiness/liveness 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-003","condition":"unconditional","line_end":428,"line_start":428,"modality":"must","object":"defines graceful shutdown 기준","predicate":"other","quote":"- graceful shutdown 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-004","condition":"unconditional","line_end":429,"line_start":429,"modality":"must","object":"defines startup validation 기준","predicate":"other","quote":"- startup validation 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-005","condition":"unconditional","line_end":430,"line_start":430,"modality":"must","object":"defines migration failure 처리 기준","predicate":"has_failure_behavior","quote":"- migration failure 처리 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-006","condition":"unconditional","line_end":431,"line_start":431,"modality":"must","object":"defines scheduled job 실패 기준","predicate":"has_failure_behavior","quote":"- scheduled job 실패 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-007","condition":"unconditional","line_end":432,"line_start":432,"modality":"must","object":"defines async executor/thread pool rejection 기준","predicate":"has_failure_behavior","quote":"- async executor/thread pool rejection 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-008","condition":"unconditional","line_end":433,"line_start":433,"modality":"must","object":"classifies memory/disk/temp file/resource exhaustion","predicate":"has_failure_behavior","quote":"- memory/disk/temp file/resource exhaustion 분류.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-RT-009","condition":"unconditional","line_end":434,"line_start":434,"modality":"must","object":"defines JVM timezone/system clock 기준","predicate":"other","quote":"- JVM timezone/system clock 기준.","scope":"runtime/lifecycle scope (§15)","source_surface":"SURF-8F9F93D899EF5835AA87","subject":"§15 Runtime / Lifecycle Contract"},{"assertion_id":"A-SEQ-001","condition":"HTTP request 처리 시","line_end":1821,"line_start":1821,"modality":"observed","object":"Request DTO (§4 syntax layer)","predicate":"validates","quote":" FE->>FE: Request DTO validation (§4 syntax layer)","scope":"핵심 시퀀스 (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Presentation (Controller / FE)"},{"assertion_id":"A-SEQ-002","condition":"Application(UseCase) 호출 시","line_end":1823,"line_start":1823,"modality":"observed","object":"domain invariant (§4 invariant layer)","predicate":"validates","quote":" App->>Dom: domain invariant check (§4 invariant layer)","scope":"핵심 시퀀스 (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Domain"},{"assertion_id":"A-SEQ-003","condition":"persistence 필요 시","line_end":1824,"line_start":1824,"modality":"observed","object":"outbound port call via TransactionPort","predicate":"uses","quote":" App->>Infra: outbound port call (via TransactionPort)","scope":"핵심 시퀀스 (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Application (UseCase)"},{"assertion_id":"A-SEQ-004","condition":"success","line_end":1830,"line_start":1830,"modality":"observed","object":"200 OK {success: true, data: ..., meta: {request_id, trace_id}}","predicate":"returns","quote":" FE-->>Client: 200 OK {success: true, data: ..., meta: {request_id, trace_id}}","scope":"핵심 시퀀스 happy path (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Presentation (Controller / FE)"},{"assertion_id":"A-SEQ-005","condition":"domain invariant 위반","line_end":1834,"line_start":1834,"modality":"observed","object":"422 Unprocessable Entity {success: false, error: {category: VALIDATION, code: ...}}","predicate":"returns","quote":" FE-->>Client: 422 Unprocessable Entity {success: false, error: {category: VALIDATION, code: ...}}","scope":"핵심 시퀀스 error path (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Presentation (Controller / FE)"},{"assertion_id":"A-SEQ-006","condition":"infra/DB 장애","line_end":1838,"line_start":1838,"modality":"observed","object":"503 Service Unavailable {success: false, error: {category: TRANSIENT_DEPENDENCY, code: ...}}","predicate":"returns","quote":" FE-->>Client: 503 Service Unavailable {success: false, error: {category: TRANSIENT_DEPENDENCY, code: ...}}","scope":"핵심 시퀀스 error path (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Presentation (Controller / FE)"},{"assertion_id":"A-SEQ-007","condition":"infra/DB 장애","line_end":1836,"line_start":1836,"modality":"observed","object":"PersistenceException (translated by §6 mapper)","predicate":"produces","quote":" Infra-->>App: PersistenceException (translated by §6 mapper)","scope":"핵심 시퀀스 error path (§30.1)","source_surface":"SURF-2F7F13CA0593917D4433","subject":"Infrastructure (Adapter)"},{"assertion_id":"A-WI-001","condition":"unconditional","line_end":972,"line_start":972,"modality":"must","object":"branch handoff SSOT; 완료 조건 = §23 promotion contract 6필드 + branch gate 통과","predicate":"other","quote":"> Project contract v2의 branch handoff SSOT. 기존 §24 목록에는 dependency가 없으므로 revision 1에서는 `-`로 보존하며, 각 완료 조건은 §23의 promotion contract 6필드와 해당 branch gate 통과로 고정한다.","scope":"branch handoff plan (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"§8.0 실행계획"},{"assertion_id":"A-WI-002","condition":"planned","line_end":976,"line_start":976,"modality":"must","object":"feature-operational-error-observability-foundation (applies DEC-...-ERROR-ENVELOPE-001@1)","predicate":"maps_to","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |","scope":"work item -> branch (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-001"},{"assertion_id":"A-WI-003","condition":"planned","line_end":988,"line_start":988,"modality":"must","object":"feature-runtime-health-lifecycle-contract (applies DEC-...-MIGRATION-001@1)","predicate":"maps_to","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |","scope":"work item -> branch (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-013"},{"assertion_id":"A-WI-004","condition":"planned","line_end":1013,"line_start":1013,"modality":"must","object":"feature-domain-event-outbox-contract (applies EVENT-BROKER-001@1, SCHEDULER-LOCK-001@1)","predicate":"maps_to","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |","scope":"work item -> branch (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-038"},{"assertion_id":"A-WI-005","condition":"planned","line_end":997,"line_start":997,"modality":"must","object":"feature-tenant-context-policy (applies STACK-FRAMEWORK-001@1)","predicate":"maps_to","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |","scope":"work item -> branch (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-022"},{"assertion_id":"A-WI-006","condition":"planned","line_end":1022,"line_start":1022,"modality":"must","object":"WI-035, WI-012, WI-024, WI-007, WI-006 (Dependencies)","predicate":"runs_after","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |","scope":"work item dependency (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-047"},{"assertion_id":"A-WI-007","condition":"planned","line_end":992,"line_start":992,"modality":"must","object":"Flyway 실패·진행 중 readiness 가 healthy 가 아님","predicate":"validates","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |","scope":"work item completion condition (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-017"},{"assertion_id":"A-WI-008","condition":"planned","line_end":985,"line_start":985,"modality":"must","object":"OpenAPI drift via release-blocking contract suite","predicate":"validates","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |","scope":"work item completion condition (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-010"},{"assertion_id":"A-WI-009","condition":"planned","line_end":993,"line_start":993,"modality":"must","object":"forbidden module/import fixture fails at ArchUnit gate","predicate":"enforces","quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |","scope":"work item completion condition (§8.0)","source_surface":"SURF-8831BBEE230B110BEE80","subject":"WI-CA-SKELETON-OPERATIONAL-CONTRACT-018"}],"candidate_manifest_sha256":"8abb2dacbe11d8d33e489f372ea2b81f5677c65bcb14a77bc1d7ed6121b5b5d5","candidates":[{"assertion_a":"A-BND-001","assertion_b":"A-BND-002","candidate_id":"SEM-1C2394C4CECB1F764C8E","grouping_key":{"condition":"unconditional","predicate":"forbids","scope":"하지 않는 것 (§2)","subject":"ca-skeleton"},"rule_ids":["BASE"]},{"assertion_a":"A-BND-001","assertion_b":"A-BND-003","candidate_id":"SEM-E1BDDFAD070BC71BD4D6","grouping_key":{"condition":"unconditional","predicate":"forbids","scope":"하지 않는 것 (§2)","subject":"ca-skeleton"},"rule_ids":["BASE"]},{"assertion_a":"A-BND-001","assertion_b":"A-BND-004","candidate_id":"SEM-7735E5CA30CC5AB78047","grouping_key":{"condition":"unconditional","predicate":"forbids","scope":"하지 않는 것 (§2)","subject":"ca-skeleton"},"rule_ids":["BASE"]},{"assertion_a":"A-BND-002","assertion_b":"A-BND-003","candidate_id":"SEM-17F52D1123BA63086E7F","grouping_key":{"condition":"unconditional","predicate":"forbids","scope":"하지 않는 것 (§2)","subject":"ca-skeleton"},"rule_ids":["BASE"]},{"assertion_a":"A-BND-002","assertion_b":"A-BND-004","candidate_id":"SEM-AB80A34CD38615DD0DA7","grouping_key":{"condition":"unconditional","predicate":"forbids","scope":"하지 않는 것 (§2)","subject":"ca-skeleton"},"rule_ids":["BASE"]},{"assertion_a":"A-BND-003","assertion_b":"A-BND-004","candidate_id":"SEM-DD48D0F0CCCFFEB0705F","grouping_key":{"condition":"unconditional","predicate":"forbids","scope":"하지 않는 것 (§2)","subject":"ca-skeleton"},"rule_ids":["BASE"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-002","candidate_id":"SEM-5EE120376ED3EFE2CCB2","grouping_key":{"condition":"unconditional","predicate":"owns","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-003","candidate_id":"SEM-BE3D10E79551BAE5205A","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-004","candidate_id":"SEM-F1964E0D5A9857F2155E","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-005","candidate_id":"SEM-D289A136EC72E42AB0D8","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-006","candidate_id":"SEM-5A2259D6082C704DBEA3","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-007","candidate_id":"SEM-188869FE1E2E8B83A956","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-008","candidate_id":"SEM-85D4E8F6A34F392202EA","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-009","candidate_id":"SEM-E04AA692E4DD069F73D9","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-010","candidate_id":"SEM-4721AA75D873781060BB","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-001","assertion_b":"A-DEC-011","candidate_id":"SEM-FFE58450A132C3CE52B1","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-003","candidate_id":"SEM-5C3B37EB1D47D40FE068","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-004","candidate_id":"SEM-7C87655FEEF36835483D","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-005","candidate_id":"SEM-6734A15F1813F066A48B","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-006","candidate_id":"SEM-E77F409A595E4EE02E9A","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-007","candidate_id":"SEM-222657CB0505D7296F7A","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-008","candidate_id":"SEM-2546D1C55711ECED6C6C","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-009","candidate_id":"SEM-B47A2AC5795B9B14F1F1","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-010","candidate_id":"SEM-CC9B9E03E6E57D74A7EF","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-002","assertion_b":"A-DEC-011","candidate_id":"SEM-26A17352D4BB063BF286","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-004","candidate_id":"SEM-267BE1E47ED57736013D","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-005","candidate_id":"SEM-CB7A3182F0569D5755C2","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-006","candidate_id":"SEM-CDD97AE9F3C37E64CD26","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-007","candidate_id":"SEM-5FA76C13F4A96F06F153","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-008","candidate_id":"SEM-FF93BC917BB0D1482B29","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-009","candidate_id":"SEM-0DA6F793FEE6DA84B4CE","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-010","candidate_id":"SEM-FFD84C5FAB5D7D277F8A","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-003","assertion_b":"A-DEC-011","candidate_id":"SEM-C5848417DF9518771263","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-005","candidate_id":"SEM-7B0719A860D2F915FC9C","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-006","candidate_id":"SEM-EE6B99B04073A6B5D573","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-007","candidate_id":"SEM-FA6D556D8E16AF202D71","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-008","candidate_id":"SEM-013B2A9F961BFDCD800F","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-009","candidate_id":"SEM-6057D0892B4EE7460938","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-010","candidate_id":"SEM-E7E8AC4463B54F055CCA","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-004","assertion_b":"A-DEC-011","candidate_id":"SEM-43BB6CEE9FE0775E5D41","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-005","assertion_b":"A-DEC-006","candidate_id":"SEM-CEF310FFD5088CD4DD1F","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-005","assertion_b":"A-DEC-007","candidate_id":"SEM-05F881F4686A22C015F2","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-005","assertion_b":"A-DEC-008","candidate_id":"SEM-5AF5D64AAB22D41CF1BE","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-005","assertion_b":"A-DEC-009","candidate_id":"SEM-B1901976840A8675444A","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-005","assertion_b":"A-DEC-010","candidate_id":"SEM-38AE7E5B5FC2324A2B91","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-005","assertion_b":"A-DEC-011","candidate_id":"SEM-C7E899B892C63446CFD6","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-006","assertion_b":"A-DEC-007","candidate_id":"SEM-83714155B2221BC85697","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-006","assertion_b":"A-DEC-008","candidate_id":"SEM-2B733FBC9FAD334E453B","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-006","assertion_b":"A-DEC-009","candidate_id":"SEM-A05DCF28A38D1CE410DC","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-006","assertion_b":"A-DEC-010","candidate_id":"SEM-594390C2EE06247CD359","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-006","assertion_b":"A-DEC-011","candidate_id":"SEM-C6F4355E3B718E0D7265","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-007","assertion_b":"A-DEC-008","candidate_id":"SEM-B358F7E9CAAEAF958452","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-007","assertion_b":"A-DEC-009","candidate_id":"SEM-78543B7520ABDFD306D8","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-007","assertion_b":"A-DEC-010","candidate_id":"SEM-DBEDC2F67C2F2DB65BA6","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-007","assertion_b":"A-DEC-011","candidate_id":"SEM-DEAD67D507BEA798CC29","grouping_key":{"condition":"unconditional","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-008","assertion_b":"A-DEC-009","candidate_id":"SEM-5C2566A892E286BAF297","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-008","assertion_b":"A-DEC-010","candidate_id":"SEM-378A407EAC288CE7C731","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-008","assertion_b":"A-DEC-011","candidate_id":"SEM-46A73DE3DEED86F091B4","grouping_key":{"condition":"","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-009","assertion_b":"A-DEC-010","candidate_id":"SEM-EC950C0629BAA2E11947","grouping_key":{"condition":"unconditional","predicate":"other","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-009","assertion_b":"A-DEC-011","candidate_id":"SEM-A983423996FB9E6BE484","grouping_key":{"condition":"unconditional","predicate":"other","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-DEC-010","assertion_b":"A-DEC-011","candidate_id":"SEM-4DA2DEBC3CC7165A26AE","grouping_key":{"condition":"unconditional","predicate":"other","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-RT-001","assertion_b":"A-RT-002","candidate_id":"SEM-8C0281343EECC2382A6B","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-001","assertion_b":"A-RT-003","candidate_id":"SEM-A6E5E88082F7E9EDC9C4","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-001","assertion_b":"A-RT-004","candidate_id":"SEM-7641E4E22933A6C9C8BA","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-001","assertion_b":"A-RT-009","candidate_id":"SEM-BBD7D9BA0375F03E384C","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-002","assertion_b":"A-RT-003","candidate_id":"SEM-6603ECA3BA4093EE70D1","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-002","assertion_b":"A-RT-004","candidate_id":"SEM-D38F59B42565945FCA64","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-002","assertion_b":"A-RT-009","candidate_id":"SEM-85C7C14306F95CD5C8D0","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-003","assertion_b":"A-RT-004","candidate_id":"SEM-8934263A042FD8EE9A0F","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-003","assertion_b":"A-RT-009","candidate_id":"SEM-ADF84C1BE404227F5924","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-004","assertion_b":"A-RT-009","candidate_id":"SEM-6A977DCB475B3B32A90E","grouping_key":{"condition":"unconditional","predicate":"other","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-005","assertion_b":"A-RT-006","candidate_id":"SEM-D00EC308C5FAFB98CBF8","grouping_key":{"condition":"unconditional","predicate":"has_failure_behavior","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-005","assertion_b":"A-RT-007","candidate_id":"SEM-25C555818FC88DEE5C1C","grouping_key":{"condition":"unconditional","predicate":"has_failure_behavior","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-005","assertion_b":"A-RT-008","candidate_id":"SEM-901114F15E5BBCB1E48A","grouping_key":{"condition":"unconditional","predicate":"has_failure_behavior","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-006","assertion_b":"A-RT-007","candidate_id":"SEM-F9D12CCBECE2B6E46CE3","grouping_key":{"condition":"unconditional","predicate":"has_failure_behavior","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-006","assertion_b":"A-RT-008","candidate_id":"SEM-6AEFD68CB818E6BBF1D3","grouping_key":{"condition":"unconditional","predicate":"has_failure_behavior","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-RT-007","assertion_b":"A-RT-008","candidate_id":"SEM-9BA1AFD22EFB910B24F6","grouping_key":{"condition":"unconditional","predicate":"has_failure_behavior","scope":"runtime/lifecycle scope (§15)","subject":"§15 Runtime / Lifecycle Contract"},"rule_ids":["BASE"]},{"assertion_a":"A-SEQ-001","assertion_b":"A-SEQ-004","candidate_id":"SEM-CB9638B964BE74F88FC6","grouping_key":{"condition":"","predicate":"","scope":"","subject":"Presentation (Controller / FE)"},"rule_ids":["C5"]},{"assertion_a":"A-SEQ-001","assertion_b":"A-SEQ-005","candidate_id":"SEM-C597AD3798C7B684F7B6","grouping_key":{"condition":"","predicate":"","scope":"","subject":"Presentation (Controller / FE)"},"rule_ids":["C5"]},{"assertion_a":"A-SEQ-001","assertion_b":"A-SEQ-006","candidate_id":"SEM-7D93140F97574ED3802E","grouping_key":{"condition":"","predicate":"","scope":"","subject":"Presentation (Controller / FE)"},"rule_ids":["C5"]},{"assertion_a":"A-SEQ-004","assertion_b":"A-SEQ-005","candidate_id":"SEM-F39921432FE057EF4BCE","grouping_key":{"condition":"","predicate":"returns","scope":"","subject":"Presentation (Controller / FE)"},"rule_ids":["C5"]},{"assertion_a":"A-SEQ-004","assertion_b":"A-SEQ-006","candidate_id":"SEM-C36D7FB1A66591DE63AF","grouping_key":{"condition":"","predicate":"returns","scope":"","subject":"Presentation (Controller / FE)"},"rule_ids":["C5"]},{"assertion_a":"A-SEQ-005","assertion_b":"A-SEQ-006","candidate_id":"SEM-7F177D73BB068B2403B9","grouping_key":{"condition":"","predicate":"returns","scope":"핵심 시퀀스 error path (§30.1)","subject":"Presentation (Controller / FE)"},"rule_ids":["C5"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-003","candidate_id":"SEM-E6D0371B6CBAF930D4FC","grouping_key":{"condition":"planned","predicate":"maps_to","scope":"work item -> branch (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-004","candidate_id":"SEM-598CA7BE50FCA0114C9D","grouping_key":{"condition":"planned","predicate":"maps_to","scope":"work item -> branch (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-005","candidate_id":"SEM-B718273F3CDD5EC5A369","grouping_key":{"condition":"planned","predicate":"maps_to","scope":"work item -> branch (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-006","candidate_id":"SEM-3AD411ABD517BC7A6B1D","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-007","candidate_id":"SEM-89C3F6F68FC4CB16D195","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-008","candidate_id":"SEM-4ED89BD9F1DB4E409594","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-002","assertion_b":"A-WI-009","candidate_id":"SEM-4305F91EE1999A970BD0","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-003","assertion_b":"A-WI-004","candidate_id":"SEM-C4F771C5F70F95912A39","grouping_key":{"condition":"planned","predicate":"maps_to","scope":"work item -> branch (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-003","assertion_b":"A-WI-005","candidate_id":"SEM-66FFE18B1B3F1F33F815","grouping_key":{"condition":"planned","predicate":"maps_to","scope":"work item -> branch (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-003","assertion_b":"A-WI-006","candidate_id":"SEM-0A7B5EC85A3D4DF9CA27","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-003","assertion_b":"A-WI-007","candidate_id":"SEM-F2ACF7C2466548BBEF5A","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6","C7"]},{"assertion_a":"A-WI-003","assertion_b":"A-WI-008","candidate_id":"SEM-E156A7EB50FDB89BCBDA","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-003","assertion_b":"A-WI-009","candidate_id":"SEM-3493481D96A2ED2A3465","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-004","assertion_b":"A-WI-005","candidate_id":"SEM-BC92597E2BC924C0CFE8","grouping_key":{"condition":"planned","predicate":"maps_to","scope":"work item -> branch (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-004","assertion_b":"A-WI-006","candidate_id":"SEM-6D5AFB415EE81B06028B","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-004","assertion_b":"A-WI-007","candidate_id":"SEM-1B2EBE69947C1700D53E","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-004","assertion_b":"A-WI-008","candidate_id":"SEM-B5E5F936F96E4BB2CDA1","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-004","assertion_b":"A-WI-009","candidate_id":"SEM-D4FACF079705A88C089F","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-005","assertion_b":"A-WI-006","candidate_id":"SEM-045378125D5659F21039","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-005","assertion_b":"A-WI-007","candidate_id":"SEM-D67FBB1713D71468A036","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-005","assertion_b":"A-WI-008","candidate_id":"SEM-92A527819A3134822BB7","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-005","assertion_b":"A-WI-009","candidate_id":"SEM-65D08160C7882F8F936A","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-006","assertion_b":"A-WI-007","candidate_id":"SEM-27F0A8F6AB04D63DD487","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-006","assertion_b":"A-WI-008","candidate_id":"SEM-287DDD4949CC0170BFC4","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-006","assertion_b":"A-WI-009","candidate_id":"SEM-FF5642A43875AC8A67FD","grouping_key":{"condition":"planned","predicate":"","scope":"","subject":""},"rule_ids":["C6","C7"]},{"assertion_a":"A-WI-007","assertion_b":"A-WI-008","candidate_id":"SEM-0270CE2B073A38993F89","grouping_key":{"condition":"planned","predicate":"validates","scope":"work item completion condition (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-007","assertion_b":"A-WI-009","candidate_id":"SEM-EAEBC8E31E30AF4E3A48","grouping_key":{"condition":"planned","predicate":"","scope":"work item completion condition (§8.0)","subject":""},"rule_ids":["C6"]},{"assertion_a":"A-WI-008","assertion_b":"A-WI-009","candidate_id":"SEM-B40794A74F62D9FDFB34","grouping_key":{"condition":"planned","predicate":"","scope":"work item completion condition (§8.0)","subject":""},"rule_ids":["C6"]}],"coverage":{"assertions":50,"candidate_pairs":111,"eligible_surfaces":9,"processed_surfaces":9},"document_sha256":"4f435ac10fc9bf2b872487c03216a71a192b1658448419d6ebbf64f939f7c363","explicit_blocking":[],"mode":"hub","ontology_sha256":"76d41a29233c830e1940ebb3244263e2b9bfb8dd6a01f2a1d1c51ce5a1b10468","output_schema":"semantic-audit-result/v1","schema_version":"semantic-verdict-request/v1","subject":"raw/project-notes/ca-skeleton-operational-contract.md"},"audit_request_sha256":"1c5cd0f76c621944d6200fbc749ca06c4569ff5d58d8c3948ceee5f63314fbc5","audit_result":{"auditor":{"contract_version":"semantic-coherence/v1","model_id":"claude-opus-4-8","run_id":"a9074ddb7832fab82"},"mode":"hub","request_sha256":"1c5cd0f76c621944d6200fbc749ca06c4569ff5d58d8c3948ceee5f63314fbc5","schema_version":"semantic-audit-result/v1","subject":"raw/project-notes/ca-skeleton-operational-contract.md","verdicts":[{"candidate_id":"SEM-1C2394C4CECB1F764C8E","evidence_a":{"line_end":48,"line_start":48,"quote":"- `ProblemDetail` 사용 안 함. 자체 structured envelope 응답을 사용."},"evidence_b":{"line_end":51,"line_start":51,"quote":"- Kafka/Redis/Slack/Google Email을 기본 dependency로 무겁게 탑재하지 않음."},"proof_manifest":null,"rationale":"Two distinct prohibitions in the same §2 '하지 않는 것' scope list for ca-skeleton: A-BND-001 forbids 'using ProblemDetail; 자체 structured envelope 응답을 사용'; A-BND-002 forbids 'loading Kafka/Redis/Slack/Google Email as a heavy defau...'. Separate compatible constraints; neither claims the other's exclusive responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-E1BDDFAD070BC71BD4D6","evidence_a":{"line_end":48,"line_start":48,"quote":"- `ProblemDetail` 사용 안 함. 자체 structured envelope 응답을 사용."},"evidence_b":{"line_end":52,"line_start":52,"quote":"- raw exception, SQL, token, request/response body를 클라이언트 응답이나 기본 로그에 노출하지 않음."},"proof_manifest":null,"rationale":"Two distinct prohibitions in the same §2 '하지 않는 것' scope list for ca-skeleton: A-BND-001 forbids 'using ProblemDetail; 자체 structured envelope 응답을 사용'; A-BND-003 forbids 'exposing raw exception, SQL, token, request/response bo...'. Separate compatible constraints; neither claims the other's exclusive responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-7735E5CA30CC5AB78047","evidence_a":{"line_end":48,"line_start":48,"quote":"- `ProblemDetail` 사용 안 함. 자체 structured envelope 응답을 사용."},"evidence_b":{"line_end":53,"line_start":53,"quote":"- `wiki/interview/`, `wiki/portfolio/`, `wiki/blog/`로 직접 파생하지 않음. 먼저 `wiki/projects/` canonical 문서로 승급."},"proof_manifest":null,"rationale":"Two distinct prohibitions in the same §2 '하지 않는 것' scope list for ca-skeleton: A-BND-001 forbids 'using ProblemDetail; 자체 structured envelope 응답을 사용'; A-BND-004 forbids 'deriving directly to wiki/interview / wiki/portfolio / ...'. Separate compatible constraints; neither claims the other's exclusive responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-17F52D1123BA63086E7F","evidence_a":{"line_end":51,"line_start":51,"quote":"- Kafka/Redis/Slack/Google Email을 기본 dependency로 무겁게 탑재하지 않음."},"evidence_b":{"line_end":52,"line_start":52,"quote":"- raw exception, SQL, token, request/response body를 클라이언트 응답이나 기본 로그에 노출하지 않음."},"proof_manifest":null,"rationale":"Two distinct prohibitions in the same §2 '하지 않는 것' scope list for ca-skeleton: A-BND-002 forbids 'loading Kafka/Redis/Slack/Google Email as a heavy defau...'; A-BND-003 forbids 'exposing raw exception, SQL, token, request/response bo...'. Separate compatible constraints; neither claims the other's exclusive responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-AB80A34CD38615DD0DA7","evidence_a":{"line_end":51,"line_start":51,"quote":"- Kafka/Redis/Slack/Google Email을 기본 dependency로 무겁게 탑재하지 않음."},"evidence_b":{"line_end":53,"line_start":53,"quote":"- `wiki/interview/`, `wiki/portfolio/`, `wiki/blog/`로 직접 파생하지 않음. 먼저 `wiki/projects/` canonical 문서로 승급."},"proof_manifest":null,"rationale":"Two distinct prohibitions in the same §2 '하지 않는 것' scope list for ca-skeleton: A-BND-002 forbids 'loading Kafka/Redis/Slack/Google Email as a heavy defau...'; A-BND-004 forbids 'deriving directly to wiki/interview / wiki/portfolio / ...'. Separate compatible constraints; neither claims the other's exclusive responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-DD48D0F0CCCFFEB0705F","evidence_a":{"line_end":52,"line_start":52,"quote":"- raw exception, SQL, token, request/response body를 클라이언트 응답이나 기본 로그에 노출하지 않음."},"evidence_b":{"line_end":53,"line_start":53,"quote":"- `wiki/interview/`, `wiki/portfolio/`, `wiki/blog/`로 직접 파생하지 않음. 먼저 `wiki/projects/` canonical 문서로 승급."},"proof_manifest":null,"rationale":"Two distinct prohibitions in the same §2 '하지 않는 것' scope list for ca-skeleton: A-BND-003 forbids 'exposing raw exception, SQL, token, request/response bo...'; A-BND-004 forbids 'deriving directly to wiki/interview / wiki/portfolio / ...'. Separate compatible constraints; neither claims the other's exclusive responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-5EE120376ED3EFE2CCB2","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"proof_manifest":null,"rationale":"Two singular-ownership claims over DIFFERENT objects, so both coexist: A-DEC-001 'foundation' owns 'envelope schema 와 error.category enum 의 단일 ow...'; A-DEC-002 'verification suite' owns 'OpenAPI drift 의 release-blocking 판정권'. Distinct owned artifacts, not competing owners of one object.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-BE3D10E79551BAE5205A","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-F1964E0D5A9857F2155E","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-D289A136EC72E42AB0D8","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-5A2259D6082C704DBEA3","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-188869FE1E2E8B83A956","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-85D4E8F6A34F392202EA","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-E04AA692E4DD069F73D9","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-4721AA75D873781060BB","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-FFE58450A132C3CE52B1","evidence_a":{"line_end":1209,"line_start":1209,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001` | 1 | `error-envelope` | foundation이 envelope schema와 error.category enum의 단일 owner다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `error envelope schema` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-001 (foundation owns 'envelope schema 와 error.category enum 의 ...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-5C3B37EB1D47D40FE068","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-7C87655FEEF36835483D","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-6734A15F1813F066A48B","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-E77F409A595E4EE02E9A","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-222657CB0505D7296F7A","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-2546D1C55711ECED6C6C","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-B47A2AC5795B9B14F1F1","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-CC9B9E03E6E57D74A7EF","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-26A17352D4BB063BF286","evidence_a":{"line_end":1210,"line_start":1210,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001` | 1 | `openapi` | verification suite가 OpenAPI drift의 release-blocking 판정권을 소유한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `OpenAPI drift` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-002 (verification suite owns 'OpenAPI drift 의 release-blocking 판정권') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-267BE1E47ED57736013D","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-CB7A3182F0569D5755C2","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-CDD97AE9F3C37E64CD26","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-5FA76C13F4A96F06F153","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-FF93BC917BB0D1482B29","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-0DA6F793FEE6DA84B4CE","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-FFD84C5FAB5D7D277F8A","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-C5848417DF9518771263","evidence_a":{"line_end":1206,"line_start":1206,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001` | 1 | `module-layout` | Gradle multi-module에서 domain-core·application-core·adapter-*·shared-contract·app-bootstrap·sample-portfolio 책임을 분리한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 Blocking Defaults `package layout` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-003 (Gradle multi-module enforces 'separation of domain-core / application-...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-7B0719A860D2F915FC9C","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-EE6B99B04073A6B5D573","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-FA6D556D8E16AF202D71","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-013B2A9F961BFDCD800F","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-6057D0892B4EE7460938","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-E7E8AC4463B54F055CCA","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-43BB6CEE9FE0775E5D41","evidence_a":{"line_end":1207,"line_start":1207,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001` | 1 | `transaction` | application은 Spring transaction annotation 대신 TransactionPort 또는 TransactionalUseCaseRunner를 사용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `transaction boundary` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-004 (application uses 'TransactionPort 또는 TransactionalUseCaseR...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-CEF310FFD5088CD4DD1F","evidence_a":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"evidence_b":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...') vs A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-05F881F4686A22C015F2","evidence_a":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"evidence_b":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...') vs A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-5AF5D64AAB22D41CF1BE","evidence_a":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-B1901976840A8675444A","evidence_a":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-38AE7E5B5FC2324A2B91","evidence_a":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-C7E899B892C63446CFD6","evidence_a":{"line_end":1211,"line_start":1211,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001` | 1 | `migration` | Flyway는 startup에서 실행하고 migration 완료 후에만 readiness를 healthy로 전환한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `migration runner` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-005 (Flyway runs_before 'readiness healthy 전환 (startup 실행, migrat...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-83714155B2221BC85697","evidence_a":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"evidence_b":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...') vs A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-2B733FBC9FAD334E453B","evidence_a":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-A05DCF28A38D1CE410DC","evidence_a":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-594390C2EE06247CD359","evidence_a":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-C6F4355E3B718E0D7265","evidence_a":{"line_end":1213,"line_start":1213,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001` | 1 | `event-broker` | core는 broker-agnostic outbox를 제공하고 Kafka는 optional adapter로 둔다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `broker` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-006 (core produces 'broker-agnostic outbox (Kafka 는 optional...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-B358F7E9CAAEAF958452","evidence_a":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"evidence_b":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...') vs A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-78543B7520ABDFD306D8","evidence_a":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-DBEDC2F67C2F2DB65BA6","evidence_a":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-DEAD67D507BEA798CC29","evidence_a":{"line_end":1220,"line_start":1220,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TESTCONTAINERS-001` | 1 | `testcontainers` | Testcontainers는 persistence/outbound integration test에 사용하고 unit·architecture·contract test에서는 금지한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `Testcontainers policy` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-007 (Testcontainers forbids 'use in unit·architecture·contract test (...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-5C2566A892E286BAF297","evidence_a":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"evidence_b":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...') vs A-DEC-009 (application language other 'Java 21 LTS'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-378A407EAC288CE7C731","evidence_a":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-46A73DE3DEED86F091B4","evidence_a":{"line_end":1212,"line_start":1212,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001` | 1 | `scheduler-lock` | single-instance가 default이며 multi-instance scheduler/outbox는 DB advisory lock을 사용한다 | `conditional-default` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `scheduler/outbox lock` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-008 (scheduler/outbox requires 'DB advisory lock (single-instance 가 defa...') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-EC950C0629BAA2E11947","evidence_a":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"evidence_b":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-009 (application language other 'Java 21 LTS') vs A-DEC-010 (database other 'PostgreSQL 16 단일 stack'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-A983423996FB9E6BE484","evidence_a":{"line_end":1221,"line_start":1221,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-LANGUAGE-001` | 1 | `stack-language` | application language는 Java 21 LTS다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `Language` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-009 (application language other 'Java 21 LTS') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-4DA2DEBC3CC7165A26AE","evidence_a":{"line_end":1225,"line_start":1225,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-DATABASE-001` | 1 | `stack-database` | database는 PostgreSQL 16 단일 stack이다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §34 Stack Matrix `DB` |"},"evidence_b":{"line_end":1214,"line_start":1214,"quote":"| `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-RESILIENCE-001` | 1 | `resilience` | Resilience4j가 default이며 Spring Retry는 simple blocking retry에만 허용한다 | `active` | [[raw/project-notes/ca-skeleton-operational-contract]] | §25 `circuit breaker/retry` |"},"proof_manifest":null,"rationale":"Independent decision-registry rows covering different contract concerns: A-DEC-010 (database other 'PostgreSQL 16 단일 stack') vs A-DEC-011 (Resilience4j other 'default resilience library (Spring Retry...'). Different subjects/scopes; each decision is its own single owner, so they compose without conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-8C0281343EECC2382A6B","evidence_a":{"line_end":425,"line_start":425,"quote":"서버 운영에서 business logic 없이도 발생하는 lifecycle 실패를 다룹니다."},"evidence_b":{"line_end":427,"line_start":427,"quote":"- actuator health/readiness/liveness 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-001 'covers lifecycle failures that occur without busin...' vs A-RT-002 'defines actuator health/readiness/liveness 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-A6E5E88082F7E9EDC9C4","evidence_a":{"line_end":425,"line_start":425,"quote":"서버 운영에서 business logic 없이도 발생하는 lifecycle 실패를 다룹니다."},"evidence_b":{"line_end":428,"line_start":428,"quote":"- graceful shutdown 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-001 'covers lifecycle failures that occur without busin...' vs A-RT-003 'defines graceful shutdown 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-7641E4E22933A6C9C8BA","evidence_a":{"line_end":425,"line_start":425,"quote":"서버 운영에서 business logic 없이도 발생하는 lifecycle 실패를 다룹니다."},"evidence_b":{"line_end":429,"line_start":429,"quote":"- startup validation 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-001 'covers lifecycle failures that occur without busin...' vs A-RT-004 'defines startup validation 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-BBD7D9BA0375F03E384C","evidence_a":{"line_end":425,"line_start":425,"quote":"서버 운영에서 business logic 없이도 발생하는 lifecycle 실패를 다룹니다."},"evidence_b":{"line_end":434,"line_start":434,"quote":"- JVM timezone/system clock 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-001 'covers lifecycle failures that occur without busin...' vs A-RT-009 'defines JVM timezone/system clock 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-6603ECA3BA4093EE70D1","evidence_a":{"line_end":427,"line_start":427,"quote":"- actuator health/readiness/liveness 기준."},"evidence_b":{"line_end":428,"line_start":428,"quote":"- graceful shutdown 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-002 'defines actuator health/readiness/liveness 기준' vs A-RT-003 'defines graceful shutdown 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-D38F59B42565945FCA64","evidence_a":{"line_end":427,"line_start":427,"quote":"- actuator health/readiness/liveness 기준."},"evidence_b":{"line_end":429,"line_start":429,"quote":"- startup validation 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-002 'defines actuator health/readiness/liveness 기준' vs A-RT-004 'defines startup validation 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-85C7C14306F95CD5C8D0","evidence_a":{"line_end":427,"line_start":427,"quote":"- actuator health/readiness/liveness 기준."},"evidence_b":{"line_end":434,"line_start":434,"quote":"- JVM timezone/system clock 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-002 'defines actuator health/readiness/liveness 기준' vs A-RT-009 'defines JVM timezone/system clock 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-8934263A042FD8EE9A0F","evidence_a":{"line_end":428,"line_start":428,"quote":"- graceful shutdown 기준."},"evidence_b":{"line_end":429,"line_start":429,"quote":"- startup validation 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-003 'defines graceful shutdown 기준' vs A-RT-004 'defines startup validation 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-ADF84C1BE404227F5924","evidence_a":{"line_end":428,"line_start":428,"quote":"- graceful shutdown 기준."},"evidence_b":{"line_end":434,"line_start":434,"quote":"- JVM timezone/system clock 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-003 'defines graceful shutdown 기준' vs A-RT-009 'defines JVM timezone/system clock 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-6A977DCB475B3B32A90E","evidence_a":{"line_end":429,"line_start":429,"quote":"- startup validation 기준."},"evidence_b":{"line_end":434,"line_start":434,"quote":"- JVM timezone/system clock 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-004 'defines startup validation 기준' vs A-RT-009 'defines JVM timezone/system clock 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-D00EC308C5FAFB98CBF8","evidence_a":{"line_end":430,"line_start":430,"quote":"- migration failure 처리 기준."},"evidence_b":{"line_end":431,"line_start":431,"quote":"- scheduled job 실패 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-005 'defines migration failure 처리 기준' vs A-RT-006 'defines scheduled job 실패 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-25C555818FC88DEE5C1C","evidence_a":{"line_end":430,"line_start":430,"quote":"- migration failure 처리 기준."},"evidence_b":{"line_end":432,"line_start":432,"quote":"- async executor/thread pool rejection 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-005 'defines migration failure 처리 기준' vs A-RT-007 'defines async executor/thread pool rejection 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-901114F15E5BBCB1E48A","evidence_a":{"line_end":430,"line_start":430,"quote":"- migration failure 처리 기준."},"evidence_b":{"line_end":433,"line_start":433,"quote":"- memory/disk/temp file/resource exhaustion 분류."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-005 'defines migration failure 처리 기준' vs A-RT-008 'classifies memory/disk/temp file/resource exhausti...'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-F9D12CCBECE2B6E46CE3","evidence_a":{"line_end":431,"line_start":431,"quote":"- scheduled job 실패 기준."},"evidence_b":{"line_end":432,"line_start":432,"quote":"- async executor/thread pool rejection 기준."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-006 'defines scheduled job 실패 기준' vs A-RT-007 'defines async executor/thread pool rejection 기준'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-6AEFD68CB818E6BBF1D3","evidence_a":{"line_end":431,"line_start":431,"quote":"- scheduled job 실패 기준."},"evidence_b":{"line_end":433,"line_start":433,"quote":"- memory/disk/temp file/resource exhaustion 분류."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-006 'defines scheduled job 실패 기준' vs A-RT-008 'classifies memory/disk/temp file/resource exhausti...'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-9BA1AFD22EFB910B24F6","evidence_a":{"line_end":432,"line_start":432,"quote":"- async executor/thread pool rejection 기준."},"evidence_b":{"line_end":433,"line_start":433,"quote":"- memory/disk/temp file/resource exhaustion 분류."},"proof_manifest":null,"rationale":"Two distinct §15 runtime/lifecycle criteria within the same contract section: A-RT-007 'defines async executor/thread pool rejection 기준' vs A-RT-008 'classifies memory/disk/temp file/resource exhausti...'. Each defines a separate lifecycle facet; they enumerate the section, not conflict.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-CB9638B964BE74F88FC6","evidence_a":{"line_end":1821,"line_start":1821,"quote":" FE->>FE: Request DTO validation (§4 syntax layer)"},"evidence_b":{"line_end":1830,"line_start":1830,"quote":" FE-->>Client: 200 OK {success: true, data: ..., meta: {request_id, trace_id}}"},"proof_manifest":null,"rationale":"Different stages of the same §30.1 sequence: A-SEQ-001 is the request-DTO validation step ('Request DTO (§4 syntax layer)'), while A-SEQ-004 handles the returns step under condition 'success'. They compose the flow without either taking over the other's responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-C597AD3798C7B684F7B6","evidence_a":{"line_end":1821,"line_start":1821,"quote":" FE->>FE: Request DTO validation (§4 syntax layer)"},"evidence_b":{"line_end":1834,"line_start":1834,"quote":" FE-->>Client: 422 Unprocessable Entity {success: false, error: {category: VALIDATION, code: ...}}"},"proof_manifest":null,"rationale":"Different stages of the same §30.1 sequence: A-SEQ-001 is the request-DTO validation step ('Request DTO (§4 syntax layer)'), while A-SEQ-005 handles the returns step under condition 'domain invariant 위반'. They compose the flow without either taking over the other's responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-7D93140F97574ED3802E","evidence_a":{"line_end":1821,"line_start":1821,"quote":" FE->>FE: Request DTO validation (§4 syntax layer)"},"evidence_b":{"line_end":1838,"line_start":1838,"quote":" FE-->>Client: 503 Service Unavailable {success: false, error: {category: TRANSIENT_DEPENDENCY, code: ...}}"},"proof_manifest":null,"rationale":"Different stages of the same §30.1 sequence: A-SEQ-001 is the request-DTO validation step ('Request DTO (§4 syntax layer)'), while A-SEQ-006 handles the returns step under condition 'infra/DB 장애'. They compose the flow without either taking over the other's responsibility.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-F39921432FE057EF4BCE","evidence_a":{"line_end":1830,"line_start":1830,"quote":" FE-->>Client: 200 OK {success: true, data: ..., meta: {request_id, trace_id}}"},"evidence_b":{"line_end":1834,"line_start":1834,"quote":" FE-->>Client: 422 Unprocessable Entity {success: false, error: {category: VALIDATION, code: ...}}"},"proof_manifest":null,"rationale":"Same subject/predicate (Presentation returns an HTTP response) with different values explained by differing quoted conditions: A-SEQ-004 condition 'success' -> '200 OK {success: true, data: ..., meta: {requ...'; A-SEQ-005 condition 'domain invariant 위반' -> '422 Unprocessable Entity {success: false, err...'. The named condition (success vs domain-invariant violation vs infra/DB failure) explains the status-code difference.","verdict":"CONTEXTUAL_VARIANT"},{"candidate_id":"SEM-C36D7FB1A66591DE63AF","evidence_a":{"line_end":1830,"line_start":1830,"quote":" FE-->>Client: 200 OK {success: true, data: ..., meta: {request_id, trace_id}}"},"evidence_b":{"line_end":1838,"line_start":1838,"quote":" FE-->>Client: 503 Service Unavailable {success: false, error: {category: TRANSIENT_DEPENDENCY, code: ...}}"},"proof_manifest":null,"rationale":"Same subject/predicate (Presentation returns an HTTP response) with different values explained by differing quoted conditions: A-SEQ-004 condition 'success' -> '200 OK {success: true, data: ..., meta: {requ...'; A-SEQ-006 condition 'infra/DB 장애' -> '503 Service Unavailable {success: false, erro...'. The named condition (success vs domain-invariant violation vs infra/DB failure) explains the status-code difference.","verdict":"CONTEXTUAL_VARIANT"},{"candidate_id":"SEM-7F177D73BB068B2403B9","evidence_a":{"line_end":1834,"line_start":1834,"quote":" FE-->>Client: 422 Unprocessable Entity {success: false, error: {category: VALIDATION, code: ...}}"},"evidence_b":{"line_end":1838,"line_start":1838,"quote":" FE-->>Client: 503 Service Unavailable {success: false, error: {category: TRANSIENT_DEPENDENCY, code: ...}}"},"proof_manifest":null,"rationale":"Same subject/predicate (Presentation returns an HTTP response) with different values explained by differing quoted conditions: A-SEQ-005 condition 'domain invariant 위반' -> '422 Unprocessable Entity {success: false, err...'; A-SEQ-006 condition 'infra/DB 장애' -> '503 Service Unavailable {success: false, erro...'. The named condition (success vs domain-invariant violation vs infra/DB failure) explains the status-code difference.","verdict":"CONTEXTUAL_VARIANT"},{"candidate_id":"SEM-E6D0371B6CBAF930D4FC","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-598CA7BE50FCA0114C9D","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-B718273F3CDD5EC5A369","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-3AD411ABD517BC7A6B1D","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-89C3F6F68FC4CB16D195","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-4ED89BD9F1DB4E409594","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-4305F91EE1999A970BD0","evidence_a":{"line_end":976,"line_start":976,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-001` | `feature-operational-error-observability-foundation` | error·observability 6필드 contract와 contract test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-ERROR-ENVELOPE-001@1` | - | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-002 -> 'feature-operational-error-observability-found...'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-C4F771C5F70F95912A39","evidence_a":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'; A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-66FFE18B1B3F1F33F815","evidence_a":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'; A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-0A7B5EC85A3D4DF9CA27","evidence_a":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'; A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-F2ACF7C2466548BBEF5A","evidence_a":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'; A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'. Separate branch/decision derivations that coexist without exclusive overlap. Both apply an overlapping decision, but the decision's single owner is the registry entry, not these work items; the work items are compatible appliers, so authority stays resolved.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-E156A7EB50FDB89BCBDA","evidence_a":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'; A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-3493481D96A2ED2A3465","evidence_a":{"line_end":988,"line_start":988,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-013` | `feature-runtime-health-lifecycle-contract` | startup·readiness·shutdown lifecycle test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-003 -> 'feature-runtime-health-lifecycle-contract (ap...'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-BC92597E2BC924C0CFE8","evidence_a":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"evidence_b":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'; A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-6D5AFB415EE81B06028B","evidence_a":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"evidence_b":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'; A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-1B2EBE69947C1700D53E","evidence_a":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"evidence_b":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'; A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-B5E5F936F96E4BB2CDA1","evidence_a":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"evidence_b":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'; A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-D4FACF079705A88C089F","evidence_a":{"line_end":1013,"line_start":1013,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-038` | `feature-domain-event-outbox-contract` | broker-agnostic outbox와 duplicate execution test가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-EVENT-BROKER-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-SCHEDULER-LOCK-001@1` | - | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-004 -> 'feature-domain-event-outbox-contract (applies...'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-045378125D5659F21039","evidence_a":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"evidence_b":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'; A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-D67FBB1713D71468A036","evidence_a":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"evidence_b":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'; A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-92A527819A3134822BB7","evidence_a":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"evidence_b":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'; A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-65D08160C7882F8F936A","evidence_a":{"line_end":997,"line_start":997,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-022` | `feature-tenant-context-policy` | tenant propagation·clear negative fixture가 통과한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-FRAMEWORK-001@1` | - | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-005 -> 'feature-tenant-context-policy (applies STACK-...'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-27F0A8F6AB04D63DD487","evidence_a":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"evidence_b":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'; A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-287DDD4949CC0170BFC4","evidence_a":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"evidence_b":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'; A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-FF5642A43875AC8A67FD","evidence_a":{"line_end":1022,"line_start":1022,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-047` | `feature-application-query-bypass-contract` | query bypass의 허용 경계·mapping·transaction 영향과 검증 test가 명시된다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-TRANSACTION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MAPPING-001@1` | `WI-CA-SKELETON-OPERATIONAL-CONTRACT-035`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-012`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-024`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-007`, `WI-CA-SKELETON-OPERATIONAL-CONTRACT-006` | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-006 -> 'WI-035, WI-012, WI-024, WI-007, WI-006 (Depen...'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap. Both apply an overlapping decision, but the decision's single owner is the registry entry, not these work items; the work items are compatible appliers, so authority stays resolved.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-0270CE2B073A38993F89","evidence_a":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'; A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-EAEBC8E31E30AF4E3A48","evidence_a":{"line_end":992,"line_start":992,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-017` | `feature-migration-startup-contract` | Flyway 실패·진행 중 readiness가 healthy가 아님을 검증한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MIGRATION-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-MIGRATION-001@1` | - | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-007 -> 'Flyway 실패·진행 중 readiness 가 healthy 가 아님'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"},{"candidate_id":"SEM-B40794A74F62D9FDFB34","evidence_a":{"line_end":985,"line_start":985,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-010` | `feature-contract-verification-test-suite` | release-blocking contract suite가 OpenAPI drift를 검출한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-OPENAPI-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-TEST-001@1` | - | `planned` |"},"evidence_b":{"line_end":993,"line_start":993,"quote":"| `WI-CA-SKELETON-OPERATIONAL-CONTRACT-018` | `feature-architecture-enforcement-rules` | forbidden module/import fixture가 ArchUnit gate에서 실패한다 | `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-MODULE-LAYOUT-001@1`, `DEC-CA-SKELETON-OPERATIONAL-CONTRACT-STACK-ARCHTEST-001@1` | - | `planned` |"},"proof_manifest":null,"rationale":"Distinct §8.0 work items mapping to different branches: A-WI-008 -> 'OpenAPI drift via release-blocking contract s...'; A-WI-009 -> 'forbidden module/import fixture fails at Arch...'. Separate branch/decision derivations that coexist without exclusive overlap.","verdict":"COMPLEMENTARY"}]},"auditor":{"contract_version":"semantic-coherence/v1","model_id":"claude-opus-4-8","run_id":"a9074ddb7832fab82"},"auditor_contract_sha256":"1cbc67c27e5183a272687f635e3682a26d56785a1cf144da562eb7edd8f6cbce","coverage":{"candidate_pairs":111,"dropped_pairs":0,"eligible_surfaces":9,"processed_pairs":111,"processed_surfaces":9},"document_id":"e121c749bd6dbd1d31b1dbbe7babad7be81c8768fcd54a72f2d44905b946d081","document_sha256":"4f435ac10fc9bf2b872487c03216a71a192b1658448419d6ebbf64f939f7c363","findings":{"blocking":0,"readiness_blocking":0,"verified":0},"mode":"hub","ontology_sha256":"5d601b96f0ca4d75eea89e9086c38e3acf2c4f0c7833846ef58c6a5719603126","policy_sha256":"0465598e9c1c4f2c3400ba51bf4719aa4890d60d56dc83304fb2224e660562b7","proof_manifest_sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570","schema_version":"semantic-certificate/v1","semantic_audit_sha256":"542ca32b31d4d6e345e33b57a1328f9e91029fb4cd2423875ed0c3aa74514361","subject":"raw/project-notes/ca-skeleton-operational-contract.md","typed_contract_graph_sha256":"481fc3335a494c454ab13ad1d6a6ddccdec99aa8e083f6720ff8886bfa19cc89","verdict":"PASS"}
|