2 Commits

Author SHA1 Message Date
wangdl
cdcf056ba5 fix: B1 — lockJob 原子递增 attemptCount + Engine 重试解锁逻辑
Some checks failed
Deploy API Server / build-and-unit (push) Failing after 28s
Deploy API Server / current-integration (push) Has been skipped
Deploy API Server / backward-compat (push) Has been skipped
Deploy API Server / deploy (push) Has been skipped
- lockJob updateMany 新增 attemptCount: { increment: 1 }
- Engine retryable 错误: unlockForRetry() 重置为 queued 后再抛给 BullMQ
- Engine permanent 错误: 直接 markFailed + return(不抛错,BullMQ 不重试)
- unlockForRetry: 重置 lifecycleStatus→queued + 清除 lockedBy/lockedAt/lockUntil
- 更新测试: lockJob 验证 attemptCount 递增; schema validation 验证不抛错

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-20 18:42:19 +08:00
wangdl
d82ae8ba71 feat: M-AI-03 统一 AiJob Worker Execution Engine
Some checks failed
Deploy API Server / build-and-unit (push) Failing after 29s
Deploy API Server / current-integration (push) Has been skipped
Deploy API Server / backward-compat (push) Has been skipped
Deploy API Server / deploy (push) Has been skipped
- AiJobExecutionEngineImpl: 完整 5 阶段管线
  PREPARE: read Job → terminal check → cancel check → Registry.get → CAS lockJob
  RESOLVE: load Snapshot → schemaVersion check → AbortController timeout
  EXECUTE: AiGatewayService.generate() (不直接导入 Provider SDK)
  PROJECT: write validatedOutput + outputHash (#292 替换为 Projector)
  COMPLETE: usageLog → markSucceeded
- 错误分类: classifyError() — 7 种错误码, retryable/permanent 分流
  provider_rate_limited/timeout/unavailable → retryable → 抛给 BullMQ
  schema/business/reference validation → permanent → markFailed
  cancelled → markCancelled (3 个检查点: 执行前/Provider前/Projector前)
- Usage logging: 每次 Provider 调用写 AiUsageLog (jobId/attemptNo/credentialMode/token)
- AiJobModule: 使用 AI_JOB_EXECUTION_ENGINE token 注册,替换 #288 的 no-op
- 10 个单元测试: 全链路成功/终态跳过/取消(2)/错误分类(3)/锁冲突/Schema不兼容/UsageLog

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-20 18:30:02 +08:00