修 batch25 一条钉住排版而非行为的断言;硬风险排在重问之后
batch25 那条断言写的是 `'or bool(reask_why))' in src`,它把「reask_why 必须是 force_queue 那一行的最后一项」也一起钉住了 —— 而那只是当时的排版,不是这条规矩的 内容。往一票否决里加「上游标了硬风险的候选也交人」之后,那一行结尾变成 `bool(risk_why))`,断言就红了,而被它保护的行为一个字都没变。改成取出那一行、 只看 reask_why 在不在里面。 同时把交人原因的次序改回来:重问放行仍排最前(2026-09-09 拍板),硬风险紧随其后。 原先我把硬风险排到了最前,那等于顺手推翻上一次拍板 —— 而两者实际上几乎不会同时 出现(上游标了硬风险的票判决多半不是「候选」,走不到重问那一步),这个次序之争 是空的,不值得为它改口径。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
c9b468e7a2
commit
cabcf04397
|
|
@ -686,12 +686,14 @@ def _route_one(c, view, params, stock_params, brake_active, now, dry_run, out,
|
|||
else "档位 full")))})
|
||||
else:
|
||||
pid = _make_proposal(c, price, verdict)
|
||||
# 交人的原因按从具体到笼统取: 上游标的硬风险 → 重问放行 → 候选自带的 (关注判决等,
|
||||
# 交人的原因按从具体到笼统取: 重问放行 → 上游标的硬风险 → 候选自带的 (关注判决等,
|
||||
# 见 action_engine.verdict_confirm_why) → 来源强制的 (研究证据走弱那类减持) →
|
||||
# 深档补仓那条老规矩 → 研判不可用 → 档位。
|
||||
# 硬风险排在最前 (2026-09-10): 它是「有人看见了不对劲」, 比「曾被驳回」更该先说;
|
||||
# 重问放行紧随其后, 它是这张提议第二需要人知道的事 (曾被驳回、什么变了、可能买不上)。
|
||||
why = (risk_why or reask_why or c.get("confirm_why") or src_why
|
||||
# 重问放行仍排在最前 (2026-09-09 拍板): 它是这张提议最需要人知道的那件事
|
||||
# (曾被驳回、什么变了、可能买不上)。硬风险 (2026-09-10 加) 紧随其后 —— 两者
|
||||
# 实际上几乎不会同时出现: 上游标了硬风险的票判决多半不是「候选」, 走不到重问那一步,
|
||||
# 所以这个次序之争是空的, 不必为它推翻上一次拍板。
|
||||
why = (reask_why or risk_why or c.get("confirm_why") or src_why
|
||||
or ("深档补仓强制确认" if c.get("needs_user_confirm") else None)
|
||||
or ("研判不可用, 降级人工确认" if verdict.get("degraded") else None)
|
||||
or ("新建仓档位 propose_only" if is_open else "档位 propose_only"))
|
||||
|
|
|
|||
|
|
@ -260,8 +260,15 @@ def test_u1_sender():
|
|||
def test_route():
|
||||
src = io.open(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
|
||||
"app/services/proposal_service.py"), encoding="utf-8").read()
|
||||
assert 'or bool(reask_why))' in src, "重问必须进 force_queue 一票否决"
|
||||
assert 'reask_why or c.get("confirm_why")' in src, "重问的原因要排在最前, 人最需要知道它"
|
||||
# 2026-09-10 改了断言的写法, 意图不变。原先写的是 `'or bool(reask_why))' in src`,
|
||||
# 它把「reask_why 必须是那一行的最后一项」也一起钉住了 —— 而那只是当时的排版,
|
||||
# 不是这条规矩的内容。同日往一票否决里加「上游标了硬风险的候选也交人」之后,
|
||||
# 那一行结尾从 `bool(reask_why))` 变成 `bool(risk_why))`, 这条断言就红了,
|
||||
# 而被它保护的行为一个字都没变。现在改成取出那一行、只看 reask_why 在不在里面。
|
||||
_fq = src[src.index("force_queue = ("):src.index("auto_exec = (not force_queue)")]
|
||||
assert "bool(reask_why)" in _fq, "重问必须进 force_queue 一票否决"
|
||||
# 2026-09-10 往这条链里插了「上游标了硬风险」一档, 排在重问之后 —— 重问仍是最前一项。
|
||||
assert src.index("why = (reask_why") > 0, "重问的原因要排在最前, 人最需要知道它"
|
||||
assert '"重问后仍驳回:" + _rsn' in src and '_hn["reask_seq"] = 1' in src
|
||||
assert 'reask_service.commit(code, _rk, price)' in src
|
||||
i = src.index("_rk = c.get(\"reask\") if not dry_run else None")
|
||||
|
|
|
|||
|
|
@ -187,8 +187,11 @@ def _():
|
|||
assert line, "找不到 force_queue 那一行,这道检查的前提没了"
|
||||
seg = src[src.index("force_queue = ("):src.index("auto_exec = (not force_queue)")]
|
||||
assert "risk_why" in seg, "硬风险没有算进一票否决:full 档下带风险的票会被自动买入"
|
||||
# 而且交人的原因要能说出是风险,不能笼统说「档位 propose_only」
|
||||
assert "why = (risk_why or" in src, "交人原因没有把硬风险排在最前"
|
||||
# 交人原因要能说出是风险,不能笼统说「档位 propose_only」。
|
||||
# 次序上重问放行仍排在最前(2026-09-09 拍板),硬风险紧随其后 —— 两者实际上
|
||||
# 几乎不会同时出现:上游标了硬风险的票判决多半不是「候选」,走不到重问那一步。
|
||||
assert "risk_why or c.get(" in src or "or risk_why or" in src, \
|
||||
"交人原因里没有硬风险这一档"
|
||||
|
||||
|
||||
@case("E2 硬风险的判据取的是候选硬数字里的 risk,与那条更窄的旁路同一个键")
|
||||
|
|
|
|||
Loading…
Reference in New Issue