Files
Yaojia Wang 345cc73965 fix(txn+security): 仓储改 flush + 启动校验/兜底 + job.error 脱敏 + SSE 异常硬化
P0-1 SqlCredentialStore/save_draft 由自提交改 flush,端点/服务统一 commit
  (新增 CredentialStore.commit() 统一提交点;token 刷新落库显式提交);
  补多凭据一请求中途失败整体回滚集成测试。
P0-2 启动校验 _fernet(enc_key) 快速失败 + catch-all Exception → ErrorEnvelope;
  credential_enc_key 改 SecretStr。
P0-3 run_job 异常分类:AppError 存 code+message,其余存通用文案不泄 str(exc)。
P0-4 评审/正文 SSE 失败先发 error 事件,尾部 commit 包 try/except。
P1-4 max_version 加 FOR UPDATE 行锁消除 TOCTOU。
P1-5 scan_overdue 谓词下推 + 批量 UPDATE RETURNING。
P1-10 移除 OAuth user_code 日志。
P2 provider_deps 改调网关 build_adapter;accept_service Committable Protocol;
  CORS 白名单收窄;request_id 安全字符集白名单;stdlib 日志接管;读端点 404 校验;
  httpx timeout;测试用合法 Fernet key;类型化响应模型(JobResponse/DimensionEntry/
  ReviewConflictView/selling_points)+路由 ErrorEnvelope responses(供 codegen)。
2026-06-21 19:32:24 +02:00

28 lines
859 B
Python
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.

"""长任务轮询响应 schemaC3 / ARCH §7.4)。
snake_case前端经 OpenAPI→TS 客户端消费——改字段须 `pnpm gen:api` 重生成。
此前 `GET /jobs/{id}` 返回裸 `dict`TS 端拿到弱类型;改为具体 Pydantic 模型提升类型。
"""
from __future__ import annotations
import uuid
from typing import Any
from pydantic import BaseModel
class JobResponse(BaseModel):
"""长任务状态(`GET /jobs/{id}`):状态 + 进度 + 结果/错误。
`result` 是任务成功后的非密摘要(如 `{"connected": true, ...}``error` 是失败后的
面向用户文案(已脱敏,绝不含 `str(exc)`,见 `services/job_runner._classify_job_error`)。
"""
id: uuid.UUID
kind: str
status: str
progress: int = 0
result: dict[str, Any] | None = None
error: str | None = None