From 18ad2b89ab7673b578387a76c3c5e94a835d3aaa Mon Sep 17 00:00:00 2001 From: AskaEth Date: Tue, 13 Oct 2026 23:21:25 +0800 Subject: [PATCH] =?UTF-8?q?test(memory):=20=E4=B8=A4=E6=9D=A1=E5=AE=A1?= =?UTF-8?q?=E6=9F=A5=E8=B6=85=E6=97=B6=E7=94=A8=E4=BE=8B=E6=90=AC=E5=88=B0?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E4=BD=8D=E7=BD=AE=EF=BC=88=E5=A4=8D=E5=AE=A1?= =?UTF-8?q?=20p2-1=EF=BC=8C=E7=BA=AF=E6=90=AC=E8=BF=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 复审指出 TestEmbeddingTimeoutFitsReviewBudget 的整段文档被夹在「它描述的 函数」与「两条新用例」之间成了孤儿文档,而该函数自己的文档只剩一句、且在 文件里出现两次(一次属于那段孤儿注释,一次紧贴真正的函数)。 只搬不改语义:把 TestReviewTimeoutExplicitEnvValueWins 与 TestReviewTimeoutEffectiveValueIsTheOnlyDefault 整体挪到 TestEmbeddingTimeoutFitsReviewBudget 之后,删掉重复的那句文案与多余的空行, 让那 21 行文档重新紧贴它描述的函数(与 dev 版的相对位置逐字相同)。 纯搬运的证据:拿「排序后的行集合」比对搬运前后(前者取自 HEAD)—— `diff <(git show HEAD:internal/runtime/memory/preinsert_recall_test.go | sort) <(sort internal/runtime/memory/preinsert_recall_test.go)` 只差两行:一句重复文案 + 一个空行,其余逐行一致。 顺带按「主张与落点」把本文件自查了一遍:每段注释都紧贴它描述的符号 (实测文档与函数之间没有空行:`awk '/^\/\// {doc=NR} /^func / {if (NR-doc!=1) print NR}'`), 且文中的位置指代(「那条防线在下面的 …」「下方 cfg.TimeoutSec != 0 那条」) 在搬运后依然成立。 --- .../runtime/memory/preinsert_recall_test.go | 50 +++++++++---------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/internal/runtime/memory/preinsert_recall_test.go b/internal/runtime/memory/preinsert_recall_test.go index edeeb58..9639c26 100644 --- a/internal/runtime/memory/preinsert_recall_test.go +++ b/internal/runtime/memory/preinsert_recall_test.go @@ -76,6 +76,30 @@ func reviewTimeoutEnvUnset(t *testing.T) { // 照样绿)—— 那条防线在下面的 TestReviewTimeoutEffectiveValueIsTheOnlyDefault。 // // embedding 侧同一口径也有一条钉值测试(api_url_test.go),两边互为护栏。 +func TestEmbeddingTimeoutFitsReviewBudget(t *testing.T) { + t.Parallel() + + if embedding.DefaultRequestTimeout <= 0 { + t.Fatalf("embedding.DefaultRequestTimeout = %s, 必须为正", embedding.DefaultRequestTimeout) + } + if embedding.DefaultRequestTimeout >= defaultReviewTimeout { + t.Fatalf("embedding 单次超时 %s 必须严格小于审查总预算 %s", + embedding.DefaultRequestTimeout, defaultReviewTimeout) + } + // 第 2 条:预算必须盖得住实测最坏链长,还要留得下 T1 那一步自己的超时 + // (T1 在召回**之后**跑,同一条 ctx)。空闲余量倍数由 budget.go 的注释列明, + // 这里只钉住「盖得住」这条下界。 + worst := measuredReviewChainLoaded + defaultT1Timeout + if defaultReviewTimeout <= worst { + t.Fatalf("审查单条预算 %s 必须严格大于「实测最坏召回链 %s + T1 超时 %s = %s」—— "+ + "否则链还没跑完预算就用光(2026-10-13 的 2274 条超时降级正是这条)", + defaultReviewTimeout, measuredReviewChainLoaded, defaultT1Timeout, worst) + } + if measuredReviewChainIdle >= defaultReviewTimeout { + t.Fatalf("空闲实测链长 %s 已不小于审查预算 %s(余量必须为正)", + measuredReviewChainIdle, defaultReviewTimeout) + } +} // TestReviewTimeoutExplicitEnvValueWins 钉住另一半口径(M16):`.env` / 进程环境 // **显式写了**这个键时,它必须**原样到达生效值**(不被 memory 侧的默认值顶掉)。 @@ -200,29 +224,3 @@ func TestReviewTimeoutEffectiveValueIsTheOnlyDefault(t *testing.T) { t.Fatalf("启动行没有打印生效值 timeout=%s:%q", effective, line) } } - -// embedding 侧同一口径也有一条钉值测试(api_url_test.go),两边互为护栏。 -func TestEmbeddingTimeoutFitsReviewBudget(t *testing.T) { - t.Parallel() - - if embedding.DefaultRequestTimeout <= 0 { - t.Fatalf("embedding.DefaultRequestTimeout = %s, 必须为正", embedding.DefaultRequestTimeout) - } - if embedding.DefaultRequestTimeout >= defaultReviewTimeout { - t.Fatalf("embedding 单次超时 %s 必须严格小于审查总预算 %s", - embedding.DefaultRequestTimeout, defaultReviewTimeout) - } - // 第 2 条:预算必须盖得住实测最坏链长,还要留得下 T1 那一步自己的超时 - // (T1 在召回**之后**跑,同一条 ctx)。空闲余量倍数由 budget.go 的注释列明, - // 这里只钉住「盖得住」这条下界。 - worst := measuredReviewChainLoaded + defaultT1Timeout - if defaultReviewTimeout <= worst { - t.Fatalf("审查单条预算 %s 必须严格大于「实测最坏召回链 %s + T1 超时 %s = %s」—— "+ - "否则链还没跑完预算就用光(2026-10-13 的 2274 条超时降级正是这条)", - defaultReviewTimeout, measuredReviewChainLoaded, defaultT1Timeout, worst) - } - if measuredReviewChainIdle >= defaultReviewTimeout { - t.Fatalf("空闲实测链长 %s 已不小于审查预算 %s(余量必须为正)", - measuredReviewChainIdle, defaultReviewTimeout) - } -}