Files

1 line
14 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}