Skip to content

fix: skip oversized summary diffs individually and drop the dead summary_diffs column - #526

Merged
LeXwDeX merged 3 commits into
devfrom
fix/525-summary-diff-continue
Sep 3, 2026
Merged

LeXwDeX merged 3 commits into
devfrom
fix/525-summary-diff-continue

Conversation

@LeXwDeX

@LeXwDeX LeXwDeX commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Closes #525

Why

481e31e2b7 引入的 256 KiB summary-diffs 闸有两处遗留问题(实测证据见 #525):

  • truncateSummaryDiffsbreak(原 session.ts:77):首个超预算项直接终止整个循环,后面本可容纳的项被一并丢弃。实测存在单个 patch 长 7,097,898 字符(7.5 MiB)的真实数据,[超限项, 小项…] 混合场景必然发生,此时 SessionSummary.diff()summary.ts:135)返回空列表。
  • session.summary_diffs 列是 legacy 死代码:setSummary 只传 counters(summary.ts:106-113),列实测 2,025/2,025 全 NULL,fromRow/toRow 的 diffs 两侧永不可达;guard 测试原标题已自称 "strips oversized legacy summary_diffs on read"。

What changed

  • session.tsbreakcontinue —— 超限单项被跳过,其余可容纳项继续累积;字节核算不变,输出恒 ≤ MAX_SUMMARY_DIFF_BYTES
  • 删死列:core/session/sql.ts 列定义、core/session/projector.ts 投影、session.tsstripOversizedDiffs + fromRow diffs + toRow summary_diffs
  • Migration 20260903044702_drop_session_summary_diffsALTER TABLE session DROP COLUMN summary_diffs,SQLite O(1) 元数据操作,不重写表);bun script/migration.ts 同步再生成 schema.gen.ts / migration.gen.ts / schema.json--check 干净
  • 测试:guard 新增 2 个混合场景边界用例;database-migration.test.ts 新增真实执行用例(seeded legacy DB 实际跑 ALTER,断言列消失 / 行数据保留 / journal 记录;fresh 路径断言无此列)——补上「空库走 schema.up 快速路径、迁移语句从不执行」的盲区;删除 3 处死列测试(read-guard、budget-boundary 往返、httpapi legacy-diff 用例)
  • 481e31e2b7 钉住的 4 处断言原样未改、继续通过(fix: summary diff cap discards trailing in-budget diffs when an earlier file exceeds 256KB; summary_diffs column is legacy dead code #525 验收硬门槛)
  • SessionSummary.diffs schema 字段保持 optional(packages/schema/src/session-v1.ts:513)→ HTTP API 形状不变,无需 SDK 再生成

Evidence

  • bun test test/session/summary-diff-guard.test.ts → 6 pass / 0 fail(4 钉住 + 2 新增)
  • bun test test/session/457 pass / 0 fail(23 文件,含 summary / revert 回归)
  • httpapi-session + session-diff-missing-patch → 19 pass;core session-projector + database-migration → 26 pass(新增迁移执行测试后单文件 18 pass 复核)
  • bun typecheck(core + opencode)exit 0;root bun run lint 4839 warnings = 基线零新增(预算 4850)
  • rg summary_diffs packages/ 活引用清零;残留仅历史工件(baseline migration、旧 packages/opencode/migration snapshot、missing-patch 测试历史注释)与新 drop migration 自身
  • 说明:本仓迁移机制 Migration 类型只有 up(无 down 概念),issue 验收中「回滚执行」无对应物,正向执行已由新测试真实覆盖

Checklist

  • Why, What changed, and Evidence are filled in.
  • specgit finish exits 0.

@LeXwDeX LeXwDeX changed the title Delivery summary-diff-continue fix: skip oversized summary diffs individually and drop the dead summary_diffs column Sep 3, 2026
@LeXwDeX
LeXwDeX changed the base branch from main to dev September 3, 2026 05:11
@LeXwDeX
LeXwDeX marked this pull request as ready for review September 3, 2026 05:52
@LeXwDeX
LeXwDeX merged commit 9cebd98 into dev Sep 3, 2026
12 of 13 checks passed
@LeXwDeX
LeXwDeX deleted the fix/525-summary-diff-continue branch September 3, 2026 06:20
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.

fix: summary diff cap discards trailing in-budget diffs when an earlier file exceeds 256KB; summary_diffs column is legacy dead code

1 participant