跳转到内容

2026-06-09

v2.3 + PM/QA 复测收尾日,并为 novamarket 阶段性暂停开发做职责边界梳理。上午清守价单笔下限残留;下午响应 Ada 推价「per-wallet USDT 分布不均、60min 不达标」——前端补启动前可用 USDT 容量预警(治标),与 BE 确认运行期 balance-aware 选钱包(治本,已落 BE commit 6259dda);配合 BE v2.3 两阶段落地推价 phase「切换即上报」全链路(出站 PATCH + 入站 WS 同步)。当日核心产出是应要求系统性梳理「当前由前端承担、但极其不合理、应划归后端」的功能点,下期反馈给产品 PM。

守价单笔下限残留清理(上午)

Section titled “守价单笔下限残留清理(上午)”
  • 898f5d2:守价去掉 gas×8 单笔下限,三策略运行时统一无 gas 启发式门槛(对齐「BNB 不足不阻断、由 simulate revert 兜底」基线)。

FEAT-009 推价 —— Ada per-wallet USDT 分布问题(下午)

Section titled “FEAT-009 推价 —— Ada per-wallet USDT 分布问题(下午)”

起因:Ada 报推价「启动前判断 USDT 足够,但交易时分布不均,个别钱包当前笔 USDT 不够、下一笔卖完又够,跳过几次 → 60min 到了目标价没达成」。

定位:① 运行期选钱包是 BE 轮询(round-robin)、余额盲;② FE 启动前校验是聚合口径——把 BNB 不足(发不出 swap)钱包的 stranded USDT 也算进去 → 「聚合假足够」。

  • 000f322治标 · FE):启动前按「BNB 够 gas 的钱包」算可用 USDT 容量预警——纯函数 walletCapacity.usableAssetShortfall(BNB≥阈值才计入可用容量,stranded 记账,给真实缺口;TDD 4 例)+ UsableUsdtCapacityHint非阻断 amber,尊重 spec「BNB 不足不阻断启动」,仅在「聚合够但可用不够」时补,且与现有硬拦截不重复)。
  • 治本 · 归 BE(已落地):BE 实装完整 balance-aware 钱包过滤(commit 6259dda)——派 tick 前查 BNB+USDT+token,「推价 up: USDT 够」才派、不够顺延;WBNB 两跳价退化只查 BNB+USDT、后续 PR。我给的「充足性检查走逐腿原生单位(买腿比 USDT、卖腿比 token balanceOf),不需 USDT 估值 → WBNB 两跳是伪缺口」结论 BE 采纳。

FEAT-009 推价 v2.3 两阶段 phase「切换即上报」全链路(下午)

Section titled “FEAT-009 推价 v2.3 两阶段 phase「切换即上报」全链路(下午)”

对接 BE tasks-phase.md(commit ba9909f)。阶段决策仍在 FE(达价现判 + 相位持久化 taskStore + 跨 tab rehydrate + BE safeguard 5/6b 兜底),BE 仅被动接收做分阶段算账——上报、非决策

  • 9746a47出站):达价切维持期 → FE PATCH /tasks/{id}/phase 通知 BE(patchTaskPhaseOnBackend + pushTaskPhase fire-and-forget;无 backendTaskId 不推、失败 catch 不阻塞 tick;TDD 2 例)。
  • 9074a5c入站):接 WS task.phase_changed → 其它 tab/跨设备同步 pumpPhase(同浏览器 persist storage 事件覆盖不到别的设备,WS 是唯一跨设备通道)+ 修正 PatchPhaseResponse 类型(含回显 phase);TDD 3 例。

缺口 1(phase)+ 缺口 2(Ada 余额)前后端均已收口:缺口 1 = BE 接口 ba9909f + FE 出/入站;缺口 2 = BE balance-aware 6259dda(治本)+ FE 启动前预警(治标)。

🔴 职责边界梳理 —— 当前由前端承担、但极其不合理、应划归后端的功能点(核心 · 下期反馈 PM)

Section titled “🔴 职责边界梳理 —— 当前由前端承担、但极其不合理、应划归后端的功能点(核心 · 下期反馈 PM)”

背景:本期多个 QA/PM 问题(钱包选择、Ada per-wallet USDT、阶段切换…)同源——把「需要权威/持久/全局协调」的决策放在了前端。前端的结构性硬伤

维度前端的硬伤
权威且新鲜的真值余额是 5 秒陈旧 RPC 快照;成交计数是本地乐观值(已知少于 BE)
跨 tab/设备单写者协调BE 把 tick 广播给所有连接、靠 tick_seq 先到先做;leader 选举只 gate 了 legacy 调度
跨会话持久态计数器/游标/价格窗口全是内存态,关 tab 即失、刷新即重置
与节拍-完成-预算调度耦合节拍/完成检测/轮询调度已在 BE,单拎一项给 FE 必脱节
审计/台账权威链上 task_id_hex 与 BE swap_events 严格 JOIN,成本报告以 BE 为准
信任边界/爆炸半径FE 持私钥负责签名,但编排权留 BE 才能限制单个跑飞的 tab

判据:一个功能满足上述任一条 → 应是后端。按此判据,当前最该从前端收回后端的功能点(按优先级):

  1. 实时反馈环控制器(feedback.ts —— 每 10min 按「进度比」动态调 baseSize/lambda/bias 的闭环控制器。问题:① 进度比用的是本地乐观计数(偏低 → 误判落后、错误加速);② 只在 leader tab 跑——用户关掉那个 tab,任务还被 BE 推着跑,但自适应调参整个停摆,退化成开环;③ 多 tab persist 整 blob last-writer-wins 互相覆盖。一个驱动真金白银下单参数的控制器,输入脏、还吊在某个浏览器 tab 的生死上 → 应整体归 BE(BE 有权威累计 + 持久 + 单实例)。

  2. 熔断 / 风控计数器(5 连败暂停、5 连 skip 暂停、10min 滑点熔断、daily_loss_cap) —— 全是per-tab 内存计数器,刷新即归零、多 tab 各算各的。保护亏损/空转的风控下限,绝不该放在易失的前端态 → 权威判定归 BE(持久 + 全任务汇总),前端那份只当「即时止损的本地建议」。

  3. 完成 / 达价权威判定 —— 「达目标价 / 达 24h 量 / 预算用尽」现由 FE 引擎自判再推 BE。判定依赖权威累计量 + 权威价格,FE 都只有近似。应 BE 权威、FE 仅做乐观 UI。(Ada「60min 没达标」本质就是个完成/进度判定问题。)

  4. 价偏累计器 / 滚动守护带(priceBandTracker.ts —— 守价 D3 反馈靠「越界时长占比」,需要连续、跨会话的价格采样;FE 只能 tab 开着时用本地 5s 价窗近似(已知滚动带漂移/分叉)。需要 7×24 连续观测的累计器不该依赖浏览器开着 → 归 BE。

  5. 预算硬顶的「执行」 —— 花钱的天花板必须 BE 强制(爆炸半径),否则有 bug / 被关的 tab 无法保证不超花。FE 只做预览/提示。

对照——这些留前端才对(边界正例,避免矫枉过正):私钥托管 + 签名 + 广播(FE 持钥,BE 给不了);nonce 执行(在签名端,但单写者靠 leader 协调);UI 乐观计数(display-only,事后 BE 对账);启动前预期提示;执行失败回报信号(上报非决策)。

一句话给 PM:闭环控制器、风控下限、权威累计/完成判定、跨实体协调、经济真值——都应在后端;前端只有 5 秒陈旧快照 + 乐观本地态 + 关 tab 即失 + 多 tab 无全局权威,拿这些做上述任何一类决策,必然在「数据脏 / 刷新归零 / 多端撞车 / 与调度脱节」上栽。本期「钱包选择」已按此把治本收回 BE(commit 6259dda),上述 5 项是同类问题,建议下期一并规划归属。

  • 9461d7b(守价下限)/ d21456b(Ada 预警 + phase 上报)/ 10ad544(WS 入站同步)。改源码必重建 + git add -f build/ + push。当前 bundle main.b1bab4d5.js
  • Ada per-wallet USDT:治标(FE 启动前可用容量预警)+ 治本(BE balance-aware 选钱包,commit 6259dda)。充足性检查走逐腿原生单位(买腿比 USDT、卖腿比 token),不需 USDT 估值 → WBNB 两跳是伪缺口。
  • 推价 phase:决策留 FE(达价现判 + 持久 + safeguard 兜底),只「切换即上报」BE 做分阶段算账,不迁实时决策;出站 PATCH + 入站 WS 双向闭环。
  • 🔴 职责边界(见上):5 项前端越界功能点梳理完毕,附判据 + 边界正例,下期反馈 PM 规划归属
  • novamarket 阶段性暂停开发 —— 本期 v2.3 + PM/QA 复测已收口;上述「职责边界 5 项」待下期反馈 PM 后规划归属与排期。
  • 待 QA/zz 复测(须硬刷新拿新 bundle main.b1bab4d5.js):① Ada 启动前可用 USDT 预警;② 推价 phase 出/入站全链路(需 BE phase 接口 + WS task.phase_changed 联调)。
  • WBNB 两跳价 token 余额判定:BE 标「后续 PR」,当前全 USDT 对场景不受影响。