feat(backthink): 静默时段心跳降频(A)—— THINK_QUIET_INTERVAL_SEC 默认 3600
主人裁定「先做 A(静默降频)再转向 C」;背景实测:静默期**思考频率不变**(恒定 900s 心跳),只拦打扰 ⇒ 成本照付。 - 新键 THINK_QUIET_INTERVAL_SEC(默认 3600):窗口内用该间隔、窗外仍用 THINK_INTERVAL_SEC;**≤0 = 关闭降频**(不许出现「半夜完全不思考」暗坑);窗口关闭/钟点非法 ⇒ 不降频 - 心跳**每拍按时刻选间隔**(放到循环外就永远不生效——变异实测能打红) - 🔴 不变量:**事件驱动不被降频影响**(TestBackthink_EventTrigger_NotSlowedByQuietInterval 钉住) - 事实卡 9→12 条(+思考总开关/普通间隔/静默间隔,标「改需重启」);契约形状未变、未升版 - ⚠️ 如实登记:ENABLE_BACKGROUND_THINKING 是**死配置**(全仓无消费者),已在 env/面板标签/契约三处标注,**是否接线待主人拍** - 变异 5 条全红;C 的缺口清单(唤醒面 7 处)已回给主会话排期
This commit is contained in:
1 parent
d6ed9cfa2b
commit
236b202fda
13 files changed
+633
-54
No files matched your search
@@ -60,6 +60,15 @@ type Config struct {
|
||||
// IntervalSec 是心跳周期秒数,映射自
|
||||
// config.BackgroundConfig.IntervalSec。设置了 Interval 时忽略。
|
||||
IntervalSec int
|
||||
// QuietInterval 是**安静窗口内**的心跳周期(design/12 §N A1)。
|
||||
// 为零时由 QuietIntervalSec 推导;**≤0 表示关闭降频**(回落 Interval),
|
||||
// 因此这里刻意不做默认填充——生产默认 3600 由 env 标签给出
|
||||
// (config.BackgroundConfig.QuietIntervalSec)。
|
||||
QuietInterval time.Duration
|
||||
// QuietIntervalSec 是安静窗口内的心跳周期秒数,映射自
|
||||
// config.BackgroundConfig.QuietIntervalSec。设置了 QuietInterval 时忽略。
|
||||
// ≤0 = 关闭降频(回落 Interval,design/12 §N A3)。
|
||||
QuietIntervalSec int
|
||||
// QuietStartHour 与 QuietEndHour 以本地钟点约束免打扰窗口。
|
||||
// 两个相等的非零钟点会禁用该窗口。
|
||||
QuietStartHour int
|
||||
@@ -89,6 +98,7 @@ type Config struct {
|
||||
func ConfigFromBackground(bg config.BackgroundConfig) Config {
|
||||
return Config{
|
||||
IntervalSec: bg.IntervalSec,
|
||||
QuietIntervalSec: bg.QuietIntervalSec,
|
||||
QuietStartHour: bg.QuietStartHour,
|
||||
QuietEndHour: bg.QuietEndHour,
|
||||
PushLimit: bg.PushLimit,
|
||||
@@ -107,6 +117,12 @@ func normalize(cfg Config) Config {
|
||||
if cfg.Interval <= 0 {
|
||||
cfg.Interval = time.Duration(cfg.IntervalSec) * time.Second
|
||||
}
|
||||
// QuietInterval 不从零值套默认:≤0 是本设计里「关闭降频」的**语义**
|
||||
// (design/12 §N A3),把 0 改写成 3600 会让用户设的 0 静默失效。
|
||||
// 生产默认 3600 由 config 层的 env 标签供值。
|
||||
if cfg.QuietInterval <= 0 {
|
||||
cfg.QuietInterval = time.Duration(cfg.QuietIntervalSec) * time.Second
|
||||
}
|
||||
if cfg.QuietStartHour == 0 && cfg.QuietEndHour == 0 {
|
||||
cfg.QuietStartHour = defaultQuietStartHour
|
||||
cfg.QuietEndHour = defaultQuietEndHour
|
||||
|
||||
Reference in new issue
Block a user