# Source Index 상세 문서의 주장과 근거를 다시 찾을 수 있게 code/config/test/git/runtime source를 색인한다. | id | kind | path / command / URL | revision or time | what it proves | limitations | |---|---|---|---|---|---| | SRC-001 | git | `evidence/raw/001-git-snapshot.txt` | `a24ece9cf797f7ea647e33bf846b115208ed1ba5` | 분석 snapshot과 clean branch 상태 | 이후 source 변경에는 적용 안 됨 | | SRC-002 | registry/inventory | `src/config/architecture/modules.json`, `evidence/raw/002-module-inventory.txt` | same revision | 44 registered leaves, dependency/runtime memberships, initial file/LOC sizing | initial sizing은 각 bounded scope final denominator와 다를 수 있음 | | SRC-003 | module policy | `src/domain-core/CLAUDE.md` | same revision | domain-core responsibility/allowed/forbidden/test contract | policy 문서; 실제 enforcement는 별도 확인 필요 | | SRC-004 | rationale | `src/domain-core/README.md` | same revision | ResourceId unsealed, marker/guardrail rationale | 문서 claim은 code/test와 교차검증해야 함 | | SRC-005 | code | `src/domain-core/src/main/java/dev/caskeleton/domain/identifier/ResourceId.java` | same revision | self-typed ID interface와 `value()` surface | UUIDv7 validation 구현 없음 | | SRC-006 | code | `src/domain-core/src/main/java/dev/caskeleton/domain/identifier/IdFactory.java` | same revision | identifier generation port | concrete uniqueness/generation semantics는 adapter 책임 | | SRC-007 | code | `src/domain-core/src/main/java/dev/caskeleton/domain/stereotype/*.java` | same revision | runtime-retained framework-neutral markers | marker 자체가 invariant를 구현하지 않음 | | SRC-008 | build | `src/domain-core/build.gradle` | same revision | explicit module dependency block empty | convention plugin/tool dependencies는 root/build-logic에서 올 수 있음 | | SRC-009 | build policy | `src/build-logic/.../ModuleRegistry.groovy`, `ca.architecture-registry.settings.gradle` | same revision | registry fail-closed validation과 project inclusion | runtime behavior 자체는 아님 | | SRC-010 | build verification | `src/build.gradle:1401+ verifyCleanArchitectureDependencies` | same revision | actual project dependency edge와 allowlist 비교 | non-project external dependencies는 이 task 범위 밖 | | SRC-011 | architecture test | `src/app-bootstrap/.../CleanArchitectureTest.java` domain rules | same revision | purity/value-object/aggregate/event/ResourceId enforcement | 전체 2,792라인 중 관련 rule만 bounded scope에서 해석 | | SRC-012 | consumer code | `src/sample-portfolio/.../WorkLogId.java`, `WorkLogIdFactory.java`, `UuidWorkLogIdFactory.java` | same revision | ResourceId/IdFactory concrete reachability | sample implementation이지 모든 consumer를 대표하지 않음 | | SRC-013 | consumer code | `src/sample-portfolio/.../WorkLog.java`, `WorkLogReserved.java` | same revision | AggregateRoot/DomainEvent production use | sample domain 전체 분석은 아님 | | SRC-014 | test | `src/sample-portfolio/.../WorkLogIdPropertyTest.java` | same revision | canonical shape를 허용/비-shape를 거부 | UUID version/variant는 검증하지 않음 | | SRC-015 | test | `src/sample-portfolio/.../UuidWorkLogIdFactoryTest.java` | same revision | factory canonical output/distinctness/monotonicity | global uniqueness proof 아님 | | SRC-016 | runtime consumer | `src/adapter/inbound/websocket/.../LiveEventStompBroadcaster.java` | same revision | `DomainEvent` RUNTIME retention의 production reflection consumer 존재 | broadcaster 전체 behavior는 websocket scope 대상 | | EVD-001 | command | `evidence/raw/003-domain-core-test.txt` | 2026-08-29 | `:domain-core:test` build task 실행 결과 | module 자체 Java test 0개 | | EVD-002 | command | `evidence/raw/004-clean-architecture-test.txt` | 2026-08-29 | cross-module architecture test가 BUILD SUCCESSFUL / exit code 0 | 이 실행은 현재 snapshot의 전체 ArchUnit suite 결과이며 개별 rule의 미래 변경까지 보장하지 않음 | | SRC-017 | module policy/rationale/build | `src/shared-contract/CLAUDE.md`, `README.md`, `build.gradle` | same revision | stdlib-only boundary, responsibilities, custom qualification lanes | policy/rationale claims are cross-checked against code/tests | | SRC-018 | code/resource | `src/shared-contract/src/main/**` | same revision | shared error/response/rate-limit/metrics/tracing/concurrency/opstore/activation/health contracts and messaging schema | downstream adapter behavior belongs to their bounded scopes | | SRC-019 | tests | `src/shared-contract/src/test/**`, `src/edgeRateLimitContractTest/**` | same revision | constructor/factory invariants, vocabulary, resource digest and provider-neutral rate-limit contract | does not prove external JSON Schema validator interoperability | | SRC-020 | reachability | production references to `DomainContextPropagator` and `OperationalRecordStorePort` | same revision | actual app-bootstrap/JPA/sample/GraphQL consumers exist | representative reachability, not exhaustive consumer analysis | | EVD-005 | command | `evidence/raw/005-shared-contract-test.txt` | 2026-08-29 | `:shared-contract:test` BUILD SUCCESSFUL / exit 0 | focused module test only | | EVD-006 | command | `evidence/raw/006-shared-contract-edge-rate-limit-test.txt` | 2026-08-29 | strict `edgeRateLimitContractTest` BUILD SUCCESSFUL / exit 0 | provider-neutral contract lane only | | SRC-021 | code/tests | `src/application-core/src/main/java/dev/caskeleton/application/{usecase,command,query,capability}/**`, matching `src/test/**` | same revision | framework-free use-case type split and runtime-readable capability declaration surface | mandatory/coherence enforcement still requires architecture-rule trace | | SRC-022 | transaction code/tests | `src/application-core/src/main/java/dev/caskeleton/application/transaction/{TransactionMode,TransactionPort,PolicyTransactionPort,TransactionRequest}.java`, `TransactionPortTest.java`, `TransactionRequestTest.java` | same revision | transaction mode surface, root-write abstract contract, runnable delegation, request coherence validation | remaining transaction package and concrete adapter semantics not yet fully read | | SRC-023 | security code/tests | `src/application-core/src/main/java/dev/caskeleton/application/security/**`, `AuthorizationContractTest.java`, `ObjectAccessPolicyTest.java` | same revision | framework-neutral permission/object-access contracts, invariants, transport-neutrality regression history | actual web interception/translation and production policy implementation belong to consumer traces | | SRC-024 | transaction code/tests | `src/application-core/src/main/java/dev/caskeleton/application/transaction/**`, matching `src/test/**` | same revision | full application transaction vocabulary, policy request/result algebra, reconciliation and retry-safety contracts | framework execution semantics require adapter trace | | SRC-025 | adapter code/test | `src/adapter/outbound/persistence-jpa/.../transaction/SpringTransactionPort.java`, `SpringTransactionPortTest.java` | same revision | REQUIRED/REQUIRES_NEW mapping, explicit READ_COMMITTED, root ambient rejection, commit-before-return and commit-failure behavior | focused fake transaction manager; broader policy executor belongs persistence-jpa scope | | SRC-026 | architecture test | `src/app-bootstrap/.../CleanArchitectureTest.java` capability/repository/transaction/auth rules | same revision | mandatory UseCaseCapability, direct transaction/repository coherence, mutating permission declaration, Spring Security dependency ban | direct-call static analysis has documented helper/AOP blind spots | | EVD-007 | command | `./gradlew :application-core:test` | 2026-08-29 | application-core tests BUILD SUCCESSFUL | module tests do not alone prove adapter/runtime semantics | | EVD-008 | command | `./gradlew :app-bootstrap:test --tests dev.caskeleton.bootstrap.architecture.CleanArchitectureTest` | 2026-08-29 | architecture test task resolved BUILD SUCCESSFUL | Gradle reported task UP-TO-DATE; verifies current cached inputs/output state rather than fresh test execution | | SRC-027 | application reliability code/tests | `src/application-core/src/main/java/dev/caskeleton/application/{idempotency,inbox,outbox,operation}/**`, matching `src/test/**` | same revision | owner-safe idempotency/inbox/outbox/durable-operation state, uncertainty and retry/reconciliation semantics | concrete persistence/provider implementation details belong to later scopes | | SRC-028 | cache/coordination code/tests | `src/application-core/src/main/java/dev/caskeleton/application/{cache,lease,lock,outbound,observability}/**`, matching `src/test/**` | same revision | cache-aside race control, bounded single-flight/bulkhead, efficiency-only lease/lock contracts, low-cardinality outbound/observation semantics | actual Redis/JDBC provider failure behavior belongs to adapter scopes | | SRC-029 | messaging/realtime code/tests | `src/application-core/src/main/java/dev/caskeleton/application/{messaging,realtime}/**`, matching messaging tests | same revision | provider/transport-neutral messaging catalog/event envelope and realtime durability/replay/presence contracts | full broker/websocket runtime behavior is cross-scope | | SRC-030 | storage/publication code/tests | `src/application-core/src/main/java/dev/caskeleton/application/{storage,fileexport,filepublication}/**`, matching tests | same revision | legacy raw-storage compatibility path versus semantic publication contracts and CSV safety rules | legacy removal completion not established | | SRC-031 | objectstorage code/tests | `src/application-core/src/main/java/dev/caskeleton/application/objectstorage/**`, matching tests | same revision | opaque identities, bounded content streaming, staged verification/publish, fencing, grants and privilege separation | concrete provider implementation is later outbound objectstorage scope | | SRC-032 | fileserver code/tests | `src/application-core/src/main/java/dev/caskeleton/application/fileserver/**`, matching tests | same revision | upload/download lifecycle, writer fencing, cleanup/recovery, quota, HTTP/range/content-safety and physical/metadata ambiguity handling | concrete fileserver adapter/runtime workers are cross-scope | | SRC-033 | notification code/tests | `src/application-core/src/main/java/dev/caskeleton/application/notification/**`, matching tests | same revision | typed public API, protected contacts, routing, dispatch uncertainty, callbacks, provider evidence, admin/operator contracts | concrete adapters/provider SDK semantics are later scopes | | SRC-034 | reachability | `evidence/raw/013-application-core-reachability.txt`, `evidence/raw/013-application-core-reachability-command.sh` | 2026-08-29 | external production reference files for major application packages, distinguishing active/legacy/unwired paths | static references prove reachability, not that every referenced code path executes in every deployment | | SRC-035 | build | `src/application-core/build.gradle`, root `src/build.gradle` messaging evidence/qualification configuration | same revision | shared-contract-only production dependency, strict messaging qualification required classes and fail-closed evidence properties | build policy does not itself prove runtime behavior | | SRC-036 | defect trace | `AdminOperationStorePort.java`, `NotificationAdminApplicationService.java`, `JpaAdminOperationStore.java` | same revision | atomic admin claim contract and adapter implementation exist, while application service still uses find-before-effect/save and never calls claim | concurrency impact is statically demonstrated by control flow/history; dedicated reproducer remains backlog | | EVD-009 | command | `evidence/raw/009-application-core-test.txt` | 2026-08-29 | fresh `:application-core:test --rerun-tasks` BUILD SUCCESSFUL | application-core test lane does not replace provider integration tests | | EVD-010 | command | `evidence/raw/010-application-core-messaging-qualification.txt`, `010a-messaging-qualification-missing-attestation.txt`, `014-application-core-verification-metadata.txt` | 2026-08-29 | strict messaging application qualification: missing attestation fails closed; exact digest rerun passes 15 tests with 0 skipped | digests identify this analysis invocation, not a broader release attestation | | EVD-011 | command | `evidence/raw/011-clean-architecture-test.txt` | 2026-08-29 | fresh CleanArchitectureTest rerun BUILD SUCCESSFUL, 98 actionable tasks executed | static architecture tests retain documented indirect-call/reflection/AOP blind spots | | EVD-012 | command | `evidence/raw/012-verify-clean-architecture-dependencies.txt` | 2026-08-29 | `verifyCleanArchitectureDependencies` BUILD SUCCESSFUL | validates project dependency registry edges, not arbitrary runtime calls | | SRC-037 | module code/test/build/docs | `src/adapter/outbound/support/{src/**,build.gradle,README.md,CLAUDE.md}` | same revision | complete leaf-owned surface: MDC correlation lookup, shared fail-open dependency logger, default Spring bean seam, focused test and local design claims | downstream adapter behavior and full app runtime are outside the leaf denominator and require separate consumer/composition evidence | | SRC-038 | registry/composition/architecture | `src/config/architecture/modules.json`, `src/app-bootstrap/.../CaSkeletonApplication.java`, `CleanArchitectureTest.java`, `src/app-bootstrap/build.gradle` | same revision | support runtime membership, broad component-scan reachability, direct app-bootstrap dependency, and outbound-peer rule allowing shared dependency into support | source/ArchUnit wiring does not prove every deployment creates or exercises every consumer path | | SRC-039 | consumer code/tests | `OutboundMessagePublisher.java`, `FailOpenNotificationProvider.java`, `OutboundMessagePublisherTest.java`, `NotificationAdapterTest.java`, `OptionalAdapterBeanGatingTest.java` | same revision | actual messaging/notification use of the shared logger, messaging diagnostic-failure isolation regression, current notification test coverage, and optional-adapter gating harness | only the support-relevant consumer paths were read; messaging/notification modules are not exhaustively analyzed in this scope | | SRC-040 | logging/privacy contracts | `application-core/.../Notification.java`, notification provider/client SPIs, `app-bootstrap/.../LogMaskingPatterns.java`, relevant app-bootstrap README logging section, `docs/registries/mdc-keys.yaml` | same revision | Notification recipient/body PII contract, unrestricted exception surfaces, current secret-masking vocabulary, and correlation-id registry ownership | does not establish the exception text behavior of every external SDK or every production log backend | | SRC-041 | git/document history | `git log -S'OutboundHttpDependencyLogger'`, support README history | same revision | historical HTTP dependency logger existed and was later deleted while the support README comparison text remained | history establishes repository evolution, not the motivation behind every deletion unless explicitly recorded in commit/source text | | EVD-013 | static probes | `evidence/raw/015-adapter-outbound-support-inventory.txt` through `020-adapter-outbound-support-project-edge-usage.txt` | 2026-08-29 | quantified leaf inventory plus required public-reachability, conditional-wiring, duplicate-mechanism, documentation-drift and project-edge-usage searches | textual/static probes do not cover reflection, generated registration, external consumers, or runtime execution unless separately evidenced | | EVD-014 | runtime probe | `evidence/raw/021a-support-logger-pii-probe.java`, `021-support-logger-pii-probe.txt` | 2026-08-29 | current compiled FailOpenDependencyLogger renders explicit email/body markers present in an exception message into the WARN message | controlled local probe proves logger behavior for supplied exception text; it does not claim a particular real provider currently emits that exact text | | EVD-015 | runtime probe | `evidence/raw/022a-notification-logger-failure-probe.java`, `022-notification-logger-failure-probe.txt` | 2026-08-29 | current compiled notification consumer calls failure observation after a successful send when success logging throws, and propagates a failure-logging RuntimeException | uses a deliberately throwing SLF4J proxy rather than a real disk-full/appender outage; it isolates the control-flow contract | | EVD-016 | command | `evidence/raw/023-adapter-outbound-support-test.txt` | 2026-08-29 | fresh `:adapter:outbound:support:test --rerun-tasks` execution succeeds | focused leaf test does not exercise exception-message PII or throwing-logger consumer behavior | | EVD-017 | command | `evidence/raw/024-adapter-outbound-support-dependencies.txt`, `025-clean-architecture-dependencies.txt` | 2026-08-29 | current support compileClasspath has external Spring/SLF4J dependencies and registry project-edge verification succeeds | dependency verification proves allowed graph shape, not semantic necessity of every consumer edge | | EVD-018 | command | `evidence/raw/026-messaging-support-consumer-test.txt`, `027-notification-support-consumer-test.txt`, `028-optional-adapter-bean-gating-test.txt` | 2026-08-29 | fresh relevant messaging, notification and optional-adapter composition test classes succeed | selected focused tests do not substitute for exhaustive downstream-module or full deployed-runtime testing | | EVD-019 | command | `evidence/raw/029-clean-architecture-support-rule.txt` | 2026-08-29 | fresh CleanArchitectureTest execution succeeds with the outbound-peer/support exception rule present | ArchUnit statically verifies bytecode dependency rules; it does not prove runtime activation or logging failure behavior | | SRC-042 | JPA API code/tests | `src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/api/**`, matching `src/test/**/api/**` | same revision | complete 49-type external API vocabulary plus 6 dedicated tests: bounded operation/query identities, failure algebra, cursor/keyset contracts, transaction/retry/completion evidence | implementation semantics such as actual commit classification, SQLSTATE translation and query observation are owned by later sub-scopes | | SRC-043 | JPA API consumers/wiring | `src/app-bootstrap/.../jpa/{JpaPlatformAutoConfiguration,JpaPlatformReport,JpaPlatformEndpoint,JpaPlatformRuntimeAutoConfiguration}.java`, persistence `JpaRetryObservation`, `DefaultJpaRetryPolicy`, `FullTransactionRetryCoordinator` | same revision | capability report reaches actuator model, retry reason is not a current metric tag, and API transaction types feed actual retry coordinator | consumer reads are API-meaning traces only; their owning implementation sub-scopes are not thereby complete | | SRC-044 | JPA API surface/history | `docs/architecture/jpa-api-surface.txt`, `src/build-logic/.../ca.api-surface.gradle`, git history for `SignedJsonCursorCodec`, `CapabilitySupport`, `JpaEntityNotFoundException` | same revision | committed 49-type intended external API surface and history of cursor bound hardening | public-surface baseline governs names, not method behavior or external adopter usage | | EVD-020 | static probes | `evidence/raw/031-persistence-jpa-module-inventory.txt` through `034-persistence-jpa-api-document-surface-check.txt` | 2026-08-29 | 605-file module denominator and API public-reachability/conditional/duplicate/document-surface probes | static/textual reachability excludes reflection/generated code/external adopters and can over-count same-package Javadoc references | | EVD-021 | runtime probe | `evidence/raw/035a-jpa-cursor-boundary-probe.java`, `035-jpa-cursor-boundary-probe.txt` | 2026-08-29 | current compiled cursor codec round-trips 2045 bytes but rejects its own encoded tokens at 2046–2048 bytes while rejecting 2049 at encode | focused codec probe does not exercise HTTP transport or an application-specific cursor payload mapper | | EVD-022 | runtime probe | `evidence/raw/036a-jpa-api-bound-probe.java`, `036-jpa-api-bound-probe.txt` | 2026-08-29 | constructors accept 100k-character capability constraints/retry reason and `Integer.MAX_VALUE` maxAttempts | records type-level bounds only; current shipped composition does not supply such capability strings and effective retry budget needs transaction trace | | EVD-023 | command | `evidence/raw/037-persistence-jpa-api-tests.txt`, `038-persistence-jpa-api-surface.txt`, `039-jpa-platform-capability-composition-test.txt` | 2026-08-29 | fresh six-class API tests, public API-surface verification and app-bootstrap capability composition test all BUILD SUCCESSFUL | green existing tests do not contain the 2046–2048 cursor round-trip boundary property | | EVD-024 | history | `evidence/raw/040-persistence-jpa-api-history.txt` | 2026-08-29 | cursor pre-decode bounds including `decodedLengthOf` were introduced in commit `2f5d2fc`; capability/entity-not-found types date to initial JPA platform commit | commit diffs show repository evolution but do not establish unstated author intent | | SRC-045 | JPA transaction/failure code | `src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/{transaction,failure}/**`, matching dedicated tests | same revision | complete 32-production/19-test transaction execution, retry, deadline, completion-evidence and operational-error implementation surface | real database lost-ack semantics and owning vendor translation require cross-scope evidence | | SRC-046 | JPA transaction composition/docs | `src/app-bootstrap/.../jpa/{JpaPlatformRuntimeAutoConfiguration,JpaTransactionAutoConfiguration}.java`, `PersistenceJpaRootAutoConfiguration.java`, `docs/jpa/{transaction-guide,support-matrix,runbooks}.md` | same revision | canonical `PolicyTransactionPort` implementation differs from public JPA executor/coordinator stack; Stable completion-evidence docs can be compared to actual bean construction | static composition does not itself reproduce a network-level unknown commit | | EVD-025 | JPA transaction static/runtime verification | `evidence/raw/041-*` through `051-*` | 2026-08-29 | 51-file denominator/reachability/history, custom-policy probe, commit-ambiguity probe, fresh focused transaction tests and app-bootstrap wiring tests | fake transaction managers isolate control flow; they do not prove a real PostgreSQL commit was applied before acknowledgement loss | | SRC-047 | Hibernate/Spring Data/Querydsl code/tests | `src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/{hibernate,springdata,querydsl}/**`, matching dedicated tests | same revision | complete 42-production/11-test query/batch/stream/fetch/keyset/sort/Querydsl bounded sub-scope | PostgreSQL vendor internals and entire integration source set remain later owning scopes | | SRC-048 | JPA query architecture/composition | `JpaModuleBoundaryTest.java`, app-bootstrap `CleanArchitectureTest.java`, persistence `build.gradle`/`gradle.lockfile`, `NamedStatementInspector.java` | same revision | package DAG/export rules, Querydsl compile-only/runtime optionality, split export allowlists and missing statement-inspector production wiring | static reachability does not exclude reflection/external adopters and architecture rules do not prove runtime feature invocation | | SRC-049 | JPA collection-fetch release evidence | `src/config/jpa/release-registry.json`, persistence `build.gradle`, `HibernateCollectionFetchPaginationContractTest.java`, `PostgreSqlQueryPlanContractTest.java`, root `verifyJpaReleaseGateTasks` | same revision | blocking collection-fetch gate maps to a query-plan task selecting a different tag/test class, while target test itself does not inspect generated SQL limit | aggregate release task also runs the jpa-contract lane, so this proves per-gate provenance/assertion weakness rather than absence of all collection tests | | EVD-026 | focused/architecture verification | `evidence/raw/052-persistence-jpa-hibernate-springdata-querydsl-tests.txt`, `055-persistence-jpa-query-architecture-tests.txt` | 2026-08-29 | fresh 53-file-scope focused tests and package/bootstrap architecture tests BUILD SUCCESSFUL | existing tests omit the newly probed IDENTITY/Specification boundaries and cannot detect split-SSOT semantics | | EVD-027 | runtime/library probes | `evidence/raw/053-jpa-query-hibernate-boundary-probe.txt`, `061-spring-data-specification-unrestricted-contract.txt` | 2026-08-29 | property-access IDENTITY bypass, one-batch semantic edge, non-null null-predicate Specification acceptance, and Spring Data 4.0.7 unrestricted contract | controlled probes do not show a current production entity/repository actually uses the failing mappings | | EVD-028 | PostgreSQL/release-gate verification | `evidence/raw/057-persistence-jpa-query-hibernate-postgresql-contracts.txt`, `058-persistence-jpa-queryplan-gate-task.txt`, `059-verify-jpa-release-gate-tasks.txt` | 2026-08-29 | selected real-PostgreSQL batch/ID/collection contracts pass; exact registry task executes only `PostgreSqlQueryPlanContractTest`; task-existence validator still passes | green collection-fetch tests prove current assertions only, not SQL-side pagination | | EVD-029 | reachability/history/provenance | `evidence/raw/054-persistence-jpa-query-hibernate-reachability.txt`, `056-persistence-jpa-collection-fetch-gate-provenance.txt`, `060-persistence-jpa-query-hibernate-history.txt` | 2026-08-29 | implementation adoption/wiring, release tag mismatch, and historical fixes/initial evidence design are recoverable from raw source/history | git history establishes evolution, not unstated intent | | SRC-050 | PostgreSQL vendor code/tests/migrations | `src/adapter/outbound/persistence-jpa/src/{main/java,main/resources,test/java}/**/postgresql/**` | same revision | 55 production Java + 9 dedicated unit Java + 9 vendor migrations의 complete owning surface와 SQLSTATE/idempotency/inbox/outbox/native/COPY/type helper 구현 | complete PostgreSQL integration/readiness source set은 sub-scope 11 소유 | | SRC-051 | PostgreSQL runtime composition | `PostgreSqlPersistenceConfig`, `JpaPlatformRuntimeAutoConfiguration`, `JpaTransactionAutoConfiguration`, `PostgreSqlIdempotencyProviderConfig`, `DefaultJpaRetryPolicy` | same revision | vendor translator가 transaction failure chain에, PostgreSQL Idempotency V2 store가 provider composition에 실제 연결됨 | 모든 profile/deployment가 동일 bean set을 사용한다는 보장은 아님 | | SRC-052 | reliability contracts/history | `application-core/.../{idempotency,inbox,outbox}/**`, `docs/superpowers/specs/2026-07-28-jpa-production-capability-design.md`, `docs/reviews/2026-08-14-jpa-module-code-review.md` | same revision/current history | replay TTL, owner-safe transition, completion-unknown/reconciliation 기대 계약과 과거 wiring findings를 현재 구현과 비교 | 문서만으로 runtime behavior를 증명하지 않으므로 probes와 교차검증 | | EVD-030 | real PostgreSQL probe | `evidence/raw/062-postgresql-replay-semantic-probe.txt`, `062a-postgresql-replay-semantic-probe.java` | 2026-08-29 | same-store inbox forged-owner replay와 changed-retention, polling outbox changed-schedule replay를 PostgreSQL 16.15에서 재현 | 해당 inbox/outbox adapters는 현재 default production composition에서 확인되지 않은 candidate | | EVD-031 | translator/policy probes | `evidence/raw/063-postgresql-40003-probe.txt`, `069-postgresql-40003-policy-probe.txt` | 2026-08-29 | SQLSTATE 40003이 UNKNOWN/completionUnknown=false가 되고 실제 DefaultJpaRetryPolicy에서 RECONCILE가 아니라 FAIL로 결정됨 | synthetic SQLException 40003; 실제 network commit acknowledgement loss 자체를 재현한 것은 아님 | | EVD-032 | codec probe | `evidence/raw/065-pg-range-escaped-quote-probe.txt`, `065a-pg-range-escaped-quote-probe.java` | 2026-08-29 | current PgRangeCodec의 escaped quote/backslash endpoint self-round-trip 실패 | pure codec probe; real PostgreSQL text output/provider consumer는 실행하지 않음 | | EVD-033 | real PostgreSQL idempotency probe | `evidence/raw/066-postgresql-idempotency-replay-boundary-probe.txt`, `066a-postgresql-idempotency-replay-boundary-probe.java` | 2026-08-29 | changed replayTtl false-same completion과 expired COMPLETED inspect/claim lifecycle divergence를 production store + PostgreSQL 16에서 재현 | temporary analysis tests; 실행 후 repository source에서 제거/복원 | | EVD-034 | command | `evidence/raw/067-persistence-jpa-postgresql-unit-tests.txt` | 2026-08-29 | 9 dedicated PostgreSQL unit classes fresh `--rerun-tasks` BUILD SUCCESSFUL | existing assertions가 새 replay/expiry/range/40003 policy boundaries를 포함하지 않음 | | EVD-035 | reachability/history | `evidence/raw/064-postgresql-vendor-manifest-reachability.txt`, `068-postgresql-vendor-history-review-provenance.txt` | 2026-08-29 | 73-file denominator, key production construction, current history와 prior-review exact-term provenance | static reachability는 reflection/external adopter/runtime activation을 완전히 증명하지 않음 | | SRC-053 | JPA baseline capability code/tests/migrations | `evidence/raw/070-persistence-jpa-baseline-capability-manifest.txt`, baseline `audit/auditing/cache/envers/h2/idempotency/liveevent/lock/migration/observation/operation/outbox/security/config` sources | same revision | 61 production + 19 dedicated test + 7 migration SQL, 87/87 FULL_READ | complete PostgreSQL integration lane belongs to sub-scope 11 | | SRC-054 | baseline composition/security provenance | `evidence/raw/072-baseline-capability-reachability.txt`, `JpaAdapterComponentsConfig`, `JpaPlatformRuntimeAutoConfiguration`, `JpaPlatformReport`, `docs/jpa/security.md` | same revision | outbox is baseline-composed, liveevent/durable adapters are not; runtime-role Stable contract promises startup fail-fast but production never invokes `requireSafe`, and report only checks CREATE privilege | static caller search does not cover external applications constructing these public types themselves | | EVD-036 | real PostgreSQL probe | `evidence/raw/071-liveevent-full-sweep-probe-output.txt`, `071a-liveevent-full-sweep-probe.java` | 2026-08-29 | after a stream is fully swept, current-row `max(position)` becomes null and allocator reuses position 1 on PostgreSQL 16 | temporary analysis test; adapter is currently not default-composed | | EVD-037 | real PostgreSQL probe | `evidence/raw/073-durable-operation-expired-lease-output.txt`, `073a-durable-operation-expired-lease-probe.java` | 2026-08-29 | expired lease owner can still update RUNNING operation to SUCCEEDED before takeover because terminal update lacks lease-expiry predicate | temporary analysis test; adapter is currently not default-composed | | EVD-038 | focused adapter probe | `evidence/raw/075-outbox-stale-worker-state-regression-output.txt`, `075a-outbox-stale-worker-state-regression-probe.java` | 2026-08-29 | baseline outbox `markFailed` can regress a PUBLISHED entity to FAILED with no owner/attempt/state CAS fencing | focused unit-level transition probe; multi-worker database timing itself is inferred from separately committed claim/relay transaction structure | | EVD-039 | command | `evidence/raw/076-persistence-jpa-baseline-unit-tests.txt` | 2026-08-29 | fresh full `:adapter:outbound:persistence-jpa:test --rerun-tasks` BUILD SUCCESSFUL, 18 actionable tasks executed | unit lane does not replace real-PostgreSQL semantics, which are separately probed where required | | SRC-055 | Fileserver persistence + migrations | `evidence/raw/077-persistence-jpa-fileserver-manifest.txt`, `src/adapter/outbound/persistence-jpa/src/main/{java,resources}/**/fileserver/**` | same revision | 25 production Java + 4 migration SQL, 29/29 FULL_READ; capability is opt-in but production-composed when enabled | PostgreSQL integration/readiness source denominator remains sub-scope 11 | | SRC-056 | Fileserver quota/composition/schema contracts | `evidence/raw/079-fileserver-reachability-quota-schema-contract.txt`, application Fileserver quota/admission code, Fileserver schema activation, design deviations/plan | same revision | production quota aggregate readers/byte ceiling are absent; V3/V4 schema changes are not represented in registry revision while activation accepts >=2 | static cross-scope search cannot prove behavior of external adopters outside this repository | | EVD-040 | real PostgreSQL probe | `evidence/raw/078-fileserver-quota-boundary-probe-output.txt`, `078a-fileserver-quota-boundary-probe.java` | 2026-08-29 | expired direct reservation still commits; reclaim request spanning 65 one-byte committed rows leaves 1 byte because only 64 rows are loaded | temporary analysis tests added to Fileserver reclamation class and restored after run | | EVD-041 | real PostgreSQL concurrency probe | `evidence/raw/080-fileserver-recovery-concurrent-enqueue-output.txt`, `080a-fileserver-recovery-concurrent-enqueue-probe.java` | 2026-08-29 | two simultaneous first enqueue calls for one file produce one success + one DataIntegrityViolationException, with one row retained | scheduling is barrier-assisted but exact winner is nondeterministic as expected | | EVD-042 | real PostgreSQL migration probe | `evidence/raw/081-fileserver-schema-activation-v2-output.txt`, `081a-fileserver-schema-activation-v2-probe.java` | 2026-08-29 | Fileserver Flyway target 2 promoted ACTIVE passes `FileserverSchemaActivation` while V3 claim_token and V4 lifecycle_state columns are absent | demonstrates gate false-positive; full Spring context with `ddl-auto=none` was not separately booted | | EVD-043 | command | `evidence/raw/082-fileserver-official-readiness-lanes.txt` | 2026-08-29 | original-source Fileserver migration/metadata/reclamation PostgreSQL readiness tasks fresh `--rerun-tasks` BUILD SUCCESSFUL, 21 actionable tasks executed, git clean before/after | these official assertions do not include the temporary boundary probes, which are captured separately | | EVD-044 | real PostgreSQL liveness probe | `evidence/raw/079-fileserver-cleanup-crash-budget-output.txt`, `079a-fileserver-cleanup-crash-budget-probe.java` | 2026-08-29 | Fileserver cleanup의 declared max attempt 8을 넘겨 crash-reclaim만으로 attempt 9가 되고도 row가 `FAILED` / `CLAIM_LEASE_EXPIRED`로 다시 claim 가능함을 재현 | controlled repeated lease-expiry simulation; physical storage crash 자체를 발생시킨 것은 아니며 probe 종료 후 analysis-owned test source는 exact HEAD blob으로 복구됨 | | SRC-057 | Notification persistence + migrations | `evidence/raw/083-persistence-jpa-notification-manifest.txt`, `src/adapter/outbound/persistence-jpa/src/main/{java,resources}/**/notification/**` + 5 dedicated unit tests | same revision | 53 production Java + 10 migrations + 5 unit Java, 68/68 FULL_READ; request/recipient/attempt/admin/reconciliation/provider-event/inbox persistence and opt-in composition | full PostgreSQL integration/readiness denominator remains sub-scope 11 | | SRC-058 | Notification runtime reachability/contracts | `evidence/raw/092-notification-reachability-test-gap.txt`, `NotificationDispatchService`, `DispatchOutcomeRecorder`, `ReconciliationJobWorker`, `NotificationAdminApplicationService` | same revision | post-provider recorder uses lease-unaware save, reconciliation processing is outside durable claim, admin atomic claim has no production caller, V4 is final registry revision write | static call graph is repository-internal and does not cover external adopters | | EVD-045 | real PostgreSQL schema probe | `evidence/raw/084-notification-schema-v4-activation-probe.txt` | 2026-08-29 | V4-only ACTIVE database passes activation count while current-required expires/projection/collapse/admin/evidence columns are absent | full Spring context boot was not required to demonstrate gate predicate false-positive | | EVD-046 | real PostgreSQL lease probes | `evidence/raw/085-notification-expired-lease-write-probe.txt`, `091-notification-stale-provider-overwrite-probe.txt` | 2026-08-29 | expired holder is not still-held yet owner+fence update succeeds; after worker B takeover an ID-only stale projection overwrites lifecycle while preserving B/fence 8 | SQL reproduces exact predicates/effect; provider network call itself is not simulated | | EVD-047 | real PostgreSQL reconciliation probe | `evidence/raw/086-notification-reconciliation-claim-probe.txt` | 2026-08-29 | two sequential autocommit `FOR UPDATE SKIP LOCKED` claims return the same due job before any complete/reschedule, proving select-lock lifetime does not cover worker processing | controlled two-session semantics; provider status query itself is not executed | | EVD-048 | admin claim/reachability probe | `evidence/raw/087-notification-admin-claim-completion-probe.txt`, `088-notification-admin-claim-reachability.txt` | 2026-08-29 | atomic claim row cannot be completed by current save-style duplicate insert, and production `operations.claim()` call sites are zero while find→action→save remains | direct SQL + static repository call graph | | EVD-049 | fresh official Notification verification | `evidence/raw/089-notification-schema-official-readiness.txt`, `090-notification-existing-contracts-fresh.txt` | 2026-08-29 | schema readiness and existing recipient/admin claim contracts both BUILD SUCCESSFUL with `--rerun-tasks`, 19/19 tasks each | green tests validate existing assertions; they omit current-schema compatibility, post-provider lease write, reconciliation claim lifetime, and production admin claim wiring | | SRC-059 | Experimental platform code/tests/migration | `evidence/raw/093-persistence-jpa-experimental-manifest.txt`, `src/adapter/outbound/persistence-jpa/src/main/java/**/experimental/**`, dedicated unit tests, `db/experimental-rls/V1__tenant_rls.sql` | same revision | 29 production + 8 unit + 1 SQL의 38/38 owning FULL_READ와 multi-tenancy/RLS/schema/database tenancy/read-replica/next-compatibility surface | 현재 app-bootstrap production wiring은 확인되지 않아 semantic defects는 latent로 분류 | | SRC-060 | Experimental composition/consent | `evidence/raw/096-experimental-gate-reachability.txt`, `099-experimental-structural-optin-gap.txt`, `ExperimentalEntryConsentTest`, `PersistenceJpaConfig`, `JpaModuleBoundaryTest` | same revision | 일부 activation-capable public constructor가 gate list 밖에 있고 Stable entity/repository scan 문자열이 experimental package를 포함하지만 현재 experimental JPA stereotype은 0 | external consumers/reflection까지 증명하지 않으며 현재 repository production caller는 0 | | EVD-050 | focused semantic probes | `evidence/raw/095-experimental-pool-overshoot-probe.txt`, `097-experimental-replica-provider-probe.txt` | 2026-08-29 | heterogeneous pool 8+5가 max 10을 넘어 13으로 열림; no-evidence EVENTUAL read가 REPLICA; unknown Hibernate 9가 Stable replacement 허용됨 | analysis-only temporary unit tests; source는 실행 후 복원 | | EVD-051 | real PostgreSQL security probe | `evidence/raw/098-experimental-rls-missing-table-probe.txt` | 2026-08-29 | PostgreSQL 16에서 RLS verifier가 requested missing tenant table을 exception 없이 성공으로 인정 | current app runtime does not compose RLS verifier; demonstrates verifier contract only | | EVD-052 | fresh original Experimental verification | `evidence/raw/100-experimental-original-unit-tests.txt`, `101-experimental-original-postgresql-contracts.txt` | 2026-08-29 | original 8 experimental unit + boundary/scan tests and 5 PostgreSQL contract/migration/security classes all BUILD SUCCESSFUL; git clean before/after | existing green assertions omit the newly probed missing-table, partial pool headroom, no-evidence EVENTUAL, unknown-major and exhaustive opt-in boundaries | | SRC-061 | JPA testkit + fixture/unit corpus | `evidence/raw/102-persistence-jpa-testkit-manifest.txt`, `src/adapter/outbound/persistence-jpa/src/testkit/java/**`, `src/adapter/outbound/persistence-jpa/src/test/java/**/testkit/**` | same revision | 41 testkit + 21 fixture/unit Java, 62/62 FULL_READ; architecture/query-plan/release/migration/failure/pool helper semantics | production persistence behavior 자체가 아니라 evidence producer의 정확성을 분석 | | EVD-053 | testkit semantic false-negative probes | `evidence/raw/103-testkit-unit-boundary-probes.txt` | 2026-08-29 | `CompletableFuture` architecture leak accepted; audit decoy parameter accepted; nested child estimate 1000x miss가 ratio 1.0으로 축약; UUID test fixture same-ms inversion 3784에서 재현 | UUID helper는 exact FQN consumer 0이라 production defect로 승격하지 않음 | | EVD-054 | real PostgreSQL EXPLAIN side-effect probe | `evidence/raw/104-testkit-explain-dml-cte-probe.txt` | 2026-08-29 | SELECT-only guard가 data-modifying CTE를 허용해 `EXPLAIN ANALYZE` 후 row `bucket 9 -> 99`; PostgreSQL 16 BUILD SUCCESSFUL | current committed query-plan inputs는 SELECT이므로 current release mutation을 주장하지 않음 | | EVD-055 | testkit reachability sweep | `evidence/raw/105-testkit-public-reachability-sweep.txt` | 2026-08-29 | production/release-connected helpers와 zero-reference `CommitAmbiguityProxy`, `PostgreSqlContractExtension` 구분 | simple-name collision은 exact FQN 추가 확인으로 보정 | | EVD-056 | fresh original testkit evidence | `evidence/raw/106-testkit-original-verification.txt` | 2026-08-29 | JPA full unit 29s green, production JPA architecture 1m47s green, original PostgreSQL query-plan 25s green; git clean before/after | green suite가 newly probed wrapper/CTE/child-plan/substring boundaries를 포함하지 않음 | | SRC-062 | governance / build / config | `evidence/raw/107-persistence-jpa-governance-manifest.txt`, `adapter/outbound/persistence-jpa/{CLAUDE.md,README.md,build.gradle,gradle.lockfile}`, `config/**`, `JpaModuleBoundaryTest`, `CandidateAdapterCompositionTest` | same revision | leaf 최상위 4 + production 4 + test 3 = 11/11 FULL_READ; strictTestLanes/testkitPublisher/apiSurface 계약, 24-package catalog와 export list, always-install 대 opt-in scan 경계 | sub-scope 06이 이미 계상한 config/platform test 3개는 여기서 재계상하지 않으며, 그 test의 내용 분석만 이 sub-scope가 수행 | | SRC-063 | composition reachability | `evidence/raw/108-governance-config-reachability.txt`, `PersistenceJpaRootAutoConfiguration`, `CaSkeletonApplication`, `PostgreSqlPersistenceConfig`, `H2PersistenceConfig`, `PersistenceVendorProdSafetyValidator` | same revision | `config` public type 3개의 leaf 밖 소비자 존재; leaf `@ConfigurationProperties` 3형제 중 `PersistenceVendorSettings`만 production enablement 부재; composition root `@ConfigurationPropertiesScan`이 persistence tree를 덮지 않음 | 정적 검색은 reflection/외부 adopter를 덮지 않는다; prod safety validator는 `h2` 값만 거부하므로 unknown 값 검증과 무관 | | EVD-057 | 실행 probe | `evidence/raw/109-vendor-selector-shipped-shape-probe.txt`, `109a-vendor-selector-shipped-shape-probe.java` | 2026-08-29 | shipped 모양 + `vendor=mysql`에서 context 성공·settings bean 0·SPI bean 0·양 vendor config 0; `@EnableConfigurationProperties` 추가 시 property를 지목하는 `ConfigurationPropertiesBindException`; component scan 포함 case의 실패 메시지에 vendor property 부재 | `ApplicationContextRunner` context이지 full application context가 아니므로 실제 배포에서 최초로 실패하는 bean은 다를 수 있음; 임시 test는 실행 후 삭제하고 git clean 확인 | | SRC-064 | documentation / count drift | `evidence/raw/110-governance-doc-count-drift.txt`, `src/build.gradle:verifyDocumentedLeafCount`, `docs/jpa/repository-adaptation.md`, `docs/architecture/jpa-api-surface.txt`, `JpaModuleBoundaryTest`, `CleanArchitectureTest`, leaf `README.md` | same revision | registry 44 대 문서/주석의 19-leaf 6곳; public top-level type 338/350 대 주석의 318/324; README의 package root·module 이름 drift; gate 탐색 domain이 `CLAUDE.md`/`build.gradle` 두 파일명뿐 | drift는 문서·주석에 한정되며 런타임 동작에 영향 없음; gate 자체는 green으로 통과함을 별도 실행으로 확인 | | SRC-065 | pool lane | `evidence/raw/111-persistence-jpa-pool-lane-manifest.txt`, `112-pool-lane-claim-registry-reachability.txt`, `src/jpaPlatformPerformanceTest/**`, `config/jpa/release-registry.json`, `docs/jpa/support-matrix.md`, `.github/workflows/jpa-nightly.yml` | same revision | 3/3 FULL_READ; release registry gate 6개에 pool lane 부재(3곳 모두 exit=1)이나 `jpaPlatformReleaseGate`는 의존; lane assertion 8개 중 2개가 공식 항등식이고 pending 관측 assertion 부재 | `verifyJpaReleaseGateTasks`는 registry→task 한 방향만 검사하므로 역방향 미검증 사실은 정적 관찰 | | EVD-058 | 실제 PostgreSQL probe | `evidence/raw/113-pool-lane-saturation-probe.txt`, `113a-pool-lane-saturation-probe.java` | 2026-08-29 | 실제 포화 Hikari pool에서 active=2/idle=0/pending=1/saturated=true, 반납 후 대기자 획득; acquisition 실측 504ms 대 설정 500ms 대 assertion 상한 2,500ms | 단일 머신 관측이며 성능 수치가 아니라 계약 관측; 임시 test는 실행 후 삭제하고 git clean 확인 | | EVD-059 | fresh original verification | `evidence/raw/114-governance-pool-original-verification.txt` | 2026-08-29 | 원본 소스에서 leaf unit lane 28s green(18 executed), `jpaPlatformPoolContractTest` 24s green(18 executed), root `verifyDocumentedLeafCount` 3s green(9 executed), git clean before/after | green은 기존 assertion의 통과를 뜻하며 §119·§125가 지적한 미검증 영역을 포함하지 않는다 | | SRC-066 | integration/readiness lane corpus | `evidence/raw/120-persistence-jpa-integration-lane-manifest.txt`, `src/postgresqlIntegrationTest/**` | same revision | 75/75 FULL_READ(71 Java + 4 SQL, 13,977 lines); tag 5종 분포, 무-tag 클래스 13개와 readiness task 14개의 1:1 대응, orphan test 0 | 파일 소유는 이 sub-scope이나 §52(collection-fetch)·sub-scope 10(explain runner) 등 이미 판정된 결함은 중복 계상하지 않음 | | SRC-067 | evidence 배선(card ↔ lane ↔ gate) | `config/jpa/readiness-cards.yaml`, `src/gradle/jpa-evidence.gradle`, `config/jpa/release-registry.json`, `.github/workflows/{ci-quality-gates,jpa-nightly,jpa-pr,jpa-release,jpa-r2-evidence}.yml` | same revision | card 17개 중 active 13, producer 12; card scenario가 가리키는 클래스 12개는 전부 `readiness/**`이고 `platform/**` 33개는 0개; readiness task는 `jpaPlatformReleaseGate`에 없고 workflow가 직접 부르지도 않음 | 배선은 `--dry-run` task graph resolve로 확인했으며, CI 실제 실행 이력은 이 저장소 안에서 확인할 수 없다 | | EVD-060 | command | `evidence/raw/115-integration-lane-original-verification.txt` | 2026-08-29 | 원본 소스에서 5개 tag lane `--rerun-tasks` BUILD SUCCESSFUL in 3m 10s — 51 classes / 244 tests / 0 skipped / 0 failures / PostgreSQL 컨테이너 87회 기동, git clean before/after | 같은 실행에 이어 붙인 `verifyJpaCandidateEvidence`는 `:app-bootstrap:test`의 compose scenario가 `jq` 부재로 실패해 완주하지 못했다(환경 제약, app-bootstrap 소유) | | EVD-061 | command | `evidence/raw/116-readiness-lane-original-verification.txt`, `118-readiness-task-result-matrix.txt` | 2026-08-29 | 14개 readiness task `--rerun-tasks --continue` 결과 표: 82 tests / 0 skipped / 12 PASS / 2 FAIL, git clean before/after | `postgresqlSecurityBaselineIntegrationTest`의 실패는 인증서 SAN이 `localhost` 단일이라 형제 컨테이너 환경에서 매핑 포트에 닿지 못한 환경 제약이며 repository 결함이 아니다 | | EVD-062 | 실패 재현 + history | `evidence/raw/117-flyway-migration-readiness-lane-failure.txt` | 2026-08-29 | `postgresqlMigrationIntegrationTest` 단독 `--rerun-tasks` BUILD FAILED/exit 1, 두 assertion 실패 원문(`1,3,4,5,6,9,10,11,12` 대 `1,3,4,5,6`; `1,2` 대 `1`), stream 파일 목록, assertion 최종 수정 2026-07-31 대 migration 추가 08-15/08-18/08-28 | 원본 unmodified source, git clean before/after; CI가 현재 red인지 여부는 저장소 안에서 확인할 수 없고 확인된 것은 이 revision에서 task가 실패한다는 사실이다 | | EVD-063 | 실제 PostgreSQL probe | `evidence/raw/119-notification-migration-ladder-probe.txt`, `119a-notification-migration-ladder-probe.java` | 2026-08-29 | notification 사다리 4종의 컬럼 집합 실측: V1–V10 218, V1–V9 218(차 0), V1–V8 213(차 5), V1–V6 208(차 10)과 누락 컬럼 이름 전체 | 컬럼 집합 비교이며 데이터·제약 semantics 비교가 아니다; V10이 DDL 없는 guard이기 때문에 V9와 V10의 컬럼 수가 같다 | | SRC-068 | cross-scope 정합 | `HibernateCollectionFetchPaginationContractTest`, `PostgreSqlQueryPlanContractTest`, `PostgreSqlSecurityContractTest`, `TenantPoolCapacityContractTest`, `AdminOperationClaimContractTest` | same revision | 앞선 sub-scope 04·06·08·09·10의 결함이 이 lane에서 green으로 남은 이유를 각 test의 assertion 범위로 설명(SQL limit 미확인, CTE 미포함, test가 만든 role/policy, 균일 pool 크기, test가 재작성한 claim SQL) | 정합 설명이며 새 결함 판정이 아니다 | | SRC-069 | module map / denominator | `evidence/raw/121-persistence-mongo-module-inventory.txt`, `src/adapter/outbound/persistence-mongo/**` | same revision | mongo leaf 497 tracked files(main 353 / test 104 / testkit 35 / perf 1 / top-level 4), 약 38.5k LOC, production Java 351, package 지도, 선언된 8개 test lane | 초기 sizing이며 각 sub-scope의 최종 denominator는 그 sub-scope manifest가 확정한다 | | SRC-070 | governance / opt-in scope | `evidence/raw/122-mongo-governance-optin-manifest.txt`, mongo `CLAUDE.md`/`README.md`/`build.gradle`/`gradle.lockfile`, root package 4, `autoconfigure/**` 9, `META-INF` 등록 resource 2, 관련 test 12 | same revision | 31/31 FULL_READ; opt-in 네 겹(import filter → root auto-config → persistence config → platform/observability auto-config)과 각 겹이 막는 실패, startup validator/probe requirement 배치 | 이 sub-scope의 도달성은 Java import graph가 아니라 등록 metadata와 annotation 인자에 있어 정적 참조 검색만으로 판단할 수 없다 | | SRC-071 | opt-in reachability / sibling / duplicate | `evidence/raw/123-mongo-optin-reachability-and-siblings.txt`, `CapabilityDependencyValidator`, `CapabilityDependencyStartupCheck`, `application.yml:370` | same revision | root/autoconfigure public type 13개 중 leaf 밖 참조는 2개; master switch를 읽는 production 지점 6곳이 조건 동일; `ca-skeleton.persistence-mongo.*` namespace의 네 번째 key `active-profile`만 소유자가 leaf 밖 | 정적 검색은 reflection·생성 등록·저장소 밖 adopter를 덮지 않는다 | | EVD-064 | 실행 probe | `evidence/raw/124-mongo-platform-settings-binding-probe.txt`, `124a-mongo-platform-settings-binding-probe.java` | 2026-08-29 | `change-streams=true` → 예외 없이 bound value false; `transactions=true` → true 보존; `required-secondaries=-1` → `MongoOperationRejectedException`으로 context 실패 | binding 계층만 관측했고 change stream 실행체 자체는 이 저장소에 shipped되지 않는다; 임시 test는 실행 후 삭제하고 git clean 확인 | | SRC-072 | documentation / count drift | `evidence/raw/125-mongo-governance-doc-count-drift.txt`, mongo `build.gradle`, `docs/architecture/mongo-api-surface.txt`, `MongoNamespaceContractTest`, `MongoModuleBoundaryTest`, `docs/mongodb/repository-adaptation.md`, `docs/adr/ADR-MONGO-001` | same revision | build.gradle 주석의 311/313 대 실측 346/351, 382 대 실측 526; namespace guard의 domain(`src/main/**`)과 그 밖에 생존한 폐기 키 3+2곳; 19-leaf claim 3곳 대 registry 44; README "10개 규칙"은 방향 규칙 개수로 정확 | drift는 주석·문서에 한정되며 런타임 동작에 영향 없음; 관련 gate는 모두 green임을 별도 실행으로 확인 | | EVD-065 | fresh original verification | `evidence/raw/126-mongo-hermetic-lane-original-verification.txt` | 2026-08-29 | 원본 소스 `--rerun-tasks`: unit lane 14 classes/72 tests, stable contract lane 83 classes/526 tests, 둘 다 0 skipped/0 failures; `verifyMongoTestLaneDisjointness`·`verifyMongoReleaseContractLanes`·`verifyMongoApiSurface` 통과; `:app-bootstrap:test --tests *CapabilityDependencyValidatorTest*` 통과; git clean before/after | hermetic lane만 실행했고 Docker 기반 6개 lane(replicaSet/failover/migration/compatibility/security/performance)은 이 실행에 포함되지 않는다 | | SRC-073 | api core contract | `evidence/raw/127-mongo-api-scope-manifest.txt`, `adapter/outbound/persistence-mongo/src/main/java/**/api/**` + 전용 test 9 | same revision | 70/70 FULL_READ(61 production 2,687 LOC + 9 test); operation identity·실행 context·실패 algebra·BSON 표현 manifest·consistency registry·schema version 정책·관측 seam; committed public surface 346 중 api 기여 59 | `api`는 의도된 외부 표면이라 저장소 내부 참조 0이 dead를 뜻하지 않으며, 저장소 밖 adopter는 정적 검색으로 증명되지 않는다 | | SRC-074 | api negative-space probes | `evidence/raw/128-mongo-api-negative-space-probes.txt`, `MongoFailureContext`, `MongoTransaction*Exception`, `MongoSchemaVersionPolicy`, `DefaultMongoFailureTranslator`, `MongoConsistencyDescriptor`, `Database/CollectionProfileName` | same revision | framework-free 규칙 소스 전수 검색 매치 0; schema-version 예외 두 생성 경로의 category/버전 비대칭; `MongoTimeoutException` 2-arg 생성자의 `initCause`와 그 규칙을 검사하는 test의 대상 불일치; invariant를 강제하는 타입과 강제하지 않는 타입 6종 비교; 두 profile-name record의 검증 코드 동일성 | 정적 판정이며 실행 probe를 필요로 하지 않았다; production 경로의 정합성(classification 파생)은 코드 경로 추적으로 확인했고 런타임 실행으로 재확인하지는 않았다 | | EVD-066 | 실행 probe | `evidence/raw/129-mongo-empty-type-registry-write-probe.txt`, `129a-...java` | 2026-08-29 | 빈 type registry로 `MappingMongoConverter.write(...)` → `IllegalStateException: no type metadata policy is registered for …`; Spring 기본 mapper는 같은 입력에서 `_class` 포함 3키를 씀; `policyFor`→`CLASS_METADATA_ALLOWED`, `writeTypeRestrictions`는 `_class`를 쓰고 `writeType`은 던진다 | 단일 converter 경로만 관측했고 repository·template 상위 경로 전체를 실행하지 않았다; 임시 test는 실행 후 삭제하고 git clean 확인 | | SRC-075 | mapping / nativecap / geo | `evidence/raw/130-mongo-mapping-nativecap-geo-manifest-and-probes.txt` | same revision | 27/27 FULL_READ; BSON 표현 manifest의 converter 등록 경로, native capability gateway의 노출 규칙, geospatial operations의 sphere-index 요구; reachability·조건부 형제·중복 mechanism probe | 정적 판정 중심이며 geo 경로는 실제 2dsphere index를 가진 서버에서 재확인하지 않았다 | | SRC-076 | imperative / reactive 실행 경로 | `evidence/raw/131-mongo-execution-paths-manifest-and-probes.txt` | same revision | 61/61 FULL_READ; 두 executor의 관측·실패번역·deadline 처리와 collection profile registry 경유 규칙; deadline 미부착 지점과 실행 scope 이탈 경로 식별 | 두 executor의 배선은 auto-configuration 정적 판독으로 확인했고 런타임 컨텍스트로 재확인하지 않았다 | | SRC-077 | query / aggregation | `evidence/raw/132-mongo-query-aggregation-manifest-and-probes.txt` | same revision | 29/29 FULL_READ; allowlist 기반 query 표현 불가능성, keyset cursor HMAC·타입태그·길이 프레이밍; 배선된 bean은 `MongoBudgetEnforcer` 하나이고 그 소비자도 미배선; aggregation executor가 collection을 `String`으로 받아 registry·실행 scope를 우회 | 두 finding 모두 정적으로 결정 가능해 실행 probe를 돌리지 않았다; 미배선이므로 현재 노출은 없다 | | SRC-078 | transaction / retry / session | `evidence/raw/133-mongo-transaction-manifest-and-probes.txt` | same revision | 27/27 FULL_READ; body 재시도와 commit 재시도의 두 루프 분리를 blocking·reactive 양쪽에서 코드로 추적; transaction subsystem bean 0·cross-package 참조 0인데 `platform.transactions=true`는 startup에서 TRANSACTION capability를 요구 | 미배선 판정은 이 leaf 안의 정적 검색 결과이며 저장소 밖 adopter는 덮지 않는다 | | SRC-079 | schema / migration | `evidence/raw/134-mongo-schema-migration-manifest-and-probes.txt` | same revision | 58/58 FULL_READ; manifest 기반 선언과 D4 apply 사다리, migration lease의 fencing token 설계; apply policy·diff engine·TTL validator의 production 소비자 0; `mongoMigrationTest` lane 1 class/8 tests/0 failures | apply policy 계층의 미배선은 이 leaf 범위의 검색 결과다; ledger의 `ensureIndexes` 전제는 운영 배포 시점에만 확인 가능하다 | | EVD-067 | 실행 probe | `evidence/raw/134a-mongo-schema-migration-execution-probes.txt` | 2026-08-30 | 실서버(MongoDB 8.0 replica set): `saveCheckpoint(fence=1 over stored 5)` REFUSED / `recordApplied(fence=1 over stored 5)` **ACCEPTED** → 밀려난 runner가 ledger를 차지하고 live runner는 driver duplicate-key를 받음; hermetic: TTL·sparse·partial·collation 변경과 서버-숨김 index가 전부 `diff.isClean()=true`; `MongoIndexManifest.expireAfter(1s)` 생성 성공; Flamingock lease로 non-resumable migration도 REFUSED | ledger 경로만 직접 호출했고 `MongoMigrationRunner.applyOne`의 인접 `lock.refresh` 보호는 별도로 코드로 확인했다; 임시 test 2개는 실행 후 삭제하고 git clean 확인 | | SRC-080 | changestream | `evidence/raw/135-mongo-changestream-manifest-and-probes.txt` | same revision | 26/26 FULL_READ; source bean은 무조건·consumer bean은 fork의 5종 SPI에 조건부로 **실제 조립됨**; `changeStreams` flag는 `false` 고정이라 startup CHANGE_STREAM 검사 도달 불가; recovery의 네 결정 메서드 중 하나만 사용되고 `MongoChangeHistoryLostException`은 어디에서도 생성되지 않음; 세 기존 test가 "본 적 있지만 완료되지 않은 위치"를 다루지 않는 이유 | SPI 구현은 전부 test fixture이며 실제 fork 배선을 관측한 것은 아니다 | | EVD-068 | 실행 probe | `evidence/raw/135a-mongo-changestream-execution-probes.txt` | 2026-08-30 | auto-configuration과 동일 조립으로 3종: (C) worker 1개·failover 중 투영 취소 → 재전달 이벤트가 pipeline에 삼켜지고 checkpoint가 그것을 지나침, state=RUNNING·runbook 빈칸·Flux 정상 완료; (A) BUSY+resumable 실패에서 동일 소실; (B) 실패 없이도 후속 이벤트가 `CLAIMED_ELSEWHERE` 위치를 지나침; (D) `requireCorrectResumeOption`은 자기 자신과 비교 | reactor 기반 hermetic 재현이며 실제 서버의 change stream 재전달 순서를 관측한 것은 아니다(재전달 대상은 stored checkpoint 기준으로 구성); 임시 test 2개는 실행 후 삭제하고 git clean 확인 | | SRC-081 | security / failure / observation / client | `evidence/raw/136-mongo-security-failure-observation-client-probes.txt` | same revision | 44/44 FULL_READ; `failure`는 완전 배선(classifier·translator bean, 두 executor가 사용), `security` 검증 경로는 `MongoStartupValidator`가 실행, `observation`은 driver 리스너만 customizer로 설치, `client`는 저장소 전체 호출자 0; allowlist 강제·redactor `describe`·잔여 API 4종의 production 호출 0 | 저장소 밖 adopter가 `MongoClientSettingsFactory`를 쓰는 경우는 정적 검색으로 배제할 수 없다 | | EVD-069 | 실행 probe | `evidence/raw/136a-mongo-client-settings-execution-probe.txt` | 2026-08-30 | `MongoSecurityProfile.production(tls=true, auth=true)`를 validator가 ACCEPTED; Boot가 README의 `spring.data.mongodb.uri`에서 만드는 설정은 `sslEnabled=false`, connect 10000ms, serverSelection 30000ms, poolMaxSize 100, `serverApi=null`, `uuidRepresentation=UNSPECIFIED`; factory가 만들었다면 `sslEnabled=true` | 실제 Spring 컨텍스트가 아니라 Boot가 사용하는 동일 API로 재구성한 비교다; 임시 test는 실행 후 삭제하고 git clean 확인 | | SRC-082 | advanced 전체 | `evidence/raw/137-mongo-advanced-manifest-and-probes.txt` | same revision | 75/75 FULL_READ; guard bean은 auto-load되지 않는 `MongoAdvancedConfiguration`에만 있어 기본 배선에서 모든 entry point 도달 불가(설계와 일치); 구체 클래스 19개 = entry point 7 + policy 11 + 의도적 제외 1(`@Configuration`); 실행 probe: 모든 승인 증거를 갖춘 입력에서 sharding 4작업 중 1개만 실행(3개는 5인자 `execute`의 `approval=null`로 거부); promotion 증거 어휘 2종·checkpoint 작성자 2곳·Scaffold 고지 누락 1건 | 임시 probe test는 실행 후 삭제하고 git clean 확인; Advanced 능력의 실제 동작은 해당 토폴로지가 없어 검증 불가 | | SRC-083 | testkit / release / lanes | `evidence/raw/138-mongo-testkit-release-lanes-probes.txt` | same revision | 49/49 FULL_READ; testkit 33종 소비자 계수에서 `MongoRoundTripContract`·`MongoAtlasLocalContainer`·`MongoChunkMigrationController` 0; `MongoStableContractSuite`의 `(not executed)` 분기와 `certified()` 커버리지 검사가 구조적으로 도달 불가(형제 `MongoChaosGate`는 정상); `release-contracts.json`의 차단 계약 3개가 전부 `topology=none` hermetic이고 experimental 3개는 등록되지 않은 task를 가리킴; `.github/workflows` 26개 중 mongo 언급 0(JPA는 7개) | CI 부재는 이 저장소의 workflow 파일 기준이며 외부 파이프라인은 관측 범위 밖이다 | | SRC-084 | module map / denominator | `evidence/raw/139-identifier-module-inventory.txt`, `src/adapter/outbound/identifier/**` | same revision | leaf 전체 10 tracked files(main Java 4 / test Java 1 / test Groovy 1 / governance 4), 562 LOC; 단일 패키지 `dev.caskeleton.adapter.outbound.identifier`; 레지스트리 allowed_dependencies=[domain-core, application-core], runtime_memberships=[app-bootstrap, sample-portfolio]; 소비자는 app-bootstrap·sample-portfolio 2곳 | 10 파일 전수이므로 sampling 없음; 저장소 밖 adopter는 덮지 않는다 | | SRC-085 | reachability / doc drift | `evidence/raw/140-identifier-negative-space-probes.txt` | same revision | 세 production 타입 소비자 계수(`UuidCodec` 0, 나머지 둘은 composition root 배선); `UuidCodec.` 호출은 자기 Spock 스펙 5줄뿐이고 leaf 밖 20+ 파일이 `UUID.fromString`을 직접 호출, D10 대상은 Hibernate `@JdbcTypeCode(SqlTypes.UUID)`가 처리; CLAUDE.md의 build.gradle 선언 서술 3항목 불일치; README의 패키지 루트·Groovy variant·설정 키 3건 오류; ArchUnit `IDENTIFIER_ADAPTER_DOES_NOT_DEPEND_ON_OTHER_ADAPTERS_OR_BOOTSTRAP`는 실재(confirmed)하고 `.claude/hooks/ca_import_gate.py`는 tracked 아님 | `.claude/`는 로컬 설정 영역이라 개발자 머신 존재 여부는 판정 불가 — clone 기준으로만 부재를 기록했다 | | EVD-070 | 실행 probe | `evidence/raw/140-identifier-negative-space-probes.txt` (EXECUTION PROBE 절) | 2026-08-30 | `normalize("1-1-1-1-1")` → `"00000001-0001-0001-0001-000000000001"`, `"1-2-3-4-5"` → `"00000001-0002-0003-0004-000000000005"` (canonical 아닌 입력을 수용해 재작성), `"not-a-uuid"`·무대시 32자·공백 포함은 `IllegalArgumentException`; `normalize(null)`→null / `toUuid(null)`·`fromUuid(null)`→NPE; `newFileId`·`newUploadId` 모두 **version=4**, `UUID.randomUUID()` version=4 | JDK 21의 `UUID.fromString` 동작에 의존하는 결과이며 다른 JDK 버전에서 관대 경로가 달라질 수 있다; 임시 test class는 실행 후 삭제하고 git clean 확인 | | SRC-086 | module map / denominator | `evidence/raw/141-fileserver-module-inventory.txt`, `src/adapter/outbound/fileserver/**` | same revision | 119 tracked files(main 78 / 12,707 LOC, test 37 / 12,043 LOC, governance 4); 패키지 배치 루트 31 · platform/local 33 · verification 10 · security 2 · audit 2; 별도 source set·test lane 없음; leaf 밖 소비자는 app-bootstrap 하나 | 초기 sizing이며 각 sub-scope의 최종 denominator는 해당 manifest가 확정한다 | | SRC-087 | config / activation | `evidence/raw/142-fileserver-config-activation-probes.txt` | same revision | 13/13 FULL_READ; R1/R2/플랫폼 세 namespace 분리와 `rejectAmbiguous`의 세 진입점 배치; 적재는 auto-configuration이 아니라 `CaSkeletonApplication`의 명시적 `@ComponentScan`(imports 파일 없음); R1은 `ignoreUnknownFields` 없음·상대 루트 허용·디렉터리 생성, R2는 전부 반대; README가 지목한 selector 기본값이 `application.yml`에 없음 | `.claude`·로컬 설정은 tracked 파일 기준으로만 판단했다 | | SRC-088 | control plane / codec | `evidence/raw/143-fileserver-control-plane-probes.txt` | same revision | 6/6 FULL_READ(main 2,535 LOC); canonical 왕복 강제(decode 후 재encode 바이트 비교), 인접 전이 행렬과 terminal 종결성, `SecureDirectoryStream` 17회 vs R1 저널 0회, poison 래치의 root 범위와 읽기 허용이 test 이름으로 의도임을 확인; 세 타입 모두 package-private·leaf 밖 참조 0 | 후보 finding 3건을 코드·test로 추적해 결함 아님으로 판정했고 실행 probe는 돌리지 않았다 | | SRC-089 | publication | `evidence/raw/144-fileserver-publication-probes.txt` | same revision | 26/26 FULL_READ; 19개 production 타입 전부 package-private·leaf 밖 참조 0; `recoverR2`가 상태별로 재개하고 producer를 재생하지 않음; 길이 프레이밍 canonical digest와 route token 충돌 컴파일 검사; R1/R2 엄격도 6축 대조와 두 계층 접점(`decodeStoredOperation`)이 엄격 경로를 쓰는지 확인 | R1/R2 격차는 문서가 선언한 상태이며 결함으로 올리지 않았다 | | SRC-090 | platform/local IO | `evidence/raw/145-fileserver-local-io-probes.txt` | same revision | 30/30 FULL_READ; `SecureDirectoryWalk`의 서술자 상대 하강과 fallback 부재; `platform/local`의 `Files.*` 호출 전수 조사 → 쓰기 경로에 남은 5곳(`AtomicMoveContentPublisher:53·113·114`, `ContentPublishVerification:53·114`)과 그 유일한 보호가 모듈이 "a precheck could only ever approximate"라 적은 `requireNoSymlinkBetween`; `TransferBufferPool.maxBorrowedBytes()`의 소비자 0 | 발행 rename의 도달성은 스토리지 루트 쓰기 권한에 달려 있고, 그 루트 증명은 app-bootstrap 몫이라 이 leaf 범위에서 확정하지 않았다 | | SRC-091 | verification / security / audit | `evidence/raw/146-fileserver-verification-security-audit-probes.txt` | same revision | 29/29 FULL_READ; `AdminAuditPort`·`FileserverAuditPort`·`FileAccessPolicy`·`StorageHealthPort`·`OrphanScanPort`·`StorageUsageProbe`·`ReconciliationContentProbe` 구현 8종과 app-bootstrap의 bean 생성 8곳을 확인해 README:105를 반증; 검증 사슬의 fail-closed 합성(timeout/예외 → RETRY, RETRY > ACCEPT); 인가 거부 메시지에 역할 미포함 | bean 생성 지점은 app-bootstrap 소스 기준이며 런타임 컨텍스트로 재확인하지는 않았다 | | EVD-071 | 실행 probe | `evidence/raw/146-fileserver-verification-security-audit-probes.txt` (EXECUTION PROBE 절) | 2026-08-30 | `inlineSafeProfile=false`에서 `ScriptableContentPolicy` 9종 입력 판정: 평문 `