WebSocket cleanup export jobs 最小骨架

这页先把 export preview 后面的最小 async job 语义收起来。

当前先把 asyncJobHint → export job → job status 串起来,让 cleanup export 不只停在 preview 元信息。

当前最小 export job 语义

先把 job 建立、状态流转和边界说清楚。

POST /api/coach/token-cleanup-audit-export-jobs:创建最小 async export job
GET /api/coach/token-cleanup-audit-export-jobs:查看 queued / running / ready / expired jobs
POST /api/coach/token-cleanup-audit-export-tickets:对 ready job 签发最小 download ticket
action=mark-running / mark-ready / expire:当前先补最小 job 状态流转
requested_by / format / note:当前开始带最小操作者与导出格式语义
queue_name / delivery_mode / preview_expires_at:当前开始把 async hint 真正落到 job 记录里
download_path_hint:当前先给最小路径提示,不假装成正式签名下载链接

执行边界

这层已经有 job record,但仍不是正式导出任务系统。

这层是最小 async export job 骨架,不是正式队列系统、对象存储导出任务或报表中心。
先把 asyncJobHint 从“字段提示”推进成“有 job record 可看、有状态可切”的最小运行时。
后面如果继续推进,再补正式 worker、下载签名、任务回调和归档生命周期。