惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
aimingoo的专栏
aimingoo的专栏
腾讯CDC
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
博客园_首页
B
Blog RSS Feed
D
Docker
M
MIT News - Artificial intelligence
爱范儿
爱范儿
I
InfoQ

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
test: expand fast lane coverage · openclaw/openclaw@438da95
steipete · 2026-04-28 · via Recent Commits to openclaw:main

@@ -75,9 +75,11 @@ export const forcedUnitFastTestFiles = [

7575

"src/browser-lifecycle-cleanup.test.ts",

7676

"src/canvas-host/server.test.ts",

7777

"src/crestodian/audit.test.ts",

78+

"src/crestodian/assistant.configured.test.ts",

7879

"src/crestodian/crestodian.test.ts",

7980

"src/crestodian/operations.test.ts",

8081

"src/crestodian/overview.test.ts",

82+

"src/crestodian/rescue-policy.test.ts",

8183

"src/crestodian/rescue-message.test.ts",

8284

"src/crestodian/tui-backend.test.ts",

8385

"src/flows/channel-setup.test.ts",

@@ -91,8 +93,11 @@ export const forcedUnitFastTestFiles = [

9193

"src/docker-image-digests.test.ts",

9294

"src/dockerfile.test.ts",

9395

"src/entry.compile-cache.test.ts",

96+

"src/entry.respawn.test.ts",

97+

"src/entry.version-fast-path.test.ts",

9498

"src/entry.test.ts",

9599

"src/flows/doctor-startup-channel-maintenance.test.ts",

100+

"src/flows/search-setup.test.ts",

96101

"src/i18n/registry.test.ts",

97102

"src/image-generation/openai-compatible-image-provider.test.ts",

98103

"src/install-sh-version.test.ts",

@@ -103,6 +108,7 @@ export const forcedUnitFastTestFiles = [

103108

"src/memory-host-sdk/host/batch-http.test.ts",

104109

"src/memory-host-sdk/host/backend-config.test.ts",

105110

"src/memory-host-sdk/host/embeddings-remote-fetch.test.ts",

111+

"src/memory-host-sdk/host/mirror.test.ts",

106112

"src/memory-host-sdk/host/post-json.test.ts",

107113

"src/memory-host-sdk/host/session-files.test.ts",

108114

"src/music-generation/runtime.test.ts",

@@ -118,33 +124,45 @@ export const forcedUnitFastTestFiles = [

118124

"src/plugin-activation-boundary.test.ts",

119125

"src/plugin-sdk/memory-host-events.test.ts",

120126

"src/proxy-capture/runtime.test.ts",

127+

"src/proxy-capture/proxy-server.test.ts",

121128

"src/proxy-capture/store.sqlite.test.ts",

122129

"src/realtime-voice/agent-consult-runtime.test.ts",

123130

"src/realtime-voice/session-runtime.test.ts",

124131

"src/security/audit-channel-dm-policy.test.ts",

132+

"src/security/audit-channel-source-config-slack.test.ts",

125133

"src/security/audit-channel-readonly-resolution.test.ts",

134+

"src/security/audit-config-symlink.test.ts",

126135

"src/security/audit-exec-surface.test.ts",

136+

"src/security/audit-exec-sandbox-host.test.ts",

127137

"src/security/audit-exec-safe-bins.test.ts",

128138

"src/security/dangerous-config-flags.test.ts",

129139

"src/security/audit-extra.sync.test.ts",

130140

"src/security/audit-filesystem-windows.test.ts",

131141

"src/security/audit-gateway-exposure.test.ts",

142+

"src/security/audit-gateway-auth-selection.test.ts",

143+

"src/security/audit-gateway-http-auth.test.ts",

144+

"src/security/audit-gateway-tools-http.test.ts",

132145

"src/security/audit-sandbox-docker-config.test.ts",

146+

"src/security/audit-sandbox-browser.test.ts",

133147

"src/security/safe-regex.test.ts",

134148

"src/security/audit-small-model-risk.test.ts",

135149

"src/security/audit-node-command-findings.test.ts",

136150

"src/security/audit-extra.async.test.ts",

137151

"src/security/audit-trust-model.test.ts",

138152

"src/security/dm-policy-shared.test.ts",

139153

"src/security/audit-plugins-trust.test.ts",

154+

"src/security/audit-plugin-readonly-scope.test.ts",

155+

"src/security/audit-loopback-logging.test.ts",

140156

"src/security/audit-workspace-skill-escape.test.ts",

141157

"src/security/external-content.test.ts",

142158

"src/security/fix.test.ts",

143159

"src/security/scan-paths.test.ts",

144160

"src/security/skill-scanner.test.ts",

145161

"src/security/audit-config-include-perms.test.ts",

146162

"src/realtime-transcription/websocket-session.test.ts",

163+

"src/realtime-voice/agent-consult-tool.test.ts",

147164

"src/routing/resolve-route.test.ts",

165+

"src/sessions/transcript-events.test.ts",

148166

"src/security/windows-acl.test.ts",

149167

"src/trajectory/cleanup.test.ts",

150168

"src/trajectory/export.test.ts",

@@ -154,13 +172,15 @@ export const forcedUnitFastTestFiles = [

154172

"src/tts/provider-registry.test.ts",

155173

"src/tts/status-config.test.ts",

156174

"src/tts/tts-config.test.ts",

175+

"src/ui-app-settings.agents-files-refresh.test.ts",

157176

"src/terminal/restore.test.ts",

158177

"src/terminal/table.test.ts",

159178

"src/test-helpers/state-dir-env.test.ts",

160179

"src/test-utils/env.test.ts",

161180

"src/test-utils/temp-home.test.ts",

162181

"src/utils.test.ts",

163182

"src/version.test.ts",

183+

"src/video-generation/provider-registry.test.ts",

164184

];

165185

const forcedUnitFastTestFileSet = new Set(forcedUnitFastTestFiles);

166186

const unitFastCandidateExactFiles = [...pluginSdkLightTestFiles, ...commandsLightTestFiles];

@@ -269,6 +289,21 @@ function walkFiles(directory, files = []) {

269289

return files;

270290

}

271291292+

const walkedTestFilesByCwd = new Map();

293+294+

function collectRepoTestFiles(cwd) {

295+

const normalizedCwd = normalizeRepoPath(cwd);

296+

const cached = walkedTestFilesByCwd.get(normalizedCwd);

297+

if (cached) {

298+

return cached;

299+

}

300+

const files = ["src", "packages", "test"]

301+

.flatMap((directory) => walkFiles(path.join(cwd, directory)))

302+

.map((file) => normalizeRepoPath(path.relative(cwd, file)));

303+

walkedTestFilesByCwd.set(normalizedCwd, files);

304+

return files;

305+

}

306+272307

export function classifyUnitFastTestFileContent(source) {

273308

const reasons = [];

274309

for (const { code, pattern } of disqualifyingPatterns) {

@@ -280,39 +315,40 @@ export function classifyUnitFastTestFileContent(source) {

280315

}

281316282317

export function collectUnitFastTestCandidates(cwd = process.cwd()) {

283-

const discovered = ["src", "packages", "test"]

284-

.flatMap((directory) => walkFiles(path.join(cwd, directory)))

285-

.map((file) => normalizeRepoPath(path.relative(cwd, file)))

286-

.filter(

287-

(file) =>

288-

matchesAnyGlob(file, unitFastCandidateGlobs) &&

289-

!matchesAnyGlob(file, broadUnitFastCandidateSkipGlobs),

290-

);

318+

const discovered = collectRepoTestFiles(cwd).filter(

319+

(file) =>

320+

matchesAnyGlob(file, unitFastCandidateGlobs) &&

321+

!matchesAnyGlob(file, broadUnitFastCandidateSkipGlobs),

322+

);

291323

return [

292324

...new Set([...discovered, ...unitFastCandidateExactFiles, ...forcedUnitFastTestFiles]),

293325

].toSorted((a, b) => a.localeCompare(b));

294326

}

295327296328

export function collectBroadUnitFastTestCandidates(cwd = process.cwd()) {

297-

const discovered = ["src", "packages", "test"]

298-

.flatMap((directory) => walkFiles(path.join(cwd, directory)))

299-

.map((file) => normalizeRepoPath(path.relative(cwd, file)))

300-

.filter(

301-

(file) =>

302-

matchesAnyGlob(file, broadUnitFastCandidateGlobs) &&

303-

!matchesAnyGlob(file, broadUnitFastCandidateSkipGlobs),

304-

);

329+

const discovered = collectRepoTestFiles(cwd).filter(

330+

(file) =>

331+

matchesAnyGlob(file, broadUnitFastCandidateGlobs) &&

332+

!matchesAnyGlob(file, broadUnitFastCandidateSkipGlobs),

333+

);

305334

return [

306335

...new Set([...discovered, ...unitFastCandidateExactFiles, ...forcedUnitFastTestFiles]),

307336

].toSorted((a, b) => a.localeCompare(b));

308337

}

309338339+

const unitFastAnalysisByKey = new Map();

340+310341

export function collectUnitFastTestFileAnalysis(cwd = process.cwd(), options = {}) {

342+

const cacheKey = `${normalizeRepoPath(cwd)}\0${options.scope ?? "default"}`;

343+

const cached = unitFastAnalysisByKey.get(cacheKey);

344+

if (cached) {

345+

return cached;

346+

}

311347

const candidates =

312348

options.scope === "broad"

313349

? collectBroadUnitFastTestCandidates(cwd)

314350

: collectUnitFastTestCandidates(cwd);

315-

return candidates.map((file) => {

351+

const analysis = candidates.map((file) => {

316352

const absolutePath = path.join(cwd, file);

317353

let source = "";

318354

try {

@@ -333,6 +369,8 @@ export function collectUnitFastTestFileAnalysis(cwd = process.cwd(), options = {

333369

reasons,

334370

};

335371

});

372+

unitFastAnalysisByKey.set(cacheKey, analysis);

373+

return analysis;

336374

}

337375338376

let cachedUnitFastTestFiles = null;