# -*- coding: utf-8 -*- r"""观澜 · 质量门与审计 + 打包安装 —— **对外公开面**(P7 起:实现已在本模块目录内)。 用户令 2026-09-22:按模块重构源代码目录,**每模块只许经 `api.py` 被别的模块调用**。 本模块负责(P7 完成): * `audits/` —— 审计器:配置统一、页面归口、产物反向呼应、链路缺口、可移植性、日志、安全扫描、 中文表达、模块边界、页面指纹、产物清点与补缺、依赖台账; * `docs/` —— 三件交付文档的构建与插图、版本记录; * `pack/` —— 打包器与开箱验证入口、卸载器。 **根引导脚本(install.ps1 / install.sh / uninstall.* / check.bat / pack.bat|sh / start|stop.bat)原地不动**: 它们是"解压即用"的引导层(README 与"入口引用闭合"门钉着它们),其 Python 实现已迁入本模块, `scripts/<件>.py` 留 CLI 壳 ⇒ 引导脚本与既有命令行一字不改。公开名 → 本模块内的实现模块(PEP 562 惰性转发)。 """ from __future__ import annotations import importlib _TARGETS: dict[str, str] = { 'audit_chinese_terms': 'app_qualityGate.app_qualityGate_guanlan.audits.audit_chinese_terms', 'chain_gap_check': 'app_qualityGate.app_qualityGate_guanlan.audits.chain_gap_check', 'check_portability': 'app_qualityGate.app_qualityGate_guanlan.audits.check_portability', 'check_transferable': 'app_qualityGate.app_qualityGate_guanlan.audits.check_transferable', 'config_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.config_audit', 'detail_deps': 'app_qualityGate.app_qualityGate_guanlan.audits.detail_deps', 'guanlan_baseline_manifest': 'app_qualityGate.app_qualityGate_guanlan.audits.guanlan_baseline_manifest', 'inventory_products': 'app_qualityGate.app_qualityGate_guanlan.audits.inventory_products', 'log_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.log_audit', 'module_boundary_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.module_boundary_audit', 'page_fingerprint': 'app_qualityGate.app_qualityGate_guanlan.audits.page_fingerprint', 'pages_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.pages_audit', 'pages_sweep': 'app_qualityGate.app_qualityGate_guanlan.audits.pages_sweep', 'products_restore_missing': 'app_qualityGate.app_qualityGate_guanlan.audits.products_restore_missing', 'products_reverse_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.products_reverse_audit', 'products_state': 'app_qualityGate.app_qualityGate_guanlan.audits.products_state', 'security_scan': 'app_qualityGate.app_qualityGate_guanlan.audits.security_scan', 'delivery_docs_build': 'app_qualityGate.app_qualityGate_guanlan.docs.delivery_docs_build', 'delivery_docs_figures': 'app_qualityGate.app_qualityGate_guanlan.docs.delivery_docs_figures', 'version_log': 'app_qualityGate.app_qualityGate_guanlan.docs.version_log', 'pack_dist': 'app_qualityGate.app_qualityGate_guanlan.pack.pack_dist', 'pack_verify_entry': 'app_qualityGate.app_qualityGate_guanlan.pack.pack_verify_entry', 'guanlan_uninstall': 'app_qualityGate.app_qualityGate_guanlan.pack.guanlan_uninstall', } __all__ = list(_TARGETS) def __getattr__(name: str): target = _TARGETS.get(name) if target is None: raise AttributeError( f'{__name__} 未公开 {name!r};公开面见 __all__ —— 模块间调用只许走 api.py' ) mod = importlib.import_module(target) globals()[name] = mod return mod