From d40cb7d1e0560bd92dede88ac572aa0081fcf1af Mon Sep 17 00:00:00 2001 From: link2026 Date: Mon, 25 May 2026 15:12:26 +0800 Subject: [PATCH] =?UTF-8?q?harden(ai):=20ModelStore=20seedFromBundle=20?= =?UTF-8?q?=E5=9C=A8=20DEBUG=20=E6=8A=A5=E9=94=99,=E5=8A=A0=E7=A9=BA?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 code quality review 反馈: - seedFromBundle 找不到 bundle 资源时,DEBUG 下 assertionFailure 提示 target membership(release 仍静默 return),避免 W6 启用时排查困难 - 补 totalBytesReturnsZeroWhenFolderMissing 测试,覆盖 folder 不存在时 enumerator 为 nil 的 guard 路径 Co-Authored-By: Claude Opus 4.7 (1M context) --- 体己/AI/ModelStore.swift | 3 +++ 体己Tests/ModelStoreTests.swift | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/体己/AI/ModelStore.swift b/体己/AI/ModelStore.swift index ee13c9c..057feba 100644 --- a/体己/AI/ModelStore.swift +++ b/体己/AI/ModelStore.swift @@ -65,6 +65,9 @@ final class ModelStore { /// Demo 现场旁路:从 Bundle 拷贝预装模型(W6 才真正使用,本周占位) func seedFromBundle(_ kind: ModelKind) throws { guard let bundleURL = Bundle.main.url(forResource: kind.rawValue, withExtension: nil) else { + #if DEBUG + assertionFailure("Bundle 缺少 \(kind.rawValue),检查资源是否加入 target") + #endif return } let target = localURL(for: kind) diff --git a/体己Tests/ModelStoreTests.swift b/体己Tests/ModelStoreTests.swift index d1f95cf..f01be58 100644 --- a/体己Tests/ModelStoreTests.swift +++ b/体己Tests/ModelStoreTests.swift @@ -43,4 +43,12 @@ struct ModelStoreTests { #expect(store.totalBytes(for: .llm) == 2048) } + + @Test func totalBytesReturnsZeroWhenFolderMissing() throws { + let store = try isolatedStore() + defer { try? FileManager.default.removeItem(at: store.rootURL) } + + // 没创建任何 vl 目录 + #expect(store.totalBytes(for: .vl) == 0) + } }