{ "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" }