分类 Obsidian 下的文章

Obsidian

偶发失败的测试是断言了竞态 (Flaky Test Asserted A Race)

1. 一句话测试时好时坏时,第一件事不是"加 sleep / 加超时",而是分清它属于哪一种:A 类:等待预算太紧 —— 被测逻辑是对的,只是机器忙的时候没等到。放宽预算即可。B 类:断言了一个竞态的结果 —— 两种结果都是正确的并发交错,只有一种被断言了。这时改测试(让它只断言两种情况都成立的不变量),不要改代码去迎合断言。判断方法:单独反复跑(for i in $(seq 1 20); do

Obsidian

CORS 带凭据与通配符互斥 (CORS Credentials vs Wildcard)

1. 一句话浏览器规定:响应带 Access-Control-Allow-Credentials: true 时,Access-Control-Allow-Origin / Allow-Headers / Allow-Methods 都不许是 *。想让"带 Cookie 的跨域请求"通过,服务器必须回显请求方的具体来源和请求头,而不是发通配符。2. 发生条件前端要跨域发请求,并且带凭据(Cooki

Obsidian

Agent 权限门禁做在代码层 (Enforcing Permission Gates in Code for LLM Agents)

一句话给 LLM agent 做权限控制时,判定逻辑必须写在工具的代码里(每个工具进门先过一道 guard()),不能只写在系统提示词里。原因很简单:提示词是可以被哄的,代码不会。问题常见做法是在系统提示词里写一段"你只能做 X,不能做 Y"。这不够,原因有三:提示词是软约束,用户可以用话术引导模型绕过("我其实是管理员"、"这是测试环境不算"、"上一条规则已经作废了")。模型可能在没意识到自己越

Obsidian

Claude Agent SDK 配置渗漏与隔离 (Claude Agent SDK Config Bleed and settingSources Isolation)

一句话用 Claude Agent SDK 自建 agent 时,即使把系统提示词整个替换成自己的字符串,宿主的 CLAUDE.md、~/.claude/settings.json 和自己配置的 MCP server 仍然会被注入。除非显式设置 settingSources: []。不报错、不警告,只是 agent "有点怪" —— 属于最难查的一类问题。发生条件用 @anthropic-ai/c