Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
142 KiB
JSON
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.
{"repo": "alchemist-x/predict-raven", "files": {"docs/agent-handoff.md": {"e41b7f12dad187fb7345a50804516f675c94415c": {"t": 1786068555.443328, "n": 97518, "h": "781de97485bf768c", "c": "# Agent Handoff — 当前状态 + 待办\n\n> **每次接手项目都先看这份。** 这是 predict-raven 的\"会话间共享笔记本\"——上一个 agent 干到哪、当前重点是什么、下一步该做啥,都记在这里。\n>\n> **更新时机**:\n> - 每次会话 wrap-up 时(agent 自己更新)\n> - 用户说\"记一下\" / \"save this\" / \"update handoff\" 时(agent 立刻更新)\n> - 完成 P0 / P1 任务后(marking done + 加新条目)\n>\n> **更新原则**:保持精简 + actionable,**不是流水账**。具体细节去看 git log / `docs/internal/review/`。\n>\n> 英文版:[`docs/en/agent-handoff.md`](en/agent-handoff.md)\n>\n> 最后更新:2026-08-05 by Claude(**模拟盘 8/5 数据刷新 + 回合盈亏计入入场费**,分支 `claude/raven-agent-yield-webpage-02513c`,**PR #98**,web + VM forecast-api 均已部署验收)。\n> ① **业绩剧变(截至 2026-08-05 02:33Z,第 101 周期,33 天)**:equity **$7,974.23(−20.3%)**,自 7/14 峰值 $10,799 最大回撤 −26.2%。已平 17 回合 **5 胜 12 负**——7/26–8/4 十一个新回合里十次止损,几乎全是以伊停火题材:\"以伊停火延续至 7/31\"同一市场**三进三止损**(−$601)、美伊停火二进二止损(−$400)、哈马斯止损后 24h 重进(现持仓中)——7/24 提的\"止损后冷却期\"未落地,缺口以更大规模重演。**exit α 由 +$1,077 转 −$134**(NVDA 0.22 买 YES 止损后市场以 YES 结算 α −$1,838;哈马斯 −$869);**Brier n=12、skill −0.53**,样本首次够量,初步结论 = agent 独立判断落后市场(失分集中在停火系列方向判断反)。饱和持有拦截累计 8 次;费用累计 $113.05(NVDA/Maduro 等新市场带真实费率,$45 入场费级别)。满仓 10/10,5 仓仍共享伊朗驱动。\n> ② **forecast-api 真 bug 修复(费用非零后暴露)**:`pairClosedTrades` 买入腿漏计 `feeUsd`(卖出腿有扣)→ 已平仓表合计与账面已实现差 $45(= NVDA 入场费)。现入场费计入回合 costUsd 与 pnlUsd(结算路径同步),`entryPrice` 保持真实成交价;fee-market 回归测试新增。**部署后已验证:闭仓表合计 −2114.36 vs 账面 −2114.37(1¢ 取整)对账一致**。\n> ③ **页面更新**:烘焙快照全量刷新到 8/5;11 个新市场中文标签 + 交易注;编者注/结论全部重写为 2026-08-05 复盘(费用文案改数据驱动,不再硬编码 $0;exit α 结论按正负动态);BrierTable 行 key 去重(同一市场两行结算导致 React 重复 key 报错)。**页面上的三条建议(冷却期 / 题材敞口上限 / 止损与低价单适配)均为风控参数改动,需用户拍板后才实施。**\n> ④ **部署**:web 经 `gh workflow run wc-results.yml`;VM clean-untar(备份 `~/predict-raven.pre-fee-fix.bak`)+ nohup `compose build raven` + `up -d --no-deps forecast-api`(paper-agent 等其余容器零接触)。冒烟:healthz 200 / 无 token 401×2 / NVDA cost 495 pnl −287.55。生产 E2E:带码解锁 → 实时徽标 + $7,974.23 + NVDA −287.55(旧 −242.55 已消失)。**注意:镜像 raven-suite 已更新到 e36a4bb,raven/raven-delta/paper-agent 仍跑旧镜像**(#98 未动它们的代码,行为无差;下次全量 `up -d` 会切换)。VM 磁盘 **81%**(builder cache 清理仍待用户确认,见 7/20 条目)。\n> ⑤ **新发现 P2**:反思报告 calibration rows 里\"以伊停火延续至 7/31\"出现两行**相反结果**(7/29 happened=true vs 7/30 false)——疑似按 position episode 映射结算时的数据 quirk,待查 `services/paper-agent` 反思管线;NATO exit-α 行 priceNow/alpha 为 null(市场已下架)被渲染成 ±$0.00,观感待改。英文版 handoff 此条待同步翻译。\n>\n> 上次更新:2026-07-24 by Claude(**/live-predict-raven 实时化:每次评估周期后自动更新**,分支 `feat/live-paper-snapshot`,**PR #93**)。\n> ① **背景**:用户要\"更新最新收益 + GCloud 侧做到价格每次 review 后更新\"。方案 = forecast-api(与 paper-agent 共享 runtime-artifacts 卷)加只读 `GET /paper/snapshot`(主 token **或** invite code `raven-labs` 双通道鉴权,60s 内存缓存);apps/web 页面改为请求时服务端拉 VM(5s 超时 no-store),失败回退烘焙快照并在页顶显式标注数据源。\n> ② **端点聚合**(`services/forecast-api/src/paper-snapshot.ts`):portfolio.json(现金/已实现/持仓+lastEval mark,equity=cash+lastEval 标记 = 恰好\"截至上次 review\")+ ledger.jsonl(成交/周期/评估计数、saturatedHold 计数、**顺序重放配对已平仓回合**——支持同 positionId 再进场(MOU 双回合)、剔除 7/3 锁竞争丢单,产线数据复算 6 回合与手工分析分毫不差)+ 每日反思(权益曲线/退出 α/Brier/hybrid 透传)。web 侧 `live.ts` 解析校验 + 中文标签装饰(未知新市场回退英文);图表 Y 域改数据驱动 + 刻度防碰撞。\n> ③ **最新业绩(截至 2026-07-24 10:23Z,第 66 周期,21 天)**:equity **$10,406(+4.1%)**(7/23 反思按实时盘口 $10,440);已平 6 回合 4 胜 2 负不变;浮盈 +$585;**Brier n=4、skill −0.16**(新增中菲冲突:agent 8.8% vs 市场 13.5%、事件发生——从 −7.32 收敛但仍为负);exit α +$1,077(NATO 行反事实翻正 +12.66);饱和率 200/351(57%);**saturated-hold 已实拦 1 次**(7/24 10:02 霍尔木兹 7/31:bid 0.992、netEdge −0.2pp,老逻辑必卖,新逻辑 `saturatedHold:true` 持有——修复上线 4 天首次生效)。\n> ④ **验收**:forecast-api 40/40 + web 27/27 vitest、web build 332 页绿;**真数据本地 E2E**(scp 产线账本→本地 :8788 起 forecast-api→web dev 指向它→页面\"实时数据\"徽标 + 全部数字与 VM 一致);桌面/移动截图 0 pageerror。英文版 handoff 此条待同步翻译。\n> ⑤ **对抗评审 + 部署完成(2026-07-25/26)**:29-agent 评审工作流 25 条确认发现全部修复(关键 3 条 high:**结算平仓不入已平仓表**——pairClosedTrades 现消费 ledger `resolution` 事件,部分卖出+剩余结算合并为单一回合,7/31 结算潮前堵上;硬编码聚合与实时数字并排矛盾——标题/tile 全改派生、编者注加日期前缀;降级载荷渲染 NaN——解析器严格化时间戳/evalCycles/costUsd,坏载荷回退烘焙)。次级:曲线全日期键(跨年防覆盖)、`ARTIFACT_STORAGE_ROOT` 路径约定对齐 + 空账本 503、15s 成功 memo + 30s 失败退避(VM 宕机不再每次视图卡 5s)、**明文 HTTP 警告**(`LIVE_PREDICT_RAVEN_UPSTREAM_TOKEN` 槽位绝不可放真 API token,TLS 上 VM 前 invite code 是唯一可过线凭证——⚠️ P2:给 :8787 配 Caddy TLS)。**部署**:merge `331cd51`;VM clean-untar(备份 `~/predict-raven.pre-live-snapshot.bak`)+ nohup 重建 raven-suite + `up -d --no-deps forecast-api`(其余容器零接触,paper-agent 仍在 saturated-hold 镜像);冒烟 healthz 200 / v1 无 token 401 / snapshot 三态鉴权正确;web 经 wc-results 发布。**生产 E2E**:带码解锁 → \"实时数据\"徽标 + equity $10,420.69 + 数据截至 07-25 10:23Z 与 VM 完全一致。**上线即验证价值:饱和持有拦截已累计 4 次**(7/24 首拦后 3 天又拦 3 次——霍尔木兹 7/31 等仓在 0.99+ 被系统性护住等结算)。\n> ⑥ **入场饥饿诊断 + 调参(2026-07-25 用户拍板,纯 VM env 无 PR)**:7/16 后 9 天零新开仓,根因 = **评估预算被在持仓位精确吃光**——`PAPER_MAX_EVALS_PER_CYCLE=6` 且恰好 6 仓,run-cycle 先评持仓再评候选([:366](../services/paper-agent/src/run-cycle.ts) 预算尽即静默 break,无账本事件),最后一次 watchlist_eval = 7/16 10:22(开出第 6 仓的那次);market_scan 每周期照跑纯属白扫。次因:maxPerEvent=1 + 4 仓共享伊朗题材,候选大量被事件去重预筛。**处置**:`deploy/raven/.env` 设 `PAPER_MAX_EVALS_PER_CYCLE=16`(备份 `.env.pre-evalcap-*.bak`),`up -d --no-deps paper-agent` 重启(顺带消掉镜像漂移——7/20 后 paper-agent 零代码变更,行为不变已核对);容器内 env=16、账本无损、调度器重新武装均验证。生效 = 7/25 18:00Z 周期起每周期 6 仓复审 + 最多 10 个候选评估;成本上限 +30 evals/天 ≈ +$27/天 API 等值(订阅 $0 现金)。**待观察**:18:00Z 后账本应重新出现 watchlist_eval;仓位上限 PAPER_MAX_POSITIONS 未设(默认 10),还有 4 个 $500 仓位额度。英文版 handoff 此条待同步翻译。\n> ⑦ **用户确认目标 = 最多 10 仓 + 参数上页(2026-07-25,PR #96)**:`PAPER_MAX_POSITIONS=10` 显式写入 VM .env(与代码默认一致,纯自文档化)并重启 paper-agent(16:47Z,18:00Z 周期前安全窗口);`/paper/snapshot` 新增 `config` 块——forecast-api 与 paper-agent 共享 `deploy/raven/.env`(compose 全服务 env_file 同源),按 `services/paper-agent/src/config.ts` 同款默认值镜像读取(⚠️ 新增 PAPER_* 参数时两处同步);页面新增\"运行参数\"区(15 个参数 + env 键,实时徽标下注明\"实时读取自 VM 环境配置\",旧 API 载荷缺 config 时逐字段回退烘焙常量)。VM forecast-api 已重建部署 + 生产验证(参数区实时显示 cap=16 / maxPositions=10)。英文版 handoff 此条待同步翻译。\n>\n> 上次更新:2026-07-20 by Claude(**模拟盘复盘页 `/live-predict-raven` 上线 forecasting-agent.com**,分支 `feat/live-predict-raven-report`)。\n> ① **背景**:用户先要模拟盘收益分析(SSH 拉 VM paper-agent 账本全量复盘),再要求发布成网页远程 review:挂 forecasting-agent.com`/live-predict-raven`、输入 `raven-labs` 解锁。\n> ② **业绩快照(截至 2026-07-20 02:20Z,第 53 周期)**:equity **$10,433.57(+4.3%,17 天)**= realized −$178.82 + 浮盈 +$611.71;32 笔成交 / 12 次开仓 / 已平 6 回合 **4 胜 2 负(66.7%)**,但平均亏损 $230 vs 平均盈利 $70(profit factor 0.61);两笔亏损 = 同一市场(伊朗 MOU 7/17)止损后 4 小时原方向重进再止损(合计 −$460);exit α +$990(退出决策整体加分);Brier skill **−7.32 但 n=3** 不可下结论;6 仓全地缘 NO、4 仓共享伊朗驱动;峰值 $10,799(7/14)、最大回撤 −3.8%。**建议(未做)**:止损后同市场冷却期 > 题材级相关敞口上限 > 饱和评估 edge 不按名义值展示。\n> ③ **页面实现(apps/web 顶层路由,vercel.json catch-all 已覆盖零路由改动)**:服务端邀请码门(`lib/live-predict-raven/access.ts`,sha256+timingSafeEqual,httpOnly cookie 30 天,`LIVE_PREDICT_RAVEN_CODE` env 可换码、默认 raven-labs 与 /engine 门同码)+ `POST /api/live-predict-raven/unlock`;报告 = **烘焙快照** `lib/live-predict-raven/snapshot.ts` + 纯函数 `stats.ts`(20 个 vitest);SVG 权益曲线服务端渲染零客户端 JS;`robots noindex`;中文为主(走 `/invite` 顶层工具页先例,未进 world-cup 三语系统)。**刷新数据 = 重拉 VM 账本改 snapshot.ts 重部署,非实时**——想升级成实时需 paper-agent 暴露 HTTP 只读端点再走 vercel 代理(未做)。\n> ④ **验收**:`pnpm --filter @autopoly/web build` 绿(332 页);桌面+移动整页截图 0 pageerror;本地门流程实测(错码→提示、`raven-labs`→cookie→报告、刷新保持解锁)。部署走 merge 后 `gh workflow run wc-results.yml --ref main`。英文版 handoff 此条待同步翻译。\n> **v2 补充(同日,饱和钳位复盘 + saturated-hold 修复,分支 `feat/saturated-hold`)**:\n> ⑤ **饱和影响全量核查(6-agent 工作流,结论全部过对抗验证)**:`saturatedAt` 在决策层零特殊处理——钳位 99% 在入场/退出/限价定价/Brier 全按真 99% 用;**实锤钳位强卖**:mojtaba 7/15 退出评估 P 钳 0.99 vs bid 0.994 → netEdge −0.4pp 卖出,翻转点 P≥0.994 钳位下不可达(α −$3.21);另两笔小负 α 是真实估计差一线,非钳位。Brier 用钳位值打分(答对的高置信题罚 25×,mojtaba 行输市场纯因钳位,但总分 −7.32 主因仍是 MOU)。\"饱和即止\"只省单 run 内轮次,跨周期无 skip——钳死 dossier 每 8h 照烧一轮(~$0.89)。**VPS 结论**:搜索+推理全在 Anthropic 远端,VM 每周期仅 ~49 CPU 秒(0.17% 单核)、容器 373MiB/2GiB、19 天零 OOM;唯一实际风险=磁盘 77%(docker build cache 10.13G 可回收,~3 周 runway;`docker builder prune -af` 即解,未执行待确认)。\n> ⑥ **saturated-hold 修复(用户指令\"允许持有到期\")**:`policy.applySaturatedHold`——负 edge 退出信号来自\"钳位绑在持仓有利侧\"(YES+ceil / NO+floor)且非污染 → 改判持有到结算;例外:bid−fee ≥ 0.999 满值捕获仍卖;threshold 可达性守卫(真 P=1 都过不了 exitEdgePp 时不 veto,防 PAPER_EXIT_EDGE_PP>0 时挡住正确退出)。**14-agent 对抗评审后补修**:veto 时撤销该仓遗留挂单(否则 10-min tick/TTL 会把仓位照卖,账本记 `limit_cancelled/saturated_hold`);kill switch `PAPER_SATURATED_HOLD` 收 0/false/off/no(默认开);账本 evaluation 事件 + lastEval 新增 `saturatedHold` 字段 + 反思报告 engineFlags.saturatedHolds 计数(veto 生效可直接观测)。止损不受影响(model-free 优先)。**已知接受的 trade-off**:无 mark ratchet——veto 后若行情反转,模型不解除饱和的话要跌到入场价×0.65 才有模型无关退出(用户拍板的持有到期语义;纸面盘可承受,真钱化前需 trailing stop);费率>0 的书满值逃生口实际不可达(就是持有到期,符合语义)。测试 956/956 绿。**已部署 VM(PR #91 merge `73d612f`,2026-07-20 11:00Z 容器重建)**:clean-untar(备份 `~/predict-raven.pre-saturated-hold.bak`)+ 回拷 .env/override,`compose build raven` + `up -d --no-deps paper-agent`(其余容器未动);容器内冒烟测试重放 mojtaba 场景 `exit:negative_edge → hold, saturatedHold=true, enabled=true`,账本对账无损($6,821.18 / −$178.82 / 6 仓)。18:00Z 起的周期跑新逻辑;观察点=账本出现 `saturatedHold:true` 与 `limit_cancelled/saturated_hold`、反思报告\"饱和持有\"计数。⚠️ build 期间 gcloud SSH 会因静默被远端掐线——长构建用 `nohup ... > /tmp/raven-build.log &` 脱离会话再轮询。英文版 handoff 此条待同步翻译。\n>\n> 上次更新:2026-07-17 by Claude(**engine/delta 访问模型改为邀请码门**,纯 VM `.env` 改动无 PR,已部署+验收)。\n> ① **动机**:用户要\"取消 access-token,改成 invite code `raven-labs`\"。\n> ② **改动(VM `deploy/raven/.env`,备份 `deploy/raven/.env.pre-invite-20260717-*.bak`)**:注释掉 `RAVEN_ACCESS_TOKEN`(engine 站点门 fail-open → **/engine 现公开可浏览**,往期 dossier 免码可读);`FORECAST_DAILY_QUOTA` 20→**0**(→ engine 每次 run 都需邀请码,走既有 quota→invite 机制);`DELTA_ACCESS_TOKEN` 改为字面值 `raven-labs`(delta 无 invite 系统,入口码即 raven-labs)。`FORECAST_INVITE_CODE=raven-labs` 未动(invite 表里 `raven-labs` = ok·∞·无过期);`FORECAST_API_TOKEN` 独立未动(:8787 API bearer 门不受影响)。\n> ③ **重启**:`docker compose up -d --no-deps raven raven-delta forecast-api`(无 --build,纯 env reload,镜像不变)。\n> ④ **验收**:/engine 无 token 200;/delta 无码 401、`?token=raven-labs`→307+cookie→200;/engine POST run 无邀请码→429 `quota_exceeded`(未真跑,没花钱)。⚠️ **回滚**:恢复 .env.bak 三个键(RAVEN_ACCESS_TOKEN 取消注释、QUOTA 回 20、DELTA_ACCESS_TOKEN 回原值)+ 重启三容器。⚠️ 邀请码 `raven-labs` 本就是 `.env.example` 里的公开种子码,非机密——如需真正限流请用 `invite-cli create` 建带次数/过期的专属码并吊销 seed。\n>\n> 上次更新:2026-07-17 by Claude(**/engine 与 /delta 挂载到 forecasting-agent.com 路径**,分支 `feat/mount-engine-delta-paths`,**PR #87**,已全链路部署+验收)。\n> ① **改动**:apps/raven `basePath:'/engine'`、apps/raven-delta `basePath:'/delta'`(各自 `lib/base-path.ts` 单一事实源,手写 fetch/img 全部前缀化);根 vercel.json 在 catch-all 前加 4 条代理路由(`/engine/*`→VM:80、`/delta/*`→VM:3300;源是明文 http,后续可升级 Caddy origin TLS)。**顺手修了两个 token 门存量漏洞**:Next 16 下 matcher 不匹配裸根路径(无 token 直接放行首页——raven-delta 的 proxy.ts 是 raven 的旧拷贝,两处一并修齐);cookie path 收窄到各自 basePath(与主站同域后不再全站互发)。\n> ② **部署**:VM clean-untar(备份 `~/predict-raven.pre-mount-20260717-1349.bak`)+ 回拷 .env/override,`docker compose build raven raven-delta` + `up -d --no-deps`。**镜像漂移:raven 与 raven-delta 现均在 merged main(f5dfbe2)**,仍旧镜像的只剩 forecast-api。主站经 `gh workflow run wc-results.yml --ref main` 部署成功。\n> ③ **验收**:forecasting-agent.com/engine 与 /delta token 流(?token= → 307+Set-Cookie → 200)全通;/delta/api/health 公开 200;/world-cup/groups 200 无恙;桌面+移动截图自评通过,0 console error。⚠️ **旧直连 URL 已迁移**:`34.85.97.32/` → `/engine`、`:3300/` → `:3300/delta`(旧书签会 404)。\n> ④ **已知/待办**:raven-delta 的 vitest 存量全挂(vitest 3.2.4 用 CJS require 加载 ESM-only 的 vite 7,`ERR_REQUIRE_ESM`,与本次无关——建议升 vitest 或 pin vite 6);delta-ws :8791 仍是直连端口不走域名(Vercel 路由不代理 WebSocket);同 VM 上另有本人的 video-digest 服务(8931/443 Caddy `read.issuewys.com`),互不相干。\n>\n> 上次更新:2026-07-12 by Claude(**淘汰赛 32 强预测效果上线预测效果页**,分支 `feat/wc-knockout-performance`,**PR #86**)。\n> ① **数据**:`pnpm tsx scripts/world-cup/fifa8-results.ts` **15/15 R32 全部结算**(90 分钟口径,5 场平局);`fifa8-performance.ts` 重算 9 模型榜——发布的多重校准融合 **bestPick 11/15(73%)· Mock PNL +11.7% · Brier skill +3.5% · ECE 14.2%**;榜首 Dixon-Coles 贝叶斯(BSS +3.8%),垫底 PRODEGY(−20.7%)。市场盲测不变:价格只做事后基准。\n> ② **Web**:`/world-cup/performance` 新增「小组赛 / 淘汰赛 · 32 强」stage tab(`perf-stage-tabs.tsx` 客户端切换两个 SSG panel;`PerformanceDetail` 改接收数据 prop——淘汰赛 tab 与小组赛同版式同指标);新 reader `apps/web/lib/world-cup/fifa8-performance.ts`(取 headline=multicalibrated);i18n 新 key `perfTabGroups/perfTabKnockout/perfKnockoutScope`(en+zh-CN 手写,zh-TW 重新生成)。build 绿;桌面+移动 × en/zh-CN/zh-TW 验收,0 console error。\n> ③ **部署**:merge 后手动 `gh workflow run wc-results.yml --ref main`(forecasting-agent.com 唯一发布通道)。**待办**:R16 起的淘汰赛预测尚未生成(fifa8 管线只覆盖 R32)——生成后预测效果页加第三个 tab 或并入淘汰赛 tab;`wc-results.yml` 的 cron 仍停用(小组赛冻结时关的),淘汰赛结果更新目前靠手动跑 fifa8-results + 重部署。\n>\n> 上次更新:2026-07-07 by Claude(**paper agent 业绩核查 + 报告质量三维评审与修复**,分支 `claude/heuristic-clarke-1a459e`,**PR #81**,已部署 VM paper-agent 容器)。\n> ① **业绩(截至 2026-07-06 UTC)**:$10k 模拟盘跑 3 天,权益 **$10,321.69(+3.22%)** = realized +$200.20(3 笔 negative_edge 退出全对账)+ 浮盈 +$121.49(5 仓);**Brier / skill score 尚不可计(n=0,最早 7/10-7/15 才有市场结算)**。\n> ② **123-agent 对抗评审**(14 份 engine 报告 + 3 份反思 + search trace + 生成代码;104 发现 → 51 确认):三大 P0 = **市场盲测失效**(engine 主动搜并锚定它要对赌的 Polymarket 价格,4/14 先验直接引市价,evidence 轮里也搜 `Polymarket odds`——edge 部分自指);**P=99%/1% 是 bayes.ts PROB_FLOOR/CEIL 钳位**(5/14 dossier 打死在 floor 且伪装 \"converged\",floor 后每轮照跑白烧 $4/轮);**结论埋在 700 词框架墙后**。次级:status-quo 证据跨轮全权重重复 ~9 次、credibility 标签收集不使用、未验证引用可当最大 mover、hybrid 指标混池虚报(+14.7pp → 配对真值 +0.6pp)、`|` 未转义断表格。完整计划归档见 PR #81 描述。\n> ③ **修复全部落地(engine + paper-agent,924 测试绿 / 18 包 typecheck 绿)**:`FORECAST_MARKET_BLIND=1` 模式(三处 prompt 禁令 + 域名黑名单归零权重 + 先验重审 + state.json 污染标记 + paper-agent 对污染评估不开仓/不 negative_edge 退出);`saturated` 新状态全链路透传(报告头注明\"引擎下限非精确值\",floor 即止省 token);跨轮 cluster decay + `status-quo-continuation` 规范 id;credibility 限幅 |llr|(low≤0.25)+ 未验证源不得超该轮最大 verified 贡献 + 连续 2 轮单边同向权重减半;**反思报告新增 Brier skill score = 1 − Brier_agent/Brier_market**(基线 = 同时刻 bestBid / watchlist 中价,覆盖所有已评估结算市场,watchlist_eval 开始记 `marketProbYes`)——**用户最关心的\"是否跑赢市场\"以后每日自动回答**;报告改 verdict-first + 引用可点击 + zh 模板,paper-agent dossier 默认中文(`PAPER_FORECAST_LANGUAGE` 可覆盖)。\n> ④ **部署**:clean-untar(备份 `~/predict-raven.pre-followups.bak`)+ 回拷 .env/override,`docker compose build raven` 后 `up -d --no-deps paper-agent`——**PR #81 已合 main(CI 绿后 merge),VM paper-agent 跑的就是合并后内容**;镜像漂移现状:raven 在 7-06 main;仍旧镜像的只剩 forecast-api。补了三个收尾项后再部署过一次:round prompt 注入 settlement source + 一手源优先规则、非英语地区问题至少一次本地语言搜索、evaluator FORECAST_MIN_ROUNDS 1→2(防单轮对冲净零被误判 converged,只有新 dossier 多花 1 轮)。\n> **v2 补充(2026-07-07 02:00-02:50Z,首两轮新代码运行评估 + PR #82)**:18:00Z/02:00Z 两轮验证新机制全部生效(`saturated` 状态替代假 converged、⚠饱和 进反思报告、`marketBlind.enabled=true` 且 blockedCount=0 = prompt 禁令足够、`marketProbYes` 开始记录、18:21Z 首份自动中文反思正常)。**暴露两个生产问题已修(PR #82,merge `0fa944b`,已部署)**:① Gamma 把在持市场 slug 原地改名(`putin-out-before-2027`→`-346`,conditionId 不变)→ 持仓评估/结算失联;修 `fetchMarket(slug, conditionId?)` 兜底 + 周期内 slug 自愈(ledger 记 `slug_renamed`);部署后 12 分钟 tick 零报错验证通过。② 新 prompt 下 2/13 次评估 \"no JSON object\" 中止 + 1 次 360s 超时(旧代码 30+ 次零错)→ 失败原始输出落盘 dossier `invalid-round-N.txt`(**下次复发先看这个**)+ paper evaluator `FORECAST_AGENT_TIMEOUT_MS=600000`;此类失败均 fail-safe(当轮 hold、下轮自动续跑,02:14Z 已实证)。当前 6 仓(02:25Z 新开乌克兰收复克里米亚 NO $500)。**镜像漂移:paper-agent 已在 merged main;仍旧镜像只剩 forecast-api**。\n> ⑤ **未修(评审确认但留待后续)**:3×/day 对长期限问题的重评节奏未分层(saturated 即止已消掉 floor 后白烧,但调度策略本身没动);\"✓ in search trace\" 底层仍是 URL 成员检查(展示层已只标异常,内容级核验未做);agentHolisticProb 与引擎数字分歧未渲染警告;exit alpha 基线每日重标(已加解释未冻结);limit fill-rate 按事件计数 >100%(应按 distinct limitId)。存量英文 dossier 续跑会中英混排(一次性过渡);首批市场结算后(Khamenei 7/15、Hormuz 7/31)看首个真实 skill score。英文版 handoff 此条待同步翻译。\n>\n> 上次更新:2026-07-05 by Claude(**Raven Delta 独立站点第一版**,分支 `claude/dreamy-ptolemy-8a4853`;重做了同日 Codex 的 stock-news demo——用户明确产品形态:不放 world-cup 站,做 forecasting engine 风格的**独立站点** + 维护股票池 + 真 agent 分析 + 0-5 只受影响股票 + 邮件/WS 推送)。\n> ① **旧 demo 处置**:分支先 rebase 到最新 main(落后 134 commit,7 文件冲突已解,navForecasts/navBracket/LegalFooter 跟随 main 删除不恢复);对旧 demo 跑了 7 维多代理评审(102 原始发现 → 40 canonical → 逐条 2 名怀疑者对抗验证:14 confirmed / 24 contested),可迁移的修复全部带进新实现;apps/web 里 /stock-news 页面/API/组件/58 个 sni* i18n key 全部移除(typecheck + 17 测试仍绿)。\n> ② **新站点 `apps/raven-delta`**(端口 3300,`pnpm delta:dev`;视觉 = apps/raven 同款 token:暖棕 #15120c + 橙 #ee7130 + Newsreader/Plex Mono;en/zh 切换):**zod 机器契约**(`lib/analyzer/schema.ts`:attention gate(worthAttention+0-100 分+理由+催化类型+可信度注记)→ marketReadout → **impactedStocks 0-5**(方向/幅度/**预期波动区间**/置信度/推理链/证据/操作/风险)→ tradingPlan → limitations,prompt 只引导思考、schema 强制正确、LLM 输出违约自动带 zod 错误重试一轮再降级);**维护股票池** `config/stock-universe.json`(20 只种子含中文别名,运营直接编辑,池外股票 inUniverse=false 显式标注、served-side 覆写不信模型);**provider 链** deepseek→claude-cli→rules(降级必带用户可见原因,规则引擎修了旧 demo 的 CJK 关键词碰撞/generic-alias 假直接命中/零信号假 verdict 等);**推送层**带全部安全修复(出站超时、subject CRLF 消毒、回执不泄内部细节、真实送达数、**匿名调用者只能发 DELTA_EMAIL_ALLOWLIST 白名单**);API = `POST /api/analyze`(控制台)/ `POST /api/ingest`(**token 门禁机器接缝,未来 Twitter/X 轮询器只需 POST 这里**,见 `lib/news-sources/types.ts`)/ `GET /api/runs`(归档在 `runtime-artifacts/raven-delta/runs/`)/ `GET /api/health`。\n> ③ **WS hub 重写** `scripts/delta-ws/`(`pnpm delta:ws`,端口 DELTA_WS_PORT=8791):真 RFC 6455 帧解析(跨 TCP 分片+掩码)、完整关闭握手、30s 心跳踢线、`?topic=` 订阅过滤、可选 DELTA_WS_TOKEN 鉴权、去 CORS 通配、背压/100 客户端上限;14 帧编解码测试 + 16 项实时检查过。\n> ④ 验证:根 `pnpm test` **880/880**(新增 delta 42 个)、两 app typecheck/build 绿、桌面/移动截图 0 pageerror(`runtime-artifacts/screenshots/20260705-raven-delta/`)、浏览器→API→规则引擎→hub→浏览器 WS 全链路实测(en+zh 各一轮)。env 见 `.env.example` 新增 DELTA_* 段。\n> **待办**:P1 = 配 LLM key 才有真 agent 分析(`DEEPSEEK_API_KEY` 或 VM 同款 `claude setup-token`;本机 claude CLI 无头调用 401,已实测降级链路正常);P2 = Twitter/X 轮询 adapter(对着 /api/ingest 写即可);P2 = 部署形态未做(建议并入 deploy/raven compose);P2 = 邮件真实发送未实测(无 RESEND key)。本轮没有运行 forecast:live,没有加载钱包,没有下单。英文版 handoff 已同步。\n> **v3 补充(同日,已合 main + 上线东京 VM)**:PR #78 merge commit `64d6610`,main CI 绿。**部署**:镜像 raven-suite 重建(Dockerfile 增加 delta build),`docker compose up -d --no-deps raven-delta delta-ws` 只起两个新容器——**raven/forecast-api/paper-agent 仍跑旧镜像未动**(⚠️ 下次任何人全量 `compose up -d` 会把三者切到当前 main,先自行验证);防火墙 `allow-raven-delta`(tcp:3300+8791)+ 实例标签。**入口 http://34.85.97.32:3300**(整站 token 门=`proxy.ts`,`?token=<RAVEN_ACCESS_TOKEN 同值>` 一次授权;/api/health 公开);WS hub 公网 8791(订阅开放、/broadcast 需 DELTA_WS_TOKEN,值在 VM .env)。**线上引擎 = claude-cli**(DELTA_PROVIDER=claude,带 WebSearch)。公网验收全过:401 门/health/未授权 API+broadcast 401;**真 Claude 分析实测**——喂了一条仿造的\"英伟达创纪录财报\",引擎联网识破为 2026-05-20 真实财报的旧闻翻炒:worthAttention=false(12/100)、firstSeenUtc 定位到 5-20 20:30Z、受影响股票 0 只(时效核实功能实锤);WS 推送跨公网落到本地订阅者。**部署铁律再确认**:clean-untar(旧树备份 `~/predict-raven.pre-raven-delta.bak`)+ 回拷 .env/override。VM .env 新增 7 个 DELTA_ 键(token 复用 RAVEN_ACCESS_TOKEN 值、DELTA_WS_BROADCAST_URL=http://delta-ws:8791/broadcast 走容器网络)。**剩余**:RESEND key 到位后 `pnpm delta:test-email` 即真发信;Twitter 轮询器对 `POST /api/ingest`(带 x-delta-token)写即可。\n> **v4 补充(2026-07-06,用户指令「forecasting engine 加中文选择并上线」)**:功能本就在 main(`1a3088d`,7-03 的 raven 全站 en/zh + 引擎中文输出),VM 旧镜像没带上而已。已 `up -d --no-deps raven` 切到当前 main 镜像(先确认无 engine-lock/无进行中运行);验收:容器 Ready、带 token 首页 200、SSR 含「中文」toggle。**镜像漂移现状更新:raven 已在当前 main;仍在旧镜像的只剩 forecast-api + paper-agent**(升级前先验证)。用户可见效果:http://34.85.97.32 右上角切中文→界面全中文(专业名词按设计保留英文);zh 界面下新发起的预测,引擎推理/摘要也输出中文(`language` 从 UI→API→子进程 env 全链路,7-03 已验证);存量英文档案保持英文。\n> **v2 补充(同日,用户产品反馈六条全落地)**:① 输入简化为「粘贴文字 + 可选 URL」,**去掉来源字段**(核实是引擎的事:prompt 要求自行验证 + 建立最早出现时间);② schema 新增 `timing.firstSeenUtc/basis`——**全网最早出现时间**成为一级指标:UI 时效横幅(>24h 红色「大概率已定价」警告,无法核实时诚实说明)、WS digest 带 firstSeenUtc;③ 文案凝练(\"News that matters. Impact in minutes.\" / \"最有价值的新闻,对市场意味着什么\");④ `/api/ingest` 加**质量闸门**(`lib/analyzer/quality-gate.ts`,LLM 快评分→规则回退,`DELTA_GATE_MIN_SCORE` 默认 60,未达标不分析不推送、202 gated)——这就是未来推特轮询器的完整管线:新闻→质量判断→够大才 Delta 分析→第一时间邮件+WS;⑤ **邮件报告重排**(`lib/delivery/report-email.ts`,forecasting-agent 风格暖纸色、决策先行),三必含:原文链接 / ⏱ 首现距发送已过多久 / WHAT TO DO 操作块;⑥ **邮件订阅测试模块** `pnpm delta:test-email`(默认收件人 issue.00.gui@gmail.com,可 `--text/--url/--locale/--email` 覆盖;跑完整闸门→分析→推送管线,**每次都落 HTML/txt 预览**到 `runtime-artifacts/raven-delta/email-preview/`,无 RESEND key 时回执 simulated 并打印需要配什么)。验证:根测试 890/890(新增 timing/gate/渲染三必含断言)、typecheck/build 绿、scripts 门禁 13 基线不变、无头全新会话 0 pageerror(截图 `20260705-raven-delta-v2/` + 邮件模板 `20260705-delta-email/`)。\n>\n> 上次更新:2026-07-05 by Codex。本会话按用户要求开发新的 **News Delta / stock-news impact** 产品原型:基于 Forecasting Engine 的“新闻到来→增量影响→受影响美股→推荐操作→邮件/WebSocket 推送”流程。新增入口 `/stock-news`(兼容 `/stock-news/zh-CN`、`/[locale]/stock-news`)、API `/api/stock-news-impact/run`、核心分析器 `apps/web/lib/stock-news-impact.ts`、delivery adapter `apps/web/lib/stock-news-delivery.ts`、本地 WS hub `pnpm stock-news:ws`(`scripts/stock-news-ws-server.ts`)。邮件默认 Resend / webhook,未配置时明确 `simulated`;WebSocket 本地默认 `ws://127.0.0.1:8791/ws` + `POST /broadcast`。验证:新增 `stock-news-impact.test.ts`,相关单测 12 pass;`@autopoly/web` typecheck pass;`@autopoly/web` build pass;桌面/移动截图 + 交互 WS 验收通过,归档见 `runtime-artifacts/screenshots/20260705-stock-news*` 与 `runtime-artifacts/screenshots/20260705-stock-news-interactive-fixed/`。本轮**没有运行 `forecast:live` / `daily:forecast`,没有加载钱包,没有下单**。\n>\n> 最后更新:2026-07-04 by Claude(**Stage 2 收尾 + Stage 3 开工:forecast-engine 抽包第一步**,PR #73/#74/#75 全合入)。\n> ① **#73 Gamma 传输层**:executor 6 处硬编码 gamma host → `services/executor/src/lib/gamma.ts` 的 `gammaFetch`(只共享传输层——redeem 优雅降级/orderbook offset 分页各自保留,\"6→1 换客户端\"已被 endpoint 分析证伪)。合并前用只读探针实测 6/6 调用点(零 LLM/零下单)。\n> ② **#74 两个真钱相关漏项 + recommendation 编译期锁**:`calculatePositionPnlPct` 公式单源化(executor risk.ts 唯一公式,helpers 只做展示取整);**managed-trading 改走 loadEnvFile**(原裸 dotenv 忽略 ENV_FILE = 多状态源风险,现与 executor/orchestrator 对齐);contracts 新增 `recommendation-file.ts` wire schema——写盘方 `satisfies` 锁 + orchestrator 互赋值断言 + mapper 单向锁,**全程无 .parse()**(运行时校验按操作地图文档留给未来单点 safeParse)。\n> ③ **#75 forecast-engine 抽包(issue #56 第一步,lift-and-shift)**:17 文件 git-mv → `packages/forecast-engine/src/`;`scripts/forecast/cli.ts` 留 6 行 shim,raven/forecast-api/paper-agent/forecast:event 四条 spawn 接缝零改动;raven 的 makeEventId\"逐字节契约\"复制体消灭(re-export 同一份代码),cwd 补偿的 forecastsRoot 有意保留并注释;包只 typecheck 不 build(源码消费,语义不变)。**#56 第二步待做**:dist 化 + provider/store 配置注入(env 直读 → config 对象)。\n> 验收:全程 typecheck/838 测试/raven build 绿,scripts 门禁 13 基线不变,CI 绿。plan 文档状态节已刷新(Stage 2 剩余项 + Stage 3 剩余项清单在 plan 头部)。英文版 handoff 此条待同步翻译。\n>\n> 上次更新:2026-07-03 by Claude(**仓库复杂度三阶段重构计划 + Stage 1 全量执行 + 合并 PR #65/#67/#61**,分支 `claude/determined-murdock-1b1027`)。\n> 用户反馈\"整仓复杂度太大\"→ 10 路并行诊断(~84k 行)→ 计划落盘 [`docs/internal/plan/2026-07-03-repo-complexity-refactor-3stage.md`](internal/plan/2026-07-03-repo-complexity-refactor-3stage.md)(三阶段 + 8 项用户拍板决策全记录)→ **Stage 1 已完成**:\n> ① **门禁**:首个真 CI `.github/workflows/ci.yml`(build/typecheck/test;**依赖 PR #61 先合否则 provider-runtime 3 个 vendor 测试红**);`scripts/tsconfig.json` + `pnpm typecheck:scripts`——scripts 1.26 万行首次有 tsc 检查(存量基线 14 错,CI 非阻塞,**`live-test.ts:125` `Cannot find name 'db'` 疑似真 bug**,Stage 2 清零后转阻塞);三语 i18n key 一致性 vitest。\n> ② **删除 ~1.5 万行**(每项 grep 留证):web lib/research 孤儿簇 2446 + public-run-pulse 757 + market-impact 1333 + globals.css 1519 + 生成 JSON 1.2MB;sports-model 7 零引用模块 + eval runner 2103;orchestrator raven-agent-loop 1004;position-monitor / forecast viewer / generate-wallet-envs / v2-smoke / e2e 整目录(workspace 死条目一并清)/ deploy/hostinger;executor okx `.js` shim;managed-trading clob-client v1 依赖。**用户决定保留**:raven-managed+managed-trading 线(待未来开发)、/api/prediction-engine/run + auth 链。\n> ③ **减构建**:apps/web prebuild 3 包→1 包(只剩 db),新 worktree 上手变快。④ **对齐**:AGENTS.md 与 CLAUDE.md 逐字节同步(原盲测政策/构建命令两处漂移已消);settings.local.json 移出 git;dev-reference.md 仓库树重写(原为 autonomous-poly-trading 时代幽灵树);world-cup 4 个一次性脚本入 archive/。\n> 验收:`pnpm -r build` 全绿(web 331 页)、`pnpm -r typecheck` 绿、`pnpm test` 759/762(3 失败=PR #61 既有 vendor 问题)、8 张桌面/移动截图 0 pageerror。**Stage 2 kickoff(同分支后续)**:修 live-test `db` 真 bug(门禁 14→13)、openclaw 命令模板三处→一常量、命名冻结策略入文档。**合并动作(2026-07-03,用户指令\"先合 65/67\")**:#65(forecast-api)+ #67(paper-agent)已解冲突验证后合入 main(都用 merge commit 保 #67 栈序;apps/raven 的 invite/quota × language 冲突取并集,均 build/typecheck/test 绿)。**下一步**:#61(provider-runtime 测试 hermetic 化)已合入 main → **主干 CI 转绿(954/954)**;本分支 #68 待合 + Stage 2/3 续做。英文版 handoff 此条待同步翻译。\n>\n> 最后更新:2026-07-02 by Claude(**修复 main 上 3 个 provider-runtime 测试失败**,分支 `claude/jovial-swanson-f6d92f`,即上一条 spawn 的 task)。\n> 诊断:是**测试**漂移而非实现——`provider-runtime.test.ts` 把 `skillRootDir` 指向 `vendor/repos/all-polymarket-skill`(gitignored,只有跑过 `pnpm vendor:sync` 的机器才有),clean checkout 上 `resolveSkillDescriptors` 找不到 SKILL.md 直接抛错。实现侧校验是对的(live 路径需要 skill 文件真实存在),replay 唯一生产调用方 `trial-recommend.ts` 也总在已 sync 的机器上跑。修法:测试改为在各自 temp dir 里搭 5 个 stub skill 目录(zh 命名规则同 `skillDirectoryName`)+ SKILL.md,彻底不依赖 vendor 状态。验证:该文件 4/4、全量 vitest 884/884、orchestrator tsc 绿。英文版 handoff 此条待同步翻译。\n>\n> 最后更新:2026-07-03 by Claude(**全自主 Polymarket 纸面交易 agent 第一期上线 VPS**,分支 `feat/paper-polymarket-agent`,PR #67,栈在 #65 上)。\n> 用户指令:VPS 上部署全自主 Polymarket agent,第一期纯测试盘——记手续费模拟成交、每日 3 次重点评估持仓(DeepSeek/Kimi 独立进程隔离出概率)、概率与市价有差值就平仓、混合 50/50(限价+市价)对冲手续费摩擦、要有回测/反思。\n> ① **`services/paper-agent`**(第三个 compose 服务,共享镜像/卷;**零私钥零签名器零下单端点**,唯一网络面 = Gamma/CLOB 公开 GET):模拟成交按真实盘口逐档 walk(真滑点);**费率用 CLOB 逐市场实时元数据**(taker/maker bps + tick size,入场时存仓位、退出时刷新);入场费计入成本基(现金与已实现 PnL 可对账)。\n> ② **持仓评估(重点)**:每日 3 次(`PAPER_EVAL_TIMES_UTC`)每仓 spawn 独立进程跑预测引擎(deepseek provider;Kimi 走同一 OpenAI 兼容适配器换 `DEEPSEEK_BASE_URL`)——prompt 只含市场问题+结算标准,**不含持仓/成本/盘口**;dossier 在 paper-agent 私有命名空间(不与 raven/API 混)。决策:持有净 edge(扣费)< 阈值 → 平仓;**止损(−35%)压过模型**——周期内先于 LLM 检查 + 每 10 分钟 tick 无模型扫描。\n> ③ **混合执行**:negative_edge 平仓 = 50% 市价 + 50% maker 限价(TTL 8h 回落市价,未成交余量滚入限价);stop_loss = 100% 市价。④ **反思/回测**:每天最后一轮后自动出报告(`runtime-artifacts/paper-agent/reports/`):逐笔\"卖出 vs 假如持有\"反事实 α、Brier 校准、费用拖累、限价/市价执行质量对比。\n> ⑤ **对抗式评审 22 项确认全修**,两个靠真实 API 探针抓到的硬伤值得记住:**Gamma `?slug=` 默认排除已关闭市场**(结算查询必须两步:先平查再 `&closed=true`;CLOB /book 关盘后 404 → 先结算后取盘口);**Gamma 已无 `category` 字段**(静态费率表是死代码 → 全部改 CLOB 实时费率)。另修:作废盘 0.5/0.5 退款、`--max-rounds` 是总量帽(续跑必须传 已完成+增量)、单写者队列防 cycle/tick 竞态。\n> ⑧ **$10k Claude-provider 实盘测试盘开跑(2026-07-03 用户指令)**:evaluator 切 **Claude Code**(`PAPER_EVAL_PROVIDER=claude`,容器内 claude CLI + 订阅 token,native WebSearch);本金 **$10,000**($1k 试盘账本归档到 `runtime-artifacts/paper-agent/archive-1k-test/`);**只做 finance/geopolitics/tech**(`PAPER_CATEGORIES`,Gamma tag scan:finance=120/geopolitics=100265/tech=1401,风控floor 流动性≥$5k+24h量≥$2k(2026-07-03 从 $10k 放宽,同时 perCategory 8→12,宇宙 21→31 候选)+二元 Yes/No+离结算>48h+价 0.05–0.95);单仓 $500、每轮最多 6 次评估、三班 UTC 02/10/18:00。**首轮已实测**(`market-scan.ts` + `PAPER_EVAL_PROVIDER`):扫出 21 个候选→Claude 逐个联网研究→开出 1 仓(Hormuz 7/31 恢复通航 押 NO 666.7 股 @0.75,fair 90.8% edge 15.8pp),NVDA 最大市值(fair 88% edge 4.3pp<8pp 阈值)/中国攻台/伊朗政权等均正确 pass;现金 $9,500 + 1 仓。容器 198MiB/2GiB。**已修 2 处**:① 单事件敞口护栏 `PAPER_MAX_PER_EVENT`(默认 1,按 Gamma event slug,评估前先卡省 LLM)——Hormuz 三到期日=同一 event;② **跨进程账本锁**(首轮踩坑:我手动 `paper cycle` 与常驻调度器并发 load-modify-save,last-save-wins 丢了 hormuz 那笔,账面仍自洽 $9.5k+$500=$10k)——`store.ts` O_EXCL 文件锁 + 30min stale 回收,`runEvaluationCycle`/`runFillTick`/CLI buy 都先抢锁。**运维铁律:VM 上调度器常驻,别再手动 `paper cycle`(会被锁挡掉,安全但没用);要手动只在容器停了或本地跑。** 当前账本:$9,500 现金 + 1 仓(mojtaba-khamenei 7/15 露面 押 NO 584 股 @0.856);下一轮调度 UTC 10:00 自动跑。测试 32/32(paper-agent)。英文版 handoff 此条待同步翻译。\n> > ⑦ **联网搜索已开(2026-07-03 用户指令)**:`scripts/forecast/web-search.ts` + deepseek-agent 工具循环——`FORECAST_WEB_SEARCH=1|duckduckgo|tavily` 给 DeepSeek/Kimi 标准 function calling 的 `web_search`/`fetch_page`(免 key DuckDuckGo 默认,`TAVILY_API_KEY` 自动升级);引用验真从\"存活检查\"升级为**真实搜索痕迹成员判定**(与 claude provider 同语义);工具轮不能带 `response_format:json_object`(会压制 tool_calls),仅修复轮强制。**默认全局关**(raven app 行为不变),只在 paper-agent 评估子进程默认开(`FORECAST_WEB_SEARCH=0` 可关)。实测:Spain 盲估 3.2% → 带搜索 9.0%(46 URL 痕迹 4/4 验真);VM 上埃塞题续跑 round 2 从 45% 修正到 3.6%(50 URL 5/5 验真)。测试 94/94。\n> ⑥ 验收:26/26 测试;本地+VM 双 E2E(预评估止损零 LLM 花费、$2.25 实时费率入账、负 edge 混合退出、反思报告落盘);VM 三容器并存健康。**运维**:`sudo docker exec raven-paper-agent-1 pnpm --filter @autopoly/paper-agent paper status|buy|cycle|reflect`;观察几天每日反思报告后再定第二期(自动开仓 watchlist 已内建,`PAPER_WATCHLIST` 未启用)。英文版 handoff 此条待同步翻译。\n>\n> 最后更新:2026-07-03 by Claude(**Forecast API + MCP 服务上线 GCP 东京 VM**,分支 `claude/bold-shamir-7903ab`,PR #65)。\n> 用户指令:把 forecasting agent 抽象成任何人可调用的 hosted API(答案 = 事件概率 + 分析思路 + 证据),交付 PDF + 纯文字两种形态,托管在 Google VPS,并做成 MCP。\n> ① **新服务 `services/forecast-api`**(raw node:http 零框架,~10 个小文件):`POST /v1/forecasts {question}` spawn 现有引擎(与 apps/raven run-manager 同款接缝:`tsx scripts/forecast/cli.ts` + 读 state.json);`GET /v1/forecasts/:id` = JSON、`/text` = 纯文字、`/pdf` = A4 档案(headless Chromium,pulse-decision-report 同管线,按 state 版本缓存于事件目录 answer.pdf);`POST /mcp` = 无状态 streamable-HTTP MCP(工具 forecast_start/forecast_status/forecast_result)。token 门(Bearer/x-api-key/?token=,`FORECAST_API_TOKEN` 空值回落 `RAVEN_ACCESS_TOKEN`);并发 run 上限默认 2(429);**内部 credibleInterval 全表面不出现**(含 jobLogTail 消毒)。vitest 22/22 + typecheck 绿。\n> ② **对抗式评审后加固**(4 lens × 逐条验证):空 token 回落用 `||`;跨容器状态判定按 recency(旧 error job 不再压住新完成的 state);PDF 缓存 utimesSync 回写 state 版本防竞态;spawn 前 `.engine-lock` 盖住 framing 窗口防双跑;同问题重发不吃 429;MCP 链接按 Host 派生;错误日志脱敏 ?token=。\n> ③ **部署**:deploy/raven compose 加第二个服务共享镜像 `raven-suite` + artifacts 卷(API 发起的 run 网页也能看到);Dockerfile 预烤 playwright chromium 层;服务器 override 绑 `0.0.0.0:8787`;GCP 防火墙规则 `allow-forecast-api`(tcp:8787,tag `forecast-api` 已加到实例)。**API base = http://34.85.97.32:8787**,token 在 VM `~/predict-raven/deploy/raven/.env` 的 `FORECAST_API_TOKEN`(对话中出现过,视为已泄漏,介意就轮换)。MCP 接入:`claude mcp add --transport http raven-forecast http://34.85.97.32:8787/mcp --header \"Authorization: Bearer <token>\"`。\n> ④ **部署方式踩坑**:VM `~/predict-raven` 不是 git repo(tar 部署)。**不能覆盖式解包**——旧树是 feat 分支产物,残留 main 没有的文件会混进 Docker build context 导致构建失败;正确姿势 = mv 旧树备份 → 干净解包 → 只回拷 `.env` + `docker-compose.override.yml`(备份留在 `~/predict-raven.pre-forecast-api.bak`)。\n> ⑤ 公网验收:healthz/401/MCP 握手/真实 claude run(BTC $200k before 2027 题)全过;无 TLS(同 raven,有域名后再上 Caddy)。README(CN/EN)已写 API+MCP 用法与公网暴露注意。**待办**:`.engine-lock` 只在 API 侧写(raven app 侧 framing 窗口仍有小概率双跑)。\n> ⑦ **分支扫描收尾(2026-07-03 用户四项指令,全部完成)**:(a) **删除 `/research` 重复控制台**(PR #66 已合并 + 线上验证 404)——apps/web 的 app/research + api/research/stream + components/research + BetaAccess 组件与 beta* 三语键全删;`lib/research` 保留(自助页 demo 回放还在用);`/prediction-engine` 自助页与 invite/access 体系未动。(b) **`packages/raven-ui` 删除**(13 组件零引用孤儿)。(c) **roadmap 停车场**:Raven Managed / 常驻自主 agent / World Monitor 信息源层三项存档进 `docs/raven-10x-roadmap.md`(中英),并对\"明确砍掉\"里被用户指令推翻的两条(Forecast API、SQLite)加了现实修正注记。(d) **邀请码升级为文件事件库**(`runtime-artifacts/invites/events.jsonl`,追加式 JSONL,两容器共用原子追加,零新依赖):每码 label/次数上限/过期/吊销/用量计量,**超额解锁才扣次**;`FORECAST_INVITE_CODE` 降级为首启种子(无限次码 raven-labs);CLI = `docker exec raven-forecast-api-1 pnpm --filter @autopoly/forecast-api invite list|create|revoke`。**资源开销实测**:容器内存 109→112MiB(噪声级)、店库文件 267 字节、零新进程/依赖(对比 Postgres 容器约 +70–150MiB 常驻)。远程验收:假码两端\"not recognized\"、raven-labs 解锁 202 且计量 1/∞、配额种子已清。英文版 handoff 此条待同步翻译。\n> ⑥ **每日配额 + 邀请码(2026-07-03 用户指令,已上线)**:网页 app 和 API **各自**每 UTC 日最多 `FORECAST_DAILY_QUOTA`(默认 20)个引擎 run——只有真实 spawn 计数(轮询/reattach/取结果免费),计数落盘 `runtime-artifacts/quota/<service>-<日期>.json` 重启不清零。超额需邀请码 `FORECAST_INVITE_CODE`(**暂定 `raven-labs`**,用户 2026-07-03 定):网页在提问框下弹输入行(解锁成功才存 localStorage);API 走 `x-invite-code` 头或 body `invite`;MCP `forecast_start` 传 `invite_code`。邀请码 bypass 不消耗计数。评审修正:两端 env 解析必须一致(`VAR=` 空值 = 未设而非 0)。远程验收:种 20 假计数 → 双端 429 → 邀请码放行 → 计数未涨 → 清零。英文版 handoff 此条待同步翻译(⑤ 已同步)。\n>\n> 最后更新:2026-07-03 by Claude(**Raven 全站中英切换 + 引擎中文输出**,分支 `claude/kind-goodall-e0d263`)。\n> ① **UI i18n**:无依赖自研 locale 层(`apps/raven/lib/i18n/`:LocaleProvider(localStorage 持久化,Provider 挂在 `app/layout.tsx`)+ `useT(entry, vars)` + 判词/置信度/档位映射);字典按域拆文件防冲突(ui/home/verdict/research-parts,约 170 键)。三屏 + chrome 全量翻译(导航/页脚/计划清单/进度坞/摘要/分析师工作台/证据 pill/判决页全部标签),头部新增「中文/EN」切换。GTA6 demo 内容保持英文(英文档案)。\n> ② **引擎输出语言(opt-in,交易管线不受影响)**:`scripts/forecast/language.ts` — `FORECAST_LANGUAGE=zh` 时向 framing/audit/round/summary 四个 prompt 注入「自由文本字段写简体中文、JSON 键/枚举/URL 保持 ASCII」指令;**默认(不设 env)prompt 逐字节不变**(已验证 + vitest 62/62 绿)。链路:首页 POST 带 `language: locale` → API zod → run-manager 子进程 env。zh 用户新起的 run,推理/证据 takeaway/summary 全中文;已有英文档案不动。\n> 验收:typecheck + build 绿;zh/en × 桌面/375px × 三屏截图自评全过,0 page error。英文版 handoff 待同步翻译。\n> 最后更新:2026-07-02 by Claude(**Raven 研究页 Manus 风格渐进呈现改版**,分支 `claude/kind-goodall-e0d263`,**改动未提交** working tree)。\n> 用户给了两个 Manus share 样例,要求学其「逐步揭示 + 证据强调」但保留 Raven 配色。Screen 02 · Research 改成对话式:① Raven 开场消息(头像 + provider 徽章 + 时间)自述计划,下面挂**实时任务清单**(Frame → Round 1..N → Verdict,虚线连接,✓/脉冲/待办三态,done 步骤带「N sources · 38%→30%」小结);② **证据卡逐条入场动画**(`use-reveal.ts` 交错队列,只对 run 中新到的条目播动画,终态/加载即全显);③ **底部固定进度坞**(当前步骤 + N/M + 可展开清单;完成变绿 ✓ + 「Read the dossier」CTA;修复了移动端此前完全看不到进度的问题——顺手把 `.rv-hdr-meta` 移动端隐藏加了 `!important`,原来被行内样式压过没生效);④ **完成摘要消息**:结论先行(P(YES) + 判词 + whySentence)+ 统计 chips + Manus 式档案附件卡链到 Screen 03;⑤ 证据卡正文改为 **takeaway 加粗引领**(该字段之前研究页根本没渲染)。CoachBar/CompleteCta 已删(文案并入计划消息和进度坞)。新文件:`components/research/plan.tsx` / `progress-dock.tsx` / `use-reveal.ts` / `verdict-digest.tsx`;`research-vm.ts` 加 `buildPlanSteps/planStepNo`。\n> 验收:`pnpm --filter @autopoly/raven build` 绿 + typecheck 绿;demo(运行态)+ 完成态 fixture(临时 state.json,已删)× 桌面/375px 移动 × dark/light 截图自评全过,0 console/page error。**注意本 worktree 3200 被并行会话占用,本地预览用 `.claude/launch.json` 的 `raven-alt`(3211)**。英文版 handoff 此条待同步翻译。\n> **v3 补充(2026-07-03,用户指示「使用重看观察她的操作」)**:两个 Manus 样例都用「重看」逐帧录全(0.5s 采样 + 每帧全文 diff,重建了逐条 reveal 时间线)。新发现里可落地的一个已实现:**「analyst pushback folded in (N)」芯片**——对标 Manus 的「Knowledge recalled (1)」,当引擎把分析师批注注入某轮 prompt(`RoundRecord.analystConsumedIds`)时,该轮推理标签旁亮橙色小 pill(`IterationVM.analystFolded` → `BlockVM` → iteration-block;闭环「你的 pushback 被听到了」)。其余观察(每步桥接总结句、工具产出预览、中途追问扩展计划、Editing files 中间产物)评估后暂不做:Raven 已有等价物或引擎无对应数据。build/typecheck 绿,fixture 截图验证芯片渲染(fixture 已删)。\n> **v2 补充(同日,用户要求真看 Manus 回放而非静态终态)**:用 Playwright 点「重看」逐帧录了 Manus 分享页回放(≈11s 快进),提炼出 4 个静态截图看不到的机制并全部落地:① **完成即折叠**——旧轮次在新轮运行时塌缩成一行收据(✓ + 迭代号 + 区间 + 来源数 + 净移动),点击展开/再折叠(`FoldedRow`,terminal 全展开供批注);② **已读来源轨迹**——运行轮 shimmer 上方堆最近 Read 过的域名行(client 侧从 job.log 轮询累积,`trail` state;demo 用 `DEMO_TRAIL`);③ 进度坞加**运行计时**;④ **贴底自动跟随滚动**(读者上滚批注时不抢)。build/typecheck 绿,折叠/展开/移动端/完成态截图复验,0 page error。\n>\n> 最后更新:2026-07-02 by Claude(**Forecast prompt 评审落地:prompt 只引导思考、harness 保证正确性**,分支 `claude/unruffled-jang-622f35`)。\n> 背景:用户要求 review「一次跑 3 个市场推荐」流程的全部 prompt(评审文档 [`docs/internal/review/2026-06-17-forecast-prompt-review.md`](internal/review/2026-06-17-forecast-prompt-review.md) + 文风方案 [`docs/internal/forecast-house-style.md`](internal/forecast-house-style.md)),随后指示「把改动都实现,prompt 主要用作引导思考,harness 确保正确实现,去掉对 forecasting 有负面影响的限制,合并 main」。\n> ① **确定性闸门(真钱安全)**:`pulse-entry-planner.ts` 新增 `assessPulseReportParseability`/`PULSE_NO_TRADE_MARKER`(导出 `parseRecommendationSections`),`full-pulse.ts` 渲染后 fail-closed 校验——market-scan 报告 0 个 entry-ready 章节且无 `NO-TRADE` 标记→直接抛错(此前概率表解析失败会 `aiProb=marketProb`→edge 0→**静默零交易**);position-review 降级为响亮警告。5 个新单测。\n> ② **4 个 full-pulse prompt 变体重写**:告知模型 harness 真相(「你的概率是唯一进入交易的数字,代码层重算 Kelly」);方法论/量化参数降级为「默认值,可写明理由偏离」;删「默认只用已给上下文/极少量补充核验」→ 鼓励自主补充检索;强制章节清单缩减为「程序接口」(链接/方向/概率表/置信度/建议仓位/流动性上限/推理逻辑——即 entry-planner 正则实际解析的字段)+ 校准优先的写法要点(结论先行+区间同句、每句硬信息、kill condition、「简洁≠自信,禁止为行文收窄区间」);Top 3 改「最多 3 个,不凑数,可 NO-TRADE」。\n> ③ **SKILL.md(vendored zh)**:7 步「不可跳过」→推荐脚手架;贝叶斯更新幅度/edge 分档/排序公式→默认值可偏离;No 扫描配额→先验提醒;保留认知红线(A0 结算源查验/A1.5 溯源)+ 风控硬门槛(流动性 $5k)。⚠️ **上游 repo `Alchemist-X/polymarket-market-pulse` 需同步此改动**,否则 `pnpm vendor:sync` 会覆盖回旧版。\n> ④ **C 端 api-driver prompt**:去黑话(显式禁「节点/贝叶斯/置信区间/先验/后验/edge」)+ 决策优先(首行初步判断、末行最终概率+区间)+ 校准(禁为语气收窄区间);prescreen SKIP 判据删「already efficiently priced」先验。\n> ⑤ **DeepSeek A/B 实证**(`.env.deepseek` key 在 amazing-mcnulty worktree):同一 fixture,旧 scan prompt 输出 **0 行可解析概率**(概率写成 0.62 小数+「做多 Yes」→交易正则全 miss,静默零交易实锤);新 prompt **4/4 行全解析** + 文风达标(首句方向+概率+区间、证据带来源日期、显式 kill condition)。C 端:旧 prompt 冒「贝叶斯」+点估计;新 prompt 零黑话+末行区间 55%–80%。\n> 验证:orchestrator typecheck 绿、全量 vitest 874/877(3 个失败是 main 上既有的 provider-runtime 测试,与本次无关,已 spawn task)、`pnpm --filter @autopoly/web exec next build` 绿。**待办**:house-style 方案第 4/5 步(few-shot 反向校准示例、离线 grep eval)未做;上游 SKILL.md 同步;两份新文档英文版待同步翻译。英文版 handoff 此条待同步翻译。\n>\n> 最后更新:2026-07-02 by Claude(**Raven Forecasting Engine 网页 app 全量落地**,分支 `claude/amazing-mcnulty-5c3fca`(基于 `feat/iterative-forecaster`),PR 目标 = `feat/iterative-forecaster`)。\n> 按 claude.design 交付稿(Ask → Research → Verdict 三屏,暖棕 #15120c/#ee7130 + Newsreader/IBM Plex Mono)新建 `apps/raven`(端口 3200,`pnpm raven:dev`):01 提问并起跑真实引擎;02 直播研究过程——证据卡手绘 KEEP/DOUBT 圈注 + 行内笔记 + 分析师假设队列(**真的会注入引擎下一轮 prompt**,消费后打 `consumedRound`/`doubtsHandled` 戳);03 决策优先档案页(大数字 + 收敛轴 + 置信表 + 三核心信号 + 反向信号 + 带 [NN] 彩色锚点的叙事摘要 + 编号证据书 + 折叠 framing)。GTA6 demo 档案逐字移植(id `gta6-demo`)。\n> 引擎侧(`scripts/forecast/`):`agent.ts` provider 分发(`FORECAST_PROVIDER=claude|deepseek`);DeepSeek 适配器(OpenAI 兼容、无搜索,伪造引用守卫降级为**引用存活检查**,403/429 反爬拒绝算活);证据新增 source_type/credibility;summary 新增 why_sentence/quip/[NN] 引用;`FORECAST_MIN_ROUNDS`(app 设 2,防对冲轮 1 假收敛);resume 无轮可跑不再卡 `open`。测试 62/62 绿;`pnpm --filter @autopoly/raven build` 绿;桌面+375px 移动、dark+light 截图自评通过、0 console error。\n> **DeepSeek 测试 key 在 repo 根 `.env.deepseek`(gitignored)**——key 在对话中出现过,按惯例视为已泄漏、建议轮换。run-manager 会自动从该文件回填子进程 env。E2E 已实测:GPT-6 问题 45%→25% 两轮 + 分析师假设被 round 1 消费。英文版 handoff 此条待同步翻译。\n> **补充(同日晚)**:① claude provider 解除 API key 硬依赖——支持订阅 token(`claude setup-token` → `CLAUDE_CODE_OAUTH_TOKEN`),已用订阅无头跑通完整 run(Switch 2 问题,4 源全验真,62%→65.5%);② 全站邀请 token 门(`apps/raven/proxy.ts`,`RAVEN_ACCESS_TOKEN`);③ `deploy/raven/` Docker 套件(CN/EN runbook);④ **已正式部署**到用户 GCP 东京实例 `instance-tokyo-0701-predict-raven`(asia-northeast1-b,`http://34.85.97.32`,80 端口走防火墙规则 `allow-raven-http`/tag `raven-http`);服务器代码在 `~/predict-raven`,env 在 `deploy/raven/.env`,公网验收(门/`?token=`/API/demo 档案/真 run)全通过。无 TLS(裸 IP),后续给域名再上 Caddy。⑤ 用户订阅 token 已装上服务器、provider 已切 **claude**,线上联网研究实测通过(可折叠 iPhone:13 源全验真 → 82%,对照 deepseek 同题 0 源)。⑥ **全部已合 main(PR #55)**。\n> **下一步 P1 = [issue #56](https://github.com/Alchemist-X/predict-raven/issues/56)(用户 2026-07-02 定)**:把 forecasting engine 抽象为独立包 `packages/forecast-engine`——输入任意事件,输出①概率(+判词;**区间只留内部**,用户 2026-07-02 决定校准前不对外提及置信区间) ②分析思路(framing/先验/逐轮 why-changed/summary) ③证据清单(验真+±pp 归因)。方法论保持现有定义不动(贝叶斯逐源归因/审计/簇折扣/验真钳制/disconfirmation/reflection/analyst 钩子),Store 与 provider 可插拔,`scripts/forecast` 留薄壳兼容,raven app 和 CLI 改为消费该包。\n>\n> 最后更新:2026-06-29 by Claude(新增 **FIFA 八模型预测引擎** `packages/fifa-models`,基于用户给的 Manus《FIFA 淘汰赛预测模型技术报告》;**改动未提交**,working tree)。要点:\n> ① **引擎已建好 + 验证**:TS 包 `@autopoly/fifa-models` 复用 `@autopoly/sports-model` 实现报告 8 个模型(Dixon-Coles 贝叶斯 / xG-Elo / PRODEGY / 疲劳 Elo / 战术 mElo / 线穿 GBM / 传球网 RF / 堆叠集成)+ 第 9 个「多校准 8 合 1」forecaster(MCBoost,±12pp 锚定共识防翻盘——合成冒烟时发现 MCBoost 会把 86% 大热门翻成平局,已加 bound 修掉)。`tsc` 绿、`vitest` 79/79、合成数据端到端冒烟通过(9 forecasters × 16 R32 → 归档 + 榜)。入口:[`orchestrator.ts`](../packages/fifa-models/src/orchestrator.ts) / [`cli/forecast.ts`](../packages/fifa-models/src/cli/forecast.ts) / [`extract/fifa_extract.py`](../packages/fifa-models/extract/fifa_extract.py)。\n> ② **目标 = 2026 实盘盲测**(用户定,非 2022 回测):训练用 72 场已公开小组赛 FIFA PMSR PDF,预测 16 场 32 强(封盘后已定、未开打),逐场出结果再打分。9 个 forecaster 全存档(`runtime-artifacts/world-cup/fifa8-forecasts/<fixture>/`:forecasts.json + 中英 forecasting-engine report),未来比较。市场盲测 ✓(只用 FIFA 场上数据 + Elo)。\n> ③ **真实预测已生成 + 验证 ✅**:parser 重写成 `extract_text()` 行解析(页 3 真 xG + 比分 + 体能,页 4 phases);抽全 72 场(`manifest-2026-group.json`,抽完删 PDF,常驻数据在 `runtime-artifacts/world-cup/fifa/2026/team-match-stats.json` 144 条)。**真实 R32 对阵从真实战绩推导**(`bracket.ts` 套 FIFA 固定槽位)——验证 M73 = 南非 vs 加拿大(=用户说的\"加拿大打南非\")✅。跑引擎出 **15 场 R32 预测**(跳过已踢的 M73),9 路归档在 `runtime-artifacts/world-cup/fifa8-forecasts/live/`。**两处校准修复**:MCBoost ±12pp 锚定共识(防翻盘);8合1 共识改**线性 pool**(原 log-pool 被某个 0% 过自信 ML 模型一票否决,把克罗地亚压到 1%→改后 22%,合理)。`tsc` 绿 + `vitest` 82/82。\n> ④ **发布三件已建好(用户 2026-06-29 指令「1 2 3 都做」)**:**①** Web 视图 `/world-cup/knockout`(`apps/web/app/[locale]/world-cup/knockout/` + `components/world-cup/fifa8-match-card.tsx` + `fifa8-store.ts`,三语 i18n + 移动端,桌面/移动截图自评过、0 console error、每场头条判断 + 9 模型并排对比 + 展开依据)。**②** `scripts/world-cup/fifa8-baseline-prices.ts` 抓预测时刻 Polymarket 隐含概率 **15/15**(按队名+slug 映射,非腿位;**预测生成全程不碰价**)。**③** `fifa8-results.ts` + `fifa8-performance.ts` 复用 `computePerformance` 给 9 个 forecaster 排行(淘汰赛未结算→settled=0,结算后每日刷)。数据桥 `scripts/world-cup/build-fifa8-web.ts` → `apps/web/lib/world-cup/generated/fifa8-r32.generated.json`。\n> ⑤ **关键修正**:自推导的 R32 第三名槽位有 3 场错(推成 德国-波黑/法国-巴拉圭/美国-瑞典),FIFA 官方组合表难复刻(仓库原推导也近似)。改用 **Polymarket 真实对阵结构**(盲测规则允许只取「谁打谁」)→ 真实 德国-巴拉圭/法国-瑞典/美国-波黑;`forecast --data --actual-bracket <file> --skip rsa-can`,用 Polymarket slug 当 fixtureId(baseline/结算直接按 slug 查盘)。**剩**:apps/web build 验证 → PR → **用户确认后部署**(forecasting-agent.com 手动 `gh workflow run wc-results.yml --ref main`)。详见记忆 [[fifa-8model-forecaster]]。\n> ⑥ **部署前审查 + 修复(2026-06-30)**:用户「审查后部署」。跑了 3 路并行代码审查(市场盲测/脚本、web、引擎)——**市场盲测全部 PASS**。修了 2 个发布阻塞项:(a) web「为什么」抽屉的 driver 文案是英文未走 i18n → 加 `knDriverConsensus/knDriverBias/knDriverPp` 三语 + 模板化(不再硬编码英文);(b) 分项百分比各自取整会显示 99–101% → `pct3` 最大余数法凑 100,verdict 也用同一套数。另修几个非阻塞正确性项:`bracket.ts` H2H 改「全 tied-set 迷你表」(原 pairwise 在 3 队循环时非传递);`fifa8-baseline-prices.ts` 存**原始** vig 价(原来二次归一会虚增 Mock PNL)+ 重跑不再把已抓价覆盖成 null;`fifa8-performance.ts` 容缺结算文件。**留作后续(已 spawn task)**:tree 模型(6/7)对 ensemble(8)/MCBoost(9) 的样本内泄漏 → 用 k-fold OOF 修。build 绿 + 截图复验(中文 drivers + 凑 100 + 真实对阵)。\n> ⑦ **淘汰赛详情页 + 模型说明 + 预测时间(2026-06-30,用户要求)**:(a) 每场 `/world-cup/knockout/[id]` 详情页复用 forecasting-engine 版式(决策先行 → FIFA 数据**证据卡**:实力/进攻/防守抗压/控球/逼抢/反击/低位/高强度 → **9 个模型各自的读法** + 方法段);卡片「为什么」抽屉删掉,改成跳详情页的链接(`withLocale` 是**后缀式** locale,靠 `vercel.json` `^/world-cup/(.+?)/(zh-CN|zh-TW)$` 重写到前缀;**dev 下后缀 URL 会 404 属正常**,prod 重写后正常)。(b) 淘汰赛页新增「ⓘ 模型怎么预测」展开(`fifa8-model-guide.tsx`),逐个讲 9 个模型怎么预测 + 用哪些数据。(c) `WcHero` 加 `metaKey`/`predictedAt` 可选 props → 淘汰赛页显示真实预测时间 **2026-06-29**(不再用全站 06-11)+ 详情页方法段也标。数据管线扩展:CLI 写 `team-stats.json`,`build-fifa8-web` 带上 9 模型完整 rationale + 每队 FIFA 证据(`fifa8-store.ts` 加 TeamStats/getFifa8FixtureById/getFifa8FixtureIds)。Polymarket 定价在预测时刻**静默**留档(baseline 15/15,页面从不显示)。build 绿(45 详情页 prerender)、三语 172 键齐、桌面/移动截图自评、0 console error。\n>\n> 最后更新:2026-06-21 by Claude(展示界面文案/UX 大精简,面向 decision-maker;dynamic workflow 6 维评审 + 实施。改动**未提交**,working tree)。要点:\n> ① 全站精简 + 去术语:冠军页长句→「谁会拿到最后的冠军?」+ 一行法(Elo 模拟+贝叶斯,保留预测时间);删「对阵」、「边际概率」→「各队打进每一轮的概率」;顶栏去重(删与 tab 重复的 预测/夺冠之路,仅留 本地部署+GitHub+语言)+ 删 GitHub「predict-raven」标签、aria-label→「View source on GitHub」。\n> ①b **法务页/页脚全删(2026-06-21 用户决定:内测协议已获用户同意)**:删 `apps/web/app/terms/`、`apps/web/app/privacy/`、`components/world-cup/legal-footer.tsx`、`lib/legal-copy.ts`,并从 WC layout / 自助页 / research 控制台卸掉 `LegalFooter`(页脚现已无内容→整块移除)。i18n 删 footerTerms/footerPrivacy/footerResearchTag/footerAgeGate。⚠️ **OAuth 登录配置若曾填 Terms/Privacy URL,需到 provider 后台同步移除/更新**(否则授权可能被拒);站点已无任何 18+/免责/隐私声明,后续如需重新合规要自行补回。\n> ② 预测效果页重构:4 张精简卡 + 可见「什么时候下注」两行规则(定义 押/反押/跳过/−100%)+ 点击展开「全部预测·32」+ 校准段重命名「校准:概率有多可信」+ 加讲清楚的定义;比分 grid 对称(`minmax(0,1fr) auto` + shrink guard)。\n> ③ `/research` 控制台去术语(遵 forecasting-console-style 记忆):edge→差距/gap、删 Bayesian/credible-interval/node、状态机→进度、treeTitle/ledgerCaption/ciNote 等改人话。④ 自助页 FormulaCard 改可折叠。i18n 三语各 114 键齐(删 navForecasts/navBracket/footerResearchTag/footerAgeGate;新增 perfRule/perfRuleTerms/perfAllToggle/perfBetsWord)。\n> ⚠️ **顺手发现并修了数据 bug**:`results.generated.json` 两场 winner 反了——eng-hrv(06-17) 实际**英格兰 4-2 克罗地亚**、che-bih(06-18) 实际**瑞士 4-1 波黑**(ESPN/FIFA/Sky 等 5+ 源一致),却记成客胜(b)。**根因**:这两场落进 Polymarket「Any Other Score」桶 → moneyline-only 结算 `resultFromMoneyline` 按**腿的位置**映射 a/b,但 Polymarket 腿序不保证主队在前(实测客队在前)→ 胜负反了;胜负一反又导致 ESPN 回补因「胜负不一致」被拒(比分也丢)。\n> ✅ **已修(结算管线 PR,2026-06-21)**:`settlement.ts` 改为**按队名映射**(用 draw 腿的「(主 vs. 客)」学到朝向,腿序无关);`espn-results.ts` 的 `norm` 去掉连接词 and(「Bosnia and Herzegovina」=「Bosnia-Herzegovina」);新增 `scripts/world-cup/results-overrides.json` + `update-results.ts` 末尾应用——**operator 核验结果(搜索为准)覆盖抓取值并跨日重跑持久化**(source=`verified`),实现用户定的「校验不一致以搜索结果为准」。实测整条 `wc:results`:ESPN 7/7 回补、两场 4-2/4-1→a [verified]、settled=32、bestPick 18/32、ECE 10.5%。回归测试 `scripts/world-cup/lib/settlement.test.ts`(注:本机 vitest 配置因 vite7/node20 `ERR_REQUIRE_ESM` 跑不起来,已用 tsx 等价验证 4/4 + 实跑 live Gamma 通过)。\n> 验收:`pnpm --filter @autopoly/web build` 绿;桌面/移动 + zh 预览自评、0 console error。\n>\n> 最后更新:2026-06-19 by Claude(世界杯新增「预测效果」页 + 市场盲测规则细化)。\n> 新增第 4 个 WC tab `/world-cup/performance`(预测效果):把盲测预测对比 Polymarket 预测时刻价格打分——最佳预测命中率、Mock PNL(只显示收益率%)、Brier 技巧分(友好名「相对市场水平」)、校准 ECE,外加逐场「我们 vs 市场」概率条 + 三市场各自的模拟下注(押/反押/跳过,%)。\n> 管线:`fetch-baseline-prices.ts` 一次性抓预测时刻 CLOB 价格(固定历史,已 commit `baseline-prices.generated.json`);`build-performance.ts` 据「预测+结算+价格」重算 `performance.generated.json`,已链入 `wc:results`,随每日结算刷新。改名(zh):出线名单/对阵 → **夺冠之路**。\n> ⚠️ **政策细化(已写进 CLAUDE.md CN+EN + 记忆)**:市场盲测只约束预测*生成*;该 performance 页是*事后*基准评测,允许展示市场隐含概率与对比指标。预测本身仍全程不看价格。bug 教训:Polymarket 队腿顺序不固定,必须按队名映射 a/b(按位置错配会虚增 PNL)。\n> typecheck + next build 全绿;桌面/移动 + en/zh 截图自评、0 console error。\n> 最后更新:2026-06-18 by Claude(优化 `/research` Forecasting Engine 结果可视化——decision-maker 信息分层;**改动在分支 `claude/great-wing-b09925`,未提交/未 PR**)。要点:\n> 用「颜色 + 字号」建立 4 级信息层级(决策 / 模型 / 证据 / 元信息),让 PM 5 秒读出结论。Dynamic Workflow 先出方案(3 设计 lens + synthesis),再 10 轮截图迭代收敛。\n> 改动:① 结论卡顶新增 **decision eyebrow**——方向化判定 pill(`Likely No` 等,按 `yesProbability` 5 档派生、非解析文案)+ edge 升为 co-hero(27px,`-57pp 低于市场`);卡片左侧方向色 5px 边框 + 同色阴影。② **model↔market CI 条**:MODEL/MARKET 标签 + 几何 gap 连接 + \"市场落在模型 80% 区间之外=高把握分歧\"读数。③ **条件模型瓶颈标记**:最低概率节点标 amber + ⚠(本例 B|A 15%=结构性致命点)。④ verdict 首句加粗、edge 升为主卡 / market 降为 ghost、证据账本 top-3 加 rail+底色+影响力条、贝叶斯末点落方向色。\n> review 入口:[`result-charts.tsx`](../apps/web/components/research/result-charts.tsx)、[`research.module.css`](../apps/web/components/research/research.module.css)、新 [`call.ts`](../apps/web/lib/research/call.ts)(方向化判定派生器)、[`i18n.ts`](../apps/web/lib/research/i18n.ts)(en/zh 同补)。\n> 验收:`pnpm --filter @autopoly/web exec next build` 绿(279 页);EN/中文 + 桌面/移动截图自评通过。注:`/research` 是用户自填问题的研究控制台、可显示市场价(与 WC 公开预测管线的市场盲测规则无关)。\n>\n> 最后更新:2026-06-17 by Claude(比分回补 ESPN:补齐 Polymarket 漏给的悬殊比分)。\n> 问题:部分已完场比赛页面显示 \"–\"。根因:Polymarket exact-score 市场只列 ~16 个常见比分 + \"Any Other Score\" 桶,悬殊比分(7-1/5-1/4-1)落进该桶 → 只得胜负、不得具体比分(已用 Gamma API 实证)。\n> 修复(**PR #33**,已合并 + 部署):新增 `scripts/world-cup/lib/espn-results.ts`,对\"已结算但 `score=null`\"的场次按 日期+队名 从 **ESPN 免费无密钥 scoreboard** 拉真实比分(定向到 team a/b),集成在 `update-results.ts` 的回补 pass。**仅当 ESPN 胜负与 Polymarket settled winner 一致才采用**(`source=\"espn\"`);查不到/不一致则保持 winner-only(安全降级)。\n> **市场盲测合规**:ESPN 是结果源,代码只读最终进球数 + 完赛状态,**绝不读赔率/价格**(结算映射允许、市场价格禁止)。\n> 线上已验收:ger-kor 7-1 / swe-tun 5-1 / usa-par 4-1,0 已结算场次缺分;forecasting-agent.com/world-cup/groups 显示真实比分。今后若有新场次落进 \"Any Other Score\" 桶,定时任务会自动回补(队名对不上 ESPN 时退回 winner-only,不会报错)。\n>\n> 最后更新:2026-06-16 by Claude(世界杯比分自动更新已全量上线 + 线上验收通过,无遗留用户待办)。要点:\n> ① **已上线**:GitHub Actions `.github/workflows/wc-results.yml`(每日 UTC 07:00/19:00 + 手动触发)跑 `pnpm wc:results`(市场盲测,只取已结算比分)→ 用 `VERCEL_TOKEN` secret 调 `scripts/world-cup/deploy-web.sh`(build + 部署 + `promote` 到 forecasting-agent.com)→ curl 校验线上 200(§8 真实验收)。首次手动触发**全绿**,线上 `/world-cup/groups` 返回 200、16 场 FT 比分在线、无 404。取代原先\"Mac `/schedule` 例程、只在 app 开着才跑\"。heavy build 跑 GitHub runner(**刻意不在 Hostinger/Manus VPS 构建**——OOM 会拖垮实盘交易容器、违背「web→Vercel」设计;6 方案对抗式评审结论)。\n> ② 配套修复:`vercel.json` 加 `check:true`(catch-all 路由不再 404,线上已验证);`apps/web/lib/prediction-access.ts`(+测试) import 由 `.js` 改 extensionless(修红构建,279 页绿、`vitest` 8/8);`deploy-web.sh` 的 `vercel promote` 加 `--scope \"$VERCEL_ORG_ID\"` + 容错(promote 不认 VERCEL_ORG_ID,否则部署成功但报 \"different team\" 把 run 染红)。\n> ③ PR #29(构建修复+比分 4→16+初版工作流)→ #30(改 token 直接部署)→ #31(promote scope + 线上验收)均合并 main;`wc-scores` 分支已删(token 直接部署不需要);旧 Mac 例程 `world-cup-daily-results` 已暂停(一个调度器原则)。\n> ✅ **无遗留用户待办**。调频次/时间改 workflow 的 `cron` 即可;`VERCEL_TOKEN` secret 已配(**安全:凡在对话里出现过的 token 一律视为泄漏,须吊销轮换**)。\n> 注:当前 diff-gate 用整文件 `git diff`,因 `generatedAt` 时间戳每次都变 → 实际每次都部署(2 次/天,成本可接受);若要\"无变化不部署\"可改成只比 `.results`(小优化,非必需)。\n>\n> 最后更新:2026-07-02 by Codex。本会话按用户要求对 Polymarket `fed-decision-in-july-181` 的 **No change** 分支做只读 Forecasting Engine 预测并生成 PDF:Raven engine 概率 **91.0%**(Polymarket 输入 80.5%,CME/FedWatch 参考 69.0%,engine 解析侧 `Yes`,edge +10.5pp,confidence high)。归档目录:`runtime-artifacts/fed-decision-july-2026-no-change/20260702T092845Z-dd2b1d79-14a7-4cce-8ab3-7581256bec4c/`,PDF:`fed-no-change-forecast-report.pdf`,Pulse 原文:`pulse-report.md`,context:`pulse-context.json`,结果:`forecast-result.json`。本轮使用临时 read-only 脚本调用 `buildFullPulseArchive`,**没有运行 `forecast:live` / `daily:forecast`,没有加载钱包、没有 auto-redeem、没有下单**;临时脚本已移入归档目录 `fed-decision-forecast.ts`。PDF已渲染为 3 页 PNG 并读图验收,版式可读、无遮挡。\n>\n> 最后更新:2026-06-15 by Claude(本会话共合并 **PR #18–#27** + 建 **issue #25**;main `ea82839`;全程 typecheck + vitest **713** 全绿)。要点:\n> ① **Forecasting Engine `/research` 全量双语化**(EN 默认 + 一键 `中文` toggle,chrome 与流式研究内容一起切;新增 `apps/web/lib/research/locale.ts` + `i18n.ts`,`locale` 从 composer→SSE→route→driver→`buildPredictionDemoRun`/`replayRun` 全链路打通,服务端按语言生成内容)——**PR #18**,已部署 forecasting-agent.com(web 项目 `prj_kPZRC…`,`scripts/world-cup/deploy-web.sh`)并实测 EN/zh 双语 + toggle live、0 console error。/research beta 入口仍 dormant。\n> ② 清掉 3 个 open issue:AW setup 文档 + `poly:aw/okx` 别名(**#19** closes #7)、持久化 agent-loop 纯库(**#20**,#6,no live-money)、market-intelligence Python 模块作为可选增强落地(**#21**,#5)。\n> ③ 仓库体检(4 维并行审计)后的收尾:统一 3 份分叉 `loadEnvFile`→`@autopoly/contracts/env`(**#22**,**修实盘 ENV_FILE 优先级漂移风险**:ENV_FILE 优先 + override + fail-closed)、加 Prettier 配置(可用)+ 休眠 ESLint flat config(**#23**,ESLint 依赖因沙箱无网未装)、pulse/forecast/autopoly/raven 命名 glossary(**#24**,**未做有风险的全量改名**,artifact 路径迁移会孤立归档)、删 **~5,128 行死 CSS**(**#26**,globals.css 5403→1759,全是 AutoPoly purge 漏删的 preview/bal/dash 族 + 孤儿 module)、apps/web 单测基线 1→4 文件 **+31 测试**(**#27**,把 access-control 纯规则抽到 `prediction-access-rules.ts` 以绕开 next-auth import)。\n> ④ market-intelligence 定性 = **issue #25**(框定为 Forecasting Engine 接入外部信息源的基建,3 阶段路线;模块留在 repo 当种子,不删不硬接)。\n> ⚠️ **待办**:(a) `scripts/world-cup/deploy-web.sh` 的 promote 步在新版 vercel CLI 下有 bug(见 P2);(b) ESLint 需有网时跑 `pnpm add -Dw eslint @eslint/js typescript-eslint eslint-config-prettier` 激活 + 加 `lint` 脚本;(c) globals.css base 主题块(~850 行)含 auth 在用的 `:root` token,留待逐选择器审计;(d) `replay`/`use-research-stream`/React 组件仍无测试。\n> 此前(2026-06-12):pulse:*→forecast:* 改名;MC 淘汰赛点球规则偏高待用户拍板(见下\"MC 淘汰赛模型核查\");catch-all 路由部署需补 check:true。\n\n---\n\n## 🏆 世界杯盲测预测冲刺(2026-06-11 · 本分支当前主线,进行中)\n\n**目标**:揭幕战开球(2026-06-11 19:00 UTC = 港时 6/12 凌晨 3:00)前发布全部 **87 个问题**的公开预测(72 场小组赛 + 12 个小组头名 + 八强/四强/冠军三个池子),并把 `/world-cup` 网页上线 Vercel。\n\n**铁律(用户 2026-06-11 拍板,永久)**:**市场盲测** —— 预测管线任何环节不得读取/引用/展示任何市场价格或隐含概率(Polymarket / FanDuel / DraftKings / Kalshi 等全在列),市场数据只许用于事件结构与结算映射。规则在 CLAUDE.md「项目执行要点」;缓存写入层已用 `stripPrices` 强制剥离(`scripts/world-cup/cache-markets.ts` / `check-updates.ts`)。**预测 = 纯 Elo / Monte Carlo + 有界证据调整(单场 ±8pp,带来源)**。\n\n**已完成(都已 commit)**:\n- 事件清单 87 题含结算定义(无价格):`pnpm tsx scripts/world-cup/build-event-list.ts` → `runtime-artifacts/world-cup/event-list/`\n- 100k 次纯 Elo Monte Carlo(官方 FIFA 2026 对阵树 + 最佳第三分配):`runtime-artifacts/world-cup/mc-results.json`。盲测冠军榜:西班牙 37.8% > 阿根廷 24.4% > 法国 12.8% > 英格兰 6.6%\n- Elo 查表(48 队 + 别名):`runtime-artifacts/world-cup/elo-table.json`\n- `/world-cup` 网页:卡片(事件+概率条)→ 点开 2-3 条带来源理由 → `/world-cup/forecast/<id>` 完整报告页(CN/EN)。空状态视觉 QA 通过(0 pageerror)\n- 导入命令:`pnpm tsx scripts/world-cup/import-predictions.ts`(扫 `runtime-artifacts/world-cup/reports/*/prediction.json` 统一 schema → `apps/web/lib/world-cup/generated/*.json`,**导入后要 commit 这两个生成文件**,Vercel 构建依赖它们)\n\n**进行中(跑在 Aincrad 的 Mac 本地 FleetView 会话里,协作者无法直接接管这个进程)**:\n- Workflow `wf_8db95ecb-dc7`(~160 agents):71 场比赛(预测+对抗校验流水线)、12 组 + 3 池报告、揭幕战 sample 盲测净化、市场盲测专项校验。约 20:46 起跑,ETA ~22:15 HKT\n- 监控:`ls runtime-artifacts/world-cup/reports | wc -l`(完成时 ≈ 87 个目录,每个含 report.md / report.en.md / prediction.json)\n- ⚠️ `runtime-artifacts/` 是 gitignored:**预测产物只在这台机器上**,直到导入 + commit generated JSON\n\n**✅ 冲刺已完成(2026-06-11 22:45 HKT,开球前 4 小时)**:\n- 87/87 题市场盲测预测全部发布并 commit(`runtime-artifacts/world-cup/reports/`),确定性校验 87/87 通过\n- **线上**:https://web-one-sand-83.vercel.app/world-cup (Vercel 项目 `web`,prebuilt 部署;已修平台路由 bug:catch-all rewrite 缺 `check:true` 导致动态参数路由 404——`vercel build` 产物 `config.json` 需打该补丁,build 脚本化时要带上)\n- 成本账本:`runtime-artifacts/world-cup/run-ledger/`(全部 claude-fable-5;生产 150 万 output tokens;单场中位 264s/14.2k out)\n- 对阵图:`bracket-prediction.json`(模态路径:决赛西班牙 56% 胜阿根廷)\n- 残余 TODO(已于 22:10-23:10 完成 AutoPoly 全站清除:交易面板页面/API/组件/数据文件 60+ 个文件删除,根路由重定向 /world-cup,R1 品牌元数据替换,线上已验证 14 个旧路由 404);自定义域名未配;OG 卡未做;每晚 Elo 更新后重跑 MC 的自动化未建\n\n**🔬 MC 淘汰赛模型核查(2026-06-12,协作者质疑 → 已证实,待用户拍板是否修正重发)**:\n- **问题确认存在**:淘汰赛 90 分钟 Poisson 出平局后,点球/加时用 **Elo 期望 eA 当 Bernoulli 胜率**(`scripts/world-cup/mc-sim.py` 的 `ko_win_prob`:`win + ea*draw`)→ 强队优势被双重计入(进球模型一次、点球再一次;真实点球大战接近五五开)。叠加 λ 切分(λA=2.6·eA)本身比 Elo 期望分更\"果断\",eA=0.70 的强队单轮过关概率被抬到 0.777(**+7.7pp/轮**),五轮淘汰赛复利。\n- **量化**(同 seed=20260611、100k 对照重跑):西班牙冠军 **37.83%(已发布)→ 30.53%(点球=50/50)→ 27.29%(纯 Elo Bernoulli)**;阿根廷 24.41 → 21.27 → 19.44。协作者\"怎么算都 <35%\"由此完全解释。\n- **影响范围**:champion / reach-qf / reach-sf 三个池子 + 对阵图(`bracket-prediction.json`)+ 网站冠军页数字;**12 个组头名和 72 场单场预测不受影响**(前者只依赖小组赛,后者走 Davidson 三路模型)。\n- **澄清\"平方平均\"**:协作者的 Claude 提到的 √ 是单场模型里 Davidson 平局项 ν·√(pA·pB)(几何平均,标准做法,没问题);MC 点球规则用的是裸 eA,两处是不同公式,别混淆。问题只在后者。\n- **MC 代码已补提交**:规范版 `scripts/world-cup/mc-sim.py`(路径已改仓库相对,**同 seed 逐位复现已发布 `mc-results.json`**,跑一次仅 ~5s);当时的一次性生成脚本(reach-qf/sf 构建、champion 生成、确定性校验器等 9 个)原样归档在 `runtime-artifacts/world-cup/code-archive/`(注意:内含绝对路径,是出处留档不是可复用工具)。\n- [ ] **待用户决定**:是否改用 点球=50/50(或加时再给小幅 Elo 倾斜)重跑 MC 并重发 champion/reach-qf/reach-sf + 对阵图 + 网页数字。已发布报告的 局限② 其实自己写了\"可能高估头号种子\"。\n\n**原计划步骤(已全部执行)**:\n1. 等 workflow 完成(自动通知;或看目录数)\n2. `pnpm tsx scripts/world-cup/import-predictions.ts` → 检查 WARN(被跳过的题要补)→ commit `apps/web/lib/world-cup/generated/`\n3. 视觉 QA(CLAUDE.md §9 强制):`cd apps/web && pnpm exec next dev -p 3199`;`node scripts/visual-qa.mjs --base http://localhost:3199 --paths /world-cup --out runtime-artifacts/screenshots/<ts>-wc-live`;用 Read 真读 PNG;任何 pageerror = fail\n4. 逐预测 token/耗时/模型统计(用户明确要求):解析 workflow 转录 `~/.claude/projects/-Users-Aincrad-dev-proj-predict-raven/6367ed0b-*/subagents/workflows/wf_8db95ecb-dc7/agent-*.jsonl`(每条 assistant 消息含 model + usage tokens;首末时间戳差 = 耗时;从 prompt 里抓 slug 归属)+ MC 在 `wf_58799d69-b6b` → 产出 `runtime-artifacts/world-cup/run-ledger/{ledger.csv,summary.md}`\n5. Vercel 上线:先 `pnpm --filter @autopoly/web build` 本地过;查 `apps/web/.vercel/` 是否已 link;上线后**必须真实验收**(打开线上 URL + 截图 + 对照本地)\n6. 清理待办:旧 `/world-cup/[matchId]` 与 leaderboard 路由是市场时代 UI(数据已删、现 404),后续删除或重写\n\n\n## 🔴 P0 — 现在/今天\n\n- [x] **【P00 · 已实现】pulse-direct market binding 校验**:2026-05-05 已修复。`pulse-entry-planner` 不再用同 event URL 直接绑定多 strike 市场;`execution-planning` 增加 P00 gate:marketSlug / tokenId / outcomeLabel / rule threshold 严格一致,bestBid / bestAsk / decision price 允许 3% 以内误差;`pulse-live` 遇到 `blocked_by_market_binding` 在 live 模式 fail-fast。覆盖测试:`pulse-entry-planner.test.ts` / `execution-planning.test.ts` / 全量 `pnpm test` 392 pass。\n- [x] **【P0 · v1 已实现】现有仓位独立研究复审**:2026-05-07 `pulse-live` 会在随机 Pulse 候选之外为每个远端持仓生成 `position-research.json`,抓 Gamma event/market payload + held-token orderbook;`Position Review` 优先消费 `positionResearch`,无覆盖仓位不再默认 stale hold,而是标 `fresh-position-research` / `position-research-refreshed`(near stop-loss 仍 reduce)。**残余缺口**:还没有模型级概率重估、评论/外部来源 crawler;当前是 factual refresh + artifact,不要误当完整外部研究 agent。\n- [x] **【P0 · 已实现】已有持仓必须走 position-only Pulse 概率/edge 复审**:2026-05-08 新增 `pnpm forecast:positions`(等价 `forecast:live --recommend-only --positions-only`),只针对当前持仓生成 Pulse 报告,不扫描新市场、不输出新开仓建议;候选 JSON 带当前持仓方向 / 数量 / 均价 / mark / PnL,parser 会保留 Yes/No 两侧概率行(edge 可正可负),`Position Review` 优先用持仓侧 Pulse edge。验证归档:`runtime-artifacts/pulse-live/2026-05-08T020947Z-245b4933-880f-47d7-ae86-75d5ffb8b81e/`,7 仓 hold,0 成交,Pulse 复审计划数 12;Crude 因规则/CL 数据不足由 Pulse 明确拒绝估概率,保留 edge=0。\n- [x] **【P1 · 已实现】逐仓 PnL 快照 + calibration ledger**:2026-05-07 已实现。`pulse-live` / `forecast:recommend` 会写 `position-mark-snapshot.json`、单轮 `calibration-ledger.jsonl`,并追加 `runtime-artifacts/evaluation/pulse-calibration-ledger.jsonl`;run-summary 会展示逐仓 mark 归因和 unexplained equity residual。\n- [x] **【临时限制 · 已实现】Pulse 开仓只推荐 1 个最优仓位且支持固定金额**:2026-05-15 新增 `PULSE_ENTRY_MAX_PLANS` 与 `PULSE_ENTRY_FIXED_NOTIONAL_USD`;临时运行用 inline/env artifact 设置,不写入默认 `.env`。该限制只影响新开仓 entry recommendation;已有仓位 position-only review 不合成新开仓。执行层风控与 Polymarket 最小订单量仍生效,金额太低会被拦截而不是强行下单。\n- [x] **【GitHub issue #2 · 已实现待 PR】OKX Agentic Wallet signer + OpenClaw 兼容**:2026-05-22 当前分支 `codex/aw-agentic-wallet-cap` 已把 OnchainOS/OKX EIP-712 signer、Polymarket signing identity、OnchainOS preflight、OpenClaw `openclaw agent` wrapper、`PULSE_ENTRY_*` 限制与公开 equity history 隔离合入同一 PR 范围。新增 `ONCHAINOS_TIMEOUT_MS` fail-fast,OpenClaw 默认不再调用已不兼容的 `openclaw run`。验证:`pnpm test` 50 files / 419 tests pass;`pnpm typecheck` 9 workspace pass;`pnpm --filter @autopoly/executor build` 与 `pnpm --filter @autopoly/orchestrator build` pass;fake OpenClaw wrapper smoke 输出 `wrapped output`。本轮没有运行 `forecast:live` / `daily:forecast`,没有真实下单。\n- [ ] **【当前阻塞 · 2026-06-07】当前出口被 Polymarket CLOB 订单 API 按地区限制拒单**:`https://polymarket.com/api/geoblock` 探针显示 `blocked=false country=MY`,但真实 `/order` 返回 `403 Trading restricted in your region`。用户授权后对 `will-satoshi-move-any-bitcoin-in-2026` / `NO` 做 `$1` live-check,订单同样到达 `/order` 后 403,事后复核 Satoshi 持仓为空、collateral 仍 `223.961524 USDC`;归档 `run-error/2026-06-07T043859Z-satoshi-geo-live-check/summary.md`。在用户切换到 Polymarket CLOB 可交易地区前,不要重复发送 live order;只读 Pulse / PDF 可以继续跑。复跑时优先用 direct 命令 `pnpm exec tsx scripts/pulse-live.ts ...`,今日 `pnpm forecast:live -- --recommend-only --json` 曾两次在启动阶段返回 `createOrDeriveApiKey` 空 payload,而 direct 入口正常。\n- [ ] **【新主线】Raven Managed Product — Phase 3a 代码全完成,剩 dogfood 启动**。计划全文 [`docs/internal/plan/2026-05-04-raven-managed-product-plan.md`](internal/plan/2026-05-04-raven-managed-product-plan.md) + [`mode-a-phase-3a-plan.md`](internal/plan/2026-05-04-mode-a-phase-3a-plan.md)。**当前 branch = `main`**(HEAD ~`4d417a9`)。\n - ✅ **DB**:Neon PG 17.8 in eu-central-1 (Frankfurt) provisioned 2026-05-05;4 migration 全跑通;连接串写进 `apps/raven-managed/.env.local`(gitignored;密码暴露聊天,dogfood 跑通后 reset)\n - ✅ **Phase 1 + Phase 2 #1-#4**:apps/raven-managed 独立 app + Privy + Safe 推导 + viem 余额 + session signer UI(stub 模式)+ 4 表 schema\n - ✅ **Phase 3a.0**:commit `a6513bc` — Builder code wired into services/executor(**Pizza/no1 别开**:自家钱包大概率被 Polymarket Weekly Rewards Pool 过滤,自引规则)\n - ✅ **Phase 3a.1**:3 commits — `PolymarketRelayerAdapter` 真实现(deploySafe / getBalance / getPositions / placeOrder via session signer + builder code 双重 stamp)\n - ✅ **Phase 3a.2**:commit `2e81400` — `scripts/managed-pulse.ts` + `proposed-decision-mapper.ts`(pulse 桥)\n - ✅ **Phase 3a.3**:commit `7e0b956` — `scripts/managed-pulse-archive.ts` + `services/managed-trading/src/{alerts,risk-events}.ts` + `deploy/managed-pulse.cron.example`\n - ✅ **Tests**:65/65 managed-trading + 全 9 项目 typecheck 绿\n - **Polymarket builder credentials**(active):address `0x6664...14e` / code `0x30cf...95e` / api key + secret + passphrase 全在 `.env.local`。**fee rate 0%/0% don't change**(头部 builder 全是 0%)\n\n- [x] ~~**Phase 3a.4 paper-mode 端到端 SMOKE TEST**~~ ✅ 2026-05-07 完成,commit `<pending>`:\n - no1 (`0xe14e...dff1`) 通过直接 SQL INSERT 注册成 managed_user `74a27990-300a-4d09-8e7b-af52a5c65906`(跳过浏览器 + Privy 模态——签名只能在 wallet 端做,私钥不应该上服务器)\n - Safe 推导验证:no1 EOA → `0xC78873...2936` ✅ **完全匹配** `.env.no1` 的 FUNDER_ADDRESS,证明 3a.1 PolymarketRelayerAdapter 推导逻辑对\n - 实测 publicnode RPC 读链上余额:no1 Safe = $3.96 USDC.e(之前充的钱还在)\n - 用 `2026-04-26T060306Z` pulse recommendation.json 跑 `managed:forecast --json --recommendation <path>`:3 decisions 全 skip(balanced tier 15% cap → $0.59 < $5 min notional)—— **这是正确的风控行为**,bankroll 太小 AI 即使看到 99% conf 的原油单也不强行下\n - DB 验证:`managed_paper_runs` 写了 1 row(completed,2 秒跑完),`managed_decisions` 写了 3 rows(全 skipped,原因 `blocked_by_min_notional`)\n - 归档:`runtime-artifacts/managed-pulse/2026-05-07T08-23-06Z-484e1667/`\n - **关键发现**:`https://polygon-rpc.com` 公共 RPC 现在返回 401(\"API key disabled\"),切到 `https://polygon-bor-rpc.publicnode.com`(也有 `drpc.org` / `1rpc.io/matic` 备选)。已写进 `.env.local`\n\n- [ ] **【dogfood 下一步 — 看你想走哪条】**:\n 1. **A. 给 no1 Safe 准备 $30+ Polymarket 可用 collateral(V2 之后优先 pUSD / 已迁移余额)** → paper-mode 重跑会真的\"keep\" 部分 decision,验证完整 happy path(不是只验\"被 skip\")。2026-05-15 复查:`.env.no1` 的 CLOB `COLLATERAL balance=0`、onchain pUSD=0,不能直接下单。\n 2. **B. 做 Privy 真 connect-wallet 注册流程**(不是直接 INSERT)→ 验证 onboard 端到端 UX。需要你拿 no1 私钥导入 MetaMask 后浏览器走一遍\n 3. **C. 直接进 live mode**(拿 1 个真单)→ 需要 Privy dashboard 启用 session signers + 拿 `PRIVY_SESSION_SIGNER_PRIVATE_KEY`,把 `MANAGED_TRADING_MODE=live`。最 risky 但最有信息量\n 4. **D. 等几天看 cron 跑通**(搭好 cron 让 paper-mode 每天自动 run)→ 验证 cron 调度 + alert webhook + 归档累积\n\n- [ ] **【可后做不阻塞 dogfood】review 这一轮新建的 6 个文档**:\n - `docs/internal/plan/2026-05-04-raven-managed-product-plan.md`(产品计划主文件)\n - `docs/internal/plan/2026-05-04-mode-a-phase-3a-plan.md`(Mode A 实施计划)\n - `docs/internal/plan/2026-05-04-design-elements-inventory.md`(设计清单 + 5 待拍板方向)\n - `docs/internal/review/2026-05-04-betmoar-and-computer-use-research.md`(betmoar 调研 + CU 选型)\n - `apps/raven-managed/app/page.tsx`(landing 文案 + Lucide icons + raven 品牌 mark)\n - `packages/db/src/migrations/000{2,3}_*.sql`(DB lifecycle / risk_tier 命名)\n- [ ] **【用户下次会话亲自做】人为 review 所有本轮新建/重写的中间产生分析文档**:检查格式与内容是否合理。范围至少包括:\n - `docs/agent-onboarding.md` / `docs/agent-handoff.md`(中英)\n - `docs/internal/plan/2026-04-28-v2-cutover-runbook.md`\n - `docs/diagrams/dev-reference.md`(中英)\n - `claude.md` / `AGENTS.md`(中英 4 份)的\"项目执行要点\"节\n - 主 README.md(含 Quick Start 重写 + 系统设计)\n - 用户特别想 review 的是 **格式 + 内容呈现** 是否符合期望\n- [ ] **2026-04-28 11:00 UTC · V2 cutover 当天操作**:暂停所有 cron → 等官方宣布切换完成 → 验证 SDK 连通 → 重启服务。详细步骤见 [`docs/internal/plan/2026-04-28-v2-cutover-runbook.md`](internal/plan/2026-04-28-v2-cutover-runbook.md)\n- [ ] **wrap pizza 钱包的 USDC.e → pUSD**(V2 切换前必做,否则 4/28 之后 preflight 会看到 collateral=0)。手动操作:登 polymarket.com UI 找 \"Migrate to pUSD\" 入口\n\n## 🟡 P1 — 本周\n\n- [x] ~~**接 Polymarket Builder Code**~~ ✅ commit `a6513bc`(2026-05-04,Phase 3a.0)。executor 现在按 `POLYMARKET_BUILDER_*` 5 个 env 自动给 FOK/GTC 单挂 builderCode。**用户操作**:把 5 个 env vars 抄进 `.env.pizza`(或当前在跑的钱包 env),下次 `forecast:live` 自动开始累积 builder volume\n- [x] **【P1 · 已实现】Polymarket 读取默认 in-process + 订单簿去重预取**:2026-05-07 `POLY_CLI_ENABLED` 改成显式 `true` 才走 `pnpm exec tsx scripts/poly-cli.ts`,默认直接用 in-process SDK;`POLY_CLI_STRICT=true` 仍可强制隔离 bridge。`pulse-live` 新增单轮 `readBook` / `computeAvgCost` Promise cache;`buildExecutionPlan` 对 open/close/reduce 的 unique tokenId 做 bounded-concurrency prefetch,避免同一轮重复读 CLOB / 重复 spawn。\n- [ ] **wrap pizza 钱包 usdce → pUSD**:V2 cutover 后 collateral=0,必须 wrap。手动登 polymarket.com UI 找 \"Migrate to pUSD\"\n- [ ] **`fees.ts` 接入 V2 SDK 动态费率**:使用已新增的 `fetchDynamicFeeParams(client, conditionID)` helper(见 `services/orchestrator/src/lib/fees.ts:328`),把 sizing 路径里的静态查表替换掉。前置条件:`PlannedExecution` plumb 进 `conditionId` 字段(当前没有)\n- [ ] **Mode A 主线 Phase 3a.4(dogfood)**:见 [`docs/internal/plan/2026-05-04-mode-a-phase-3a-plan.md`](internal/plan/2026-05-04-mode-a-phase-3a-plan.md)。\n - ✅ 3a.0 Builder Code (commit `a6513bc`) / ✅ 3a.1 PolymarketAdapter 真实现 / ✅ 3a.2 pulse 桥 (`scripts/managed-pulse.ts` + `proposed-decision-mapper.ts`,2026-05-05) / ✅ 3a.3 cron + 观测 + 报警(2026-05-05,65 tests pass)\n - 下一步:3a.4 dogfood — 用非 Pizza 测试账户走 1 周(用户必须亲自参与)\n - **观测 / 报警入口**:\n - alert webhook env: `MANAGED_TRADING_ALERT_WEBHOOK`(未设静默 no-op)\n - cron 配置 example: [`deploy/managed-pulse.cron.example`](../deploy/managed-pulse.cron.example)(默认 12:30 UTC,artifact-only 不自动启用)\n - 每用户日志: `runtime-artifacts/managed-pulse/<runBatchId>/<userId>/{decisions.json,summary.md}`\n - 顶层 run summary: `runtime-artifacts/managed-pulse/<runBatchId>/run-summary.md`\n - 失败 risk_events: event types `managed_pulse_failure` / `managed_pulse_user_failure`\n - **本地运行新桥**:`pnpm managed:forecast` (paper 默认) / `pnpm managed:forecast --json` / `pnpm managed:forecast --recommendation <path>` 显式指定 pulse 输出\n - **live 模式启用条件**:env `MANAGED_TRADING_MODE=live` + 5 个 `POLYMARKET_BUILDER_*` + `PRIVY_SESSION_SIGNER_PRIVATE_KEY`,缺一在 config 加载时立即抛\n\n## 🟢 P2 — 后续 / 优化项\n\n- [ ] **修 `scripts/world-cup/deploy-web.sh` 的 promote 步**(2026-06-14 发现):vercel CLI 50.35.0 下 `vercel deploy --prebuilt --prod --archive=tgz` 输出**整个 JSON**(不再是裸 URL),导致 `DEPLOY_URL=$(...)` 拿到 JSON、line 44 `vercel promote \"$DEPLOY_URL\"` 报 `Can't find the deployment \"{`。本次部署侥幸成功是因为 `--prod` 这轮直接 alias 了 production(promote 才会撞 `409 already current`);但只要哪天 production 又被 `vercel rollback` pin 住,promote 就会真失败、线上不更新。修法:用 `--archive=tgz ... | tail -1` 或 `jq -r .deployment.url`(视输出而定)解析出真实 URL,或显式 `vercel promote <dpl_id>`。`/schedule world-cup-daily-results` 例行部署同样受影响。\n- [ ] **Computer Use 集成(监控/事件交易方向)**:用户标注 P2(2026-05-04)。两个候选 pilot 见 [`docs/internal/review/2026-05-04-betmoar-and-computer-use-research.md`](internal/review/2026-05-04-betmoar-and-computer-use-research.md) §D:① UMA 仲裁监控(read-only,比市场早知道 resolution 翻盘 = 提前减仓) ② Privy onboarding QA on testnet。**当前不启动**——等 Mode A 主线跑通再考虑\n- [ ] **申请 Polymarket Verified tier**(优化项,不阻塞 MVP):mail builder@polymarket.com 附 API key `019df336-1894-76e8-bd11-8582cde25c3a` + Pizza dashboard URL 当业绩证明。批下来后才能拿 Weekly Rewards Pool 的 USDC 分成(约 0.5-1% routed volume)。Unverified 也能正常下单 + 走 builder code,只是不进奖励池\n\n- [ ] **Vercel 项目改名** `autopoly-pizza-spectator` → `predict-raven`:Vercel dashboard → Project Settings → Name。改完 README 顶部 spectator URL 也要更新成 `predict-raven.vercel.app`\n- [x] **Prediction Engine demo preview + hosted access v1**:2026-06-07 已新增 `/prediction-engine` 自然语言事件概率 demo、`/api/prediction-engine/run` API、Pulse `stage_flow` 机器可读流程字段,以及中英文说明 `docs/diagrams/prediction-engine-stage-flow.{md,en.md}`。API 支持三种模式:本地测试用 `PREDICTION_ENGINE_LOCAL_API_URL` / `PREDICTION_ENGINE_BACKEND_MODE=local` 调本机 host 服务;线上 Vercel 用 `PREDICTION_ENGINE_API_URL` 或 `PREDICTION_ENGINE_API_BASE_URL` 调 VPS;未配置才 fallback demo。前端已加入 Manus-like Run Console,显示 `service`、当前步骤、步骤成果和 artifact label。已接 Auth.js + OIDC 登录骨架、邀请码激活、每日/月度/并发 quota gate、`prediction:invite` 创建脚本和 DB migration `0004_prediction_access.sql`。Vercel preview:`https://web-l6lenq4qs-alchemist-xs-projects.vercel.app`(deployment `dpl_EwPL9EqqVHipQy8mJWpaDdRgeTEw`,Ready)。当前 preview 域名被 Vercel 登录保护拦截,未 promote production;公开验收前需要关闭 preview protection、提供 bypass,或明确切 production。\n- [x] **raven-cloud / raven-web private repos 已创建并写入首版代码**:2026-06-07 用 GitHub 账号 `Alchemist-X` 新建两个 private repo 并推送 `main`。`https://github.com/Alchemist-X/raven-cloud`(本地 `/Users/Aincrad/dev-proj/raven-cloud`,latest `10ee63e`)已包含 Fastify API、demo/pulse-command/http-proxy runner、邀请码、quota、CI 和中英文 README;`https://github.com/Alchemist-X/raven-web`(本地 `/Users/Aincrad/dev-proj/raven-web`,latest `1e0fc28`)已包含 Next.js App Router、OIDC/Auth.js、邀请码页、cloud API proxy、Manus-like Run Console、CI 和中英文 README。两边 visibility=PRIVATE;GitHub Actions 最新 CI 均通过。当前仍是首版独立骨架,尚未从 predict-raven monorepo 搬迁真实 Pulse 生产代码。\n- [x] **promote prophets-profit 复刻页到 production**:2026-05-10 已切正式 `https://autopoly-pizza-spectator.vercel.app`。当前页面保留 prophets-profit 外观,但数据来自 Pizza Polymarket 公开钱包接口 + bundled Pulse position review 摘要,不再使用源站 Kalshi 静态快照。\n- [x] **Pizza snapshot 三套非 production 风格预览**:2026-05-10 已完成,仅部署到 Vercel preview,未 promote production。预览地址:`https://autopoly-pizza-spectator-eixznt54x-alchemist-xs-projects.vercel.app/previews/pizza-ledger-folio`、`/previews/pizza-ledger-terminal`、`/previews/pizza-ledger-exchange`。最终 preview deploy `dpl_D3VdKtc1YZ6YTxXSn2qRg7DGgC1P`,运行时 env 显式指向 Pizza 钱包 `0x6664...614e` + `INITIAL_BANKROLL_USD=500`;中间 preview `dpl_BLwwnqngFevVbmHFSPBQo2LyTyxz` 因 Vercel preview env 指到错误钱包只显示 0 fills,不作为评审入口。\n- [ ] **自动刷新 `pulse-position-review.json`**:当前 `apps/web/public/pulse-position-review.json` 是从 2026-05-08 position-only Pulse 归档手动抽取的公开摘要;下次跑 `pnpm forecast:positions` 后应加脚本自动导出并随部署更新,否则 rationale 可能落后于实时持仓。\n- [ ] **README banner 升级 1200×630 PNG**:当前是 1254×1254 正方形,Twitter 卡片会上下裁剪。做一张横版替换 GitHub Settings → Social Preview\n- [ ] **CONTRIBUTING.md + Google 表单**:用户说后续做\n- [ ] **删 `claude.md` 小写、规范化为 `CLAUDE.md` 大写**:macOS 大小写不敏感视为同一文件。用 `git mv -f claude.md _CLAUDE.md && git mv _CLAUDE.md CLAUDE.md` 二步法\n\n## ⛔ 已完成 / 不要重做(决策已定)\n\n- ✅ **Design philosophy §1 重写**(2026-05-04):[`docs/internal/plan/2026-05-04-design-elements-inventory.md`](internal/plan/2026-05-04-design-elements-inventory.md) §1 由\"7 条抽象原则 + 后果列表\"改成\"4 条具体规则 + ✅长这样/❌不长这样对照\"。规则收口为:不做 gamification / 默认展示真数据 / Marketing 和 app 两套规则 / 解释机制不只说 benefit。下游 §2-§9 未动\n- ✅ **Polymarket V2 SDK 迁移**(commit `48181a5`):执行器侧已切到 `@polymarket/clob-client-v2@1.0.2`,构造改 options 形式,SignatureType 兼容,CTF 地址 unchanged。无回归\n- ✅ **README 大幅瘦身 + Quick Start 提前**(commit `70aa9c1` `8994ad1`):从 570 → ~290 行,删掉\"三条运行链路\"和过长的 manifesto\n- ✅ **Repo 重命名 `autonomous-poly-trading` → `predict-raven`** + 本地目录 `~/dev-proj/predict-raven/`(symlink 兼容旧路径)\n- ✅ **Repo 根目录瘦身**(commit `24a9b0a`):33 → 23 entries。`.en.md` 进 `docs/en/`,build configs 进 `config/`,`docker-compose` 进 `deploy/`,`Illustration/` → `docs/diagrams/`,`Plan/` → `docs/internal/plan/`,`Wasted/` → `docs/archive/`,`E2E Test Driven Development/` → `e2e/`\n- ✅ **CLAUDE.md / AGENTS.md Tier 2 trim**(commit `abb2c60`):从 181 → 138 行,加了\"项目执行要点\"专属节\n- ✅ **GitHub Social Preview** 已设成 raven logo\n- ✅ **MIT LICENSE** 已加\n- ✅ **rough-loop.md 留根目录**(B 方案明确取舍):3 个 ts 硬编码路径,挪走风险高于收益\n\n## 🪵 仍在用的 git worktree(2026-05-10 整理后保留)\n\n> 主 worktree 是 `/Users/Aincrad/dev-proj/predict-raven`(branch `main`)。下面是别的实验分支留的 worktree——不要 force-remove,里面有未合并价值代码。\n> 已清理的 2 个废稿 worktree:`spike/karpathy-autoresearch`(8 周前)+ `exp/pulse-timeout-calibration`(7 周前 base 太旧),分支已删\n\n- **`/Users/Aincrad/dev-proj/predict-raven-aw`** (1.2GB, branch `raven-aw`, 22fa56f)\n - 24 个 modified + 4 个 untracked(最大价值:`services/executor/src/lib/okx-agentic-wallet.{ts,test.ts}` + `docs/agentic-wallet-setup.md`)\n - 状态:**未合并的 OKX agentic-wallet 实验**(独立于 Mode A / Pulse 主线)。2026-05-15 复查:新增 `WALLET_PROVIDER=onchainos`、OnchainOS EIP-712 signer、`poly:aw:check/trade`、root env 搜索修复、`pulse-live` OnchainOS preflight。`pnpm exec vitest run --config config/vitest.config.ts services/executor/src/lib/okx-agentic-wallet.test.ts` 10/10 pass;`pnpm --filter @autopoly/executor typecheck` pass。直接跑 repo `pnpm test -- ...` 会因 AW worktree 缺 `vendor/repos/all-polymarket-skill/.../SKILL.md` 导致 unrelated provider-runtime 3 fail。\n - 2026-05-15 主 worktree 已用 HYCRPG owner `0xb266...fed6` + deposit wallet `0x70aC...d55a` + `@polymarket/clob-client-v2@1.0.6` 跑通 `$5` England NO FOK:CLOB `success=true`、`status=matched`、order `0xec2c...f5a2`、tx `0x841c...b3d1`。下一步:把 `okx-agentic-wallet.ts`、`polymarket-sdk.ts` identity/POLY_1271 解析、`env-file.ts` root env 搜索、`ops/live-check.ts` 只读 check/trade 入口分批 cherry-pick 到 main;不要直接整包合并 AW worktree。\n\n- **`/Users/Aincrad/dev-proj/predict-raven-persistence-plan`** (679MB, branch `codex/persistent-runtime-plan`, d939b6e)\n - 5 modified + 5 untracked(关键:`services/orchestrator/src/runtime/raven-agent-loop.{ts,test.ts}` + `docs/internal/plan/2026-05-04-persistent-runtime-plan.{md,en.md}`)\n - 状态:**部分已合并**——`scripts/agent-persistent-runner.ts` 已经在 main(commit `6d1ca6c`)。`raven-agent-loop` 模块还没合\n - 下一步:把 `raven-agent-loop` 独立 cherry-pick 进 main 或废弃整个 worktree\n\n## 📝 已知踩过的坑(避免重复)\n\n- `claude --print` 子进程偶尔 0 字节挂 5+ 分钟 → 不是失败,等\n- 移动 `vitest.config.ts` 到 `config/` 后必须 `root: REPO_ROOT` 否则找不到 `@autopoly/*` workspace 包\n- `git mv` 整目录时未追踪文件不会被 git 移动,要手动 `mv`\n- 4/24 跑 v2 smoke 时 no1 钱包 USDC.e 有 $3.96 但 pUSD 为 0 → 验证 SDK 接入正常但下单需要先 wrap\n\n## 🔄 上次会话留下的上下文(2026-07-05)\n\n- 用户要求基于 Forecasting Engine 做新产品:X/新闻到来时,不做静态概率展示,而是分析“新闻增量影响了哪些美股、市场可能怎么动、推荐怎么操作”,并通过邮件和 WebSocket 推送。\n- 已实现一个只读 demo 流程:`/stock-news` 页面、`/api/stock-news-impact/run` API、核心分析器 `apps/web/lib/stock-news-impact.ts`、delivery adapter `apps/web/lib/stock-news-delivery.ts`、本地 WS hub `scripts/stock-news-ws-server.ts`(root script:`pnpm stock-news:ws`)。\n- 本轮产品边界:根据新闻 catalyst 识别受影响股票、方向、预期移动区间、概率增量、推荐动作、风险与触发条件;邮件支持 Resend / webhook,未配置时返回 `simulated`;WebSocket 本地默认 `ws://127.0.0.1:8791/ws` + `POST /broadcast`。\n- `apps/web` 新增用户可见页面已按 i18n 走 `apps/web/lib/world-cup/messages/{en,zh-CN,zh-TW.generated}.json`;导航新增 `News Delta`;移动端 header 已调窄,避免新增导航后挤出屏幕。\n- 验证:`stock-news-impact.test.ts` + `prediction-access.test.ts` 共 12 tests pass;`@autopoly/web` typecheck pass;`@autopoly/web` build pass;桌面/移动截图和真实 WS 交互验证通过,归档 `runtime-artifacts/screenshots/20260705-stock-news*`,最终交互截图在 `runtime-artifacts/screenshots/20260705-stock-news-interactive-fixed/`。\n- 本轮没有运行 `forecast:live` / `daily:forecast`,没有加载钱包,没有下单。下一步要接真实产品时,优先补新闻源 ingest(X/新闻 API)、券商或行情价格快照、真实邮件收件人权限与生产 WS 广播服务;demo 当前是确定性规则引擎,不应作为真实证券投资建议直接使用。\n\n## 🔄 上次会话留下的上下文(2026-06-07)\n\n- 用户要求:按图片流程改造 Pulse 主流程,记录未实现缺口和新增 LLM/外部比对成本;抽象成类似 Manus 的前端预测引擎 demo;部署到 Vercel。\n- 已实现:`services/orchestrator/src/pulse/stage-flow.ts` 定义 7 阶段流程、实现状态、缺口、外部请求/LLM/token/耗时估算;`full-pulse.ts` 将 `stage_flow` 写入 research context 并要求 LLM 按阶段输出。\n- 前端:`apps/web/app/prediction-engine/page.tsx` + `apps/web/components/prediction-engine-demo.tsx` + `apps/web/app/api/prediction-engine/run/route.ts`。API route 支持 local/VPS/demo 三档:本地开发可配 `PREDICTION_ENGINE_LOCAL_API_URL` 或 `PREDICTION_ENGINE_LOCAL_API_BASE_URL`;Vercel 线上应配 `PREDICTION_ENGINE_API_URL` 或 `PREDICTION_ENGINE_API_BASE_URL` 调 VPS;未配置才走 read-only demo。`PredictionEngineRun` 已包含 `service` 和 `progress`,前端 Run Console 会显示服务来源、当前步骤、步骤成果和 artifact label;demo 模式不跑真实 Pulse、不联网抓证据、不下单。\n- 文档:新增 `docs/diagrams/prediction-engine-stage-flow.md` 和英文版;`docs/diagrams/pulse-live-flow.{md,en.md}` 已更新跳转。默认 4 候选下,本次 `stage_flow` 预计只新增约 2k-4k input tokens、0 外部请求、0 额外 LLM 调用;严格对齐图片流程预计 +22 到 +46 外部请求、+0 到 +1 LLM 调用、+8.5k 到 +36.2k input tokens、+6.2k 到 +12.8k output tokens、+4 到 +14 分钟。\n- 验证:`stage-flow.test.ts` + `full-pulse.test.ts` 4 tests pass;`pnpm --filter @autopoly/web typecheck` pass;`pnpm --filter @autopoly/web build` pass;此前 `pnpm typecheck` 全 9 workspace pass。浏览器本地验收桌面和 390px 移动端均无横向溢出、console error 0;临时 local mock 服务 `127.0.0.1:8787` 通过 `127.0.0.1:3008` 页面确认显示 `Local host`、后端 endpoint、Run Console 和本地步骤成果。Vercel preview Ready:`https://web-l6lenq4qs-alchemist-xs-projects.vercel.app`,但浏览器访问被 Vercel login/SSO protection 重定向,未完成公开页面验收。预测引擎 demo 工作没有运行 `forecast:live` / `daily:forecast`,没有真钱下单。\n- 用户随后要求先做 social login 和限量。已新增 `next-auth@5.0.0-beta.31`、`apps/web/auth.ts`、`/api/auth/[...nextauth]`、`/sign-in`、`/invite`、`/api/invite/accept`、`apps/web/lib/prediction-access.ts`。DB 新增 `app_users` / `invite_codes` / `prediction_usage_events`,migration `packages/db/src/migrations/0004_prediction_access.sql`;root 新增 `pnpm prediction:invite` 生成邀请码。默认未配置 auth 时 demo 仍开放;生产启用需配置 OIDC env + `DATABASE_URL` + `PREDICTION_AUTH_REQUIRED=true` 并先跑 migration。验证:`pnpm typecheck` 全 9 workspace pass;`pnpm --filter @autopoly/web build` pass;本地 `/sign-in` 200 且配置缺失提示正常,`/api/prediction-engine/run` 在 auth disabled 下仍返回 demo。\n- 用户随后要求先建未来拆分用的两个 private repo,并把对应代码写进去。已创建并推送首版:`raven-cloud` latest `10ee63e`,`raven-web` latest `1e0fc28`。`raven-cloud` 提供 `/healthz`、`/v1/prediction-runs`、`/v1/me/limits`、`/v1/invites/accept`、`/v1/admin/invites`,默认 demo runner 不跑真实 Pulse、不抓实时证据、不下单;`pulse_command` 模式默认拒绝 `forecast:live` / `daily:forecast` / `--trade` / `AUTOPOLY_EXECUTION_MODE=live`。`raven-web` 提供 App Router 控制台、Auth.js OIDC 登录、邀请码页、quota 展示和 cloud proxy。本地验证:cloud `pnpm typecheck` / `pnpm test` / `pnpm build` pass,web `pnpm typecheck` / `pnpm build` pass;启动 `127.0.0.1:8788` + `localhost:3009` 后 Playwright 桌面和 390px 移动端跑通预测,console error 0,移动端无横向溢出;GitHub Actions 最新 CI 两边均 pass。\n- 用户要求“今天推荐两个市场,完成下单,并生成 PDF 报告”。按保守实盘口径使用 `.env.pizza`、`AUTOPOLY_EXECUTION_MODE=live`、`AGENT_DECISION_STRATEGY=pulse-direct`、`PULSE_ENTRY_MAX_PLANS=2`、`PULSE_ENTRY_FIXED_NOTIONAL_USD=5`。\n- 只读推荐成功:`pnpm exec tsx scripts/pulse-live.ts --recommend-only --json`,runId `118013ab-cef5-4565-95a9-676078767be8`,归档 `runtime-artifacts/pulse-live/2026-06-07T025017Z-118013ab-cef5-4565-95a9-676078767be8/`。PDF:`decision-report.pdf`。Pulse:`runtime-artifacts/reports/pulse/2026/06/07/pulse-20260607T025023Z-claude-code-full-118013ab-cef5-4565-95a9-676078767be8.{md,json}`。\n- 推荐出的两个新开仓市场:`will-new-people-nl-gain-the-most-seats-in-the-next-russian-parliamentary-election`(No 侧,AI 估 Yes 25% / No 75%,edge 约 11.65pp,低置信度,$5)和 `will-satoshi-move-any-bitcoin-in-2026`(No 侧,AI 估 No 97%,edge 约 5.05pp,$5)。\n- 两个新开仓均被执行层总敞口风控拦截:当前 exposure 约 `$382.96`,上限约 `$364.15`,headroom `$0.00`。同一轮 Position Review 触发 `will-ethereum-dip-to-1400-in-june-2026` close:止损阈值 30%,计划卖出 `59.6943` shares,约 `$32.35`。\n- 尝试先执行 ETH close 释放敞口:复用同一 Pulse 产物跑 live,runId `602da344-567c-4e03-9ae6-e5d12231e58a`,归档 `runtime-artifacts/pulse-live/2026-06-07T025942Z-602da344-567c-4e03-9ae6-e5d12231e58a/`。CLOB 拒单:`403 Trading restricted in your region`;`orderId=null`,0 成交;失败 run 也已生成 `decision-report.pdf`。\n- 用户随后授权对 `will-satoshi-move-any-bitcoin-in-2026` 做 `$1` 测试。用现有 executor 入口执行:`ENV_FILE=/Users/Aincrad/dev-proj/predict-raven/.env.pizza AUTOPOLY_EXECUTION_MODE=live pnpm --filter @autopoly/executor exec tsx src/ops/live-check.ts --json --slug will-satoshi-move-any-bitcoin-in-2026 --direction no --trade --max-usd 1`。预检读到 `NO` bestAsk `0.920`、`minOrderSize=5`、collateral `223.961524 USDC`;真实 `/order` 仍返回 `403 Trading restricted in your region`,`orderId=null`,0 成交。事后只读复核:`satoshiMatches=[]`,collateral 仍 `223961524` raw。归档:`run-error/2026-06-07T043859Z-satoshi-geo-live-check/summary.md`。\n- 本轮没有完成下单,原因是外部 CLOB 地区限制,不是余额或推荐生成失败。下一步:用户切到 CLOB 订单 API 可交易地区后,先复查 `curl -s https://polymarket.com/api/geoblock`,再复用上述 Pulse artifact 先 close ETH,随后重跑同一 Pulse 产物尝试两个 `$5` 新开仓;不要绕过总敞口硬上限。\n\n## 🔄 上次会话留下的上下文(2026-06-05)\n\n- 用户要求修改 repo:Pulse 必须做 web-search;如果尝试 2 分钟失败/超时就继续流程。\n- 已新增 `services/orchestrator/src/pulse/web-search.ts`,在 full Pulse context 中写入 `web_search`;默认 `PULSE_WEB_SEARCH_ENABLED=true`、`PULSE_WEB_SEARCH_TIMEOUT_SECONDS=120`。搜索失败/超时只记录 `status=failed/timed_out` 和 `failureReason`,不会阻断报告渲染。\n- `full-pulse` prompt 已要求模型必须读取 `web_search`:completed 时纳入证据链/概率/信息源;timed_out/failed/disabled 时明确说明已尝试但失败/超时/关闭,不得写成本次未尝试外部 web-search。\n- 验证:targeted Vitest 7 files / 19 tests pass;`pnpm test` 52 files / 426 tests pass;`pnpm typecheck` 全 9 workspace pass。没有运行 `forecast:live` / `daily:forecast`,没有真实下单。\n- 已新增泛化概率分析 skill:`skills/probability-analysis/`(中英 SKILL + agents metadata)。核心要求:先理清结算定义,按关键节点设计搜索,收集官方/主流/当事方/第三方/政治/军事证据,做条件概率模型;用户要求排除预测市场价格时不得用市场价格更新概率。\n- 本轮按该 skill 重做 US-Iran nuclear deal by 2026-06-30 的只读分析,排除预测市场价格与截图 mock 数据;独立归档:`runtime-artifacts/probability-analysis/2026-06-05-us-iran-nuclear-deal/`,zip:`runtime-artifacts/probability-analysis/2026-06-05-us-iran-nuclear-deal.zip`。结论概率:Yes 24%。按项目规则也跑了 `pnpm forecast:recommend -- --json` 只读 Pulse,归档:`runtime-artifacts/pulse-live/2026-06-04T172726Z-55625808-4a69-46f2-a2d3-82290258042c/`;没有真实下单。\n\n## 🔄 上次会话留下的上下文(2026-06-04)\n\n- 用户明确要求“运行一个新的 pulse 进程,并完成下单”。本轮按真钱 live 路径执行:`pnpm daily:forecast -- --json`,默认 env `/Users/Aincrad/dev-proj/predict-raven/.env.pizza`,`AUTOPOLY_EXECUTION_MODE=live`,`AGENT_DECISION_STRATEGY=pulse-direct`。没有加 `--recommend-only`。\n- 启动前检查显示 worktree 在 `HFT-Raven`,代码 HEAD `abf366d`;运行结束后 reflog 显示已切回 `main`,HEAD 仍是同一 commit。当前只有两份未提交 HFT 计划文档和本轮 handoff/equity-history 运行产物,未改交易代码;因此本轮 live Pulse 使用的交易代码等同 `main@abf366d`。\n- Preflight 通过:collateral reported/onchain 均约 `$335.66`,remote positions `6`,configured min trade `$1.50`,max trade `10%`,max event exposure `15%`。归档:`runtime-artifacts/pulse-live/2026-06-04T125934Z-c6a045aa-606e-407d-a970-0a83b1f9b5b0/`。\n- 成功成交 3 个 FOK BUY / No 订单,CLOB 均返回 `success=true`、`status=matched`:\n - `will-ethereum-dip-to-1400-in-june-2026` No:filled `$48.829998`,size `59.694375`,order `0xd526...faf9`,tx `0x568d...01df`。\n - `will-the-carolina-hurricanes-win-the-2026-nhl-stanley-cup` No:filled `$9.019999`,size `15.288134`,order `0x9329...2bc3`,tx `0xc9b7...2a7`。\n - `will-unrwa-win-the-nobel-peace-prize-in-2026-983` No:filled `$32.289999`,size `35.097825`,order `0xfb85...365`,tx `0x732e...52d`。\n- 事后复核:本地 executor `fetchRemotePositions(.env.pizza)` 重新读取远端后显示 9 个持仓,包含本轮 3 个新仓;Polymarket public `activity` 最新 3 条 BUY 与上述 tx hash 一致。运行后 collateral/cash 约 `$244.65`。\n- 注意:`run-summary.md` 初次汇总里“实际持仓数变化”显示 `+2`,因为当时 post-run position snapshot 没及时包含 UNRWA;随后 public data API / executor 复核确认 UNRWA No 已进入远端持仓。后续若做自动验收,建议在 live run 后增加一次延迟刷新或 retry。\n- 注意:本轮对 Hurricanes 和 UNRWA 打印 fee mismatch warning:本地 estimated feeRate `0`,CLOB `base_fee=1000`;已记录在 `fee-discrepancies.jsonl`。这不阻塞成交,但应推动 `fees.ts` 接入 V2 dynamic fee。\n- 用户随后要求把“分析与决策 PDF 报告”固定进每次 Pulse 运行,并推送远端。已新增 `scripts/pulse-decision-report.ts`,`forecast:live` / `daily:forecast` 在 recommend-only、completed、以及已有 recommendation 的 failed run 后都会写 `decision-report.{md,en.md,html,pdf}`;JSON 输出新增 `decisionReportPath` / `decisionReportPdfPath`。报告不写死“高质量来源”白名单,而是按 market question / category / tags / resolution rule 动态生成 source needs,并展示实际来源覆盖、概率判断、证据链和推理摘录。验证:`pnpm exec vitest run --config config/vitest.config.ts scripts/pulse-decision-report.test.ts scripts/pulse-live.test.ts` pass;`pnpm typecheck` pass;artifact-only smoke 在本轮 archive 成功生成 8 页 PDF。\n\n## 🔄 上次会话留下的上下文(2026-05-22)\n\n- 用户要求“修复 GitHub 上的 issue 并 PR”。GitHub open issue 里只有真正的 issue #2:`Integrate OKX Agentic Wallet signer and harden OpenClaw provider compatibility`;#1 是旧 PR。\n- 当前分支:`codex/aw-agentic-wallet-cap`,基于 `origin/main`,已有 `Add OKX Agentic Wallet live support`,本轮在其上补齐两个缺口:OnchainOS shell-out timeout(`ONCHAINOS_TIMEOUT_MS`,默认 30000ms)与 OpenClaw 2026.5.x 默认 wrapper(`scripts/openclaw-agent-command.mjs`,调用 `openclaw agent --agent main --message ... --json` 并抽取 `payloads[].text`)。\n- 关键文件:`services/executor/src/lib/okx-agentic-wallet.ts`、`services/executor/src/lib/polymarket-sdk.ts`、`services/orchestrator/src/{pulse/full-pulse.ts,pulse/pulse-prescreen.ts,runtime/provider-runtime.ts}`、`scripts/openclaw-agent-command.mjs`、`.env.example`、README 中英。\n- 验证已完成:`pnpm exec vitest run --config config/vitest.config.ts services/executor/src/lib/okx-agentic-wallet.test.ts services/orchestrator/src/runtime/provider-runtime.test.ts services/orchestrator/src/runtime/pulse-entry-planner.test.ts` 36 tests pass;`pnpm test` 50 files / 419 tests pass;`pnpm typecheck` pass;executor/orchestrator build pass;fake OpenClaw wrapper smoke pass。\n- GitHub connector曾因 `chatgpt.com/backend-api/wham/apps` 连接失败,已 fallback 到 `gh`。`gh auth status` 显示账号 `Alchemist-X` 已登录且有 `repo/workflow` scope。issue list 用 REST API 成功。\n- 本轮没有运行 `forecast:live` / `daily:forecast`,没有 recommend/live Pulse,也没有真钱下单。\n\n## 🔄 上次会话留下的上下文(2026-05-15)\n\n- 用户要求重新接手 OKX Onchain OS / Agentic Wallet 适配,先从 No1 链路排查,随后明确改为 HYCRPG Agentic Wallet + Polymarket deposit wallet 路线;最终已用测试资金发出一笔 `$5` England NO live smoke 并成交。\n- worktree 现状:主 worktree `/Users/Aincrad/dev-proj/predict-raven` 在 `main`,本轮改了 handoff 文档、`pnpm-lock.yaml`、`services/{executor,managed-trading}/package.json`(CLOB SDK `1.0.2` → `1.0.6`)。旧 OKX 实验在 `/Users/Aincrad/dev-proj/predict-raven-aw` (`raven-aw`),未合并但有可用代码。OnchainOS CLI 本机版本 `2.2.7`,checksum 匹配;当前 `onchainos wallet status` 是 `loggedIn=true`,active account 为 HYCRPG `Account 1`。\n- No1 当前状态:`.env.no1` 是 private-key/proxy 配置,signer `0xE14E...dFF1`,funder/Safe `0xc788...2936`,`SIGNATURE_TYPE=2`。`ENV_FILE=.env.no1 pnpm exec tsx scripts/v2-smoke-balance.ts` 能初始化 SDK,但 CLOB 返回 `COLLATERAL balance=0`、allowances 全 0;`forecast:positions` preflight 也显示 `remotePositionCount=0`、reported/onchain pUSD=0。\n- 只读 Raven 链路验证:`ENV_FILE=.env.no1` 直接跑 `pnpm --filter @autopoly/executor ops:check` 会找不到 env,因为 filtered package cwd 在 `services/executor`;改用绝对路径 `ENV_FILE=/Users/Aincrad/dev-proj/predict-raven/.env.no1` 后 check 成功,能读 CLOB、挑市场、读 orderbook,但余额仍为 0,候选还可能是 `restricted=true`。这个 env 解析修复已经在 AW worktree 的 `services/executor/src/lib/env-file.ts`。\n- Pulse 只读验证:`AUTOPOLY_EXECUTION_MODE=live ENV_FILE=.env.no1 pnpm forecast:live -- --recommend-only --positions-only --json` 通过 preflight 后失败在 `provider=none`:`.env.no1` 没有 `AGENT_RUNTIME_PROVIDER` / provider command。归档:`runtime-artifacts/pulse-live/2026-05-15T081723Z-pending/`;第一次没带 `AUTOPOLY_EXECUTION_MODE=live` 的 preflight 失败归档:`runtime-artifacts/pulse-live/2026-05-15T081555Z-pending/`。\n- 目前阻塞真实下单的最小清单:No1 需要可用 pUSD/Polymarket collateral;`.env.no1` 需要补 runtime provider(可参考 `.env.pizza` 的 `AGENT_RUNTIME_PROVIDER=claude-code` / `AGENT_DECISION_STRATEGY=pulse-direct`);main 需要合入 AW 的 OnchainOS signer/env 搜索/identity preflight;若走 OKX AW,必须先登录 OnchainOS 并确认 active EOA 与 No1/目标 Polymarket deposit wallet 的 signer/funder 关系。\n- 用户随后纠正:不该走 No1 `.env` 私钥路线,应通过 HYCRPG 账号新建 Agentic Wallet 地址来下单。已用 OTP 登录 `hycrpg@gmail.com`,执行 `onchainos wallet add` 新建并自动切到 `Account 2`:accountId `0d3d2176-bea0-468a-b904-774e6321d661`,Polygon/EVM 地址 `0xc8c6af4da50b05f7183418bea68597d3d764b772`,Solana 地址 `Bg3ReK...uJra`。\n- `Account 2` 当前状态:`onchainos wallet balance` 显示 total `$0.00`;Polygon pUSD (`0xc011...2dfb`) balance=0;`https://gamma-api.polymarket.com/public-profile?address=0xc8c6...b772` 返回 `profile not found`。EIP-712 签名 smoke 成功:`onchainos wallet sign-message --chain 137 --from 0xc8c6...b772 --type eip712 ...` 返回 signature。\n- HYCRPG `Account 1` 仍持有约 `$30.01` pUSD,EVM `0xb266dd8d835e3388d0eaf0bf7efff3bb732dfed6`;Polymarket public profile 同样 `profile not found`。不要擅自转 pUSD 到 Account 2;这是资金操作,需要用户明确确认。\n- 用 AW worktree 对 `Account 2` 跑 Raven executor 只读 check(inline `WALLET_PROVIDER=onchainos`, `PRIVATE_KEY=`, `FUNDER_ADDRESS=`, `SIGNATURE_TYPE=0`, `POLY_CLI_ENABLED=false`)能进入 OnchainOS signer 并读到 Polymarket market/orderbook;CLOB 曾打印 `Could not derive api key!`,但 check 最终输出 signer/funder 都是 `0xc8c6...b772`、walletMode=`eoa`、signatureType=0、balance=0。真实下单前仍需解决资金 / Polymarket profile 或 deposit-wallet flow。\n- 用户明确授权用测试资金买 `$5` England World Cup Winner 的 NO。先尝试 `Account 1 -> Account 2` 转 `10 pUSD`,失败:`MATICInsufficient balance for network fee`,无转账。随后改用有 pUSD 的 HYCRPG `Account 1` 直接做 Agentic Wallet 下单 smoke:目标市场 `will-england-win-the-2026-fifa-world-cup-937`,NO token `77121637225348873006259930776623502125079210522997384841464684944292365296940`,preflight 读到 CLOB collateral `30`、NO bestAsk 约 `0.887`、min size 5。真实 `/order` 请求被 Polymarket 拒绝:`403 Trading restricted in your region`,`orderId=null`,无成交。事后复核:Account 1 pUSD 仍 `30`,`data-api.polymarket.com/positions` 和 `activity` 对 `0xb266...fed6` 均为空数组。结论:AW 签名 + CLOB 构单已到 `/order`,当前 blocker 是 Polymarket geoblock / allowed-region 环境,不是 Raven signer 组装。\n- 用户随后要求用 No1 挂一个不会成交的单再取消,以确认是否仍是 geoblock。2026-05-15T08:44Z 用 `.env.no1` 对 England NO 发起 no-cross GTC:`BUY price=0.001 size=5000`(最大 `$5`,当时 bestAsk `0.887`),preflight 显示 No1 CLOB collateral `$0`、allowances 全 `0`,但 orderbook 可读。请求到达 `/order` 后仍先被 Polymarket 拒绝:`403 Trading restricted in your region`,`orderId=null`,因此没有 cancel 对象;事后复核 No1 collateral 仍 `$0`、public positions `[]`、最新 public activity 早于本次 smoke;`https://polymarket.com/api/geoblock` 显示当前执行环境 `blocked=true`、`country=FR`。归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T0844Z-no1-geoblock/summary.md`。结论:当前执行环境的 Polymarket geoblock 发生在余额不足之前;给 No1 转钱仍是后续 accepted-order smoke 的必要条件,但不会单独解决 geoblock。\n- 用户说已切换后要求再测。2026-05-15T09:00Z 复查 `https://polymarket.com/api/geoblock`:`blocked=true`、`country=TW`、`region=TPE`;Polymarket 文档列 `TW Taiwan` 为 close-only,所以 opening BUY 仍不可发。OnchainOS 当前 active 为 HYCRPG `Account 1`(`0xb266...fed6`),Polygon pUSD 约 `$30.01`;AW worktree 只读 check 成功识别 `walletProvider=onchainos`、signer/funder `0xb266...fed6`、walletMode `eoa`、signatureType `0`、CLOB collateral `$30`,England NO book 可读(bestBid `0.886` / bestAsk `0.887`),market `restricted=true`。未重复发真实 opening order。归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T0900Z-hycrpg-tw-close-only-preflight/summary.md`。\n- 用户随后切到 JP 要求再测。2026-05-15T08:57Z `geoblock` 返回 `blocked=true`、`country=JP`、`region=13`,但 Polymarket 文档列 JP 为 frontend-only restriction,不是 API blocked;因此按用户先前授权发起 HYCRPG Account 1 `$5` England NO FOK smoke。请求到达 `/order`,不再是 geoblock,改为 `400 maker address not allowed, please use the deposit wallet flow`;`orderId=null`、无成交。复核:Account 1 Polygon pUSD 仍 `30`,public positions/activity `[]`,public profile not found,relayer deployed checks 对 `0xb266...fed6` 的 `SAFE=false`、`WALLET=false`。结论:Agentic Wallet EOA 直签 `signatureType=0` 不可用于这个新 API 账户;下一步必须接 Polymarket deposit wallet:deploy/derive deposit wallet、把 pUSD 放到 deposit wallet、由 deposit wallet 做 approvals、CLOB sync `signature_type=3`、下单用 `POLY_1271` 且 maker/signer 都是 deposit wallet。归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T0857Z-hycrpg-jp-deposit-wallet-required/summary.md`。\n- 已继续 deposit wallet flow:为 HYCRPG owner EOA `0xb266...fed6` 派生并部署 deposit wallet `0x70aC00EACb8345B209cdc68e830a18874aEFd55a`;relayer transaction ID `019e2ae0-7cb8-7557-adc6-c01ac0450a6b`,hash `0xd958cb81d53bd874f14c441568b4a4270b6a3d3b277e74201aab619bd03f40b8`,observed `STATE_MINED`,`/deployed?type=WALLET` 返回 `true`。归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T0903Z-hycrpg-deposit-wallet-deployed/summary.md`。\n- 用户给 owner EOA 打入 Polygon 原生 gas(当前是 POL;部分钱包仍显示 MATIC)后,按用户确认把 `10 pUSD` 从 owner EOA 转到 deposit wallet。pUSD 转账 hash `0xf2f657f33347472d4294e987a60750f358a411b62d18b62e0f11dfb46358e5f6`;随后通过 relayer 让 deposit wallet 对 3 个 CLOB spender 做 max approve,relayer tx ID `019e2b05-0301-7155-b5aa-34b56a8d2464`,onchain hash `0xb4f861bdb4c791ec51a8deeeb3da60b438c06407dd962206949e9bdcc9f2d1c7`。CLOB `balance-allowance/update?signature_type=3` 后显示 deposit wallet collateral `10000000`,allowance 全 max。\n- 第一次 `POLY_1271` 下单尝试失败在本地 SDK 版本:`@polymarket/clob-client-v2@1.0.2` 生成的订单是 `maker=deposit wallet` 但 `signer=owner EOA`,CLOB 返回 `400 the order signer address has to be the address of the API KEY`,无成交。已将 `services/executor` 与 `services/managed-trading` 的 `@polymarket/clob-client-v2` 升级到 `1.0.6`;该版本会在 `POLY_1271` 下生成 `maker=signer=deposit wallet`,并输出 ERC-7739 wrapped signature。\n- 成功 smoke:2026-05-15T09:55Z 用 HYCRPG Agentic Wallet owner `0xb266...fed6` 签名、deposit wallet `0x70aC...d55a` 出资,对 England World Cup Winner NO 发 `$5` FOK BUY。订单 preview:`maker=signer=0x70aC...d55a`、`signatureType=3`、signature length `636`、`makerAmount=5000000`、`takerAmount=5636970`。CLOB 返回 `success=true`、`status=matched`、order ID `0xec2c54cbc318321068630669f92c531db3cc7b5bc9829d06b977157f781cf5a2`、tx `0x841cc5185ec02cb230ff242bc3931ea6b284c20da015e34cd5f146c61572b3d1`。\n- 事后复核:Polygon receipt `status=0x1`;deposit wallet pUSD `4.983052`、owner EOA pUSD `20`、deposit wallet England NO ERC-1155 balance `5.636977`;Polymarket public positions/activity 均能看到 `Will England win the 2026 FIFA World Cup?` / `No` / size `5.6369` / avgPrice `0.8869`。验证:`pnpm --filter @autopoly/executor typecheck` pass;`pnpm --filter @autopoly/managed-trading typecheck` pass。归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T0955Z-hycrpg-poly1271-smoke/summary.md`。\n- 用户要求临时限制:只推荐一个最优仓位,下单金额先是 `$5`,随后因 15% 单笔上限改为 `$1`。已在主 worktree 实现 `PULSE_ENTRY_MAX_PLANS=1` + `PULSE_ENTRY_FIXED_NOTIONAL_USD=<amount>` 路径,并在 `forecast:live` preflight/归档里显示这两个约束。验证:`pulse-entry-planner.test.ts` / `pulse-direct-runtime.test.ts` / `okx-agentic-wallet.test.ts` 32 tests pass;`pnpm typecheck` 全 9 workspace pass。代码归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T1020Z-pulse-entry-limit/summary.md`。\n- 已用一次性 env `runtime-artifacts/okx-aw-smoke/2026-05-15T1026Z-aw-pulse-one-best/aw-pulse.env` 跑真实 AW `forecast:live`(不是 recommend-only):`PULSE_ENTRY_MAX_PLANS=1`、`PULSE_ENTRY_FIXED_NOTIONAL_USD=1`、`MIN_TRADE_USD=1`。结果:preflight 通过,signer `0xb266...fed6`、funder `0x70aC...d55a`、signatureType=3、collateral `4.983052 pUSD`、远端持仓 1;Pulse 选出唯一新开仓 `bun-b04-hsv-2026-05-16-hsv` / `No` / `$1`,但 execution plan 被 Polymarket 最小订单量拦截:`5 shares @ $0.92 ask => $4.60 minimum`,所以 `executedOrders=0`,没有下单成交。归档:`runtime-artifacts/pulse-live/2026-05-15T103127Z-8447b494-9a42-4f95-8dab-976c56048f31/`;AW 摘要:`runtime-artifacts/okx-aw-smoke/2026-05-15T1026Z-aw-pulse-one-best/summary.md`。\n- 用户确认临时把 AW 单笔 cap 设为 50%,从 ACC1 `0xb266...fed6` 把全部 `20 pUSD` 转入 deposit wallet `0x70aC...d55a`,并 live 买入 `bun-b04-hsv-2026-05-16-hsv` / `No` / `5 shares`。执行:OKX 先返回 contract-recipient 确认,用户二次确认后用 raw `20000000` pUSD base units 转账,tx `0x42552c...979e`;随后 FOK BUY `5` shares @ `0.92`,notional `$4.60`,order `0x10ec...a093`,tx `0x06b5...13ef`,CLOB status `matched`。事后复核:owner pUSD `0`,deposit wallet CLOB collateral `20.372012 pUSD`,public activity / positions 均显示 HSV No `5` shares。归档:`runtime-artifacts/okx-aw-smoke/2026-05-15T1245Z-aw-hsv-no-5shares/summary.md`。\n- 已修复 public equity history 污染:此前 `forecast:live` 成功路径无条件调用 `appendEquitySnapshot()`,会把 AW 小账户净值追加到 `apps/web/public/equity-history.json`。现在默认只有 active env 文件名是 `.env.pizza` 才会写 Pizza public chart;AW/No1/artifact env 只写 run archive。可用 `PUBLIC_EQUITY_HISTORY_ENABLED=true/false` 明确覆盖。验证:`scripts/equity-snapshot.test.ts` 3 tests pass;`pnpm typecheck` pass。\n\n## 🔄 上次会话留下的上下文(2026-05-10)\n\n- 用户要求“风格和原版网站不一样、信息和布局基本不变、先做三个版本预览、不要直接投 production”。已新增三个 preview route:`/previews/pizza-ledger-folio`(纸面研究简报)、`/previews/pizza-ledger-terminal`(深色 operator terminal)、`/previews/pizza-ledger-exchange`(清爽券商看板)。实现方式是 `ProphetsProfitSnapshot` 支持 `variant=\"folio\" | \"terminal\" | \"exchange\"` 和 preview-only `as=\"div\"`,避免在 preview shell 的 `<main>` 内嵌套 `<main>`;首页默认仍是 `variant=\"original\"`。\n- Preview 部署:最终可评审 URL 是 `https://autopoly-pizza-spectator-eixznt54x-alchemist-xs-projects.vercel.app`(deploy `dpl_D3VdKtc1YZ6YTxXSn2qRg7DGgC1P`,`target=preview`,`status=Ready`)。没有执行 `vercel deploy --prod`,正式 alias `https://autopoly-pizza-spectator.vercel.app` 未切换。\n- 验证:`pnpm --filter @autopoly/web typecheck` pass;`pnpm --filter @autopoly/web build` pass;本地 `http://localhost:3007` 和 Vercel preview 三条 route 全部 Playwright 通过,console/page error 为 0,手机宽度 `overflowPx=0`,并确认显示 Pizza 标记 `$500.00` starting capital / `34 fills`。实时 mark 验收时 preview 显示 `ending_nav≈$554.25`、`roi≈+10.85%`。截图:`output/playwright/pizza-preview-{folio,terminal,exchange}.png` 和 `output/playwright/pizza-preview-live-{folio,terminal,exchange}.png`。\n- 用户确认切正式并要求适配自己的数据。`apps/web` 根路径 `/` 仍使用 prophets-profit 的 \"Live Trading Snapshot\" 外观,但数据源已改为 `GET /api/public/trading-snapshot`,由 `apps/web/lib/trading-snapshot.ts` 聚合 Polymarket public wallet `overview / positions / closed-positions / activity`、`public/equity-history.json`、`public/pulse-position-review.json`。\n- 已删除源站 Kalshi 静态 `paper-trades.json`,避免线上混用。新增 `apps/web/public/trading-snapshot-config.json`,用于 production 环境没有 `INITIAL_BANKROLL_USD` 时把 Pizza 起始资金固定为 `$500`;否则线上会误用 equity history 第一条 `$20` 计算 ROI。\n- 当前 production 数据口径:正式 API 返回 `starting_capital=$500`、`ending_nav≈$556.98`、`net_pnl≈+$56.98`、`roi≈+11.40%`、`34` fills、`20` markets、`7` open。`pulse-position-review.json` 来自 `runtime-artifacts/pulse-live/2026-05-08T020947Z-245b4933-880f-47d7-ae86-75d5ffb8b81e/recommendation.json`,只包含公开 review 摘要和来源链接。\n- Production deploy:`dpl_8is51ocvNuE2H1pxkpBe5UEiEES1`,正式 alias `https://autopoly-pizza-spectator.vercel.app`;中间旧 production `dpl_3uM7bQnMp3p3G6U22wSuKVXvtNLR` 曾暴露过 `$20` 起始资金口径,已由最终部署修正。\n- 验证:`pnpm --filter @autopoly/web typecheck` pass;`pnpm --filter @autopoly/web build` pass;本地 `http://localhost:3007` 和 production Playwright 首屏/筛选/搜索/展开 Delcy rationale 通过;production `/api/public/trading-snapshot` 返回 200;Playwright console error 0。截图:`output/playwright/pizza-adapted-local.png`、`output/playwright/pizza-adapted-production.png`。\n- 本轮没有运行 `forecast:live` / `daily:forecast`,没有真实下单;只读取现有 Pulse 归档和 Polymarket 公开接口。\n\n## 🔄 更早会话留下的上下文(2026-05-08)\n\n- 2026-05-08 用户明确要求:任何事件概率 / fair probability / edge 必须调用 Pulse 流程;review 当前持仓时是“用 Pulse 分析已有持仓”,不是扫市场找新标的。`AGENTS.md` / `claude.md` / `docs/en/AGENTS.md` / `docs/en/CLAUDE.md` 已同步写入这条规则。\n- `pnpm forecast:positions` 已落地:入口在 `scripts/pulse-live.ts`,positions-only 强制 recommend-only;`market-pulse.ts` 生成 existing-position snapshot;`pulse-direct-runtime.ts` 不合成新开仓,只把已有持仓 review 决策写入 final decisions;`pulse-entry-planner.ts` position-only 模式保留所有概率行,不因负 edge / Kelly=0 丢掉。\n- 最近一次只读复审:`ENV_FILE=.env.pizza pnpm forecast:positions -- --json` 成功,归档 `runtime-artifacts/pulse-live/2026-05-08T020947Z-245b4933-880f-47d7-ae86-75d5ffb8b81e/`;Pulse 报告 `runtime-artifacts/reports/pulse/2026/05/08/pulse-20260508T021044Z-claude-code-full-245b4933-880f-47d7-ae86-75d5ffb8b81e.md`。没有下单。\n- 当前 7 仓全部 No / hold;有正 edge 的 6 仓:Delcy +9.5pp、Finland +4.15pp、Measles +4.0pp、France +2.85pp、England +2.05pp、Leclerc +1.45pp;Crude edge=0 是因为 Pulse 明确写“AI 概率未评估,规则/CL 数据不足”,下次优先补抓规则和 WTI/CL 数据。\n- 验证:`pnpm test -- services/orchestrator/src/runtime/pulse-entry-planner.test.ts services/orchestrator/src/runtime/pulse-direct-runtime.test.ts services/orchestrator/src/review/position-review.test.ts` 实际跑完整 suite,48 files / 402 tests pass;`pnpm typecheck` pass。\n\n## 🔄 更早会话留下的上下文(2026-05-07)\n\n- pulse 质量本轮新增:`scripts/pulse-evaluation-ledger.ts` 负责逐仓 mark attribution + calibration ledger;`scripts/pulse-live.ts` 在 recommend-only/live 成功路径写入对应 artifact;`scripts/live-run-summary.ts` 显示逐仓 PnL 归因。\n- 现有仓位复审 v1 已有独立研究入口:`scripts/pulse-position-research.ts` 逐仓抓 Gamma event/market + held-token orderbook,`scripts/pulse-live.ts` 写 `position-research.json`,`position-review` 对未被随机 Pulse 覆盖的仓位标 `fresh-position-research`。仍缺:模型级概率重估、评论/外部来源 crawler。\n- Polymarket 性能本轮改动:默认 in-process SDK;poly-cli 变成显式 opt-in fallback;`pulse-live` 单轮缓存 book/avgCost;`buildExecutionPlan` 对 unique tokenId 并发预取订单簿。\n- 验证:`pnpm typecheck` 通过;`pnpm test -- services/orchestrator/src/review/position-review.test.ts services/orchestrator/src/review/position-research.test.ts services/orchestrator/src/lib/execution-planning.test.ts` 实际跑完整 vitest suite,47 files / 400 tests 通过。没有跑 `forecast:live`,没有真实下单。\n\n## 🔄 更早会话留下的上下文(2026-05-04)\n\n- 用户决策(plan §0 锁定):Privy / 一路推到 Phase 3 / **MVP 仅靠 Polymarket Weekly Rewards Pool**(不向用户收 builder fee) / 新建独立 app `apps/raven-managed/`(不动 `apps/web`)\n- 营收模型修正:原方案\"收 builder fee\"是错的。头部 70% 市占率的 betmoar / Based Prediction / Stand.trade 全是 \\$0。靠 Polymarket Weekly Rewards Pool(约 0.5-1% of routed volume)赚钱\n- 设计原则锁定:**产品界面内不用 AI 生图**(crypto-native 用户对 Midjourney 出来的东西敏感);off-product marketing 才用 AI 生图。详见 design-elements-inventory §3\n- 已有 6 commit on `builder-raven`:`c51cea5` Phase 1 / `22fa56f` revenue model / `11a5554` Safe / `40a7678` viem balance / `ec8c15c` managed-trading skeleton / `11e64f5` design inventory / `1a3406b` build+typecheck fixes\n- ⚠️ **worktree 拓扑陷阱**:`/Users/Aincrad/dev-proj/autonomous-poly-trading` 是 `predict-raven` 的 symlink;`/Users/Aincrad/dev-proj/predict-raven-aw` worktree 上有别的 session 的 WIP,**不要强删**\n- 历史上下文(2026-04-26):实盘跑了 `daily:forecast` 3 单全成(finland eurovision / crude oil / france world cup),net $548 → $529\n\n## 📌 引用速查\n\n| 我想知道... | 去看 |\n| --- | --- |\n| 第一次接手项目(仅一次) | [`docs/agent-onboarding.md`](agent-onboarding.md) |\n| 风控完整规则 | [`docs/risk-controls.md`](risk-controls.md) |\n| 命令速查 / 部署 | [`docs/diagrams/dev-reference.md`](diagrams/dev-reference.md) |\n| 历史 review / decision | [`docs/internal/review/`](internal/review/) |\n| 最近一次 pulse-live 跑了啥 | `runtime-artifacts/pulse-live/` 下最新目录 |\n"}}}}