098780b14e
Co-authored-by: multica-agent <github@multica.ai>
12 KiB
12 KiB
Work Log - 修复 Buildx 安装阶段访问 Docker Hub 超时(2026-06-09)
-
背景:
- GitHub Actions run
27150975287在build-and-pushjob 的安装 Buildx步骤失败,后续镜像构建与部署全部被跳过。 - check-run annotation 给出的精确错误为:
Head "https://registry-1.docker.io/v2/moby/buildkit/manifests/buildx-stable-1" ... Client.Timeout exceeded while awaiting headers
- 根因不是仓库镜像构建脚本本身,而是
docker/setup-buildx-action默认docker-container驱动在启动 BuildKit builder 时,需要先从 Docker Hub 拉moby/buildkit:buildx-stable-1,受外网访问抖动影响直接超时。
- GitHub Actions run
-
本次处理:
.github/workflows/main.ymlactions/checkout升级到v6。docker/setup-buildx-action升级到v4,并显式指定:driver-opts: image=docker.m.daocloud.io/moby/buildkit:buildx-stable-1- 避免 Buildx 初始化再访问 Docker Hub 拉默认 BuildKit 镜像。
docker/login-action升级到v4。docker/build-push-action升级到v7。
- 兼带收益:
- 消除了该次 run 中出现的
Node.js 20 actions are deprecated预警里的旧版checkout/setup-buildx。
- 消除了该次 run 中出现的
-
验证:
- 基线:
- GitHub Actions run
27150975287失败,且失败点固定在安装 Buildx。 - check-run annotation 可复核到 Docker Hub
moby/buildkit拉取超时。
- GitHub Actions run
- 修改后:
python3解析.github/workflows/main.yml通过。actionlint校验变更前/变更后 workflow 均可解析,变更未引入 YAML / Actions 语法问题。git diff --check -- .github/workflows/main.yml通过。
- 当前环境限制:
- 无法直接在本地实际执行 GitHub hosted runner 上的
setup-buildx拉起流程,真实恢复效果需要依赖下一次 Actions 运行确认。
- 无法直接在本地实际执行 GitHub hosted runner 上的
- 基线:
-
风险与关注点:
- 本次修复只绕开 BuildKit builder 镜像对 Docker Hub 的依赖;后续若
Dockerfile里的基础镜像或docker build --pull仍指向不稳定上游,构建阶段仍可能出现其他网络相关失败。
- 本次修复只绕开 BuildKit builder 镜像对 Docker Hub 的依赖;后续若
Work Log - 修复线路管理走向图在 /fl 子路径下无法渲染(2026-06-09)
-
背景:
- Issue
FL-60反馈“线路管理中走向图渲染不出来”。 - 仓库部署默认启用
NEXT_PUBLIC_APP_BASE_PATH=/fl,但多个 Cesium 组件初始化时仍把window.CESIUM_BASE_URL硬编码为"/cesium"。 - 这会导致页面在
/fl/admin/power-lines等子路径下请求错误的静态资源地址,最终触发 Cesium Viewer 初始化失败。
- Issue
-
本次处理:
web/src/components/power-line-cesium-map.tsx- 将走向图 Cesium 静态资源根路径改为
withBasePath("/cesium"),修复线路管理走向图在/fl部署下的资源寻址。
- 将走向图 Cesium 静态资源根路径改为
web/src/components/elevation-preview-cesium-map.tsx- 同步改为
withBasePath("/cesium"),避免高程预览图在相同部署口径下继续空白。
- 同步改为
web/src/components/lightning-distribution-map.tsx- 同步改为
withBasePath("/cesium"),保持雷电分布图与项目子路径部署口径一致。 - 顺手补齐
Viewer/CesiumNamespace/Cartesian3[]显式类型,消除本地 lint 暴露的no-explicit-any问题。
- 同步改为
-
验证:
- 基线:
- 代码检查确认
power-line-cesium-map.tsx、elevation-preview-cesium-map.tsx、lightning-distribution-map.tsx都存在window.CESIUM_BASE_URL = "/cesium"硬编码。 - 部署配置检查确认
deploy/pro-deploy/.env与 compose / Dockerfile 默认均为NEXT_PUBLIC_APP_BASE_PATH=/fl。 - 初次本地 lint 尝试因未安装前端依赖失败;补充执行
NPM_CONFIG_CACHE=/tmp/npm-cache npm ci后继续验证。
- 代码检查确认
- 修改后:
NPM_CONFIG_CACHE=/tmp/npm-cache npm --workspace web exec eslint src/components/power-line-cesium-map.tsx src/components/elevation-preview-cesium-map.tsx src/components/lightning-distribution-map.tsx src/app/admin/power-lines/page.tsx --max-warnings=0-> 通过。NEXT_PUBLIC_APP_BASE_PATH=/fl NPM_CONFIG_CACHE=/tmp/npm-cache npm run build:web-> 通过。
- 基线:
-
风险与关注点:
- 本次修复聚焦前端静态资源路径,不涉及后端接口、数据库或权限逻辑。
- 若后续新增 Cesium 页面,必须继续复用
withBasePath("/cesium"),不能再硬编码根路径。
Work Log - 文件管理页移除索引同步时间列(2026-06-09)
-
背景:
- Issue
FL-61要求文件管理页面不再展示“索引同步时间”列。 - 代码检索确认该展示仅存在于
web/src/app/admin/files/page.tsx的表格列定义中,未发现额外前端展示点。
- Issue
-
本次处理:
web/src/app/admin/files/page.tsx- 从文件列表表格列定义中移除“索引同步时间”列。
- 保持接口请求、返回字段与前端类型不变,仅调整页面展示。
-
验证:
- 基线:
npm ci --cache /tmp/npm-cache成功补齐前端依赖。npm --workspace web exec eslint src/app/admin/files/page.tsx --max-warnings=0-> 通过。npm run lint:web当前因仓库既有问题失败,主要包含web/public/cesium/**生成资源与web/src/app/admin/syslog/page.tsx的现存 lint error,和本次改动无关。
- 修改后:
npm --workspace web exec eslint src/app/admin/files/page.tsx --max-warnings=0-> 通过。
- 基线:
-
风险与关注点:
- 本次变更仅影响文件管理页列表展示,不涉及后端索引同步逻辑,也不影响其它复用该接口的页面读取
synced_at字段。
- 本次变更仅影响文件管理页列表展示,不涉及后端索引同步逻辑,也不影响其它复用该接口的页面读取
Work Log - ATP/EGM/Wine 生产计算链路接入 legacy_atp worker 适配(2026-06-09)
-
背景:
- Issue
FL-69要求把fl-knowledge的旧 ATP/EGM 生产计算协议接入fquiz,并确保真实计算执行在 worker 中异步完成。 - 现状是:
fl_analysis_service已有 Celery worker 链路,但external_adapter仅支持placeholder/atp/wine。- 通用
fl_analysis_external.py只覆盖“ATP 模板渲染 + 子进程执行”的简化协议,不承接旧 ATP 目录协议、特征写入和 EGM/rjtzl.exe。 atp_model_service.get_engine_status()只能返回 ATP engine 总体可用性,不能细分tpbig.exe/rjtzl.exe/legacy_root/EGM子目录等资产状态。
- Issue
-
本次处理:
api/app/services/legacy_atp_adapter.py- 新增独立 legacy ATP/EGM 业务适配层,不把旧链路逻辑混入通用
wine_service.py。 - 支持:
WINE_ALLOWED_ROOT下的 legacy 资产路径校验。- 旧模板目录解析、
fanji/raoji1/raoji2/raoji3模式选择。 - ATP 特征配置读取与定长 offset/length 写入。
gb18030/gbk/utf-8-sig/utf-8配置与结果文件解码。tpbig.exe与rjtzl.exe调用。- EGM 子目录存在性校验、
rjtzl.exe运行失败,所得绕击跳闸率无效错误归一化。 - 结果文件 / stdout 解析并映射到现有防雷分析结果结构。
- 同时补了 legacy 资产状态检查构建函数,给 ATP 状态接口复用。
- 新增独立 legacy ATP/EGM 业务适配层,不把旧链路逻辑混入通用
api/app/services/fl_analysis_service.py- 扩展
external_adapter支持legacy_atp。 - 在
normal/tongtiaoworker 执行链路中直接调用resolve_legacy_atp_job()/execute_legacy_atp_tower_analysis()。 scenario复算场景会沿用基线任务的external_adapter + adapter_config_json,因此也能复用legacy_atp。- 保持长耗时执行仍在现有
execute_fl_analysis_jobworker 中完成,API 侧只负责校验和派发。
- 扩展
api/app/services/atp_model_service.py- ATP 状态响应新增
checks明细,细分返回:winelegacy_roottemplate_rootrun_roottpbig_executablerjtzl_executableegm_subdir
- ATP 状态响应新增
api/app/core/config.py- 新增 legacy ATP/EGM 资产配置项:
atp_legacy_rootatp_tpbig_executableatp_rjtzl_executableatp_template_rootatp_run_rootatp_egm_subdir
- 新增 legacy ATP/EGM 资产配置项:
api/app/schemas/fl_analysis.py/api/app/schemas/atp_model.py- 扩展 adapter 枚举和 ATP 状态响应字段,补齐接口契约。
- 新增测试:
api/tests/test_legacy_atp_adapter_paths.pyapi/tests/test_legacy_atp_feature_set.pyapi/tests/test_fl_analysis_legacy_atp_adapter.pyapi/tests/test_atp_engine_task.py
-
验证:
python3 -m py_compile app/services/legacy_atp_adapter.py app/services/fl_analysis_service.py app/services/atp_model_service.py app/schemas/fl_analysis.py app/schemas/atp_model.py app/core/config.py tests/test_legacy_atp_adapter_paths.py tests/test_legacy_atp_feature_set.py tests/test_fl_analysis_legacy_atp_adapter.py tests/test_atp_engine_task.py- 通过
UV_CACHE_DIR=/tmp/uv-cache uv run --with-requirements requirements.txt --with pytest --no-project env PYTHONPATH=. python -m pytest tests/test_atp_engine_task.py tests/test_wine_probe.py tests/test_legacy_atp_adapter_paths.py tests/test_legacy_atp_feature_set.py tests/test_fl_analysis_legacy_atp_adapter.py tests/test_fl_analysis_external.py tests/test_async_dispatch_services.py tests/test_atp_model_service.py tests/test_fl_analysis_service.py tests/test_fl_analysis_schema.py19 passed, 1 warning- warning 为既有 SQLAlchemy relationship overlap 提示,与本次改动无直接关系。
git diff --check- 通过
-
风险与关注点:
- 当前仓库内仍没有
tpbig.exe、rjtzl.exe、旧 ATP 模型目录和 EGM 子目录等真实生产运行资产;本次交付的是代码层接入、状态检测和可测的 worker 执行协议。 - 上线前仍需在容器/部署环境提供实际 legacy 资产挂载,并用真实资产做 smoke test。
- 当前仓库内仍没有
Work Log - 任务监控页面样式布局优化(2026-06-09)
-
背景:
- Issue
FL-72要求“参考用户管理页面的样式和布局优化任务监控页面,包括 margin、padding、border 以及自适应高度”等。 - 现状是
web/src/app/admin/task-monitor/page.tsx采用“筛选卡 + 表格卡”的分离布局,和用户管理页的单卡结构不一致;任务表格也缺少在少量数据下的最小高度占位与视口自适应滚动高度。
- Issue
-
本次改动:
web/src/app/admin/task-monitor/page.tsx- 页面主体收敛为与用户管理页一致的单卡布局,标题统一为“任务监控”。
- 将 Worker/队列/任务/状态筛选与自动刷新开关合并进卡片顶部
Form inline区域,补充“重置筛选”按钮。 - 卡片顶部
extra区域增加统一的刷新按钮和加载中的小型Spin,保持和管理页操作区的交互节奏一致。 - 增加生成时间、Worker 总数、在线/离线数、筛选后任务数的二级信息行,替代原本散落在筛选区尾部的时间文案。
- 任务表格新增与用户管理页一致的动态高度计算(
scroll.y+resize监听 +ResizeObserver),避免筛选结果较少时表格区域坍塌。 - 加载态统一为
min-h-[240px]居中Spin;空态文案改为“暂无符合筛选条件的任务数据。”。 - 保持任务监控的数据请求、轮询、权限判断和表格列定义不变,仅调整布局与展示容器。
web/src/app/globals.css- 新增
.admin-task-monitor-table-anchor .ant-table-body作用域样式,通过页面注入变量设置最小高度,避免影响其他 Ant Design 表格。
- 新增
-
验证:
- 基线:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0-> 通过。
- 修改后:
npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0-> 通过。npm run build:web-> 通过。
- 基线:
-
风险与关注点:
- 影响范围仅
任务监控页面前端展示层与局部表格样式作用域,不涉及后端接口、权限或任务监控数据口径变更。
- 影响范围仅