From 4764cb48118975b0bd05395eaafd31c545c242ed Mon Sep 17 00:00:00 2001 From: agent-exec-transport Date: Sun, 18 Oct 2026 11:53:53 +0000 Subject: [PATCH] agent-exec transport 41538d22ba2a4e9bf86b9719a1257461/4985036a61a6 --- tests/integration/regulations-kb/README.md | 7 ++++--- tests/integration/regulations-kb/run.sh | 4 ++-- tests/test_regulations_kb_pin.py | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/tests/integration/regulations-kb/README.md b/tests/integration/regulations-kb/README.md index a3c679e6..1a8a70e6 100644 --- a/tests/integration/regulations-kb/README.md +++ b/tests/integration/regulations-kb/README.md @@ -24,8 +24,9 @@ Dev 侧 Backend/Documents/Frontend/UI 的 gitlink 由本仓 `modules/` 固定, - `SVC_RDM_SRC_DIR`:RDM 检出,位于 `rdm_sha`,submodule 已递归物化。 - `KB_SRC_DIR`:KB-Regulations 检出,位于 `kb_sha`,submodule 已物化。 - Go 与 Node(RDM 测试及客户端制品构建所需)。 -- 客户端制品扫描需要已构建的 RDM 产物(RDM 检出的 `bin/`、`.build/product/frontend/dist`), - 或用 `REGKB_SCAN_DIRS` 指定待扫目录(空格分隔)。 +- 客户端制品扫描需要已构建的 RDM 产品前端制品(RDM 检出的 `.build/product/frontend/dist`), + 或用 `REGKB_SCAN_DIRS` 指定待扫目录(空格分隔)。服务端二进制 `bin/` 不是客户端制品, + 且携带 `KBREG_*` 变量名,因此不扫描。 ## 用法 @@ -43,7 +44,7 @@ KBREG_TEST_DATABASE_URL=... SVC_RDM_SRC_DIR=/path/to/rdm KB_SRC_DIR=/path/to/kb |---|---|---| | `kb-test-pg` | `make -C "$KB_SRC_DIR" test-pg` | provider 组合链;dump/restore 后重建索引仍保持语料修订哈希与历史引用解析;provider/解析器不可用;凭据注入、轮换与撤销 | | `rdm-kbreg` | `GOWORK=off go test -count=1 ./plugins/kbreg/...`,以及 `-run 'Composed\|RegCite\|Citation\|RegCheck\|RegBatch\|RegAudit'` 覆盖 `./internal/rdmapp/...`、`./plugins/rdm/...` | 完整法规问答的双通道记录、条款引用与审计批次重放;缺一通道时报告降级而非双源通过;保密词留在本地;凭据不进入输出;审计封印校验 | -| `client-asset-secret-scan` | 扫描 `REGKB_SCAN_DIRS`(缺省为 RDM 的 `bin/` 与 `.build/product/frontend/dist`) | 凭据不出现在客户端制品:任何文件含字符串 `KBREG_`,或含环境中非空 `KBREG_*KEY*`、`KBREG_*TOKEN*`、`KBREG_DATABASE_URL` 的值即失败;只打印文件路径与变量名。没有可扫目录时失败 | +| `client-asset-secret-scan` | 扫描 `REGKB_SCAN_DIRS`(缺省仅为 RDM 产品前端制品 `.build/product/frontend/dist`;服务端二进制 `bin/` 不是客户端制品,携带 `KBREG_*` 变量名,不扫描) | 凭据不出现在客户端制品:任何文件含字符串 `KBREG_`,或含环境中非空 `KBREG_*KEY*`、`KBREG_*TOKEN*`、`KBREG_DATABASE_URL` 的值即失败;只打印文件路径与变量名。没有可扫目录时失败 | 跨项目与受限来源的拒绝/脱敏场景归入 `rdm-kbreg` 阶段所选的 RDM 命令总线测试;具体用例以固定 RDM 修订中的测试为准。 diff --git a/tests/integration/regulations-kb/run.sh b/tests/integration/regulations-kb/run.sh index b3231170..8cdeb657 100755 --- a/tests/integration/regulations-kb/run.sh +++ b/tests/integration/regulations-kb/run.sh @@ -85,12 +85,12 @@ stage_scan() { if [ -n "${REGKB_SCAN_DIRS:-}" ]; then read -r -a dirs <<< "$REGKB_SCAN_DIRS" else - for d in "$rdm_dir/bin" "$rdm_dir/.build/product/frontend/dist"; do + for d in "$rdm_dir/.build/product/frontend/dist"; do [ -d "$d" ] && dirs+=("$d") done fi if [ "${#dirs[@]}" -eq 0 ]; then - echo "scan: 没有可扫描的客户端制品目录(先构建 RDM 产品,或设置 REGKB_SCAN_DIRS)" >&2 + echo "scan: 没有可扫描的客户端制品目录(先构建 RDM 产品以生成 .build/product/frontend/dist,或设置 REGKB_SCAN_DIRS)" >&2 return 1 fi local secret_vars=() name diff --git a/tests/test_regulations_kb_pin.py b/tests/test_regulations_kb_pin.py index 2bfb78ca..483c8389 100644 --- a/tests/test_regulations_kb_pin.py +++ b/tests/test_regulations_kb_pin.py @@ -97,6 +97,24 @@ class RegulationsKbPinTests(unittest.TestCase): self.assertNotIn("=== stage", proc.stdout) self.assertNotIn("/nonexistent-fake", proc.stdout + proc.stderr) + def test_scan_default_excludes_server_bin(self): + text = RUN.read_text() + loops = [ln.strip() for ln in text.splitlines() if ln.strip().startswith('for d in "$rdm_dir/')] + self.assertEqual(len(loops), 1) + self.assertIn('"$rdm_dir/.build/product/frontend/dist"', loops[0]) + self.assertNotIn('"$rdm_dir/bin"', text) + + with tempfile.TemporaryDirectory() as rdm_dir: + Path(rdm_dir, "bin").mkdir() + Path(rdm_dir, "bin", "rdm").write_text("KBREG_DATABASE_URL\n") + script = 'dirs=(); ' + loops[0] + ' [ -d "$d" ] && dirs+=("$d"); done; printf "%s\\n" "${dirs[@]}"' + proc = subprocess.run( + ["bash", "-c", script], env={"PATH": os.environ.get("PATH", "/usr/bin:/bin"), "rdm_dir": rdm_dir}, + capture_output=True, text=True, timeout=10, + ) + self.assertEqual(proc.returncode, 0, proc.stderr) + self.assertEqual(proc.stdout.strip(), "") + if __name__ == "__main__": unittest.main()