From a16dbf7bc0c6a535c4ea7c36aa260756dca833f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sun, 4 Oct 2026 10:30:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3(=E4=BC=9A=E5=91=98=E8=B4=A6?= =?UTF-8?q?=E6=9C=9F)=EF=BC=9A=E8=AF=B4=E6=98=8E=20membership=5Fcycle=5Fwi?= =?UTF-8?q?ndow=20=E6=8A=8A=20index=3D0=20=E6=94=B6=E6=95=9B=E4=B8=BA?= =?UTF-8?q?=E7=AC=AC=201=20=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 注明与升级报价显式拒绝 cycle_index=0 的差异及兼容存量行的原因 --- server-rs/crates/module-runtime/src/membership/cycle.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server-rs/crates/module-runtime/src/membership/cycle.rs b/server-rs/crates/module-runtime/src/membership/cycle.rs index 6af6f93eb..306f8afab 100644 --- a/server-rs/crates/module-runtime/src/membership/cycle.rs +++ b/server-rs/crates/module-runtime/src/membership/cycle.rs @@ -59,6 +59,10 @@ pub fn advance_beijing_months_clamped(anchor_micros: i64, months: u32) -> i64 { /// 年付只是把同样的月度窗口重复 12 次;期数总数由 /// [`RuntimeProfileMembershipCycleKind::cycle_count`](crate::RuntimeProfileMembershipCycleKind::cycle_count) /// 给出。 +/// +/// `index = 0` 会被 `max(1)` 收敛为第 1 期(开通当期),不报错:这是为兼容「期号水位尚未初始化」 +/// 的存量行。它不同于 `quote_runtime_profile_membership_upgrade` 对 `cycle_index == 0` 的显式拒绝 +/// (报价要求调用方给出明确期号),调用方若已能拿到真实期号,不应把 `0` 当合法期号传入。 pub fn membership_cycle_window(anchor_micros: i64, index: u32) -> (i64, i64) { let index = index.max(1); let start = if index == 1 {