{"repo": "chain813/ultimate-design", "files": {".github/ISSUE_TEMPLATE/BUG_REPORT.md": {"2f942a267b551dbf68f39a69f5f0b35fc3eb5896": {"t": 1785747033.200973, "n": 4176, "h": "c8a2bdb96218a524", "c": "# ultimateDESIGN Bug 报告\n\n生成时间:2026-06-21 (第四次更新)\n\n## 修复进展\n\n- ✅ 已修复 BUG-001:`.env` 已清理真实凭据,扫描器已增加教程占位符白名单,扫描干净通过。\n- ✅ 已修复 BUG-002:`tools/check_env.py` 诊断脚本此前缺失对 `pages/14_数据大屏.py` 的校验,已将其加入并同步更新测试断言。\n- ✅ 已修复 BUG-003:`requirements.txt` 已补充 `geopandas==1.1.3`。\n- ✅ 已修复 BUG-004:`get_skyline_features()` 已改为先投影再计算建筑质心,并优先使用 `union_all()`。\n- ✅ 已修复 BUG-005:`requirements.txt` 已统一升级至当前稳定运行版本,CI 已从 Python 3.10 升级至 3.12,消除双轨制风险。\n- ✅ 已修复 BUG-006:新增 Streamlit 宽度兼容 helper,新版使用 `width=\"stretch\"`,旧版回退 `use_container_width=True`。\n- ✅ 已修复 BUG-007:两份建筑 GeoJSON 已补充稳定 `building_id`,数据质量检查已接受该字段。\n- ✅ 已确认 BUG-008:重点地块 POI 覆盖为 0 确认为数据采集范围不足(非算法错误)。已增加覆盖诊断列,并提供扩展采集脚本。\n- ✅ 已修复 BUG-009:`src/ui/app_shell.py` 的旧 UI/chart helper 重复实现已删除,保留兼容导出。\n- ✅ 已修复 BUG-010:扩展 lint 中的未使用异常变量/循环变量已清理。\n- ✅ 已修复 BUG-011:由于 `data/gis/Building_Footprints.geojson` 被 `.gitignore` 排除,导致 CI 环境下 `data_quality_check` 及 pytest 单元测试失败。已通过在检查工具中实现 Git 忽略文件降级为 WARNING 的白名单机制完美解决。\n- ✅ 新增:DevOps 工具链测试全覆盖(check_env / secret_scan / startup_smoke / data_quality_check),CI 已集成环境诊断与数据质量检查。\n- ✅ 新增:Git 历史泄漏审计完成,百度 AK 存在于 3 个历史提交中,需用 git filter-repo 清除。\n- ✅ 已修复 BUG-012:DeepSeek API 400 报错已修复,答辩小结锁定使用 deepseek-v4-pro,防止与本地 Ollama 模型混淆。\n\n## BUG-001:密钥扫描漏扫 `.env`,本地存在真实格式凭据\n\n- 严重级别:高 → **已修复**\n- 修复内容:\n 1. `.env` 已重置为占位符格式 (`YOUR_BAIDU_MAP_AK` / `YOUR_DEEPSEEK_API_KEY`)。\n 2. `.env.example` 已同步更新,包含 DEEPSEEK_API_KEY 占位符。\n 3. `secret_scan.py` 新增 `KNOWN_SAFE_PATTERNS` 白名单,自动跳过教程代码中的占位 API Key。\n 4. 扫描器现在对清理后的项目输出 `[OK] No obvious secrets found.`。\n- ⚠️ Git 历史审计结果:百度地图 AK `W7iTpEM9...` 泄露于以下 3 个提交:\n - `fa5e76e` (Initial commit): `get_poi.py`、`get_traffic_poi.py` — 硬编码\n - `dd058a1`: `.env.example`、`get_poi.py`、`get_traffic_poi.py`\n - `8b71ca3`: `.env.example`\n- DeepSeek Key 未被提交到 Git 历史。\n- **后续操作**:需在百度地图开放平台轮换 AK,并使用 `git filter-repo` 从历史中移除泄露内容。\n\n## BUG-005:本地验证环境与锁定依赖严重不一致\n\n- 严重级别:中 → **已修复**\n- 修复内容:\n 1. `requirements.txt` 已全面升级至当前稳定运行版本(streamlit 1.55.0、pandas 2.3.3、numpy 2.4.3 等)。\n 2. CI 配置 `.github/workflows/ci.yml` 已将 Python 从 3.10 升级至 3.12。\n 3. CI 新增 `tools/check_env.py` 和 `tools/data_quality_check.py` 步骤。\n 4. 167 个测试在统一环境下全部通过。\n\n## BUG-008:重点地块 POI 覆盖统计显示 0\n\n- 严重级别:高 → **已修复**\n- 根因诊断:\n - **坐标系混用**:`Key_Plots_District.json` 和 `Boundary_Scope.geojson` 使用 GCJ-02(火星坐标系),而 POI 数据经 `bd09_to_wgs84()` 转换后为 WGS-84。两套坐标系在长春地区存在约 0.003~0.006° 偏移,导致 point-in-polygon 判定系统性失败。\n - CRS 偏移诊断结果:无偏移=10命中, GCJ-02补偿=50命中, BD-09补偿=83命中 → 确认为 GCJ-02 偏移。\n- 修复内容:\n 1. 新增 `scripts/convert_gcj02_to_wgs84.py` 精确投影转换工具,使用与 `geo_transform.py` 一致的算法逐点转换。\n 2. 已将 `Key_Plots_District.json` 和 `Boundary_Scope.geojson` 转换为 WGS-84 (EPSG:4326),原始文件备份为 `.gcj02_backup`。\n 3. 转换后 5 地块 POI 命中从 10 → 50(BBox)/ 0 → 35(polygon 精确)。\n- 修复后状态:\n - 食品调料大市场: 0 → **22** POI\n - 清禾集贸市场: 0 → **11** POI\n - 市一中北侧: 0 → **1** POI\n - 中国石油: 2 → **1** POI (polygon 精确匹配)\n - 农贸水产市场: 0 → **0** POI (确认为真实稀疏区域,200m 内仅 9 个 POI 分布在地块外围)\n\n## BUG-011:由于 `Building_Footprints.geojson` 未提交导致 GitHub Actions CI 失败\n\n- 严重级别:高 → **已修复**\n- 根因诊断:\n - 本地 35.21 MB 的 `Building_Footprints.geojson` 建筑轮廓文件已被 `.gitignore` 排除以避免 GitHub 大文件警告与冗余上传。\n - 在 GitHub Actions CI 等全新克隆的干净环境中,由于缺少此文件,`tools/data_quality_check.py` 判定其为 critical 的 `MISSING` 状态并退出返回退出码 1。\n - 这进而导致两个 CI 流水线任务失败:\n 1. `smoke` 任务中的 `Data quality check` 阶段退出码 1。\n 2. `test` 任务中的 `pytest` 执行 `tests/test_data_quality_check.py::test_main_returns_zero` 时断言失败。\n- 修复内容:\n 1. 在 `tools/data_quality_check.py` 中引入 `GIT_IGNORED_FILES = {\"Building_Footprints.geojson\"}` 白名单列表。\n 2. 优化 `check_csv_or_excel` 和 `check_geojson` 函数,若缺失的文件属于被 Git 忽略的大文件,则自动将状态降级为可忽略的 `WARNING`,而不再判定为关键的 `MISSING`。\n 3. 调整 `main()` 函数中的 `has_critical` 提取规则,使警告级别的状态不再抛出非 0 退出码,确保 CI 检查顺利通过,同时对开发者保留清晰的警告信息。\n\n## BUG-012:DeepSeek API 400 报错与本地 Ollama 模型混淆\n\n- 严重级别:高 → **已修复**\n- 根因诊断:\n - 在答辩小结生成功能中,UI 扫描组件将本地运行的 Ollama 模型名(如 `gemma3:4b`)传入了 DeepSeek 官方 API 接口。\n - 官方接口收到非预期的模型名参数,抛出 400 报错 `\"The supported API model names are deepseek-v4-pro or deepseek-v4-flash, but you passed gemma3:4b.\"`。\n- 修复内容:\n - 修改了 `src/ui/module_summary.py`,移除针对本地 Ollama 服务的扫描下拉框,将答辩总结大模型直接锁定为官方支持的 `deepseek-v4-pro`。\n - 修改了 `src/engines/llm_engine.py` 中的判定逻辑,当 `model_tag = \"deepseek-v4-pro\"` 时强制走云端 DeepSeek 接口,并在后台完全规避与本地 Ollama 模型的冲突。\n\n\n"}, "8a12d969f8b71fef0e00da3b183cf6f09e7a0e28": {"t": 1785769932.763318, "n": 4176, "h": "c8a2bdb96218a524", "c": "# ultimateDESIGN Bug 报告\n\n生成时间:2026-06-21 (第四次更新)\n\n## 修复进展\n\n- ✅ 已修复 BUG-001:`.env` 已清理真实凭据,扫描器已增加教程占位符白名单,扫描干净通过。\n- ✅ 已修复 BUG-002:`tools/check_env.py` 诊断脚本此前缺失对 `pages/14_数据大屏.py` 的校验,已将其加入并同步更新测试断言。\n- ✅ 已修复 BUG-003:`requirements.txt` 已补充 `geopandas==1.1.3`。\n- ✅ 已修复 BUG-004:`get_skyline_features()` 已改为先投影再计算建筑质心,并优先使用 `union_all()`。\n- ✅ 已修复 BUG-005:`requirements.txt` 已统一升级至当前稳定运行版本,CI 已从 Python 3.10 升级至 3.12,消除双轨制风险。\n- ✅ 已修复 BUG-006:新增 Streamlit 宽度兼容 helper,新版使用 `width=\"stretch\"`,旧版回退 `use_container_width=True`。\n- ✅ 已修复 BUG-007:两份建筑 GeoJSON 已补充稳定 `building_id`,数据质量检查已接受该字段。\n- ✅ 已确认 BUG-008:重点地块 POI 覆盖为 0 确认为数据采集范围不足(非算法错误)。已增加覆盖诊断列,并提供扩展采集脚本。\n- ✅ 已修复 BUG-009:`src/ui/app_shell.py` 的旧 UI/chart helper 重复实现已删除,保留兼容导出。\n- ✅ 已修复 BUG-010:扩展 lint 中的未使用异常变量/循环变量已清理。\n- ✅ 已修复 BUG-011:由于 `data/gis/Building_Footprints.geojson` 被 `.gitignore` 排除,导致 CI 环境下 `data_quality_check` 及 pytest 单元测试失败。已通过在检查工具中实现 Git 忽略文件降级为 WARNING 的白名单机制完美解决。\n- ✅ 新增:DevOps 工具链测试全覆盖(check_env / secret_scan / startup_smoke / data_quality_check),CI 已集成环境诊断与数据质量检查。\n- ✅ 新增:Git 历史泄漏审计完成,百度 AK 存在于 3 个历史提交中,需用 git filter-repo 清除。\n- ✅ 已修复 BUG-012:DeepSeek API 400 报错已修复,答辩小结锁定使用 deepseek-v4-pro,防止与本地 Ollama 模型混淆。\n\n## BUG-001:密钥扫描漏扫 `.env`,本地存在真实格式凭据\n\n- 严重级别:高 → **已修复**\n- 修复内容:\n 1. `.env` 已重置为占位符格式 (`YOUR_BAIDU_MAP_AK` / `YOUR_DEEPSEEK_API_KEY`)。\n 2. `.env.example` 已同步更新,包含 DEEPSEEK_API_KEY 占位符。\n 3. `secret_scan.py` 新增 `KNOWN_SAFE_PATTERNS` 白名单,自动跳过教程代码中的占位 API Key。\n 4. 扫描器现在对清理后的项目输出 `[OK] No obvious secrets found.`。\n- ⚠️ Git 历史审计结果:百度地图 AK `W7iTpEM9...` 泄露于以下 3 个提交:\n - `fa5e76e` (Initial commit): `get_poi.py`、`get_traffic_poi.py` — 硬编码\n - `dd058a1`: `.env.example`、`get_poi.py`、`get_traffic_poi.py`\n - `8b71ca3`: `.env.example`\n- DeepSeek Key 未被提交到 Git 历史。\n- **后续操作**:需在百度地图开放平台轮换 AK,并使用 `git filter-repo` 从历史中移除泄露内容。\n\n## BUG-005:本地验证环境与锁定依赖严重不一致\n\n- 严重级别:中 → **已修复**\n- 修复内容:\n 1. `requirements.txt` 已全面升级至当前稳定运行版本(streamlit 1.55.0、pandas 2.3.3、numpy 2.4.3 等)。\n 2. CI 配置 `.github/workflows/ci.yml` 已将 Python 从 3.10 升级至 3.12。\n 3. CI 新增 `tools/check_env.py` 和 `tools/data_quality_check.py` 步骤。\n 4. 167 个测试在统一环境下全部通过。\n\n## BUG-008:重点地块 POI 覆盖统计显示 0\n\n- 严重级别:高 → **已修复**\n- 根因诊断:\n - **坐标系混用**:`Key_Plots_District.json` 和 `Boundary_Scope.geojson` 使用 GCJ-02(火星坐标系),而 POI 数据经 `bd09_to_wgs84()` 转换后为 WGS-84。两套坐标系在长春地区存在约 0.003~0.006° 偏移,导致 point-in-polygon 判定系统性失败。\n - CRS 偏移诊断结果:无偏移=10命中, GCJ-02补偿=50命中, BD-09补偿=83命中 → 确认为 GCJ-02 偏移。\n- 修复内容:\n 1. 新增 `scripts/convert_gcj02_to_wgs84.py` 精确投影转换工具,使用与 `geo_transform.py` 一致的算法逐点转换。\n 2. 已将 `Key_Plots_District.json` 和 `Boundary_Scope.geojson` 转换为 WGS-84 (EPSG:4326),原始文件备份为 `.gcj02_backup`。\n 3. 转换后 5 地块 POI 命中从 10 → 50(BBox)/ 0 → 35(polygon 精确)。\n- 修复后状态:\n - 食品调料大市场: 0 → **22** POI\n - 清禾集贸市场: 0 → **11** POI\n - 市一中北侧: 0 → **1** POI\n - 中国石油: 2 → **1** POI (polygon 精确匹配)\n - 农贸水产市场: 0 → **0** POI (确认为真实稀疏区域,200m 内仅 9 个 POI 分布在地块外围)\n\n## BUG-011:由于 `Building_Footprints.geojson` 未提交导致 GitHub Actions CI 失败\n\n- 严重级别:高 → **已修复**\n- 根因诊断:\n - 本地 35.21 MB 的 `Building_Footprints.geojson` 建筑轮廓文件已被 `.gitignore` 排除以避免 GitHub 大文件警告与冗余上传。\n - 在 GitHub Actions CI 等全新克隆的干净环境中,由于缺少此文件,`tools/data_quality_check.py` 判定其为 critical 的 `MISSING` 状态并退出返回退出码 1。\n - 这进而导致两个 CI 流水线任务失败:\n 1. `smoke` 任务中的 `Data quality check` 阶段退出码 1。\n 2. `test` 任务中的 `pytest` 执行 `tests/test_data_quality_check.py::test_main_returns_zero` 时断言失败。\n- 修复内容:\n 1. 在 `tools/data_quality_check.py` 中引入 `GIT_IGNORED_FILES = {\"Building_Footprints.geojson\"}` 白名单列表。\n 2. 优化 `check_csv_or_excel` 和 `check_geojson` 函数,若缺失的文件属于被 Git 忽略的大文件,则自动将状态降级为可忽略的 `WARNING`,而不再判定为关键的 `MISSING`。\n 3. 调整 `main()` 函数中的 `has_critical` 提取规则,使警告级别的状态不再抛出非 0 退出码,确保 CI 检查顺利通过,同时对开发者保留清晰的警告信息。\n\n## BUG-012:DeepSeek API 400 报错与本地 Ollama 模型混淆\n\n- 严重级别:高 → **已修复**\n- 根因诊断:\n - 在答辩小结生成功能中,UI 扫描组件将本地运行的 Ollama 模型名(如 `gemma3:4b`)传入了 DeepSeek 官方 API 接口。\n - 官方接口收到非预期的模型名参数,抛出 400 报错 `\"The supported API model names are deepseek-v4-pro or deepseek-v4-flash, but you passed gemma3:4b.\"`。\n- 修复内容:\n - 修改了 `src/ui/module_summary.py`,移除针对本地 Ollama 服务的扫描下拉框,将答辩总结大模型直接锁定为官方支持的 `deepseek-v4-pro`。\n - 修改了 `src/engines/llm_engine.py` 中的判定逻辑,当 `model_tag = \"deepseek-v4-pro\"` 时强制走云端 DeepSeek 接口,并在后台完全规避与本地 Ollama 模型的冲突。\n\n\n"}}}}