KonkovDV/AeroBIM

GitHub: KonkovDV/AeroBIM

面向 openBIM 项目包的开源确定性验收检查工具,融合 IFC 属性验证、IDS 校验与跨文档证据比对,支持 fail-closed 策略和 BCF 导出。

Stars: 0 | Forks: 0

# AeroBIM [俄语版本](README.ru.md) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/39/39faa54be350a1dab8afd3b2fb8c1c83e4d9cff84abfef2374d19a18053687c4.svg)](https://github.com/KonkovDV/AeroBIM/actions/workflows/ci.yml) [![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) openBIM 包的开源**验收标准助手**(IFC + IDS + 跨文档证据)。 AeroBIM 运行确定性的 Shared-gate 风格检查(采用 ISO 19650 框架:针对 *Shared* 提供证据,而非合同性的 *Published* 授权)。它将 IFC 属性/数量检查、IDS、图纸和计算文本融合到一份报告中,具备明确的能力诚实度、结果溯源以及 BCF **ZIP 导出**。独立的 CDE 导入和客户准确性声明在**提供证据前不在范围内**。架构 SSOT:[`docs/architecture/TARGET_HYBRID_ARCHITECTURE_TZ_2026.md`](docs/architecture/TARGET_HYBRID_ARCHITECTURE_TZ_2026.md)。 ## 状态映射(诚实) | 类别 | 含义 | |---|---| | **已生效** | 基于测试基元/已验证;符合 Shared-gate 诚实度 | | **实验性** | 代码已存在;尚未经客户验证 | | **计划中** | 仅设计 / 延期至 Wave 2+ | | **需要客户支持** | RT-001/002/003 — 检查点状态为 **NO_GO** | | **未声明** | 在获得双重证据前禁止使用的措辞 | **已生效:** 项目包分析;IFC/IDS/跨文档;`summary.passed` Shared-gate([ADR-001](docs/architecture/ADR-001-verdict-ownership-2026.md));试点/生产环境的 fail-closed 配置;ACL 404;SSRF 出站防护;溯源戳/持久化;BCF 2.1/3.0 结构化 ZIP;HITL 审查事件;证据包 CLI(`python -m aerobim.tools.export_evidence_bundle`);**656** 个 pytest 通过 / **4** 个跳过(本地环境 2026-07-19);前端 vitest **25**。 **实验性:** OpenCDE BCF API 推送;BCF 3.0 消费者路径;可选的 clash/OCR 扩展;IFC KG 咨询性脚手架。 **计划中:** 包结果枚举(`PASS` / `PASS_WITH_WARNINGS` / `BLOCKED` / `FAILED` / `REVIEW_REQUIRED`);Stage-3 发现字段扩展。 **需要客户支持:** RT-001 准确性语料库 · RT-002 批准的规范 · RT-003 联合 MEP([CRITICAL_BLOCKERS](audit/reports/CRITICAL_BLOCKERS.md))。 **未声明:** 产品准确率 >90%;客户 ≤30 分钟 SLA;原生 DWG;交付的 MEP 系统碰撞检测;独立的计算*正确性*;CDE 就绪的 BCF。参见 [能力声明矩阵](docs/capability-claim-matrix-2026.md) · [PROJECT_STATUS_AUDIT](docs/PROJECT_STATUS_AUDIT_2026.md) · [试点协议](docs/pilot-protocol-samolet-2026.md) · [基准测试证据](docs/benchmark-evidence-2026.md)。 ## 核心能力 以下状态除非另有说明,否则均为**代码库/测试基元**能力。可选扩展和 fail-closed 策略决定了绿色的 `summary.passed` 是否属实。 | 能力 | 状态 | 证据级别 | 备注 | |---|---|---|---| | IFC 属性/数量验证 (IfcOpenShell) | 可用 | 基元 | IFC2x3 / IFC4 / IFC4x3 内核 | | IDS 1.0 验证 (IfcTester) | 可用 | 基元 | 配置错误时,请求的路径会 fail-closed | | 跨文档矛盾检测 | 可用 | 基元 | `ConflictKind` 分类法(子集) | | 可配置的矛盾严重性策略 | 可用 | 基元 | — | | 图纸标注 ↔ IFC 交叉验证 | 可用 | 基元 | 光栅 OCR 路径可选 | | ISO 12006-3 公差代数 (ε-band) | 可用 | 基元 | — | | 叙述性文本 → 需求(确定性正则表达式) | 可用 | 基元 | 非 LLM 签核等高线 | | 俄语 AEC 提取基准(测试基元语料库) | 可用 | 基元 | 基元上的 macro_f1 ≠ 产品准确率 | | 报告上的 ISO 19650-lite 元数据 | 可用 | 基元 | 仅限 Stage/revision/container 字段 — 非 CDE 产品 | | 碰撞检测 (IfcClash) | 可选扩展 | 可选扩展 | `.[clash]`;`capabilities.clash`;在 `require_clash` 下,SKIPPED→FAILED | | 报告能力诚实度 (`ok`/`skipped`/`failed`/`missing`/…) | 可用 | 基元 | FAILED 会阻断 `summary.passed`;诚实度展示面通过 `/v1/system/capabilities` | | 结果溯源 (`finding_id`, `source_id`, `evidence_refs`) | 可用 | 基元 | 缺失时拒绝持久化 | | 报告制品上的租户/对象 ACL | 可用 | 基元 | Bearer/OIDC 主体 + 报告 `tenant_id` | | BCF 2.1 / 3.0 ZIP 导出 | 可用 | 基元 (T1) | 结构化 + 双重消费者验证;**CDE 导入未验证 (T2)** | | OpenCDE BCF API 推送 | 基础 | 实验性 | 不能替代 T2 导入证明 | | HTML / JSON 报告导出 | 可用 | 基元 | — | | 浏览器 IFC 查看器 (`web-ifc` + Three.js) | 可用 | 基元 | — | | 2D 问题区域叠加 | 可用 | 基元 | — | | 确定性 PDF 文本 (PyMuPDF) | 可用 | 核心 | — | | 图像 OCR (RapidOCR) | 可选扩展 | 可选扩展 | `.[raster]`;当被请求时,零产出 → FAILED | | DWG 原生分析 | 缺失 / 失败 | — | 无 ODA 时 fail-closed;永远不为 OK | | 通过 CadModelIngestor 的 DXF | 未验证 | — | 可选的 ezdxf;诚实度永远不为 OK | | 人类水平的 CV / 图纸识图能力 | 缺失 | — | 明确标记为 `MISSING`(OCR 退化 ≠ VLM) | | MEP 系统感知碰撞检测 | 未验证 | — | 通过 DI 连接的未配置 provider;未交付 | | IFC 知识图谱 (I9) | 咨询性脚手架 | 基元 | Port+DI+`query_ifc_kg`+基元 QA;**非 GraphRAG / IfcLLM 产品** | | 独立计算的*正确性* | 未实现 | — | OpenRebar 路径 = **match/сверка**,而非求解器验证 | | 前端 vitest 审查外壳 | 在 CI 中通过 | 发布就绪 | **25** 个通过(`frontend` CI 作业) | | 客户准确率 >90% / 批准的规范 | 受阻 | 客户 | 参见声明锁定 | ## IFC 版本兼容性 | IFC 版本 | Schema | 验证支持 | 备注 | |---|---|---|---| | IFC2x3 | ISO 16739:2005 | ✅ 核心 | 部署最广泛;完整的属性/数量验证 | | IFC4 (IFC4 ADD2) | ISO 16739-1:2018 | ✅ 核心 | Pset 命名规范化;通过 `IfcUnitAssignment` 进行单位分配 | | IFC4x3 | ISO 16739-1:2024 | ✅ 核心 | 对齐和基础设施扩展;相同的验证内核 | 所有三个版本都通过相同的 `IfcOpenShellValidator` 和 `IfcTesterIdsValidator` 适配器处理。 各版本之间 Pset/属性名称的差异会作为 `ValidationIssue` 显式呈现,而不是被静默跳过。 IFC2x3、IFC4 和 IFC4x3 的基元文件位于 `samples/ifc/` 中。 有关正式的兼容性矩阵和按功能的降级规则,请参见 [`docs/ifc-compatibility-matrix.md`](docs/ifc-compatibility-matrix.md)。 ## BCF 证据阶梯 | 等级 | 状态 | 备注 | |---|---|---| | BCF 2.1 ZIP 导出 | 可用(稳定的默认选项) | `/v1/reports/{id}/export/bcf` | | BCF 3.0 ZIP 导出 | 实验性 | `?version=3` | | T1 结构化 + 双重消费者一致性 | 已提供证据 | [`audit/evidence/bcf-structural-handoff-2026-07-18.json`](audit/evidence/bcf-structural-handoff-2026-07-18.json) | | OpenCDE BCF API 推送 | 基础 | `/export/bcf-api/push` — hub 同步不能替代 T2 | | T2 独立的 CDE 导入 | **未验证** | [`audit/evidence/cde-import-proof/STATUS.json`](audit/evidence/cde-import-proof/STATUS.json) | 在达到 T2 之前禁止使用的措辞:“BCF 已为 CDE 就绪”、“CDE 可互操作”。 ## 企业级存储基础 迭代 B.1 已从一个优先考虑兼容性的存储基础开始: - 用于二进制制品的 `ObjectStore` 领域端口(`put/get/delete/presign`); - 用于当前本地/运行时流程的 `LocalObjectStore`; - 通过可选的企业扩展,为兼容 S3/MinIO 的 bucket 提供的 `S3ObjectStore`; - `PostgresAuditStore` 基础,它增加了 Postgres 报告摘要索引,同时在现有的 JSON/对象路径上保持完整的 payload 往返; - 用于持久化报告 payload 的 `AEROBIM_REPORT_TTL_DAYS` 保留调节机制。 当前行为刻意设计为安全优先(safe-by-default): - 如果没有企业扩展,AeroBIM 继续使用本地存储; - 当 `AEROBIM_DB_URL` 和企业依赖项可用时,报告摘要将在 Postgres 中建立索引; - IFC 源二进制文件和持久化的图纸预览存储在 `ObjectStore` 抽象之后,因此 S3/MinIO 的推出不再需要更改 HTTP 契约。 ## 快速开始 ``` # 克隆 git clone https://github.com/KonkovDV/AeroBIM.git cd AeroBIM/backend # 创建虚拟环境 python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # 安装 pip install -e ".[dev,raster]" # 可选附加组件 # pip install -e ".[clash]" # 启用 geometry clash detection # pip install -e ".[docling]" # 启用 non-text document extraction # pip install -e ".[enterprise]" # 启用 S3/Postgres enterprise storage adapters # 运行测试 pytest tests -q # Extraction 质量检查(Russian AEC corpus) python -m aerobim.tools.evaluate_extraction --min-macro-f1 0.70 python -m aerobim.tools.evaluate_detection_precision \ --labels ../samples/benchmarks/detection-precision/labels-synthetic.json \ --detections ../samples/benchmarks/detection-precision/detections-synthetic.json \ --min-precision 0.6 --min-recall 0.6 --min-f1 0.6 # 生成一份确定性 runtime 冒烟测试报告 python -m aerobim.tools.seed_smoke_report # 或者使用一个命令运行完整的 live review 冒烟测试链 python -m aerobim.tools.run_live_review_smoke # 或者针对代表性 benchmark pack 运行 baseline throughput rail python -m aerobim.tools.benchmark_project_package --iterations 1 --warmup-iterations 0 # 或者显式运行第二个 fire-compliance benchmark profile python -m aerobim.tools.benchmark_project_package --pack ../samples/benchmarks/project-package-fire-compliance.json --iterations 1 --warmup-iterations 0 # 或者显式运行 stress multisource benchmark profile python -m aerobim.tools.benchmark_project_package --pack ../samples/benchmarks/project-package-stress-multisource.json --iterations 1 --warmup-iterations 0 # 启动服务器 python -m aerobim.main # → http://127.0.0.1:8080/health ``` ## 本地质量门禁 在推送到 `main` 之前,请运行与 CI 相同的基准检查: ``` cd AeroBIM/backend python -m ruff format --check src tests python -m ruff check src tests python -m mypy src pytest tests -q ``` 如果 `ruff format --check` 报告有文件需要重新格式化,请运行: ``` python -m ruff format src tests ``` ## 基准测试与证据 经过验证的能力由测试、API 契约或持久化的报告制品提供支持。计划中/缺失的等高线(DWG、人类 CV、MEP 系统碰撞、计算*正确性*、客户准确性)在 `GET /v1/system/capabilities` 和声明锁定(Claims Lock)中都有明确说明。 ``` cd backend python -m aerobim.tools.benchmark_project_package --iterations 1 --warmup-iterations 0 python -m aerobim.tools.measure_package_sla --corpus-kind fixture python -m aerobim.tools.verify_bcf_structural_handoff python -m aerobim.tools.run_ablation_study python -m aerobim.tools.generate_benchmark_report --output-dir ../docs/evidence python -m aerobim.tools.export_runtime_baseline python -m aerobim.tools.export_evidence_bundle \ --pack ../samples/benchmarks/project-package-techlab-demo.json \ --output ../artifacts/evidence-bundle/techlab-demo ``` | 主题 | 文档 | |---|---| | 声明锁定(禁止/允许的措辞) | [audit/reports/CLAIMS_LOCK_2026_07_17.md](audit/reports/CLAIMS_LOCK_2026_07_17.md) | | 声明 × 证据矩阵 | [audit/reports/CLAIMS_EVIDENCE_MATRIX.md](audit/reports/CLAIMS_EVIDENCE_MATRIX.md) | | 关键阻塞项 / 检查点 | [audit/reports/CRITICAL_BLOCKERS.md](audit/reports/CRITICAL_BLOCKERS.md) | | 声明边界(试点 / 发布) | [docs/pilot-claim-boundary-2026.md](docs/pilot-claim-boundary-2026.md) | | 项目状态审计 | [docs/PROJECT_STATUS_AUDIT_2026.md](docs/PROJECT_STATUS_AUDIT_2026.md) | | 能力 × 声明矩阵 | [docs/capability-claim-matrix-2026.md](docs/capability-claim-matrix-2026.md) | | 基准测试证据边界 | [docs/benchmark-evidence-2026.md](docs/benchmark-evidence-2026.md) | | Samolet 试点协议 | [docs/pilot-protocol-samolet-2026.md](docs/pilot-protocol-samolet-2026.md) | | 可重复性 (FAIR) | [docs/REPRODUCIBILITY-2026.md](docs/REPRODUCIBILITY-2026.md) | | 提取语料库 / IAA | [`samples/benchmarks/annotation/README.md`](samples/benchmarks/annotation/README.md) · RU GT 在 `samples/benchmarks/` 中 | | 基准测试包 | [samples/bench/README.md](samples/benchmarks/README.md) | | 审计证据(T1 BCF,SLA 1.2,准入门禁) | [audit/evidence/](audit/evidence/) | 吞吐量和 F1 数据取决于具体环境,除非 `corpus_kind=customer` 并且裁决门禁通过,否则均为**基元范围**。在发布任何性能声明时,请一并发布包路径、CLI 标志、机器指纹和制品哈希值。请通过 [CITATION.cff](CITATION.cff) 或 [docs/CITATION.bib](docs/CITATION.bib) 进行引用。 ## API 端点 | `GET` | `/v1/system/capabilities` | 静态诚实度展示面(DWG/CV/MEP/计算声明边界) | | `GET` | `/health` | 就绪探针 | | `POST` | `/v1/validate/ifc` | 根据需求 + IDS 验证 IFC | | `POST` | `/v1/analyze/project-package` | 多模态验证(规格 + 计算 + 图纸 + IDS + IFC) | | `POST` | `/v1/analyze/project-package/reinforcement-digest` | OpenRebar 溯源摘要(**сверка** 标签;非正确性验证) | | `POST` | `/v1/analyze/project-package/submit` | 接受同进程后台分析作业,适用于较大的包 | | `GET` | `/v1/analyze/project-package/jobs/{job_id}` | 轮询异步 project-package 作业状态 | | `POST` | `/v1/uploads` | 多部分文档摄取;返回用于分析的存储相对 `path` | | `GET` | `/v1/reports` | 列出持久化的报告,支持可选的 `project`、`discipline` 和 `passed` 过滤器 | | `GET` | `/v1/reports/{id}` | 通过 ID 获取报告 | | `POST` | `/v1/reports/{id}/review-events` | 附加 HITL 审查遥测数据(不影响通过/失败状态) | | `GET` | `/v1/reports/{id}/review-events` | 列出报告的审查事件 | | `GET` | `/v1/reports/{id}/review-kpi` | 汇总分流/验收 KPI | | `GET` | `/v1/reports/{id}/source/ifc` | 下载用于浏览器查看的报告级 IFC 源文件 | | `GET` | `/v1/reports/{id}/drawing-assets/{asset_id}/preview` | 下载用于 2D 证据叠加的报告级图纸预览 | | `GET` | `/v1/reports/{id}/export/json` | 下载 JSON 导出文件 | | `GET` | `/v1/reports/{id}/export/html` | 下载 HTML 导出文件 | | `GET` | `/v1/reports/{id}/export/bcf` | 默认下载 BCF 2.1 ZIP;使用 `?version=3` 下载 BCF 3.0 | `POST /v1/analyze/project-package` 还支持可选的 OpenRebar 溯源字段: - `reinforcement_report_path`:指向 OpenRebar 规范 `*.result.json` 报告的路径(位于 `AEROBIM_STORAGE_DIR` 内); - `reinforcement_source_digest`:用于报告溯源指纹检查的预期 SHA-256 摘要。 - `reinforcement_waste_warning_threshold_percent`:可选的废料阈值(百分比),用于协调警告。 - `reinforcement_provenance_mode`:`advisory`(默认)或 `enforced`,用于将 OpenRebar 溯源警告升级为阻断性错误。 在调用项目包分析之前,请使用 `/v1/analyze/project-package/reinforcement-digest` 直接从存储的 OpenRebar 报告生成 `reinforcement_source_digest`。 对于离线或 CI shell 工作流,请使用: `python -m aerobim.tools.openrebar_provenance_digest ` 提供后,如果发生以下情况,AeroBIM 将添加跨文档警告: - OpenRebar 报告合同 ID 异常; - OpenRebar 优化器指示使用了后备主求解器; - OpenRebar 主问题策略未指示由 HiGHS 支持的路径; - 项目上下文不匹配(`project_name` 与 `metadata.projectCode`); - 提供的溯源摘要与报告指纹不匹配。 - 报告的 `summary.totalWastePercent` 超过了配置的警告阈值。 ## 架构 五层整洁架构(Clean Architecture),具有严格的内向依赖方向: ``` core/ DI container, tokens, config (no project imports) domain/ Immutable models, Protocol ports, logging contract application/ Use case orchestration (requirement fusion, cross-doc detection) infrastructure/ Adapters: IfcOpenShell, IfcTester, Docling, IfcClash, BCF, filesystem presentation/ FastAPI HTTP API, correlation middleware ``` 为了迭代 B.1,基础设施现在还包括一个制品 `ObjectStore` 接缝,以及一个可选的 Postgres 摘要索引适配器。 **20 个领域端口** → **30 个基础设施适配器** → **28 个 DI token** — 全部在一个单一的组合根(`bootstrap_container()`)中连接。 报告 payload 包含一个显式的 `capabilities` 对象(`ok` / `skipped` / `failed`),因此可选引擎(clash、IDS、单位比例、光栅、schema)不能静默地伪装成干净的 PASS。**任何 `FAILED` 的能力都会强制使 `summary.passed=false`。** ## 配置 所有设置均从环境变量中读取(参见 [`backend/.env.example`](backend/.env.example)): | 变量 | 默认值 | 描述 | |---|---|---| | `AEROBIM_HOST` | `127.0.0.1` | 绑定地址 | | `AEROBIM_PORT` | `8080` | 绑定端口 | | `AEROBIM_DEBUG` | `false` | Debug 模式(未设置来源时,也会启用 localhost CORS 默认值) | | `AEROBIM_STORAGE_DIR` | `var/reports` | 报告持久化目录 | | `AEROBIM_CORS_ORIGINS` | *(自动)* | 逗号分隔的 CORS 来源 | | `AEROBIM_ENV` | `development` | 环境名称;非开发环境需要 bearer/OIDC(fail-closed) | | `AEROBIM_SIGNOFF_PROFILE` | *(自动)* | 在非开发环境下未设置 → `production`(fail-closed);可选 `development`/`fixture`/`samolet_pilot`/`production` | | `AEROBIM_API_BEARER_TOKEN` | *(未设置)* | `/v1/*` 的 Bearer;除非设置了 `AEROBIM_ALLOW_ANONYMOUS_DEV`,否则为必需 | | `AEROBIM_ALLOW_ANONYMOUS_DEV` | `false` | 仅在开发/测试中启用匿名 API(`from_env`) | | `AEROBIM_CLASH_AFFECTS_PASS` | `false` | 在开发/基元环境中仅为软限制;在试点/生产签核下强制为 `true` | | `AEROBIM_REQUIRE_CLASH` | `false` | 在开发/基元环境中仅为软限制;在试点/生产环境下强制开启 | | `AEROBIM_MAX_IFC_BYTES` | `268435456` | 最大 IFC 大小(256 MiB,与 bSI Validation Service 对齐) | | `AEROBIM_CROSS_DOC_SEVERITY` | `warning` | 跨文档矛盾的严重性:`error`(阻断性)、`warning`、`info` | | `AEROBIM_DB_URL` | *(未设置)* | 用于报告摘要索引的可选 Postgres URL | | `AEROBIM_REPORT_TTL_DAYS` | *(未设置)* | 持久化报告 payload 的可选 TTL;未设置表示无限期保留 | | `AEROBIM_S3_BUCKET` | *(未设置)* | 用于对象存储的可选 S3/MinIO bucket | | `AEROBIM_S3_ENDPOINT_URL` | *(未设置)* | 可选的 MinIO/自定义 S3 端点 | | `AEROBIM_S3_REGION` | `us-east-1` | 兼容 S3 的存储的签名区域 | | `AEROBIM_S3_ACCESS_KEY_ID` | *(未设置)* | 兼容 S3 的存储的可选访问密钥 | | `AEROBIM_S3_SECRET_ACCESS_KEY` | *(未设置)* | 兼容 S3 的存储的可选秘密密钥 | | `AEROBIM_S3_PREFIX` | `aerobim` | 应用于兼容 S3 存储中对象键的前缀 | ## 项目结构 ``` aerobim/ ├── backend/ # Python FastAPI backend (see generated baseline below) │ ├── src/aerobim/ # Source: core → domain → application → infrastructure → presentation │ ├── tests/ # Backend test suite (see generated baseline below) │ └── pyproject.toml ├── clients/revit-plugin/ # Thin authoring-side client boundary (planned) ├── docs/ # TechLab jury docs only (see docs/README.md) ├── frontend/ # Browser review shell ├── audit/ # Claims lock, blockers, citeable honesty fixtures ├── samples/ # IFC, IDS, drawing, spec fixtures ├── .github/workflows/ # CI pipeline (lint, typecheck, test, benchmark-smoke) + manual release-readiness gates └── LICENSE # MIT ``` 后端源码约 22808 LOC;测试约 14562 LOC;581+ 个测试函数;提取 macro_f1=0.86(基元语料库;非产品准确率) ## 文档 公开的 GitHub **仅为 TechLab 评审包**:代码 + TZ / 声明 / 架构。操作员运行手册、Red Team 转储和存档保留在 `.local/` 中(未公开)。 | 需求 | 文档 | |------|----------| | **开始** | [`docs/TIER0_INDEX.md`](docs/TIER0_INDEX.md) · [`docs/README.md`](docs/README.md) | | 评审备忘录 (RU) | [`docs/docs.md`](docs/docs.md) | | Samolet 策略 | [`docs/samolet.md`](docs/samolet.md) | | TZ 任务 07 | [`docs/tz/README.md`](docs/tz/README.md) | | 声明锁定 | [`audit/reports/CLAIMS_LOCK_2026_07_17.md`](audit/reports/CLAIMS_LOCK_2026_07_17.md) | | 检查点 | [`audit/reports/CRITICAL_BLOCKERS.md`](audit/reports/CRITICAL_BLOCKERS.md) · **NO_GO** | | 项目状态审计 | [`docs/PROJECT_STATUS_AUDIT_2026.md`](docs/PROJECT_STATUS_AUDIT_2026.md) | | 能力 × 声明矩阵 | [`docs/capability-claim-matrix-2026.md`](docs/capability-claim-matrix-2026.md) | | 基准测试证据 | [`docs/benchmark-evidence-2026.md`](docs/benchmark-evidence-2026.md) | | 试点协议 | [`docs/pilot-protocol-samolet-2026.md`](docs/pilot-protocol-samolet-2026.md) | | 声明边界 | [`docs/pilot-claim-boundary-2026.md`](docs/pilot-claim-boundary-2026.md) | | 架构 | [`docs/architecture/TARGET_HYBRID_ARCHITECTURE_TZ_2026.md`](docs/architecture/TARGET_HYBRID_ARCHITECTURE_TZ_2026.md) | | 对齐 R1–R15 | [`docs/samolet-techlab-alignment-2026.md`](docs/samolet-techlab-alignment-2026.md) | | 合作伙伴 / 就绪状态 | [`docs/partners/TECHLAB_TASK_07_READINESS_2026.md`](docs/partners/TECHLAB_TASK_07_READINESS_2026.md) | | 可重复性 | [`docs/REPRODUCIBILITY-2026.md`](docs/REPRODUCIBILITY-2026.md) | | 基元 | [`docs/evidence/README.md`](docs/evidence/README.md) · [`samples/benchmarks/README.md`](samples/benchmarks/README.md) | ## Git 提交 使用 [scripts/git_commit.ps1](scripts/git_commit.ps1) 或 VS Code 任务 **AeroBIM: commit (single author)**,以便历史记录保持单一作者,且不包含 `Co-authored-by` 尾部。启用代码库 hook: ``` git config core.hooksPath .githooks ``` 建议的代码库 About — [.github/repository-metadata.md](.github/repository-metadata.md)。 ## 治理 ## 发布就绪状态 在准备发布候选版本时,请使用手动的 GitHub Actions 工作流 `.github/workflows/release-readiness.yml`。 它默认运行基准测试轨道,并可选择运行完整的实时审查冒烟测试工具,以生成浏览器制品。 实时冒烟测试路径现在会在工作流作业内安装 Playwright 和 Chromium,因此浏览器捕获在 CI 中是可复现的。 主要的 CI benchmark-smoke 运行现在也会在工作流输出和制品中生成一个简洁的基准测试摘要表。 在需要时,`require_live_smoke_gate=true` 会将实时冒烟测试的执行强制作为该发布就绪运行的一个强制性策略门禁。 CI benchmark-smoke 现在还会从 `samples/benchmarks/benchmark-thresholds.json` 运行咨询性阈值评估,并在基准制品旁发布阈值摘要。 发布就绪基准测试轨道现在支持 `benchmark_threshold_mode`(`advisory` 或 `enforced`)以及显式的阈值配置文件路径选择。 ## 技术栈 - **Python 3.12+**, **FastAPI**, **Uvicorn** - **IfcOpenShell** / **IfcTester** / **IfcClash** (buildingSMART 工具链) - **web-ifc** + **Three.js** 用于浏览器端的 IFC 审查 - **PyMu** 用于确定性 PDF 文本;**RapidOCR** 仅在安装了 `.[raster]` 时可用 - **Docling**(可选,文档解析) - 5 层整洁架构,构造函数 DI,Protocol 端口 ## 许可证 [MIT](LICENSE)
标签:BCF, BIM, IFC, Python, 安全规则引擎, 建筑工程, 无后门, 测试用例, 自动化校验, 质量审查