跳转到内容

2026-06-02

上午记录,下午继续补充。

FEAT-009 做市引擎 v2.1 —— PRD 对账 / 反馈环修复 / 与 BE(zz) 接口收敛

Section titled “FEAT-009 做市引擎 v2.1 —— PRD 对账 / 反馈环修复 / 与 BE(zz) 接口收敛”

主线节奏:上午先做 PRD v2.1 In Scope 与「派生公式+推价节奏」交接文档逐项对账 → 整理「需补给 BE 接口字段清单」并落地 bob 三项”本期不做”决策 + 清理 MEV 残留 → 深挖反馈环(PATCH /derived 兜底修复 + 失败错误码日志,TDD)→ 与 zz 收敛三个接口问题(PATCH/derived、native-price、stat_updated)并确认”是文档没更新非 FE 落后” → 重建 bsc 测试产物推送 test。

📋 PRD v2.1 In Scope × 交接文档逐项对账(本地 docs/nova-market/,待 docs-push):

  • 13 项 In Scope 分三类:完全对齐 5(三策略参数模型 + 金额/间隔/方向采样 + 派生载荷)/ 部分 3(反馈环·滑点失败熔断·成本估算)/ 射程外 5(AMM 估算块 UI·滚动锚价·方向校验·代币税探测·滑点容忍重构)
  • 筛出真依赖 BE 的项,新建 backend/需补给BE的接口字段清单(PRD未交接项).md(每项给 接口/方向/FE 消费点/BE 须返字段/缺口)
  • 澄清易误判点:滚动锚价用每 tick 观测 spot 价均值近似 K 线、已闭环且 AC13 测过,非卡 BE kline 模块;AMM 块走链上 preflight 直读池子储备,纯 FE 可算

🗂️ 落地 bob 2026-06-02 口头拍板「三项本期不做」(更新 3 份对账/交接 doc + 清理):

  • ① 代币税「探测失败禁启动」废规(承接白名单恒 0%)② 守价硬熔断(净损 30%/笔数 1.5×/量 105%)+ 响应延迟(30/15/5s)下期、标 deprecated、QA 跳过、FE 留半成品 ③ MEV 确认退场
  • 清掉 FEAT-009-v2-fe-breakdown.md 残留的 live MEV endpointmev-loss-rate 等)+ 池子滑点 endpoint,加时效横幅指向权威对账文档

🛠️ 反馈环输出兜底修复(commit 4a7e124,TDD):

  • 原实现 PATCH /derived 失败即 return,连本地 updateDerived 都跳过 → FE 引擎自身节拍也不减速(AC14 bug:QA 2026-06-02 实测「减速写不回」)
  • 改「先本地应用 → 再 best-effort PATCH → 失败仅 warn 不回滚」,瞬时失败不丢调参、下个 tick 自然重试;+2 单测,引擎 229 测试全过

🔎 PATCH /derived 失败错误码日志(commit a20edaa,TDD):

  • 原 catch 吞错误、QA 报不出响应码(zz:「代码看不出 bug,给我响应码」)→ 新增 describePatchErrorBackendError(业务码)/401/后端不可达 压成一行写进 task 日志,下次复测直接给 zz 响应码定位(对应他怀疑的 4 个原因);+1 单测

🤝 与 zz 收敛三个接口问题 + 确认文档新鲜度

  • 查 docs 仓库提交记录:06-02 前 0 提交,FE 本地 .docs/ 已是最新 → 是 zz 改了代码没推文档,非 FE 落后
  • zz 回复 + 推 ws.md
    • PATCH /derived:代码核查 task.go:663-730 OK,要实测响应码定位(FE 已加日志,待 QA 复测)
    • native-price:端点在,但 Moralis 账户欠费 → 56/97 都 500,FE $500 fallback 兜着,待运营付费 / Binance fallback(zz 规划未实施)
    • stat_updated 真 bug:BE listener 从来没 publish(文档写了没实现,zz grep 全仓 Go 无调用),已修 ef5bf84 + 推 ws.md;FE handler 早按契约建好且已测、无需改(已同步本地 ws.md 验证 wsService 拆 payload / 字段 / wei 单位全对)

🧱 重建 bsc 测试产物 + 推送远端(commit f92a2b0):

  • build:bsc:test 重建 build/ 产物;修了 build/.gitignore 忽略导致新 hash main.js 漏加的坑(git add -f 全量、git 识别为 rename、index.html/asset-manifest 与文件一致);git push origin test
  • task.stat_updated 从未被 BE 推送(zz 2026-06-02 挖出确认):文档(对接指南§6/task.tick§72/概览§238)写了 listener 没实现 → FE 此前拿 BE 绝对值实为 HTTP poll 兜底驱动、非 WS;zz ef5bf84 已修真推 + ws.md 同步。
  • 反馈环进度比输入读 runtime_stats(GET,已 BE 权威),不是 stat_updated 混合值 —— 订正先前误判;generatedVolume/spentBudget 混合值影响的是完成判定,与反馈环调参输入无关。
  • 6.3 完成判定混合值不能 naive 去本地累加:本地累加的 spentBudget 承重于每笔预算限额(tick.ts:953 remaining = maxBudget − spentBudget),去掉会超花预算 → 正解是拆字段(FE-intent vs BE-absolute 分存),列为 tech-debt 待方案(stat_updated 上线后更值得做)。
  • native-price 当前不可用但有兜底:BE 端点在、Moralis 欠费 56/97 都 500,FE $500 fallback 保证 gas 估算照常;待运营付费或 Binance 公开 API fallback。

上午 commit(test 分支已推远端 f92a2b0

Section titled “上午 commit(test 分支已推远端 f92a2b0)”
  • 4a7e124 fix(feedback): PATCH /derived 失败时本地仍写回反馈环调整 (AC14)
  • a20edaa fix(feedback): PATCH /derived 失败日志记真实错误码 (定位 AC14)
  • f92a2b0 chore(build): 重建 bsc 测试构建产物 (build:bsc:test)

FEAT-009 反馈环三策略全激活 + progress_stuck 卡死防护(与 BE zz 三方案合力)

Section titled “FEAT-009 反馈环三策略全激活 + progress_stuck 卡死防护(与 BE zz 三方案合力)”

主线节奏:下午先逐条修 QA 2026-06-02 反馈环 bug(只触发 1 次 / 误减速 13.81 / 卡片不可见)→ 三策略反馈环全部激活(做活跃度改按量、推价接入 pumpProgressRatio、守价 D3 价偏累计器经 bob 拍板上线)→ 补 PRD §9 防雪崩硬约束(±20% 累计封顶 + lambda 补夹)→ 与 BE 合力收敛 progress_stuck(派单卡死)三套方案(A 上报 swap-attempt + safeguard 兜底 / B failed 终态 / C 滑点真暂停)→ 终态自愈 + 取消 reason 字典对齐 v2.3 → AC14 日志补齐 → 重建产物推 test。

🔁 反馈环三策略全激活 + QA bug 修复

  • bug5 反馈环整轮只触发 1 次c155c67):原只有 10min 定时,小目标量(DDD1 100 笔本应每 ~16 笔触发)整轮才触发 1 次 → 补「按累计成交笔数」触发,txCount 越过 step=max(1,round(目标÷6)) 即再跑,与 10min 取较短;触发后重置基线防边界连发。
  • 做活跃度进度比 13.81 误减速0755c52):QA 报跑 4h17m 实际量 $302/预期 $1785≈0.17 本应加速却显示「13.81 减速」。根因:统一按笔数算 actual ÷ (lambda×elapsed),而 lambda 被反馈反复改写又回分母 → compounding 雪崩(减速→分母变小→比值变大→更减速)。改为 实际成交量 ÷ (目标量 × min(1,已用时/24h)),分母固定不随调参漂移,与 QA/PRD 完成口径一致。
  • ±20% 累计封顶 + lambda 补夹防雪崩f55f314):补齐 PRD §9 硬约束。clampBaseSize 基线从「每轮被改写的当前值」改为启动基线(不再越缩越小);新增 clampLambda 夹在 [0.8×, 1.2×启动](旧实现 lambda 完全没夹会无界复利);首 tick 懒加载捕获 launchBaseline
  • 推价接入 pumpProgressRatiof6d74ba):推价偏置那条原先休眠(引擎从不喂推进比)。Task 新增 startPrice(首 tick 捕获),computePumpProgress = (现价−起价)/(目标价−起价)÷(已用时/用时) → 落后 <0.9 即偏置 +0.05(dump −0.05),封顶 0.85/封底 0.15;缺起价优雅退化只调 size/λ。
  • 守价 D3 价偏累计器接入,激活反馈环e4226ff,bob 拍板):PRD §9 守价只给指标没给阈值,FE D3 临时值此前因引擎未喂 priceOutOfBandRatio 而 no-op。bob 2026-06-02 拍板「30%/10% 按推荐来,看效果」 → 新建 priceBandTracker.ts(时间加权带外时长占比,独立成模块避开 tick↔feedback 循环依赖),tickPriceSupport 每 tick 记观测 → D3 生效(>30% ×1.15 拉回 / <10% 不调)。
  • 可见性两修:on-pace 容忍带(0.8~1.2)原本完全静默致 QA 误判「没触发」→ 每次触发记一条 info「反馈环检查:进度比 X.XX 在容忍带,本轮不调整」(3662602);运行中卡片唯一 log surface RecentWarnBanner 只渲 warn、反馈环日志全是 info → 新增 FeedbackStatusLine 展示最近一条「反馈环」日志(三策略通用),BE 缺 actual_trade_count 时也记 info 点根因(34ba6a0)。

🚧 progress_stuck 派单卡死防护(FE×BE 三方案合力,覆盖三处诊断真空)

  • 方案 A —— FE 上报派单失败/跳过1664c97,配 BE 3cbcb17):新增 reportSwapAttempt → POST /tasks/:id/swap-attempt {outcome,reason}(fire-and-forget),emitSignedSwap 两个非成功出口上报(gas 预检不过=skipped+balance / 广播失败=failed+SkipReason 映射)。BE 据此精准判定「30min 0 成交 AND 有失败上报 → 暂停」,守价带内空闲(0 上报)不误伤
  • 方案 A 兜底 —— safeguard.progress_stucke309328,配 BE bebcaf6):BE「running 且距 last_swap > 30min → PauseBySystem」覆盖派单全 skip(不触发 5 连败熔断)/ 减速到不可见慢速 / 余额耗尽漏判。FE 加 PAUSED_REASONS label(提示查余额/流动性/滑点)+ safeguard handler toast。
  • 方案 B —— task.failed 终态接回5932b7c,配 BE 46d31f4 PM 拍板):24h 内 2 次 progress_stuck → 升级 failed。重新接回 task.failed 订阅(早先 BE 用 cancelled 表达失败时删过)+ FAILED_REASONS 字典 + store.fail;UI 侧(红「失败」Pill / 不显恢复按钮 / dropLocallyTerminal 自愈)已现成无需改。
  • QA 回归补项d56b0a8):QA doc §7 补 progress_stuck 自动暂停 + 反馈环 ±20% 防雪崩回归项。

熔断 / 终态一致性

  • 滑点连续失败熔断改真暂停不自恢复360d45c,C 方案 FE/BE 拍板):原实现 5 连败设 60s 内部冷却、status 留 running 自恢复 → BE paused / FE running 状态分歧(BE 2026-06 反馈)。改 = 真本地 pause 不自恢复(与越界、spec §11#6 一致),移除整套 60s 冷却自恢复机制,需用户排查后手动 /resume。
  • 首页最近活跃任务终态自愈e9021bd,QA #3):/home/active-tasks 不返 status、FE 硬当 running,预算耗尽/归档取消 FE 不推 BE → 完成任务持续显示运行中(推价完成 5min 仍 running)。新增纯函数 dropLocallyTerminal 按 backendTaskId 剔除本地已知终态项(只剔终态、保留在跑计数防 txCount 跳变)。
  • 取消 reason 字典对齐 v2.3faf452e):CANCELLED_REASONSwallet_changed/token_switchedresolveReason 加 fallbackLabel,未注册 reason 兜底「已取消」不回显英文裸 key。

🧾 AC14 反馈环日志补齐fddea90):每次触发日志补「调整前后参数值(单笔 $A→$B、速率 C→D/s、偏置 E→F,仅含实际变了的字段)」+「调整后 30min 进度比」(一次性回看 timer 到点回算并记日志),抽 buildFeedbackInput 供 tick 与回看共用。

🧱 重建 bsc 测试产物 + 推送远端a59d3e1):build:bsc:test 重建并 git push origin test;本地引擎+ws+chain 全套测试全绿(feedback 28 / engine 261 / services-ws 83 / engine+chain 463 各节点均通过)。

  • 守价 D3 阈值由 bob 钦定 30%/10%(2026-06-02):「按推荐来,看效果」→ 守价反馈环正式从 no-op 转激活,标注「观察期」,待 QA 实跑确认拉回方向对。详见记忆 [[feat-009-feedback-loop-three-strategy-state]]。
  • progress_stuck 三方案分工(FE×BE 合议):A=FE 上报 swap-attempt 让 BE 精准判定(避免误伤守价带内空闲)+ safeguard 30min 兜底;B=24h 2 次升级 failed 终态;C=滑点 5 连败改真暂停。三者合力消除「BE paused/FE running 状态分歧」与三处检测真空(全 skip / 不可见慢速 / 余额耗尽)。
  • 反馈环进度比分母必须固定、不随调参漂移:做活跃度按量、各策略 baseSize/lambda 基线一律钉「启动基线」并 ±20% 封顶 —— 否则反馈量自身进入分母造成 compounding 雪崩(13.81 / lambda 1/87 同源)。
  • info 级反馈环日志需独立 UI surface:卡片原只渲 warn,反馈环正常运行(info)彻底静默 → 必须有 FeedbackStatusLine 才能让 QA 验证触发频率,否则「修好=看不见=被误报没触发」。

下午 commit(test 分支已推远端 a59d3e1

Section titled “下午 commit(test 分支已推远端 a59d3e1)”
  • e9021bd fix(home): 最近活跃任务本地终态交叉过滤自愈 (QA #3)
  • c155c67 fix(feedback): bug5 按成交笔数触发(目标÷6,取较短) + 守价去掉错误 universal 退化
  • 3662602 feat(feedback): on-pace 也记一条「反馈环检查」info 日志 (bug5 可见性)
  • 360d45c fix(engine): 滑点连续失败熔断改真暂停不自恢复 (C 方案, FE/BE 2026-06)
  • 34ba6a0 fix(feedback): 运行中卡片显示反馈环活动 + BE 缺笔数也记日志 (QA 2026-06-02)
  • 0755c52 fix(feedback): 做活跃度进度比改按成交量算,修 13.81 误减速 (QA 2026-06-02)
  • faf452e fix(ws): 取消 reason 字典补 BE v2.3 新 key + 未注册兜底「已取消」
  • fddea90 feat(feedback): 补齐 AC14 反馈环日志(调整前后参数值 + 调整后30min进度比)
  • f6d74ba feat(feedback): 推价接入 pumpProgressRatio,激活「未按预期推进→偏置±0.05」(PRD §9)
  • e309328 feat(ws): 接 BE progress_stuck 兜底 safeguard (bebcaf6)
  • f55f314 fix(feedback): ±20% 累计封顶钉死启动基线 + 给 lambda 补夹(防雪崩)
  • d56b0a8 docs(qa): 补 §7 progress_stuck 自动暂停 + 反馈环 ±20% 防雪崩回归项
  • 5932b7c feat(ws): 接回 task.failed 终态 handler (BE 方案 B progress_stuck_repeated)
  • 1664c97 feat(engine): FE 上报派单失败/跳过 → POST /tasks/:id/swap-attempt (progress_stuck 方案A)
  • e4226ff feat(feedback): 守价 D3 价偏累计器接入,激活反馈环 (bob 2026-06-02 拍板 30%/10%)
  • c6f14e9 docs(feat-009): 守价 D3 激活 + PM 1-6 回执 + 自决项 AC 验收影响
  • (另含 5 个 chore(build) bsc 测试产物重建,最终态 a59d3e1
  • 三策略反馈环实跑验收:QA 复测做活跃度(按量进度比 / 不再误减速)、推价(落后→偏置 +0.05)、守价 D3(带外 >30% 拉回)调参方向与日志,确认 ±20% 封顶 + lambda 夹住雪崩。
  • progress_stuck 三方案端到端联调:待 BE 3cbcb17/bebcaf6/46d31f4 部署测试服后,跑真实慢任务验证 A(swap-attempt 上报 + safeguard 暂停,守价不误伤)/ B(2 次升级 failed)/ C(滑点真暂停不自恢复)。
  • PATCH /derived 响应码定位:QA 复测读 FE 新增错误码日志 → 转 zz 精确定位(测试服部署 / task 非 running / 401 / UUID)。
  • docs/nova-market/ 本地对账/交接文档到 docs-site;跟运营推进 native-price(Moralis 付费 / Binance fallback)。
  • PATCH /tasks/{id}/derived 实测失败根因待定 —— 待 QA 复测读 FE 新增的错误码日志,转 zz 精确定位(测试服部署 / task 非 running / 401 / UUID)。
  • GET /chain/native-price 因 Moralis 账户欠费返 500,待运营付费;FE $500 fallback 暂兜。
  • progress_stuck 三方案(A/B/C)依赖 BE 3cbcb17/bebcaf6/46d31f4 部署到测试服后才能端到端联调,FE 侧已全部接好待验证。
  • 守价 D3 30%/10% 为 bob「看效果」观察期取值,方向/幅度待 QA 实跑数据确认,可能再调。