Repository navigation
test: 消除 afterMonotonic 基线假红,重建 -j4 稳定对照基线(#115 / #116) - #117
Conversation
- 按序列内容定位实际回退点 rewindAt(首个 < before 的位置),新会话单调判据从 rewindAt + 1 起算,避开 first 快照到 seek 生效之间旧会话尾部追加 position 造成的固定下标切错。 - 仅调整测试判据,不改任何生产代码。 - 不放宽判据:所有 CHECK/REQUIRE、断言条数、用例/suite 名、数值(3000ms / stepMs=20 / seek 100)保持不变;waitFor(rewound) 仍保证 beforeCount 之后存在 < before 的值,故 rewindAt < after.size() 成立。
- AGENTS.md NOTES 新增「按固定快照下标切会话」反模式条:记录 afterMonotonic 基线假红根因(seek 异步生效 → 旧会话追加 position → 合法回退落到 beforeCount+k)、正确切分方式、以及「实证先行 / 变异验证 / 同轮数 -j4 对照」三道闸门。 - 明确按实际回退点切分不是放宽判据;备选生产 resetFloor 二次上报须另开新票。 - 决议依既有一次性批量授权采用 AI 推荐;票正文不改,结论与逐轮数据留 #116 resolution 回填。
闸门进度:阶段 1 / 2 已完成,阶段 3 进行中阶段 1 实证 —— H_A 成立,H_B 排除诊断版本(临时探针只写 stdout、仅在 原判据从 H_B 排除:序列中只有一次回退,回退点之后 补充口径:诊断里 阶段 2 变异验证 —— 精确红 → 还原绿
生产文件全程未改( 阶段 3 稳定性闸门 —— 进行中
两轴
|
最终判定:稳定性闸门通过,放行合并阶段 3 同轮数
|
| 组 | 结果 | 逐轮耗时 (s) |
|---|---|---|
集成分支 209782555(修复版) |
10/10 全绿、0 次 afterMonotonic 假红 |
60, 59, 58, 60, 59, 56, 58, 59, 60, 58 |
master 915c2bc40(旧判据) |
9/10,第 5 轮 sdk_interaction_tests 失败 13.73s |
58, 59, 58, 57, 58, 55, 58, 57, 57, 59 |
master 第 5 轮日志 build/flake-gate/master_round_5.log:test_player_integration.cpp:1408 ERROR: CHECK( afterMonotonic ) is NOT correct!、test cases: 19 / 18 passed / 1 failed、assertions: 111 / 110 passed / 1 failed —— 与 PR #114 撤回时两次失败、以及本 effort 阶段 1 的诊断复现(round 7,12.51s)完全同形态。切回集成分支重编译后单用例复核 6/6 SUCCESS、工作区无源码改动。
判定:分支假红率 0/10 ≤ 基线 1/10,且本用例在分支上 0 假红 → 满足 #115 决议 5 / #116 阶段 3 的放行条件;不触发「撤回并关闭 PR」分支。
如实说明:10 轮对 10 轮样本很小,不宣称统计显著。本次证据强度来自「修复版 0 假红 + master 同轮数自然复现 1 次同一假红」这一方向性对照,叠加阶段 1 抓到的确定性 H_A 失败序列与阶段 2 的红/绿变异验证,而不是单靠频率差异。
PR 阶段双平台 CI
只认 gh run view <id> --json status,conclusion,attempt:
| run | 工作流 | headSha | 结论 |
|---|---|---|---|
42603640630 |
sdk-coverage(Linux ubuntu-24.04) |
2097825 |
completed/success attempt=1 |
42603640466 |
sdk-windows |
2097825 |
completed/success attempt=1 |
无 rerun、无放宽超时、无跳过目标。
闸门汇总(#115 决议 / #116 验收逐条)
- 阶段 1 实证:诊断版全套
-j4第 7 轮抓到beforeCount=24 / before=535 / v[24]=558 / v[25]=100 / v[26]=123→ H_A 成立、H_B 排除;诊断零残留。 - 阶段 2 变异验证:注入新会话内真回退 →
CHECK(afterMonotonic)精确红(rc=1);git checkout HEAD --还原后 diff 为空,单用例 6/6 绿、全套-j414/14 绿 59.38s;生产文件恒未改。 - 阶段 3 闸门:见上表,通过。
- 两轴
code-review:Standards 无硬性违规(1 处 Duplicated Code 判断项被仓库约束抑制);Spec 无范围蔓延、代码与票定伪码逐字一致,其余为流程未完成项与一条非硬缺陷提示(已在前一条 comment 如实留痕,方向为更严的假红而非漏判,不改码以免偏离票定伪码)。 - 文档真源回填(
doc/player-state-contract.md§10.4、AGENTS.md 补「本 effort 只解决基线假红 / SIGSEGV 根因仍未定位」、当日日志与长期记忆)与两票 resolution 在合并后落档,票正文不改。
边界(不变)
本 effort 只解决 -j4 基线假红,让后续同轮数对照有干净基线。不修 42488656322 的 SIGSEGV —— 无复现、无崩溃栈,CI 崩在 Linux ubuntu-24.04 而本机取证在 Windows MinGW730,根因仍未定位,H1 已在 Windows 侧证伪、H2 未改、H3/H4 未验。不重做 #113、不合并或 cherry-pick ca3543fef;AGENTS.md 的「反复出现」三条门槛不删、不放宽。后续重做仍须另开新票并重走全套闸门。
- AGENTS.md 反模式条补「本 effort 只解决基线假红 / SIGSEGV 根因仍未定位」、PR #117 收口与同轮数对照数据。 - doc/player-state-contract.md §10.4 新增放行记录:阶段 1 实证失败序列(H_A 成立 / H_B 排除)、阶段 2 红绿变异验证、阶段 3 分支 10/10 vs master 9/10 闸门、两轴 code-review 与双平台 CI、边界与反悔通道。 - 当日日志追加第十八轮(implement-spec 流程骨架、worktree/tdd/merger、全流程取证与坑);MEMORY.md 更正终态 OPEN 票/PR 归零并固化修复事实。 - 两票 resolution 已留 GitHub;纯文档提交按 workflow paths 过滤不触发 CI 属预期。
合并后 push run 的 flake 取证(如实补充,不改写放行结论)PR 阶段双绿(
attempt 1 失败形态(
|
- AGENTS.md 门槛条补第 2 次同形态 SIGSEGV(b482b90 / 42607915236 a1)与 sdk_unit_tests :256 新形态断言 flake;明确两次都被 rerun 稳定消解 → 三条门槛仍未命中,维持观测、不另开票、不改生产代码;补同文件失败时的替代取证要点与 attempts/1/jobs 取证坑。 - doc/player-state-contract.md §10.4 补合并后 CI failure / rerun a2 success / 判 flake 四证据 / 门槛状态,如实保留「合并后曾有 failure」,不粉饰为全程双绿。 - 当日日志与长期记忆同步;PR #117 与两票追加结论 comment。 - 纯文档提交按 workflow paths 过滤不触发 CI 属预期。
承接
2026-11-09「强制重审」effort(#112 / #113 / PR #114)按事先写死的稳定性闸门撤回:分支两组
ctest -j4各 9/10、真实 master 同轮数 10/10 全绿,两次失败完全同形态 ——sdk_interaction_tests/test_player_integration.cpp:1408的CHECK(afterMonotonic)。撤回决议写明的重做前置条件是「先解决基线假红放大,或拿到 Linux 侧复现 / ASan 证据」。本 PR 落实前者:只消除这条既有基线假红,重建干净可判定的-j4对照基线。Closes #115
Closes #116
改动(严格最小化)
AGENTS.mdNOTES:[决策] 消除 afterMonotonic 基线假红,重建 -j4 稳定对照基线 #115 决议落档,新增「异步事件的会话起点按事件内容定位,不要用固定快照下标猜」反模式条。sdk/test/unit/test_player_integration.cpp:把afterMonotonic的「新会话起点」从固定beforeCount+1改为按序列定位实际回退点rewindAt(首个< before),只检查其后的新会话单调。唯一落地代码文件 1 个,不改任何生产代码、不新增测试钩子、不删任何
CHECK/REQUIRE、不改断言条数、不改任何数值(3000ms / stepMs=20 / seek 100 / 采样门槛 / TIMEOUT / 14 个sdk_*目标 / 坏输入 55 例 / CI 配置)。合法回退与新会话内单调两条契约不变,真回退仍会被抓到 → 不是放宽判据。闸门(按 #115 决议 5、#116 阶段 1–3,逐项回填)
beforeCount/before/ 完整after序列 / 实际回退点;全套-j4跑到复现,判定 H_A / 排除 H_B;诊断零残留。git diff为空。ctest -j4,分支假红率不得高于基线且本用例 0 假红。假红率高于基线即撤回全部改动并关闭本 PR,不合并、不放宽任何判据 / 超时 / 基线。code-review;PR 阶段 Linuxsdk-coverage+ Windowssdk-windows双绿(只认gh run view <id> --json status,conclusion,attempt)。边界(写死)
不修
42488656322的 SIGSEGV(无复现、无栈,CI 在 Linux / 本机取证在 Windows,根因仍未定位);不重做 #113、不合并或 cherry-pickca3543fef;AGENTS.md的「反复出现」三条门槛不删、不放宽;不新起 wayfinder 地图。本 effort 只解决基线假红,后续重做须另开新票并重走全套闸门。