The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.
Follows the import procedure in README.md.
source/ the originating repository verbatim — 78 documents, 28 SVGs,
8 manifests, plus .source-revision recording the commit
final/ the SSOT
document.md 729 lines written from the 29 experiment documents, not
concatenated: what was predicted, what was measured, and
where the measurement itself was wrong
evidence/raw 125 outputs, flattened to <experiment>__<file> because
the originals collided (01-baseline.txt appeared three
times) and the audit only globs the top level
evidence/meta one per raw file; command and exitCode are null and the
README says why rather than inventing them
evidence/browser 22 captures
assets/ three diagrams through techviz
.techviz/ their VizSpecs
A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.
Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.
verify-pipeline.py passes. audit-records.py reports no issues.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
13966 lines
615 KiB
JSON
13966 lines
615 KiB
JSON
{
|
|
"schemaVersion": 1,
|
|
"project": "clean-architecture-backend-template",
|
|
"generatedAt": "2026-08-31T02:22:23.332251+00:00",
|
|
"sourceManifest": "root-tree-source-manifest.json",
|
|
"candidates": [
|
|
{
|
|
"id": "A01-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/01-domain-core.md#L202"
|
|
],
|
|
"sourceHeading": "P1 — UUIDv7 계약과 실제 validation의 불일치 확인/정렬",
|
|
"summary": "UUIDv7 계약과 실제 validation의 불일치 확인/정렬",
|
|
"disposition": "MERGED",
|
|
"target": "case:documented-uuidv7-generates-v4",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A01-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/01-domain-core.md#L216"
|
|
],
|
|
"sourceHeading": "P3 — `IdFactory.newId()`의 “never-before-used” 문구 정밀화",
|
|
"summary": "`IdFactory.newId()`의 “never-before-used” 문구 정밀화",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a01-f002-idfactory-newid",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A02-F001",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L155"
|
|
],
|
|
"sourceHeading": "P1 — response/LRO invariant enforcement boundary",
|
|
"summary": "response/LRO invariant enforcement boundary",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:a02-f001-lro",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A02-F002",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L159"
|
|
],
|
|
"sourceHeading": "P1 — DomainContextKey same-name different-type collision",
|
|
"summary": "DomainContextKey same-name different-type collision",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:a02-f002-domaincontextkey",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A02-F003",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L163"
|
|
],
|
|
"sourceHeading": "P2 — bounded operational record identifiers",
|
|
"summary": "bounded operational record identifiers",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:analysis-finding-a02-f003",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A02-F004",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L167"
|
|
],
|
|
"sourceHeading": "P2 — permission component grammar",
|
|
"summary": "permission component grammar",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:analysis-finding-a02-f004",
|
|
"reason": null,
|
|
"topic": "security-policy-enforcement",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A02-F005",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L171"
|
|
],
|
|
"sourceHeading": "P2 — messaging schema qualification boundary",
|
|
"summary": "messaging schema qualification boundary",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:analysis-finding-a02-f005",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A03-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L344"
|
|
],
|
|
"sourceHeading": "P1 — notification admin atomic claim contract가 service에서 사용되지 않음",
|
|
"summary": "notification admin atomic claim contract가 service에서 사용되지 않음",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a03-f001",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A03-F002",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L352"
|
|
],
|
|
"sourceHeading": "P2 — notification derived idempotency key가 32-bit hash",
|
|
"summary": "notification derived idempotency key가 32-bit hash",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:analysis-finding-a03-f002",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A03-F003",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L360"
|
|
],
|
|
"sourceHeading": "P2 — legacy storage/notification compatibility surface의 제거 조건 추적",
|
|
"summary": "legacy storage/notification compatibility surface의 제거 조건 추적",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:analysis-finding-a03-f003",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A03-F004",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L367"
|
|
],
|
|
"sourceHeading": "P3 — isolation vocabulary와 legacy routing capability의 시차",
|
|
"summary": "isolation vocabulary와 legacy routing capability의 시차",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:analysis-finding-a03-f004",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A04-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L156"
|
|
],
|
|
"sourceHeading": "4. Confirmed P1 — `cause.getMessage()` 때문에 PII-safe logging 계약이 성립하지 않는다",
|
|
"summary": "`cause.getMessage()` 때문에 PII-safe logging 계약이 성립하지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:pii-through-an-exception-message",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A04-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L232"
|
|
],
|
|
"sourceHeading": "5. Confirmed P1 — notification consumer는 diagnostic failure를 authoritative failure로 바꿀 수 있다",
|
|
"summary": "notification consumer는 diagnostic failure를 authoritative failure로 바꿀 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a04-f002",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A04-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L575"
|
|
],
|
|
"sourceHeading": "P1 — arbitrary exception message가 PII-safe logging boundary를 우회한다",
|
|
"summary": "arbitrary exception message가 PII-safe logging boundary를 우회한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:pii-through-an-exception-message",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A04-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L585"
|
|
],
|
|
"sourceHeading": "P1 — notification fail-open consumer가 logger failure를 격리하지 않는다",
|
|
"summary": "notification fail-open consumer가 logger failure를 격리하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a04-f004",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A04-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L595"
|
|
],
|
|
"sourceHeading": "P3 — support README가 current architecture registry/history와 drift",
|
|
"summary": "support README가 current architecture registry/history와 drift",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a04-f005",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A04-F006",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L603"
|
|
],
|
|
"sourceHeading": "P3 — cache-redis/httpclient의 support project dependency 필요성 재검증",
|
|
"summary": "cache-redis/httpclient의 support project dependency 필요성 재검증",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:analysis-finding-a04-f006",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A05-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L382"
|
|
],
|
|
"sourceHeading": "6.2 Confirmed P2 — encode가 발급한 2046~2048-byte cursor를 decode가 거부한다",
|
|
"summary": "encode가 발급한 2046~2048-byte cursor를 decode가 거부한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f001",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A05-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L651"
|
|
],
|
|
"sourceHeading": "P2 — `SignedJsonCursorCodec` accepted encode domain과 decode domain 불일치",
|
|
"summary": "`SignedJsonCursorCodec` accepted encode domain과 decode domain 불일치",
|
|
"disposition": "MERGED",
|
|
"target": "case:analysis-finding-a05-f001",
|
|
"reason": "A05-F001와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F003",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L661"
|
|
],
|
|
"sourceHeading": "P2 — `CapabilitySupport.constraints`의 bounded/report-safe 계약이 타입에서 강제되지 않음",
|
|
"summary": "`CapabilitySupport.constraints`의 bounded/report-safe 계약이 타입에서 강제되지 않음",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:a05-f003-capabilitysupport-constraints",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds",
|
|
"classificationCorrection": "analysis-authored unresolved/kind hint applied during recall-gate review"
|
|
},
|
|
{
|
|
"id": "A05-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L670"
|
|
],
|
|
"sourceHeading": "P3 — `RetryDecision.reason`의 “bounded” 설명과 constructor contract 불일치",
|
|
"summary": "`RetryDecision.reason`의 “bounded” 설명과 constructor contract 불일치",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f004-retrydecision-reason",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A05-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L991"
|
|
],
|
|
"sourceHeading": "20. Confirmed P2 — application-supplied `JpaRetryPolicy`가 valid execution에서 무시된다",
|
|
"summary": "application-supplied `JpaRetryPolicy`가 valid execution에서 무시된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f005-jparetrypolicy",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A05-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1122"
|
|
],
|
|
"sourceHeading": "23. Confirmed P1 — Stable completion-evidence capability가 shipped composition에 설치되지 않는다",
|
|
"summary": "Stable completion-evidence capability가 shipped composition에 설치되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f006-stable",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A05-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1304"
|
|
],
|
|
"sourceHeading": "25. P3 — `TransactionProfileRegistry`는 declarative retry 제거 후 legacy residue 후보",
|
|
"summary": "`TransactionProfileRegistry`는 declarative retry 제거 후 legacy residue 후보",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f007-transactionprofileregistry",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A05-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1524"
|
|
],
|
|
"sourceHeading": "P1 — completion-evidence Stable contract가 actual composition에 연결되지 않음",
|
|
"summary": "completion-evidence Stable contract가 actual composition에 연결되지 않음",
|
|
"disposition": "MERGED",
|
|
"target": "case:a05-f006-stable",
|
|
"reason": "A05-F006와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1534"
|
|
],
|
|
"sourceHeading": "P2 — custom `JpaRetryPolicy`가 silently ignored",
|
|
"summary": "custom `JpaRetryPolicy`가 silently ignored",
|
|
"disposition": "MERGED",
|
|
"target": "case:a05-f005-jparetrypolicy",
|
|
"reason": "A05-F005와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1542"
|
|
],
|
|
"sourceHeading": "P2 — canonical transaction boundary documentation과 실제 dual stack 불일치",
|
|
"summary": "canonical transaction boundary documentation과 실제 dual stack 불일치",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f010",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A05-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1549"
|
|
],
|
|
"sourceHeading": "P3 — TransactionProfileRegistry legacy residue",
|
|
"summary": "TransactionProfileRegistry legacy residue",
|
|
"disposition": "MERGED",
|
|
"target": "case:a05-f007-transactionprofileregistry",
|
|
"reason": "A05-F007와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F012",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1731"
|
|
],
|
|
"sourceHeading": "38. Confirmed P2 — property-access `IDENTITY` entity가 batch guard를 우회한다",
|
|
"summary": "property-access `IDENTITY` entity가 batch guard를 우회한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f012-identity",
|
|
"reason": null,
|
|
"topic": "security-policy-enforcement"
|
|
},
|
|
{
|
|
"id": "A05-F013",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2021"
|
|
],
|
|
"sourceHeading": "47. Confirmed P2 — `SpecificationPolicy`는 `Specification.unrestricted()`를 bounded로 오인한다",
|
|
"summary": "`SpecificationPolicy`는 `Specification.unrestricted()`를 bounded로 오인한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f013-specificationpolicy-specification-unrestricted",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A05-F014",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2257"
|
|
],
|
|
"sourceHeading": "52. Confirmed P1 — `collection-fetch-pagination` blocking release gate가 실제 위험을 증명하지 않는다",
|
|
"summary": "`collection-fetch-pagination` blocking release gate가 실제 위험을 증명하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f014-collection-fetch-pagination",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A05-F015",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2531"
|
|
],
|
|
"sourceHeading": "P1 — blocking `collection-fetch-pagination` release gate false evidence",
|
|
"summary": "blocking `collection-fetch-pagination` release gate false evidence",
|
|
"disposition": "MERGED",
|
|
"target": "case:a05-f014-collection-fetch-pagination",
|
|
"reason": "A05-F014와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F016",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2540"
|
|
],
|
|
"sourceHeading": "P2 — property-access IDENTITY가 batching-required guard를 우회",
|
|
"summary": "property-access IDENTITY가 batching-required guard를 우회",
|
|
"disposition": "MERGED",
|
|
"target": "case:a05-f012-identity",
|
|
"reason": "A05-F012와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F017",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2548"
|
|
],
|
|
"sourceHeading": "P2 — `SpecificationPolicy`가 unrestricted non-null Specification을 허용",
|
|
"summary": "`SpecificationPolicy`가 unrestricted non-null Specification을 허용",
|
|
"disposition": "MERGED",
|
|
"target": "case:a05-f013-specificationpolicy-specification-unrestricted",
|
|
"reason": "A05-F013와 같은 분석 사건을 후속 sub-scope/pass에서 다시 기록한 중복 finding이다. 별도 Case를 만들지 않고 primary candidate에 병합한다."
|
|
},
|
|
{
|
|
"id": "A05-F018",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2556"
|
|
],
|
|
"sourceHeading": "Cross-scope P1/P2 — query SQL naming/observability composition 부재",
|
|
"summary": "query SQL naming/observability composition 부재",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f018-sql",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A05-F019",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2562"
|
|
],
|
|
"sourceHeading": "P2/P3 — export surface split SSOT",
|
|
"summary": "export surface split SSOT",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f019-ssot",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A05-F020",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2675"
|
|
],
|
|
"sourceHeading": "59.1 P1 — `inspect()`와 `claim()`이 만료된 COMPLETED row를 동시에 다른 상태로 해석한다",
|
|
"summary": "`inspect()`와 `claim()`이 만료된 COMPLETED row를 동시에 다른 상태로 해석한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f020-inspect-claim",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F021",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2704"
|
|
],
|
|
"sourceHeading": "59.2 P2 — `complete()`의 replay 판정이 `replayTtl` 변경을 무시한다",
|
|
"summary": "`complete()`의 replay 판정이 `replayTtl` 변경을 무시한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f021-complete-replayttl",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F022",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2991"
|
|
],
|
|
"sourceHeading": "69. P1 — Stable runtime-role verification이 startup에서 실제 policy를 적용하지 않는다",
|
|
"summary": "Stable runtime-role verification이 startup에서 실제 policy를 적용하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f022-stable",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A05-F023",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3177"
|
|
],
|
|
"sourceHeading": "78. P1 — persistent byte quota가 실제 admission에서 집행되지 않는다",
|
|
"summary": "persistent byte quota가 실제 admission에서 집행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f023",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F024",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3246"
|
|
],
|
|
"sourceHeading": "80. P2 — quota reclaim은 최대 64개 committed row만 처리하고 남은 byte를 조용히 버린다",
|
|
"summary": "quota reclaim은 최대 64개 committed row만 처리하고 남은 byte를 조용히 버린다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f024",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F025",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3266"
|
|
],
|
|
"sourceHeading": "81. P2 — direct `FileQuotaService.commit()`은 만료 reservation을 commit한다",
|
|
"summary": "direct `FileQuotaService.commit()`은 만료 reservation을 commit한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f025-filequotaservice-commit",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F026",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3287"
|
|
],
|
|
"sourceHeading": "82. P2 — recovery queue의 `enqueue()`는 concurrent upsert가 아니다",
|
|
"summary": "recovery queue의 `enqueue()`는 concurrent upsert가 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f026-enqueue",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F027",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3316"
|
|
],
|
|
"sourceHeading": "82.1. P2 — cleanup crash-reclaim은 `MAXIMUM_ATTEMPTS`를 우회해 poison item을 무한 재시도할 수 있다",
|
|
"summary": "cleanup crash-reclaim은 `MAXIMUM_ATTEMPTS`를 우회해 poison item을 무한 재시도할 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f027-maximum-attempts",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F028",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3460"
|
|
],
|
|
"sourceHeading": "89. P1 — provider 호출 뒤 recipient projection write가 lease fencing을 우회한다",
|
|
"summary": "provider 호출 뒤 recipient projection write가 lease fencing을 우회한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f028",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F029",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3494"
|
|
],
|
|
"sourceHeading": "90. P2 — reconciliation `FOR UPDATE SKIP LOCKED`는 worker 처리 구간을 claim하지 않는다",
|
|
"summary": "reconciliation `FOR UPDATE SKIP LOCKED`는 worker 처리 구간을 claim하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f029-for-update-skip-locked",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A05-F030",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3525"
|
|
],
|
|
"sourceHeading": "91. P2 — V8 atomic admin claim은 production service에 연결되지 않았고 completion 모델도 미완성이다",
|
|
"summary": "V8 atomic admin claim은 production service에 연결되지 않았고 completion 모델도 미완성이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f030",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A05-F031",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4089"
|
|
],
|
|
"sourceHeading": "116. Confirmed P2 — vendor selector의 fail-fast 계약이 shipped composition에 설치돼 있지 않다",
|
|
"summary": "vendor selector의 fail-fast 계약이 shipped composition에 설치돼 있지 않다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f031",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A05-F032",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4273"
|
|
],
|
|
"sourceHeading": "125. Confirmed P2 — nightly workflow가 광고하는 세 가지 중 하나를 lane이 실제로 관측하지 않는다",
|
|
"summary": "nightly workflow가 광고하는 세 가지 중 하나를 lane이 실제로 관측하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f032",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A05-F033",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4391"
|
|
],
|
|
"sourceHeading": "132. Confirmed P1 — selected base card `jpa-flyway-migration`의 producer가 현재 revision에서 실패한다",
|
|
"summary": "selected base card `jpa-flyway-migration`의 producer가 현재 revision에서 실패한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a05-f033-jpa-flyway-migration",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A05-F034",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4462"
|
|
],
|
|
"sourceHeading": "133. Confirmed P2 — selected base card 3개의 evidence tag가 production code 없는 fixture로 충족된다",
|
|
"summary": "selected base card 3개의 evidence tag가 production code 없는 fixture로 충족된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a05-f034",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L113"
|
|
],
|
|
"sourceHeading": "4. Confirmed P2 — README가 제시하는 활성화 recipe를 그대로 따르면 애플리케이션이 시작되지 않는다",
|
|
"summary": "README가 제시하는 활성화 recipe를 그대로 따르면 애플리케이션이 시작되지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:the-readme-recipe-does-not-start",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A06-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L132"
|
|
],
|
|
"sourceHeading": "5. Confirmed P3 — 폐기된 namespace guard의 탐색 domain이 operator가 읽는 두 문서를 덮지 않는다",
|
|
"summary": "폐기된 namespace guard의 탐색 domain이 operator가 읽는 두 문서를 덮지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f002",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A06-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L156"
|
|
],
|
|
"sourceHeading": "6. Confirmed P3 — `change-streams=true`는 거부되지 않고 조용히 버려지며, 그 결과 startup validator의 한 분기가 production에서 도달 불가다",
|
|
"summary": "`change-streams=true`는 거부되지 않고 조용히 버려지며, 그 결과 startup validator의 한 분기가 production에서 도달 불가다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a06-f003-change-streams-true",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A06-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L332"
|
|
],
|
|
"sourceHeading": "16. Confirmed P2 — schema version 실패는 두 경로 중 어느 쪽도 온전하지 않다",
|
|
"summary": "schema version 실패는 두 경로 중 어느 쪽도 온전하지 않다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f004",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts"
|
|
},
|
|
{
|
|
"id": "A06-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L347"
|
|
],
|
|
"sourceHeading": "17. Confirmed P3 — 예외 계층의 \"cause를 붙이지 않는다\" 규칙에 문서화되지 않은 예외가 하나 있다",
|
|
"summary": "예외 계층의 \"cause를 붙이지 않는다\" 규칙에 문서화되지 않은 예외가 하나 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f005",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A06-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L447"
|
|
],
|
|
"sourceHeading": "23. Confirmed P1 — shipped default 조합이 첫 write에서 예외를 던진다",
|
|
"summary": "shipped default 조합이 첫 write에서 예외를 던진다",
|
|
"disposition": "MERGED",
|
|
"target": "case:mongo-default-throws-on-first-write",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A06-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L505"
|
|
],
|
|
"sourceHeading": "25. Confirmed P2 — D3 gateway가 문서화한 검사 순서에 존재하지 않는 단계가 있다",
|
|
"summary": "D3 gateway가 문서화한 검사 순서에 존재하지 않는 단계가 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f007",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L600"
|
|
],
|
|
"sourceHeading": "32. Confirmed P2 — 서버 측 deadline이 경로마다 다르게 적용되고, 문서가 지목한 메커니즘은 production 호출자가 0이다",
|
|
"summary": "서버 측 deadline이 경로마다 다르게 적용되고, 문서가 지목한 메커니즘은 production 호출자가 0이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f008",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A06-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L622"
|
|
],
|
|
"sourceHeading": "33. P3 — timeout 초과 경로가 한 observation에 success와 failure를 모두 기록한다",
|
|
"summary": "timeout 초과 경로가 한 observation에 success와 failure를 모두 기록한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f009",
|
|
"reason": null,
|
|
"topic": "transport-and-provider-semantics"
|
|
},
|
|
{
|
|
"id": "A06-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L717"
|
|
],
|
|
"sourceHeading": "42. P2 — collection 이름 불변식이 aggregation executor의 서명에서 깨진다",
|
|
"summary": "collection 이름 불변식이 aggregation executor의 서명에서 깨진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f010",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts"
|
|
},
|
|
{
|
|
"id": "A06-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L740"
|
|
],
|
|
"sourceHeading": "43. P3 — `MongoRegexPolicy.forbidden()`은 금지하지 않는다",
|
|
"summary": "`MongoRegexPolicy.forbidden()`은 금지하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a06-f011-mongoregexpolicy-forbidden",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A06-F012",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L809"
|
|
],
|
|
"sourceHeading": "49. Confirmed P2 — 이 subsystem 전체가 배선돼 있지 않은데, 그것을 켜는 flag는 startup 검사를 수행한다",
|
|
"summary": "이 subsystem 전체가 배선돼 있지 않은데, 그것을 켜는 flag는 startup 검사를 수행한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-flag-that-validates-an-unwired-subsystem",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A06-F013",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L884"
|
|
],
|
|
"sourceHeading": "56. P2 — `recordApplied`는 문서화된 fence 계약을 구현하지 않고, 보호를 역전시킨다",
|
|
"summary": "`recordApplied`는 문서화된 fence 계약을 구현하지 않고, 보호를 역전시킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a06-f013-recordapplied",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A06-F014",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L910"
|
|
],
|
|
"sourceHeading": "57. P2 — index diff가 실제로 비교하는 것은 두 필드뿐이다",
|
|
"summary": "index diff가 실제로 비교하는 것은 두 필드뿐이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f014",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts"
|
|
},
|
|
{
|
|
"id": "A06-F015",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L927"
|
|
],
|
|
"sourceHeading": "58. P3 — TTL이 두 곳에 선언되고, 규칙을 가진 쪽은 아무도 쓰지 않는다",
|
|
"summary": "TTL이 두 곳에 선언되고, 규칙을 가진 쪽은 아무도 쓰지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f015",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts"
|
|
},
|
|
{
|
|
"id": "A06-F016",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L942"
|
|
],
|
|
"sourceHeading": "59. P3 — Flamingock lease로는 어떤 migration도 실행할 수 없고, javadoc은 다르게 적는다",
|
|
"summary": "Flamingock lease로는 어떤 migration도 실행할 수 없고, javadoc은 다르게 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a06-f016-flamingock",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A06-F017",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1041"
|
|
],
|
|
"sourceHeading": "67. P1 — high-water mark가 재전달된 이벤트를 삼켜, failover 중이던 변경이 조용히 영구 소실된다",
|
|
"summary": "high-water mark가 재전달된 이벤트를 삼켜, failover 중이던 변경이 조용히 영구 소실된다",
|
|
"disposition": "MERGED",
|
|
"target": "case:high-water-mark-swallowed-a-redelivered-change",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A06-F018",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1069"
|
|
],
|
|
"sourceHeading": "68. P2 — `changeStreams` flag는 `false`로 고정돼 있는데, 소비자 bean은 그것과 무관하게 조립된다",
|
|
"summary": "`changeStreams` flag는 `false`로 고정돼 있는데, 소비자 bean은 그것과 무관하게 조립된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a06-f018-changestreams-false",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A06-F019",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1088"
|
|
],
|
|
"sourceHeading": "69. P3 — recovery package에 쓰이는 어휘와 쓰이지 않는 어휘가 나란히 있다",
|
|
"summary": "recovery package에 쓰이는 어휘와 쓰이지 않는 어휘가 나란히 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f019",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A06-F020",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1161"
|
|
],
|
|
"sourceHeading": "75. P1 — 프로파일의 TLS·타임아웃·풀·Stable API가 driver에 도달하지 않는다",
|
|
"summary": "프로파일의 TLS·타임아웃·풀·Stable API가 driver에 도달하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a06-f020-tls-stable",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A06-F021",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1189"
|
|
],
|
|
"sourceHeading": "76. P3 — admin gateway의 두 audit 경로 중 하나만 fail-closed다",
|
|
"summary": "admin gateway의 두 audit 경로 중 하나만 fail-closed다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f021",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F022",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1195"
|
|
],
|
|
"sourceHeading": "77. P3 — 태그 allowlist는 규약이지 강제가 아니다",
|
|
"summary": "태그 allowlist는 규약이지 강제가 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f022",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A06-F023",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1281"
|
|
],
|
|
"sourceHeading": "85. P2 — sharding admin gateway의 네 작업 중 셋은 어떤 입력으로도 완료될 수 없다",
|
|
"summary": "sharding admin gateway의 네 작업 중 셋은 어떤 입력으로도 완료될 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f023",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F024",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1305"
|
|
],
|
|
"sourceHeading": "86. P3 — promotion 증거 어휘가 둘이고, gate는 하나만 검사한다",
|
|
"summary": "promotion 증거 어휘가 둘이고, gate는 하나만 검사한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f024",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F025",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1324"
|
|
],
|
|
"sourceHeading": "88. P3 — 구현 없는 4개의 계약 중 셋은 그 사실을 적고, 하나는 적지 않는다",
|
|
"summary": "구현 없는 4개의 계약 중 셋은 그 사실을 적고, 하나는 적지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f025",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A06-F026",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1383"
|
|
],
|
|
"sourceHeading": "94. P2 — 커버리지 gate 둘이 나란히 있고, 하나는 발화할 수 없다",
|
|
"summary": "커버리지 gate 둘이 나란히 있고, 하나는 발화할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f026",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F027",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1410"
|
|
],
|
|
"sourceHeading": "95. P2 — release gate가 실제로 차단하는 것은 hermetic test 3개이고, mongo용 CI workflow는 없다",
|
|
"summary": "release gate가 실제로 차단하는 것은 hermetic test 3개이고, mongo용 CI workflow는 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f027",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A06-F028",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1433"
|
|
],
|
|
"sourceHeading": "96. P3 — 소비자가 없는 fixture 셋",
|
|
"summary": "소비자가 없는 fixture 셋",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a06-f028",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A07-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/07-adapter-outbound-identifier.md#L73"
|
|
],
|
|
"sourceHeading": "3. P2 — 모듈의 존재 논거인 `UuidCodec`에 production 소비자가 없다",
|
|
"summary": "모듈의 존재 논거인 `UuidCodec`에 production 소비자가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a07-f001-uuidcodec",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A07-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/07-adapter-outbound-identifier.md#L89"
|
|
],
|
|
"sourceHeading": "4. P2 — `normalize`는 canonical이 아닌 입력을 받아 다른 UUID로 조용히 바꾼다",
|
|
"summary": "`normalize`는 canonical이 아닌 입력을 받아 다른 UUID로 조용히 바꾼다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a07-f002-normalize",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A07-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/07-adapter-outbound-identifier.md#L113"
|
|
],
|
|
"sourceHeading": "5. P2 — 문서는 UUIDv7이라고 말하고, 생성되는 것은 v4다",
|
|
"summary": "문서는 UUIDv7이라고 말하고, 생성되는 것은 v4다",
|
|
"disposition": "MERGED",
|
|
"target": "case:documented-uuidv7-generates-v4",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A07-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/07-adapter-outbound-identifier.md#L131"
|
|
],
|
|
"sourceHeading": "6. P3 — CLAUDE.md의 의존성 서술이 세 항목 모두 틀렸다",
|
|
"summary": "CLAUDE.md의 의존성 서술이 세 항목 모두 틀렸다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a07-f004-claude",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A07-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/07-adapter-outbound-identifier.md#L150"
|
|
],
|
|
"sourceHeading": "7. P3 — README의 세 가지 사실 오류",
|
|
"summary": "README의 세 가지 사실 오류",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a07-f005",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A07-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/07-adapter-outbound-identifier.md#L160"
|
|
],
|
|
"sourceHeading": "8. P3 — CLAUDE.md가 대는 두 가드 중 하나는 저장소에 없다",
|
|
"summary": "CLAUDE.md가 대는 두 가드 중 하나는 저장소에 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a07-f006-claude",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A08-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L87"
|
|
],
|
|
"sourceHeading": "4. P2 — README가 \"노출된 setting도 bean도 없다\"고 적은 능력들에 production bean이 있다",
|
|
"summary": "README가 \"노출된 setting도 bean도 없다\"고 적은 능력들에 production bean이 있다",
|
|
"disposition": "MERGED",
|
|
"target": "case:readme-said-no-beans-there-are-eight",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A08-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L108"
|
|
],
|
|
"sourceHeading": "5. P3 — R1과 R2의 설정 취급이 비대칭이고, 검증된 쪽은 하나뿐이다",
|
|
"summary": "R1과 R2의 설정 취급이 비대칭이고, 검증된 쪽은 하나뿐이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a08-f002",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A08-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L122"
|
|
],
|
|
"sourceHeading": "6. P3 — 문서가 지목한 기본값 위치와 test 목록이 실제와 다르다",
|
|
"summary": "문서가 지목한 기본값 위치와 test 목록이 실제와 다르다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a08-f003",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A08-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L376"
|
|
],
|
|
"sourceHeading": "32. P3 — 발행 rename만 경로 기반이고, 그것을 지키는 것은 이 모듈이 \"근사에 불과하다\"고 적은 사전검사다",
|
|
"summary": "발행 rename만 경로 기반이고, 그것을 지키는 것은 이 모듈이 \"근사에 불과하다\"고 적은 사전검사다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a08-f004",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A08-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L410"
|
|
],
|
|
"sourceHeading": "34. P3 — `TransferBufferPool.maxBorrowedBytes()`가 자기 회귀 test를 지목하는데 그 test가 읽지 않는다",
|
|
"summary": "`TransferBufferPool.maxBorrowedBytes()`가 자기 회귀 test를 지목하는데 그 test가 읽지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a08-f005-transferbufferpool-maxborrowedbytes",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A08-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L469"
|
|
],
|
|
"sourceHeading": "40. P2 — scriptable 콘텐츠 탐지가 접두사 **시작**에만 고정돼 있어 BOM·NUL·주석으로 우회된다",
|
|
"summary": "scriptable 콘텐츠 탐지가 접두사 **시작**에만 고정돼 있어 BOM·NUL·주석으로 우회된다",
|
|
"disposition": "MERGED",
|
|
"target": "case:scriptable-detection-bypassed-by-a-bom",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A09-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L106"
|
|
],
|
|
"sourceHeading": "5. P3 — production 판정이 두 개의 리터럴 프로파일 이름에 걸려 있다",
|
|
"summary": "production 판정이 두 개의 리터럴 프로파일 이름에 걸려 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a09-f001",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A09-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L432"
|
|
],
|
|
"sourceHeading": "38. P2 — 직접 multipart의 마지막 part는 grant를 받을 수 없다",
|
|
"summary": "직접 multipart의 마지막 part는 grant를 받을 수 없다",
|
|
"disposition": "MERGED",
|
|
"target": "case:the-last-part-cannot-get-a-grant",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A09-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L455"
|
|
],
|
|
"sourceHeading": "39. P2 — 서명된 grant의 endpoint 검증이 upload 경로에만 있다",
|
|
"summary": "서명된 grant의 endpoint 검증이 upload 경로에만 있다",
|
|
"disposition": "MERGED",
|
|
"target": "case:endpoint-check-only-on-upload",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A09-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L485"
|
|
],
|
|
"sourceHeading": "41. P2 — 그러나 R0 경계가 문서에만 있고 compile 경로에서 닫히지 않는다",
|
|
"summary": "그러나 R0 경계가 문서에만 있고 compile 경로에서 닫히지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a09-f004",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A09-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L568"
|
|
],
|
|
"sourceHeading": "49. P2 — APPLY를 켜는 설정은 있고, 승인을 검증하는 bean은 없다",
|
|
"summary": "APPLY를 켜는 설정은 있고, 승인을 검증하는 bean은 없다",
|
|
"disposition": "MERGED",
|
|
"target": "case:apply-is-a-setting-approval-is-not",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A09-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L589"
|
|
],
|
|
"sourceHeading": "50. P3 — nonce replay 경계가 결과를 읽고 버린다",
|
|
"summary": "nonce replay 경계가 결과를 읽고 버린다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a09-f006",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A10-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L121"
|
|
],
|
|
"sourceHeading": "5. P2 — README readiness 표와 build.gradle 주석이 실제 소스와 어긋난다",
|
|
"summary": "README readiness 표와 build.gradle 주석이 실제 소스와 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a10-f001-readme",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A10-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L152"
|
|
],
|
|
"sourceHeading": "6. P2 — startup probe가 production에서 한 번도 실행되지 않는다",
|
|
"summary": "startup probe가 production에서 한 번도 실행되지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-startup-probe-that-never-runs",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A10-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L251"
|
|
],
|
|
"sourceHeading": "15. P2 — SDK가 선언한 두 진입점에 구현이 없다",
|
|
"summary": "SDK가 선언한 두 진입점에 구현이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a10-f003",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A10-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L263"
|
|
],
|
|
"sourceHeading": "16. P3 — Pub/Sub 채널만 렌더 크기 검증을 받지 않는다",
|
|
"summary": "Pub/Sub 채널만 렌더 크기 검증을 받지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a10-f004-pub-sub",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A10-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L277"
|
|
],
|
|
"sourceHeading": "17. P3 — 다중 키 fan-in 중 HyperLogLog `merge`만 budget이 없다",
|
|
"summary": "다중 키 fan-in 중 HyperLogLog `merge`만 budget이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a10-f005-hyperloglog-merge",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A10-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L375"
|
|
],
|
|
"sourceHeading": "26. P3 — `requireIdentifier`의 다섯 검사 중 둘은 도달할 수 없다",
|
|
"summary": "`requireIdentifier`의 다섯 검사 중 둘은 도달할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a10-f006-requireidentifier",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A10-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L485"
|
|
],
|
|
"sourceHeading": "36. P3 — 패턴 구독의 R2 승인만 호출자가 아니라 배포에 대해 이루어진다",
|
|
"summary": "패턴 구독의 R2 승인만 호출자가 아니라 배포에 대해 이루어진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a10-f007",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A10-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L502"
|
|
],
|
|
"sourceHeading": "37. P3 — permit 정책 이름이 세 곳에 문자열로 존재하고 교차 검사가 없다",
|
|
"summary": "permit 정책 이름이 세 곳에 문자열로 존재하고 교차 검사가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a10-f008",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A10-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L615"
|
|
],
|
|
"sourceHeading": "47. P2 — \"build gate\"라고 불리는 catalog drift 검사가 어디에서도 실행되지 않는다",
|
|
"summary": "\"build gate\"라고 불리는 catalog drift 검사가 어디에서도 실행되지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-build-gate-that-is-not-in-the-build",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A10-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L713"
|
|
],
|
|
"sourceHeading": "56. P3 — NOSCRIPT 복구가 다섯 벌로 구현돼 있고 넷은 스크립트 레지스트리를 지나지 않는다",
|
|
"summary": "NOSCRIPT 복구가 다섯 벌로 구현돼 있고 넷은 스크립트 레지스트리를 지나지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:five-copies-of-noscript-recovery",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A10-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L811"
|
|
],
|
|
"sourceHeading": "64. P2 — 의미 어댑터 다섯이 `CommandPolicyGuard`를 지나지 않는다",
|
|
"summary": "의미 어댑터 다섯이 `CommandPolicyGuard`를 지나지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:five-adapters-bypass-the-single-admission-point",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A11-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L121"
|
|
],
|
|
"sourceHeading": "4. P3 — `close()`가 실패하면 drain 스케줄러 스레드가 남는다",
|
|
"summary": "`close()`가 실패하면 drain 스케줄러 스레드가 남는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a11-f001-close",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A11-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L146"
|
|
],
|
|
"sourceHeading": "5. P3 — `POOL_ROUTE_EXCEEDS_TOTAL` 위반 코드는 발화할 수 없다",
|
|
"summary": "`POOL_ROUTE_EXCEEDS_TOTAL` 위반 코드는 발화할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a11-f002-pool-route-exceeds-total",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A11-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L164"
|
|
],
|
|
"sourceHeading": "6. P3 — 위반 코드 34종 중 22종이 어떤 test에서도 이름으로 확인되지 않는다",
|
|
"summary": "위반 코드 34종 중 22종이 어떤 test에서도 이름으로 확인되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a11-f003",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A11-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L249"
|
|
],
|
|
"sourceHeading": "14. P3 — `Number`가 허용 목록에 있어 가변 숫자 타입이 REPLAYABLE로 인증된다",
|
|
"summary": "`Number`가 허용 목록에 있어 가변 숫자 타입이 REPLAYABLE로 인증된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a11-f004-number",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A11-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L336"
|
|
],
|
|
"sourceHeading": "22. P2 — 로컬 거부 경로에서 회로 브레이커 permission이 반환되지 않는다",
|
|
"summary": "로컬 거부 경로에서 회로 브레이커 permission이 반환되지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-circuit-breaker-permit-that-leaks-on-local-rejection",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A11-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L424"
|
|
],
|
|
"sourceHeading": "30. P3 — `BoundedDataBufferFlux`의 두 연산자가 이름만 있고 아무것도 하지 않는다",
|
|
"summary": "`BoundedDataBufferFlux`의 두 연산자가 이름만 있고 아무것도 하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a11-f006-boundeddatabufferflux",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A11-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L583"
|
|
],
|
|
"sourceHeading": "47. P3 — 동적 대상 DNS 핀 능력 검사가 블로킹 오버로드에만 있다",
|
|
"summary": "동적 대상 DNS 핀 능력 검사가 블로킹 오버로드에만 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a11-f007-dns",
|
|
"reason": null,
|
|
"topic": "transport-and-provider-semantics"
|
|
},
|
|
{
|
|
"id": "A11-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L627"
|
|
],
|
|
"sourceHeading": "51. 교정 — 영구 TLS 실패의 `CONNECT` 분류는 분류기 결함이 아니라 픽스처의 듀얼스택 호스트명이다",
|
|
"summary": "영구 TLS 실패의 CONNECT 분류는 제품 결함이 아니라 픽스처의 듀얼스택 호스트명이다 (사이클 1의 P1 판정 철회, EVD-332)",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-red-test-misread-as-a-product-defect",
|
|
"reason": "사이클 2에서 판정 철회. root-tree 노드도 함께 교체되었다."
|
|
},
|
|
{
|
|
"id": "A12-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/12-adapter-outbound-messaging.md#L82"
|
|
],
|
|
"sourceHeading": "3. P2 — `check`에 붙은 `verifyJsonSchemaRuntimeGraph`가 실행되면 실패한다",
|
|
"summary": "`check`에 붙은 `verifyJsonSchemaRuntimeGraph`가 실행되면 실패한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a12-f001-check-verifyjsonschemaruntimegraph",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts"
|
|
},
|
|
{
|
|
"id": "A12-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/12-adapter-outbound-messaging.md#L118"
|
|
],
|
|
"sourceHeading": "4. P3 — README의 `jackson-databind` 부재 주장이 현재 상태와 어긋난다",
|
|
"summary": "README의 `jackson-databind` 부재 주장이 현재 상태와 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a12-f002-jackson-databind",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A13-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L176"
|
|
],
|
|
"sourceHeading": "P2 — `SINGLE` 전용 가드가 먼저 던져 다중 타깃 검증 전체가 도달 불가이고, 그것을 검증한다는 테스트는 다른 가드에 걸려 통과한다",
|
|
"summary": "`SINGLE` 전용 가드가 먼저 던져 다중 타깃 검증 전체가 도달 불가이고, 그것을 검증한다는 테스트는 다른 가드에 걸려 통과한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-test-that-passed-on-the-wrong-guard",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A13-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L320"
|
|
],
|
|
"sourceHeading": "P2 — `AUTHENTICATION_FAILED`를 지우지 않는다는 `resumeHealthy`의 보장이, 관리자 평면에 노출된 2단계 시퀀스로 우회된다",
|
|
"summary": "`AUTHENTICATION_FAILED`를 지우지 않는다는 `resumeHealthy`의 보장이, 관리자 평면에 노출된 2단계 시퀀스로 우회된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a13-f002-authentication-failed-resumehealthy",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A13-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L430"
|
|
],
|
|
"sourceHeading": "17.1 P2 — \"모든 reveal은 감사된다\"고 선언한 `AccessContext`를 읽는 코드가 저장소에 하나도 없다",
|
|
"summary": "\"모든 reveal은 감사된다\"고 선언한 `AccessContext`를 읽는 코드가 저장소에 하나도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a13-f003-accesscontext",
|
|
"reason": null,
|
|
"topic": "security-policy-enforcement"
|
|
},
|
|
{
|
|
"id": "A13-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L476"
|
|
],
|
|
"sourceHeading": "17.2 P2 — Thymeleaf 예외 메시지 삭제 가드가 프로덕션이 타지 않는 오버로드에만 있다",
|
|
"summary": "Thymeleaf 예외 메시지 삭제 가드가 프로덕션이 타지 않는 오버로드에만 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a13-f004-thymeleaf",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A13-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L636"
|
|
],
|
|
"sourceHeading": "21.1 P3 — 음수 `Retry-After` 헤더가 throttle 결과 대신 `IllegalArgumentException`을 만든다",
|
|
"summary": "음수 `Retry-After` 헤더가 throttle 결과 대신 `IllegalArgumentException`을 만든다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a13-f005-retry-after-illegalargumentexception",
|
|
"reason": null,
|
|
"topic": "schema-and-data-contracts"
|
|
},
|
|
{
|
|
"id": "A13-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L741"
|
|
],
|
|
"sourceHeading": "25.1 P2 — 클라이언트가 제공하는 Web Push 엔드포인트가 SSRF 가드를 지나지 않는다 (모듈 내 최고 영향도)",
|
|
"summary": "클라이언트가 제공하는 Web Push 엔드포인트가 SSRF 가드를 지나지 않는다 (모듈 내 최고 영향도)",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-weaker-private-copy-on-the-wired-path",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A13-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L795"
|
|
],
|
|
"sourceHeading": "25.2 P2 — \"상한을 두고 읽는다\"는 본문 핸들러가 전부 읽은 뒤에 자른다",
|
|
"summary": "\"상한을 두고 읽는다\"는 본문 핸들러가 전부 읽은 뒤에 자른다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a13-f007",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A13-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L831"
|
|
],
|
|
"sourceHeading": "25.3 P3 — SigV4가 서명한 `host`에 포트가 없어, 기본 포트가 아닌 엔드포인트에서 서명이 어긋난다",
|
|
"summary": "SigV4가 서명한 `host`에 포트가 없어, 기본 포트가 아닌 엔드포인트에서 서명이 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a13-f008-host",
|
|
"reason": null,
|
|
"topic": "transport-and-provider-semantics"
|
|
},
|
|
{
|
|
"id": "A13-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L844"
|
|
],
|
|
"sourceHeading": "25.4 P3 — SigV4 서명 키 파생이 비밀을 지울 수 없는 `String`으로 승격시킨다",
|
|
"summary": "SigV4 서명 키 파생이 비밀을 지울 수 없는 `String`으로 승격시킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a13-f009-sigv4-string",
|
|
"reason": null,
|
|
"topic": "transport-and-provider-semantics"
|
|
},
|
|
{
|
|
"id": "A13-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L957"
|
|
],
|
|
"sourceHeading": "29.1 P2 — FCM만 \"커밋 후 응답 손실 = ambiguous\" 규칙 밖에 있고, 그 FCM이 두 계약 집합 어디에도 없다",
|
|
"summary": "FCM만 \"커밋 후 응답 손실 = ambiguous\" 규칙 밖에 있고, 그 FCM이 두 계약 집합 어디에도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a13-f010",
|
|
"reason": null,
|
|
"topic": "transport-and-provider-semantics"
|
|
},
|
|
{
|
|
"id": "A13-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L990"
|
|
],
|
|
"sourceHeading": "29.2 P3 — 공유 provider 계약이 8종 중 3종에서만 상속되고, 강제 장치가 없다",
|
|
"summary": "공유 provider 계약이 8종 중 3종에서만 상속되고, 강제 장치가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a13-f011",
|
|
"reason": null,
|
|
"topic": "transport-and-provider-semantics"
|
|
},
|
|
{
|
|
"id": "A14-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L305"
|
|
],
|
|
"sourceHeading": "8.1 P1 — RFC 9457 계약 23개 파일이 출하 애플리케이션에 등록되지 않는다. 두 플랫폼 자동설정은 협력자 빈만 소유하고, 스캔에서 제외된 여섯 컴포넌트는 소유하지 않는다",
|
|
"summary": "RFC 9457 계약 23개 파일이 출하 애플리케이션에 등록되지 않는다. 두 플랫폼 자동설정은 협력자 빈만 소유하고, 스캔에서 제외된 여섯 컴포넌트는 소유하지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:scan-exclusion-without-an-owner",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A14-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L380"
|
|
],
|
|
"sourceHeading": "8.2 P3 — `WebProblemSanitizer.alreadySafe`가 죽은 메서드이고 그 안의 조건도 죽어 있다",
|
|
"summary": "`WebProblemSanitizer.alreadySafe`가 죽은 메서드이고 그 안의 조건도 죽어 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f002-webproblemsanitizer-alreadysafe",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A14-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L503"
|
|
],
|
|
"sourceHeading": "12.1 P1 — 플랫폼 요청 컨텍스트가 서블릿에는 생산자가 없고, 리액티브에는 익명 액터로 고정되어 있다",
|
|
"summary": "플랫폼 요청 컨텍스트가 서블릿에는 생산자가 없고, 리액티브에는 익명 액터로 고정되어 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f003",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A14-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L562"
|
|
],
|
|
"sourceHeading": "12.2 P2 — 프레임워크 자유 신원 모델과 교차 테넌트 가드가 프로덕션에서 한 번도 참조되지 않는다",
|
|
"summary": "프레임워크 자유 신원 모델과 교차 테넌트 가드가 프로덕션에서 한 번도 참조되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f004",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A14-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L582"
|
|
],
|
|
"sourceHeading": "12.3 P3 — `publicPaths`가 `RestrictedPathRule`보다 먼저 등록되어, 넓은 공개 경로 하나가 관리 평면 규칙을 조용히 덮는다",
|
|
"summary": "`publicPaths`가 `RestrictedPathRule`보다 먼저 등록되어, 넓은 공개 경로 하나가 관리 평면 규칙을 조용히 덮는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f005-publicpaths-restrictedpathrule",
|
|
"reason": null,
|
|
"topic": "security-policy-enforcement"
|
|
},
|
|
{
|
|
"id": "A14-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L677"
|
|
],
|
|
"sourceHeading": "16.1 P1 — 용량 보호 계층 전체(41 main files)가 자기 테스트 픽스처 안에서만 실행된다",
|
|
"summary": "용량 보호 계층 전체(41 main files)가 자기 테스트 픽스처 안에서만 실행된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f006",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A14-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L701"
|
|
],
|
|
"sourceHeading": "16.2 P2 — 리액티브 전송에는 속도 제한 경로가 하나도 없다",
|
|
"summary": "리액티브 전송에는 속도 제한 경로가 하나도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f007",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A14-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L793"
|
|
],
|
|
"sourceHeading": "20.1 P1 — 멱등 실행 계층과 durable-operation 표면이 픽스처에서만 조립된다",
|
|
"summary": "멱등 실행 계층과 durable-operation 표면이 픽스처에서만 조립된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f008",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A14-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L807"
|
|
],
|
|
"sourceHeading": "20.3 P3 — 의미 지문이 길이 프레이밍 없이 구분자로 만들어진다",
|
|
"summary": "의미 지문이 길이 프레이밍 없이 구분자로 만들어진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f009",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A14-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L899"
|
|
],
|
|
"sourceHeading": "24.1 P2 — 배선된 캐시 필터의 `no-store`가 배선된 조건부 읽기 경로를 무력화하고, 둘을 조정하려고 만든 패키지는 참조 0이다",
|
|
"summary": "배선된 캐시 필터의 `no-store`가 배선된 조건부 읽기 경로를 무력화하고, 둘을 조정하려고 만든 패키지는 참조 0이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f010-no-store",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A14-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1006"
|
|
],
|
|
"sourceHeading": "28.1 P2 — `maxArrayElements`가 선언만 되고 강제되지 않으며, 바이트 예산 백스톱도 없다",
|
|
"summary": "`maxArrayElements`가 선언만 되고 강제되지 않으며, 바이트 예산 백스톱도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f011-maxarrayelements",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A14-F012",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1137"
|
|
],
|
|
"sourceHeading": "32.1 P2 — 요청 식별자를 클라이언트가 고를 수 없다는 정책이, 뒤에 도는 다른 배선 필터에 의해 뒤집힌다",
|
|
"summary": "요청 식별자를 클라이언트가 고를 수 없다는 정책이, 뒤에 도는 다른 배선 필터에 의해 뒤집힌다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-policy-reversed-by-a-later-filter",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A14-F013",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1153"
|
|
],
|
|
"sourceHeading": "32.2 P2 — forwarded 헤더 신뢰 판정이 Nginx 설정에만 있고, 그것을 위해 쓴 Java 정책 421 LOC은 배선되지 않는다",
|
|
"summary": "forwarded 헤더 신뢰 판정이 Nginx 설정에만 있고, 그것을 위해 쓴 Java 정책 421 LOC은 배선되지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:trust-policy-lives-in-nginx-not-in-the-code",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A14-F014",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1267"
|
|
],
|
|
"sourceHeading": "36.1 P2 — 선언된 Advanced 능력 11개 중 9개는 켜는 방법이 없다",
|
|
"summary": "선언된 Advanced 능력 11개 중 9개는 켜는 방법이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f014-advanced",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A14-F015",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1279"
|
|
],
|
|
"sourceHeading": "36.2 P3 — `VirtualThreadProfile.propertyName()`이 아무것도 게이트하지 않는 이름을 반환한다",
|
|
"summary": "`VirtualThreadProfile.propertyName()`이 아무것도 게이트하지 않는 이름을 반환한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f015-virtualthreadprofile-propertyname",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A14-F016",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1378"
|
|
],
|
|
"sourceHeading": "40.1 P1 — 이 leaf의 리액티브 절반 29개 파일은 어떤 출하 배포에서도 활성화될 수 없다",
|
|
"summary": "이 leaf의 리액티브 절반 29개 파일은 어떤 출하 배포에서도 활성화될 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f016",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A14-F017",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1494"
|
|
],
|
|
"sourceHeading": "44.1 P3 — `SpringMvcRouteInventoryCollector` 138줄에 참조가 하나도 없다",
|
|
"summary": "`SpringMvcRouteInventoryCollector` 138줄에 참조가 하나도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f017-springmvcrouteinventorycollector",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A14-F018",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1500"
|
|
],
|
|
"sourceHeading": "44.2 P3 — `WebPlatformStartupValidator`가 시작 시 실행되지 않는다",
|
|
"summary": "`WebPlatformStartupValidator`가 시작 시 실행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a14-f018-webplatformstartupvalidator",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A14-F019",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1575"
|
|
],
|
|
"sourceHeading": "48.1 P1 — 크로스 스택 게이트가 검증하는 조립은 픽스처의 조립이고, 플랫폼의 조립이 아니다",
|
|
"summary": "크로스 스택 게이트가 검증하는 조립은 픽스처의 조립이고, 플랫폼의 조립이 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a14-f019",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A15-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/15-adapter-inbound-grpc.md#L171"
|
|
],
|
|
"sourceHeading": "4.1 P2 — 원인 사슬 순회가 2-순환에서 무한 루프에 빠지고, 저장소는 이미 그 사례를 이름으로 적어 두었다",
|
|
"summary": "원인 사슬 순회가 2-순환에서 무한 루프에 빠지고, 저장소는 이미 그 사례를 이름으로 적어 두었다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a15-f001",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A15-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/15-adapter-inbound-grpc.md#L187"
|
|
],
|
|
"sourceHeading": "4.2 P3 — 설정 바인딩이 마스터 스위치 밖에서 일어난다. 컴포지션 루트의 자기 규칙과 어긋난다",
|
|
"summary": "설정 바인딩이 마스터 스위치 밖에서 일어난다. 컴포지션 루트의 자기 규칙과 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a15-f002",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A16-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L258"
|
|
],
|
|
"sourceHeading": "8.1 P2 — 스키마 조립·계약 정체성·해시 사슬이 통째로 미배선이고, 그것을 발행할 액추에이터 엔드포인트도 등록되지 않는다",
|
|
"summary": "스키마 조립·계약 정체성·해시 사슬이 통째로 미배선이고, 그것을 발행할 액추에이터 엔드포인트도 등록되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f001",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A16-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L281"
|
|
],
|
|
"sourceHeading": "8.2 P3 — `@oneOf` 게이트와 런타임 검증기가 미배선이고, \"플랫폼이 강제한다\"는 서술이 그것을 넘어선다",
|
|
"summary": "`@oneOf` 게이트와 런타임 검증기가 미배선이고, \"플랫폼이 강제한다\"는 서술이 그것을 넘어선다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a16-f002-oneof",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A16-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L382"
|
|
],
|
|
"sourceHeading": "12.1 P2 — 5계층 예산 모델에서 요청 계층만 강제되고, 나머지 파생이 전부 미배선이다",
|
|
"summary": "5계층 예산 모델에서 요청 계층만 강제되고, 나머지 파생이 전부 미배선이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f003",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A16-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L403"
|
|
],
|
|
"sourceHeading": "12.2 P3 — 연산 이름 정책의 두 구현 중 하나만 배선되고, 미배선 쪽만 `GraphQlOperationNamePolicy`를 쓴다",
|
|
"summary": "연산 이름 정책의 두 구현 중 하나만 배선되고, 미배선 쪽만 `GraphQlOperationNamePolicy`를 쓴다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a16-f004-graphqloperationnamepolicy",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A16-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L511"
|
|
],
|
|
"sourceHeading": "16.1 P2 — 설정으로 정한 파서 한계가 graphql-java에 설치되지 않는다",
|
|
"summary": "설정으로 정한 파서 한계가 graphql-java에 설치되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f005",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A16-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L525"
|
|
],
|
|
"sourceHeading": "16.2 P2 — 프로파일별 정책 매니페스트가 미배선이라, 자격에서 해석된 프로파일이 아무 예산도 선택하지 않는다",
|
|
"summary": "프로파일별 정책 매니페스트가 미배선이라, 자격에서 해석된 프로파일이 아무 예산도 선택하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f006",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A16-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L618"
|
|
],
|
|
"sourceHeading": "20.1 P2 — `http/`가 등급표에서 `wired`로 선언돼 있으나 그 등급의 정의를 만족하지 않는다",
|
|
"summary": "`http/`가 등급표에서 `wired`로 선언돼 있으나 그 등급의 정의를 만족하지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:seven-rows-downgraded-by-the-family-itself",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A16-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L680"
|
|
],
|
|
"sourceHeading": "20.2 P3 — 파싱·검증 실패에 플랫폼 매퍼가 없다",
|
|
"summary": "파싱·검증 실패에 플랫폼 매퍼가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f008",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A16-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L766"
|
|
],
|
|
"sourceHeading": "24.1 P2 — 시작 검증기가 제공되지 않는 보안 성질을 요구한다",
|
|
"summary": "시작 검증기가 제공되지 않는 보안 성질을 요구한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-startup-validator-that-requires-a-key-nothing-signs-with",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A16-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L885"
|
|
],
|
|
"sourceHeading": "29.1 P2 — `http/` 행이 등급표의 자기 규칙을 어긴다 (§20.1 참조)",
|
|
"summary": "`http/` 행이 등급표의 자기 규칙을 어긴다 (§20.1 참조)",
|
|
"disposition": "MERGED",
|
|
"target": "case:seven-rows-downgraded-by-the-family-itself",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A16-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L889"
|
|
],
|
|
"sourceHeading": "29.2 P3 — 기계가 읽는 능력 매니페스트와 사람이 읽는 등급표가 커서 서명에 대해 다르게 답한다",
|
|
"summary": "기계가 읽는 능력 매니페스트와 사람이 읽는 등급표가 커서 서명에 대해 다르게 답한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f011",
|
|
"reason": null,
|
|
"topic": "contract-domain-and-bounds"
|
|
},
|
|
{
|
|
"id": "A16-F012",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L1002"
|
|
],
|
|
"sourceHeading": "39.1 P3 — \"기본 비활성\"은 존재하지 않는 스위치의 기본값을 서술한다",
|
|
"summary": "\"기본 비활성\"은 존재하지 않는 스위치의 기본값을 서술한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a16-f012",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A17-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L133"
|
|
],
|
|
"sourceHeading": "4.1 P2 — `backend.websocket` 플랫폼(약 90개 main 파일)에 조립 지점이 없고, 모듈 SSOT 문서에 존재하지 않는다",
|
|
"summary": "`backend.websocket` 플랫폼(약 90개 main 파일)에 조립 지점이 없고, 모듈 SSOT 문서에 존재하지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:build-only-exempts-ninety-files-from-todays-incident",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A17-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L273"
|
|
],
|
|
"sourceHeading": "13.1 P2 — 연결 티켓·origin 정책·메시지 권한·연결 예산이 요청 경로 밖이고, 그중 일부는 STOMP 어댑터가 다른 방식으로 대체한다",
|
|
"summary": "연결 티켓·origin 정책·메시지 권한·연결 예산이 요청 경로 밖이고, 그중 일부는 STOMP 어댑터가 다른 방식으로 대체한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a17-f002-stomp",
|
|
"reason": null,
|
|
"topic": "security-policy-enforcement"
|
|
},
|
|
{
|
|
"id": "A17-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L426"
|
|
],
|
|
"sourceHeading": "22.1 P3 — 능력 프로퍼티 이름을 만드는 코드와 실제 게이트가 다른 접두사를 쓴다",
|
|
"summary": "능력 프로퍼티 이름을 만드는 코드와 실제 게이트가 다른 접두사를 쓴다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a17-f003",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A18-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L214"
|
|
],
|
|
"sourceHeading": "4.1b P3 — 출하되는 web 어댑터의 스위치가 활성화 모델 밖에 있다",
|
|
"summary": "출하되는 web 어댑터의 스위치가 활성화 모델 밖에 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a18-f001",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A18-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L549"
|
|
],
|
|
"sourceHeading": "26.1 P3 — 실패는 환경 원인이며, 그 테스트의 도구 가드가 불완전하다",
|
|
"summary": "실패는 환경 원인이며, 그 테스트의 도구 가드가 불완전하다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a18-f002",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A19-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L231"
|
|
],
|
|
"sourceHeading": "3.4 P2 — capability 12개 중 main 코드가 읽는 것은 3개, 거부하는 것은 1개",
|
|
"summary": "capability 12개 중 main 코드가 읽는 것은 3개, 거부하는 것은 1개",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f001",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A19-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L288"
|
|
],
|
|
"sourceHeading": "3.5 P2 — 8개 profile validator 중 조립에서 실행되는 것은 3개",
|
|
"summary": "8개 profile validator 중 조립에서 실행되는 것은 3개",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f002",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A19-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L325"
|
|
],
|
|
"sourceHeading": "3.6 P3 — `messaging-reliability-api`는 main 13파일 · 817 LOC에 테스트가 0개다",
|
|
"summary": "`messaging-reliability-api`는 main 13파일 · 817 LOC에 테스트가 0개다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f003-messaging-reliability-api",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A19-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L390"
|
|
],
|
|
"sourceHeading": "4.3 P2 — 스키마 호환성 검증기는 출하 leaf에 있고, main 코드에서 호출되지 않는다",
|
|
"summary": "스키마 호환성 검증기는 출하 leaf에 있고, main 코드에서 호출되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f004",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A19-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L415"
|
|
],
|
|
"sourceHeading": "4.4 P2 — 호환성 게이트를 가진 두 포맷은 build-only이고, 출하되는 유일한 코덱에는 게이트가 없다",
|
|
"summary": "호환성 게이트를 가진 두 포맷은 build-only이고, 출하되는 유일한 코덱에는 게이트가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f005",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A19-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L431"
|
|
],
|
|
"sourceHeading": "4.5 P2 — `messaging-cloudevents`는 출하 leaf이고 starter의 의존이며 소비자가 없다",
|
|
"summary": "`messaging-cloudevents`는 출하 leaf이고 starter의 의존이며 소비자가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f006-messaging-cloudevents",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A19-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L456"
|
|
],
|
|
"sourceHeading": "5.1 P2 — 출하되는 publish 경로는 관측을 하나도 기록하지 않는다",
|
|
"summary": "출하되는 publish 경로는 관측을 하나도 기록하지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:observation-downgraded-by-the-composition",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L495"
|
|
],
|
|
"sourceHeading": "5.2 P2 — 브로커 ACL 매니페스트의 자기 점검이 존재하지 않는다",
|
|
"summary": "브로커 ACL 매니페스트의 자기 점검이 존재하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f008-acl",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A19-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L511"
|
|
],
|
|
"sourceHeading": "5.3 P3 — 접근 검사가 두 갈래로 존재하고, 조립된 쪽이 진단이 약한 쪽이다 (§8.3)",
|
|
"summary": "접근 검사가 두 갈래로 존재하고, 조립된 쪽이 진단이 약한 쪽이다 (§8.3)",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f009",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A19-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L543"
|
|
],
|
|
"sourceHeading": "5.4 P3 — 자격 증명 회전 개념이 두 번 표현되고, 하나만 살아 있다 (§8.3)",
|
|
"summary": "자격 증명 회전 개념이 두 번 표현되고, 하나만 살아 있다 (§8.3)",
|
|
"disposition": "MERGED",
|
|
"target": "case:the-same-rotation-defect-closed-once-and-reproduced",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L609"
|
|
],
|
|
"sourceHeading": "6.2 P2 — `messaging-rabbit`은 출하되지만 선택할 수 없고, 운영 문서는 그것을 말하지 않는다",
|
|
"summary": "`messaging-rabbit`은 출하되지만 선택할 수 없고, 운영 문서는 그것을 말하지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:an-unselectable-broker-listed-with-features",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F012",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L639"
|
|
],
|
|
"sourceHeading": "6.3 P1 — 지원 매트릭스가 Kafka의 `deduplicatedPublish`를 `O`로 적고, 코드는 `false`이며, 그 차이가 정확히 코드가 경고한 피해다",
|
|
"summary": "지원 매트릭스가 Kafka의 `deduplicatedPublish`를 `O`로 적고, 코드는 `false`이며, 그 차이가 정확히 코드가 경고한 피해다",
|
|
"disposition": "MERGED",
|
|
"target": "case:support-matrix-said-the-opposite-of-the-code",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F013",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L682"
|
|
],
|
|
"sourceHeading": "6.4 P2 — 지원 매트릭스가 \"모든 messaging leaf는 build-only\"라고 적고, 가족 권위 문서는 그 문장이 틀렸다고 이미 기록했다",
|
|
"summary": "지원 매트릭스가 \"모든 messaging leaf는 build-only\"라고 적고, 가족 권위 문서는 그 문장이 틀렸다고 이미 기록했다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f013",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A19-F014",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L698"
|
|
],
|
|
"sourceHeading": "6.5 P2 — 한 아티팩트 안의 서로 모르는 Kafka 스택 두 개 (MSG-015, 가족 문서가 미해결로 표시)",
|
|
"summary": "한 아티팩트 안의 서로 모르는 Kafka 스택 두 개 (MSG-015, 가족 문서가 미해결로 표시)",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f014-kafka-msg",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A19-F015",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L757"
|
|
],
|
|
"sourceHeading": "6.7 P3 — `CompatibilityMatrix`에 `EXTENSION` 등급이 있고 항목이 없으며, bridge leaf가 표 밖에 있다",
|
|
"summary": "`CompatibilityMatrix`에 `EXTENSION` 등급이 있고 항목이 없으며, bridge leaf가 표 밖에 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f015-compatibilitymatrix-extension",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A19-F016",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L811"
|
|
],
|
|
"sourceHeading": "7.1 P2 — outbox/inbox 체인 전체가 만족되지 않는 `@ConditionalOnBean` 뒤에 있다",
|
|
"summary": "outbox/inbox 체인 전체가 만족되지 않는 `@ConditionalOnBean` 뒤에 있다",
|
|
"disposition": "MERGED",
|
|
"target": "case:outbox-chain-behind-an-unsatisfiable-condition",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F017",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L845"
|
|
],
|
|
"sourceHeading": "7.2 P2 — messaging 마이그레이션 스트림을 적용하는 곳이 없고, 적용하려는 순간 버전이 충돌한다",
|
|
"summary": "messaging 마이그레이션 스트림을 적용하는 곳이 없고, 적용하려는 순간 버전이 충돌한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:messaging-migrations-collide-at-v2",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F018",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L911"
|
|
],
|
|
"sourceHeading": "7.4 P3 — claim-check는 starter에 배선 코드가 한 줄도 없다",
|
|
"summary": "claim-check는 starter에 배선 코드가 한 줄도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f018",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A19-F019",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L960"
|
|
],
|
|
"sourceHeading": "8.2 P2 — admin 스위치가 가드를 켜고 서비스는 켜지 않는다",
|
|
"summary": "admin 스위치가 가드를 켜고 서비스는 켜지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a19-f019",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A19-F020",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L982"
|
|
],
|
|
"sourceHeading": "8.3 P3 — `messaging-admin-api`는 main 25파일 · 1,613 LOC에 테스트 파일이 1개다",
|
|
"summary": "`messaging-admin-api`는 main 25파일 · 1,613 LOC에 테스트 파일이 1개다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f020-messaging-admin-api",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A19-F021",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L1049"
|
|
],
|
|
"sourceHeading": "9.3 P2 — 문서 계약 테스트가 존재하고, 그 커버리지 경계가 §6.3·§6.4의 드리프트 위치를 정확히 예측한다",
|
|
"summary": "문서 계약 테스트가 존재하고, 그 커버리지 경계가 §6.3·§6.4의 드리프트 위치를 정확히 예측한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:doc-contract-test-boundary-predicted-the-drift",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A19-F022",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L1099"
|
|
],
|
|
"sourceHeading": "9.5 P3 — `MessagingPublicSurfaceContractTest`가 가족 밖(app-bootstrap)에 있다",
|
|
"summary": "`MessagingPublicSurfaceContractTest`가 가족 밖(app-bootstrap)에 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a19-f022-messagingpublicsurfacecontracttest",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "A20-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L173"
|
|
],
|
|
"sourceHeading": "3.1 P2 — `GrpcPlatformStartupValidator`가 조립에서 호출되지 않는다",
|
|
"summary": "`GrpcPlatformStartupValidator`가 조립에서 호출되지 않는다",
|
|
"disposition": "MERGED",
|
|
"target": "case:thirteen-startup-rules-never-run",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A20-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L219"
|
|
],
|
|
"sourceHeading": "3.2 P2 — 릴리스 게이트가 스스로 증거를 읽지 않는다. messaging이 이미 고친 모양을 되풀이한다",
|
|
"summary": "릴리스 게이트가 스스로 증거를 읽지 않는다. messaging이 이미 고친 모양을 되풀이한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:a-release-gate-with-no-evidence-producer",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A20-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L260"
|
|
],
|
|
"sourceHeading": "3.3 P2 — 증거 등급 모델 전체가 자동 실행 경로 밖에 있고, CLAUDE.md는 현재 시제로 서술한다",
|
|
"summary": "증거 등급 모델 전체가 자동 실행 경로 밖에 있고, CLAUDE.md는 현재 시제로 서술한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a20-f003-claude",
|
|
"reason": null,
|
|
"topic": "declaration-and-document-drift"
|
|
},
|
|
{
|
|
"id": "A20-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L298"
|
|
],
|
|
"sourceHeading": "3.4 P2 — 조립 경계가 정책 객체 9개를 만들고 서버를 만들지 않는다",
|
|
"summary": "조립 경계가 정책 객체 9개를 만들고 서버를 만들지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a20-f004",
|
|
"reason": null,
|
|
"topic": "runtime-reachability-and-composition"
|
|
},
|
|
{
|
|
"id": "A20-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L321"
|
|
],
|
|
"sourceHeading": "3.5 P3 — 저장소 어디에도 참조가 없는 타입 3개",
|
|
"summary": "저장소 어디에도 참조가 없는 타입 3개",
|
|
"disposition": "EMITTED",
|
|
"target": "case:analysis-finding-a20-f005",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A20-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L518"
|
|
],
|
|
"sourceHeading": "7.1 P2 — `GrpcAdmissionController.tryAdmit()`의 동시성 경계가 동시성 아래에서 성립하지 않는다",
|
|
"summary": "`GrpcAdmissionController.tryAdmit()`의 동시성 경계가 동시성 아래에서 성립하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a20-f006-grpcadmissioncontroller-tryadmit",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A20-F007",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L572"
|
|
],
|
|
"sourceHeading": "7.2 P2 — `GrpcStreamAdmission`도 같은 형태이고, per-caller 맵이 줄지 않는다",
|
|
"summary": "`GrpcStreamAdmission`도 같은 형태이고, per-caller 맵이 줄지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a20-f007-grpcstreamadmission",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A20-F008",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L595"
|
|
],
|
|
"sourceHeading": "7.3 P2 — `GrpcSerializedStreamWriter`의 `DROP_OLDEST`가 잘못된 메시지의 바이트를 뺀다",
|
|
"summary": "`GrpcSerializedStreamWriter`의 `DROP_OLDEST`가 잘못된 메시지의 바이트를 뺀다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a20-f008-grpcserializedstreamwriter-drop-oldest",
|
|
"reason": null,
|
|
"topic": "runtime-contract-correctness"
|
|
},
|
|
{
|
|
"id": "A20-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L634"
|
|
],
|
|
"sourceHeading": "7.4 P2 — `GrpcCredentialRotationManager`가 CAS 없이 read-then-write 한다. messaging이 고친 결함의 재현이다",
|
|
"summary": "`GrpcCredentialRotationManager`가 CAS 없이 read-then-write 한다. messaging이 고친 결함의 재현이다",
|
|
"disposition": "MERGED",
|
|
"target": "case:the-same-rotation-defect-closed-once-and-reproduced",
|
|
"reason": "기존 Root Tree Case가 이 finding의 동일 사건과 검증 단위를 명시적으로 포함한다. 관련 Topic/Reference가 아니라 사건 자체가 같은 경우에만 병합했다."
|
|
},
|
|
{
|
|
"id": "A20-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L664"
|
|
],
|
|
"sourceHeading": "7.5 P2 — `GrpcOutcomeReplay`가 제거 경로 없는 인메모리 저장소다",
|
|
"summary": "`GrpcOutcomeReplay`가 제거 경로 없는 인메모리 저장소다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a20-f010-grpcoutcomereplay",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "A20-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/20-grpc-platform.md#L678"
|
|
],
|
|
"sourceHeading": "7.6 P2 — `GrpcCompletionReconciler`가 요청 경로에서 동기화 없는 `ArrayList`를 변경한다",
|
|
"summary": "`GrpcCompletionReconciler`가 요청 경로에서 동기화 없는 `ArrayList`를 변경한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a20-f011-grpccompletionreconciler-arraylist",
|
|
"reason": null,
|
|
"topic": "state-ownership-and-concurrency"
|
|
},
|
|
{
|
|
"id": "BASE-case-a-catalog-nine-entries-short",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §1"
|
|
],
|
|
"summary": "패키지 카탈로그가 트리보다 아홉 개 적어서 사이클이 통과했다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-catalog-nine-entries-short",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-certifying-lane-that-compared-nothing",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-6` · `analysis/05` §15.3"
|
|
],
|
|
"summary": "\"certified\"라 불리던 레인이 threshold를 하나도 비교하지 않고 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-certifying-lane-that-compared-nothing",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-cleanup-claim-without-fencing",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/08` §V3"
|
|
],
|
|
"summary": "claim이 소유자·토큰·만료를 기록하지 않아 죽은 worker의 항목이 영영 남았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-cleanup-claim-without-fencing",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-customizer-that-discarded-the-bound-property",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §7.7"
|
|
],
|
|
"summary": "Flyway location customizer가 운영자가 바인딩한 값을 덮어썼다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-customizer-that-discarded-the-bound-property",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-digest-that-covered-who-but-not-what",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §10.1"
|
|
],
|
|
"summary": "transition digest가 \"누가·언제\"만 덮고 \"무엇\"을 덮지 않아 다른 전이를 같다고 보고했다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-digest-that-covered-who-but-not-what",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-five-second-string-that-broke-every-prod-deploy",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §14.6"
|
|
],
|
|
"summary": "`connection-timeout: 5s`가 모든 prod 배포를 시작 실패시켰고 local만 통과했다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-five-second-string-that-broke-every-prod-deploy",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-lease-without-an-owner",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-3` · `analysis/19` §7.3 · `analysis/08` §V3"
|
|
],
|
|
"summary": "lease가 만료 시각만 기록하고 소유자를 기록하지 않아 terminal state가 되돌려졌다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-lease-without-an-owner",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-read-then-delete-race-on-the-upload-lease",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/08` §V4"
|
|
],
|
|
"summary": "cleanup이 읽은 lease와 삭제 사이에 writer가 그 lease를 얻을 수 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-read-then-delete-race-on-the-upload-lease",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-report-that-cannot-carry-a-datasource",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §2.5, §12.1"
|
|
],
|
|
"summary": "진단 리포트가 살아 있는 리소스를 담지 않도록 값 타입을 좁혔다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-report-that-cannot-carry-a-datasource",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-retry-implementation-nobody-calls",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#8-2` 항목 7 · `analysis/05` §17 P1"
|
|
],
|
|
"summary": "재시도 구현이 둘이고 정교한 쪽을 아무도 호출하지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-retry-implementation-nobody-calls",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-a-validator-checking-the-wrong-datasource",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §14.5"
|
|
],
|
|
"summary": "validator가 요청을 서비스하지 않는 datasource를 검증하고 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-validator-checking-the-wrong-datasource",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-an-active-transaction-check-that-asked-the-wrong-question",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §10.1"
|
|
],
|
|
"summary": "활성 트랜잭션 검사가 data source를 묻지 않아 다른 커넥션에서 커밋됐다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:an-active-transaction-check-that-asked-the-wrong-question",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-autoconfiguration-in-name-only",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §14.4"
|
|
],
|
|
"summary": "이름만 AutoConfiguration이던 세 클래스가 capability 리포트에 Stable로 올라 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:autoconfiguration-in-name-only",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-commit-ambiguity-is-not-only-sqlstate-08",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §3.5"
|
|
],
|
|
"summary": "`pg_terminate_backend`가 `57P01`로 도착하고 커밋 레코드는 이미 WAL에 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:commit-ambiguity-is-not-only-sqlstate-08",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-conditionalonbean-evaluated-at-parse-time",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §14.4"
|
|
],
|
|
"summary": "`@ConditionalOnBean(DataSource.class)`가 클래스 파싱 시점에 평가되어 여덟 빈이 사라졌다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:conditionalonbean-evaluated-at-parse-time",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-cursor-verification-order",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §2.4"
|
|
],
|
|
"summary": "커서 서명 검증이 길이·상수시간·순서를 전부 지켜야 했던 이유",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:cursor-verification-order",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-expired-claim-versus-expired-execution",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §10.1, §10.4"
|
|
],
|
|
"summary": "만료된 CLAIMED는 takeover하고 만료된 EXECUTING은 조정을 요구하도록 갈랐다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:expired-claim-versus-expired-execution",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-five-documents-say-nineteen-leaves",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-4` · `analysis/05` §17 P3"
|
|
],
|
|
"summary": "다섯 문서가 \"exactly 19 leaf\"라고 적고 레지스트리는 62다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:five-documents-say-nineteen-leaves",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-h2-hid-a-column-type-mismatch",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §8.5"
|
|
],
|
|
"summary": "`char(64)`와 `varchar(64)` 불일치를 H2가 가리고 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:h2-hid-a-column-type-mismatch",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-jpa-platform-capabilities-have-no-consumer",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#8-2` 항목 8 · `analysis/05` §17 P8, §11.0"
|
|
],
|
|
"summary": "JPA 플랫폼 capability 대부분에 production 소비자가 없다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:jpa-platform-capabilities-have-no-consumer",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-narrowing-the-scan-orphaned-eight-components",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §14.2"
|
|
],
|
|
"summary": "넓은 스캔을 좁히자 여덟 컴포넌트에 아무것도 도달하지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:narrowing-the-scan-orphaned-eight-components",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-native-claim-did-not-bump-the-version",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §11.2"
|
|
],
|
|
"summary": "native claim이 `@Version`을 올리지 않아 충돌을 보고하지 않는 낙관적 잠금이 됐다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:native-claim-did-not-bump-the-version",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-registry-column-too-short-for-its-own-path",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §8.4"
|
|
],
|
|
"summary": "레지스트리 컬럼이 38자 경로에서 짧아 \"더 짧은 경로를 적는\" 우회를 유혹했다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:registry-column-too-short-for-its-own-path",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-requires-new-pins-the-outer-connection",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.1"
|
|
],
|
|
"summary": "`REQUIRES_NEW`가 바깥 커넥션을 핀한 채 새 커넥션을 딴다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:requires-new-pins-the-outer-connection",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-search-path-survived-the-return-to-the-pool",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §13.2"
|
|
],
|
|
"summary": "`search_path`가 풀로 돌아간 커넥션에 남아 다음 tenant가 상속한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:search-path-survived-the-return-to-the-pool",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-tenant-pools-summed-past-the-server-ceiling",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §13.2"
|
|
],
|
|
"summary": "tenant별 풀이 개별적으로 합리적이고 그 합이 서버 상한을 넘긴다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:tenant-pools-summed-past-the-server-ceiling",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-the-second-platform-carried-the-design-not-the-wiring",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-6` · `analysis/20` §2, §3 · `analysis/99` §7.6"
|
|
],
|
|
"summary": "두 번째 플랫폼이 첫 번째의 bridge 부재는 막고 게이트 배선은 옮기지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-second-platform-carried-the-design-not-the-wiring",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-three-versions-declared-one-executed",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §15.4"
|
|
],
|
|
"summary": "릴리스 레인이 매트릭스 세 버전 중 첫 번째만 돌리고 세 개를 커버로 기록했다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:three-versions-declared-one-executed",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-three-ways-rls-does-nothing",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §13.1, §17 P8"
|
|
],
|
|
"summary": "RLS가 아무것도 하지 않는 세 가지 방법",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:three-ways-rls-does-nothing",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-two-owners-popped-the-evidence-frame",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §3.4"
|
|
],
|
|
"summary": "커밋 증거 프레임을 두 주인이 pop해서 바깥 트랜잭션의 실패가 익명이 됐다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:two-owners-popped-the-evidence-frame",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-two-trees-both-numbered-from-v1",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §8.3"
|
|
],
|
|
"summary": "두 트리가 다 V1부터 번호를 매겨 공유 history가 하나를 건너뛸 수 있었다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:two-trees-both-numbered-from-v1",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-case-untranslated-contention-bypassed-the-retry-catch",
|
|
"kindCandidate": "CASE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §3.6"
|
|
],
|
|
"summary": "번역되지 않은 경합 예외가 재시도 코디네이터의 catch를 통째로 비껴갔다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "case:untranslated-contention-bypassed-the-retry-catch",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-capability-schema-registry",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §8.4, §11.3"
|
|
],
|
|
"summary": "capability_schema_registry — 스키마 적용과 사용 승인의 분리",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:capability-schema-registry",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-cardinality-bounds-as-types",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1`, `#5-2` · `analysis/05` §2.1, §12.2 · `analysis/02`"
|
|
],
|
|
"summary": "카디널리티 경계를 타입으로 표현하기",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:cardinality-bounds-as-types",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-cas-tuple-and-update-count",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §10.1, §10.3"
|
|
],
|
|
"summary": "CAS 튜플과 update count가 답이 되는 구조",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:cas-tuple-and-update-count",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-commit-evidence-phases",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.4, §2.3"
|
|
],
|
|
"summary": "커밋 증거 단계 — NOT_STARTED에서 UNKNOWN까지",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:commit-evidence-phases",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-deadline-propagation",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.3"
|
|
],
|
|
"summary": "호출 예산에서 DB 로컬 타임아웃까지의 데드라인 전파",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:deadline-propagation",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-evidence-grades-and-provenance",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-5` · `analysis/05` §15.6"
|
|
],
|
|
"summary": "증거 등급과 provenance — R1과 R2를 가르는 것",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:evidence-grades-and-provenance",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-fenced-lease",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1`, `#4-3` · `analysis/05` §10 · `analysis/19` §7.3"
|
|
],
|
|
"summary": "fenced lease — 만료 시각만으로는 부족한 이유",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:fenced-lease",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-file-state-machine-and-ready",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-4` · `analysis/08` §V1"
|
|
],
|
|
"summary": "파일 상태 기계와 READY가 뜻하는 것",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:file-state-machine-and-ready",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-four-grade-disclosure",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-5` · `analysis/16` §45.2, §45.3"
|
|
],
|
|
"summary": "네 단계 공시 등급 — modelled에서 production-verified까지",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:four-grade-disclosure",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-four-multitenancy-strategies",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §13.2"
|
|
],
|
|
"summary": "네 가지 멀티테넌시 전략과 각각의 격리 경계",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:four-multitenancy-strategies",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-independent-flyway-streams",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §8.3"
|
|
],
|
|
"summary": "독립 Flyway 스트림과 baseline version 0",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:independent-flyway-streams",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-redis-admission-stages",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-4` · `analysis/10` §64"
|
|
],
|
|
"summary": "명령 카탈로그와 admission 아홉 단계",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:redis-admission-stages",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-requires-new-connection-cost",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.1, §13.2"
|
|
],
|
|
"summary": "`REQUIRES_NEW`의 커넥션 비용과 풀 사이징 제약",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:requires-new-connection-cost",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-rls-three-preconditions",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §13.1"
|
|
],
|
|
"summary": "RLS가 성립하기 위한 세 전제",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:rls-three-preconditions",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-signed-cursor-structure",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-4` · `analysis/05` §2.4 · `analysis/19` §4.x"
|
|
],
|
|
"summary": "서명된 커서의 구조와 검증 순서",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:signed-cursor-structure",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-staged-lifecycle-and-signed-grants",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-4` · `analysis/09` · `analysis/03` §10"
|
|
],
|
|
"summary": "staged lifecycle과 서명된 grant",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:staged-lifecycle-and-signed-grants",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-strict-test-lane",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-3` · `analysis/05` §15.1 · `analysis/19` §2.3 · `analysis/20` §2.5"
|
|
],
|
|
"summary": "strict test lane — 발견하지 못하면 실패하는 레인",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:strict-test-lane",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-three-assembly-paths",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#1-4`, `#7-1` · `analysis/18` · `analysis/14` §7.1"
|
|
],
|
|
"summary": "Spring 조립의 세 경로와 각각이 결정하는 것",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:three-assembly-paths",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-transaction-result-algebra",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.2"
|
|
],
|
|
"summary": "트랜잭션 결과 대수 — 다섯 변형이 각각 답하는 질문",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:transaction-result-algebra",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-transport-failure-stage-and-category",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#8-1` · `analysis/11` §51"
|
|
],
|
|
"summary": "전송 실패의 단계와 범주 — `AttemptStage`와 `FailureCategory`",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:transport-failure-stage-and-category",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-concept-when-conditions-are-evaluated",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §14.4"
|
|
],
|
|
"summary": "조건부 빈의 평가 시점 — 파싱 시점과 등록 시점",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:when-conditions-are-evaluated",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-candidate-evidence-stays-at-r1",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-5` · `analysis/05` §15.6"
|
|
],
|
|
"summary": "후보 증거는 통과해도 R1에 머무르고 R2는 별도 게이트가 판정한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:candidate-evidence-stays-at-r1",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-capability-grade-is-declared-not-inferred",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-5` · `analysis/05` §2.5 · `analysis/19` §6.6 · `analysis/20` §2.6"
|
|
],
|
|
"summary": "지원 등급은 추론이 아니라 선언이고 증거 없이는 올라가지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:capability-grade-is-declared-not-inferred",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-capability-separates-installation-from-activation",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1` · `analysis/05` §8.4, §11.3"
|
|
],
|
|
"summary": "capability는 스키마 적용과 사용 승인을 분리한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:capability-separates-installation-from-activation",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-classpath-presence-is-not-consent",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-3` · `analysis/05` §13"
|
|
],
|
|
"summary": "클래스패스에 있는 것은 실행 동의가 아니다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:classpath-presence-is-not-consent",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-completion-unknown-is-never-retried",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-2` · `analysis/05` §2.2, §3.5"
|
|
],
|
|
"summary": "completion-unknown은 자동으로도 수동으로도 재시도하지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:completion-unknown-is-never-retried",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-cursors-are-signed-for-integrity",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-4` · `analysis/05` §2.4"
|
|
],
|
|
"summary": "커서에 서명하는 이유는 기밀성이 아니라 무결성이다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:cursors-are-signed-for-integrity",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-flyway-owns-the-schema",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#4-1`, `#10-3` · `analysis/05` §8.1, §12.1"
|
|
],
|
|
"summary": "Flyway가 스키마를 소유하고 런타임 롤은 DDL 권한을 갖지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:flyway-owns-the-schema",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-grades-derive-from-executed-evidence",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-5` · `analysis/19` §6.6 · `analysis/16` §45.3"
|
|
],
|
|
"summary": "능력 등급은 코드가 아니라 실행된 증거에서 파생한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:grades-derive-from-executed-evidence",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-grpc-stays-build-only-until-the-bridge-is-decided",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#2-3` · `analysis/20` §2.3, §2.6"
|
|
],
|
|
"summary": "gRPC 플랫폼은 build-only로 두고 애플리케이션 도달 경로를 먼저 정한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:grpc-stays-build-only-until-the-bridge-is-decided",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-in-root-write-fails-fast",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.1"
|
|
],
|
|
"summary": "`inRootWrite`는 suspend하지 않고 fail-fast한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:in-root-write-fails-fast",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-legacy-adoption-requires-two-approvers",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/09` §49"
|
|
],
|
|
"summary": "legacy 채택은 서로 다른 두 승인자의 서명을 요구한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:legacy-adoption-requires-two-approvers",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-no-physical-paths-in-metadata",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/08` §V1"
|
|
],
|
|
"summary": "물리 경로와 원본 파일명을 저장하지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:no-physical-paths-in-metadata",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-one-audit-mechanism-per-entity",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §12.5"
|
|
],
|
|
"summary": "감사 메커니즘은 엔티티당 정확히 하나여야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:one-audit-mechanism-per-entity",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-one-root-owns-the-master-switch",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-3` · `analysis/19` §6.1 · `analysis/05` §14.1"
|
|
],
|
|
"summary": "마스터 스위치는 루트 하나가 소유하고 자식 설정은 조건을 갖지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:one-root-owns-the-master-switch",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-only-the-certification-lane-carries-no-docker-guard",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-4` · `analysis/19` §2.3"
|
|
],
|
|
"summary": "인증 레인만 Docker 가드를 달지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:only-the-certification-lane-carries-no-docker-guard",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-performance-measurement-is-not-a-release-gate",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-5` · `analysis/20` §2.5 · `analysis/05` §15.3"
|
|
],
|
|
"summary": "성능 측정은 릴리스 게이트에 넣지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:performance-measurement-is-not-a-release-gate",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-pool-need-is-a-capability-question",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-3` · `analysis/05` §14.1"
|
|
],
|
|
"summary": "풀이 필요한지는 \"JPA가 켜졌나\"가 아니라 \"커넥션이 필요한 capability가 있나\"로 묻는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:pool-need-is-a-capability-question",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-repair-is-not-a-mode",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §8.1"
|
|
],
|
|
"summary": "Repair는 모드가 아니라 운영자가 호출하는 작업이다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:repair-is-not-a-mode",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-retry-safety-is-decided-by-evidence",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-2` · `analysis/11` §51 · `analysis/20` §2.4"
|
|
],
|
|
"summary": "재시도 안전성은 증거에 기반해 판정한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:retry-safety-is-decided-by-evidence",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-retry-unit-is-the-use-case",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §3.6"
|
|
],
|
|
"summary": "재시도 단위는 statement가 아니라 유스케이스 전체다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:retry-unit-is-the-use-case",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-state-machines-carry-no-stereotype",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §10"
|
|
],
|
|
"summary": "상태 기계 구현은 Spring stereotype을 갖지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:state-machines-carry-no-stereotype",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-templates-are-built-once-per-mode",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#3-2` · `analysis/05` §3.1"
|
|
],
|
|
"summary": "트랜잭션 템플릿은 모드별로 미리 만들어 둔다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:templates-are-built-once-per-mode",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-tenant-id-is-never-a-metric-tag",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-4` · `analysis/05` §13.2 · `analysis/02`"
|
|
],
|
|
"summary": "tenant id는 메트릭 태그가 되지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:tenant-id-is-never-a-metric-tag",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-three-axes-of-evidence",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-5` · `analysis/20` §2.4"
|
|
],
|
|
"summary": "전송·업무·스트림 증거는 세 축이고 서로를 함의하지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:three-axes-of-evidence",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-unclassified-commands-are-refused",
|
|
"kindCandidate": "DECISION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/10` §47"
|
|
],
|
|
"summary": "분류되지 않은 명령은 fail-closed로 거부한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "decision:unclassified-commands-are-refused",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-decision-widen-doc-contract-assertions",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"final/document.md",
|
|
"analysis/19-messaging-platform.md#L1064"
|
|
],
|
|
"summary": "문서 계약 테스트의 단언 범위를 capability 표까지 넓힐 것인가",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:widen-doc-contract-assertions",
|
|
"reason": null,
|
|
"note": "DECISION 에서 OPEN QUESTION 으로 정정. 노드 자신이 decision-status NOT_DECIDED 이고 채택 근거가 없다 — 프로젝트가 선택한 방향이 아니라 아직 닫히지 않은 선택이다."
|
|
},
|
|
{
|
|
"id": "BASE-open-question-commit-ambiguity-lane-not-executed",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-2` · `analysis/05` §3.5, §15"
|
|
],
|
|
"summary": "커밋 모호성 계약 레인이 이 리비전에서 통과하는지 실행으로 확인되지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:commit-ambiguity-lane-not-executed",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-open-question-conditional-evaluation-order-unverified",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#11` 항목 4 · `analysis/05` §14.4"
|
|
],
|
|
"summary": "`@ConditionalOnBean` 사슬의 실제 평가 순서를 확인하지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:conditional-evaluation-order-unverified",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-open-question-container-lanes-not-executed",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-2` · `#11` 항목 1"
|
|
],
|
|
"summary": "컨테이너가 필요한 레인의 실제 결과를 실행으로 확인하지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:container-lanes-not-executed",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-open-question-one-boot-would-settle-two-findings",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#11` 항목 3 · `analysis/19` §5.1, §7.1"
|
|
],
|
|
"summary": "부팅 한 번으로 확증 가능한 두 건이 아직 정적 추론으로만 남아 있다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:one-boot-would-settle-two-findings",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-open-question-pool-contract-lane-not-executed",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-2` · `analysis/05` §15.3"
|
|
],
|
|
"summary": "풀 계약 레인이 실행되지 않아 포화 동작이 확인되지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:pool-contract-lane-not-executed",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-open-question-redis-topology-lane-not-executed",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-2` · `analysis/10` §0, §47"
|
|
],
|
|
"summary": "Redis 토폴로지 레인이 실행되지 않아 key spec 드리프트가 확인되지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:redis-topology-lane-not-executed",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-open-question-v2-state-machine-lanes-not-executed",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-2` · `analysis/05` §15.5"
|
|
],
|
|
"summary": "V2 상태 기계 넷의 컨테이너 레인이 실행되지 않았다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:v2-state-machine-lanes-not-executed",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-bean-is-not-composition-evidence",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 2·3 · `analysis/99` §2"
|
|
],
|
|
"summary": "`@Bean`이 있다는 것은 조립 증거가 아니다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-bean-is-not-composition-evidence",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-binary-approval-codec-must-round-trip",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/09` §49"
|
|
],
|
|
"summary": "이진 승인 코덱은 decode 후 재인코딩이 원본과 같아야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-binary-approval-codec-must-round-trip",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-contract-test-must-run-the-adapters-statement",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 19 · `analysis/05` §11.2, §17 P2"
|
|
],
|
|
"summary": "계약 테스트는 어댑터가 실제로 돌리는 statement를 실행해야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-contract-test-must-run-the-adapters-statement",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-gate-nobody-runs-reports-the-last-run",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 6 · `analysis/18` §4.1c · `analysis/20` §3.3"
|
|
],
|
|
"summary": "아무도 돌리지 않는 레인의 게이트는 마지막으로 돌린 사람이 본 것을 보고한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-gate-nobody-runs-reports-the-last-run",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-lane-that-discovers-nothing-must-fail",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#6-3` · `analysis/05` §15.1"
|
|
],
|
|
"summary": "아무것도 발견하지 못한 레인은 성공이 아니라 실패여야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-lane-that-discovers-nothing-must-fail",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-publicly-readable-state-must-be-complete-by-constraint",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/08` §V1"
|
|
],
|
|
"summary": "공개 읽기 가능한 상태는 완전한 identity를 DB 제약으로 요구한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-publicly-readable-state-must-be-complete-by-constraint",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-a-single-admission-point-must-count-its-bypasses",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/10` §64"
|
|
],
|
|
"summary": "단일 admission point는 우회 경로를 세어야 성립한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-single-admission-point-must-count-its-bypasses",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-agreement-between-documents-proves-nothing",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 5 · `analysis/19` §6.6"
|
|
],
|
|
"summary": "문서와 상수가 서로 일치하는 것으로는 아무것도 증명되지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:agreement-between-documents-proves-nothing",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-ambiguity-rule-hurts-both-ways",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §3.5 · `docs/adr/ADR-JPA-003-completion-unknown.md`"
|
|
],
|
|
"summary": "커밋 모호성 판정은 넓혀도 좁혀도 해롭다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:ambiguity-rule-hurts-both-ways",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-an-applied-checksum-is-a-promise",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §8.1, §8.5"
|
|
],
|
|
"summary": "적용된 마이그레이션의 checksum은 그것을 돌린 모든 배포에 대한 약속이다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:an-applied-checksum-is-a-promise",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-atomic-type-is-not-atomicity",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#5-5` · `analysis/20` §7"
|
|
],
|
|
"summary": "`Atomic*` 타입의 존재는 원자성의 증거가 아니다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:atomic-type-is-not-atomicity",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-cas-tuple-in-the-where-clause",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 17 · `analysis/05` §10, §16"
|
|
],
|
|
"summary": "CAS 튜플을 where 절에 전부 반복하고 update count를 답으로 쓴다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:cas-tuple-in-the-where-clause",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-check-which-duplicate-is-wired",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-3` · `analysis/99` §4"
|
|
],
|
|
"summary": "중복 장치를 찾으면 어느 쪽이 조립됐는지 먼저 확인한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:check-which-duplicate-is-wired",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-claim-with-a-conditional-update-not-a-read",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/08` §V4 · `analysis/05` §10"
|
|
],
|
|
"summary": "조건부 update로 행을 claim하고 읽은 값으로 판단하지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:claim-with-a-conditional-update-not-a-read",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-conditionalonbean-must-be-satisfiable",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 4 · `analysis/19` §7.1"
|
|
],
|
|
"summary": "`@ConditionalOnBean`은 조건이 만족될 수 있는지까지 확인해야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:conditionalonbean-must-be-satisfiable",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-count-the-frameworks-own-autoconfigurations",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §14.1"
|
|
],
|
|
"summary": "프레임워크가 기여하는 자동설정까지 세지 않으면 스위치가 아니다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:count-the-frameworks-own-autoconfigurations",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-deadline-narrows-in-three-stages",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §3.3"
|
|
],
|
|
"summary": "데드라인은 호출 예산에서 시작해 세 단계로 좁힌다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:deadline-narrows-in-three-stages",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-digest-must-be-length-framed-and-versioned",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §10.1"
|
|
],
|
|
"summary": "digest는 길이 프레이밍하고 버전을 붙인다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:digest-must-be-length-framed-and-versioned",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-each-stream-owns-its-history-table",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §8.3"
|
|
],
|
|
"summary": "마이그레이션 스트림은 자기 history 테이블을 갖는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:each-stream-owns-its-history-table",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-expired-claim-and-expired-execution-differ",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §10.1, §10.4"
|
|
],
|
|
"summary": "만료된 claim과 만료된 실행은 다르게 다뤄야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:expired-claim-and-expired-execution-differ",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-fix-overstatement-before-understatement",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-4` · `analysis/19` §6.3"
|
|
],
|
|
"summary": "과대 진술 문서를 과소보다 먼저 고친다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:fix-overstatement-before-understatement",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-grades-may-understate-never-overstate",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-5` · `analysis/16` §45.3 · `analysis/20` §2.6"
|
|
],
|
|
"summary": "등급은 네 단계로 나누고 관측보다 높게 적지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:grades-may-understate-never-overstate",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-hibernate-filter-is-not-a-security-boundary",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §13.2"
|
|
],
|
|
"summary": "Hibernate filter는 보안 경계가 아니다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:hibernate-filter-is-not-a-security-boundary",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-isolation-settings-must-be-transaction-local",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §13.1, §13.2"
|
|
],
|
|
"summary": "격리 설정은 트랜잭션 로컬이어야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:isolation-settings-must-be-transaction-local",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-local-with-a-different-db-is-a-different-system",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 18 · `analysis/05` §8.5"
|
|
],
|
|
"summary": "로컬이 다른 DB면 로컬 테스트는 다른 시스템에 대한 진술이다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:local-with-a-different-db-is-a-different-system",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-make-the-unsafe-state-unrepresentable",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 14 · `analysis/05` §2.2 · `analysis/19` §3.2"
|
|
],
|
|
"summary": "위험한 조합은 정책이 아니라 생성자가 거부하게 만든다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:make-the-unsafe-state-unrepresentable",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-names-are-registry-keys-not-values",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 15 · `analysis/05` §2.1, §5, §7"
|
|
],
|
|
"summary": "이름은 값이 아니라 registry key다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:names-are-registry-keys-not-values",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-numbers-in-docs-should-be-derived",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/19` §6.4 · `analysis/05` §17 P3"
|
|
],
|
|
"summary": "문서의 수치는 세지 말고 파생하거나 게이트로 붙든다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:numbers-in-docs-should-be-derived",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-off-must-be-structural",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#10-3` · `analysis/05` §14.1 · `analysis/19` §6.1"
|
|
],
|
|
"summary": "\"꺼짐\"은 조건의 반복이 아니라 구조여야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:off-must-be-structural",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-omission-that-passes-is-not-a-gate",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 12 · `analysis/05` §1, §16"
|
|
],
|
|
"summary": "빠뜨림이 통과가 되는 게이트는 게이트가 아니다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:omission-that-passes-is-not-a-gate",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-prefix-matching-fits-signatures-not-sniffing",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/08` §40"
|
|
],
|
|
"summary": "접두사 시작 매칭은 시그니처에는 맞고 스니핑 패턴에는 맞지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:prefix-matching-fits-signatures-not-sniffing",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-read-the-assembling-side-first",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#13` 항목 5 · `analysis/99` §8"
|
|
],
|
|
"summary": "조립 결함을 판정하려면 조립하는 쪽을 먼저 읽어야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:read-the-assembling-side-first",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-read-the-clock-after-the-lock",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 17 · `analysis/05` §10, §16"
|
|
],
|
|
"summary": "시간은 DB에서, 그리고 행을 잠근 다음에 읽는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:read-the-clock-after-the-lock",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-register-paths-bind-values",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 16 · `analysis/05` §7.5"
|
|
],
|
|
"summary": "path·identifier는 등록하고 value는 바인딩한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:register-paths-bind-values",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-registry-rules-transfer-ci-rules-do-not",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#7-6` · `analysis/99` §7.6"
|
|
],
|
|
"summary": "레지스트리로 표현된 규칙은 전이되고 CI로 표현된 규칙은 전이되지 않는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:registry-rules-transfer-ci-rules-do-not",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-reject-rather-than-sanitize",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §12.2"
|
|
],
|
|
"summary": "sanitize가 아니라 reject가 기본이다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:reject-rather-than-sanitize",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-retryability-needs-both-idempotency-and-category",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/11` §51 · `analysis/05` §3.6"
|
|
],
|
|
"summary": "재시도 가능성은 멱등성과 실패 범주를 함께 봐야 정해진다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:retryability-needs-both-idempotency-and-category",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-runtime-membership-decides-severity",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 1 · `analysis/17` §26.6 · `analysis/19` §1.1 · `analysis/20` §1.1"
|
|
],
|
|
"summary": "`runtime_memberships`를 먼저 읽고 심각도를 정한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:runtime-membership-decides-severity",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-server-metadata-defines-the-command",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/10` §47"
|
|
],
|
|
"summary": "서버 메타데이터가 명령의 정의이고 정책 파일은 허용 범위다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:server-metadata-defines-the-command",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-session-scoped-settings-outlive-the-transaction",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §3.3, §13.2"
|
|
],
|
|
"summary": "세션 스코프 설정은 풀로 돌아간 커넥션에 남는다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:session-scoped-settings-outlive-the-transaction",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-telemetry-can-be-more-dangerous-than-its-subject",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#5-2` · `analysis/05` §12.2 · `analysis/02`"
|
|
],
|
|
"summary": "관측을 위해 수집한 데이터가 관측 대상보다 위험할 수 있다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:telemetry-can-be-more-dangerous-than-its-subject",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-tenant-column-belongs-in-every-unique-constraint",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §13.1"
|
|
],
|
|
"summary": "tenant 컬럼이 있는 테이블의 모든 unique 제약에 그 컬럼이 들어가야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:tenant-column-belongs-in-every-unique-constraint",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-the-powerful-half-must-not-be-one-setting-away",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/09` §49"
|
|
],
|
|
"summary": "권한이 센 절반이 설정 한 줄로 켜지면 안 된다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:the-powerful-half-must-not-be-one-setting-away",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-the-startup-validator-follows-the-autoconfiguration-root",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#5-3` · `analysis/18` (SRC-158)"
|
|
],
|
|
"summary": "시작 검증기가 도는지는 그 능력에 자동설정 루트가 있는지와 일치한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:the-startup-validator-follows-the-autoconfiguration-root",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-translation-chain-order-is-a-contract",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §3.6"
|
|
],
|
|
"summary": "실패 번역 사슬의 순서는 계약이다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:translation-chain-order-is-a-contract",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-two-vocabularies-for-one-concept",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/19` §5.4 · `analysis/06` §58, §69 · `analysis/05` §12.5"
|
|
],
|
|
"summary": "같은 개념의 두 어휘가 공존하면 하나를 죽은 것으로 표시한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:two-vocabularies-for-one-concept",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-unknown-is-a-third-result",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`final/document.md#9` 규칙 13 · `analysis/05` §16 · `analysis/19` §3.2"
|
|
],
|
|
"summary": "모르는 것은 성공도 실패도 아닌 세 번째 결과여야 한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:unknown-is-a-third-result",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-walk-the-cause-chain-most-specific-wins",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/11` §51"
|
|
],
|
|
"summary": "원인 사슬은 가장 구체적인 분류가 이기도록 순회한다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:walk-the-cause-chain-most-specific-wins",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "BASE-reference-write-transactions-need-a-finite-timeout",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"`analysis/05` §2.3"
|
|
],
|
|
"summary": "쓰기 트랜잭션에는 유한 타임아웃이 필수다",
|
|
"origin": "PRE_COVERAGE_ROOT_TREE_BASELINE",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:write-transactions-need-a-finite-timeout",
|
|
"reason": null
|
|
},
|
|
{
|
|
"id": "X99-Q001",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#L244"
|
|
],
|
|
"sourceHeading": "남은 질문 1 — 컨테이너·브로커·DB가 필요한 레인의 실제 결과",
|
|
"summary": "컨테이너·브로커·DB가 필요한 레인의 실제 결과",
|
|
"disposition": "MERGED",
|
|
"target": "open-question:container-lanes-not-executed",
|
|
"reason": "기존 Open Question이 동일한 미실행 container/broker/DB 레인의 실제 결과를 이미 질문 단위로 포괄한다."
|
|
},
|
|
{
|
|
"id": "X99-Q002",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#L252"
|
|
],
|
|
"sourceHeading": "남은 질문 2 — sample-portfolio 내부",
|
|
"summary": "sample-portfolio 내부와 두 번째 runtime membership에서 달라질 수 있는 판정",
|
|
"disposition": "BLOCKED",
|
|
"target": null,
|
|
"reason": "sample-portfolio는 사용자 지시로 분석 대상에서 명시적으로 제외됐다. 분석 없이 질문 record를 생성하면 근거 범위를 넘어가므로 scope가 다시 열리기 전까지 BLOCKED다."
|
|
},
|
|
{
|
|
"id": "X99-Q003",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#L258"
|
|
],
|
|
"sourceHeading": "남은 질문 3 — 런타임 관측",
|
|
"summary": "정적 분석 판정을 실제 부팅 로그·액추에이터·메트릭으로 확증하지 않았다",
|
|
"disposition": "MERGED",
|
|
"target": "open-question:one-boot-would-settle-two-findings",
|
|
"reason": "기존 Open Question이 messaging metrics와 ConditionEvaluationReport를 실제 부팅으로 확증하는 동일 검증 단위를 가진다."
|
|
},
|
|
{
|
|
"id": "X99-Q004",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#L264"
|
|
],
|
|
"sourceHeading": "남은 질문 4 — @ConditionalOnBean 실제 평가 순서",
|
|
"summary": "@ConditionalOnBean 사슬의 실제 평가 순서",
|
|
"disposition": "MERGED",
|
|
"target": "open-question:conditional-evaluation-order-unverified",
|
|
"reason": "기존 Open Question이 ConditionEvaluationReport로 현재 리비전의 실제 조건 평가 사유를 확인하는 동일 질문이다."
|
|
},
|
|
{
|
|
"id": "X99-Q005",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#L270"
|
|
],
|
|
"sourceHeading": "남은 질문 5 — 성능·용량 주장",
|
|
"summary": "실제 성능·용량 특성을 어떤 모듈에서도 측정하지 않았다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:performance-and-capacity-unmeasured",
|
|
"reason": null,
|
|
"topic": "verification-path-coverage"
|
|
},
|
|
{
|
|
"id": "C2-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-operation-ledger-jpa.md#L133"
|
|
],
|
|
"sourceHeading": "P2 — insert-first 주장이 Spring Data 의 save 계약과 어긋난다. 그리고 테스트 이중이 그 차이를 가린다",
|
|
"summary": "insert-first 주장이 Spring Data 의 save 계약과 어긋난다. 그리고 테스트 이중이 그 차이를 가린다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:assigned-id-turns-claim-into-upsert",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "C2-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L158"
|
|
],
|
|
"sourceHeading": "P2 — 자격증명 회전이 비교 후 교체가 아니고, 배수 완료가 진행 중인 회전을 되돌릴 수 있다",
|
|
"summary": "자격증명 회전이 비교 후 교체가 아니고, 배수 완료가 진행 중인 회전을 되돌릴 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:complete-drain-rolls-back-a-rotation",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "C2-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L139"
|
|
],
|
|
"sourceHeading": "P2 — 시작 검증기가 시작 시 실행되지 않는다",
|
|
"summary": "시작 검증기가 시작 시 실행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:startup-validator-is-the-only-reader-of-four-keys",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "C2-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L148"
|
|
],
|
|
"sourceHeading": "P2 — 같은 자동 설정 안에서 검증기 하나만 감싸이지 않는다",
|
|
"summary": "같은 자동 설정 안에서 검증기 하나만 감싸이지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:validator-declared-and-never-injected",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "C2-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L111"
|
|
],
|
|
"sourceHeading": "P2 — deduplicatedPublish 를 무조건 참으로 선언하는데 실제 중복 제거는 프로파일에 창이 있을 때만 일어난다",
|
|
"summary": "deduplicatedPublish 를 무조건 참으로 선언하는데 실제 중복 제거는 프로파일에 창이 있을 때만 일어난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:capability-constant-outlives-its-condition",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "C2-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-diagnostics.md#L123"
|
|
],
|
|
"sourceHeading": "P2 — 마스킹이 IPv4 만 알고, 그 결과 마스킹되지 않은 주소 검사가 나머지 형태를 전부 통과시킨다",
|
|
"summary": "마스킹이 IPv4 만 알고, 그 결과 마스킹되지 않은 주소 검사가 나머지 형태를 전부 통과시킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:ipv4-only-mask-passes-every-other-form",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "C2-F007",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L148"
|
|
],
|
|
"sourceHeading": "규칙 — 검증기는 발행이 아니라 주입이 강제다",
|
|
"summary": "검증기는 발행이 아니라 주입이 강제다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-validator-is-enforced-by-injection",
|
|
"reason": "사이클 2 전수 통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 낸다.",
|
|
"cycle": 2
|
|
},
|
|
{
|
|
"id": "A24-F001",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L218"
|
|
],
|
|
"sourceHeading": "운영 프로파일에 TLS·인증을 요구하고 그 둘이 없는 Kafka 생산자를 만든다",
|
|
"summary": "운영 프로파일에 TLS·인증을 요구하고 그 둘이 없는 Kafka 생산자를 만든다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-validator-that-demands-tls-and-an-assembly-that-omits-it",
|
|
"reason": "23개 리프 재통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 냈다."
|
|
},
|
|
{
|
|
"id": "A24-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-proto-contract.md#L221"
|
|
],
|
|
"sourceHeading": "두 파일이 같은 검증기를 빌드 게이트라고 적고 어떤 빌드도 부르지 않는다",
|
|
"summary": "두 파일이 같은 검증기를 빌드 게이트라고 적고 어떤 빌드도 부르지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:two-files-name-a-build-gate-that-no-build-runs",
|
|
"reason": "23개 리프 재통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 냈다."
|
|
},
|
|
{
|
|
"id": "A24-F003",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#3-5"
|
|
],
|
|
"sourceHeading": "산문이 선언한 게이트는 빌드에 있는 게이트가 아니다",
|
|
"summary": "산문이 선언한 게이트는 빌드에 있는 게이트가 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-gate-declared-in-prose-is-not-in-the-build",
|
|
"reason": "23개 리프 재통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 냈다."
|
|
},
|
|
{
|
|
"id": "A24-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-pulsar-experimental.md#L222"
|
|
],
|
|
"sourceHeading": "이름이 검사한다고 말하는 것을 본문이 검사하지 않는 테스트 다섯",
|
|
"summary": "이름이 검사한다고 말하는 것을 본문이 검사하지 않는 테스트 다섯",
|
|
"disposition": "EMITTED",
|
|
"target": "case:test-names-that-assert-what-their-bodies-do-not",
|
|
"reason": "23개 리프 재통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 냈다."
|
|
},
|
|
{
|
|
"id": "A24-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-codegen.md#L259"
|
|
],
|
|
"sourceHeading": "결정을 그 결정이 판정한 대상에 묶는 것 — 같은 저장소의 맞는 판본과 틀린 판본",
|
|
"summary": "결정을 그 결정이 판정한 대상에 묶는 것 — 같은 저장소의 맞는 판본과 틀린 판본",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-same-repository-bound-a-decision-once-and-not-the-other-time",
|
|
"reason": "23개 리프 재통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 냈다."
|
|
},
|
|
{
|
|
"id": "A24-F006",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L219"
|
|
],
|
|
"sourceHeading": "담금 임계값이 열거형에 없는 등급을 위해 쓰여 중간 등급이 상위 등급보다 어려워졌다",
|
|
"summary": "담금 임계값이 열거형에 없는 등급을 위해 쓰여 중간 등급이 상위 등급보다 어려워졌다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-soak-threshold-written-for-a-grade-that-does-not-exist",
|
|
"reason": "23개 리프 재통독에서 처음 나온 finding. 기존 노드가 같은 사건을 담지 않아 새 노드로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F001",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md",
|
|
"analysis/99-cross-scope.md"
|
|
],
|
|
"sourceHeading": "능력 선언의 세 출처와 그것이 파생되지 않을 때",
|
|
"summary": "능력 선언의 세 출처와 그것이 파생되지 않을 때",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:three-sources-of-a-capability-answer",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F002",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L239",
|
|
"analysis/messaging/messaging-spring-boot-starter.md"
|
|
],
|
|
"sourceHeading": "브로커 트랜잭션을 무조건 참으로 선언하고, 그 조건을 검사하는 검증기는 기동 시 돌지 않는다",
|
|
"summary": "브로커 트랜잭션을 무조건 참으로 선언하고, 그 조건을 검사하는 검증기는 기동 시 돌지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-transaction-capability-true-and-its-validator-never-run",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F003",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md"
|
|
],
|
|
"sourceHeading": "지연 배달을 참으로 선언하는데 그 지연을 제공할 토폴로지가 조립되지 않는다",
|
|
"summary": "지연 배달을 참으로 선언하는데 그 지연을 제공할 토폴로지가 조립되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-delayed-delivery-flag-without-the-topology-that-delivers-it",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F004",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-pulsar-experimental.md#L156"
|
|
],
|
|
"sourceHeading": "같은 어댑터의 능력을 전송과 검증기가 다르게 답하고, 런타임이 쓰는 쪽이 record 의 의미와 어긋난다",
|
|
"summary": "같은 어댑터의 능력을 전송과 검증기가 다르게 답하고, 런타임이 쓰는 쪽이 record 의 의미와 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-transport-and-the-validator-answer-differently",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F005",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L853"
|
|
],
|
|
"sourceHeading": "운영자용 지원 매트릭스가 런타임 편입을 반대로 적고, 틀린 쪽이 옳은 쪽을 권위로 지목한다",
|
|
"summary": "운영자용 지원 매트릭스가 런타임 편입을 반대로 적고, 틀린 쪽이 옳은 쪽을 권위로 지목한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-support-matrix-says-nothing-is-deployed-and-eighteen-are",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F006",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md",
|
|
"analysis/messaging/messaging-nats-experimental.md"
|
|
],
|
|
"sourceHeading": "능력 선언은 프로파일에서 파생되어야 하고 상수는 그것을 할 수 없다",
|
|
"summary": "능력 선언은 프로파일에서 파생되어야 하고 상수는 그것을 할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-capability-constant-must-derive-from-the-profile",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F007",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md",
|
|
"analysis/messaging/messaging-pulsar-experimental.md"
|
|
],
|
|
"sourceHeading": "능력 플래그의 무게는 그것을 읽는 코드가 정한다",
|
|
"summary": "능력 플래그의 무게는 그것을 읽는 코드가 정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:the-weight-of-a-flag-is-set-by-the-code-that-reads-it",
|
|
"topic": "capability-declaration-vs-proof",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F008",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md",
|
|
"analysis/grpc/grpc-policy.md"
|
|
],
|
|
"sourceHeading": "원자 타입 위의 검사 후 실행과 비교 후 교체 루프",
|
|
"summary": "원자 타입 위의 검사 후 실행과 비교 후 교체 루프",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:check-then-act-on-atomic-types",
|
|
"topic": "non-atomic-check-then-act",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F009",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-client.md"
|
|
],
|
|
"sourceHeading": "회전이 비교 후 교체가 아니라 덮어쓰기이고, 세대 계수기는 음수가 되면 회수되지 않는다",
|
|
"summary": "회전이 비교 후 교체가 아니라 덮어쓰기이고, 세대 계수기는 음수가 되면 회수되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-rotation-that-overwrites-and-a-generation-that-cannot-be-reclaimed",
|
|
"topic": "non-atomic-check-then-act",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F010",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-server.md",
|
|
"analysis/grpc/grpc-policy.md"
|
|
],
|
|
"sourceHeading": "승인 경계가 동시성 아래에서 새고, 큐 계수기를 되돌리는 경로가 없다",
|
|
"summary": "승인 경계가 동시성 아래에서 새고, 큐 계수기를 되돌리는 경로가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:an-admission-boundary-that-leaks-and-a-counter-that-cannot-return",
|
|
"topic": "non-atomic-check-then-act",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F011",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md#L191"
|
|
],
|
|
"sourceHeading": "배수를 시작한 뒤에도 한 서비스가 다시 SERVING 이 될 수 있다",
|
|
"summary": "배수를 시작한 뒤에도 한 서비스가 다시 SERVING 이 될 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:draining-began-and-a-service-came-back-serving",
|
|
"topic": "non-atomic-check-then-act",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F012",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md",
|
|
"analysis/grpc/grpc-policy.md"
|
|
],
|
|
"sourceHeading": "전이를 시작하는 쓰기와 그 전이가 덮는 집합은 한 연산이어야 한다",
|
|
"summary": "전이를 시작하는 쓰기와 그 전이가 덮는 집합은 한 연산이어야 한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:beginning-a-transition-and-the-set-it-covers-are-one-operation",
|
|
"topic": "non-atomic-check-then-act",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F013",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md",
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md"
|
|
],
|
|
"sourceHeading": "bounded 와 unbounded 오버로드를 나란히 둔 포트",
|
|
"summary": "bounded 와 unbounded 오버로드를 나란히 둔 포트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:bounded-and-unbounded-side-by-side",
|
|
"topic": "retention-and-unbounded-growth",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F014",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md",
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md"
|
|
],
|
|
"sourceHeading": "cleanup 이 스스로 막겠다고 적은 장애를 일으키는 형태로 호출된다",
|
|
"summary": "cleanup 이 스스로 막겠다고 적은 장애를 일으키는 형태로 호출된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-cleanup-that-causes-the-outage-it-prevents",
|
|
"topic": "retention-and-unbounded-growth",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F015",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L233",
|
|
"analysis/grpc/grpc-advanced-streaming.md"
|
|
],
|
|
"sourceHeading": "재생 저장소와 중복 제거 맵에 제거 경로가 없다",
|
|
"summary": "재생 저장소와 중복 제거 맵에 제거 경로가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-replay-store-with-no-eviction-path",
|
|
"topic": "retention-and-unbounded-growth",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F016",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md",
|
|
"analysis/99-cross-scope.md"
|
|
],
|
|
"sourceHeading": "두 형태를 나란히 내놓는 포트는 이미 안전하지 않은 쪽을 고른 것이다",
|
|
"summary": "두 형태를 나란히 내놓는 포트는 이미 안전하지 않은 쪽을 고른 것이다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-port-that-offers-both-forms-has-chosen-the-unsafe-one",
|
|
"topic": "retention-and-unbounded-growth",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F017",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md",
|
|
"analysis/messaging/messaging-transport-spi.md"
|
|
],
|
|
"sourceHeading": "같은 안전 규칙은 하나의 공식과 하나의 강제 시점을 갖는다",
|
|
"summary": "같은 안전 규칙은 하나의 공식과 하나의 강제 시점을 갖는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:one-formula-and-one-enforcement-point-per-safety-rule",
|
|
"topic": "retention-and-unbounded-growth",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F018",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md"
|
|
],
|
|
"sourceHeading": "8단계 종료 순서 계약과 실제 종료 경로",
|
|
"summary": "8단계 종료 순서 계약과 실제 종료 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:the-eight-phase-shutdown-contract",
|
|
"topic": "drain-and-shutdown-ordering",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F019",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L647"
|
|
],
|
|
"sourceHeading": "순서 계약을 구현하는 것이 없고, 그것을 검증한다는 테스트는 enum 선언 순서만 본다",
|
|
"summary": "순서 계약을 구현하는 것이 없고, 그것을 검증한다는 테스트는 enum 선언 순서만 본다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:an-order-contract-with-no-implementation",
|
|
"topic": "drain-and-shutdown-ordering",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F020",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md"
|
|
],
|
|
"sourceHeading": "새 승인을 거절한다는 메서드가 단계만 기록하고 아무것도 거절하지 않는다",
|
|
"summary": "새 승인을 거절한다는 메서드가 단계만 기록하고 아무것도 거절하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:reject-new-admission-that-rejects-nothing",
|
|
"topic": "drain-and-shutdown-ordering",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F021",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md"
|
|
],
|
|
"sourceHeading": "비밀을 힙에서 지우는 마지막 단계가 종료 경로에 연결되지 않았다",
|
|
"summary": "비밀을 힙에서 지우는 마지막 단계가 종료 경로에 연결되지 않았다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-last-step-of-secret-erasure-is-not-wired",
|
|
"topic": "drain-and-shutdown-ordering",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F022",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md"
|
|
],
|
|
"sourceHeading": "선언 순서를 단언하는 테스트는 그 순서를 읽는 코드가 있을 때만 게이트다",
|
|
"summary": "선언 순서를 단언하는 테스트는 그 순서를 읽는 코드가 있을 때만 게이트다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-declaration-order-test-is-a-gate-only-if-something-reads-that-order",
|
|
"topic": "drain-and-shutdown-ordering",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F023",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md",
|
|
"analysis/messaging/messaging-admin-runtime.md"
|
|
],
|
|
"sourceHeading": "그 속성을 보일 수 없는 대역 위에서 통과한 테스트는 증인이 아니다",
|
|
"summary": "그 속성을 보일 수 없는 대역 위에서 통과한 테스트는 증인이 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-fake-that-cannot-show-the-property-is-not-a-witness",
|
|
"topic": "drain-and-shutdown-ordering",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F024",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md"
|
|
],
|
|
"sourceHeading": "승인·검증·실행의 분리와 그것을 타입으로 표현하기",
|
|
"summary": "승인·검증·실행의 분리와 그것을 타입으로 표현하기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:approval-verification-execution",
|
|
"topic": "operator-approval-and-destructive-operations",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F025",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L862"
|
|
],
|
|
"sourceHeading": "재개된 리드라이브가 옮기지 못한 메시지를 영구히 건너뛴다",
|
|
"summary": "재개된 리드라이브가 옮기지 못한 메시지를 영구히 건너뛴다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-resumed-redrive-skips-what-it-could-not-move",
|
|
"topic": "operator-approval-and-destructive-operations",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F026",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md",
|
|
"analysis/messaging/messaging-admin-api.md"
|
|
],
|
|
"sourceHeading": "위조 가능한 승인이 하필 되돌릴 수 없는 작업 쪽에만 남았다",
|
|
"summary": "위조 가능한 승인이 하필 되돌릴 수 없는 작업 쪽에만 남았다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-forgeable-approval-survived-on-the-irreversible-half",
|
|
"topic": "operator-approval-and-destructive-operations",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F027",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L905"
|
|
],
|
|
"sourceHeading": "BLOCKING 이면 기동이 실패한다는 보장이 어떤 배선에서도 실행되지 않는다",
|
|
"summary": "BLOCKING 이면 기동이 실패한다는 보장이 어떤 배선에서도 실행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:blocking-means-startup-fails-and-nothing-runs-it",
|
|
"topic": "operator-approval-and-destructive-operations",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F028",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L925"
|
|
],
|
|
"sourceHeading": "서명 능력과 검증 능력은 같은 객체에 두지 않는다",
|
|
"summary": "서명 능력과 검증 능력은 같은 객체에 두지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:signing-and-verifying-do-not-share-an-object",
|
|
"topic": "operator-approval-and-destructive-operations",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F029",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md"
|
|
],
|
|
"sourceHeading": "재개는 인덱스가 아니라 신원으로 한다",
|
|
"summary": "재개는 인덱스가 아니라 신원으로 한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:resume-by-identity-not-by-index",
|
|
"topic": "operator-approval-and-destructive-operations",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F030",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md"
|
|
],
|
|
"sourceHeading": "권한 거부가 보안이 아니라 구성 오류로 기록된다",
|
|
"summary": "권한 거부가 보안이 아니라 구성 오류로 기록된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:an-authorization-denial-recorded-as-a-configuration-error",
|
|
"topic": "failure-category-across-adapters",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F031",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md",
|
|
"analysis/messaging/messaging-pulsar-experimental.md"
|
|
],
|
|
"sourceHeading": "종료 중이라는 사정이 업무의 영구 실패로 분류된다",
|
|
"summary": "종료 중이라는 사정이 업무의 영구 실패로 분류된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:a-closing-transport-reported-as-a-permanent-business-failure",
|
|
"topic": "failure-category-across-adapters",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F032",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md",
|
|
"analysis/messaging/messaging-security.md"
|
|
],
|
|
"sourceHeading": "실패 범주는 재시도·DLQ·대시보드 사이의 계약이다",
|
|
"summary": "실패 범주는 재시도·DLQ·대시보드 사이의 계약이다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-category-is-a-contract-between-retry-dlq-and-dashboard",
|
|
"topic": "failure-category-across-adapters",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "A25-F033",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md",
|
|
"analysis/messaging/messaging-pulsar-experimental.md"
|
|
],
|
|
"sourceHeading": "이 세대의 사정은 업무의 영구 실패가 아니다",
|
|
"summary": "이 세대의 사정은 업무의 영구 실패가 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:this-generations-circumstance-is-not-a-permanent-failure",
|
|
"topic": "failure-category-across-adapters",
|
|
"reason": "43개 리프 SSOT 재분해에서 나온 노드. 기존 Topic 이 담지 않는 문제 공간이라 새 Topic 으로 냈다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADMIN-L131",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md#L131"
|
|
],
|
|
"sourceHeading": "`rejectNewAdmission()` 이 단계만 기록하고 아무것도 거절하지 않는다",
|
|
"summary": "`rejectNewAdmission()` 이 단계만 기록하고 아무것도 거절하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-admin-f01",
|
|
"module": "grpc-admin",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADMIN-L162",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md#L162"
|
|
],
|
|
"sourceHeading": "비밀 필드 검사가 스냅숏의 네 구획 중 하나에만 적용된다",
|
|
"summary": "비밀 필드 검사가 스냅숏의 네 구획 중 하나에만 적용된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-admin-f02",
|
|
"module": "grpc-admin",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADMIN-L181",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md#L181"
|
|
],
|
|
"sourceHeading": "배수 조정자가 가변이고 동기화가 없다",
|
|
"summary": "배수 조정자가 가변이고 동기화가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-admin-f03",
|
|
"module": "grpc-admin",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_BOOTSTRAP-L153",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L153"
|
|
],
|
|
"sourceHeading": "등급 재정의에 하한이 없어 \"켤 수 없다\" 는 등급이 켜질 수 있다",
|
|
"summary": "등급 재정의에 하한이 없어 \"켤 수 없다\" 는 등급이 켜질 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-bootstrap-f01",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_BOOTSTRAP-L182",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L182"
|
|
],
|
|
"sourceHeading": "승격 게이트가 하향 전이도 승격 규칙으로 판정하고, javadoc 이 약속한 거부는 없다",
|
|
"summary": "승격 게이트가 하향 전이도 승격 규칙으로 판정하고, javadoc 이 약속한 거부는 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-bootstrap-f02",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_BOOTSTRAP-L209",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L209"
|
|
],
|
|
"sourceHeading": "깃발 홀더가 가변이고 동기화가 없다",
|
|
"summary": "깃발 홀더가 가변이고 동기화가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-bootstrap-f03",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_BOOTSTRAP-L286",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L286"
|
|
],
|
|
"sourceHeading": "`capabilitiesDraggedAlong` 은 독립성을 증명하지 않는다. 상수를 상수와 비교한다",
|
|
"summary": "`capabilitiesDraggedAlong` 은 독립성을 증명하지 않는다. 상수를 상수와 비교한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-bootstrap-f04",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_BOOTSTRAP-L312",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L312"
|
|
],
|
|
"sourceHeading": "예외가 들고 있는 능력이 `transient` 라 역직렬화 뒤 사라진다",
|
|
"summary": "예외가 들고 있는 능력이 `transient` 라 역직렬화 뒤 사라진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-bootstrap-f05",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_COMPAT-L120",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-compat.md#L120"
|
|
],
|
|
"sourceHeading": "통합 다리의 메타데이터 조립이 메타데이터 예산을 검사하지 않는다",
|
|
"summary": "통합 다리의 메타데이터 조립이 메타데이터 예산을 검사하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-compat-f01",
|
|
"module": "grpc-advanced-compat",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_COMPAT-L149",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-compat.md#L149"
|
|
],
|
|
"sourceHeading": "반응형 표면 두 타입은 테스트조차 없다",
|
|
"summary": "반응형 표면 두 타입은 테스트조차 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-compat-f02",
|
|
"module": "grpc-advanced-compat",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_COMPAT-L162",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-compat.md#L162"
|
|
],
|
|
"sourceHeading": "저장소가 참조 프록시 설정을 갖고 있는데, 그것을 판정할 코드에 넣지 않는다",
|
|
"summary": "저장소가 참조 프록시 설정을 갖고 있는데, 그것을 판정할 코드에 넣지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-compat-f03",
|
|
"module": "grpc-advanced-compat",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_DIAGNOSTICS-L167",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-diagnostics.md#L167"
|
|
],
|
|
"sourceHeading": "마스킹이 IPv4 만 알고, 그 결과 \"마스킹되지 않은 주소\" 검사가 나머지 형태를 전부 통과시킨다",
|
|
"summary": "마스킹이 IPv4 만 알고, 그 결과 \"마스킹되지 않은 주소\" 검사가 나머지 형태를 전부 통과시킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-diagnostics-f01",
|
|
"module": "grpc-advanced-diagnostics",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_DIAGNOSTICS-L206",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-diagnostics.md#L206"
|
|
],
|
|
"sourceHeading": "금지 필드 검사가 키에만 적용되고 값에는 적용되지 않는다",
|
|
"summary": "금지 필드 검사가 키에만 적용되고 값에는 적용되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-diagnostics-f02",
|
|
"module": "grpc-advanced-diagnostics",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_DIAGNOSTICS-L218",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-diagnostics.md#L218"
|
|
],
|
|
"sourceHeading": "\"실환경 증거\" 가 두 리프에 반씩 있고 서로 만나지 않는다",
|
|
"summary": "\"실환경 증거\" 가 두 리프에 반씩 있고 서로 만나지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-diagnostics-f03",
|
|
"module": "grpc-advanced-diagnostics",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_EDITION-L180",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-edition.md#L180"
|
|
],
|
|
"sourceHeading": "비교 픽스처에 비교 대상이 없다",
|
|
"summary": "비교 픽스처에 비교 대상이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-edition-f01",
|
|
"module": "grpc-advanced-edition",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_EDITION-L206",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-edition.md#L206"
|
|
],
|
|
"sourceHeading": "승격 차단 목록에 담금 기간과 실환경 항목이 없다",
|
|
"summary": "승격 차단 목록에 담금 기간과 실환경 항목이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-edition-f02",
|
|
"module": "grpc-advanced-edition",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_EDITION-L216",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-edition.md#L216"
|
|
],
|
|
"sourceHeading": "정책의 자바독이 하지 않는 거부를 한다고 적고, 승격 승인이 두 곳에 따로 있다",
|
|
"summary": "정책의 자바독이 하지 않는 거부를 한다고 적고, 승격 승인이 두 곳에 따로 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-edition-f03",
|
|
"module": "grpc-advanced-edition",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_RESILIENCE-L136",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-resilience.md#L136"
|
|
],
|
|
"sourceHeading": "부트스트랩 대조가 문서 어디든의 부분 문자열을 본다",
|
|
"summary": "부트스트랩 대조가 문서 어디든의 부분 문자열을 본다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-resilience-f01",
|
|
"module": "grpc-advanced-resilience",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_RESILIENCE-L155",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-resilience.md#L155"
|
|
],
|
|
"sourceHeading": "대체 선택기는 사용자 정의 선택기가 받는 보호를 받지 않는다",
|
|
"summary": "대체 선택기는 사용자 정의 선택기가 받는 보호를 받지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-resilience-f02",
|
|
"module": "grpc-advanced-resilience",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_RESILIENCE-L176",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-resilience.md#L176"
|
|
],
|
|
"sourceHeading": "리졸버의 개정 가드가 비교 후 교체가 아니다",
|
|
"summary": "리졸버의 개정 가드가 비교 후 교체가 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-resilience-f03",
|
|
"module": "grpc-advanced-resilience",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_STREAMING-L125",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-streaming.md#L125"
|
|
],
|
|
"sourceHeading": "클래스가 비판한 무제한 증가를 형제 맵이 그대로 한다",
|
|
"summary": "클래스가 비판한 무제한 증가를 형제 맵이 그대로 한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-streaming-f01",
|
|
"module": "grpc-advanced-streaming",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_STREAMING-L159",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-streaming.md#L159"
|
|
],
|
|
"sourceHeading": "클라이언트 스트림 정책의 네 상한 중 둘은 읽는 코드가 없다",
|
|
"summary": "클라이언트 스트림 정책의 네 상한 중 둘은 읽는 코드가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-streaming-f02",
|
|
"module": "grpc-advanced-streaming",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_ADVANCED_STREAMING-L180",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-streaming.md#L180"
|
|
],
|
|
"sourceHeading": "체크포인트 전진이 `ConcurrentMap` 위의 확인 후 쓰기다",
|
|
"summary": "체크포인트 전진이 `ConcurrentMap` 위의 확인 후 쓰기다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-advanced-streaming-f03",
|
|
"module": "grpc-advanced-streaming",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CLIENT-L120",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-client.md#L120"
|
|
],
|
|
"sourceHeading": "`rotate` 가 비교 후 교체가 아니라 덮어쓰기다",
|
|
"summary": "`rotate` 가 비교 후 교체가 아니라 덮어쓰기다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-client-f01",
|
|
"module": "grpc-client",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CLIENT-L149",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-client.md#L149"
|
|
],
|
|
"sourceHeading": "비원자적 감소가 세대를 영구히 회수 불가로 만든다",
|
|
"summary": "비원자적 감소가 세대를 영구히 회수 불가로 만든다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-client-f02",
|
|
"module": "grpc-client",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CLIENT-L176",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-client.md#L176"
|
|
],
|
|
"sourceHeading": "배수 목록의 순회가 동기화 밖에서 일어난다",
|
|
"summary": "배수 목록의 순회가 동기화 밖에서 일어난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-client-f03",
|
|
"module": "grpc-client",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CLIENT-L199",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-client.md#L199"
|
|
],
|
|
"sourceHeading": "프로파일 검증기가 javadoc 이 든 두 실수 중 하나만 검사한다",
|
|
"summary": "프로파일 검증기가 javadoc 이 든 두 실수 중 하나만 검사한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-client-f04",
|
|
"module": "grpc-client",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CODEGEN-L190",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-codegen.md#L190"
|
|
],
|
|
"sourceHeading": "Buf 수명주기 태스크 목록이 빌드와 대조되지 않는다. 테스트는 목록을 자기 자신과 비교한다",
|
|
"summary": "Buf 수명주기 태스크 목록이 빌드와 대조되지 않는다. 테스트는 목록을 자기 자신과 비교한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-codegen-f01",
|
|
"module": "grpc-codegen",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CODEGEN-L220",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-codegen.md#L220"
|
|
],
|
|
"sourceHeading": "릴리스 버전 불변성이 프로세스 안에서만 성립한다",
|
|
"summary": "릴리스 버전 불변성이 프로세스 안에서만 성립한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-codegen-f02",
|
|
"module": "grpc-codegen",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CODEGEN-L239",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-codegen.md#L239"
|
|
],
|
|
"sourceHeading": "픽스처의 메서드 경로가 서비스 × 메서드 교차곱이다",
|
|
"summary": "픽스처의 메서드 경로가 서비스 × 메서드 교차곱이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-codegen-f03",
|
|
"module": "grpc-codegen",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CODEGEN-L287",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-codegen.md#L287"
|
|
],
|
|
"sourceHeading": "`sha256:` 검사가 길이 15자 이상만 요구한다. 저장소 자신의 테스트가 32자 해시를 통과시킨다",
|
|
"summary": "`sha256:` 검사가 길이 15자 이상만 요구한다. 저장소 자신의 테스트가 32자 해시를 통과시킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-codegen-f04",
|
|
"module": "grpc-codegen",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CORE_API-L140",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L140"
|
|
],
|
|
"sourceHeading": "정책 목록의 가장 강한 성질을 이 저장소에서는 쓸 수 없다",
|
|
"summary": "정책 목록의 가장 강한 성질을 이 저장소에서는 쓸 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-core-api-f01",
|
|
"module": "grpc-core-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CORE_API-L157",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L157"
|
|
],
|
|
"sourceHeading": "모듈 목록 테스트가 레지스트리와 목록을 붙들지 않는다",
|
|
"summary": "모듈 목록 테스트가 레지스트리와 목록을 붙들지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-core-api-f02",
|
|
"module": "grpc-core-api",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CORE_API-L180",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L180"
|
|
],
|
|
"sourceHeading": "`RESOURCE_EXHAUSTED` 매핑이 그 상태의 두 출처 중 하나만 가정한다",
|
|
"summary": "`RESOURCE_EXHAUSTED` 매핑이 그 상태의 두 출처 중 하나만 가정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-core-api-f03",
|
|
"module": "grpc-core-api",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CORE_API-L200",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L200"
|
|
],
|
|
"sourceHeading": "하나의 상태 코드가 같은 메서드 안에서 두 답을 갖는다",
|
|
"summary": "하나의 상태 코드가 같은 메서드 안에서 두 답을 갖는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-core-api-f04",
|
|
"module": "grpc-core-api",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CORE_API-L219",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L219"
|
|
],
|
|
"sourceHeading": "메타데이터 예산의 두 성분 중 하나는 강제되지 않고, 나머지 하나는 바이트가 아니라 문자를 센다",
|
|
"summary": "메타데이터 예산의 두 성분 중 하나는 강제되지 않고, 나머지 하나는 바이트가 아니라 문자를 센다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-core-api-f05",
|
|
"module": "grpc-core-api",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_CORE_API-L241",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L241"
|
|
],
|
|
"sourceHeading": "직렬화 가능하다고 선언한 예외가 자기 내용을 직렬화하지 않는다",
|
|
"summary": "직렬화 가능하다고 선언한 예외가 자기 내용을 직렬화하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-core-api-f06",
|
|
"module": "grpc-core-api",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_DISCOVERY-L152",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-discovery.md#L152"
|
|
],
|
|
"sourceHeading": "프로파일이 스트림 재접속 예산을 선언하는데 그것이 함의하는 DNS 갱신 주기를 정하지 않는다",
|
|
"summary": "프로파일이 스트림 재접속 예산을 선언하는데 그것이 함의하는 DNS 갱신 주기를 정하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-discovery-f01",
|
|
"module": "grpc-discovery",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_DISCOVERY-L177",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-discovery.md#L177"
|
|
],
|
|
"sourceHeading": "리졸버 검증기의 규칙이 하나뿐인데 javadoc 은 복수형으로 서술한다",
|
|
"summary": "리졸버 검증기의 규칙이 하나뿐인데 javadoc 은 복수형으로 서술한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-discovery-f02",
|
|
"module": "grpc-discovery",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_DISCOVERY-L187",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-discovery.md#L187"
|
|
],
|
|
"sourceHeading": "목록으로 보고하는 검증기가 주소 수 0 에서 던진다",
|
|
"summary": "목록으로 보고하는 검증기가 주소 수 0 에서 던진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-discovery-f03",
|
|
"module": "grpc-discovery",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_OBSERVABILITY-L197",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-observability.md#L197"
|
|
],
|
|
"sourceHeading": "`queueHighWatermark` 는 요구되고 검증되지만 아무도 읽지 않는다",
|
|
"summary": "`queueHighWatermark` 는 요구되고 검증되지만 아무도 읽지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-observability-f01",
|
|
"module": "grpc-observability",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_OBSERVABILITY-L213",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-observability.md#L213"
|
|
],
|
|
"sourceHeading": "`deadlineRemaining` 도 meter 가 없다. javadoc 은 그것이 기록된다고 말한다",
|
|
"summary": "`deadlineRemaining` 도 meter 가 없다. javadoc 은 그것이 기록된다고 말한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-observability-f02",
|
|
"module": "grpc-observability",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_OBSERVABILITY-L238",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-observability.md#L238"
|
|
],
|
|
"sourceHeading": "허용 태그 8개 중 둘은 값이 자유 문자열이고, 그중 하나는 bounded 열거형이 이미 존재한다",
|
|
"summary": "허용 태그 8개 중 둘은 값이 자유 문자열이고, 그중 하나는 bounded 열거형이 이미 존재한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-observability-f03",
|
|
"module": "grpc-observability",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_OPERATION_LEDGER_JPA-L184",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-operation-ledger-jpa.md#L184"
|
|
],
|
|
"sourceHeading": "낙관적 잠금 컬럼이 없어 전이 가드가 메모리 안에만 있다",
|
|
"summary": "낙관적 잠금 컬럼이 없어 전이 가드가 메모리 안에만 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-operation-ledger-jpa-f01",
|
|
"module": "grpc-operation-ledger-jpa",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_OPERATION_LEDGER_JPA-L192",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-operation-ledger-jpa.md#L192"
|
|
],
|
|
"sourceHeading": "`markCommitted` 는 던지고 `markFailed` 는 조용히 넘어간다",
|
|
"summary": "`markCommitted` 는 던지고 `markFailed` 는 조용히 넘어간다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-operation-ledger-jpa-f02",
|
|
"module": "grpc-operation-ledger-jpa",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L184",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L184"
|
|
],
|
|
"sourceHeading": "스트림 승인의 경계가 동시성 아래에서 새고, caller별 맵이 줄지 않는다",
|
|
"summary": "스트림 승인의 경계가 동시성 아래에서 새고, caller별 맵이 줄지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f01",
|
|
"module": "grpc-policy",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L204",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L204"
|
|
],
|
|
"sourceHeading": "자격증명 회전이 비교 후 교체가 아니고, 배수 완료가 진행 중인 회전을 되돌릴 수 있다",
|
|
"summary": "자격증명 회전이 비교 후 교체가 아니고, 배수 완료가 진행 중인 회전을 되돌릴 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f02",
|
|
"module": "grpc-policy",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L249",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L249"
|
|
],
|
|
"sourceHeading": "직렬 스트림 기록기의 가장 오래된 것 버리기가 잘못된 메시지의 바이트를 뺀다",
|
|
"summary": "직렬 스트림 기록기의 가장 오래된 것 버리기가 잘못된 메시지의 바이트를 뺀다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f03",
|
|
"module": "grpc-policy",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L271",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L271"
|
|
],
|
|
"sourceHeading": "완료 조정자가 요청 경로에서 동기화 없는 가변 리스트를 변경한다",
|
|
"summary": "완료 조정자가 요청 경로에서 동기화 없는 가변 리스트를 변경한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f04",
|
|
"module": "grpc-policy",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L285",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L285"
|
|
],
|
|
"sourceHeading": "스트림 수명 조정자의 배수 신호가 스레드를 건너면서 `volatile` 이 아니다",
|
|
"summary": "스트림 수명 조정자의 배수 신호가 스레드를 건너면서 `volatile` 이 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f05",
|
|
"module": "grpc-policy",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L305",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L305"
|
|
],
|
|
"sourceHeading": "오류 노출 거부 목록의 \"호스트와 포트\" 규칙이 IPv4 점표기만 본다",
|
|
"summary": "오류 노출 거부 목록의 \"호스트와 포트\" 규칙이 IPv4 점표기만 본다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f06",
|
|
"module": "grpc-policy",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_POLICY-L324",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L324"
|
|
],
|
|
"sourceHeading": "`clearAfterTask` 는 합법 값이 하나뿐인 성분이고, 아무도 읽지 않는다",
|
|
"summary": "`clearAfterTask` 는 합법 값이 하나뿐인 성분이고, 아무도 읽지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-policy-f07",
|
|
"module": "grpc-policy",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_PROTO_CONTRACT-L175",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-proto-contract.md#L175"
|
|
],
|
|
"sourceHeading": "`reserved 2 to 5;` 범위가 개별 숫자로만 수집되어 `RESERVED_HISTORY` 오탐이 된다",
|
|
"summary": "`reserved 2 to 5;` 범위가 개별 숫자로만 수집되어 `RESERVED_HISTORY` 오탐이 된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-proto-contract-f01",
|
|
"module": "grpc-proto-contract",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_PROTO_CONTRACT-L191",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-proto-contract.md#L191"
|
|
],
|
|
"sourceHeading": "반환 목록이 자바독이 약속한 source order 가 아니다",
|
|
"summary": "반환 목록이 자바독이 약속한 source order 가 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-proto-contract-f02",
|
|
"module": "grpc-proto-contract",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_PROTO_CONTRACT-L203",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-proto-contract.md#L203"
|
|
],
|
|
"sourceHeading": "커밋 스키마 게이트가 파일 목록을 하드코딩한다",
|
|
"summary": "커밋 스키마 게이트가 파일 목록을 하드코딩한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-proto-contract-f03",
|
|
"module": "grpc-proto-contract",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_PROTO_CONTRACT-L265",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-proto-contract.md#L265"
|
|
],
|
|
"sourceHeading": "열거형 안의 `reserved` 는 수집되지 않는다",
|
|
"summary": "열거형 안의 `reserved` 는 수집되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-proto-contract-f04",
|
|
"module": "grpc-proto-contract",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SERVER-L140",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-server.md#L140"
|
|
],
|
|
"sourceHeading": "두 아키텍처 규칙이 저장소 소스에 적용되지 않는다",
|
|
"summary": "두 아키텍처 규칙이 저장소 소스에 적용되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-server-f01",
|
|
"module": "grpc-server",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SERVER-L167",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-server.md#L167"
|
|
],
|
|
"sourceHeading": "원시 API 규칙이 import 문만 보므로 완전 수식 사용과 와일드카드를 놓친다",
|
|
"summary": "원시 API 규칙이 import 문만 보므로 완전 수식 사용과 와일드카드를 놓친다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-server-f02",
|
|
"module": "grpc-server",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SERVER-L196",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-server.md#L196"
|
|
],
|
|
"sourceHeading": "빌더 경로에서 순서 규칙 넷 중 셋이 발화할 수 없다",
|
|
"summary": "빌더 경로에서 순서 규칙 넷 중 셋이 발화할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-server-f03",
|
|
"module": "grpc-server",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SERVER-L211",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-server.md#L211"
|
|
],
|
|
"sourceHeading": "승인 제어기의 세 메서드가 원자적이지 않고, 큐 계수기를 되돌리는 경로가 없다",
|
|
"summary": "승인 제어기의 세 메서드가 원자적이지 않고, 큐 계수기를 되돌리는 경로가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-server-f04",
|
|
"module": "grpc-server",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SPRING_BOOT_STARTER-L183",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L183"
|
|
],
|
|
"sourceHeading": "시작 검증기가 시작 시 실행되지 않는다",
|
|
"summary": "시작 검증기가 시작 시 실행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-spring-boot-starter-f01",
|
|
"module": "grpc-spring-boot-starter",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SPRING_BOOT_STARTER-L221",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L221"
|
|
],
|
|
"sourceHeading": "자동 설정이 `transport` 를 읽지 않고 전송을 하드코딩한다",
|
|
"summary": "자동 설정이 `transport` 를 읽지 않고 전송을 하드코딩한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-spring-boot-starter-f02",
|
|
"module": "grpc-spring-boot-starter",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SPRING_BOOT_STARTER-L236",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L236"
|
|
],
|
|
"sourceHeading": "`default-unary-deadline` 은 읽는 코드가 저장소에 없다",
|
|
"summary": "`default-unary-deadline` 은 읽는 코드가 저장소에 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-spring-boot-starter-f03",
|
|
"module": "grpc-spring-boot-starter",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_SPRING_BOOT_STARTER-L249",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L249"
|
|
],
|
|
"sourceHeading": "반사 모드를 명시하면 서비스·역할 허용 목록이 조용히 하드코딩으로 바뀐다",
|
|
"summary": "반사 모드를 명시하면 서비스·역할 허용 목록이 조용히 하드코딩으로 바뀐다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-spring-boot-starter-f04",
|
|
"module": "grpc-spring-boot-starter",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_TESTKIT-L153",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L153"
|
|
],
|
|
"sourceHeading": "네 레인이 `check` 에 붙지 않고, 이 가족을 이름으로 부르는 워크플로가 없다",
|
|
"summary": "네 레인이 `check` 에 붙지 않고, 이 가족을 이름으로 부르는 워크플로가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-testkit-f01",
|
|
"module": "grpc-testkit",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_TESTKIT-L172",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L172"
|
|
],
|
|
"sourceHeading": "릴리스 게이트의 입력이 전부 호출자가 손으로 만드는 값이다",
|
|
"summary": "릴리스 게이트의 입력이 전부 호출자가 손으로 만드는 값이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-testkit-f02",
|
|
"module": "grpc-testkit",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_TESTKIT-L187",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L187"
|
|
],
|
|
"sourceHeading": "고장 레인의 유일한 실소켓 시험이 자기가 관측한 것을 버리고 리터럴로 증거를 만든다",
|
|
"summary": "고장 레인의 유일한 실소켓 시험이 자기가 관측한 것을 버리고 리터럴로 증거를 만든다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-testkit-f03",
|
|
"module": "grpc-testkit",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_TESTKIT-L233",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L233"
|
|
],
|
|
"sourceHeading": "호환성 표의 레인 이름과 빌드의 레인 이름이 서로 다른 집합이다",
|
|
"summary": "호환성 표의 레인 이름과 빌드의 레인 이름이 서로 다른 집합이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-testkit-f04",
|
|
"module": "grpc-testkit",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_TESTKIT-L245",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L245"
|
|
],
|
|
"sourceHeading": "계약 스위트 둘이 결과를 만드는 코드를 갖지 않는다",
|
|
"summary": "계약 스위트 둘이 결과를 만드는 코드를 갖지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-testkit-f05",
|
|
"module": "grpc-testkit",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-GRPC_TESTKIT-L262",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L262"
|
|
],
|
|
"sourceHeading": "던져 버릴 비밀번호를 만들어 놓고 외부 프로세스의 명령줄에 싣는다",
|
|
"summary": "던져 버릴 비밀번호를 만들어 놓고 외부 프로세스의 명령줄에 싣는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:grpc-testkit-f06",
|
|
"module": "grpc-testkit",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L915",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L915"
|
|
],
|
|
"sourceHeading": "`DestructiveOperationGuard` 의 두 분기가 문서에도 없고 테스트에도 없다",
|
|
"summary": "`DestructiveOperationGuard` 의 두 분기가 문서에도 없고 테스트에도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f01",
|
|
"module": "messaging-admin-api",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L944",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L944"
|
|
],
|
|
"sourceHeading": "계획 다이제스트가 승인 정규 형식과 다른 인코딩을 쓴다",
|
|
"summary": "계획 다이제스트가 승인 정규 형식과 다른 인코딩을 쓴다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f02",
|
|
"module": "messaging-admin-api",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L952",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L952"
|
|
],
|
|
"sourceHeading": "`TopologyManagementMode` 가 어디에도 연결되어 있지 않다",
|
|
"summary": "`TopologyManagementMode` 가 어디에도 연결되어 있지 않다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f03",
|
|
"module": "messaging-admin-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L956",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L956"
|
|
],
|
|
"sourceHeading": "운영자용 표면 전체에 프로덕션 소비자가 없다",
|
|
"summary": "운영자용 표면 전체에 프로덕션 소비자가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f04",
|
|
"module": "messaging-admin-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L962",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L962"
|
|
],
|
|
"sourceHeading": "`VerifiedApproval` 의 위조 방지가 package-private 에만 의존한다",
|
|
"summary": "`VerifiedApproval` 의 위조 방지가 package-private 에만 의존한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f05",
|
|
"module": "messaging-admin-api",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L968",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L968"
|
|
],
|
|
"sourceHeading": "`messaging-policy` 의존이 import 0건이다",
|
|
"summary": "`messaging-policy` 의존이 import 0건이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f06",
|
|
"module": "messaging-admin-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_API-L972",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L972"
|
|
],
|
|
"sourceHeading": "같은 인가 실패 코드가 세 파일에 문자열 리터럴로 흩어져 있다",
|
|
"summary": "같은 인가 실패 코드가 세 파일에 문자열 리터럴로 흩어져 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-api-f07",
|
|
"module": "messaging-admin-api",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L883",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L883"
|
|
],
|
|
"sourceHeading": "파괴적 작업의 승인만 위조 가능한 형태로 남아 있다",
|
|
"summary": "파괴적 작업의 승인만 위조 가능한 형태로 남아 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f01",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L910",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L910"
|
|
],
|
|
"sourceHeading": "토폴로지 검증 스택이 두 벌이고 판정이 어긋난다",
|
|
"summary": "토폴로지 검증 스택이 두 벌이고 판정이 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f02",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L918",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L918"
|
|
],
|
|
"sourceHeading": "오케스트레이터가 어디에서도 실행되지 않는다",
|
|
"summary": "오케스트레이터가 어디에서도 실행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f03",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L924",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L924"
|
|
],
|
|
"sourceHeading": "public 인터페이스를 패키지 밖에서 구현할 수 없다",
|
|
"summary": "public 인터페이스를 패키지 밖에서 구현할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f04",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L930",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L930"
|
|
],
|
|
"sourceHeading": "감사 싱크가 중복 선언되어 있고 레닥션 계약이 유실된다",
|
|
"summary": "감사 싱크가 중복 선언되어 있고 레닥션 계약이 유실된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f05",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L936",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L936"
|
|
],
|
|
"sourceHeading": "저널의 `itemsCompleted` 단조성이 인터페이스 계약에 없다",
|
|
"summary": "저널의 `itemsCompleted` 단조성이 인터페이스 계약에 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f06",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L942",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L942"
|
|
],
|
|
"sourceHeading": "리플레이가 리스를 받지만 재개하지 않는다",
|
|
"summary": "리플레이가 리스를 받지만 재개하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f07",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L948",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L948"
|
|
],
|
|
"sourceHeading": "격리 리플레이의 guard 우회가 `dryRun` 파라미터로 표현된다",
|
|
"summary": "격리 리플레이의 guard 우회가 `dryRun` 파라미터로 표현된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f08",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L957",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L957"
|
|
],
|
|
"sourceHeading": "선언된 의존 6개 중 3개가 import 0건",
|
|
"summary": "선언된 의존 6개 중 3개가 import 0건",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f09",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_ADMIN_RUNTIME-L961",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L961"
|
|
],
|
|
"sourceHeading": "실패한 리드라이브 항목의 사유가 어디에도 남지 않는다",
|
|
"summary": "실패한 리드라이브 항목의 사유가 어디에도 남지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-admin-runtime-f10",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLAIM_CHECK-L507",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L507"
|
|
],
|
|
"sourceHeading": "배포 아티팩트가 싣지만 아무도 부르지 않고, 다른 곳의 에러 메시지가 이 경로를 권한다",
|
|
"summary": "배포 아티팩트가 싣지만 아무도 부르지 않고, 다른 곳의 에러 메시지가 이 경로를 권한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-claim-check-f01",
|
|
"module": "messaging-claim-check",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLAIM_CHECK-L516",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L516"
|
|
],
|
|
"sourceHeading": "claim check 문턱이 두 곳에서 독립적으로 정해진다",
|
|
"summary": "같은 튜닝 값이 두 계층에 있으면 어느 쪽이 이기는지 정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-claim-check-f02",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLAIM_CHECK-L525",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L525"
|
|
],
|
|
"sourceHeading": "예외 승격이 에러 코드 문자열 접미사에 의존한다",
|
|
"summary": "예외 승격이 에러 코드 문자열 접미사에 의존한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-claim-check-f03",
|
|
"module": "messaging-claim-check",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLAIM_CHECK-L534",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L534"
|
|
],
|
|
"sourceHeading": "`ClaimCheckPublisher`가 이 leaf의 테스트에 등장하지 않는다",
|
|
"summary": "leaf의 각 public 클래스는 자기 레인에 테스트를 갖는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-claim-check-f04",
|
|
"module": "messaging-claim-check",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLAIM_CHECK-L543",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L543"
|
|
],
|
|
"sourceHeading": "보존 sweep이 없다",
|
|
"summary": "보존 sweep이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-claim-check-f05",
|
|
"module": "messaging-claim-check",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLOUDEVENTS-L518",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L518"
|
|
],
|
|
"sourceHeading": "상호운용을 위한 매퍼가 명세 준수 이벤트를 분류되지 않은 예외로 거절한다",
|
|
"summary": "상호운용을 위한 매퍼가 명세 준수 이벤트를 분류되지 않은 예외로 거절한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-cloudevents-f01",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "SSOT 의 `다음 단계` 가 CASE 후보라고 명시한다. 같은 줄 뒤의 DECISION 언급은 선택지 (b) 에 대한 것이고 SSOT 스스로 `NEEDS_DECISION` 이라고 적었으므로 emit 대상이 아니다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLOUDEVENTS-L529",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L529"
|
|
],
|
|
"sourceHeading": "배포 아티팩트가 싣지만 아무도 부르지 않는다",
|
|
"summary": "배포 아티팩트가 싣지만 아무도 부르지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-cloudevents-f02",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLOUDEVENTS-L538",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L538"
|
|
],
|
|
"sourceHeading": "왕복이 다섯 필드를 버리고, 테스트가 그 필드를 비교하지 않는다",
|
|
"summary": "왕복이라 부르는 테스트는 무엇을 보존하지 않는지도 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-cloudevents-f03",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLOUDEVENTS-L547",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L547"
|
|
],
|
|
"sourceHeading": "`dataschema`가 채워질 경로가 없다",
|
|
"summary": "`dataschema`가 채워질 경로가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-cloudevents-f04",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CLOUDEVENTS-L556",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L556"
|
|
],
|
|
"sourceHeading": "`CloudEventMapper` javadoc의 범위 제한이 강제되지 않는다",
|
|
"summary": "문서가 범위를 제한하면 그 제한을 누가 강제하는지 같이 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-cloudevents-f05",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CORE_API-L835",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L835"
|
|
],
|
|
"sourceHeading": "선언된 핸들러 계약이 배선된 것과 다르다",
|
|
"summary": "선언된 핸들러 계약이 배선된 것과 다르다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-core-api-f01",
|
|
"module": "messaging-core-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CORE_API-L844",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L844"
|
|
],
|
|
"sourceHeading": "배치 metadata를 만들고 넘길 곳이 없다",
|
|
"summary": "배치 metadata를 만들고 넘길 곳이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-core-api-f02",
|
|
"module": "messaging-core-api",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CORE_API-L862",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L862"
|
|
],
|
|
"sourceHeading": "12개 예외가 선언만 되어 있다",
|
|
"summary": "12개 예외가 선언만 되어 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-core-api-f03",
|
|
"module": "messaging-core-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CORE_API-L871",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L871"
|
|
],
|
|
"sourceHeading": "`MessagingRedactor`가 상수 대신 문자열 리터럴을 쓴다",
|
|
"summary": "`MessagingRedactor`가 상수 대신 문자열 리터럴을 쓴다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-core-api-f04",
|
|
"module": "messaging-core-api",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_CORE_API-L880",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L880"
|
|
],
|
|
"sourceHeading": "`WireSafeText`의 규칙이 leaf 경계에서 멈춘다",
|
|
"summary": "`WireSafeText`의 규칙이 leaf 경계에서 멈춘다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-core-api-f05",
|
|
"module": "messaging-core-api",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_INBOX_JDBC_POSTGRESQL-L647",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L647"
|
|
],
|
|
"sourceHeading": "bounded purge가 구현돼 있고 호출되지 않아, cleanup이 스스로 막겠다고 한 장애를 일으킨다",
|
|
"summary": "bounded purge가 구현돼 있고 호출되지 않아, cleanup이 스스로 막겠다고 한 장애를 일으킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-inbox-jdbc-postgresql-f01",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_INBOX_JDBC_POSTGRESQL-L657",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L657"
|
|
],
|
|
"sourceHeading": "속성을 이름으로 주장하는 테스트가 그 속성을 보일 수 없는 fake 위에서 통과한다",
|
|
"summary": "속성을 이름으로 주장하는 테스트가 그 속성을 보일 수 없는 fake 위에서 통과한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-inbox-jdbc-postgresql-f02",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_INBOX_JDBC_POSTGRESQL-L666",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L666"
|
|
],
|
|
"sourceHeading": "SQL 실패가 재시도 불가로 분류된다",
|
|
"summary": "SQL 실패가 재시도 불가로 분류된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-inbox-jdbc-postgresql-f03",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_INBOX_JDBC_POSTGRESQL-L675",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L675"
|
|
],
|
|
"sourceHeading": "세 갈래 판정이 포트의 `boolean`에서 두 갈래로 접힌다",
|
|
"summary": "세 갈래 판정이 포트의 `boolean`에서 두 갈래로 접힌다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-inbox-jdbc-postgresql-f04",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_INBOX_JDBC_POSTGRESQL-L684",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L684"
|
|
],
|
|
"sourceHeading": "`consumer_id` 길이 제약이 애플리케이션 층에 없다",
|
|
"summary": "컬럼 폭은 애플리케이션 검증과 짝을 이룬다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-inbox-jdbc-postgresql-f05",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_INBOX_JDBC_POSTGRESQL-L693",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L693"
|
|
],
|
|
"sourceHeading": "보존 규칙이 세 곳에 있고 공식이 다르다",
|
|
"summary": "같은 안전 규칙은 한 공식과 한 강제 시점을 갖는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-inbox-jdbc-postgresql-f06",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA-L208",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L208"
|
|
],
|
|
"sourceHeading": "지원 문서가 `deduplicatedPublish` 를 지원으로 적고, 코드는 거짓이며, 그 차이가 정확히 코드가 경고한 피해다",
|
|
"summary": "지원 문서가 `deduplicatedPublish` 를 지원으로 적고, 코드는 거짓이며, 그 차이가 정확히 코드가 경고한 피해다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-kafka-f01",
|
|
"module": "messaging-kafka",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA-L265",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L265"
|
|
],
|
|
"sourceHeading": "천장에 닿아 일시정지된 파티션을 재개하는 경로가 없다",
|
|
"summary": "천장에 닿아 일시정지된 파티션을 재개하는 경로가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-kafka-f02",
|
|
"module": "messaging-kafka",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA-L301",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L301"
|
|
],
|
|
"sourceHeading": "오염된 재시도 헤더가 격리되지 않고 무한 pause-and-seek 을 만든다",
|
|
"summary": "오염된 재시도 헤더가 격리되지 않고 무한 pause-and-seek 을 만든다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-kafka-f03",
|
|
"module": "messaging-kafka",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA-L342",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L342"
|
|
],
|
|
"sourceHeading": "시계를 주입받는 클래스가 한 곳에서만 벽시계를 읽는다",
|
|
"summary": "시계를 주입받는 클래스가 한 곳에서만 벽시계를 읽는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-kafka-f04",
|
|
"module": "messaging-kafka",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA-L362",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L362"
|
|
],
|
|
"sourceHeading": "결함으로 판정된 메서드가 남아 있고, 실브로커 증명이 그것 위에서 돈다",
|
|
"summary": "결함으로 판정된 메서드가 남아 있고, 실브로커 증명이 그것 위에서 돈다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-kafka-f05",
|
|
"module": "messaging-kafka",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L467",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L467"
|
|
],
|
|
"sourceHeading": "\"등록\"이 아무것도 등록하지 않고 성공을 반환한다",
|
|
"summary": "\"등록\"이 아무것도 등록하지 않고 성공을 반환한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-kafka-share-experimental-f01",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L476",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L476"
|
|
],
|
|
"sourceHeading": "선언된 의존 셋이 사용되지 않는다",
|
|
"summary": "허용 의존 목록은 상한이므로 미사용을 잡지 않는다 — 그것을 잡으려면 별도 검사가 필요하다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-kafka-share-experimental-f02",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L485",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L485"
|
|
],
|
|
"sourceHeading": "형제 어댑터 넷이 구현하는 SPI를 이 leaf만 구현하지 않는다",
|
|
"summary": "형제 어댑터 넷이 구현하는 SPI를 이 leaf만 구현하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-kafka-share-experimental-f03",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L494",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L494"
|
|
],
|
|
"sourceHeading": "두 거절이 다른 예외 계층을 쓴다",
|
|
"summary": "구성 오류는 한 예외 타입과 안정 코드로 보고한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-kafka-share-experimental-f04",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L503",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L503"
|
|
],
|
|
"sourceHeading": "네 타입 중 하나만 테스트된다",
|
|
"summary": "leaf의 각 public 클래스는 자기 레인에 테스트를 갖는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-kafka-share-experimental-f05",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L512",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L512"
|
|
],
|
|
"sourceHeading": "활성화 프로퍼티 키가 에러 메시지에만 존재한다",
|
|
"summary": "에러 메시지가 지시하는 설정은 그 설정을 읽는 코드와 함께 존재해야 한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-kafka-share-experimental-f06",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_NATS_EXPERIMENTAL-L146",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L146"
|
|
],
|
|
"sourceHeading": "`deduplicatedPublish` 를 무조건 참으로 선언하는데 실제 중복 제거는 프로파일에 창이 있을 때만 일어난다",
|
|
"summary": "`deduplicatedPublish` 를 무조건 참으로 선언하는데 실제 중복 제거는 프로파일에 창이 있을 때만 일어난다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-nats-experimental-f01",
|
|
"module": "messaging-nats-experimental",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_NATS_EXPERIMENTAL-L209",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L209"
|
|
],
|
|
"sourceHeading": "닫힌 전송의 거절이 영구 업무 실패로 분류된다",
|
|
"summary": "닫힌 전송의 거절이 영구 업무 실패로 분류된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-nats-experimental-f02",
|
|
"module": "messaging-nats-experimental",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_NATS_EXPERIMENTAL-L217",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L217"
|
|
],
|
|
"sourceHeading": "`NatsJetStreamProfileValidator` 를 호출하는 곳이 저장소에 없다. javadoc 링크 하나가 유일한 흔적이다",
|
|
"summary": "`NatsJetStreamProfileValidator` 를 호출하는 곳이 저장소에 없다. javadoc 링크 하나가 유일한 흔적이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-nats-experimental-f03",
|
|
"module": "messaging-nats-experimental",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_NATS_EXPERIMENTAL-L238",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L238"
|
|
],
|
|
"sourceHeading": "경과 시간 회귀를 막으려는 어셈블이 항상 참이다",
|
|
"summary": "경과 시간 회귀를 막으려는 어셈블이 항상 참이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-nats-experimental-f04",
|
|
"module": "messaging-nats-experimental",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L673",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L673"
|
|
],
|
|
"sourceHeading": "태그 어휘가 존재하고 유일한 호출부가 우회해, 실패 분류가 기록되지 않는다",
|
|
"summary": "태그 어휘가 존재하고 유일한 호출부가 우회해, 실패 분류가 기록되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-observability-f01",
|
|
"module": "messaging-observability",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L682",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L682"
|
|
],
|
|
"sourceHeading": "관측 구현이 조립되지 않고, 그 재료 둘만 bean으로 존재한다",
|
|
"summary": "관측 구현이 조립되지 않고, 그 재료 둘만 bean으로 존재한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-observability-f02",
|
|
"module": "messaging-observability",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L690",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L690"
|
|
],
|
|
"sourceHeading": "브로커 홉 추적기가 소비자를 갖지 않는다",
|
|
"summary": "브로커 홉 추적기가 소비자를 갖지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-observability-f03",
|
|
"module": "messaging-observability",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L699",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L699"
|
|
],
|
|
"sourceHeading": "감사 sink 인터페이스가 사용처에서 다시 선언된다",
|
|
"summary": "감사 sink 인터페이스가 사용처에서 다시 선언된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-observability-f04",
|
|
"module": "messaging-observability",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L708",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L708"
|
|
],
|
|
"sourceHeading": "자격증명 판정이 core-api보다 약하다",
|
|
"summary": "자격증명 판정이 core-api보다 약하다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-observability-f05",
|
|
"module": "messaging-observability",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L717",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L717"
|
|
],
|
|
"sourceHeading": "감사 이벤트가 redaction을 강제하지 않는다",
|
|
"summary": "타입이 문서화한 불변식은 타입이 강제한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-observability-f06",
|
|
"module": "messaging-observability",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OBSERVABILITY-L726",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L726"
|
|
],
|
|
"sourceHeading": "`extract`가 손상된 추적 헤더에 분류되지 않은 예외를 던진다",
|
|
"summary": "`extract`가 손상된 추적 헤더에 분류되지 않은 예외를 던진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-observability-f07",
|
|
"module": "messaging-observability",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L876",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P1",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L876"
|
|
],
|
|
"sourceHeading": "정리 작업이 무제한 DELETE 를 쏘고, 그것을 막는 오버로드는 호출되지 않는다",
|
|
"summary": "정리 작업이 무제한 DELETE 를 쏘고, 그것을 막는 오버로드는 호출되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f01",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L888",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L888"
|
|
],
|
|
"sourceHeading": "배포되는 Debezium 설정이 수정 이전 버전이다",
|
|
"summary": "배포되는 Debezium 설정이 수정 이전 버전이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f02",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L899",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L899"
|
|
],
|
|
"sourceHeading": "역슬래시로 끝나는 헤더 값이 헤더 맵을 깨뜨린다",
|
|
"summary": "역슬래시로 끝나는 헤더 값이 헤더 맵을 깨뜨린다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f03",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L909",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L909"
|
|
],
|
|
"sourceHeading": "두 릴레이 상호배제가 기동에서 강제되지 않는다",
|
|
"summary": "두 릴레이 상호배제가 기동에서 강제되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f04",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L917",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L917"
|
|
],
|
|
"sourceHeading": "구세대 전이 메서드가 신세대와 다른 행 상태를 남긴다",
|
|
"summary": "구세대 전이 메서드가 신세대와 다른 행 상태를 남긴다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f05",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L923",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L923"
|
|
],
|
|
"sourceHeading": "백오프 지터가 인스턴스를 분산시키지 못한다",
|
|
"summary": "백오프 지터가 인스턴스를 분산시키지 못한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f06",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L929",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L929"
|
|
],
|
|
"sourceHeading": "커넥션 획득 방식이 리프 안에서 갈린다",
|
|
"summary": "커넥션 획득 방식이 리프 안에서 갈린다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f07",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L935",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L935"
|
|
],
|
|
"sourceHeading": "`maxBatches` 가 하드코딩이고 현재는 의미가 없다",
|
|
"summary": "`maxBatches` 가 하드코딩이고 현재는 의미가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-outbox-jdbc-postgresql-f08",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L781",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L781"
|
|
],
|
|
"sourceHeading": "재시도 엔진과 DLQ 조정자가 bean으로 만들어지고 주입되는 곳이 없다",
|
|
"summary": "재시도 엔진과 DLQ 조정자가 bean으로 만들어지고 주입되는 곳이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-policy-f01",
|
|
"module": "messaging-policy",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L790",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L790"
|
|
],
|
|
"sourceHeading": "출하 컨텍스트가 발행은 하고 소비는 하지 못한다",
|
|
"summary": "출하 컨텍스트가 발행은 하고 소비는 하지 못한다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-policy-f02",
|
|
"module": "messaging-policy",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L799",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L799"
|
|
],
|
|
"sourceHeading": "재시도와 DLQ 각각에 두 개의 구현이 있고 정본이 표시되지 않았다",
|
|
"summary": "재시도와 DLQ 각각에 두 개의 구현이 있고 정본이 표시되지 않았다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-policy-f03",
|
|
"module": "messaging-policy",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L808",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L808"
|
|
],
|
|
"sourceHeading": "DLQ 메타데이터의 두 시각이 항상 같다",
|
|
"summary": "DLQ 메타데이터의 두 시각이 항상 같다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-policy-f04",
|
|
"module": "messaging-policy",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L817",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L817"
|
|
],
|
|
"sourceHeading": "사이클 검사가 경로마다 집합을 복사한다",
|
|
"summary": "부팅 경로의 알고리즘 복잡도는 문서화한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-policy-f05",
|
|
"module": "messaging-policy",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L826",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L826"
|
|
],
|
|
"sourceHeading": "프로파일 검증 실패가 플랫폼 예외 계층 밖이다",
|
|
"summary": "구성 오류는 한 예외 타입과 안정 코드로 보고한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-policy-f06",
|
|
"module": "messaging-policy",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_POLICY-L835",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L835"
|
|
],
|
|
"sourceHeading": "javadoc이 해소되지 않는 설계 문서를 인용한다",
|
|
"summary": "저장소 밖 문서를 절 번호로 인용하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-policy-f07",
|
|
"module": "messaging-policy",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_PULSAR_EXPERIMENTAL-L196",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-pulsar-experimental.md#L196"
|
|
],
|
|
"sourceHeading": "닫힌 전송의 거절이 영구 업무 실패로 분류된다",
|
|
"summary": "닫힌 전송의 거절이 영구 업무 실패로 분류된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-pulsar-experimental-f01",
|
|
"module": "messaging-pulsar-experimental",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RABBIT-L210",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L210"
|
|
],
|
|
"sourceHeading": "확인 등급이 요구에서 파생되고, 그 요구를 뒷받침하는 강제는 목적지 종류 하나에만 걸린다",
|
|
"summary": "확인 등급이 요구에서 파생되고, 그 요구를 뒷받침하는 강제는 목적지 종류 하나에만 걸린다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-rabbit-f01",
|
|
"module": "messaging-rabbit",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RABBIT-L238",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L238"
|
|
],
|
|
"sourceHeading": "반환을 순번에 맞추는 조각이 production 에 없고, 시험이 그 자리를 스스로 메운다",
|
|
"summary": "반환을 순번에 맞추는 조각이 production 에 없고, 시험이 그 자리를 스스로 메운다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-rabbit-f02",
|
|
"module": "messaging-rabbit",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RABBIT-L274",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L274"
|
|
],
|
|
"sourceHeading": "SCRAM 자격을 RabbitMQ 의 데모 기구로 조용히 매핑한다",
|
|
"summary": "SCRAM 자격을 RabbitMQ 의 데모 기구로 조용히 매핑한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-rabbit-f03",
|
|
"module": "messaging-rabbit",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RABBIT-L307",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L307"
|
|
],
|
|
"sourceHeading": "능력 상수의 `delayedDelivery` 가 무조건 참이고, 그 지연을 제공할 토폴로지는 조립되지 않는다",
|
|
"summary": "능력 상수의 `delayedDelivery` 가 무조건 참이고, 그 지연을 제공할 토폴로지는 조립되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-rabbit-f04",
|
|
"module": "messaging-rabbit",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RABBIT-L335",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L335"
|
|
],
|
|
"sourceHeading": "`pause` 의 의미가 SPI 하나 뒤에서 두 브로커에 다르게 구현된다",
|
|
"summary": "`pause` 의 의미가 SPI 하나 뒤에서 두 브로커에 다르게 구현된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-rabbit-f05",
|
|
"module": "messaging-rabbit",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L689",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L689"
|
|
],
|
|
"sourceHeading": "한 인터페이스가 같은 전이의 두 세대를 갖고, 안전하지 않은 쪽에 `@Deprecated`가 없다",
|
|
"summary": "한 인터페이스가 같은 전이의 두 세대를 갖고, 안전하지 않은 쪽에 `@Deprecated`가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-reliability-api-f01",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L698",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L698"
|
|
],
|
|
"sourceHeading": "fencing token 경로가 실제 데이터베이스에 대해 실행되지 않는다",
|
|
"summary": "fencing token 경로가 실제 데이터베이스에 대해 실행되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-reliability-api-f02",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L707",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L707"
|
|
],
|
|
"sourceHeading": "dual-write의 답이라고 선언한 진입점에 구현이 없다",
|
|
"summary": "dual-write의 답이라고 선언한 진입점에 구현이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-reliability-api-f03",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L716",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L716"
|
|
],
|
|
"sourceHeading": "이 leaf에 테스트가 없다",
|
|
"summary": "계약만 담는 leaf도 계약의 거절 조건은 자기 레인에서 검증한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-reliability-api-f04",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L725",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L725"
|
|
],
|
|
"sourceHeading": "inbox 보존 규칙이 문서로만 있다",
|
|
"summary": "inbox 보존 규칙이 문서로만 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-reliability-api-f05",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L734",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L734"
|
|
],
|
|
"sourceHeading": "트랜잭션 계약 셋이 타입으로 강제되지 않는다",
|
|
"summary": "호출 컨텍스트가 계약이면 그 컨텍스트를 검증할 수단을 함께 정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-reliability-api-f06",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L743",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L743"
|
|
],
|
|
"sourceHeading": "`OutboxRecord.equals`가 다섯 필드만 비교하고 이유가 없다",
|
|
"summary": "record의 `equals`를 좁히면 이유를 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-reliability-api-f07",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RELIABILITY_API-L752",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L752"
|
|
],
|
|
"sourceHeading": "포트가 bounded/unbounded purge 두 오버로드를 나란히 노출하고, 호출자가 무제한 쪽을 고른다",
|
|
"summary": "포트가 bounded/unbounded purge 두 오버로드를 나란히 노출하고, 호출자가 무제한 쪽을 고른다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-reliability-api-f08",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "contract-domain-and-bounds",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L710",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L710"
|
|
],
|
|
"sourceHeading": "관측이 구현·호출부·주입 자리를 모두 갖추고도 출하에서 no-op이다",
|
|
"summary": "관측이 구현·호출부·주입 자리를 모두 갖추고도 출하에서 no-op이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-runtime-core-f01",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L719",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L719"
|
|
],
|
|
"sourceHeading": "소비 오케스트레이터가 조립되지 않는다",
|
|
"summary": "소비 오케스트레이터가 조립되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-runtime-core-f02",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L727",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L727"
|
|
],
|
|
"sourceHeading": "선언된 content type과 실제 인코딩이 조용히 갈라질 수 있다",
|
|
"summary": "선언된 content type과 실제 인코딩이 조용히 갈라질 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-runtime-core-f03",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L736",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L736"
|
|
],
|
|
"sourceHeading": "같은 실패 코드가 두 completion에 쓰인다",
|
|
"summary": "안정 코드는 운영자의 행동이 갈리는 지점마다 나눈다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-runtime-core-f04",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L745",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L745"
|
|
],
|
|
"sourceHeading": "admission 실패만 예외로 전파된다",
|
|
"summary": "`CompletionStage`를 반환하는 메서드는 동기적으로 던지지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-runtime-core-f05",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L754",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L754"
|
|
],
|
|
"sourceHeading": "`generation`이 항상 1이다",
|
|
"summary": "증가한다고 문서화한 값이 리터럴이면 그 사실을 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-runtime-core-f06",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_RUNTIME_CORE-L763",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L763"
|
|
],
|
|
"sourceHeading": "`missingResult()`가 아무 데도 쓰이지 않는다",
|
|
"summary": "만들어 두고 흘리지 않는 진단값은 진단이 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-runtime-core-f07",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_API-L494",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L494"
|
|
],
|
|
"sourceHeading": "포맷 독립 진화 규칙이 호출되지 않고, 그것이 막으려던 중복이 실제로 생겼다",
|
|
"summary": "포맷 독립 진화 규칙이 호출되지 않고, 그것이 막으려던 중복이 실제로 생겼다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-schema-api-f01",
|
|
"module": "messaging-schema-api",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_API-L503",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L503"
|
|
],
|
|
"sourceHeading": "port 구현의 스레드 안전성 요구가 문서화되어 있지 않다",
|
|
"summary": "port 계약은 동시성 요구를 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-api-f02",
|
|
"module": "messaging-schema-api",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_API-L512",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L512"
|
|
],
|
|
"sourceHeading": "`SchemaRegistry`라는 이름이 저장소에서 두 가지를 가리킨다",
|
|
"summary": "도달성 판정은 단어가 아니라 import로 확인한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-api-f03",
|
|
"module": "messaging-schema-api",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_AVRO-L524",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L524"
|
|
],
|
|
"sourceHeading": "CI에서 돈다고 선언한 게이트를 부르는 CI가 없다",
|
|
"summary": "CI에서 돈다고 선언한 게이트를 부르는 CI가 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-schema-avro-f01",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_AVRO-L533",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L533"
|
|
],
|
|
"sourceHeading": "진화 판단이 두 곳에 있고 형태가 반대다",
|
|
"summary": "진화 판단이 두 곳에 있고 형태가 반대다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-schema-avro-f02",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_AVRO-L542",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L542"
|
|
],
|
|
"sourceHeading": "`history` 순서 계약이 port와 게이트에서 반대다",
|
|
"summary": "컬렉션 순서가 계약이면 양쪽에서 같은 방향으로 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-avro-f03",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_AVRO-L551",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L551"
|
|
],
|
|
"sourceHeading": "transitive 분기가 테스트되지 않는다",
|
|
"summary": "모드 enum을 분기 조건으로 쓰면 각 분기에 테스트를 둔다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-avro-f04",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_AVRO-L560",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L560"
|
|
],
|
|
"sourceHeading": "에러 코드 어휘가 형제 codec과 갈라진다",
|
|
"summary": "안정 코드는 판단 단위로 정하고 구현 단위로 정하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-avro-f05",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_JSON-L463",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L463"
|
|
],
|
|
"sourceHeading": "포맷 중립 payload 정책이, 자기 상수를 두고 JSON codec의 상수를 참조한다",
|
|
"summary": "포맷 중립 payload 정책이, 자기 상수를 두고 JSON codec의 상수를 참조한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-schema-json-f01",
|
|
"module": "messaging-schema-json",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_JSON-L472",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L472"
|
|
],
|
|
"sourceHeading": "파서 방어 여섯 갈래가 하나의 실패 코드로 접힌다",
|
|
"summary": "실패 코드는 운영자의 다음 행동이 갈리는 지점마다 나눈다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-json-f02",
|
|
"module": "messaging-schema-json",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_JSON-L481",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L481"
|
|
],
|
|
"sourceHeading": "빈 registry로 조립되면 모든 메시지가 거절된다",
|
|
"summary": "빈 registry로 조립되면 모든 메시지가 거절된다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-schema-json-f03",
|
|
"module": "messaging-schema-json",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_PROTOBUF-L527",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L527"
|
|
],
|
|
"sourceHeading": "`.proto` fixture와 테스트 descriptor의 일치를 아무도 강제하지 않는다",
|
|
"summary": "검증되지 않는 스키마 파일은 문서임을 파일 안에 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-protobuf-f01",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_PROTOBUF-L536",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L536"
|
|
],
|
|
"sourceHeading": "디코딩 상한 분기가 테스트되지 않는다",
|
|
"summary": "신뢰할 수 없는 입력 쪽 경계를 먼저 테스트한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-schema-protobuf-f02",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_PROTOBUF-L545",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L545"
|
|
],
|
|
"sourceHeading": "protobuf-java 버전이 저장소에 셋이고 전역 정책이 없다",
|
|
"summary": "protobuf-java 버전이 저장소에 셋이고 전역 정책이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-schema-protobuf-f03",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SCHEMA_PROTOBUF-L554",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L554"
|
|
],
|
|
"sourceHeading": "registry 조회 로직이 세 codec에 복제돼 있다",
|
|
"summary": "registry 조회 로직이 세 codec에 복제돼 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-schema-protobuf-f04",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "schema-and-data-contracts",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L634",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L634"
|
|
],
|
|
"sourceHeading": "같은 TLS posture를 두 클래스가 다른 엄격도로 검사한다",
|
|
"summary": "같은 TLS posture를 두 클래스가 다른 엄격도로 검사한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-security-f01",
|
|
"module": "messaging-security",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L643",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L643"
|
|
],
|
|
"sourceHeading": "권한 거부가 `AUTHORIZATION`이 아니라 `CONFIGURATION`으로 기록된다",
|
|
"summary": "권한 거부가 `AUTHORIZATION`이 아니라 `CONFIGURATION`으로 기록된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-security-f02",
|
|
"module": "messaging-security",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L652",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L652"
|
|
],
|
|
"sourceHeading": "ACL 매니페스트 전체가 쓰이지 않는다",
|
|
"summary": "ACL 매니페스트 전체가 쓰이지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-security-f03",
|
|
"module": "messaging-security",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L661",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L661"
|
|
],
|
|
"sourceHeading": "종료 시 자격증명 소거가 호출되지 않는다",
|
|
"summary": "종료 시 자격증명 소거가 호출되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-security-f04",
|
|
"module": "messaging-security",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L670",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L670"
|
|
],
|
|
"sourceHeading": "회전 술어가 두 번 구현돼 있고, 쓰이지 않는 쪽이 테스트된다",
|
|
"summary": "같은 술어가 두 타입에 있으면 하나가 다른 하나를 부른다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-security-f05",
|
|
"module": "messaging-security",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L679",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L679"
|
|
],
|
|
"sourceHeading": "자격증명 해석이 맵 bin 락 안에서 외부 I/O를 한다",
|
|
"summary": "맵 갱신 함수 안에서 I/O를 하면 그 지연이 락 범위가 된다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-security-f06",
|
|
"module": "messaging-security",
|
|
"topic": "security-policy-enforcement",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L688",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L688"
|
|
],
|
|
"sourceHeading": "다섯 타입이 이 leaf의 테스트에 등장하지 않는다",
|
|
"summary": "배선된 게이트는 자기 leaf 레인에서 검증한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-security-f07",
|
|
"module": "messaging-security",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SECURITY-L697",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L697"
|
|
],
|
|
"sourceHeading": "`CredentialRuntime.material`이 동기화되지 않는다",
|
|
"summary": "가변 필드로 상태 전이를 표현하면 가시성을 함께 정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-security-f08",
|
|
"module": "messaging-security",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_BOOT_STARTER-L281",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L281"
|
|
],
|
|
"sourceHeading": "같은 자동 설정 안에서 검증기 하나만 감싸이지 않는다",
|
|
"summary": "같은 자동 설정 안에서 검증기 하나만 감싸이지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-spring-boot-starter-f01",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_BOOT_STARTER-L300",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L300"
|
|
],
|
|
"sourceHeading": "출고되는 신뢰성 체인 전체가 아무도 공급하지 않는 빈 뒤에 있고, 그 사슬이 자기 클래스 안을 가리킨다",
|
|
"summary": "출고되는 신뢰성 체인 전체가 아무도 공급하지 않는 빈 뒤에 있고, 그 사슬이 자기 클래스 안을 가리킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-spring-boot-starter-f02",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_BOOT_STARTER-L319",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L319"
|
|
],
|
|
"sourceHeading": "죽은 매개변수 하나가 유일한 비기본값에서 NPE 를 낳는다",
|
|
"summary": "죽은 매개변수 하나가 유일한 비기본값에서 NPE 를 낳는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-spring-boot-starter-f03",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "runtime-contract-correctness",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_BOOT_STARTER-L342",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L342"
|
|
],
|
|
"sourceHeading": "설정 경로의 재시도가 예외 분류를 표현할 수 없다",
|
|
"summary": "설정 경로의 재시도가 예외 분류를 표현할 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-spring-boot-starter-f04",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_BOOT_STARTER-L367",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L367"
|
|
],
|
|
"sourceHeading": "배치 발행자가 `CompletionStage` 를 돌려주면서 동기 예외를 던진다",
|
|
"summary": "배치 발행자가 `CompletionStage` 를 돌려주면서 동기 예외를 던진다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-spring-boot-starter-f05",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L552",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L552"
|
|
],
|
|
"sourceHeading": "선언된 의존 둘이 사용되지 않는다",
|
|
"summary": "허용 의존 목록은 상한이므로 미사용을 잡지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-spring-cloud-stream-bridge-f01",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L561",
|
|
"kindCandidate": "OPEN_QUESTION",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L561"
|
|
],
|
|
"sourceHeading": "브리지의 바인더 쪽 절반이 없다",
|
|
"summary": "브리지의 바인더 쪽 절반이 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "open-question:messaging-spring-cloud-stream-bridge-f02",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L570",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L570"
|
|
],
|
|
"sourceHeading": "인터페이스를 publisher만 구현하고 두 클래스가 같은 바인딩에 각자 상태를 갖는다",
|
|
"summary": "한 개념의 등록 상태를 두 객체가 나눠 갖지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-spring-cloud-stream-bridge-f03",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L579",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L579"
|
|
],
|
|
"sourceHeading": "두 맵 갱신이 원자적이지 않다",
|
|
"summary": "함께 읽히는 두 맵은 한 값으로 묶는다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-spring-cloud-stream-bridge-f04",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L588",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L588"
|
|
],
|
|
"sourceHeading": "등록 해제 경로가 없다",
|
|
"summary": "등록을 받는 컴포넌트는 해제도 제공한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-spring-cloud-stream-bridge-f05",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L597",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L597"
|
|
],
|
|
"sourceHeading": "활성화 프로퍼티 키가 에러 메시지에만 존재한다",
|
|
"summary": "에러 메시지가 지시하는 설정은 그 설정을 읽는 코드와 함께 존재해야 한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-spring-cloud-stream-bridge-f06",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "state-ownership-and-concurrency",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L940",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L940"
|
|
],
|
|
"sourceHeading": "`FaultController` 의 5개 중 2개가 구현만 3벌 있고 호출부가 0건이다",
|
|
"summary": "`FaultController` 의 5개 중 2개가 구현만 3벌 있고 호출부가 0건이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f01",
|
|
"module": "messaging-testkit",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L950",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L950"
|
|
],
|
|
"sourceHeading": "클래스 javadoc 이 강제되지 않는 규칙을 강제된다고 말한다",
|
|
"summary": "클래스 javadoc 이 강제되지 않는 규칙을 강제된다고 말한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f02",
|
|
"module": "messaging-testkit",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L960",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L960"
|
|
],
|
|
"sourceHeading": "`Faults` 내부클래스 57줄이 3개 모듈에 바이트 단위로 복제되어 있다",
|
|
"summary": "`Faults` 내부클래스 57줄이 3개 모듈에 바이트 단위로 복제되어 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f03",
|
|
"module": "messaging-testkit",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L966",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L966"
|
|
],
|
|
"sourceHeading": "1 MiB 한도가 `PayloadPolicy` 를 두고 리터럴로 재선언된다",
|
|
"summary": "1 MiB 한도가 `PayloadPolicy` 를 두고 리터럴로 재선언된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f04",
|
|
"module": "messaging-testkit",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L972",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L972"
|
|
],
|
|
"sourceHeading": "`messaging-transport-spi` 의존이 import 0건이다",
|
|
"summary": "`messaging-transport-spi` 의존이 import 0건이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f05",
|
|
"module": "messaging-testkit",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L976",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L976"
|
|
],
|
|
"sourceHeading": "`BrokerFailureMatrix.adapters()` 는 호출부가 0건이다",
|
|
"summary": "`BrokerFailureMatrix.adapters()` 는 호출부가 0건이다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f06",
|
|
"module": "messaging-testkit",
|
|
"topic": "runtime-reachability-and-composition",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L980",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L980"
|
|
],
|
|
"sourceHeading": "항등식을 단언하는 테스트가 하나 있다",
|
|
"summary": "항등식을 단언하는 테스트가 하나 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f07",
|
|
"module": "messaging-testkit",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TESTKIT-L984",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L984"
|
|
],
|
|
"sourceHeading": "`gitCommit` 은 기록되지만 읽혀 판정되지 않는다",
|
|
"summary": "`gitCommit` 은 기록되지만 읽혀 판정되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-testkit-f08",
|
|
"module": "messaging-testkit",
|
|
"topic": "declaration-and-document-drift",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TRANSPORT_SPI-L659",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L659"
|
|
],
|
|
"sourceHeading": "드레인 마감 30초가 세 곳에서 독립적으로 결정된다",
|
|
"summary": "드레인 마감 30초가 세 곳에서 독립적으로 결정된다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-transport-spi-f01",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "verification-path-coverage",
|
|
"reason": "61개 canonical SSOT 전수 recall. 독립 causal/semantic/verification unit 이라 기존 노드와 병합하지 않았다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TRANSPORT_SPI-L668",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L668"
|
|
],
|
|
"sourceHeading": "종료 중 `install`이 닫히지 않는 창",
|
|
"summary": "멱등 종료를 보장하는 컴포넌트는 종료 이후의 등록도 정의한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-transport-spi-f02",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-MESSAGING_TRANSPORT_SPI-L677",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L677"
|
|
],
|
|
"sourceHeading": "pause scope sentinel이 두 인터페이스에서 다르다",
|
|
"summary": "같은 개념의 sentinel은 계층을 넘어 하나로 정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:messaging-transport-spi-f03",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "transport-and-provider-semantics",
|
|
"reason": "REFERENCE semantic audit — SSOT 가 괄호로 적은 재사용 규칙을 rule/scope/exceptions 형태로 다시 썼다. 구체 사건은 source finding 이 소유한다."
|
|
},
|
|
{
|
|
"id": "R3-FAM19-L860",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L860"
|
|
],
|
|
"sourceHeading": "messaging 마이그레이션 스트림을 적용하는 곳이 없고, 적용하려는 순간 버전이 충돌한다",
|
|
"summary": "messaging 마이그레이션 스트림을 적용하는 곳이 없고, 적용하려는 순간 버전이 충돌한다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:messaging-migration-stream-has-no-applier-and-collides-on-adoption",
|
|
"module": "integration/19-messaging-platform",
|
|
"topic": "cross-leaf-integration-facts",
|
|
"reason": "cross-leaf integration 에서만 성립하는 사실이라 leaf candidate 로 환원되지 않는다."
|
|
},
|
|
{
|
|
"id": "R3-FAM19-L926",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L926"
|
|
],
|
|
"sourceHeading": "claim-check는 starter에 배선 코드가 한 줄도 없다",
|
|
"summary": "claim-check는 starter에 배선 코드가 한 줄도 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:claim-check-has-no-wiring-line-in-the-starter",
|
|
"module": "integration/19-messaging-platform",
|
|
"topic": "cross-leaf-integration-facts",
|
|
"reason": "cross-leaf integration 에서만 성립하는 사실이라 leaf candidate 로 환원되지 않는다."
|
|
},
|
|
{
|
|
"id": "R3-FAM19-L975",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L975"
|
|
],
|
|
"sourceHeading": "admin 스위치가 가드를 켜고 서비스는 켜지 않는다",
|
|
"summary": "admin 스위치가 가드를 켜고 서비스는 켜지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-admin-switch-turns-on-the-guard-and-not-the-service",
|
|
"module": "integration/19-messaging-platform",
|
|
"topic": "cross-leaf-integration-facts",
|
|
"reason": "cross-leaf integration 에서만 성립하는 사실이라 leaf candidate 로 환원되지 않는다."
|
|
},
|
|
{
|
|
"id": "R3-FAM19-L997",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L997"
|
|
],
|
|
"sourceHeading": "`messaging-admin-api`는 main 25파일 · 1,613 LOC에 테스트 파일이 1개다",
|
|
"summary": "`messaging-admin-api`는 main 25파일 · 1,613 LOC에 테스트 파일이 1개다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:twenty-five-main-files-and-one-test-file",
|
|
"module": "integration/19-messaging-platform",
|
|
"topic": "cross-leaf-integration-facts",
|
|
"reason": "cross-leaf integration 에서만 성립하는 사실이라 leaf candidate 로 환원되지 않는다."
|
|
},
|
|
{
|
|
"id": "R3-FAM19-L1064",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L1064"
|
|
],
|
|
"sourceHeading": "문서 계약 테스트가 존재하고, 그 커버리지 경계가 §6.3·§6.4의 드리프트 위치를 정확히 예측한다",
|
|
"summary": "문서 계약 테스트가 존재하고, 그 커버리지 경계가 §6.3·§6.4의 드리프트 위치를 정확히 예측한다",
|
|
"disposition": "MERGED",
|
|
"target": "case:doc-contract-test-boundary-predicted-the-drift",
|
|
"module": "integration/19-messaging-platform",
|
|
"topic": "what-a-gate-does-not-prove",
|
|
"reason": "기존 CASE 와 같은 사건·같은 검증 단위다 — 문서 계약 테스트의 단언 경계가 발견된 드리프트 위치를 예측한다는 동일 관측이고, 가족 문서는 그것을 요약한다."
|
|
},
|
|
{
|
|
"id": "R3-FAM19-L1114",
|
|
"kindCandidate": "CASE",
|
|
"priority": "P3",
|
|
"sourceRefs": [
|
|
"analysis/19-messaging-platform.md#L1114"
|
|
],
|
|
"sourceHeading": "`MessagingPublicSurfaceContractTest`가 가족 밖(app-bootstrap)에 있다",
|
|
"summary": "`MessagingPublicSurfaceContractTest`가 가족 밖(app-bootstrap)에 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "case:the-public-surface-contract-test-lives-outside-the-family",
|
|
"module": "integration/19-messaging-platform",
|
|
"topic": "cross-leaf-integration-facts",
|
|
"reason": "cross-leaf integration 에서만 성립하는 사실이라 leaf candidate 로 환원되지 않는다."
|
|
},
|
|
{
|
|
"id": "C2-XS-CLASSIFIER",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L1",
|
|
"analysis/99-cross-scope.md#L1"
|
|
],
|
|
"sourceHeading": "분류기는 엔진이 남긴 것만 볼 수 있다",
|
|
"summary": "분류기는 엔진이 남긴 것만 볼 수 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:a-classifier-sees-only-what-the-engine-kept",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "http-failure-classification",
|
|
"reason": "사이클 2 의 판정 번복(EVD-332)에서 추출한 재사용 기준. `analysis/11` §51.3-51.4 와 cross-scope §5 가 근거다."
|
|
},
|
|
{
|
|
"id": "C2-XS-RUNTIME-SHAPE",
|
|
"kindCandidate": "REFERENCE",
|
|
"priority": "P2",
|
|
"sourceRefs": [
|
|
"analysis/99-cross-scope.md#L1"
|
|
],
|
|
"sourceHeading": "런타임의 모양에 대한 주장은 런타임에서 확인한다",
|
|
"summary": "런타임의 모양에 대한 주장은 런타임에서 확인한다",
|
|
"disposition": "EMITTED",
|
|
"target": "reference:verify-runtime-shape-at-runtime",
|
|
"module": "cross-scope",
|
|
"topic": "http-failure-classification",
|
|
"reason": "cross-scope §5 가 사이클 2 의 번복 1건과 자기 교정 3건에서 뽑은 측정 규칙이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L130",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L130"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — off 계약의 두 절반",
|
|
"summary": "(8.2) 조건 형제 비교 — off 계약의 두 절반",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c01",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L221",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L221"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 스키마 해시의 생산자와 소비자",
|
|
"summary": "(8.2) 조건 형제 비교 — 스키마 해시의 생산자와 소비자",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c02",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L336",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L336"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 연산 정체성을 정하는 두 구현",
|
|
"summary": "(8.2) 조건 형제 비교 — 연산 정체성을 정하는 두 구현",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c03",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L354",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L354"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 예산 계층",
|
|
"summary": "(8.3) 중복 메커니즘 — 예산 계층",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c04",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L376",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L376"
|
|
],
|
|
"sourceHeading": "(8.4) 문서/구현 드리프트 — 취소 경로",
|
|
"summary": "(8.4) 문서/구현 드리프트 — 취소 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c05",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L471",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L471"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 클라이언트 정책이 어떻게 정해지는가",
|
|
"summary": "(8.2) 조건 형제 비교 — 클라이언트 정책이 어떻게 정해지는가",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c06",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L604",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L604"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 실행 전 실패의 매퍼",
|
|
"summary": "(8.3) 중복 메커니즘 — 실행 전 실패의 매퍼",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c07",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L612",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L612"
|
|
],
|
|
"sourceHeading": "(8.4) 문서/구현 드리프트 — 보고되는 HTTP 프로파일",
|
|
"summary": "(8.4) 문서/구현 드리프트 — 보고되는 HTTP 프로파일",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c08",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L660",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L660"
|
|
],
|
|
"sourceHeading": "b 그 결과 — HTTP 전송 계약 계층이 미배선이고 실제 전송은 프레임워크가 정한다",
|
|
"summary": "b 그 결과 — HTTP 전송 계약 계층이 미배선이고 실제 전송은 프레임워크가 정한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c09",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L719",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L719"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 네 패키지의 배선 상태",
|
|
"summary": "(8.1) 도달성 — 네 패키지의 배선 상태",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c10",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "query-and-pagination-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L725",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L725"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 커서 서명 키의 두 소비처",
|
|
"summary": "(8.2) 조건 형제 비교 — 커서 서명 키의 두 소비처",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c11",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L867",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L867"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 두 능력 목록이 커서에 대해 다르게 답한다",
|
|
"summary": "(8.2) 조건 형제 비교 — 두 능력 목록이 커서에 대해 다르게 답한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c12",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRAPHQL-L873",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/16-adapter-inbound-graphql.md#L873"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 릴리스 게이트 자체",
|
|
"summary": "(8.1) 도달성 — 릴리스 게이트 자체",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-graphql-c13",
|
|
"module": "adapter-inbound-graphql",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_GRPC-L140",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/15-adapter-inbound-grpc.md#L140"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 인증과 예외 처리의 인터셉터 순서",
|
|
"summary": "(8.3) 중복 메커니즘 — 인증과 예외 처리의 인터셉터 순서",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-grpc-c01",
|
|
"module": "adapter-inbound-grpc",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L116",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L116"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 두 자동설정의 게이트",
|
|
"summary": "(8.2) 조건 형제 비교 — 두 자동설정의 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c01",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L140",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L140"
|
|
],
|
|
"sourceHeading": "(8.4) 문서/구현 드리프트 — 모듈 경계 선언과 실제 트리",
|
|
"summary": "(8.4) 문서/구현 드리프트 — 모듈 경계 선언과 실제 트리",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c02",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L426",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L426"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 신원 모델의 프로덕션 참조 수",
|
|
"summary": "(8.1) 도달성 — 신원 모델의 프로덕션 참조 수",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c03",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L473",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L473"
|
|
],
|
|
"sourceHeading": "(8.3) 필터 체인 순서 — `publicPaths` 대 `RestrictedPathRule`",
|
|
"summary": "(8.3) 필터 체인 순서 — `publicPaths` 대 `RestrictedPathRule`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c04",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L666",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L666"
|
|
],
|
|
"sourceHeading": "(8.4) 게이트 프로퍼티가 존재하는가",
|
|
"summary": "(8.4) 게이트 프로퍼티가 존재하는가",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c05",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L762",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L762"
|
|
],
|
|
"sourceHeading": "(8.2) durable-operation HTTP 표면의 두 게이트",
|
|
"summary": "(8.2) durable-operation HTTP 표면의 두 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c06",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "query-and-pagination-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L785",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L785"
|
|
],
|
|
"sourceHeading": "(8.4) 지문 정규화가 길이 프레이밍인가",
|
|
"summary": "(8.4) 지문 정규화가 길이 프레이밍인가",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c07",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L843",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L843"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 라이브러리 타입의 소비자",
|
|
"summary": "(8.1) 도달성 — 라이브러리 타입의 소비자",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c08",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L864",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L864"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 캐시 정책이 두 벌이다",
|
|
"summary": "(8.2) 조건 형제 비교 — 캐시 정책이 두 벌이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c09",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L889",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L889"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 커서 코덱도 두 벌",
|
|
"summary": "(8.3) 중복 메커니즘 — 커서 코덱도 두 벌",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c10",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L978",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L978"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — `OpenApiCustomizer` 가 두 개다",
|
|
"summary": "(8.2) 조건 형제 비교 — `OpenApiCustomizer` 가 두 개다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c11",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L986",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L986"
|
|
],
|
|
"sourceHeading": "(8.3) XML/CBOR 표현의 런타임 배선",
|
|
"summary": "(8.3) XML/CBOR 표현의 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c12",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1071",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1071"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — `X-Request-Id`에 대해 배선된 두 필터가 반대 정책을 쓴다",
|
|
"summary": "(8.2) 조건 형제 비교 — `X-Request-Id`에 대해 배선된 두 필터가 반대 정책을 쓴다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c13",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1098",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1098"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — forwarded 헤더 신뢰 정책",
|
|
"summary": "(8.1) 도달성 — forwarded 헤더 신뢰 정책",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c14",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1108",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1108"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 상관 식별자가 세 벌이다",
|
|
"summary": "(8.3) 중복 메커니즘 — 상관 식별자가 세 벌이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c15",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1217",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1217"
|
|
],
|
|
"sourceHeading": "(8.4) 카운트 드리프트 — 선언된 능력 11개, 활성화 게이트 2개",
|
|
"summary": "(8.4) 카운트 드리프트 — 선언된 능력 11개, 활성화 게이트 2개",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c16",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1255",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1255"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 하나의 스위치가 두 능력을 켠다",
|
|
"summary": "(8.3) 중복 메커니즘 — 하나의 스위치가 두 능력을 켠다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c17",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1336",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1336"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 시작 검증과 조립",
|
|
"summary": "(8.1) 도달성 — 시작 검증과 조립",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c18",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEB-L1555",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/14-adapter-inbound-web.md#L1555"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 두 개의 계약 강제 형태",
|
|
"summary": "(8.2) 조건 형제 비교 — 두 개의 계약 강제 형태",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-web-c19",
|
|
"module": "adapter-inbound-web",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEBSOCKET-L24",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L24"
|
|
],
|
|
"sourceHeading": "이 모듈의 형태 — 하나의 leaf, 세 개의 설정 네임스페이스",
|
|
"summary": "이 모듈의 형태 — 하나의 leaf, 세 개의 설정 네임스페이스",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-websocket-c01",
|
|
"module": "adapter-inbound-websocket",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEBSOCKET-L251",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L251"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 정책의 실제 적용 지점",
|
|
"summary": "(8.1) 도달성 — 정책의 실제 적용 지점",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-websocket-c02",
|
|
"module": "adapter-inbound-websocket",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEBSOCKET-L267",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L267"
|
|
],
|
|
"sourceHeading": "(8.4) 카운트 — `WebSocketFailureCategory`",
|
|
"summary": "(8.4) 카운트 — `WebSocketFailureCategory`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-websocket-c03",
|
|
"module": "adapter-inbound-websocket",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEBSOCKET-L381",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L381"
|
|
],
|
|
"sourceHeading": "(8.2) 조건 형제 비교 — 재개 토큰 서명",
|
|
"summary": "(8.2) 조건 형제 비교 — 재개 토큰 서명",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-websocket-c04",
|
|
"module": "adapter-inbound-websocket",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_INBOUND_WEBSOCKET-L420",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/17-adapter-inbound-websocket.md#L420"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 승격 게이트",
|
|
"summary": "(8.3) 중복 메커니즘 — 승격 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-inbound-websocket-c05",
|
|
"module": "adapter-inbound-websocket",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L85",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L85"
|
|
],
|
|
"sourceHeading": "조립의 순서가 클래스 하나에 고정돼 있다",
|
|
"summary": "조립의 순서가 클래스 하나에 고정돼 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c01",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L107",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L107"
|
|
],
|
|
"sourceHeading": "Confirmed — raw allowlist 기본값은 없는 리소스를 가리키고, 그것이 의도다",
|
|
"summary": "Confirmed — raw allowlist 기본값은 없는 리소스를 가리키고, 그것이 의도다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c02",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L235",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L235"
|
|
],
|
|
"sourceHeading": "Confirmed — \"설계상 부재\" 주장 6건이 구현·정책 계층까지 일치한다",
|
|
"summary": "Confirmed — \"설계상 부재\" 주장 6건이 구현·정책 계층까지 일치한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c03",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L245",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L245"
|
|
],
|
|
"sourceHeading": "Confirmed — 두 프로그래밍 모델의 대칭이 기계 검사되고, 검사기 자신도 검사된다",
|
|
"summary": "Confirmed — 두 프로그래밍 모델의 대칭이 기계 검사되고, 검사기 자신도 검사된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c04",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L324",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L324"
|
|
],
|
|
"sourceHeading": "키: 렌더된 문자열을 받는 API가 존재하지 않는다",
|
|
"summary": "키: 렌더된 문자열을 받는 API가 존재하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c05",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L332",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L332"
|
|
],
|
|
"sourceHeading": "실패: 재시도 가능성과 모호성이 배타로 강제된다",
|
|
"summary": "실패: 재시도 가능성과 모호성이 배타로 강제된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c06",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L350",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L350"
|
|
],
|
|
"sourceHeading": "명령 기술: 정책 파일과 서버 메타데이터의 접합점",
|
|
"summary": "명령 기술: 정책 파일과 서버 메타데이터의 접합점",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c07",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L456",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L456"
|
|
],
|
|
"sourceHeading": "Confirmed — 두 프로그래밍 모델이 같은 request builder를 공유한다",
|
|
"summary": "Confirmed — 두 프로그래밍 모델이 같은 request builder를 공유한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c08",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L477",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L477"
|
|
],
|
|
"sourceHeading": "Confirmed — guard를 지나지 않는 경로가 하나 있고, 그것이 선언돼 있다",
|
|
"summary": "Confirmed — guard를 지나지 않는 경로가 하나 있고, 그것이 선언돼 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c09",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L560",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L560"
|
|
],
|
|
"sourceHeading": "`CommandPolicyGuard` — 순서가 고정된 단일 입장 지점",
|
|
"summary": "`CommandPolicyGuard` — 순서가 고정된 단일 입장 지점",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c10",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L579",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L579"
|
|
],
|
|
"sourceHeading": "정책 문서를 일반 YAML 파서로 읽지 않는다",
|
|
"summary": "정책 문서를 일반 YAML 파서로 읽지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c11",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L684",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L684"
|
|
],
|
|
"sourceHeading": "raw gateway — \"escape hatch\"가 두 겹의 사전 승인으로 닫혀 있다",
|
|
"summary": "raw gateway — \"escape hatch\"가 두 겹의 사전 승인으로 닫혀 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c12",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_CACHE_REDIS-L701",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/10-adapter-outbound-cache-redis.md#L701"
|
|
],
|
|
"sourceHeading": "스크립트와 트랜잭션 — 등록이 배포 단계이고, 창(window)은 노드에 고정된다",
|
|
"summary": "스크립트와 트랜잭션 — 등록이 배포 단계이고, 창(window)은 노드에 고정된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-cache-redis-c13",
|
|
"module": "adapter-outbound-cache-redis",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L127",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L127"
|
|
],
|
|
"sourceHeading": "Confirmed — 적재 경로는 auto-configuration이 아니라 명시적 component scan이다",
|
|
"summary": "Confirmed — 적재 경로는 auto-configuration이 아니라 명시적 component scan이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c01",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L168",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L168"
|
|
],
|
|
"sourceHeading": "Confirmed — codec이 \"canonical\"을 왕복으로 강제한다",
|
|
"summary": "Confirmed — codec이 \"canonical\"을 왕복으로 강제한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c02",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L184",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L184"
|
|
],
|
|
"sourceHeading": "Confirmed — 상태 전이가 인접 행렬이고 terminal이 진짜 terminal이다",
|
|
"summary": "Confirmed — 상태 전이가 인접 행렬이고 terminal이 진짜 terminal이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c03",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L192",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L192"
|
|
],
|
|
"sourceHeading": "Confirmed — 두 개의 락 형태가 각자의 쓰기 원시연산에 맞춰져 있다",
|
|
"summary": "Confirmed — 두 개의 락 형태가 각자의 쓰기 원시연산에 맞춰져 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c04",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L300",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L300"
|
|
],
|
|
"sourceHeading": "Confirmed — canonical digest가 길이 프레이밍이고, route token 충돌을 명시적으로 검사한다",
|
|
"summary": "Confirmed — canonical digest가 길이 프레이밍이고, route token 충돌을 명시적으로 검사한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c05",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L507",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L507"
|
|
],
|
|
"sourceHeading": "Confirmed — 인가와 감사가 정보를 흘리지 않는다",
|
|
"summary": "Confirmed — 인가와 감사가 정보를 흘리지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c06",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L517",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L517"
|
|
],
|
|
"sourceHeading": "Confirmed — 실패를 \"재시도 안전한가\"로 분류한다",
|
|
"summary": "Confirmed — 실패를 \"재시도 안전한가\"로 분류한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c07",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_FILESERVER-L558",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/08-adapter-outbound-fileserver.md#L558"
|
|
],
|
|
"sourceHeading": "Confirmed — payload 계층이 자신의 잔여 위험을 먼저 선언한다",
|
|
"summary": "Confirmed — payload 계층이 자신의 잔여 위험을 먼저 선언한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-fileserver-c08",
|
|
"module": "adapter-outbound-fileserver",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L90",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L90"
|
|
],
|
|
"sourceHeading": "`ClientProfileValidator` — 34개 위반 코드가 각각 과거 사고를 적는다",
|
|
"summary": "`ClientProfileValidator` — 34개 위반 코드가 각각 과거 사고를 적는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c01",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L112",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L112"
|
|
],
|
|
"sourceHeading": "`ClientRuntimeRegistry` — 세대 교체가 틈으로 관측되지 않는다",
|
|
"summary": "`ClientRuntimeRegistry` — 세대 교체가 틈으로 관측되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c02",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L237",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L237"
|
|
],
|
|
"sourceHeading": "`ObjectBody`의 재생 가능성 판정 — 값의 성질이지 코덱의 성질이 아니다",
|
|
"summary": "`ObjectBody`의 재생 가능성 판정 — 값의 성질이지 코덱의 성질이 아니다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c03",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L305",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L305"
|
|
],
|
|
"sourceHeading": "재시도 결정표가 순서로 표현돼 있다",
|
|
"summary": "재시도 결정표가 순서로 표현돼 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c04",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L323",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L323"
|
|
],
|
|
"sourceHeading": "가드 순서와 그 근거",
|
|
"summary": "가드 순서와 그 근거",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c05",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L403",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L403"
|
|
],
|
|
"sourceHeading": "두 예산, 두 계층, 그리고 읽는 도중의 강제",
|
|
"summary": "두 예산, 두 계층, 그리고 읽는 도중의 강제",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c06",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L474",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L474"
|
|
],
|
|
"sourceHeading": "목적지 정책 — 절대 URI를 정화하지 않고 거부한다",
|
|
"summary": "목적지 정책 — 절대 URI를 정화하지 않고 거부한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c07",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L573",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L573"
|
|
],
|
|
"sourceHeading": "전송은 능력을 선언하고, 프로파일보다 약하면 startup이 실패한다",
|
|
"summary": "전송은 능력을 선언하고, 프로파일보다 약하면 startup이 실패한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c08",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_HTTPCLIENT-L627",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/11-adapter-outbound-httpclient.md#L627"
|
|
],
|
|
"sourceHeading": "교정 — 영구 TLS 실패의 `CONNECT` 분류는 분류기 결함이 아니라 픽스처의 듀얼스택 호스트명이다",
|
|
"summary": "교정 — 영구 TLS 실패의 `CONNECT` 분류는 분류기 결함이 아니라 픽스처의 듀얼스택 호스트명이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-httpclient-c09",
|
|
"module": "adapter-outbound-httpclient",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_MESSAGING-L174",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/12-adapter-outbound-messaging.md#L174"
|
|
],
|
|
"sourceHeading": "레지스트리가 \"닫혀 있다\"는 것의 의미",
|
|
"summary": "레지스트리가 \"닫혀 있다\"는 것의 의미",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-messaging-c01",
|
|
"module": "adapter-outbound-messaging",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_MESSAGING-L189",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/12-adapter-outbound-messaging.md#L189"
|
|
],
|
|
"sourceHeading": "봉투 작성이 파서를 거치지 않는다",
|
|
"summary": "봉투 작성이 파서를 거치지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-messaging-c02",
|
|
"module": "adapter-outbound-messaging",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_MESSAGING-L237",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/12-adapter-outbound-messaging.md#L237"
|
|
],
|
|
"sourceHeading": "계약이 컴파일되어 닫힌다",
|
|
"summary": "계약이 컴파일되어 닫힌다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-messaging-c03",
|
|
"module": "adapter-outbound-messaging",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_MESSAGING-L284",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/12-adapter-outbound-messaging.md#L284"
|
|
],
|
|
"sourceHeading": "두 발행 경로의 실패 정책이 정반대이고 그 이유가 적혀 있다",
|
|
"summary": "두 발행 경로의 실패 정책이 정반대이고 그 이유가 적혀 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-messaging-c04",
|
|
"module": "adapter-outbound-messaging",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_NOTIFICATION-L84",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L84"
|
|
],
|
|
"sourceHeading": "\"이름 없는 상태\"를 없애는 것이 이 sub-scope의 주제다",
|
|
"summary": "\"이름 없는 상태\"를 없애는 것이 이 sub-scope의 주제다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-notification-c01",
|
|
"module": "adapter-outbound-notification",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_NOTIFICATION-L306",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L306"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 종료 경로",
|
|
"summary": "(8.3) 중복 메커니즘 — 종료 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-notification-c02",
|
|
"module": "adapter-outbound-notification",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_NOTIFICATION-L582",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L582"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — provider가 준 `Retry-After`는 실제로 쓰이는가",
|
|
"summary": "(8.1) 도달성 — provider가 준 `Retry-After`는 실제로 쓰이는가",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-notification-c03",
|
|
"module": "adapter-outbound-notification",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_NOTIFICATION-L619",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L619"
|
|
],
|
|
"sourceHeading": "(8.4) 문서/카운트 드리프트 — 어떤 상태가 unhealthy인가",
|
|
"summary": "(8.4) 문서/카운트 드리프트 — 어떤 상태가 unhealthy인가",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-notification-c04",
|
|
"module": "adapter-outbound-notification",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_NOTIFICATION-L703",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L703"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — SSRF 가드가 도달하는 호출처 전수",
|
|
"summary": "(8.1) 도달성 — SSRF 가드가 도달하는 호출처 전수",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-notification-c05",
|
|
"module": "adapter-outbound-notification",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_NOTIFICATION-L913",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/13-adapter-outbound-notification.md#L913"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 공유 계약을 실제로 상속하는 어댑터",
|
|
"summary": "(8.1) 도달성 — 공유 계약을 실제로 상속하는 어댑터",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-notification-c06",
|
|
"module": "adapter-outbound-notification",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L63",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L63"
|
|
],
|
|
"sourceHeading": "Confirmed — \"컴파일이 먼저, 생성은 나중\"이 실제 순서다",
|
|
"summary": "Confirmed — \"컴파일이 먼저, 생성은 나중\"이 실제 순서다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c01",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L92",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L92"
|
|
],
|
|
"sourceHeading": "Confirmed — legacy가 세 겹으로 격리돼 있다",
|
|
"summary": "Confirmed — legacy가 세 겹으로 격리돼 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c02",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L135",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L135"
|
|
],
|
|
"sourceHeading": "Confirmed — 후보로 본 unguarded split은 값 타입이 막고 있다",
|
|
"summary": "Confirmed — 후보로 본 unguarded split은 값 타입이 막고 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c03",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L173",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L173"
|
|
],
|
|
"sourceHeading": "Confirmed — 계열이 닫혀 있고 스키마가 fail-closed다",
|
|
"summary": "Confirmed — 계열이 닫혀 있고 스키마가 fail-closed다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c04",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L244",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L244"
|
|
],
|
|
"sourceHeading": "Confirmed — 다섯 개의 닫힌 전이표가 있고 terminal이 진짜 terminal이다",
|
|
"summary": "Confirmed — 다섯 개의 닫힌 전이표가 있고 terminal이 진짜 terminal이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c05",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L273",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L273"
|
|
],
|
|
"sourceHeading": "Confirmed — 모든 키가 단일 인코더에서 나오고 route를 벗어날 수 없다",
|
|
"summary": "Confirmed — 모든 키가 단일 인코더에서 나오고 route를 벗어날 수 없다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c06",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L420",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L420"
|
|
],
|
|
"sourceHeading": "이 sub-scope의 설계 — 비밀은 durable하지 않고, 승인은 명시적으로 닫힌다",
|
|
"summary": "이 sub-scope의 설계 — 비밀은 durable하지 않고, 승인은 명시적으로 닫힌다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c07",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L560",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L560"
|
|
],
|
|
"sourceHeading": "§41 보강 — 레지스트리는 문서 주장을 얼어붙히지만 런타임 설정 경로는 덮지 않는다",
|
|
"summary": "§41 보강 — 레지스트리는 문서 주장을 얼어붙히지만 런타임 설정 경로는 덮지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c08",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_OBJECTSTORAGE-L601",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/09-adapter-outbound-objectstorage.md#L601"
|
|
],
|
|
"sourceHeading": "Confirmed — local-dev provider의 경로 방어와 publication",
|
|
"summary": "Confirmed — local-dev provider의 경로 방어와 publication",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-objectstorage-c09",
|
|
"module": "adapter-outbound-objectstorage",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L70",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L70"
|
|
],
|
|
"sourceHeading": "Sub-scope 02 — API contracts (`api/**`)",
|
|
"summary": "Sub-scope 02 — API contracts (`api/**`)",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c01",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L126",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L126"
|
|
],
|
|
"sourceHeading": "Capability API — 실행 기능과 지원 등급을 reportable contract로 분리",
|
|
"summary": "Capability API — 실행 기능과 지원 등급을 reportable contract로 분리",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c02",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L208",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L208"
|
|
],
|
|
"sourceHeading": "Error API — provider exception을 stable failure algebra로 변환",
|
|
"summary": "Error API — provider exception을 stable failure algebra로 변환",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c03",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L302",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L302"
|
|
],
|
|
"sourceHeading": "Query API — pagination 비용과 trust boundary를 type shape로 제한",
|
|
"summary": "Query API — pagination 비용과 trust boundary를 type shape로 제한",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c04",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L358",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L358"
|
|
],
|
|
"sourceHeading": "`SignedJsonCursorCodec`: 좋은 trust-boundary 설계와 경계값 결함이 동시에 존재",
|
|
"summary": "`SignedJsonCursorCodec`: 좋은 trust-boundary 설계와 경계값 결함이 동시에 존재",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c05",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L462",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L462"
|
|
],
|
|
"sourceHeading": "Transaction API — 실행체보다 먼저 retry 가능 상태를 제한한다",
|
|
"summary": "Transaction API — 실행체보다 먼저 retry 가능 상태를 제한한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c06",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L639",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L639"
|
|
],
|
|
"sourceHeading": "API surface verification",
|
|
"summary": "API surface verification",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c07",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L721",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L721"
|
|
],
|
|
"sourceHeading": "Sub-scope 03 — transaction + persistence failure",
|
|
"summary": "Sub-scope 03 — transaction + persistence failure",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c08",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L737",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L737"
|
|
],
|
|
"sourceHeading": "같은 leaf 안에 두 개의 transaction model이 존재한다",
|
|
"summary": "같은 leaf 안에 두 개의 transaction model이 존재한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c09",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L763",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L763"
|
|
],
|
|
"sourceHeading": "B. persistence-jpa public API boundary",
|
|
"summary": "B. persistence-jpa public API boundary",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c10",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L788",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L788"
|
|
],
|
|
"sourceHeading": "`SpringTransactionPort`: application-core의 실제 Spring 구현",
|
|
"summary": "`SpringTransactionPort`: application-core의 실제 Spring 구현",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c11",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L832",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L832"
|
|
],
|
|
"sourceHeading": "`SpringPolicyTransactionPort`: transaction result를 boolean 성공/실패보다 세밀하게 표현",
|
|
"summary": "`SpringPolicyTransactionPort`: transaction result를 boolean 성공/실패보다 세밀하게 표현",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c12",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L879",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L879"
|
|
],
|
|
"sourceHeading": "CallBudget를 transaction timeout보다 먼저 적용한다",
|
|
"summary": "CallBudget를 transaction timeout보다 먼저 적용한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c13",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L938",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L938"
|
|
],
|
|
"sourceHeading": "retry classification은 structured state로 제한한다",
|
|
"summary": "retry classification은 structured state로 제한한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c14",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L953",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L953"
|
|
],
|
|
"sourceHeading": "public JPA path: `SpringJpaTransactionExecutor`",
|
|
"summary": "public JPA path: `SpringJpaTransactionExecutor`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c15",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L974",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L974"
|
|
],
|
|
"sourceHeading": "`FullTransactionRetryCoordinator`: whole-use-case retry 의도",
|
|
"summary": "`FullTransactionRetryCoordinator`: whole-use-case retry 의도",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c16",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1074",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1074"
|
|
],
|
|
"sourceHeading": "`CommitFailureClassifier`",
|
|
"summary": "`CommitFailureClassifier`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c17",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1184",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1184"
|
|
],
|
|
"sourceHeading": "reconciliation record production path = 0",
|
|
"summary": "reconciliation record production path = 0",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c18",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1210",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1210"
|
|
],
|
|
"sourceHeading": "completion-unknown metric도 현재 transaction path에서 호출되지 않는다",
|
|
"summary": "completion-unknown metric도 현재 transaction path에서 호출되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c19",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1334",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1334"
|
|
],
|
|
"sourceHeading": "zero-reference지만 dead가 아닌 `JpaTransactionConfig`",
|
|
"summary": "zero-reference지만 dead가 아닌 `JpaTransactionConfig`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c20",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1358",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1358"
|
|
],
|
|
"sourceHeading": "두 failure translator 계열은 현재 역할이 다르다",
|
|
"summary": "두 failure translator 계열은 현재 역할이 다르다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c21",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1384",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1384"
|
|
],
|
|
"sourceHeading": "`failure.PersistenceExceptionTranslator`",
|
|
"summary": "`failure.PersistenceExceptionTranslator`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c22",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1416",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1416"
|
|
],
|
|
"sourceHeading": "runtime bean-factory-owned",
|
|
"summary": "runtime bean-factory-owned",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c23",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1610",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1610"
|
|
],
|
|
"sourceHeading": "이 sub-scope는 하나의 query framework가 아니라 세 단계의 정책층이다",
|
|
"summary": "이 sub-scope는 하나의 query framework가 아니라 세 단계의 정책층이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c24",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1643",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1643"
|
|
],
|
|
"sourceHeading": "Hibernate provider policy는 declared baseline과 실제 runtime을 분리한다",
|
|
"summary": "Hibernate provider policy는 declared baseline과 실제 runtime을 분리한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c25",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1819",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1819"
|
|
],
|
|
"sourceHeading": "bulk DML과 StatelessSession은 일반 repository path와 다른 비용 모델을 명시한다",
|
|
"summary": "bulk DML과 StatelessSession은 일반 repository path와 다른 비용 모델을 명시한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c26",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1860",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1860"
|
|
],
|
|
"sourceHeading": "Spring Data repository support는 generic CRUD보다 query execution policy에 가깝다",
|
|
"summary": "Spring Data repository support는 generic CRUD보다 query execution policy에 가깝다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c27",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "query-and-pagination-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1933",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1933"
|
|
],
|
|
"sourceHeading": "keyset predicate는 mixed type / mixed direction을 표현하도록 진화했다",
|
|
"summary": "keyset predicate는 mixed type / mixed direction을 표현하도록 진화했다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c28",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "query-and-pagination-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L1973",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L1973"
|
|
],
|
|
"sourceHeading": "keyset execution은 `size + 1`로 hasNext를 판정하고 count query를 제거한다",
|
|
"summary": "keyset execution은 `size + 1`로 hasNext를 판정하고 count query를 제거한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c29",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "query-and-pagination-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2087",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2087"
|
|
],
|
|
"sourceHeading": "Querydsl integration은 production runtime classpath를 강제로 오염시키지 않는다",
|
|
"summary": "Querydsl integration은 production runtime classpath를 강제로 오염시키지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c30",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2151",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2151"
|
|
],
|
|
"sourceHeading": "대부분의 optimization helper가 production에서 직접 소비되지 않는다는 사실은 이미 repository가 알고 있다",
|
|
"summary": "대부분의 optimization helper가 production에서 직접 소비되지 않는다는 사실은 이미 repository가 알고 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c31",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2217",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2217"
|
|
],
|
|
"sourceHeading": "실제 app-bootstrap consumer rule은 별도 allowlist를 다시 가진다",
|
|
"summary": "실제 app-bootstrap consumer rule은 별도 allowlist를 다시 가진다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c32",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2230",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2230"
|
|
],
|
|
"sourceHeading": "leaf list 자체는 outside consumer를 검사하지 않는다",
|
|
"summary": "leaf list 자체는 outside consumer를 검사하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c33",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2523",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2523"
|
|
],
|
|
"sourceHeading": "release-task existence validator",
|
|
"summary": "release-task existence validator",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c34",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2632",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2632"
|
|
],
|
|
"sourceHeading": "PostgreSQL failure translation: SQLSTATE 분류는 맞지만 `40003` 의미가 translator에서 소실된다",
|
|
"summary": "PostgreSQL failure translation: SQLSTATE 분류는 맞지만 `40003` 의미가 translator에서 소실된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c35",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2669",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2669"
|
|
],
|
|
"sourceHeading": "PostgreSQL Idempotency V2: owner/CAS 구조는 강하지만 replay 경계가 두 군데 어긋난다",
|
|
"summary": "PostgreSQL Idempotency V2: owner/CAS 구조는 강하지만 replay 경계가 두 군데 어긋난다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c36",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2734",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2734"
|
|
],
|
|
"sourceHeading": "Same-store inbox / polling outbox: 구현 계약은 강하지만 현재 미조립 candidate에 replay holes가 있다",
|
|
"summary": "Same-store inbox / polling outbox: 구현 계약은 강하지만 현재 미조립 candidate에 replay holes가 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c37",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2780",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2780"
|
|
],
|
|
"sourceHeading": "확인된 안전 경계",
|
|
"summary": "확인된 안전 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c38",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2805",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2805"
|
|
],
|
|
"sourceHeading": "Vendor migrations",
|
|
"summary": "Vendor migrations",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c39",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2883",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2883"
|
|
],
|
|
"sourceHeading": "Idempotency real-PostgreSQL TTL boundaries",
|
|
"summary": "Idempotency real-PostgreSQL TTL boundaries",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c40",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2913",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2913"
|
|
],
|
|
"sourceHeading": "이번 scope에서 finding으로 승격하지 않은 항목",
|
|
"summary": "이번 scope에서 finding으로 승격하지 않은 항목",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c41",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L2971",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L2971"
|
|
],
|
|
"sourceHeading": "Baseline composition을 먼저 분리해야 하는 이유",
|
|
"summary": "Baseline composition을 먼저 분리해야 하는 이유",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c42",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3119",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3119"
|
|
],
|
|
"sourceHeading": "H2 idempotency와 V2 owner 필드",
|
|
"summary": "H2 idempotency와 V2 owner 필드",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c43",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3123",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3123"
|
|
],
|
|
"sourceHeading": "`audit`와 `auditing` 두 경로",
|
|
"summary": "`audit`와 `auditing` 두 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c44",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3166",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3166"
|
|
],
|
|
"sourceHeading": "Fileserver composition과 schema lifecycle",
|
|
"summary": "Fileserver composition과 schema lifecycle",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c45",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3350",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3350"
|
|
],
|
|
"sourceHeading": "quota FIFO settlement 자체",
|
|
"summary": "quota FIFO settlement 자체",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c46",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3354",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3354"
|
|
],
|
|
"sourceHeading": "cleanup fenced lease의 expiry-after / takeover-before window",
|
|
"summary": "cleanup fenced lease의 expiry-after / takeover-before window",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c47",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3401",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3401"
|
|
],
|
|
"sourceHeading": "Notification composition과 schema lifecycle",
|
|
"summary": "Notification composition과 schema lifecycle",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c48",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3561",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3561"
|
|
],
|
|
"sourceHeading": "crypto envelope와 contact-point secret protection",
|
|
"summary": "crypto envelope와 contact-point secret protection",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c49",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3565",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3565"
|
|
],
|
|
"sourceHeading": "tenant-bound repository guard",
|
|
"summary": "tenant-bound repository guard",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c50",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3609",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3609"
|
|
],
|
|
"sourceHeading": "현재 production composition은 Experimental을 실행하지 않지만 opt-in 경계는 완전히 구조적이지 않다",
|
|
"summary": "현재 production composition은 Experimental을 실행하지 않지만 opt-in 경계는 완전히 구조적이지 않다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c51",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3780",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3780"
|
|
],
|
|
"sourceHeading": "schema identifier selection/reset",
|
|
"summary": "schema identifier selection/reset",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c52",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L3784",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L3784"
|
|
],
|
|
"sourceHeading": "tenant repository/listener guard가 곧 production isolation이라는 주장",
|
|
"summary": "tenant repository/listener guard가 곧 production isolation이라는 주장",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c53",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L4017",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4017"
|
|
],
|
|
"sourceHeading": "`CommitAmbiguityProxy` / `PostgreSqlContractExtension`",
|
|
"summary": "`CommitAmbiguityProxy` / `PostgreSqlContractExtension`",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c54",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L4021",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4021"
|
|
],
|
|
"sourceHeading": "`JpaReleaseManifest`의 regex parser",
|
|
"summary": "`JpaReleaseManifest`의 regex parser",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c55",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L4143",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4143"
|
|
],
|
|
"sourceHeading": "always-install scan과 opt-in scan의 경계는 실제로 지켜지고 있다",
|
|
"summary": "always-install scan과 opt-in scan의 경계는 실제로 지켜지고 있다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c56",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L4306",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4306"
|
|
],
|
|
"sourceHeading": "release gate 소속은 양방향으로 검증되지 않는다",
|
|
"summary": "release gate 소속은 양방향으로 검증되지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c57",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_JPA-L4541",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/05-adapter-outbound-persistence-jpa.md#L4541"
|
|
],
|
|
"sourceHeading": "`JpaPlatformContractSupport`의 컨테이너 수명 서술은 실제와 다르다",
|
|
"summary": "`JpaPlatformContractSupport`의 컨테이너 수명 서술은 실제와 다르다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-jpa-c58",
|
|
"module": "adapter-outbound-persistence-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L98",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L98"
|
|
],
|
|
"sourceHeading": "opt-in은 네 겹이고, 각 겹이 서로 다른 실패를 막는다",
|
|
"summary": "opt-in은 네 겹이고, 각 겹이 서로 다른 실패를 막는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c01",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L493",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L493"
|
|
],
|
|
"sourceHeading": "mapping의 나머지는 manifest를 실제로 강제한다",
|
|
"summary": "mapping의 나머지는 manifest를 실제로 강제한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c02",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L586",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L586"
|
|
],
|
|
"sourceHeading": "실행 scope의 고정된 순서가 이 sub-scope의 중심이다",
|
|
"summary": "실행 scope의 고정된 순서가 이 sub-scope의 중심이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c03",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L648",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L648"
|
|
],
|
|
"sourceHeading": "reactive 경로가 명시적으로 배치한 세 가지",
|
|
"summary": "reactive 경로가 명시적으로 배치한 세 가지",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c04",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L709",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L709"
|
|
],
|
|
"sourceHeading": "Confirmed — 이 sub-scope는 정책과 값 객체이고, 배선된 것은 하나뿐이다",
|
|
"summary": "Confirmed — 이 sub-scope는 정책과 값 객체이고, 배선된 것은 하나뿐이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c05",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L868",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L868"
|
|
],
|
|
"sourceHeading": "migration은 fencing을 정면으로 다룬다",
|
|
"summary": "migration은 fencing을 정면으로 다룬다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c06",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L1015",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1015"
|
|
],
|
|
"sourceHeading": "이 sub-scope는 이 leaf에서 유일하게 \"조립까지 된\" 대형 서브시스템이다",
|
|
"summary": "이 sub-scope는 이 leaf에서 유일하게 \"조립까지 된\" 대형 서브시스템이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c07",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L1142",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1142"
|
|
],
|
|
"sourceHeading": "`failure`는 이 leaf에서 가장 잘 배선되고 가장 잘 논증된 부분이다",
|
|
"summary": "`failure`는 이 leaf에서 가장 잘 배선되고 가장 잘 논증된 부분이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c08",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_PERSISTENCE_MONGO-L1269",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/06-adapter-outbound-persistence-mongo.md#L1269"
|
|
],
|
|
"sourceHeading": "Confirmed — 분류 불변식이 실제로 성립한다",
|
|
"summary": "Confirmed — 분류 불변식이 실제로 성립한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-persistence-mongo-c09",
|
|
"module": "adapter-outbound-persistence-mongo",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_SUPPORT-L52",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L52"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-support-c01",
|
|
"module": "adapter-outbound-support",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_SUPPORT-L119",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L119"
|
|
],
|
|
"sourceHeading": "`FailOpenDependencyLogger`: 진단을 business outcome과 분리하려는 계약",
|
|
"summary": "`FailOpenDependencyLogger`: 진단을 business outcome과 분리하려는 계약",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-support-c02",
|
|
"module": "adapter-outbound-support",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_SUPPORT-L207",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L207"
|
|
],
|
|
"sourceHeading": "global masking도 이 보장을 복구하지 않는다",
|
|
"summary": "global masking도 이 보장을 복구하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-support-c03",
|
|
"module": "adapter-outbound-support",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_SUPPORT-L318",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L318"
|
|
],
|
|
"sourceHeading": "`OutboundSupportConfig`: unconditional shared bean seam과 실제 runtime wiring",
|
|
"summary": "`OutboundSupportConfig`: unconditional shared bean seam과 실제 runtime wiring",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-support-c04",
|
|
"module": "adapter-outbound-support",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_SUPPORT-L368",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L368"
|
|
],
|
|
"sourceHeading": "outbound peer isolation",
|
|
"summary": "outbound peer isolation",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-support-c05",
|
|
"module": "adapter-outbound-support",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-ADAPTER_OUTBOUND_SUPPORT-L558",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/04-adapter-outbound-support.md#L558"
|
|
],
|
|
"sourceHeading": "architecture suite / dependency registry",
|
|
"summary": "architecture suite / dependency registry",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:adapter-outbound-support-c06",
|
|
"module": "adapter-outbound-support",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APP_BOOTSTRAP-L179",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L179"
|
|
],
|
|
"sourceHeading": "(8.3) 중복 메커니즘 — 세 개의 환경 검증기",
|
|
"summary": "(8.3) 중복 메커니즘 — 세 개의 환경 검증기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:app-bootstrap-c01",
|
|
"module": "app-bootstrap",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APP_BOOTSTRAP-L185",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L185"
|
|
],
|
|
"sourceHeading": "— 다섯 어댑터 범위는 런타임 멤버십 레지스트리와 일치한다 (결함 아님)",
|
|
"summary": "— 다섯 어댑터 범위는 런타임 멤버십 레지스트리와 일치한다 (결함 아님)",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:app-bootstrap-c02",
|
|
"module": "app-bootstrap",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APP_BOOTSTRAP-L264",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L264"
|
|
],
|
|
"sourceHeading": "(8.4) 카운트 — `.imports` 여섯 줄과 다섯 능력",
|
|
"summary": "(8.4) 카운트 — `.imports` 여섯 줄과 다섯 능력",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:app-bootstrap-c03",
|
|
"module": "app-bootstrap",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APP_BOOTSTRAP-L386",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L386"
|
|
],
|
|
"sourceHeading": "(8.1)·(8.2) 도달성과 게이트",
|
|
"summary": "(8.1)·(8.2) 도달성과 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:app-bootstrap-c04",
|
|
"module": "app-bootstrap",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APP_BOOTSTRAP-L460",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/18-app-bootstrap.md#L460"
|
|
],
|
|
"sourceHeading": "(8.1) 도달성 — 레지스트리 계약이 실제 레지스트리 파일을 읽는가",
|
|
"summary": "(8.1) 도달성 — 레지스트리 계약이 실제 레지스트리 파일을 읽는가",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:app-bootstrap-c05",
|
|
"module": "app-bootstrap",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L58",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L58"
|
|
],
|
|
"sourceHeading": "모듈 경계와 빌드 의존성",
|
|
"summary": "모듈 경계와 빌드 의존성",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c01",
|
|
"module": "application-core",
|
|
"topic": "query-and-pagination-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L78",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L78"
|
|
],
|
|
"sourceHeading": "authorization: permission과 object access를 분리한다",
|
|
"summary": "authorization: permission과 object access를 분리한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c02",
|
|
"module": "application-core",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L88",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L88"
|
|
],
|
|
"sourceHeading": "transaction: framework vocabulary 대신 application semantic policy",
|
|
"summary": "transaction: framework vocabulary 대신 application semantic policy",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c03",
|
|
"module": "application-core",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L118",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L118"
|
|
],
|
|
"sourceHeading": "idempotency, inbox, outbox: uncertainty를 상태로 보존한다",
|
|
"summary": "idempotency, inbox, outbox: uncertainty를 상태로 보존한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c04",
|
|
"module": "application-core",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L152",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L152"
|
|
],
|
|
"sourceHeading": "cache, lease, lock: 동시성 완화와 correctness authority를 구분한다",
|
|
"summary": "cache, lease, lock: 동시성 완화와 correctness authority를 구분한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c05",
|
|
"module": "application-core",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L174",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L174"
|
|
],
|
|
"sourceHeading": "messaging과 realtime은 provider/transport vocabulary를 밖으로 밀어낸다",
|
|
"summary": "messaging과 realtime은 provider/transport vocabulary를 밖으로 밀어낸다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c06",
|
|
"module": "application-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L182",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L182"
|
|
],
|
|
"sourceHeading": "storage/file publication: legacy 경로와 semantic 경로가 공존한다",
|
|
"summary": "storage/file publication: legacy 경로와 semantic 경로가 공존한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c07",
|
|
"module": "application-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L190",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L190"
|
|
],
|
|
"sourceHeading": "objectstorage: staged lifecycle, opaque identity, privilege separation",
|
|
"summary": "objectstorage: staged lifecycle, opaque identity, privilege separation",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c08",
|
|
"module": "application-core",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L200",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L200"
|
|
],
|
|
"sourceHeading": "fileserver: DB metadata와 physical content 사이의 실패 seam을 명시한다",
|
|
"summary": "fileserver: DB metadata와 physical content 사이의 실패 seam을 명시한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c09",
|
|
"module": "application-core",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L230",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L230"
|
|
],
|
|
"sourceHeading": "public API와 secret boundary",
|
|
"summary": "public API와 secret boundary",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c10",
|
|
"module": "application-core",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-APPLICATION_CORE-L270",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/03-application-core.md#L270"
|
|
],
|
|
"sourceHeading": "실제 production reachability와 legacy/dead-path 판정",
|
|
"summary": "실제 production reachability와 legacy/dead-path 판정",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:application-core-c11",
|
|
"module": "application-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-DOMAIN_CORE-L68",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/01-domain-core.md#L68"
|
|
],
|
|
"sourceHeading": "관찰: 재사용 가능한 도메인 “내용”보다 도메인 모델링 계약을 소유한다",
|
|
"summary": "관찰: 재사용 가능한 도메인 “내용”보다 도메인 모델링 계약을 소유한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:domain-core-c01",
|
|
"module": "domain-core",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-DOMAIN_CORE-L146",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/01-domain-core.md#L146"
|
|
],
|
|
"sourceHeading": "Runtime reachability / wiring",
|
|
"summary": "Runtime reachability / wiring",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:domain-core-c02",
|
|
"module": "domain-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-DOMAIN_CORE-L158",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/01-domain-core.md#L158"
|
|
],
|
|
"sourceHeading": "Success / failure mechanics",
|
|
"summary": "Success / failure mechanics",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:domain-core-c03",
|
|
"module": "domain-core",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADMIN-L50",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md#L50"
|
|
],
|
|
"sourceHeading": "건강 레지스트리 — 낙관에서 시작하지 않는다",
|
|
"summary": "건강 레지스트리 — 낙관에서 시작하지 않는다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-admin-c01",
|
|
"module": "grpc-admin",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADMIN-L65",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-admin.md#L65"
|
|
],
|
|
"sourceHeading": "배수 순서",
|
|
"summary": "배수 순서",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-admin-c02",
|
|
"module": "grpc-admin",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_BOOTSTRAP-L53",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L53"
|
|
],
|
|
"sourceHeading": "능력 15종과 등급 4종",
|
|
"summary": "능력 15종과 등급 4종",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-bootstrap-c01",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_BOOTSTRAP-L76",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L76"
|
|
],
|
|
"sourceHeading": "게이트가 세 조건을 순서대로 본다",
|
|
"summary": "게이트가 세 조건을 순서대로 본다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-bootstrap-c02",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_BOOTSTRAP-L89",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-bootstrap.md#L89"
|
|
],
|
|
"sourceHeading": "승격 게이트",
|
|
"summary": "승격 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-bootstrap-c03",
|
|
"module": "grpc-advanced-bootstrap",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_DIAGNOSTICS-L41",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-diagnostics.md#L41"
|
|
],
|
|
"sourceHeading": "모듈의 정체",
|
|
"summary": "모듈의 정체",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-diagnostics-c01",
|
|
"module": "grpc-advanced-diagnostics",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_DIAGNOSTICS-L51",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-diagnostics.md#L51"
|
|
],
|
|
"sourceHeading": "두 겹의 게이트",
|
|
"summary": "두 겹의 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-diagnostics-c02",
|
|
"module": "grpc-advanced-diagnostics",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_RESILIENCE-L58",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-resilience.md#L58"
|
|
],
|
|
"sourceHeading": "헤징 예산",
|
|
"summary": "헤징 예산",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-resilience-c01",
|
|
"module": "grpc-advanced-resilience",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_RESILIENCE-L75",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-resilience.md#L75"
|
|
],
|
|
"sourceHeading": "xDS 시작 가드",
|
|
"summary": "xDS 시작 가드",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-resilience-c02",
|
|
"module": "grpc-advanced-resilience",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_ADVANCED_STREAMING-L86",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-advanced-streaming.md#L86"
|
|
],
|
|
"sourceHeading": "수동 흐름 제어",
|
|
"summary": "수동 흐름 제어",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-advanced-streaming-c01",
|
|
"module": "grpc-advanced-streaming",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_CODEGEN-L104",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-codegen.md#L104"
|
|
],
|
|
"sourceHeading": "소비자 컴파일 게이트",
|
|
"summary": "소비자 컴파일 게이트",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-codegen-c01",
|
|
"module": "grpc-codegen",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_CORE_API-L105",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-core-api.md#L105"
|
|
],
|
|
"sourceHeading": "Stable 모듈 목록과 불변식",
|
|
"summary": "Stable 모듈 목록과 불변식",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-core-api-c01",
|
|
"module": "grpc-core-api",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_DISCOVERY-L85",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-discovery.md#L85"
|
|
],
|
|
"sourceHeading": "생성자가 거부하는 것과 검증기가 보고하는 것",
|
|
"summary": "생성자가 거부하는 것과 검증기가 보고하는 것",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-discovery-c01",
|
|
"module": "grpc-discovery",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_OBSERVABILITY-L46",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-observability.md#L46"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-observability-c01",
|
|
"module": "grpc-observability",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_OBSERVABILITY-L59",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-observability.md#L59"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-observability-c02",
|
|
"module": "grpc-observability",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_OBSERVABILITY-L74",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-observability.md#L74"
|
|
],
|
|
"sourceHeading": "계약·불변식",
|
|
"summary": "계약·불변식",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-observability-c03",
|
|
"module": "grpc-observability",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_OPERATION_LEDGER_JPA-L53",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-operation-ledger-jpa.md#L53"
|
|
],
|
|
"sourceHeading": "스키마가 계약이다",
|
|
"summary": "스키마가 계약이다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-operation-ledger-jpa-c01",
|
|
"module": "grpc-operation-ledger-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_OPERATION_LEDGER_JPA-L76",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-operation-ledger-jpa.md#L76"
|
|
],
|
|
"sourceHeading": "저장 키와 유니크 제약이 같은 행을 가리킨다",
|
|
"summary": "저장 키와 유니크 제약이 같은 행을 가리킨다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-operation-ledger-jpa-c02",
|
|
"module": "grpc-operation-ledger-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_OPERATION_LEDGER_JPA-L108",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-operation-ledger-jpa.md#L108"
|
|
],
|
|
"sourceHeading": "상태 전이",
|
|
"summary": "상태 전이",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-operation-ledger-jpa-c03",
|
|
"module": "grpc-operation-ledger-jpa",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_POLICY-L73",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-policy.md#L73"
|
|
],
|
|
"sourceHeading": "재개 토큰 — 서명하고, 구분자를 봉인한다",
|
|
"summary": "재개 토큰 — 서명하고, 구분자를 봉인한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-policy-c01",
|
|
"module": "grpc-policy",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_SERVER-L53",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-server.md#L53"
|
|
],
|
|
"sourceHeading": "인터셉터 순서 계약",
|
|
"summary": "인터셉터 순서 계약",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-server-c01",
|
|
"module": "grpc-server",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_SPRING_BOOT_STARTER-L42",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L42"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 격리 규칙",
|
|
"summary": "모듈의 정체와 격리 규칙",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-spring-boot-starter-c01",
|
|
"module": "grpc-spring-boot-starter",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_SPRING_BOOT_STARTER-L87",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-spring-boot-starter.md#L87"
|
|
],
|
|
"sourceHeading": "검증기가 담은 규칙",
|
|
"summary": "검증기가 담은 규칙",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-spring-boot-starter-c02",
|
|
"module": "grpc-spring-boot-starter",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-GRPC_TESTKIT-L102",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/grpc/grpc-testkit.md#L102"
|
|
],
|
|
"sourceHeading": "릴리스 게이트 — 문서가 후속이 아니라 차단 사유다",
|
|
"summary": "릴리스 게이트 — 문서가 후속이 아니라 차단 사유다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:grpc-testkit-c01",
|
|
"module": "grpc-testkit",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L57",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L57"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c01",
|
|
"module": "messaging-admin-api",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L98",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L98"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c02",
|
|
"module": "messaging-admin-api",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L185",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L185"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c03",
|
|
"module": "messaging-admin-api",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L493",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L493"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c04",
|
|
"module": "messaging-admin-api",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L543",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L543"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c05",
|
|
"module": "messaging-admin-api",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L588",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L588"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c06",
|
|
"module": "messaging-admin-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_API-L802",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-api.md#L802"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-api-c07",
|
|
"module": "messaging-admin-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L62",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L62"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c01",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L78",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L78"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c02",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L163",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L163"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c03",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L440",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L440"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c04",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L472",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L472"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c05",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L493",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L493"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c06",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_ADMIN_RUNTIME-L772",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-admin-runtime.md#L772"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-admin-runtime-c07",
|
|
"module": "messaging-admin-runtime",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L57",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L57"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c01",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L85",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L85"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c02",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L124",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L124"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c03",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L260",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L260"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c04",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L270",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L270"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c05",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L286",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L286"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c06",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLAIM_CHECK-L436",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-claim-check.md#L436"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-claim-check-c07",
|
|
"module": "messaging-claim-check",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L48",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L48"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c01",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L80",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L80"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c02",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L92",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L92"
|
|
],
|
|
"sourceHeading": "패키지/컴포넌트 지도",
|
|
"summary": "패키지/컴포넌트 지도",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c03",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L113",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L113"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c04",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L290",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L290"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c05",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L298",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L298"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c06",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L321",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L321"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c07",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CLOUDEVENTS-L451",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-cloudevents.md#L451"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-cloudevents-c08",
|
|
"module": "messaging-cloudevents",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L70",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L70"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c01",
|
|
"module": "messaging-core-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L101",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L101"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c02",
|
|
"module": "messaging-core-api",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L123",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L123"
|
|
],
|
|
"sourceHeading": "패키지/컴포넌트 지도",
|
|
"summary": "패키지/컴포넌트 지도",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c03",
|
|
"module": "messaging-core-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L180",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L180"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c04",
|
|
"module": "messaging-core-api",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L406",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L406"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c05",
|
|
"module": "messaging-core-api",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L419",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L419"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c06",
|
|
"module": "messaging-core-api",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L463",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L463"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c07",
|
|
"module": "messaging-core-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_CORE_API-L734",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-core-api.md#L734"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-core-api-c08",
|
|
"module": "messaging-core-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L57",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L57"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c01",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L98",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L98"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c02",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L146",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L146"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c03",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L319",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L319"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c04",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L329",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L329"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c05",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L346",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L346"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c06",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_INBOX_JDBC_POSTGRESQL-L581",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-inbox-jdbc-postgresql.md#L581"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-inbox-jdbc-postgresql-c07",
|
|
"module": "messaging-inbox-jdbc-postgresql",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA-L69",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L69"
|
|
],
|
|
"sourceHeading": "소비자 런타임 — 스레드 규율이 설계다",
|
|
"summary": "소비자 런타임 — 스레드 규율이 설계다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-c01",
|
|
"module": "messaging-kafka",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA-L87",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka.md#L87"
|
|
],
|
|
"sourceHeading": "커밋은 연속 워터마크로만 전진한다",
|
|
"summary": "커밋은 연속 워터마크로만 전진한다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-c02",
|
|
"module": "messaging-kafka",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L54",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L54"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c01",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L84",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L84"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c02",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L131",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L131"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c03",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L234",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L234"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c04",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L244",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L244"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c05",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L258",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L258"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c06",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_KAFKA_SHARE_EXPERIMENTAL-L399",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-kafka-share-experimental.md#L399"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-kafka-share-experimental-c07",
|
|
"module": "messaging-kafka-share-experimental",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_NATS_EXPERIMENTAL-L82",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L82"
|
|
],
|
|
"sourceHeading": "능력 선언",
|
|
"summary": "능력 선언",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-nats-experimental-c01",
|
|
"module": "messaging-nats-experimental",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_NATS_EXPERIMENTAL-L94",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-nats-experimental.md#L94"
|
|
],
|
|
"sourceHeading": "프로파일이 스스로 거부하는 것",
|
|
"summary": "프로파일이 스스로 거부하는 것",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-nats-experimental-c02",
|
|
"module": "messaging-nats-experimental",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L52",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L52"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c01",
|
|
"module": "messaging-observability",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L70",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L70"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c02",
|
|
"module": "messaging-observability",
|
|
"topic": "observability-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L113",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L113"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c03",
|
|
"module": "messaging-observability",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L334",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L334"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c04",
|
|
"module": "messaging-observability",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L346",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L346"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c05",
|
|
"module": "messaging-observability",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L363",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L363"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c06",
|
|
"module": "messaging-observability",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OBSERVABILITY-L597",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-observability.md#L597"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-observability-c07",
|
|
"module": "messaging-observability",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L66",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L66"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-outbox-jdbc-postgresql-c01",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L102",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L102"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-outbox-jdbc-postgresql-c02",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L177",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L177"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-outbox-jdbc-postgresql-c03",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L430",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L430"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-outbox-jdbc-postgresql-c04",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L486",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L486"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-outbox-jdbc-postgresql-c05",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_OUTBOX_JDBC_POSTGRESQL-L767",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-outbox-jdbc-postgresql.md#L767"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-outbox-jdbc-postgresql-c06",
|
|
"module": "messaging-outbox-jdbc-postgresql",
|
|
"topic": "transaction-and-consistency-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L56",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L56"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c01",
|
|
"module": "messaging-policy",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L84",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L84"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c02",
|
|
"module": "messaging-policy",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L135",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L135"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c03",
|
|
"module": "messaging-policy",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L411",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L411"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c04",
|
|
"module": "messaging-policy",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L423",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L423"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c05",
|
|
"module": "messaging-policy",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L451",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L451"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c06",
|
|
"module": "messaging-policy",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L603",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L603"
|
|
],
|
|
"sourceHeading": "E. control: the publish path IS constructed in production",
|
|
"summary": "E. control: the publish path IS constructed in production",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c07",
|
|
"module": "messaging-policy",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L617",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L617"
|
|
],
|
|
"sourceHeading": "G. every file that acts on a RetryDecision variant",
|
|
"summary": "G. every file that acts on a RetryDecision variant",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c08",
|
|
"module": "messaging-policy",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_POLICY-L700",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-policy.md#L700"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-policy-c09",
|
|
"module": "messaging-policy",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_PULSAR_EXPERIMENTAL-L50",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-pulsar-experimental.md#L50"
|
|
],
|
|
"sourceHeading": "실패 분류 — 타입 있는 신호만 본다",
|
|
"summary": "실패 분류 — 타입 있는 신호만 본다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-pulsar-experimental-c01",
|
|
"module": "messaging-pulsar-experimental",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RABBIT-L91",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L91"
|
|
],
|
|
"sourceHeading": "소비·정착·죽은 편지의 세 규율",
|
|
"summary": "소비·정착·죽은 편지의 세 규율",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-rabbit-c01",
|
|
"module": "messaging-rabbit",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RABBIT-L106",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-rabbit.md#L106"
|
|
],
|
|
"sourceHeading": "자격증명은 연결 시도마다 해석된다",
|
|
"summary": "자격증명은 연결 시도마다 해석된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-rabbit-c02",
|
|
"module": "messaging-rabbit",
|
|
"topic": "security-and-trust-boundaries",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L51",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L51"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c01",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L92",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L92"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c02",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L143",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L143"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c03",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L338",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L338"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c04",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L348",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L348"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c05",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L366",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L366"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c06",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RELIABILITY_API-L610",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-reliability-api.md#L610"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-reliability-api-c07",
|
|
"module": "messaging-reliability-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L55",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L55"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c01",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L86",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L86"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c02",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L128",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L128"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c03",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L387",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L387"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c04",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L397",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L397"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c05",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L429",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L429"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c06",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_RUNTIME_CORE-L631",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-runtime-core.md#L631"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-runtime-core-c07",
|
|
"module": "messaging-runtime-core",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L62",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L62"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c01",
|
|
"module": "messaging-schema-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L79",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L79"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c02",
|
|
"module": "messaging-schema-api",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L113",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L113"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c03",
|
|
"module": "messaging-schema-api",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L255",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L255"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c04",
|
|
"module": "messaging-schema-api",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L267",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L267"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c05",
|
|
"module": "messaging-schema-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L282",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L282"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c06",
|
|
"module": "messaging-schema-api",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_API-L432",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-api.md#L432"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-api-c07",
|
|
"module": "messaging-schema-api",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L49",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L49"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c01",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L75",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L75"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c02",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L106",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L106"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c03",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L254",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L254"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c04",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L266",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L266"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c05",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L298",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L298"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c06",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_AVRO-L457",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-avro.md#L457"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-avro-c07",
|
|
"module": "messaging-schema-avro",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L46",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L46"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c01",
|
|
"module": "messaging-schema-json",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L71",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L71"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c02",
|
|
"module": "messaging-schema-json",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L124",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L124"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c03",
|
|
"module": "messaging-schema-json",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L238",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L238"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c04",
|
|
"module": "messaging-schema-json",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L246",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L246"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c05",
|
|
"module": "messaging-schema-json",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L263",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L263"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c06",
|
|
"module": "messaging-schema-json",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_JSON-L396",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-json.md#L396"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-json-c07",
|
|
"module": "messaging-schema-json",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L49",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L49"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c01",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L76",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L76"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c02",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L112",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L112"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c03",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L229",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L229"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c04",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L239",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L239"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c05",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L258",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L258"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c06",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SCHEMA_PROTOBUF-L458",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-schema-protobuf.md#L458"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-schema-protobuf-c07",
|
|
"module": "messaging-schema-protobuf",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L52",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L52"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c01",
|
|
"module": "messaging-security",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L91",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L91"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c02",
|
|
"module": "messaging-security",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L141",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L141"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c03",
|
|
"module": "messaging-security",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L327",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L327"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c04",
|
|
"module": "messaging-security",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L339",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L339"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c05",
|
|
"module": "messaging-security",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L359",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L359"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c06",
|
|
"module": "messaging-security",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SECURITY-L562",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-security.md#L562"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-security-c07",
|
|
"module": "messaging-security",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_BOOT_STARTER-L94",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L94"
|
|
],
|
|
"sourceHeading": "선택은 닫힌 레지스트리이고, 등록과 조립은 다르다",
|
|
"summary": "선택은 닫힌 레지스트리이고, 등록과 조립은 다르다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-boot-starter-c01",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_BOOT_STARTER-L111",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L111"
|
|
],
|
|
"sourceHeading": "설정이 프로파일이 된다",
|
|
"summary": "설정이 프로파일이 된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-boot-starter-c02",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_BOOT_STARTER-L155",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-boot-starter.md#L155"
|
|
],
|
|
"sourceHeading": "종료 순서가 두 수명 주기의 phase 로 표현된다",
|
|
"summary": "종료 순서가 두 수명 주기의 phase 로 표현된다",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-boot-starter-c03",
|
|
"module": "messaging-spring-boot-starter",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L56",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L56"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-cloud-stream-bridge-c01",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "composition-and-lifecycle-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L86",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L86"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-cloud-stream-bridge-c02",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L146",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L146"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-cloud-stream-bridge-c03",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L309",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L309"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-cloud-stream-bridge-c04",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L319",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L319"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-cloud-stream-bridge-c05",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_SPRING_CLOUD_STREAM_BRIDGE-L341",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-spring-cloud-stream-bridge.md#L341"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-spring-cloud-stream-bridge-c06",
|
|
"module": "messaging-spring-cloud-stream-bridge",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L68",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L68"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c01",
|
|
"module": "messaging-testkit",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L99",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L99"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c02",
|
|
"module": "messaging-testkit",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L140",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L140"
|
|
],
|
|
"sourceHeading": "패키지/컴포넌트 지도",
|
|
"summary": "패키지/컴포넌트 지도",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c03",
|
|
"module": "messaging-testkit",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L169",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L169"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c04",
|
|
"module": "messaging-testkit",
|
|
"topic": "identity-and-value-contracts",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L452",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L452"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c05",
|
|
"module": "messaging-testkit",
|
|
"topic": "capability-and-disclosure-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L492",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L492"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c06",
|
|
"module": "messaging-testkit",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L539",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L539"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c07",
|
|
"module": "messaging-testkit",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TESTKIT-L848",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-testkit.md#L848"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-testkit-c08",
|
|
"module": "messaging-testkit",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L62",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L62"
|
|
],
|
|
"sourceHeading": "모듈의 정체와 경계",
|
|
"summary": "모듈의 정체와 경계",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c01",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L90",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L90"
|
|
],
|
|
"sourceHeading": "의존성과 런타임 배선",
|
|
"summary": "의존성과 런타임 배선",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c02",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L124",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L124"
|
|
],
|
|
"sourceHeading": "계약·불변식·상태 모델",
|
|
"summary": "계약·불변식·상태 모델",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c03",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L326",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L326"
|
|
],
|
|
"sourceHeading": "주요 실행 경로",
|
|
"summary": "주요 실행 경로",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c04",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L338",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L338"
|
|
],
|
|
"sourceHeading": "실패 경로와 복구/번역",
|
|
"summary": "실패 경로와 복구/번역",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c05",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L352",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L352"
|
|
],
|
|
"sourceHeading": "트랜잭션·동시성·수명주기",
|
|
"summary": "트랜잭션·동시성·수명주기",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c06",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "state-machines-and-ownership",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-MESSAGING_TRANSPORT_SPI-L579",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/messaging/messaging-transport-spi.md#L579"
|
|
],
|
|
"sourceHeading": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"summary": "Git/설계 문서에서 확인한 변화와 실패 기록",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:messaging-transport-spi-c07",
|
|
"module": "messaging-transport-spi",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-SHARED_CONTRACT-L51",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L51"
|
|
],
|
|
"sourceHeading": "주요 계약과 불변식",
|
|
"summary": "주요 계약과 불변식",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:shared-contract-c01",
|
|
"module": "shared-contract",
|
|
"topic": "delivery-and-settlement-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-SHARED_CONTRACT-L69",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L69"
|
|
],
|
|
"sourceHeading": "Permission",
|
|
"summary": "Permission",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:shared-contract-c02",
|
|
"module": "shared-contract",
|
|
"topic": "admission-budget-and-backpressure",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-SHARED_CONTRACT-L108",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L108"
|
|
],
|
|
"sourceHeading": "Activation and health snapshot",
|
|
"summary": "Activation and health snapshot",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:shared-contract-c03",
|
|
"module": "shared-contract",
|
|
"topic": "result-and-failure-algebra",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
},
|
|
{
|
|
"id": "C-SHARED_CONTRACT-L114",
|
|
"kindCandidate": "CONCEPT",
|
|
"priority": "NONE",
|
|
"sourceRefs": [
|
|
"analysis/02-shared-contract.md#L114"
|
|
],
|
|
"sourceHeading": "Messaging envelope schema",
|
|
"summary": "Messaging envelope schema",
|
|
"disposition": "EMITTED",
|
|
"target": "concept:shared-contract-c04",
|
|
"module": "shared-contract",
|
|
"topic": "schema-and-wire-models",
|
|
"reason": "CONCEPT recall pass — SSOT 본문이 설명하는 구현된 메커니즘. §17 finding 이 아니라 정상 동작 모델이다."
|
|
}
|
|
],
|
|
"counts": {
|
|
"total": 965,
|
|
"emitted": 915,
|
|
"merged": 49,
|
|
"blocked": 1,
|
|
"rejected": 0
|
|
},
|
|
"unmapped": 0,
|
|
"explicitAnalysisCandidates": 205,
|
|
"explicitPriorityFindings": 200,
|
|
"explicitUnresolvedWithoutPriority": 5,
|
|
"cycle2": {
|
|
"added": 13,
|
|
"note": "사이클 2 초기 통독에서 노드로 낸 것(역사 기록)."
|
|
},
|
|
"cycle3": {
|
|
"added": 211,
|
|
"topicsAdded": 9,
|
|
"note": "61개 canonical module SSOT 전수 recall. §17 explicit finding 392건 중 미회수 211건을 회수했다."
|
|
},
|
|
"conceptRecall": {
|
|
"reviewed": 568,
|
|
"emitted": 360,
|
|
"mergedIntoParentMechanism": 138,
|
|
"rejectedThinBody": 71,
|
|
"topicsAdded": 12,
|
|
"note": "61개 SSOT 본문의 메커니즘 절을 전수 검토했다. 상위 절이 이미 같은 메커니즘을 덮는 하위 절은 병합했고, 독립 기록으로 설명할 본문이 부족한 절은 제외했다."
|
|
}
|
|
}
|