模块由一个 Python 门禁脚本、一个 Bash 编排脚本和对应的单元测试组成,职责分层清晰: - ci_env_var_gate.py 是核心分析器,使用标准库 ast 构建 _EnvReadVisitor,在 agent/src/、agent/backtest/、agent/cli/、agent/scripts/ 等目标目录(排除 agent/tests/ 与允许区 agent/src/config/)上遍历 .py 文件,检测 os.getenv、os.environ.get、os.environ["KEY"] 读操作并报告为违规;同时允许 copy/items/setdefault、写上下文以及 settings_routes.py 中的 pop(),并在非允许位置对 pop() 输出警告。 - ci_grep_gates.sh 是 CI 入口编排器,顺序执行五个 gate:(a) 禁止未使用 safe_load 的 yaml.load;(b) 禁止源码中出现的 "WorldQuant" 商标词;(c) 禁止 wiki/alpha-library 中出现股票代码模式;(d) 禁止目标文件中过时的 datetime.utcnow() / 裸 datetime.now();(e) 调用 tools/ci_env_var_gate.py 做环境变量门禁。任一 gate 失败即累积退出码 1。 - test_ci_env_var_gate.py 基于 pytest,通过构造临时 AST 节点直接测试 _EnvReadVisitor、_should_skip 与 main CLI,覆盖违规、允许、跳过、noqa 抑制等场景。 依赖方向单向:shell → Python 门禁 → ast 解析;测试仅依赖被测模块本身,无外部运行时依赖。