| fix(security): add model source safety checks Co-authored-by: jia_ya_nan<jiayanan3@h-partners.com> # message auto-generated for no-merge-commit merge: !385 merge fix/trust-remote-code-safety into master fix(security): add model source safety checks Created-by: jia_ya_nan Commit-by: jia_ya_nan Merged-by: ascend-robot Description: # PR Template Thanks for your contribution; we appreciate it a lot. The following instructions will make your pull request healthier and help you get feedback more easily. If you do not understand some items, don't worry, just make the pull request and seek help from maintainers. 感谢您的贡献,我们非常重视。以下说明将使您的拉取请求更健康,更易于获得反馈。如果您不理解某些项目,请不要担心,只需提交拉取请求并从维护人员那里寻求帮助即可。 **PR Type / PR类型** - [ ] Feature(功能新增) - [x] Bugfix(Bug 修复) - [ ] Docs(文档更新) - [ ] CI/CD(持续集成/持续部署) - [ ] Refactor(代码重构) - [ ] Perf(性能优化) - [ ] Test-Cases(测试用例更新) - [x] Other(其他) ## 🔍 Motivation / 变更动机 **Please describe the motivation of this PR and the goal you want to achieve through this PR.** **请描述您的拉取请求的动机和您希望通过此拉取请求实现的目标。** 安全加固 ------ ## 📝 Modification / 修改内容 **Please briefly describe what modification is made in this PR.** **请简要描述此拉取请求中进行的修改。** 增加本地路径权限校验;增加日志风险提示 去掉不维护的老接口 ------ ## 📐 Associated Test Results / 关联测试结果 **Please provide the related test results, such as test reports, etc.** **请提供相关测试结果,例如测试报告等。**  ------ ## 🌟 Use cases (Optional) / 使用案例(可选) **If this PR introduces a new feature, it is better to list some use cases here and update the documentation.** **如果此拉取请求引入了新功能,最好在此处列出一些用例并更新文档。** ------ ## ✅ Checklist / 检查列表 **Before PR**: - [x] Bug fixes are fully covered by unit tests, the case that causes the bug should be added in the unit tests. / 修复的 Bug 已完全由单元测试覆盖,导致 Bug 的情况应在单元测试中添加。 - [x] The modification is covered by complete unit tests. If not, please add more unit tests to ensure the correctness. / 此拉取请求中的修改已完全由单元测试覆盖。如果不是,请添加更多单元测试以确保正确性。 - [x] All relevant documentation (API docs, docstrings, example tutorials) has been updated to reflect these changes. / 所有相关文档(API 文档、文档字符串、示例教程)已更新以反映这些更改。 - [x] Please ensure code files contain no Chinese comments. / 请保证代码文件中不含中文注释。 ------ See merge request: Ascend/msmodeling!385 | 3 天前 |
| 【同步】【非开发代码】代码从 develop 同步到 master Co-authored-by: yydyzr<liuyuncong1@huawei.com> Co-authored-by: gcw_61YBRfIt<chuzhenxing@huawei.com> Co-authored-by: 孔炳翔<1120200577@qq.com> Co-authored-by: zhengxinqian<qianzhengxin@huawei.com> Co-authored-by: hw_whx<wanghexiang7@huawei.com> Co-authored-by: jgong5<steven.gong@gmail.com> Co-authored-by: hw_whx<2952154980@qq.com> # message auto-generated for no-merge-commit merge: !330 merge master into master 【同步】【非开发代码】代码从 develop 同步到 master Created-by: AvadaKedavrua Commit-by: liujiawang;ascend-robot;AvadaKedavrua;lutean;Horacehxw;eveyin1;minghang_c;zwt__;tt0cool;elrond-g;jia_ya_nan;zhenyu_zhang;ChenHuiwen;wangshen001;Hudingyi;wendellX;Secluded_Ocean;jhon-117;yaohan404;jiangruitao;zhenghaojie;stormchasingg;panyj1993;cmh1056291129;yuyinkai1;sunguozhong;genius52;liu_jiaxu;HongMaoShuiGuai;zhengxinqian;weixin_43368449;jsez-li-bin;jgong5;wqh17101;w00609794;yydyzr;JieZhang679;sppedforcy;gcw_61YBRfIt;Jiong Gong;hw_whx;gongjiong;孔炳翔 Merged-by: ascend-robot Description: 代码从 develop 同步到 master,后续基于 master 演进,并支持打包 See merge request: Ascend/msmodeling!330 | 15 天前 |
| 【REFACTOR】重构 CI gate 与 test_map 同步基础设施 Co-authored-by: AvadaKedavrua<anonymousdev@163.com> # message auto-generated for no-merge-commit merge: !394 merge fix into master 【REFACTOR】重构 CI gate 与 test_map 同步基础设施 Created-by: AvadaKedavrua Commit-by: liujiawang;AvadaKedavrua Merged-by: ascend-robot Description: ## 修改原因 CI gate 的 diff 分类、策略校验、PR 评论、test_map 同步等逻辑耦合在 gate_policy.py 等单体模块中,难以独立演进与单测;test_map 缺少独立同步入口;ast_utils / test_map_loader / nightly 报告链路也需要与 gate 策略对齐。本 PR 仅包含 commit 82757732b6b6beb79b7083f6046e9cd9c72005f3(refactor),不涉及 wheel/CLI/OptiX 变更。 --- ## test_map schema 重构:背景与收益 ### 背景 旧 test_map 以**产品源文件**为顶层 key,value 为 symbol → [test_nodes]: json { "tensor_cast/foo.py": { "Widget::run": ["tests/regression/.../test_x.py::test_foo"] } } 新 test_map 改为以 **pytest node id** 为顶层 key,value 为 source_file → [symbols],与 coverage.py --cov-context=test 的采集方向一致: json { "tests/regression/.../test_x.py::test_foo": { "tensor_cast/foo.py": ["Widget::run"] } } 两者存的是同一张「测试节点 ↔ (源文件, symbol)」二部图,仅主键方向相反;边数相同,语义不变。 ### 为何行数变多、体积反而更小 | 指标 | 旧 schema(source-oriented) | 新 schema(node-oriented) | |------|------------------------------|----------------------------| | JSON 行数 | ~7 万行 | ~10 万行 | | 文件/内存占用 | **8,355,104 B(~8.0 MB)** | **3,748,221 B(~3.6 MB,约 -55%)** | 行数不是体积的可靠 proxy。旧格式在每个 symbol 下重复存储完整 pytest node id(tests/regression/.../test_xxx.py::Class::test_yyy,通常 60–80 字符);同一 test 覆盖 N 个 symbol 时,该长字符串出现 N 次。新格式每个 test node id 只作为顶层 key 出现一次,数组里存的是短 canonical symbol(如 Widget::run、%),边数 E 不变但**长字符串重复次数从 O(E) 降到 O(T)**(T = 有覆盖的 test 数,T ≪ E)。 典型场景:大量 smoke/regression 用例通过 import 共享 tensor_cast/、cli/ 等模块的 module symbol %——旧格式在单个 symbol 下聚合成千上万条 test id;新格式每个 test 只记一次短 symbol,整体字节数显著下降。 ### 工程收益 1. **构建零 pivot**:build_test_map.collect_from_coverage 直接按 coverage context(test node)聚合 by_test[nid][source].add(symbol),与 nightly phase1 采集路径一致。 2. **增量 sync 更自然**:sync.apply_incremental_test_map_update 对 touched test 文件整 node 替换、对 touched product 文件按 (test_node, source_path) 合并,无需在两种索引间来回转换。 3. **删 test / 冗余检测更直接**:gate_deleted_tests、detect_redundant_cases 按 test footprint 遍历;test_map_loader 强制顶层为 tests/...::...,可拒绝误写成 source key 的脏数据。 4. **CI gate 查询无退化**:symbol → tests 反向查询通过 build_test_map_index 一次 O(N) 建索引,与旧 schema 运行时等价。 5. **存储与传输更轻**:实测文件体积约减半,OBS 下载与 json.loads 内存峰值更低。 --- ## 修改内容 ### CI gate 模块拆分 - gate_policy.py 瘦身:策略加载/校验迁入 policy.py,diff 分类迁入 classifier.py,GitCode PR 评论迁入 comments.py,test_map 查询迁入 test_map_query.py - 新增 sync.py + scripts/run_test_map_sync.sh:按目标分支 HEAD 维护权威 test_map(--once / --watch) - diff.py 精简,仅保留 git diff 与分支检出能力 - main.py / rules.py / models.py / errors.py 适配新模块边界 - tests/.ci/gate_policy.yaml 策略字段同步调整 ### 公共 helpers 增强 - _config.py:手写 env 解析改为 pydantic-settings,统一校验与错误信息 - ast_utils.py:扩展符号提取能力,支撑 test_map 粒度映射 - build_test_map.py / test_map_loader.py:重构收集与加载逻辑(node-oriented schema) - 新增 test_map_report.py:test_map 覆盖率汇总、过期豁免检测 - coverage_symbol_check.py / pytest_runner.py / test_map_config.py 对齐新数据结构 - common/_logging.py:补充 log_env_audit 环境审计日志 ### nightly 报告链路 - report_builder.py / pytest_parser.py / main.py:适配 node-oriented test_map 报告 - report_models.py / feishu_notifier.py 小幅对齐 ### symbol 校验与 exemption 漂移(新增) - **last-wins canonical symbols**:重复 def foo 仅 gate 最后一个定义;shadowed def 发非 blocking GitCode 评论 - **def _ 消歧**:无 decorator → _;有 decorator → _@<suffix> - **exemption 校验**:path::symbol 整串须为 AST canonical name;coverage omit 路径禁止写入 exemptions.sources - **exemption 漂移 blocking**:PR 删/改名 product/test 文件时,未同步更新 gate_policy.yaml → [ED] 硬阻断 + GitCode 评论 - **Expected/Got**:Config / policy / loader 类型与值错误统一格式 - **文档**:scripts/README.md 补充 build.sh、MSMODELING_WHEEL_OUTPUT_DIR;tests/README.md 补充 symbol 契约 ### 其他 - scripts/run_ci_gate.sh:入口参数对齐 - scripts/prefetch_model_configs.py:适配新 config 加载 - tests/README.md / tests/SKILL.md:文档同步 - 新增/更新回归测试:test_classifier.py、test_comments.py、test_policy.py、test_sync.py、test_test_map_query.py、test_test_map_report.py 等 --- ## 自验证 ### CI gate / test_map / nightly 回归测试 目的:确认模块拆分后行为不变,新模块有单测覆盖 步骤: 1. 在仓库根目录执行: sh uv run pytest tests/regression/scripts/helpers/ci_gate/ \ tests/regression/scripts/helpers/common/test_ast_utils.py \ tests/regression/scripts/helpers/common/test_test_map_loader.py \ tests/regression/scripts/helpers/nightly/test_report_builder.py -q 2. 检查退出码与通过数 结果: 206 passed, 7 warnings in 0.43s ### symbol 校验 / exemption 漂移回归 sh uv run pytest tests/regression/scripts/helpers/ci_gate/ \ tests/regression/scripts/helpers/common/test_ast_utils.py \ tests/regression/scripts/helpers/common/test_test_map_loader.py \ tests/regression/scripts/helpers/test_config.py -q 结果: 239 passed, 8 warnings in 1.05s ### test_map 同步入口 目的:确认 run_test_map_sync.sh 可正常拉起 sync.py 步骤: 1. 设置 MSMODELING_TEST_MAP_PATH 指向有效 test_map JSON 2. 执行 bash scripts/run_test_map_sync.sh --once 结果:脚本入口与 sync.py CLI 已随 PR 提交;完整同步需 CI/nightly 环境提供有效 test_map 文件 See merge request: Ascend/msmodeling!394 | 4 天前 |
| 【FEAT】发布 msmodeling 统一 wheel 包与 CLI 入口 Co-authored-by: liujiawang<anonymousdev@163.com> # message auto-generated for no-merge-commit merge: !370 merge pack into master 【FEAT】发布 msmodeling 统一 wheel 包与 CLI 入口 Created-by: AvadaKedavrua Commit-by: liujiawang Merged-by: ascend-robot Description: ## 修改原因 msmodeling 此前无标准 pip 安装路径,OptiX 独立于 experimental/ 维护,CLI 入口分散。需要统一为 pip install msmodeling 可安装的主 wheel,并保留源码 python -m 双轨用法。 --- ## 修改内容 - 包名改为 msmodeling(0.2.0),使用 hatchling + uv build --wheel 构建 py3-none-any wheel - experimental/optix/ 迁入根目录 optix/,并入主包;专属依赖(loguru、pyswarms 等)作为核心依赖 - 新增 cli/main.py 作为唯一 console script:msmodeling inference|optix ... - 支持 python -m optix;OptiX CLI 集成 logo(--help 不打印) - web_ui/ 默认打入主 wheel;gradio 保留在核心依赖 - 新增 scripts/build.sh,支持 MSMODELING_WHEEL_OUTPUT_DIR 控制 wheel 输出目录(CI 归档) - CI gate tests/.ci/gate_policy.yaml 新增 optix/ 为 coverage 源码根 - 保留 python -m cli.inference.* 双轨并列 --- ## 自验证 ### Wheel 构建与包边界 目的:确认 wheel 产物名称、内容与包边界符合方案 步骤: 1. 执行 bash scripts/build.sh 2. 检查 dist/msmodeling-0.2.0-py3-none-any.whl 内容 结果: Building wheel... Successfully built dist/msmodeling-0.2.0-py3-none-any.whl Built wheel: dist/msmodeling-0.2.0-py3-none-any.whl Archive: dist/msmodeling-0.2.0-py3-none-any.whl 2206 cli/main.py 4738 optix/config.toml ### CLI 与 logo 目的:确认统一入口、python -m optix 及 logo 行为 步骤: 1. uv run msmodeling -h 2. uv run python -m optix --help 3. uv run pytest tests/regression/cli/test_logo_cli_hooks.py -q 结果: 5 passed in 0.59s ### CI 输出目录环境变量 目的:确认 CI 可通过环境变量指定 wheel 归档目录 步骤: 1. MSMODELING_WHEEL_OUTPUT_DIR=/tmp/msmodeling-whl-test bash scripts/build.sh 2. ls /tmp/msmodeling-whl-test/ 结果: msmodeling-0.2.0-py3-none-any.whl See merge request: Ascend/msmodeling!370 | 9 天前 |
| fix(security): add model source safety checks Co-authored-by: jia_ya_nan<jiayanan3@h-partners.com> # message auto-generated for no-merge-commit merge: !385 merge fix/trust-remote-code-safety into master fix(security): add model source safety checks Created-by: jia_ya_nan Commit-by: jia_ya_nan Merged-by: ascend-robot Description: # PR Template Thanks for your contribution; we appreciate it a lot. The following instructions will make your pull request healthier and help you get feedback more easily. If you do not understand some items, don't worry, just make the pull request and seek help from maintainers. 感谢您的贡献,我们非常重视。以下说明将使您的拉取请求更健康,更易于获得反馈。如果您不理解某些项目,请不要担心,只需提交拉取请求并从维护人员那里寻求帮助即可。 **PR Type / PR类型** - [ ] Feature(功能新增) - [x] Bugfix(Bug 修复) - [ ] Docs(文档更新) - [ ] CI/CD(持续集成/持续部署) - [ ] Refactor(代码重构) - [ ] Perf(性能优化) - [ ] Test-Cases(测试用例更新) - [x] Other(其他) ## 🔍 Motivation / 变更动机 **Please describe the motivation of this PR and the goal you want to achieve through this PR.** **请描述您的拉取请求的动机和您希望通过此拉取请求实现的目标。** 安全加固 ------ ## 📝 Modification / 修改内容 **Please briefly describe what modification is made in this PR.** **请简要描述此拉取请求中进行的修改。** 增加本地路径权限校验;增加日志风险提示 去掉不维护的老接口 ------ ## 📐 Associated Test Results / 关联测试结果 **Please provide the related test results, such as test reports, etc.** **请提供相关测试结果,例如测试报告等。**  ------ ## 🌟 Use cases (Optional) / 使用案例(可选) **If this PR introduces a new feature, it is better to list some use cases here and update the documentation.** **如果此拉取请求引入了新功能,最好在此处列出一些用例并更新文档。** ------ ## ✅ Checklist / 检查列表 **Before PR**: - [x] Bug fixes are fully covered by unit tests, the case that causes the bug should be added in the unit tests. / 修复的 Bug 已完全由单元测试覆盖,导致 Bug 的情况应在单元测试中添加。 - [x] The modification is covered by complete unit tests. If not, please add more unit tests to ensure the correctness. / 此拉取请求中的修改已完全由单元测试覆盖。如果不是,请添加更多单元测试以确保正确性。 - [x] All relevant documentation (API docs, docstrings, example tutorials) has been updated to reflect these changes. / 所有相关文档(API 文档、文档字符串、示例教程)已更新以反映这些更改。 - [x] Please ensure code files contain no Chinese comments. / 请保证代码文件中不含中文注释。 ------ See merge request: Ascend/msmodeling!385 | 3 天前 |
| 【同步】【非开发代码】代码从 develop 同步到 master Co-authored-by: yydyzr<liuyuncong1@huawei.com> Co-authored-by: gcw_61YBRfIt<chuzhenxing@huawei.com> Co-authored-by: 孔炳翔<1120200577@qq.com> Co-authored-by: zhengxinqian<qianzhengxin@huawei.com> Co-authored-by: hw_whx<wanghexiang7@huawei.com> Co-authored-by: jgong5<steven.gong@gmail.com> Co-authored-by: hw_whx<2952154980@qq.com> # message auto-generated for no-merge-commit merge: !330 merge master into master 【同步】【非开发代码】代码从 develop 同步到 master Created-by: AvadaKedavrua Commit-by: liujiawang;ascend-robot;AvadaKedavrua;lutean;Horacehxw;eveyin1;minghang_c;zwt__;tt0cool;elrond-g;jia_ya_nan;zhenyu_zhang;ChenHuiwen;wangshen001;Hudingyi;wendellX;Secluded_Ocean;jhon-117;yaohan404;jiangruitao;zhenghaojie;stormchasingg;panyj1993;cmh1056291129;yuyinkai1;sunguozhong;genius52;liu_jiaxu;HongMaoShuiGuai;zhengxinqian;weixin_43368449;jsez-li-bin;jgong5;wqh17101;w00609794;yydyzr;JieZhang679;sppedforcy;gcw_61YBRfIt;Jiong Gong;hw_whx;gongjiong;孔炳翔 Merged-by: ascend-robot Description: 代码从 develop 同步到 master,后续基于 master 演进,并支持打包 See merge request: Ascend/msmodeling!330 | 15 天前 |
| 【REFACTOR】重构 CI gate 与 test_map 同步基础设施 Co-authored-by: AvadaKedavrua<anonymousdev@163.com> # message auto-generated for no-merge-commit merge: !394 merge fix into master 【REFACTOR】重构 CI gate 与 test_map 同步基础设施 Created-by: AvadaKedavrua Commit-by: liujiawang;AvadaKedavrua Merged-by: ascend-robot Description: ## 修改原因 CI gate 的 diff 分类、策略校验、PR 评论、test_map 同步等逻辑耦合在 gate_policy.py 等单体模块中,难以独立演进与单测;test_map 缺少独立同步入口;ast_utils / test_map_loader / nightly 报告链路也需要与 gate 策略对齐。本 PR 仅包含 commit 82757732b6b6beb79b7083f6046e9cd9c72005f3(refactor),不涉及 wheel/CLI/OptiX 变更。 --- ## test_map schema 重构:背景与收益 ### 背景 旧 test_map 以**产品源文件**为顶层 key,value 为 symbol → [test_nodes]: json { "tensor_cast/foo.py": { "Widget::run": ["tests/regression/.../test_x.py::test_foo"] } } 新 test_map 改为以 **pytest node id** 为顶层 key,value 为 source_file → [symbols],与 coverage.py --cov-context=test 的采集方向一致: json { "tests/regression/.../test_x.py::test_foo": { "tensor_cast/foo.py": ["Widget::run"] } } 两者存的是同一张「测试节点 ↔ (源文件, symbol)」二部图,仅主键方向相反;边数相同,语义不变。 ### 为何行数变多、体积反而更小 | 指标 | 旧 schema(source-oriented) | 新 schema(node-oriented) | |------|------------------------------|----------------------------| | JSON 行数 | ~7 万行 | ~10 万行 | | 文件/内存占用 | **8,355,104 B(~8.0 MB)** | **3,748,221 B(~3.6 MB,约 -55%)** | 行数不是体积的可靠 proxy。旧格式在每个 symbol 下重复存储完整 pytest node id(tests/regression/.../test_xxx.py::Class::test_yyy,通常 60–80 字符);同一 test 覆盖 N 个 symbol 时,该长字符串出现 N 次。新格式每个 test node id 只作为顶层 key 出现一次,数组里存的是短 canonical symbol(如 Widget::run、%),边数 E 不变但**长字符串重复次数从 O(E) 降到 O(T)**(T = 有覆盖的 test 数,T ≪ E)。 典型场景:大量 smoke/regression 用例通过 import 共享 tensor_cast/、cli/ 等模块的 module symbol %——旧格式在单个 symbol 下聚合成千上万条 test id;新格式每个 test 只记一次短 symbol,整体字节数显著下降。 ### 工程收益 1. **构建零 pivot**:build_test_map.collect_from_coverage 直接按 coverage context(test node)聚合 by_test[nid][source].add(symbol),与 nightly phase1 采集路径一致。 2. **增量 sync 更自然**:sync.apply_incremental_test_map_update 对 touched test 文件整 node 替换、对 touched product 文件按 (test_node, source_path) 合并,无需在两种索引间来回转换。 3. **删 test / 冗余检测更直接**:gate_deleted_tests、detect_redundant_cases 按 test footprint 遍历;test_map_loader 强制顶层为 tests/...::...,可拒绝误写成 source key 的脏数据。 4. **CI gate 查询无退化**:symbol → tests 反向查询通过 build_test_map_index 一次 O(N) 建索引,与旧 schema 运行时等价。 5. **存储与传输更轻**:实测文件体积约减半,OBS 下载与 json.loads 内存峰值更低。 --- ## 修改内容 ### CI gate 模块拆分 - gate_policy.py 瘦身:策略加载/校验迁入 policy.py,diff 分类迁入 classifier.py,GitCode PR 评论迁入 comments.py,test_map 查询迁入 test_map_query.py - 新增 sync.py + scripts/run_test_map_sync.sh:按目标分支 HEAD 维护权威 test_map(--once / --watch) - diff.py 精简,仅保留 git diff 与分支检出能力 - main.py / rules.py / models.py / errors.py 适配新模块边界 - tests/.ci/gate_policy.yaml 策略字段同步调整 ### 公共 helpers 增强 - _config.py:手写 env 解析改为 pydantic-settings,统一校验与错误信息 - ast_utils.py:扩展符号提取能力,支撑 test_map 粒度映射 - build_test_map.py / test_map_loader.py:重构收集与加载逻辑(node-oriented schema) - 新增 test_map_report.py:test_map 覆盖率汇总、过期豁免检测 - coverage_symbol_check.py / pytest_runner.py / test_map_config.py 对齐新数据结构 - common/_logging.py:补充 log_env_audit 环境审计日志 ### nightly 报告链路 - report_builder.py / pytest_parser.py / main.py:适配 node-oriented test_map 报告 - report_models.py / feishu_notifier.py 小幅对齐 ### symbol 校验与 exemption 漂移(新增) - **last-wins canonical symbols**:重复 def foo 仅 gate 最后一个定义;shadowed def 发非 blocking GitCode 评论 - **def _ 消歧**:无 decorator → _;有 decorator → _@<suffix> - **exemption 校验**:path::symbol 整串须为 AST canonical name;coverage omit 路径禁止写入 exemptions.sources - **exemption 漂移 blocking**:PR 删/改名 product/test 文件时,未同步更新 gate_policy.yaml → [ED] 硬阻断 + GitCode 评论 - **Expected/Got**:Config / policy / loader 类型与值错误统一格式 - **文档**:scripts/README.md 补充 build.sh、MSMODELING_WHEEL_OUTPUT_DIR;tests/README.md 补充 symbol 契约 ### 其他 - scripts/run_ci_gate.sh:入口参数对齐 - scripts/prefetch_model_configs.py:适配新 config 加载 - tests/README.md / tests/SKILL.md:文档同步 - 新增/更新回归测试:test_classifier.py、test_comments.py、test_policy.py、test_sync.py、test_test_map_query.py、test_test_map_report.py 等 --- ## 自验证 ### CI gate / test_map / nightly 回归测试 目的:确认模块拆分后行为不变,新模块有单测覆盖 步骤: 1. 在仓库根目录执行: sh uv run pytest tests/regression/scripts/helpers/ci_gate/ \ tests/regression/scripts/helpers/common/test_ast_utils.py \ tests/regression/scripts/helpers/common/test_test_map_loader.py \ tests/regression/scripts/helpers/nightly/test_report_builder.py -q 2. 检查退出码与通过数 结果: 206 passed, 7 warnings in 0.43s ### symbol 校验 / exemption 漂移回归 sh uv run pytest tests/regression/scripts/helpers/ci_gate/ \ tests/regression/scripts/helpers/common/test_ast_utils.py \ tests/regression/scripts/helpers/common/test_test_map_loader.py \ tests/regression/scripts/helpers/test_config.py -q 结果: 239 passed, 8 warnings in 1.05s ### test_map 同步入口 目的:确认 run_test_map_sync.sh 可正常拉起 sync.py 步骤: 1. 设置 MSMODELING_TEST_MAP_PATH 指向有效 test_map JSON 2. 执行 bash scripts/run_test_map_sync.sh --once 结果:脚本入口与 sync.py CLI 已随 PR 提交;完整同步需 CI/nightly 环境提供有效 test_map 文件 See merge request: Ascend/msmodeling!394 | 4 天前 |
| 【同步】【非开发代码】代码从 develop 同步到 master Co-authored-by: yydyzr<liuyuncong1@huawei.com> Co-authored-by: gcw_61YBRfIt<chuzhenxing@huawei.com> Co-authored-by: 孔炳翔<1120200577@qq.com> Co-authored-by: zhengxinqian<qianzhengxin@huawei.com> Co-authored-by: hw_whx<wanghexiang7@huawei.com> Co-authored-by: jgong5<steven.gong@gmail.com> Co-authored-by: hw_whx<2952154980@qq.com> # message auto-generated for no-merge-commit merge: !330 merge master into master 【同步】【非开发代码】代码从 develop 同步到 master Created-by: AvadaKedavrua Commit-by: liujiawang;ascend-robot;AvadaKedavrua;lutean;Horacehxw;eveyin1;minghang_c;zwt__;tt0cool;elrond-g;jia_ya_nan;zhenyu_zhang;ChenHuiwen;wangshen001;Hudingyi;wendellX;Secluded_Ocean;jhon-117;yaohan404;jiangruitao;zhenghaojie;stormchasingg;panyj1993;cmh1056291129;yuyinkai1;sunguozhong;genius52;liu_jiaxu;HongMaoShuiGuai;zhengxinqian;weixin_43368449;jsez-li-bin;jgong5;wqh17101;w00609794;yydyzr;JieZhang679;sppedforcy;gcw_61YBRfIt;Jiong Gong;hw_whx;gongjiong;孔炳翔 Merged-by: ascend-robot Description: 代码从 develop 同步到 master,后续基于 master 演进,并支持打包 See merge request: Ascend/msmodeling!330 | 15 天前 |
| 【同步】【非开发代码】代码从 develop 同步到 master Co-authored-by: yydyzr<liuyuncong1@huawei.com> Co-authored-by: gcw_61YBRfIt<chuzhenxing@huawei.com> Co-authored-by: 孔炳翔<1120200577@qq.com> Co-authored-by: zhengxinqian<qianzhengxin@huawei.com> Co-authored-by: hw_whx<wanghexiang7@huawei.com> Co-authored-by: jgong5<steven.gong@gmail.com> Co-authored-by: hw_whx<2952154980@qq.com> # message auto-generated for no-merge-commit merge: !330 merge master into master 【同步】【非开发代码】代码从 develop 同步到 master Created-by: AvadaKedavrua Commit-by: liujiawang;ascend-robot;AvadaKedavrua;lutean;Horacehxw;eveyin1;minghang_c;zwt__;tt0cool;elrond-g;jia_ya_nan;zhenyu_zhang;ChenHuiwen;wangshen001;Hudingyi;wendellX;Secluded_Ocean;jhon-117;yaohan404;jiangruitao;zhenghaojie;stormchasingg;panyj1993;cmh1056291129;yuyinkai1;sunguozhong;genius52;liu_jiaxu;HongMaoShuiGuai;zhengxinqian;weixin_43368449;jsez-li-bin;jgong5;wqh17101;w00609794;yydyzr;JieZhang679;sppedforcy;gcw_61YBRfIt;Jiong Gong;hw_whx;gongjiong;孔炳翔 Merged-by: ascend-robot Description: 代码从 develop 同步到 master,后续基于 master 演进,并支持打包 See merge request: Ascend/msmodeling!330 | 15 天前 |
| 【同步】【非开发代码】代码从 develop 同步到 master Co-authored-by: yydyzr<liuyuncong1@huawei.com> Co-authored-by: gcw_61YBRfIt<chuzhenxing@huawei.com> Co-authored-by: 孔炳翔<1120200577@qq.com> Co-authored-by: zhengxinqian<qianzhengxin@huawei.com> Co-authored-by: hw_whx<wanghexiang7@huawei.com> Co-authored-by: jgong5<steven.gong@gmail.com> Co-authored-by: hw_whx<2952154980@qq.com> # message auto-generated for no-merge-commit merge: !330 merge master into master 【同步】【非开发代码】代码从 develop 同步到 master Created-by: AvadaKedavrua Commit-by: liujiawang;ascend-robot;AvadaKedavrua;lutean;Horacehxw;eveyin1;minghang_c;zwt__;tt0cool;elrond-g;jia_ya_nan;zhenyu_zhang;ChenHuiwen;wangshen001;Hudingyi;wendellX;Secluded_Ocean;jhon-117;yaohan404;jiangruitao;zhenghaojie;stormchasingg;panyj1993;cmh1056291129;yuyinkai1;sunguozhong;genius52;liu_jiaxu;HongMaoShuiGuai;zhengxinqian;weixin_43368449;jsez-li-bin;jgong5;wqh17101;w00609794;yydyzr;JieZhang679;sppedforcy;gcw_61YBRfIt;Jiong Gong;hw_whx;gongjiong;孔炳翔 Merged-by: ascend-robot Description: 代码从 develop 同步到 master,后续基于 master 演进,并支持打包 See merge request: Ascend/msmodeling!330 | 15 天前 |
| 【REFACTOR】重构 CI gate 与 test_map 同步基础设施 Co-authored-by: AvadaKedavrua<anonymousdev@163.com> # message auto-generated for no-merge-commit merge: !394 merge fix into master 【REFACTOR】重构 CI gate 与 test_map 同步基础设施 Created-by: AvadaKedavrua Commit-by: liujiawang;AvadaKedavrua Merged-by: ascend-robot Description: ## 修改原因 CI gate 的 diff 分类、策略校验、PR 评论、test_map 同步等逻辑耦合在 gate_policy.py 等单体模块中,难以独立演进与单测;test_map 缺少独立同步入口;ast_utils / test_map_loader / nightly 报告链路也需要与 gate 策略对齐。本 PR 仅包含 commit 82757732b6b6beb79b7083f6046e9cd9c72005f3(refactor),不涉及 wheel/CLI/OptiX 变更。 --- ## test_map schema 重构:背景与收益 ### 背景 旧 test_map 以**产品源文件**为顶层 key,value 为 symbol → [test_nodes]: json { "tensor_cast/foo.py": { "Widget::run": ["tests/regression/.../test_x.py::test_foo"] } } 新 test_map 改为以 **pytest node id** 为顶层 key,value 为 source_file → [symbols],与 coverage.py --cov-context=test 的采集方向一致: json { "tests/regression/.../test_x.py::test_foo": { "tensor_cast/foo.py": ["Widget::run"] } } 两者存的是同一张「测试节点 ↔ (源文件, symbol)」二部图,仅主键方向相反;边数相同,语义不变。 ### 为何行数变多、体积反而更小 | 指标 | 旧 schema(source-oriented) | 新 schema(node-oriented) | |------|------------------------------|----------------------------| | JSON 行数 | ~7 万行 | ~10 万行 | | 文件/内存占用 | **8,355,104 B(~8.0 MB)** | **3,748,221 B(~3.6 MB,约 -55%)** | 行数不是体积的可靠 proxy。旧格式在每个 symbol 下重复存储完整 pytest node id(tests/regression/.../test_xxx.py::Class::test_yyy,通常 60–80 字符);同一 test 覆盖 N 个 symbol 时,该长字符串出现 N 次。新格式每个 test node id 只作为顶层 key 出现一次,数组里存的是短 canonical symbol(如 Widget::run、%),边数 E 不变但**长字符串重复次数从 O(E) 降到 O(T)**(T = 有覆盖的 test 数,T ≪ E)。 典型场景:大量 smoke/regression 用例通过 import 共享 tensor_cast/、cli/ 等模块的 module symbol %——旧格式在单个 symbol 下聚合成千上万条 test id;新格式每个 test 只记一次短 symbol,整体字节数显著下降。 ### 工程收益 1. **构建零 pivot**:build_test_map.collect_from_coverage 直接按 coverage context(test node)聚合 by_test[nid][source].add(symbol),与 nightly phase1 采集路径一致。 2. **增量 sync 更自然**:sync.apply_incremental_test_map_update 对 touched test 文件整 node 替换、对 touched product 文件按 (test_node, source_path) 合并,无需在两种索引间来回转换。 3. **删 test / 冗余检测更直接**:gate_deleted_tests、detect_redundant_cases 按 test footprint 遍历;test_map_loader 强制顶层为 tests/...::...,可拒绝误写成 source key 的脏数据。 4. **CI gate 查询无退化**:symbol → tests 反向查询通过 build_test_map_index 一次 O(N) 建索引,与旧 schema 运行时等价。 5. **存储与传输更轻**:实测文件体积约减半,OBS 下载与 json.loads 内存峰值更低。 --- ## 修改内容 ### CI gate 模块拆分 - gate_policy.py 瘦身:策略加载/校验迁入 policy.py,diff 分类迁入 classifier.py,GitCode PR 评论迁入 comments.py,test_map 查询迁入 test_map_query.py - 新增 sync.py + scripts/run_test_map_sync.sh:按目标分支 HEAD 维护权威 test_map(--once / --watch) - diff.py 精简,仅保留 git diff 与分支检出能力 - main.py / rules.py / models.py / errors.py 适配新模块边界 - tests/.ci/gate_policy.yaml 策略字段同步调整 ### 公共 helpers 增强 - _config.py:手写 env 解析改为 pydantic-settings,统一校验与错误信息 - ast_utils.py:扩展符号提取能力,支撑 test_map 粒度映射 - build_test_map.py / test_map_loader.py:重构收集与加载逻辑(node-oriented schema) - 新增 test_map_report.py:test_map 覆盖率汇总、过期豁免检测 - coverage_symbol_check.py / pytest_runner.py / test_map_config.py 对齐新数据结构 - common/_logging.py:补充 log_env_audit 环境审计日志 ### nightly 报告链路 - report_builder.py / pytest_parser.py / main.py:适配 node-oriented test_map 报告 - report_models.py / feishu_notifier.py 小幅对齐 ### symbol 校验与 exemption 漂移(新增) - **last-wins canonical symbols**:重复 def foo 仅 gate 最后一个定义;shadowed def 发非 blocking GitCode 评论 - **def _ 消歧**:无 decorator → _;有 decorator → _@<suffix> - **exemption 校验**:path::symbol 整串须为 AST canonical name;coverage omit 路径禁止写入 exemptions.sources - **exemption 漂移 blocking**:PR 删/改名 product/test 文件时,未同步更新 gate_policy.yaml → [ED] 硬阻断 + GitCode 评论 - **Expected/Got**:Config / policy / loader 类型与值错误统一格式 - **文档**:scripts/README.md 补充 build.sh、MSMODELING_WHEEL_OUTPUT_DIR;tests/README.md 补充 symbol 契约 ### 其他 - scripts/run_ci_gate.sh:入口参数对齐 - scripts/prefetch_model_configs.py:适配新 config 加载 - tests/README.md / tests/SKILL.md:文档同步 - 新增/更新回归测试:test_classifier.py、test_comments.py、test_policy.py、test_sync.py、test_test_map_query.py、test_test_map_report.py 等 --- ## 自验证 ### CI gate / test_map / nightly 回归测试 目的:确认模块拆分后行为不变,新模块有单测覆盖 步骤: 1. 在仓库根目录执行: sh uv run pytest tests/regression/scripts/helpers/ci_gate/ \ tests/regression/scripts/helpers/common/test_ast_utils.py \ tests/regression/scripts/helpers/common/test_test_map_loader.py \ tests/regression/scripts/helpers/nightly/test_report_builder.py -q 2. 检查退出码与通过数 结果: 206 passed, 7 warnings in 0.43s ### symbol 校验 / exemption 漂移回归 sh uv run pytest tests/regression/scripts/helpers/ci_gate/ \ tests/regression/scripts/helpers/common/test_ast_utils.py \ tests/regression/scripts/helpers/common/test_test_map_loader.py \ tests/regression/scripts/helpers/test_config.py -q 结果: 239 passed, 8 warnings in 1.05s ### test_map 同步入口 目的:确认 run_test_map_sync.sh 可正常拉起 sync.py 步骤: 1. 设置 MSMODELING_TEST_MAP_PATH 指向有效 test_map JSON 2. 执行 bash scripts/run_test_map_sync.sh --once 结果:脚本入口与 sync.py CLI 已随 PR 提交;完整同步需 CI/nightly 环境提供有效 test_map 文件 See merge request: Ascend/msmodeling!394 | 4 天前 |