Skip to content

[observability] peak-hours 时段串解析失败仍是静默的:非空配置解析成 null 应有显式提示 #622

Closed

Description

@modusensus

背景

#424 报的现象有一层结构性因素:parsePeakSpec 的失败语义是「整串视为未配置」(模块头契约:排程是省钱手段,绝不该因为写错格式把蒸馏/巩固停掉)。这个契约本身是对的——但它意味着配置写错的唯一症状是「功能悄悄没生效」:用户明明写了 summarizePeakHours / dreamPeakHours,巩固/蒸馏却回到全天候,日志、面板、审计里都没有任何痕迹。#424 主楼里 louisjar 的排查只能靠「高峰期还在巩固」倒推,正是这个缺口的全貌。

PR #621 已把根因表里全角等价符号那四种收掉(归一化后照常解析)。但归一化不救错——剩余的静默失效面依然存在且永远存在:

只要 null 语义还在(它应该一直在),这类写法就都会静默。本 issue 只补可见性,不动语义。

提案(零行为变化、不新增配置键)

  1. 启动/配置装配时告警:对 summarizePeakHours / dreamPeakHours 各跑一次 parsePeakSpec——非空且解析为 null 时 logger.warn 一条(带键名与原串;空串是合法的「未配置」,不告警,否则每个没配错峰的用户开机都被警告一遍)。
  2. 面板设置页提示:两个时段键的值在设置页展示时,解析失败给显式提示(输入框旁标红或说明行);具体落点(保存时校验 vs 渲染时提示)评审定。
  3. 不做的:不改解析语义(不救错、不放宽边界);不加配置键;不动 [Feature] 巩固/蒸馏的维护窗口:正向定点 + 债务上限 + 手动触发入口 #424 的五项提案(正向定点 / 债务上限 / 定点搭便车 / 失败短重试 / 手动入口,那些是排程增强,与本 issue 的可观测性正交)。

验收草案

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions