From ffe4e0de517729e6624cc4c7e066d54efb1f5dc4 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 29 Aug 2026 14:20:59 +0800 Subject: [PATCH] test(architecture): migrate llm egress policy --- docs/architecture-overview.md | 4 ++-- .../architecture/dependency-policy.json | 10 ++++------ tests/test_architecture_egress.py | 20 ++++++++----------- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/docs/architecture-overview.md b/docs/architecture-overview.md index e70df7370..c3392b9ff 100644 --- a/docs/architecture-overview.md +++ b/docs/architecture-overview.md @@ -709,7 +709,7 @@ flowchart LR `--write-host` 不会替代人工决策。 - 同一 baseline 的 `direct_adapter_imports` 记录现存原始直连;Application 与 Chain 均已清零, policy 目标为空集合。新增、替换、删除后未清理 policy 都会失败。 -- `direct_egress` 记录全宿主 55 条 raw transport、network SDK 和协议操作 identity;普通 HTTP/ +- `direct_egress` 记录全宿主 53 条 raw transport、network SDK 和协议操作 identity;普通 HTTP/ Session bridge 与 Application DNS I/O 债务已清零,其余 canonical transport、SDK、 stream/vendor/diagnostic/control-plane 事实是精确 containment。每条初始边的指纹由测试独立冻结, bindings/uses 变化、分类互换、通配导入和初始边增长都会失败;债务删除时同步删除冻结项以禁止恢复, @@ -732,7 +732,7 @@ flowchart LR | 内部导入边 | 8,106 | | 非平凡 SCC | 1(精确 containment 的 TMDB 移植包环) | | Application / Chain 具体 Adapter 直连 | 0 / 0 | -| Direct egress | 55(债务已清零,55 条精确 containment) | +| Direct egress | 53(债务已清零,53 条精确 containment) | | Module Contract V2 spec | 217(其中 215 个进入 `run_module` 观察面) | | Event Contract | 53 | | Event producer / consumer | 95(94 静态、1 动态)/ 17(16 静态、1 动态) | diff --git a/tests/fixtures/architecture/dependency-policy.json b/tests/fixtures/architecture/dependency-policy.json index 44af44ccc..f429e2de5 100644 --- a/tests/fixtures/architecture/dependency-policy.json +++ b/tests/fixtures/architecture/dependency-policy.json @@ -127,18 +127,16 @@ "reason": "命名 SDK 或显式注入的 SDK transport 由该精确 source 持有,不授权新增调用方。", "facts": [ {"source": "app.agent.llm.capability", "target": "openai", "kind": "network_sdk", "fingerprint": "60160ab01b60be2c9794b9724a50b90f8875c6a10748ff9392a1e4bc7d48c334"}, - {"source": "app.agent.llm.helper", "target": "google.genai", "kind": "network_sdk", "fingerprint": "d41688ecda4c5de296fabb0d0d25c79a7b0f29f67ccdd44569dc1110e1db9b86"}, {"source": "app.agent.llm.helper", "target": "httpx", "kind": "raw_transport", "fingerprint": "caeccd432f48d9a23948dd5b9220ddbebc57d2b2936bfa499fc7d4876e935ea8"}, {"source": "app.agent.llm.helper", "target": "langchain_anthropic", "kind": "network_sdk", "fingerprint": "c8d2c3166c4d42d61e7ef38a25080cac0f93422f47393df6dc19b329a7f72265"}, {"source": "app.agent.llm.helper", "target": "langchain_aws", "kind": "network_sdk", "fingerprint": "51dd02f5e2305cce4e1f6f29b4ed47edf54dde9f6557781178a6edf96bfeeb6b"}, {"source": "app.agent.llm.helper", "target": "langchain_deepseek", "kind": "network_sdk", "fingerprint": "bcf8b1ffae0995cfc33cfe26609cef8014cd2ce036b845c2a88c0cd878b1ebc4"}, {"source": "app.agent.llm.helper", "target": "langchain_google_genai", "kind": "network_sdk", "fingerprint": "79ae88c63908da9ea36dcfc23c4ad5345bc5d1977b80cc2e0b89292d063ed8ee"}, {"source": "app.agent.llm.helper", "target": "langchain_openai", "kind": "network_sdk", "fingerprint": "15775bf1694780d5cf516e6cc3d3b5174ebb25e3038433132d3071e6abceba52"}, - {"source": "app.agent.llm.helper", "target": "openai", "kind": "network_sdk", "fingerprint": "dbebd5e9fa38b2a525a5a2e5a92d855ba9d05762410590bfb544e665fe38f620"}, - {"source": "app.agent.llm.provider", "target": "boto3", "kind": "network_sdk", "fingerprint": "04ca4b5ecbda1531266d5f53817dde061dcfdd3293cabf9301fc8d8e4c281a88"}, - {"source": "app.agent.llm.provider", "target": "botocore", "kind": "network_sdk", "fingerprint": "fbeaa702703665ca60233a153aade0da7e49dfb6fe31f72e5593c883fb7d3f11"}, - {"source": "app.agent.llm.provider", "target": "google.genai", "kind": "network_sdk", "fingerprint": "b1a42e9a06f7cf3bdd1cb069a73c3597ebd0433cf64da6c0a305cccb56d257b7"}, - {"source": "app.agent.llm.provider", "target": "openai", "kind": "network_sdk", "fingerprint": "ffac3b355eb640f6421299cf838cb4e24866a39afabd9dcfd8d0f340925dc1a8"}, + {"source": "app.agent.llm.discovery", "target": "boto3", "kind": "network_sdk", "fingerprint": "9b49a7988025e00f5758115804281695d11e5327b8cd49f662ec579d29419f11"}, + {"source": "app.agent.llm.discovery", "target": "botocore", "kind": "network_sdk", "fingerprint": "74285ca518bd6e863adc78e84a387abd84c4f8fd22872e447a9c4acf64386b66"}, + {"source": "app.agent.llm.discovery", "target": "google.genai", "kind": "network_sdk", "fingerprint": "5b87a7bb210b521bd21971fb6e3d19ca450658548670106e3c756c0ce3a83cad"}, + {"source": "app.agent.llm.discovery", "target": "openai", "kind": "network_sdk", "fingerprint": "fff154461ff3fdfdf1daea0530dcb68589d6ad7a67f3966e3b86338b483e6dfd"}, {"source": "app.agent.tools.impl.search_web", "target": "ddgs", "kind": "network_sdk", "fingerprint": "377e73bb3be804b825d60ad6e792344ca633de107f8c4dbb45d50a34a4dfa04b"}, {"source": "app.api.endpoints.message", "target": "pywebpush", "kind": "network_sdk", "fingerprint": "7d83ca0dc89dfb6af1cdd7bc90d922105de94222e4e3a44bba4f53bbd97bc31b"}, {"source": "app.modules.discord.discord", "target": "discord", "kind": "network_sdk", "fingerprint": "e1486525fedbfe574aa47d60b483426c8c48e4e27fa35dbe34f6cd2f47d37c86"}, diff --git a/tests/test_architecture_egress.py b/tests/test_architecture_egress.py index 990ce9b18..4a2f21c64 100644 --- a/tests/test_architecture_egress.py +++ b/tests/test_architecture_egress.py @@ -27,18 +27,16 @@ FROZEN_EGRESS_EDGES_BY_REASON = { }, "sdk_transport": { ("app.agent.llm.capability", "openai"), - ("app.agent.llm.helper", "google.genai"), ("app.agent.llm.helper", "httpx"), ("app.agent.llm.helper", "langchain_anthropic"), ("app.agent.llm.helper", "langchain_aws"), ("app.agent.llm.helper", "langchain_deepseek"), ("app.agent.llm.helper", "langchain_google_genai"), ("app.agent.llm.helper", "langchain_openai"), - ("app.agent.llm.helper", "openai"), - ("app.agent.llm.provider", "boto3"), - ("app.agent.llm.provider", "botocore"), - ("app.agent.llm.provider", "google.genai"), - ("app.agent.llm.provider", "openai"), + ("app.agent.llm.discovery", "boto3"), + ("app.agent.llm.discovery", "botocore"), + ("app.agent.llm.discovery", "google.genai"), + ("app.agent.llm.discovery", "openai"), ("app.agent.tools.impl.search_web", "ddgs"), ("app.api.endpoints.message", "pywebpush"), ("app.modules.discord.discord", "discord"), @@ -106,18 +104,16 @@ FROZEN_EGRESS_FINGERPRINT_BY_EDGE = { ("app.adapters.network.ip", "socket.gethostbyname"): "a43e8969e2f26546fcf925b258728b309f1b9b966ff3c7b48a64273b8c82d048", ("app.adapters.network.resolver", "socket.getaddrinfo"): "1b1ce6763d730d7aa9c35d32a668560013c939467dcb3087357ffa53653ff306", ("app.agent.llm.capability", "openai"): "60160ab01b60be2c9794b9724a50b90f8875c6a10748ff9392a1e4bc7d48c334", - ("app.agent.llm.helper", "google.genai"): "d41688ecda4c5de296fabb0d0d25c79a7b0f29f67ccdd44569dc1110e1db9b86", ("app.agent.llm.helper", "httpx"): "caeccd432f48d9a23948dd5b9220ddbebc57d2b2936bfa499fc7d4876e935ea8", ("app.agent.llm.helper", "langchain_anthropic"): "c8d2c3166c4d42d61e7ef38a25080cac0f93422f47393df6dc19b329a7f72265", ("app.agent.llm.helper", "langchain_aws"): "51dd02f5e2305cce4e1f6f29b4ed47edf54dde9f6557781178a6edf96bfeeb6b", ("app.agent.llm.helper", "langchain_deepseek"): "bcf8b1ffae0995cfc33cfe26609cef8014cd2ce036b845c2a88c0cd878b1ebc4", ("app.agent.llm.helper", "langchain_google_genai"): "79ae88c63908da9ea36dcfc23c4ad5345bc5d1977b80cc2e0b89292d063ed8ee", ("app.agent.llm.helper", "langchain_openai"): "15775bf1694780d5cf516e6cc3d3b5174ebb25e3038433132d3071e6abceba52", - ("app.agent.llm.helper", "openai"): "dbebd5e9fa38b2a525a5a2e5a92d855ba9d05762410590bfb544e665fe38f620", - ("app.agent.llm.provider", "boto3"): "04ca4b5ecbda1531266d5f53817dde061dcfdd3293cabf9301fc8d8e4c281a88", - ("app.agent.llm.provider", "botocore"): "fbeaa702703665ca60233a153aade0da7e49dfb6fe31f72e5593c883fb7d3f11", - ("app.agent.llm.provider", "google.genai"): "b1a42e9a06f7cf3bdd1cb069a73c3597ebd0433cf64da6c0a305cccb56d257b7", - ("app.agent.llm.provider", "openai"): "ffac3b355eb640f6421299cf838cb4e24866a39afabd9dcfd8d0f340925dc1a8", + ("app.agent.llm.discovery", "boto3"): "9b49a7988025e00f5758115804281695d11e5327b8cd49f662ec579d29419f11", + ("app.agent.llm.discovery", "botocore"): "74285ca518bd6e863adc78e84a387abd84c4f8fd22872e447a9c4acf64386b66", + ("app.agent.llm.discovery", "google.genai"): "5b87a7bb210b521bd21971fb6e3d19ca450658548670106e3c756c0ce3a83cad", + ("app.agent.llm.discovery", "openai"): "fff154461ff3fdfdf1daea0530dcb68589d6ad7a67f3966e3b86338b483e6dfd", ("app.agent.tools.impl.search_web", "ddgs"): "377e73bb3be804b825d60ad6e792344ca633de107f8c4dbb45d50a34a4dfa04b", ("app.api.endpoints.message", "pywebpush"): "7d83ca0dc89dfb6af1cdd7bc90d922105de94222e4e3a44bba4f53bbd97bc31b", ("app.cli", "urllib.request"): "71b3e5be2a7d85fdc7a207d15c0e690d7ab96b335b882a3eaec03a1cb4ec1d1b",