Skip to content

fix(trace): 本地轨迹默认不限数量,改由 10GB 体积兜底 - #227

Merged
njfuzrs merged 2 commits into
mainfrom
fix/trace-retention-by-size
Oct 10, 2026
Merged

njfuzrs merged 2 commits into
mainfrom
fix/trace-retention-by-size

Conversation

@njfuzrs

@njfuzrs njfuzrs commented Oct 10, 2026

Copy link
Copy Markdown
Owner

改了什么

本地轨迹目录(~/.sid-code/trajectories/sessions/)的清理从「默认留最近 100 个」改为与会话保留(#218)同口径:

规则 旧默认 新默认
数量(trace.maxSessionsRetained) 100 不限(显式配置仍生效)
体积 — 复用 sessionRetention.maxTotalSize(10GB),超了才删
保护 — 活跃进程正在写的会话(含 resume 的 logicalSessionId)+ minRetention(1d)窗口内的目录不删
时间 365d(#218) 不变
  • 淘汰选择抽成纯函数 packages/core/src/trace/retention.ts:已上传优先、最旧优先。
  • init-helpers.ts 把 sessionRetention 接进 collector;enabled:false 时不按体积删。
  • 同步 website/team/observability.md「本地保留多少」、website/ref/settings.md、disk-usage.ts 登记表,以及 collector.ts / session-index.ts / backfill.ts 里引用旧默认 100 的注释。
  • Agent Note:.agents/notes/implemented/bug-fix/2026-10-10-轨迹保留默认不限数量改体积兜底.md

为什么

#218 遗留的已知边界:一天几十个会话时,轨迹先于会话被 100 截断。实测开发者本机已顶到 100 个,最早只到 2026-09-11(约 2~4 周)。调试要用的 raw.jsonl / session.traj / events.jsonl(trace-digest、provider-health 的数据源)回头就找不到了。

旧注释「不要调大上限」的前提是「原始轨迹 ≈45MB/会话」,实测 100 个目录合计 37MB(p50 24KB / p95 1.3MB / max 3.2MB),差了一个数量级以上。长期指标仍由 session-index.jsonl / usage-ledger.jsonl 承担,不受影响。

测试

  • 新增 packages/core/tests/trace/retention.test.ts(9 个用例):反向门禁「150 个旧目录默认全部保留」、体积超限按已上传优先 + 最旧优先、保护窗口与活跃进程不删、非法数量不会解读成「保留 0 个」、maxTotalBytes=0 不删。
  • 变异自证:把默认值改回 ?? 100,反向门禁变红(8 pass / 1 fail),还原后全绿。
  • 端到端:本机 100 个真实轨迹目录的副本 + 60 个 2 天前的已上传目录(共 160 个)→ 默认配置下删 0 个;把上限压到 30MB → 删到 100 个,60 个已上传的优先被删。
  • bun run affected-tests:run:2502 pass / 0 fail;make build 和自检都通过(没有 will always be undefined 警告);lint / lint:boundary / format:check / docs:gen-reference --check 都通过。

🤖 Generated with Claude Code

- pruneOldSessions 默认不再按 100 个截断;超过 sessionRetention.maxTotalSize(默认 10GB)
  才删,已上传优先、最旧优先;活跃进程在写的会话与 minRetention 窗口内的目录不删
- 淘汰选择抽成纯函数 trace/retention.ts;init-helpers 接入 sessionRetention
- 显式 trace.maxSessionsRetained 仍生效;sessionRetention.enabled:false 时不按体积删
- 同步 observability 文档、settings 参考页、disk-usage 登记表与相关注释

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@njfuzrs
njfuzrs enabled auto-merge October 10, 2026 06:46
@njfuzrs
njfuzrs merged commit 289d588 into main Oct 10, 2026
5 checks passed
@njfuzrs
njfuzrs deleted the fix/trace-retention-by-size branch October 10, 2026 07:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant