fix(rectification): anchor candidate windows to civil dates across midnight
Independent Staging Quality Gate / validate (push) Successful in 13m27s
Independent Staging Quality Gate / publish (push) Failing after 1h0m1s

Carry explicit local date intervals instead of inferring the day from clock
order. Cluster width, delivery, adoption, and reports keep the actual civil
date; adopted date is stored separately from the reported birth_date.

Algorithm identity is scoring-9 / spec-v5. Scoring weights, confirmation
thresholds, and Skill version are unchanged. Isolated Linux final-3 gates
passed; four pre-existing Python failures remain. This is not a production
release.
This commit is contained in:
jesse-ux
2026-09-21 02:55:00 +08:00
parent 3be740f84d
commit b85c4a686a
115 changed files with 106484 additions and 315 deletions
+10 -7
View File
@@ -12971,33 +12971,36 @@
- 状态:investigating
- 首次发现:2026-09-20
- 最近更新:2026-09-20
- 最近更新:2026-09-21
- 影响面:`candidate_contrast.py`、`decision_policy.py` 的簇范围与宽度。
- 用户现象:跨午夜连续三个分钟候选组成的短簇,被表示为从当天最早钟点到最晚钟点,宽度扩成全天。
- 触发条件:同一签名簇跨午夜,钟点字符串排序而没有候选日期或全窗序号。
- 根因:签名聚类及 `_cluster_span()` 丢失日期,只用钟点决定首尾;这不是本轮 Dasha 日期修复新引入的行为。
- 修复:本轮仅独立诊断,不改聚类或交付策略;另行修复单处理。
- 修复进展:日期锚点任务已本地实现 ordinal 排序、真实 offset 计宽及声明 segment 内 envelope,Python 聚类/决策、TS credible union/plateau、transition/probe 与交付贯通;不连续段不补洞。算法身份更新为 scoring-9,历史不重标。三公开 AA 独立子进程同机 A/B 分数、矩阵、簇边界与确认门逐位相等。真实 native golden 经前端请求/推断/交付 SSR 验证;最终全量及部署待验,保持 investigating。
- 验证:纯虚构最小探针沿 `build_candidate_decisions()` 实测一簇三个连续跨午夜成员被报为 1440 分钟。未涉及真实案例资料,未标 resolved。
- 统一验收进展(2026-09-21):final-1 隔离 Linux 快照前端3649/3649、真实DB56/56通过,诊断性三公开AA七项投影21/21零容差相等;Python广域338通过/11失败,其中4个既存失败、7个新增失败,quick未运行,整体验收未通过。新增项包括3个版本/回执契约失配及4个历史冻结身份拒绝;后者是更早BUG-981冻结记录不能代表当前实现时正确fail-closed,不是final-1停写后生产源码漂移。旧证据原样保留。Grok 接续:三合同测试独立复验34/34;新扩展身份补四模块后真实20/900重跑并派生 current contract;新最终快照 final-3 tsc/lint0、前端3649、DB56、quick通过、AA 21/21、Python广域352/4(0新增失败)。无部署/真人证据,保持 investigating。详见PROGRESS。
- 防复发:后续需完整日期/相对窗序号回归贯穿签名聚类、候选决策与交付范围,不能只测试辅助 `_primary_cluster`。
- 相关记录:BUG-623、BUG-624、BUG-639、BUG-981。
- 复发自:未发现同症状既有记录;BUG-624/639 的范围断言仍在但均是同日样本,跨午夜诊断测试覆盖的是另一条聚类路径,未覆盖本路径。
- 修复版本:未实施,见 `docs/tasks/PROGRESS-rectification-cross-midnight-20260920.md`。
- 修复版本:`codex/rectification-midnight-date-anchor-20260920` 本地未提交实现,未推送/部署;证据及待验项见 `docs/tasks/PROGRESS-rectification-midnight-date-anchor-20260920.md`。
## BUG-983 | 凌晨申报窗口的候选日期锚点可能偏到次日
- 状态:investigating
- 首次发现:2026-09-20
- 最近更新:2026-09-20
- 最近更新:2026-09-21
- 影响面:V9 搜索窗、`engineRequestBody()` 与 `_candidate_datetimes()` 的日期传递。
- 用户现象:申报在午夜后的范围向前跨日时,生产候选中心可能落到申报日期的次日。
- 触发条件:申报日内早凌晨分钟采用左右搜索半径,起始钟点位于前一天,而请求仍只传未调整的申报日期。
- 根因:前端只传钟点范围与原申报日期,生产枚举将起始钟点绑定该日、较小终止钟点推到次日;候选日期本身已错误,helper 按候选日期一致计算并不能修正上游锚点。
- 修复:本轮仅独立诊断,不越界修改开窗或既有枚举合同;另行立单。
- 修复进展:按已批准 D1/D2/D3 传显式本地日期区间,凌晨申报锚在申报日、前半窗落前日;late_night 追问一次,未知/跳过保留同日两段。真实服务端 schema 回归发现新选项数字钟点被既有文案过滤拒绝,改中文钟点,未放宽过滤。D4 明确授权后新增兼容迁移,保存独立 active date/来源/实际候选 offset,原 birth_date 保留;report sampler 与 VedAstro 使用实际候选日期。SQL 采用权限合成测试不代表真实候选通过确认门;未修 IANA/DST。最终全量与部署待验。
- 验证:纯虚构窗口探针证明申报中心候选与申报日期的日期差为 +1 日;不含真实用户资料,未标 resolved。
- 防复发:必须从申报日/分钟经实际前端请求构建到后端枚举端到端校验日期,而非只验证钟点范围与“支持跨午夜”。
- 补充回归:预冻结审计发现新widen wrapper仍会按baseline重猜日期,丢持久区间与D1侧别;真实DB红测复现后,限本单30000迁移修为普通分钟按持久绝对日期扩窗、D1允许集合服务端保存、C/skip缩到单段仍保留原允许两段。侧别冲突等拒绝必须全事务无写入;真实DB dossier/compute→评分service→score请求捕获验证日期保持,网络截停不冒充引擎评分完成。最终标准DB与统一门禁见PROGRESS,仍未部署。
- 统一验收进展(2026-09-21 Grok 接续):隔离 Linux final-3 全门 tsc/lint0、前端3649、DB56、quick通过、AA 21/21、Python 广域 0 新增失败。无部署/受控真人证据,保持 investigating。
- 防复发:必须从申报日/分钟经实际前端请求构建到后端枚举端到端校验日期,而非只验证钟点范围与“支持跨午夜”;扩窗不得重猜日期或将未知缩窄结果伪作用户选侧。
- 相关记录:BUG-098、BUG-198、BUG-979、BUG-981。
- 复发自:未发现同症状既有记录;BUG-198 时段开窗与 BUG-098 枚举回归仍在但不校验申报日期中心。离线 holdout 已有前日中心保护,未覆盖生产请求链。
- 修复版本:未实施,见 `docs/tasks/PROGRESS-rectification-cross-midnight-20260920.md`。
- 修复版本:`codex/rectification-midnight-date-anchor-20260920` 本地未提交实现,未推送/部署;证据及待验项见 `docs/tasks/PROGRESS-rectification-midnight-date-anchor-20260920.md`。
## BUG-984 | 时段旧分数缓存不校验算法身份且聚合回执可能显示新版本