4.3 KiB
4.3 KiB
v0.2 收尾修复(W8-A)
2026-09-28。基线 c67f6a9(Pi 上游、子会话、定时任务看板、IA-1、IA-2 已合入)。与 W8-B(全站文案第二轮)并行,本轮只改逻辑。
本轮修了什么
| # | 事项 | 落地 |
|---|---|---|
| 1 | 模块自建计时器并入定时任务注册表 | pi.token_refresh(上游登录刷新,维护组,10 分钟,入队 refreshPiTokens,幂等键按时间槽)与 auth.cleanup(登录会话清理,维护组,1 小时)改为 registerScheduledJob;模块里不再有 setInterval。测试 test/schedules/module-jobs.test.ts。docs/runbook/schedules.md 已登记表补两行 |
| 2 | 没有候选的待识别资源进待处理 | 迁移 0030 给 decision.kind 加 identity_unresolved(界面"待识别")。resolveObservation 在 no_match(含无法解析、候选为 0)和查询失败且自动复查已停时开事项,去重键与歧义类同为 identity:<资源ID>(类别随证据切换)。选项:手动指定 TMDB ID(requires=tmdb)、选本地作品(requires=mediaEntityId)、忽略;歧义类事项也追加前两项。POST /decisions/{id}/resolve 新增 identity {tmdb:{type,id} | mediaEntityId},走 assignReleaseIdentity 人工指定加锁。待处理页选项弹窗按 requires 出 TMDB 类型 + ID 输入或本地作品检索(复用 EntityPicker),未填完整时确认按钮禁用。身份页只读列表"已进待处理"按类别跳 ?kind=identity_ambiguous / identity_unresolved |
| 3 | 旧 settings.pi.provider / baseUrl / model / thinkingLevel / apiKeySecretRef |
DEPRECATED_SETTINGS_FIELDS:schema 保留(兼容已存 JSON),PATCH /settings 丢弃,设置分区不再归属;runAgent 只走上游,没有默认上游直接失败「未配置 Agent 上游」;pi.apiKey 写 secret 的分支删除;Agent 页演示开关改看默认上游 provider 是否 fake;上游列表空态不再提旧设置。e2e 夹具改为直接建一条 fake 上游设默认 |
| 4 | agent.await 不占 worker 槽 |
runAgent 驱动的会话里,子会话未落定时 agent.await 记下等待条件并关闭会话(该工具调用留在 JSONL 里未完成);drive 返回 suspended,runAgent 用 waitForFact("subagent-await-N") 每 2 秒查一次子会话落定 / 超时 / 父会话取消,再以 resumedAwaits 重开会话 resume。agent.await 是只读能力(replay=safe),恢复时重放一次直接拿到结果,模型不多一轮。单会话最多挂起 100 次。e11 断言 agent.await 的结束事件带 recovery:true、run_started 为 [false, true]。agent.spawn {await:true} 仍在进程内等(见遗留) |
| 5 | Agent 汇报里的下载链接 | agent-conversation.tsx 改链 /console/downloads/:id,不再经 /tasks/:id 404 探测 |
| 6 | 设置旧链接 | IA-2 已由 settings.tsx 的 clientLoader 把 ?tab= 转成 #分区[/节];本轮把 settingsPath() 改为直接生成 #分区[/节],冒烟的重定向表补 4 条 ?tab=,静态路由补 8 个分区 hash |
| 7 | 前端冒烟 | 独立库 + PORT=4392 WEB_ROOT=apps/web/build/client 单端口跑 deno task test:web:smoke:47/47 通过(跳过 4 条详情页,库里无数据)。冒烟脚本对只差 hash 的地址先跳 about:blank 再整页加载 |
另:executeResolution 对 identity_unresolved 同样跳过(由 sources-identity 在处理端点里直接执行)。
仍遗留
- pi 41 个 provider 未联网实测:只有 fake 与 OpenAI 兼容本地端点有自动化覆盖;8 种订阅登录只测了 fake OAuth 状态机。Codex
_randomBytes在 Deno 下的行为仍待 spike(docs/design/pi-providers.md)。 agent.spawn {await:true}仍在进程内轮询等待,占 worker 槽到超时;要挂起需要同样的关闭会话 + 重放,但 spawn 是 replay=never,重放会得到"结果未知",需另行设计。- 挂起期间父会话状态保持
running(避免被祖先会话的agent.await当成已落定);运行时长预算按每段 drive 计,不含挂起等待。 - 待识别事项:查询失败但仍在自动复查期内的资源不开事项(避免 TMDB 抖动刷屏),复查耗尽后才开。
- 身份页"待识别"详情抽屉的提示句仍写"选择候选或忽略",未识别类(无候选)读起来不准确,留给文案轮。
- 旧设置字段只是弃用未删除;真正删除需要一次迁移清理
settings.pi里的旧键。 - 原站视图仍是占位(IA-1 遗留)。