Files
document-haness/docs/clean-architecture-backend-template/state.json
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
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>
2026-09-04 22:51:59 +09:00

1924 lines
85 KiB
JSON

{
"schemaVersion": 3,
"project": "clean-architecture-backend-template",
"codebasePath": "/shared/codebase/clean-architecture-backend-template",
"gitRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"analysisStatus": "COMPLETE",
"analysisCycle": 2,
"scopes": [
{
"id": "domain-core",
"path": "src/domain-core",
"analysisFile": "analysis/01-domain-core.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 3,
"excluded": 1,
"unclassified": 0
},
"previousAnalysisFile": "analysis/01-domain-core.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "059922e45700c04fd322d9f14cfa5a62338a503ef9d098d125849e0b25a9ea57",
"analysisFileLines": 260
},
{
"id": "shared-contract",
"path": "src/shared-contract",
"analysisFile": "analysis/02-shared-contract.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 82,
"structuralOnly": 4,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/02-shared-contract.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "3c86063c4d4564e41b30613cbcb8f14c31b8ba803d4332c8b35c76f2f9f55495",
"analysisFileLines": 233
},
{
"id": "application-core",
"path": "src/application-core",
"analysisFile": "analysis/03-application-core.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 1021,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/03-application-core.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "f6341fd6d57fb273a2baa4cf0c9f5c0b49c454d76c494a167d025d5b212e4103",
"analysisFileLines": 454
},
{
"id": "adapter-outbound-support",
"path": "src/adapter/outbound/support",
"analysisFile": "analysis/04-adapter-outbound-support.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 8,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/04-adapter-outbound-support.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "dea34bd0669b98dbd20ad5bb1811d15f312f075a767c5ff05676f8763fc7f93d",
"analysisFileLines": 703
},
{
"id": "adapter-outbound-persistence-jpa",
"path": "src/adapter/outbound/persistence-jpa",
"analysisFile": "analysis/05-adapter-outbound-persistence-jpa.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 605,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/05-adapter-outbound-persistence-jpa.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "09ccc2046a70c2f5e49bc5766896fa61a80797d2e0f5b682f27f684adb06d45b",
"analysisFileLines": 4950
},
{
"id": "adapter-outbound-persistence-mongo",
"path": "src/adapter/outbound/persistence-mongo",
"analysisFile": "analysis/06-adapter-outbound-persistence-mongo.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 497,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/06-adapter-outbound-persistence-mongo.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "74a12d2b821f5653d0746b9233350a87b1849af0573c90405bf0a188f5322ffa",
"analysisFileLines": 1772
},
{
"id": "adapter-outbound-identifier",
"path": "src/adapter/outbound/identifier",
"analysisFile": "analysis/07-adapter-outbound-identifier.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/07-adapter-outbound-identifier.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "5943bdd890226be6e7549020228aca6b22f3572b31dbd96d5dd786f75f4d5b62",
"analysisFileLines": 233
},
{
"id": "adapter-outbound-fileserver",
"path": "src/adapter/outbound/fileserver",
"analysisFile": "analysis/08-adapter-outbound-fileserver.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 119,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/08-adapter-outbound-fileserver.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "ccb06eb97499c4dad3e8f2fc7ebb15ff35305116e7112af6ca4686851104ab25",
"analysisFileLines": 768
},
{
"id": "adapter-outbound-objectstorage",
"path": "src/adapter/outbound/objectstorage",
"analysisFile": "analysis/09-adapter-outbound-objectstorage.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 206,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/09-adapter-outbound-objectstorage.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "e4b763a4a8e75b365ec660e88c47bed543c9dbaacc08d1d9e9bc09dad392e6f9",
"analysisFileLines": 920
},
{
"id": "adapter-outbound-cache-redis",
"path": "src/adapter/outbound/cache-redis",
"analysisFile": "analysis/10-adapter-outbound-cache-redis.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 390,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/10-adapter-outbound-cache-redis.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "12e3738bc83626a3399bcf662ab5132db3ef56d91afbd36aaf8790ed2c940805",
"analysisFileLines": 1102
},
{
"id": "adapter-outbound-httpclient",
"path": "src/adapter/outbound/httpclient",
"analysisFile": "analysis/11-adapter-outbound-httpclient.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 370,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/11-adapter-outbound-httpclient.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "704b7f71237819840850018491c625bb57f9f9de39c95e37be0ba53dae7647c7",
"analysisFileLines": 837
},
{
"id": "adapter-outbound-messaging",
"path": "src/adapter/outbound/messaging",
"analysisFile": "analysis/12-adapter-outbound-messaging.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 69,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/12-adapter-outbound-messaging.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "135ba01cec71edcf1834451b941f11df23ea90e09b59bbdb4f035316aada7e5b",
"analysisFileLines": 440
},
{
"id": "adapter-outbound-notification",
"path": "src/adapter/outbound/notification",
"analysisFile": "analysis/13-adapter-outbound-notification.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 240,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/13-adapter-outbound-notification.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "bcd08c2faf37cba55da64c08a56d931261fad4bce941b45b1d5234ec24e24aa9",
"analysisFileLines": 1185
},
{
"id": "adapter-inbound-web",
"path": "src/adapter/inbound/web",
"analysisFile": "analysis/14-adapter-inbound-web.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 638,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/14-adapter-inbound-web.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "ff7af2b630184bbb0edc3948576fedbae6f19faecc3b7b3d46d80cc4cc00dbb5",
"analysisFileLines": 1937
},
{
"id": "adapter-inbound-grpc",
"path": "src/adapter/inbound/grpc",
"analysisFile": "analysis/15-adapter-inbound-grpc.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 18,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/15-adapter-inbound-grpc.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "d2f606133990440249ca1fdf8562338dd53dc04630f2a734a5fb4588a413a97d",
"analysisFileLines": 289
},
{
"id": "adapter-inbound-graphql",
"path": "src/adapter/inbound/graphql",
"analysisFile": "analysis/16-adapter-inbound-graphql.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 534,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/16-adapter-inbound-graphql.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "2a451a4fd7d6e1bf9be0322e885843e23132ae73e54783b918eedb8b71df80a6",
"analysisFileLines": 1337
},
{
"id": "adapter-inbound-websocket",
"path": "src/adapter/inbound/websocket",
"analysisFile": "analysis/17-adapter-inbound-websocket.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 253,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"notes": [
"2026-08-30: app-bootstrap 분석 중 modules.json runtime_memberships=[] 와 ConditionalTransportCompositionContractTest 확인으로 §4.1을 P1 -> P2 로 하향(analysis §26.6)."
],
"previousAnalysisFile": "analysis/17-adapter-inbound-websocket.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "6a538e1aba77d066d29a48405c8b008162e67211c3546e9294a52ae9dfec3973",
"analysisFileLines": 715
},
{
"id": "app-bootstrap",
"path": "src/app-bootstrap",
"analysisFile": "analysis/18-app-bootstrap.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 455,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/18-app-bootstrap.md",
"ssotReview": "REVALIDATED",
"analysisFileSha256": "2291661392b566f6fc4dd92e392a88729cd9d4f48237b1743103c5f771ecb349",
"analysisFileLines": 750
},
{
"id": "sample-portfolio",
"path": "src/sample-portfolio",
"analysisFile": "analysis/19-sample-portfolio.md",
"status": "EXCLUDED",
"sourceRevision": null,
"coverage": null,
"exclusionReason": "사용자 지시(2026-08-30): 샘플 모듈은 분석 대상에서 제외."
},
{
"id": "messaging-core-api",
"path": "src/messaging/messaging-core-api",
"analysisFile": "analysis/messaging/messaging-core-api.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 71,
"structuralOnly": 24,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "61a599437cb559d18982f1d45cfbf0cabf224c60383a8776aef115f499dd9e14",
"analysisFileLines": 924
},
{
"id": "messaging-schema-api",
"path": "src/messaging/messaging-schema-api",
"analysisFile": "analysis/messaging/messaging-schema-api.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 14,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "1e7c55115e9da56b57337b3d8babadebf666a26f571c6d6dae0f5a951ab27fce",
"analysisFileLines": 547
},
{
"id": "messaging-schema-json",
"path": "src/messaging/messaging-schema-json",
"analysisFile": "analysis/messaging/messaging-schema-json.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 5,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "f085336a7e9188d161b13e283e0aff49f0a4bbd364f5fdbc0628af03753730d3",
"analysisFileLines": 511
},
{
"id": "messaging-schema-avro",
"path": "src/messaging/messaging-schema-avro",
"analysisFile": "analysis/messaging/messaging-schema-avro.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 6,
"structuralOnly": 2,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "910617a3d8f35746e1372d3713d875fcf94254555224de9e0140e9ec9761dc82",
"analysisFileLines": 597
},
{
"id": "messaging-schema-protobuf",
"path": "src/messaging/messaging-schema-protobuf",
"analysisFile": "analysis/messaging/messaging-schema-protobuf.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 6,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "78d1521e612078f03fa9ed5c634ce53a1ddc47cc9bf570359b1d36fbf6604935",
"analysisFileLines": 589
},
{
"id": "messaging-cloudevents",
"path": "src/messaging/messaging-cloudevents",
"analysisFile": "analysis/messaging/messaging-cloudevents.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 6,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "b397c3e42ae12bf048b3f286ee7a2a67f9879c5c41b3de0dfaa3fcfaec675c22",
"analysisFileLines": 594
},
{
"id": "messaging-policy",
"path": "src/messaging/messaging-policy",
"analysisFile": "analysis/messaging/messaging-policy.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 31,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "6262f535885e50072198c9783f45499bd15523cc2f7c394cca3d66e1644b70ad",
"analysisFileLines": 880
},
{
"id": "messaging-transport-spi",
"path": "src/messaging/messaging-transport-spi",
"analysisFile": "analysis/messaging/messaging-transport-spi.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 18,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "49baa073fcdc67d453d868011d15a33b47a64bc72be13a3d441f9b75fc708652",
"analysisFileLines": 716
},
{
"id": "messaging-runtime-core",
"path": "src/messaging/messaging-runtime-core",
"analysisFile": "analysis/messaging/messaging-runtime-core.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 11,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "f8f33c95d74d679a655045eb9eaf73a65fc1b93133ba4cc996ae3c56459f3636",
"analysisFileLines": 807
},
{
"id": "messaging-observability",
"path": "src/messaging/messaging-observability",
"analysisFile": "analysis/messaging/messaging-observability.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 16,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "16e669f0683d55d54cb9b982342214c536c857fa08322bfb3d556d7d9bf1b8f6",
"analysisFileLines": 775
},
{
"id": "messaging-security",
"path": "src/messaging/messaging-security",
"analysisFile": "analysis/messaging/messaging-security.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 16,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "8079cfb31bc97bbf7b7c1f4b57837eff5e796fd40671665f6e74201de26028ee",
"analysisFileLines": 741
},
{
"id": "messaging-kafka",
"path": "src/messaging/messaging-kafka",
"analysisFile": "analysis/messaging/messaging-kafka.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 59,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "260ece70cc29d836343f19a174249c51a8245be06bf69a1395e4724f427145a3",
"analysisFileLines": 443,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "messaging-kafka-share-experimental",
"path": "src/messaging/messaging-kafka-share-experimental",
"analysisFile": "analysis/messaging/messaging-kafka-share-experimental.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 6,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "5f1e5b95fb6af9a84fecb7019e3529acceeb2d5513762f3d32aa075910fddd08",
"analysisFileLines": 546
},
{
"id": "messaging-rabbit",
"path": "src/messaging/messaging-rabbit",
"analysisFile": "analysis/messaging/messaging-rabbit.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 31,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "2c3a3e1c835ee979dc55a050bec2f1f18128c9cd4d38a25299ff79519db82881",
"analysisFileLines": 404,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "messaging-reliability-api",
"path": "src/messaging/messaging-reliability-api",
"analysisFile": "analysis/messaging/messaging-reliability-api.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 14,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "REVALIDATED",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "7647a1c288d4b60a87641e58ca67ebd81c08bce4438b444e3205c9331df32549",
"analysisFileLines": 793
},
{
"id": "messaging-outbox-jdbc-postgresql",
"path": "src/messaging/messaging-outbox-jdbc-postgresql",
"analysisFile": "analysis/messaging/messaging-outbox-jdbc-postgresql.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 19,
"structuralOnly": 8,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "REVALIDATED",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "f1e3837833d91c209c354752e3de751140ae3457965eba76e39be8a9a4f5c35d",
"analysisFileLines": 1002
},
{
"id": "messaging-inbox-jdbc-postgresql",
"path": "src/messaging/messaging-inbox-jdbc-postgresql",
"analysisFile": "analysis/messaging/messaging-inbox-jdbc-postgresql.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 12,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "c3d70602111fc08c9cbbb2318504fe5968bb982667f9348d18c6056901639650",
"analysisFileLines": 734
},
{
"id": "messaging-claim-check",
"path": "src/messaging/messaging-claim-check",
"analysisFile": "analysis/messaging/messaging-claim-check.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "132ae88c6d0dfe523d9e5518ccc5902bb8e5de96ff0f6079ddd615ff1153395f",
"analysisFileLines": 581
},
{
"id": "messaging-admin-api",
"path": "src/messaging/messaging-admin-api",
"analysisFile": "analysis/messaging/messaging-admin-api.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 25,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "f0d7369cd9f3bbfe675e6eec456c1faa4c1ef6a7bbf7f531117875afab85d2fb",
"analysisFileLines": 1045
},
{
"id": "messaging-admin-runtime",
"path": "src/messaging/messaging-admin-runtime",
"analysisFile": "analysis/messaging/messaging-admin-runtime.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 18,
"structuralOnly": 0,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "6f38684eff11ce6f907914b62f5b51626dfebb5a5aa6bc010f170ee6177212c5",
"analysisFileLines": 1020
},
{
"id": "messaging-pulsar-experimental",
"path": "src/messaging/messaging-pulsar-experimental",
"analysisFile": "analysis/messaging/messaging-pulsar-experimental.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 11,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "b3961fd214c27e5bf954944e850aed49d14bed9d937cb30db00a2fb0b9348cd3",
"analysisFileLines": 296,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "messaging-nats-experimental",
"path": "src/messaging/messaging-nats-experimental",
"analysisFile": "analysis/messaging/messaging-nats-experimental.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "332df2dd35f62637a9185232198ae1167f087b11662a60facac357033cb11953",
"analysisFileLines": 291,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "messaging-spring-cloud-stream-bridge",
"path": "src/messaging/messaging-spring-cloud-stream-bridge",
"analysisFile": "analysis/messaging/messaging-spring-cloud-stream-bridge.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 9,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "SPLIT_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "f0c60dcda83d85cc0b396f1103e13458cc6120607cc4e89d3ed9bb603fbd3fd3",
"analysisFileLines": 635
},
{
"id": "messaging-spring-boot-starter",
"path": "src/messaging/messaging-spring-boot-starter",
"analysisFile": "analysis/messaging/messaging-spring-boot-starter.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 40,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "d5524d1eead42c8f92fecd586b3989af700b45f8023f70ff27e26a9610deb41f",
"analysisFileLines": 456,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "messaging-testkit",
"path": "src/messaging/messaging-testkit",
"analysisFile": "analysis/messaging/messaging-testkit.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 20,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/19-messaging-platform.md",
"ssotReview": "REVALIDATED",
"integrationAnalysis": "analysis/19-messaging-platform.md",
"analysisFileSha256": "e9c05c7a2a2cfd4b5eaae2cbffc28205f85282e76a174af7efa862e88db6d05a",
"analysisFileLines": 1039
},
{
"id": "grpc-core-api",
"path": "src/grpc/grpc-core-api",
"analysisFile": "analysis/grpc/grpc-core-api.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 40,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "6bbbd265fddcf12b2481e211e76bfc4bd2dc92481b324640ca3e6e0f565c2591",
"analysisFileLines": 308,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-proto-contract",
"path": "src/grpc/grpc-proto-contract",
"analysisFile": "analysis/grpc/grpc-proto-contract.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "5b6c1cee71f6e9bae3ed339d193a1a99a71e6b250cfbfe10938473f4e3317718",
"analysisFileLines": 310,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-codegen",
"path": "src/grpc/grpc-codegen",
"analysisFile": "analysis/grpc/grpc-codegen.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 15,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "c61302fde6accddadd43f64be9614e2c2127a6db132f763b1f88845dcb26143d",
"analysisFileLines": 348,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-policy",
"path": "src/grpc/grpc-policy",
"analysisFile": "analysis/grpc/grpc-policy.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 82,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "75f3faa3701327d30649e91fb4991103b3711a1a1764e955a4767fb592d6d02d",
"analysisFileLines": 389,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-server",
"path": "src/grpc/grpc-server",
"analysisFile": "analysis/grpc/grpc-server.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 23,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "af0a8823d0d2bc38f400151d51565bdf680c8428bb32157e1c745ad9cb13b8ef",
"analysisFileLines": 277,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-client",
"path": "src/grpc/grpc-client",
"analysisFile": "analysis/grpc/grpc-client.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 19,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "28d6152d2b54245f4206358410b9452bc6e6a2ddb6c3d4f4d3df9ef54f30d13f",
"analysisFileLines": 246,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-discovery",
"path": "src/grpc/grpc-discovery",
"analysisFile": "analysis/grpc/grpc-discovery.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "4bff271cd3a94278bfcb37690086f8c3262df7ac5c676fc61df2adf36615dbac",
"analysisFileLines": 239,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-admin",
"path": "src/grpc/grpc-admin",
"analysisFile": "analysis/grpc/grpc-admin.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 19,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "31df9cb670f1d1239265d9e78fd53477d518e78e1fd1592c0ab5fa371b215f1c",
"analysisFileLines": 253,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-observability",
"path": "src/grpc/grpc-observability",
"analysisFile": "analysis/grpc/grpc-observability.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 6,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "fc3c8ec2f575851a39d298c08d842fa9b6ac006fd44f08407894a2832f16dcd0",
"analysisFileLines": 277,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-operation-ledger-jpa",
"path": "src/grpc/grpc-operation-ledger-jpa",
"analysisFile": "analysis/grpc/grpc-operation-ledger-jpa.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 6,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "177c0db29a2c8376bb992f7db0c91d15488ebfb72d8fe2a0d137bdb675887a52",
"analysisFileLines": 226,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-spring-boot-starter",
"path": "src/grpc/grpc-spring-boot-starter",
"analysisFile": "analysis/grpc/grpc-spring-boot-starter.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 7,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "d6261a11306cb063e588ba31541630f2e68b619ab65290758ac7efcf69da4a00",
"analysisFileLines": 295,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-testkit",
"path": "src/grpc/grpc-testkit",
"analysisFile": "analysis/grpc/grpc-testkit.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 35,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "fb7d5339c1c0272d247455c18b2b2f76f392f3af1f779882b8f38173fb4db8d8",
"analysisFileLines": 320,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-advanced-bootstrap",
"path": "src/grpc-advanced/grpc-advanced-bootstrap",
"analysisFile": "analysis/grpc/grpc-advanced-bootstrap.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 12,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "1a3d4e0421114d1a9a4f1edd51811c196a10c025918920e3bc793b8c1474ce22",
"analysisFileLines": 359,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-advanced-edition",
"path": "src/grpc-advanced/grpc-advanced-edition",
"analysisFile": "analysis/grpc/grpc-advanced-edition.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 10,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "5d7621a42a017610d457eb66822091bee83fb83df79414d109d34200ca05e66e",
"analysisFileLines": 271,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-advanced-streaming",
"path": "src/grpc-advanced/grpc-advanced-streaming",
"analysisFile": "analysis/grpc/grpc-advanced-streaming.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 20,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "b7144c2db129493b703afe03b22ca5661bb555ff1ca973cae6239de3abfca371",
"analysisFileLines": 237,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-advanced-resilience",
"path": "src/grpc-advanced/grpc-advanced-resilience",
"analysisFile": "analysis/grpc/grpc-advanced-resilience.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 22,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "d684e476873691a71f123c457093b737015679755f2b096d94cfa32add42aeb4",
"analysisFileLines": 237,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-advanced-compat",
"path": "src/grpc-advanced/grpc-advanced-compat",
"analysisFile": "analysis/grpc/grpc-advanced-compat.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 24,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "108e118bce82ba5e84319bf32f25f7f1e1d10c32f4b34d937e87d3070d928082",
"analysisFileLines": 224,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
},
{
"id": "grpc-advanced-diagnostics",
"path": "src/grpc-advanced/grpc-advanced-diagnostics",
"analysisFile": "analysis/grpc/grpc-advanced-diagnostics.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"coverage": {
"fullRead": 7,
"structuralOnly": 1,
"excluded": 0,
"unclassified": 0
},
"previousAnalysisFile": "analysis/20-grpc-platform.md",
"ssotReview": "FULL_READ_DONE",
"integrationAnalysis": "analysis/20-grpc-platform.md",
"analysisFileSha256": "bdd18ca776a63dfe36aaedb5ffef46fcb118c6338d8ba4de75b828a1a42b0a12",
"analysisFileLines": 265,
"ssotReopenReason": "Behavior-bearing production implementation remains unread/STRUCTURAL_ONLY. Read and incorporate material src/main implementation before COMPLETE; only generated/declarative/non-semantic repetitive artifacts may remain STRUCTURAL_ONLY with a reason.",
"completionGate": {
"materialProductionFullReadRequired": true,
"allowStructuralOnlyFor": [
"generated/declarative artifacts",
"lockfiles",
"package-info",
"fixtures",
"repetitive non-behavior shells"
],
"forbidStructuralOnlyFor": [
"behavior-bearing src/main implementation"
],
"downstreamBlockedUntilComplete": true
}
}
],
"reanalysis": {
"baselineRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"targetRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"mode": "FULL_PROJECT",
"changedPaths": [],
"impactedScopes": [
"messaging-kafka",
"messaging-rabbit",
"messaging-pulsar-experimental",
"messaging-nats-experimental",
"messaging-spring-boot-starter",
"grpc-core-api",
"grpc-proto-contract",
"grpc-codegen",
"grpc-policy",
"grpc-server",
"grpc-client",
"grpc-discovery",
"grpc-admin",
"grpc-observability",
"grpc-operation-ledger-jpa",
"grpc-spring-boot-starter",
"grpc-testkit",
"grpc-advanced-bootstrap",
"grpc-advanced-edition",
"grpc-advanced-streaming",
"grpc-advanced-resilience",
"grpc-advanced-compat",
"grpc-advanced-diagnostics"
],
"requestedAt": "2026-08-31T14:29:00+09:00",
"completedAt": "2026-09-01T12:00:00+09:00",
"reason": "SSOT cycle 2 reopened: material production implementations in 23 leaves were still STRUCTURAL_ONLY; downstream synthesis invalidated until those leaf SSOTs pass the full-read gate.",
"previousArtifacts": {
"crossScopeAnalysis": {
"path": "analysis/99-cross-scope.md",
"status": "SUPERSEDED_BY_downstreamRefreshed",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916"
},
"finalDocument": {
"path": "final/document.md",
"status": "SUPERSEDED_BY_downstreamRefreshed",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916"
},
"rootTree": {
"path": "root-tree.md",
"status": "SUPERSEDED_BY_downstreamRefreshed",
"sourceDocumentHash": "10eabd7a4fd2d20444effb966e2779175cb2a1b15c53a5a3cdf8a3e3e402b2f7",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"topics": 25,
"nodes": {
"concept": 21,
"case": 211,
"reference": 50,
"openQuestion": 17,
"decision": 26,
"total": 325
},
"blockedFromGeneration": 1,
"kindsNote": "CONCEPT는 Studio/project contract가 지원하는 explanatory body record로 정식화했다. root-tree contract, record-kinds, review checklist, writing skill/template가 동일한 분류 기준을 사용한다.",
"coverageStatus": "VERIFIED_COMPLETE",
"unmappedCandidates": 0,
"candidateLedgerHash": "54595b4b36a7653fdaebea5d3eab2d63f2e38453ee87aa1aea5fb23254ee2fea",
"sourceManifestHash": "2cf5391ab044fc0fe0413225d0cda19bef58640d52eb3369712fb0e8e1ce3b21"
}
},
"staleArtifactsBeforeFullReadClosure": {
"invalidatedAt": "2026-08-31T23:30:00+09:00",
"reason": "Downstream artifacts were synthesized before all material production implementations passed FULL_READ.",
"crossScopeAnalysis": {
"path": "analysis/99-cross-scope.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"sha256": "8607da2ed56df04b2e4c01c9130b2c5e67d2a84c356f951e2691414eb4d34b4d",
"lines": 263
},
"finalDocument": {
"path": "final/document.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"sha256": "ffb48f22045635584085891b1931c2f39fa9bfb7193070dbddf85c7fefec1a92",
"lines": 1680
},
"rootTree": {
"path": "root-tree.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"sourceDocumentHash": "ffb48f22045635584085891b1931c2f39fa9bfb7193070dbddf85c7fefec1a92",
"candidateLedgerSha256": "b94bd68c50185440b2a32e789340e8ed4c7ebc50883f48cbd179d2bb77055a6d",
"sourceManifestSha256": "2cf5391ab044fc0fe0413225d0cda19bef58640d52eb3369712fb0e8e1ce3b21",
"sha256": "85bc08cc25dc029d976f2b79efd9df02e8288ae270949851823197f3b2ecc829",
"lines": 4097,
"topics": 25,
"nodes": {
"concept": 21,
"case": 211,
"reference": 52,
"decision": 26,
"openQuestion": 17,
"total": 327
},
"danglingRelations": 0,
"topicsWithNodeSections": 16,
"crossCuttingViews": 9,
"unmatchedTreeLabels": 0,
"note": "트리 개요는 25 TOPIC. 그중 16개가 자기 노드 절을 갖고, 9개는 다른 토픽의 노드를 주제별로 다시 묶는 교차 뷰다. 교차 뷰의 자식 라벨은 전부 실재 노드 제목과 일치한다."
}
},
"outcome": {
"leavesFullyRead": 23,
"mainFiles": 357,
"mainLines": 29542,
"testFiles": 121,
"testLines": 19756,
"structuralOnlyRemaining": 0,
"findingsInThose23": {
"total": 100,
"P1": 2,
"P2": 31,
"P3": 67
},
"newFromFullRead": {
"total": 92,
"P1": 2,
"P2": 25,
"P3": 65
},
"relocatedFromFamilyDocs": 8,
"projectTotalFindings": {
"total": 462,
"P1": 30,
"P2": 147,
"P3": 285,
"basis": "델타 조정값 — 422에서 23개 리프 몫 60을 빼고 100을 더했다. 나머지 38개 문서는 재측정하지 않았다."
},
"note": "첫 판에서 23개 리프를 FULL_READ_DONE 으로 표시하고 '395파일 전수 통독' 이라고 적었으나 실제로는 리프마다 일부만 읽은 상태였다. 사용자 지시에 따라 23개 리프를 파일 단위로 다시 세고 처음부터 다시 읽어 각 SSOT 의 Coverage ledger 와 §17 을 사실에 맞게 다시 썼다. 그 과정에서 '통독이 만든 새 finding 에 P1 은 없다' 는 앞선 결론이 뒤집혔다 — P1 이 둘 나왔고 둘 다 messaging 계열의 배선된 경로 위에 있다."
},
"downstreamRefreshed": {
"analysis/99-cross-scope.md": {
"status": "UPDATED",
"sha256": "538e4e72cf033a9e262d5bbccd4914ccb4f2aea405432efd034b719c64cd25ff",
"sections": [
"헤더 주",
"§0",
"§1.2",
"§3.5",
"§3.8(신설)",
"§4 10~12항(신설)",
"§6"
]
},
"final/document.md": {
"status": "UPDATED",
"sha256": "880d3a4a7dba4f6303ff69be9475190b62f2a9d03b7794482b900457ee045ad6",
"sections": [
"§1 숫자 표",
"§13.7",
"§14.2"
]
},
"root-tree.md": {
"status": "UPDATED",
"sha256": "98f442fc71922a8d2aa8f5fe25d380ce0bb8aa422880166c3f43387d8e8e9581",
"nodes": 949,
"added": 6,
"sourceDocumentSha256": "880d3a4a7dba4f6303ff69be9475190b62f2a9d03b7794482b900457ee045ad6",
"sourceManifestSha256": "77d8f6c4d5ab6e4efc5e21ed1fce5dcff8b365ed7a39f4e3f3968de18bf4dd76",
"candidateLedgerSha256": "32bc34bc953b541338476a1288661fb266db1ec618dfded97ed05eee6c65648b",
"topics": 44
},
"candidate-ledger.json": {
"status": "UPDATED",
"sha256": "32bc34bc953b541338476a1288661fb266db1ec618dfded97ed05eee6c65648b",
"total": 353,
"emitted": 304,
"added": 6
},
"root-tree-source-manifest.json": {
"status": "REGENERATED",
"sha256": "77d8f6c4d5ab6e4efc5e21ed1fce5dcff8b365ed7a39f4e3f3968de18bf4dd76",
"sources": 68,
"added": 43,
"staleHashesCorrected": 21,
"note": "README:40 계약대로 리프 SSOT 43편을 포함해 재생성했다. 기존 25개 중 21개는 매니페스트 생성(2026-08-31T02:15) 이후 문서가 바뀌었는데 갱신되지 않은 상태였다."
}
}
},
"crossScopeAnalysis": {
"path": "analysis/99-cross-scope.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"sha256": "538e4e72cf033a9e262d5bbccd4914ccb4f2aea405432efd034b719c64cd25ff",
"lines": 552,
"regeneratedFor": "cycle 2 전수 통독 반영 — §1.2 · §3.2/3.5 확장 · §3.7 신설 · §4 6~9항 · §6"
},
"finalDocument": {
"path": "final/document.md",
"status": "COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"sha256": "880d3a4a7dba4f6303ff69be9475190b62f2a9d03b7794482b900457ee045ad6",
"lines": 1810,
"regeneratedFor": "cycle 2 전수 통독 반영 — §14.2 신설 · §5.5 확장 · §8.2 9~13항 · 헤더 표"
},
"rootTree": {
"path": "root-tree.md",
"status": "COMPLETE",
"sha256": "98f442fc71922a8d2aa8f5fe25d380ce0bb8aa422880166c3f43387d8e8e9581",
"lines": 9541,
"nodes": 949,
"topics": 44,
"kinds": {
"CASE": 402,
"OPEN QUESTION": 31,
"DECISION": 25,
"CONCEPT": 386,
"REFERENCE": 105
},
"sourceDocumentSha256": "880d3a4a7dba4f6303ff69be9475190b62f2a9d03b7794482b900457ee045ad6",
"candidateLedgerSha256": "32bc34bc953b541338476a1288661fb266db1ec618dfded97ed05eee6c65648b",
"sourceManifestSha256": "77d8f6c4d5ab6e4efc5e21ed1fce5dcff8b365ed7a39f4e3f3968de18bf4dd76",
"regeneratedFor": "cycle 2 semantic audit + CONCEPT recall — 334 → 949 nodes",
"regeneratedAt": "2026-09-01T04:40:16+00:00"
},
"evidenceTasks": [
{
"kind": "terminal",
"asset": "tl-grpc-evidence-lanes",
"raw": "evidence/raw/tl-grpc-evidence-lanes.txt",
"meta": "evidence/meta/tl-grpc-evidence-lanes.json",
"svg": "evidence/terminal/tl-grpc-evidence-lanes.svg"
},
{
"kind": "terminal",
"asset": "tl-grpc-release-gate-no-producer",
"raw": "evidence/raw/tl-grpc-release-gate-no-producer.txt",
"meta": "evidence/meta/tl-grpc-release-gate-no-producer.json",
"svg": "evidence/terminal/tl-grpc-release-gate-no-producer.svg"
},
{
"kind": "terminal",
"asset": "tl-kafka-dedup-drift",
"raw": "evidence/raw/tl-kafka-dedup-drift.txt",
"meta": "evidence/meta/tl-kafka-dedup-drift.json",
"svg": "evidence/terminal/tl-kafka-dedup-drift.svg"
},
{
"kind": "terminal",
"asset": "tl-messaging-observation-noop",
"raw": "evidence/raw/tl-messaging-observation-noop.txt",
"meta": "evidence/meta/tl-messaging-observation-noop.json",
"svg": "evidence/terminal/tl-messaging-observation-noop.svg"
},
{
"kind": "terminal",
"asset": "tl-outbox-unsatisfiable-condition",
"raw": "evidence/raw/tl-outbox-unsatisfiable-condition.txt",
"meta": "evidence/meta/tl-outbox-unsatisfiable-condition.json",
"svg": "evidence/terminal/tl-outbox-unsatisfiable-condition.svg"
},
{
"kind": "terminal",
"asset": "tl-platform-suite-results",
"raw": "evidence/raw/tl-platform-suite-results.txt",
"meta": "evidence/meta/tl-platform-suite-results.json",
"svg": "evidence/terminal/tl-platform-suite-results.svg"
},
{
"kind": "terminal",
"asset": "tl-rotation-defect-reproduced",
"raw": "evidence/raw/tl-rotation-defect-reproduced.txt",
"meta": "evidence/meta/tl-rotation-defect-reproduced.json",
"svg": "evidence/terminal/tl-rotation-defect-reproduced.svg"
},
{
"kind": "terminal",
"asset": "tl-web-six-unowned-components",
"raw": "evidence/raw/tl-web-six-unowned-components.txt",
"meta": "evidence/meta/tl-web-six-unowned-components.json",
"svg": "evidence/terminal/tl-web-six-unowned-components.svg"
}
],
"lastRunAt": "2026-08-31T22:30:00Z",
"notes": [
{
"date": "2026-08-31",
"scope": "messaging platform family (25 leaves)",
"note": "25개 messaging leaf를 하나의 문서(analysis/19-messaging-platform.md)로 통합 분석했다. leaf 경계를 넘는 계약(capability 선언 → profile validator → 인증 증거 → 지원 문서)이 이 가족의 실제 설계 단위이기 때문이다. 분모 550(leaf 549 + 가족 CLAUDE.md 1), 7개 sub-scope, 미배정 0. runtime_memberships 실측 결과 출하 18 / build-only 7이며, 이 구분이 심각도 판정 축이다(모듈 17 §26.6 원칙). 발견 P1 1건 · P2 14건 · P3 10건, 그리고 '공개된 주장이 검증을 통과한' 항목 12건을 별도로 기록했다 — 19개 모듈 중 처음이다. P1은 docs/messaging/support-matrix.md의 capability 표가 Kafka deduplicatedPublish를 O로 적는데 코드는 false이고, 그 오해가 KafkaMessagingTransport javadoc이 명시적으로 지목한 피해(소비자가 자체 멱등성을 생략)라는 점이다. 테스트 레인 25개 전량 BUILD SUCCESSFUL (classes=110 tests=851 failures=0 skipped=0)."
},
{
"date": "2026-08-31",
"scope": "registry drift — 18 gRPC leaves",
"note": "교차 스코프 분석을 시작하면서 레지스트리를 다시 전수로 읽고 state.json과 대조한 결과 **등록 모듈 62개 중 state.json이 추적하던 것은 44개**였다. 누락 18개는 전부 gRPC 플랫폼 가족(src/grpc 12 + src/grpc-advanced 6)이고 tracked 381파일 · main Java 260 · main LOC 18,726, 전원 runtime_memberships=[]다. 원인은 분석 누락이 아니라 **리비전 이동**이다 — 분석 기준선 a24ece9c 이후 커밋 21234e38('feat: grpc 기능 deep 구현', 2026-08-31)이 gRPC 가족을 새로 추가했다. git diff a24ece9c..HEAD는 400 files / +40,217 / -4이고 변경 경로는 src/grpc*, modules.json(18개 항목 추가), src/build.gradle(테스트 클래스패스 조건에 :grpc: 추가), docs 15개뿐이다. **src/messaging 이하는 한 줄도 바뀌지 않았으므로 모듈 01~19의 분석과 증거는 그대로 유효하다.** state.json의 gitRevision을 HEAD로 올리고 reanalysis 블록을 ADDITIVE_SCOPE로 채웠으며 18개 스코프를 PENDING으로 추가했다. 교차 스코프·최종 문서는 이 18개를 분석한 뒤에 쓴다 — 62개 중 44개만 덮은 교차 분석은 같은 분모 오류를 그대로 물려받는다."
},
{
"date": "2026-08-31",
"scope": "gRPC platform family (18 leaves)",
"note": "18개 gRPC leaf를 analysis/20-grpc-platform.md 한 문서로 통합 분석했다. 분모 383(leaf 381 + 가족 CLAUDE.md 2), main Java 260 / 18,726 LOC, 6개 sub-scope, 미배정 0. 18개 전부 runtime_memberships=[]이므로 가족 전체가 build-only이고, 그 사실을 지원 매트릭스가 'Not released … build-only'로 정확히 공시한다 — 모듈 19 §6.4(messaging 매트릭스가 정반대를 주장한 P2)의 반대 사례다. 발견 P1 0건 · P2 4건 · P3 3건이고, 검증된 설계 8건을 별도 기록했다. P1이 0인 이유는 어떤 배포도 이 코드를 싣지 않기 때문이다. 네 개의 P2는 모두 같은 축에 있다 — 판정하는 코드는 잘 만들어졌고 그것을 부르는 코드가 없다: 시작 검증기 미호출, 릴리스 게이트의 증거를 아무도 생산하지 않음(Gradle 태스크 0 · CI 워크플로 0), 증거 레인 25개가 check 밖, 조립 경계가 정책 객체 9개만 생성. 이 가족은 messaging의 MSG-015 재발 방지에는 성공했으나(adapter-inbound-grpc가 레지스트리상 이 가족을 볼 수 없다) messaging이 값비싸게 배운 '게이트는 스스로 증거를 읽고 CI가 그것을 돌려야 한다'는 교훈은 옮겨 오지 않았다. 테스트: 18 leaf :test 전량 BUILD SUCCESSFUL (classes=71 tests=579 failures=0 skipped=0), 증거 레인 3종 직접 실행 통과(inProcess 7 · netty 9 · fault 9)."
},
{
"date": "2026-08-31",
"scope": "correction — analysis/20 coverage ledger",
"note": "모듈 20의 커버리지 원장을 정정했다. 최초 기재는 leaf당 FULL_READ를 절반 안팎(합계 약 180)으로 적었으나 실제로 전문에 준하게 읽은 파일은 **16개**다. 나머지 367개는 STRUCTURAL_ONLY이며 근거는 파일·패키지 전수 목록, 260개 main 타입 전수 도달성 스윕, 레지스트리·build.gradle·.imports 전수 판독, 18 leaf :test 전량 + 증거 레인 3종 실행이다. 조립·경계·거버넌스 층은 전수 확인했고 각 leaf의 구현 내부는 읽지 않았다 — 특히 grpc-policy(62 main / 4,781 LOC)와 advanced streaming/resilience는 미독이다. 정정과 함께 §3.1을 보강했다: GrpcPlatformStartupValidator 본문(188줄)을 읽어 실행되지 않는 규칙이 **13개**(transport·security 4 / executor 2 / methods 4 / channels 2 / advanced isolation 1)임을 전수 확인했고, javadoc이 그 13개를 고른 기준을 'None of them fails a smoke test'로 적는다. 부수적으로 §2.2도 정정했다 — Stable→advanced 금지의 'runtime 강제' 절반(GrpcStableBuildInvariant)은 이 validator를 통해서만 호출되므로 실행되지 않으며, 오늘 살아 있는 강제는 build time 한 층이다."
},
{
"date": "2026-08-31",
"scope": "analysis/20 §7 — implementation-layer read",
"note": "사용자 지시로 모듈 20이 미독으로 남긴 구현 내부를 읽었다. 초점은 동시성과 경계다. 방법: 가족 전체 main 소스에서 (a) mutable 상태 보유 클래스 + 동기화 마커 수, (b) get() 비교 후 increment/set 하는 check-then-act, (c) 키가 늘기만 하는 컬렉션을 전수 추출한 뒤 각 후보를 본문으로 확인했다. **P2 6건 확인, 2건은 본문 확인 후 철회**(GrpcChannelRuntime.draining은 이미 volatile, GrpcClientMessageDeduplicator는 endSession이 두 맵을 정리). 확인된 6건: GrpcAdmissionController TOCTOU(조립되는 bean), GrpcStreamAdmission TOCTOU + perCaller 무제한, GrpcSerializedStreamWriter의 DROP_OLDEST 바이트 오계상(테스트는 고정 크기 sizer라 불가시), GrpcCredentialRotationManager의 CAS 부재(messaging이 CredentialRotationContractTest로 닫은 결함의 재현), GrpcOutcomeReplay 무제한 적재, GrpcCompletionReconciler의 비동기화 ArrayList. 여섯 중 넷이 같은 형태이며 정확한 참조 구현(GrpcRetryBudget의 CAS 루프, GrpcSerializedStreamWriter의 synchronized, GrpcClientMessageDeduplicator의 endSession)이 같은 가족 안에 있다. 커버리지 FULL_READ 16 → 41로 갱신. 모듈 20 발견 종합 P2 4건 → 10건."
},
{
"date": "2026-08-31",
"scope": "correction — final/document.md rewritten",
"note": "최종 문서를 297줄에서 1,635줄로 다시 썼다. 최초 판은 통합 정본이 아니라 색인이었다 — 모듈 문서를 가리키기만 하고 내용을 담지 않았다. 원인은 템플릿의 '새로운 사실을 이 문서에서 처음 만들어내지 않는다'를 '짧게 쓰고 모듈을 가리켜라'로 잘못 읽은 것이다. 그 문장은 사실을 지어내지 말라는 뜻이지 사실을 빼라는 뜻이 아니다. 사용자가 analysis/05(4,674줄, 단일 모듈 문서)를 근거로 지적했다. 다시 쓴 판은 13개 절 + 부록 3개이고, 각 절이 모듈 문서에서 실제 코드·javadoc 인용·실패 시나리오·표를 끌어와 담는다. 주요 절 크기: 실행 경로 239줄, 데이터/상태 249줄, 실패/운영 200줄, 반복된 형태 152줄, 검증 137줄, 경계 132줄, 프로젝트 지도 108줄. 재사용 규칙을 10개에서 20개로 늘렸고(모듈 05의 설계 원칙 14가지에서 6개 추가), 명시적 설계 결정을 13개에서 34개로 늘려 다섯 범주(계약·경계 / 실패·불확실성 / 조립·활성화 / 데이터·경계값 / 증거·게이트)로 나눴다. 부록 A가 모듈 문서 21편의 줄 수와 이 문서의 어느 절이 그것을 요약하는지를 매핑하고, 부록 B가 실행하지 않은 컨테이너 레인의 명령을 명시하며, 부록 C가 재독 순서를 적는다."
},
{
"date": "2026-08-31",
"scope": "root-tree derived",
"note": "final/document.md(sha256 10eabd7a…)를 7개 Topic · 41개 노드로 분해했다. CASE 14 · REFERENCE 15 · OPEN QUESTION 4 · DECISION 8이고, 생성 차단은 1건(widen-doc-contract-assertions, NEEDS_DECISION — 프로젝트가 선택한 기록이 없는 권고). Topic은 디렉터리가 아니라 공학 문제 공간으로 잡았다 — 일곱 개 전부 여러 leaf/모듈을 가로지른다. DECISION 8건 중 2건은 ADR이 직접 근거다(ADR-JPA-003 completion-unknown, ADR-GRPC-003 three-axis evidence, ADR-GRPC-001은 grpc build-only 결정의 근거). 나머지는 코드/build.gradle의 기록된 근거 주석이다. 런타임 확증이 필요한 주장은 Case의 missing-verification에 적고 그중 두 건은 open-question:one-boot-would-settle-two-findings로 분리했다 — 부팅 한 번으로 messaging 관측 no-op과 outbox 조건 사슬을 동시에 확정할 수 있다. 빈 브랜치 5개는 채우지 않았다(대칭은 품질 목표가 아니라는 계약 조항). decomposition-checklist 전 항목 통과. 다음 단계에서 터미널 증거 SVG가 필요한 노드 9개를 문서 말미에 목록화했다."
},
{
"date": "2026-08-31",
"scope": "terminal evidence assets",
"note": "root-tree의 Case 중 명령 출력으로 증명 가능한 것에 대해 터미널 증거 8종을 캡처했다. 각각 raw(헤더 없는 원문) · meta(command·cwd·executedAt·exitCode·sourceRevision) · SVG(render_terminal.py)를 함께 만들었고, 도구 README의 규칙대로 정본은 raw이고 SVG는 표현이다. 출력에 secret이 없어 redaction은 발생하지 않았다. 8종 전부 exit 0. 핵심은 tl-kafka-dedup-drift(P1 — 코드 배열의 false와 문서 표의 O를 10줄에 나란히), tl-web-six-unowned-components(여섯 컴포넌트 mainRefs=0과 두 자동설정이 실제로 도달함을 동시에), tl-platform-suite-results(두 가족 851/579 통과 + 미실행 레인 목록을 같은 화면에)다. 자산이 없는 Case 6건은 이유를 root-tree 말미에 적었다 — 컨테이너 필요 1건, 기존 probe의 clean 재캡처 필요 2건, 명령 출력이 아닌 근거 3건. evidence/svg는 비워 뒀다(다이어그램은 사건 발생의 증명이 아니라는 스킬 규칙)."
},
{
"date": "2026-08-31",
"scope": "root-tree — full decomposition",
"note": "최초 판(7 Topic / 41 노드)을 16 Topic / 169 노드로 전면 재분해했다. 재분해 이유는 사용자가 자기 N+1 트리(단일 조사에 25노드)와 비교해 지적한 것이다 — 62 leaf · 320,318 LOC · 모듈 문서 18,769줄을 41노드로 누른 것은 과압축이었다. 실제로 cache-redis(933줄) · graphql(1,122줄) · objectstorage(793줄) · httpclient(716줄, P1 포함) · fileserver(656줄)가 기여 0이었다. 새 Topic 9개를 추가했다 — owner-safe-state-machines · transaction-deadline-and-pool · schema-ownership-and-capability-streams · redis-command-admission · http-failure-classification · fileserver-state-and-fencing · objectstorage-staged-lifecycle · self-disclosure-grading · multitenancy-isolation. 그리고 사용자가 알려준 **CONCEPT 종류를 다섯 번째 브랜치로 추가**해 21개를 배치했다 — 사건(CASE)도 규칙(REFERENCE)도 아닌 '이 코드베이스가 구현한 메커니즘의 설명'이 그동안 두 종류에 억지로 눌려 있었다. 관계는 보통 CONCEPT ← CASE → REFERENCE다. 검증: slug 169개 전부 유일, relations의 참조 대상 미정의 0건. 초안에서 중복 slug 3건과 미정의 참조 3건이 나와 고쳤다(중복은 홈 Topic 하나만 남기고, 누락 Case 둘을 실제로 작성). 생성 차단 1건은 widen-doc-contract-assertions(NEEDS_DECISION). 터미널 증거 8종을 이미 만들었고, 재캡처가 필요한 기존 probe 8건과 명령 출력이 근거가 아닌 노드들을 문서 말미에 구분해 적었다."
},
{
"date": "2026-09-01",
"scope": "cycle 2 재분석 (23 리프)",
"note": "messaging 5 + grpc 18 리프의 src/main production 구현 395개 파일을 축자 통독했다. 리프별 canonical SSOT를 analysis/messaging/*.md · analysis/grpc/*.md 에 재작성했고 각 문서의 Coverage ledger를 FULL_READ 로 전환했다. 반복 패턴 다섯 가지가 리프 경계를 넘어 나타난다 — (1) AtomicReference/AtomicInteger를 쓰면서 비교 후 교체를 하지 않는 형태 5곳, (2) 선언되고 주입되지 않는 검증기 4곳, (3) 프로파일에서 파생되지 않는 능력 선언 3곳, (4) 아무도 돌리지 않는 레인·게이트 4곳, (5) IPv4 전용 가정 1곳. 새 finding 52건 · 재배치 8건. 이 다섯은 cross-scope 재생성의 입력이다."
}
],
"integrationAnalyses": [
{
"id": "messaging-platform-family",
"path": "analysis/19-messaging-platform.md",
"status": "BASELINE_COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"role": "INTEGRATION_ONLY"
},
{
"id": "grpc-platform-family",
"path": "analysis/20-grpc-platform.md",
"status": "BASELINE_COMPLETE",
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
"role": "INTEGRATION_ONLY"
}
],
"leafDecomposition": {
"requestedAt": "2026-09-01",
"reason": "root-tree 는 final/document.md 를 분해한 것이고 그 문서는 최상위 분석 23편의 종합이다. messaging·grpc 두 가족은 가족 문서 둘로만 대표되므로 43편의 리프 SSOT 가 거의 분해되지 않았다.",
"before": {
"leafCitingNodes": 12,
"leafDocumentsCited": 10,
"totalNodes": 340
},
"after": {
"leafCitingNodes": 45,
"leafDocumentsCited": 24,
"totalNodes": 373
},
"leafFindings": {
"total": 226,
"P1": 5,
"P2": 66,
"P3": 155,
"messaging": 150,
"grpc": 76
},
"topicsAdded": [
{
"topic": "capability-declaration-vs-proof",
"nodes": 7,
"question": "능력 선언 세 출처가 같은 답을 하는가, 그 답이 프로파일에서 파생되는가"
},
{
"topic": "non-atomic-check-then-act",
"nodes": 5,
"question": "원자 타입을 쓰면서 원자성을 얻지 못한 자리"
},
{
"topic": "retention-and-unbounded-growth",
"nodes": 6,
"question": "무엇을 언제까지 기억하는가, 포트가 어느 형태를 기본으로 만드는가"
},
{
"topic": "drain-and-shutdown-ordering",
"nodes": 5,
"question": "선언된 종료 순서와 실제 종료 경로의 거리"
},
{
"topic": "operator-approval-and-destructive-operations",
"nodes": 6,
"question": "승인·검증·실행이 분리되어 있는가"
},
{
"topic": "failure-category-across-adapters",
"nodes": 4,
"question": "범주가 재시도·DLQ·대시보드에 무엇을 지시하는가"
}
],
"nodeKinds": {
"CONCEPT": 5,
"CASE": 17,
"REFERENCE": 11
},
"recordsWritten": 33,
"note": "나머지 findings 는 기존 Reference 가 이미 규칙을 갖고 있어 노드를 늘리지 않았다. TOPIC 16(multitenancy-isolation)이 172 노드를 갖는 것은 이전 coverage sweep 이 9개 예정 Topic 을 만들지 않고 그 아래에 쌓은 결과이고, 이번 재분해의 대상이 아니다."
},
"candidateRecall": {
"cycle": 2,
"canonicalSsot": 61,
"explicitFindings": 392,
"verifierInventoryAnchors": 425,
"unaccounted": 0,
"ledger": {
"total": 965,
"emitted": 915,
"merged": 49,
"blocked": 1,
"rejected": 0
},
"rootTree": {
"CASE": 402,
"OPEN QUESTION": 31,
"DECISION": 25,
"CONCEPT": 386,
"REFERENCE": 105,
"total": 949,
"topics": 44
},
"audit": "notes/tech-log-candidate-recall-audit.md",
"note": "61개 canonical module SSOT 를 SSOT 로 전수 recall. family 문서 6건 별도 disposition(EMITTED 5·MERGED 1). verifier 를 analysis/**/*.md 전체로 확장해 leaf finding 도 검증 대상이 되게 했다."
},
"candidateLedger": {
"path": "candidate-ledger.json",
"sha256": "32bc34bc953b541338476a1288661fb266db1ec618dfded97ed05eee6c65648b",
"counts": {
"total": 965,
"emitted": 915,
"merged": 49,
"blocked": 1,
"rejected": 0
},
"unmapped": 0
},
"sourceManifest": {
"path": "root-tree-source-manifest.json",
"sha256": "77d8f6c4d5ab6e4efc5e21ed1fce5dcff8b365ed7a39f4e3f3968de18bf4dd76",
"sources": 68
},
"conceptRecall": {
"canonicalSsot": 61,
"reviewed": 568,
"emitted": 360,
"merged": 138,
"rejected": 70,
"before": 26,
"after": 386,
"zeroModules": 5,
"audit": "notes/tech-log-concept-recall-audit.md"
},
"classificationAudit": {
"checkedAgainstSsotHints": 90,
"mismatches": 1,
"fixed": [
"messaging-cloudevents #L518 DECISION → CASE (SSOT 는 CASE 후보; 뒤의 DECISION 은 NEEDS_DECISION)",
"decision:widen-doc-contract-assertions → open-question (decision-status NOT_DECIDED)"
],
"referenceReshaped": 41,
"referenceRuleShaped": "105/105"
},
"pipelineStatus": "COMPLETE",
"updatedAt": "2026-09-01T04:40:16+00:00"
}