跳转到内容

2026-06-03

守价 QA 问题全程跟进,已知问题全部修复并部署(077a015)。

FEAT-009 做市引擎 v2.1 —— 守价(price_support) QA 3 问根因诊断 / 修复 / PM 调参 / 与 BE(zz) 协同

Section titled “FEAT-009 做市引擎 v2.1 —— 守价(price_support) QA 3 问根因诊断 / 修复 / PM 调参 / 与 BE(zz) 协同”

主线节奏:QA Ada 在 task 606b5026 报守价 3 个问题 → 逐条做系统化根因诊断(数学推算 + 时区对照 + BE tick 数据互证)→ 定性为「2 个产品设计/预期 + 1 个 PRD 设计缺口,均非代码 bug」→ FE 侧做透明化与展示收口 + PM 拍调参(70/30 + 地板)→ 写 BE spec(时段权重豁免 + 越界快路径)交 zz → BE 94ae565 实施豁免 → FE 双重保险 → 更新对账 doc + 重建产物部署 + 通知 QA 复测。

🔎 守价 3 问逐条根因(FE 诊断,BE 实测互证)

  • 问题1「跌破后 ~12min 才首笔」= 时段权重(非 bug):引擎判定用 AC13 滚动带(无卡死),但 BE 按 PRD §6「实际间隔 = 基础间隔 ÷ 时段权重」,曼谷 02–09 段 0.3x → 240s÷0.3=800s≈13min。时区一对即破案:QA 09:56(北京)=08:56(曼谷) 落在 0.3x 窗口;BE 实测 16min 推 7 次 tick(10:00 北京=09:00 曼谷=1.5x→137s)完全自洽。代码符合现行 PRD §6,漏在 PRD 把”铺量节奏权重”误用到”越界防守”
  • 问题2「band 区间不准确」= 展示口径(非判定 bug):卡片显示静态配置带、引擎用滚动带。
  • 问题3「预计360 vs 实际3」= 事件驱动(完全预期):360=满节奏理论上限,守价触边才出手、价稳不交易,实际远低正常。

🟦 FE 修复(透明化 + 展示收口,5 commit)

  • b0a6273:卡片漂移时并排「撑/压价(配置)」+「当前守护带(滚动)」+ 带内不护盘决策日志(新增生产导出 getLiveSupportBand)。
  • 927a9a6:启动预览「预计成交笔数(满节奏上限)」+ 事件驱动澄清 note。
  • 41c61b2:「360/弹药/240 三处口径不一致」收口——讲成一个故事;守价排除 BUG-085「超支」假警报(守价预算硬封顶不会超支);措辞对齐 PM「事件驱动,实际取决于行情」。

🟪 PM 2026-06-03 调参(改 AC13)+ FE 实装 54383d2

  • ① 滚动锚价权重 50/50 → 70/30(更黏配置、减缓单边漂移);② 滚动 support 加防守地板=配置支撑×95%(钉住防守、不被单边下行让下去)。提为常量;新增 getSupportFloor + 卡片「防守地板」行;AC13 单测同步(含钉地板用例)。

🤝 问题1 正解:时段权重豁免(FE 写 spec → BE 实施 → FE 双重保险)

  • 新建 docs/nova-market/FE-BE-守价越界响应-时段权重豁免与快路径交接.md:A 豁免(正解)+ B 越界快路径(增强)+ PRD §6 例外建议 + 证据链。
  • BE 94ae565 A 方案简化版:readInterval 拆 price_support 独立 case、整体豁免时段权重(13min→240s,5.5× 提速);做活跃度仍按 PRD §6 应用。
  • FE 0314deb 双重保险:派生 session_weight_enabled 守价改 false(做活跃度保持 true);纯契约层、对本地零影响;顺带消 Decision 3「卡片间隔 240≠实跑」。
  • B 越界快路径 zz 已答:需新建独立守价价格采样 worker(30-60s 读 getReserves,1-2 天)→ 先排期、A 不够再做。

(下午续)守价反馈环「谎报/幽灵单笔」深修 + Path A 对数正态采样 + 单笔系数 B1

Section titled “(下午续)守价反馈环「谎报/幽灵单笔」深修 + Path A 对数正态采样 + 单笔系数 B1”

🔧 守价反馈环两实锤(回 BE/QA b9e42bf3)

  • 1d46b11:±20% 封顶时不再谎报「积极拉回 ×1.15」(值已撞封顶、×1.15 被夹平=无净变化),改记「已达封顶维持」、不重复 PATCH/排回看(adjustmentHasNetChange)。
  • b6192a8:守价积极拉回只调 λ、不缩放/显示 baseSize——守价单笔取 cfg.orderSizeMin/Max、根本不读 baseSize,旧代码缩放/显示 baseSize → toast「单笔 $12.77」与实际成交 $190 对不上(幽灵单笔)。
  • 与 BE 划清层:BE-004(239ebab 完成判定兜底) 与这两实锤完全无关;反馈环 + 守价采样整个在 FE(zz 确认 BE 代码无此),1d46b11/b6192a8 纯 FE。

📊 PM「守价/做活跃度单笔与笔数口径拍板表」决策协助 + Path A 落地

  • 点出全表前提冲突:表假设守价对数正态,但代码是均匀采样(base 无关、均值=中点)→ 表里”下限>base 顶起均值""B2-B1 耦合”对守价不成立;且 PRD §5 本要求守价对数正态 → 守价代码偏离 PRD。建议 Path A(守价改对数正态,对齐 PRD §5),PM 选定。
  • 71fd53a Path A + B1 落地:守价单笔 均匀→对数正态(复用 lognormalSizeUsdt,守价+做活跃度共用);B1 系数 0.5%/5%→0.1%/2%(守价专属常量、不动推价共用的 SIZE_MIN_BUDGET_PCT);回调 5a46ac0(avg 中点→共用 max(base,sizeMin));简化 41c61b2 note(预算/均额≈360 自洽,去掉”弹药<360”分叉句)。
  • 关键收益:B=5000 → 单笔 $5~$100(正好 = PRD 示例1「5~100」)、均值≈base=$13.89、预算/均值≈360=笔数节奏 → QA #3「三处对不上」数学上彻底消失。
  • 1530f4d:AC14 回看「N min 前」改按实际经过时长算(dueTs−FOLLOWUP_MS vs now),不再恒写「30min 前」——catch-up 补发时如实显示真实时长(QA「30min 内 8 条都标 30min 前」困惑根因)。

🗂️ 对账/交接 doc 更新 + 产物部署 + 通知

  • 对账清单 策略预估字段-实跑-PRD-后端接口-对账清单.md:头部加「2026-06-03 守价 QA 3 问收口」块;§1 守价表改 4 行;§0 速览补 FE/BE 已闭环。
  • 交接 FE-BE-派生公式与推价节奏交接.md:§7.4 守价系数 0.1%/2% + Path A 对数正态口径;§8.2 源码常量;PM #2 回执收口。zz 确认 Path A 0 代码改动(BE 不自采样守价、只吃 derived)。
  • 重建产物 4915b48077a015(main.1a4a3644.js,含全部守价修复)→ 远端已部署。
  • 群内多次回执(PM 调参、QA band/笔数/单笔均额/回看时间逐条、Path A 须知”守价单笔会明显变小=预期”),最终发「守价已知问题全部修复·已部署请复测」汇总(7 条 QA 问题 × 对应 commit)。
  • 守价 3 问均非代码 bug:②③ 是展示/预期(已修),① 是 PRD §6 设计缺口——时段权重不该套到守价”越界防守”,正解 = 改 PRD §6 例外 + BE 豁免(已落地)。
  • 滚动带漂移是 AC13 设计副作用(PRD §4 预期):护盘几笔把价拉回 → 滚动锚价跟着下移 → 现价落回带内停手;单边下行会把支撑一路让下去。PM 调参 70/30 + 防守地板 ×95% 缓解。详见 [[feat-009-price-support-rolling-band-drift]]。
  • Path A:守价采样均匀→对数正态:原均匀采样均值=中点(与 base 无关)是 QA「单笔均额=下限」「三处口径对不上」的总根;改对数正态中心 base + B1(sizeMin<base 不钳地板)后三处自洽、对齐示例1。
  • 守价单笔不读 baseSize(仅 orderSizeMin/Max):反馈环”×1.15”要真加大单笔须缩放 orderSizeMin/Max,b6192a8 仅调 λ;PRD §9 写 baseSize×1.15 但守价执行不用 baseSize,方向待 PM。
  • §11 净损30%硬熔断走方案 A 本期不做:地板 + 预算上限已覆盖”防守+兜底”;与 bob 2026-06-02「下期」一致。
  • 守价带内空闲故意 0 上报 swap-attempttick.ts:1304):BE progress_stuck 靠此区分健康空闲 vs 越界全失败,别给带内 skip 加上报。

(傍晚续)守价反馈环 toast 与实际成交对齐 + 价偏累计器跨刷新存活

Section titled “(傍晚续)守价反馈环 toast 与实际成交对齐 + 价偏累计器跨刷新存活”

🔧 QA「反馈减速/加速与实际交易不符 / 暂无样本」三连修

  • 4c89f44:守价卡片「间隔」改读 1/derived.lambda(生效间隔)→ 反馈 ×1.15 后显「209s(反馈环调整,原 240s)」,不再恒显启动固化的 240s(QA:反馈调 λ 但间隔字段没变、感知不到生效)。
  • 144b881:① 守价封顶文案按 adj 实际触及字段拼 → 只显「维持速率」、不显幽灵单笔(守价不读 baseSize,QA「维持单笔 $7.88 实际成交 $8~19」);② formatParamDelta/adjustmentHasNetChange 改用有效单笔(base 裁剪到 [min,max])→ 做活跃度小目标量 base<sizeMin 时不谎报「减速到 $0.80」(实际被下限裁回 $1);③「暂无样本」文案不再误称「价格尚未越界过」。
  • 526c580价偏累计器跨刷新存活——原纯内存 Map 刷新清零、QA 频繁刷新复测 → D3 占比永远攒不到 30%。改 localStorage 持久化(nova:pba:<id>)、内存空时 rehydrate、不计停机间隔;仿 AC14 pendingFollowups。+2 跨刷新测试,285 引擎测试全过。
  • 与 BE 划清:BE-004(239ebab 完成判定) 与这批无关;反馈环/采样/累计器整个在 FE(zz 确认 BE 无守价采样)。

关键决策追加:

  • 反馈 toast 一律按「有效成交口径」显示:守价无单笔只显 λ;做活跃度/推价显裁剪到 [min,max] 的有效单笔 → 根治「toast 值≠实际成交」一类(幽灵单笔 / floored 谎报)。
  • 价偏累计器须跨刷新存活:D3 验收必然要刷新查状态,内存态会让 D3 永远验不出 → 持久化是 robust 做法(同 AC14)。
  • b0a6273 feat(engine): 守价卡片显示滚动守护带 + 带内不护盘决策日志 (rec#1/#2)
  • 927a9a6 fix(strategy): 守价启动预览预估笔数标注「满节奏上限」+ 事件驱动澄清 (QA #3)
  • 54383d2 feat(engine): 守价滚动锚价 70/30 + 防守地板×95% (PM 2026-06-03 调参 AC13)
  • 0314deb feat(engine): 守价 session_weight_enabled 改 false 双重保险 (BE 94ae565 配合)
  • 41c61b2 fix(strategy): 守价启动预览三处口径收口 + 措辞对齐 PM (QA #3 / 360-弹药-240)
  • 1d46b11 fix(feedback): ±20% 封顶时不再谎报「积极拉回 ×1.15」、不重复 PATCH/排回看
  • b6192a8 fix(feedback): 守价积极拉回只调节拍 λ,不再缩放/显示无效的 baseSize
  • 5a46ac0 fix(strategy): 守价单笔平均金额按均匀分布中点算(后被 71fd53a Path A 回调)
  • 1530f4d fix(feedback): AC14 回看「N min 前」按实际经过时长算
  • 71fd53a feat(engine): 守价单笔改对数正态采样 (Path A) + B1 系数 0.1%/2% (PM 2026-06-03)
  • 4c89f44 fix(strategy): 守价卡片「间隔」反映反馈环调整后的 λ
  • 144b881 fix(feedback): 反馈环 toast 显有效单笔 + 守价封顶不显幽灵单笔 + 暂无样本文案
  • 526c580 fix(feedback): 守价价偏累计器跨刷新存活(localStorage 持久化)
  • (另含 4915b48/077a015/57a2146/d5f7979 多次 bsc 测试产物重建,最终态 main.5236ec6d.js 已部署)
  • 守价复测收尾:盯 QA 在新构建(main.5236ec6d.js)复测全部——Path A 单笔变小/三处口径自洽、反馈环 toast 与实际成交一致(无幽灵单笔/不谎报)、间隔字段反映 λ、价偏累计器跨刷新存活(D3 可正常验);问题① 凌晨曼谷 02–09(北京 03–10)段复现「13min→240s」对比。
  • 推本地文档到 docs-sitedocs-push-gitlab):对账清单 + FE-BE-守价越界响应 spec + FE-BE-派生公式与推价节奏交接(Path A/B1 更新)。
  • 跟 PM 推文档侧待办:PRD §5(守价对数正态已对齐,回写)、§6(守价豁免时段权重例外)、§AC13(70/30+地板+事件驱动)、示例1(笔数 240→360、单笔 5~100)、B3 做活跃度单笔系数混合口径钦定。
  • B 越界快路径排期跟进(zz 估 1-2 天;A 已把 13min→240s,A 不够再启动 B)。
  • 守价问题1 完整复测待凌晨时段:复现原始「13min→240s」对比须在凌晨曼谷 02–09(北京 03–10)段;其他时段仅能验”豁免生效(间隔恒 240 不漂)”。
  • B 越界快路径待排期:zz 估需新建独立守价价格采样 worker(1-2 天),A 方案先顶。
  • PM 文档待办(非阻塞 FE):PRD §5/§6/§AC13/示例1 同步 + B3 做活跃度系数混合口径钦定。
  • 本地 docs 待推 docs-site:对账清单 + 两份 FE-BE 交接 spec(含 Path A/B1)。