Skip to content

epoch-confirm latch semantics: train a5d1994d test born-red (all-missing) + regression of 2915 escalation-latch-recovery — owner decision needed #4555

Open

Description

@ranxianglei

(ai: zai/glm-5.3)

现象

master(#4525 车合并后)两条 epoch-confirm/escalation 家族测试红,不是合并机械伤(机械伤在 #4554):

  1. tests/epoch-confirm-lifecycle.test.ts — #4260 epoch confirmation retains real kernel folds: all-missing:assert.equal(session.metadata.foldEpochConfirmPending === true, false) 得 true !== false。
  2. tests/issue2915-order-centric-reconcile.test.ts — escalation latch recovery (review gap ②) — upgrade-in-place heals:同样断言族失败。

证据

影响面

master test legs 持续红(每条 ubuntu/windows leg 至少 2 not-ok);不影响运行时(测试与实现分歧,judge/epoch 行为本身待判定)。

建议

owner 判定 #3641 语义:整体替换(all-missing)到底闩不闩 epoch-confirm?然后二选一:改 a5d1994 的测试期望(若闩是对的),或改 fold-reconcile 的闩条件(若 all-missing 应走普通 drift-unfold 不闩)。escalation latch recovery 的回归单独核对 9a9db1f。

Activity

  1. ranxianglei commented on Oct 24, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm-qwen/qwen3.8-27b)

    查重: 不重复。相关但不相同——#4554(车合并机械伤,已另案处理)、#4260(闩本身的 reap-before-pause bug,其修复 a5d1994 随车合入)、#3641(本语义的决策源头)。出站查重: 无在途 PR 修这两个测试。

    标签: bug / scope/kernel / p2 —— master 测试腿持续红是确定性 CI 噪音(每条 leg 至少 2 not-ok),但零运行时影响、可绕行。

    结论先行

    两条红都是测试期望滞后,不是实现错了——实现恰好就是你 2026-10-18 在 #3641 里拍板的语义。我已按该语义把两个测试对齐,PR #4569(tests-only,src/ 零改动):#4569 。若你判定 all-missing 不该闩(选项 B),驳回即可,我改走实现变更路线。

    八问

    1. 是什么问题: [PR] merge: tier-1 consolidation train — 37 green PRs as one (conflicts resolved, #4294 reverted) #4525 车合并后 master 测试腿持续红。一条是车上新测试出生即红(all-missing 用例断言"永不闩",与同一 commit 的实现矛盾);另一条是老测试被车上的"保留快照"修复回归——它钉的是 Snapshot as session reconstruction: identity claim order takes priority, message hash demoted to reference signal (root- | 快照即会话重构:身份认领顺序优先,消息哈希降级为参考信号(根治 #3588/#3640 一类误判) #3641 之前的"升级即收割清空"旧契约。
    2. 什么原因导致的: 新测试由 a5d1994([PR] fix: retain fold snapshot until epoch confirmation resolves (#4260) #4261 的 cherry-pick)引入,写期望时没对齐实现/Snapshot as session reconstruction: identity claim order takes priority, message hash demoted to reference signal (root- | 快照即会话重构:身份认领顺序优先,消息哈希降级为参考信号(根治 #3588/#3640 一类误判) #3641 教义,而车的 test legs 被取消、从未拦截(取消属机械伤,归 master red after #4525 train merge: sidScope rename straggler + #4241 judge double-fix collision + missing BILI_CODEX_STATE_MODE ledger row #4554)。老测试经 git log 8ae56a01..HEAD -- src/fold-reconcile.ts src/session.ts tests/issue2915-order-centric-reconcile.test.ts 文件级归因:a5d1994 是唯一触碰闩路径的车上 commit;issue 里怀疑的 9a9db1f 只动 src/loop/tag-echo-filter.ts 的 prose-settle 机制,与 fold-reconcile 无关,排除。
    3. 影响范围与严重程度(按选项):
      • A 对齐测试(本 PR): 仅 CI 面——master 每条 ubuntu/windows leg 各多 2 条 not-ok,淹没真红信号;运行时零影响。修完即消失。
      • B 改实现让 all-missing 不闩(静默清账重开): 改变已上线的生产行为——全塌方场景从"暂停折叠+passthrough+问一次"变为"静默收割旧快照重开",波及同 session id 新会话(host native compaction 等)场景,属身份/纪元绑定逻辑(人审级),且与书面教义直接冲突。
    4. 怎么修复的(推荐=已做): 不动实现,把两个测试统一到已合入的生产契约。all-missing 期望 pass>=3 闩(与 one-interior-survivor 一致——kernel 只是额外把零覆盖块置 inactive,暂停契约不分形状);escalation-latch-recovery 从"收割→clean slate→noop"改写为"闩住→保留→健康重发 resend(missing 0)→恢复后 id churn reanchored→复现同一历史安静 resend",并新增一条防死循环稳定断言。
    5. 回归风险(按选项):
    6. 是否破坏缓存: 不涉及(纯测试断言)。
    7. 是否改了设计方向: 不改——本 PR 是把测试拉回你已拍板的方向:Snapshot as session reconstruction: identity claim order takes priority, message hash demoted to reference signal (root- | 快照即会话重构:身份认领顺序优先,消息哈希降级为参考信号(根治 #3588/#3640 一类误判) #3641 边界 4「sessionid 在=权威……不默认重置——报错+面板横幅,用户确认后开新纪元」+ Stage C 验收「全塌+相似度塌才进『待确认』态(passthrough+banner)」+ MESSAGE-IDENTITY.md epoch-confirm gate「total collapse latches … folding pauses; nothing is deleted, nothing is silently reset」。代码注释也点名了这类:"wholesale replacement by foreign history … its terminal verdict is now an epoch confirmation, not 'destroyed'"。所以我认为无需再决策——你的判词已经回答了"闩不闩",本 PR 只是让两个测试追上它。
    8. 是否引入了新的配置: 不涉及。

    关键证据(独立复核,非转述)

    • 老测试在车前 master(8ae56a0)worktree 实测 15/0 绿,tip 上 14/1 红('resend'!=='noop',L366)→ 回归窗口锁定车上,归因唯一(a5d1994)。
    • 新测试 all-missing 在 tip 实测红于 L61(foldEpochConfirmPending === true,pass 3 起);把期望翻成 pass>=3 后整条生命周期绿:块保留且 inactive、decompress 对保留的 inactive 块可用、原始历史返回后自动解闩+块复活+摘要恢复。
    • 老测试改写后的每一步 receipt(kind/missing/reaped/unmatched/latch 状态)均探针实测,非猜测:scramble×3 → 闩上且恰一条 "fold epoch confirmation required";健康重发 → resend(missing 0, reaped 0)+解闩;churn → reanchored(unmatched 0,不再升级);复现同一历史 → 安静 resend(不死循环)。

    收工判定: PR #4569 可合(纯测试对齐,CI 预期全绿);语义侧建议按 A 收口。若你要 B,驳回 PR 即止,我另行立项走实现变更人审流程。

  2. ranxianglei commented on Oct 24, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm-qwen/qwen3.8-27b)

    跟进:rebase 与全量 CI 核对完成,结论不变——两条红都是测试期望滞后于已合入的 #3641 契约,PR #4569 可合。

    Rebase:工作期间 master 前移 ba5ab0b → d95799d(仅 release-manual lane 两提交,与本 PR 零文件重叠)。分支已 rebase 到 d95799d(新 head ea9c2d5);本地三个目标套件 90/90 + typecheck 干净。

    CI 逐 shard 核对(head ea9c2d5,全部失败 shard 的日志都拉下来过了一遍):

    收工判定不变:PR #4569 可合(纯测试对齐,src/ 零改动,行为变更为零);若你判定 option B(all-missing 不该闩)才是意图,reject 掉即可,我回滚并另开机制变更票。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions