tasks.md 4.6 KB

定时任务扫描问题修复 Implementation Plan

For agentic workers: 按仓库 code-copilot 工作流在当前会话内联执行;逐项运行目标测试,不创建额外 worktree,不回退 V1-V9 工作区成果。

status: complete scope: V10 only

Goal: 关闭整体扫描发现的安全绕过、状态悬挂和并发一致性缺口,使现有定时任务、开放 API 和 Flow 编排在失败与重启场景下保持可判定状态。

Architecture: RPC 复用 V8 受控出站客户端并增加独立 JOB_RPC 场景,执行端用显式服务 Token 认证。生命周期修复集中在 Mapper 原子 SQL、启动恢复服务和按任务 ID 串行的协调器中;Flow 与前端只做协议边界补齐。

Tech Stack: Java 17、Spring Boot 3、Quartz、MyBatis XML、SecureOutboundClient、Flyway、Vue 3、Naive UI、JUnit 5、Mockito、Vitest。


Task 1: Spec 与测试基线

Files:

  • Create: code-copilot/changes/定时任务扫描问题修复/spec.md
  • Create: code-copilot/changes/定时任务扫描问题修复/tasks.md
  • Create: code-copilot/changes/定时任务扫描问题修复/test-spec.md
  • Create: code-copilot/changes/定时任务扫描问题修复/execution-log.md

  • [x] 固化 12 项扫描问题、边界和修复顺序。

  • [x] 复用 V9 成功基线并建立 V10 P0/P1 增量测试矩阵。

  • [x] 完成后回填执行证据、跳过项、父路线图和可复用决策。

Task 2: 执行器认证与 RPC 受控出站

Files:

  • Modify: JobExecutorEndpoint.java, RemoteJobExecutorRouter.java, JobProperties.java
  • Modify: forge-plugin-job/pom.xml, application-job-example.yml
  • Modify: OutboundScenes.java, DefaultOutboundPolicyService.java
  • Create: V1.0.49__fix_job_scheduler_scan_findings.sql
  • Test: endpoint、router、outbound policy 和 migration contract tests

  • [x] 先添加端点默认关闭、Bearer 校验、响应脱敏和业务错误状态测试。

  • [x] 先添加 RPC 请求进入 JOB_RPC、携带服务 Token、解析 RespInfo 和拒绝失败响应测试。

  • [x] 先添加 JOB_RPC 私网必须显式授权和迁移字典/约束测试。

  • [x] 实现最小认证、受控请求和双层成功判定,删除 Hutool 直连 HTTP。

  • [x] 运行 Job 与 Outbound 目标测试。

Task 3: 日志清理与悬挂执行恢复

Files:

  • Modify: JobLogController.java, SysJobLogServiceImpl.java
  • Modify: SysJobLogMapper.java / SysJobLogMapper.xml
  • Create: JobExecutionRecoveryService.java
  • Modify: JobStartupReconciler.java, JobProperties.java
  • Test: service、mapper contract 和 startup recovery tests

  • [x] 添加 days 边界、ACCEPTED/RUNNING 排除和有效幂等引用排除测试。

  • [x] 添加超时 RUNNING/ACCEPTED 原子失败与重复恢复幂等测试。

  • [x] 实现清理 SQL、恢复 SQL 和启动调用,异常原因只使用固定脱敏文本。

  • [x] 运行生命周期、日志服务和启动恢复目标测试。

Task 4: 调度同步、ONCE Misfire 与并行统计

Files:

  • Modify: JobScheduleCoordinator.java, SysJobConfigMapper.java / XML
  • Modify: JobScheduler.java, JobOnceCompletionService.java
  • Modify: JobExecutionLifecycleService.java, SysJobLogMapper.java / XML
  • Modify: V1.0.49 migration
  • Test: coordinator、scheduler、once completion 和 lifecycle tests

  • [x] 添加同任务同步串行、版本变化重试和删除不复活测试。

  • [x] 添加 past ONCE + DO_NOTHING 直接完成测试。

  • [x] 添加 ALLOW 并行执行乱序完成不会覆盖较新统计测试。

  • [x] 用任务级锁、版本条件更新和完成顺序条件实现最小修复。

  • [x] 运行调度与生命周期目标测试。

Task 5: Flow、监控和前端契约

Files:

  • Modify: RemoteJobFlowExecutor.java / RemoteJobFlowExecutorTest.java
  • Modify: SysJobLogMapper.xml, JobMonitorSummaryVO.java, JobObservabilityManager.java
  • Modify: job-config.vue, job-log-list.vue and frontend tests

  • [x] 添加 Flow 5xx/解析失败恢复、4xx/业务失败不恢复测试。

  • [x] 添加 ACCEPTED 指标闭合测试并扩展前端摘要归一化。

  • [x] FLOW 列表使用 sys_job_invoke_mode + invokeMode,流程历史按钮只在路由可访问时显示。

  • [x] 运行 Flow Client、Job 监控和前端定向测试。

Task 6: 聚合验证与回填

  • 执行 Flyway placeholder、tenant_id、Mapper XML、直连 HTTP 和 git diff --check 静态门禁。
  • 运行 Job/Outbound/Flow Client 目标测试和 Admin/Flow 聚合构建。
  • 运行前端定向测试与生产构建。
  • 回填 spec/tasks/test-spec/execution-log 和父路线图;真实 Flyway、Redis、Quartz、RPC、登录态 UI、Flow E2E 标为用户侧验收。