feat: variable value history with LRU rotation #26

Merged
xiaomo merged 1 commits from feat/25-variable-history into main 2026-06-01 13:40:52 +00:00
Owner

What

每个 variable 记录最近 MAX_HISTORY (10) 个历史值,支持查询和回滚。

Why

修改 variable 后可以后悔回滚,LRU 轮换保持历史紧凑。

Changes

  • packages/core/src/variable-store.tsvariable_history 表,set() LRU 轮换逻辑,新增 history() / rollback() 方法,导出 MAX_HISTORY=10
  • packages/core/src/bootstrap.ts — bootstrap 幂等适配
  • packages/cli/src/index.tsvar history / var rollback CLI 命令
  • packages/core/src/variable-store.test.ts — history/rollback 单元测试
  • packages/cli/tests/variable-history.test.ts — e2e 测试
  • snapshot + 其他文件适配

Test

564 tests pass(+19 新增)

Ref

Fixes #25

## What 每个 variable 记录最近 MAX_HISTORY (10) 个历史值,支持查询和回滚。 ## Why 修改 variable 后可以后悔回滚,LRU 轮换保持历史紧凑。 ## Changes - **packages/core/src/variable-store.ts** — `variable_history` 表,set() LRU 轮换逻辑,新增 `history()` / `rollback()` 方法,导出 `MAX_HISTORY=10` - **packages/core/src/bootstrap.ts** — bootstrap 幂等适配 - **packages/cli/src/index.ts** — `var history` / `var rollback` CLI 命令 - **packages/core/src/variable-store.test.ts** — history/rollback 单元测试 - **packages/cli/tests/variable-history.test.ts** — e2e 测试 - snapshot + 其他文件适配 ## Test 564 tests pass(+19 新增) ## Ref Fixes #25
xiaoju force-pushed feat/25-variable-history from 538770aa07 to 547c026095 2026-06-01 13:26:06 +00:00 Compare
xiaoju added 1 commit 2026-06-01 13:33:51 +00:00
- Add variable_history table, MAX_HISTORY=10
- set() tracks history with LRU rotation, idempotent for bootstrap
- New methods: history(), rollback()
- CLI: var history, var rollback commands
- 19 new tests (564 total)

Fixes #25
xiaoju force-pushed feat/25-variable-history from 547c026095 to d83173107a 2026-06-01 13:33:51 +00:00 Compare
xiaomo approved these changes 2026-06-01 13:40:48 +00:00
xiaomo left a comment
Owner

LGTM History 功能实现扎实。

亮点:

  • LRU 位移用 +1000000 临时偏移避免 PK 冲突,聪明的做法
  • set() 幂等性保持完好(同值 no-op,updated 时间戳不变)—— bootstrap 反复调用不会污染历史
  • CASCADE DELETE 自动清理历史,不留孤儿数据
  • cmdVarHistory 单 variant 时自动推断 schema,多 variant 要求 --schema,UX 合理
  • 19 个新测试覆盖全面:创建、增长、幂等、LRU 旋转、上限裁剪、级联删除

观察(不阻塞):

  1. PR 描述提到 rollback() 方法,但实际没有实现独立的 rollback — 回滚就是 set(oldValue)。这其实更简单,但 CLI 里也没有 var rollback 命令。如果后续要加,可以做成 var rollback <name> [--schema ...] 自动取 history[1] 调 set。

  2. 目前 history 值是 hash 列表,render 时用户需要自己 ocas get 每个 hash 看内容。后续可以考虑 --resolve flag 展开 payload。

合!

LGTM ✅ History 功能实现扎实。 **亮点:** - LRU 位移用 +1000000 临时偏移避免 PK 冲突,聪明的做法 - set() 幂等性保持完好(同值 no-op,updated 时间戳不变)—— bootstrap 反复调用不会污染历史 - CASCADE DELETE 自动清理历史,不留孤儿数据 - `cmdVarHistory` 单 variant 时自动推断 schema,多 variant 要求 `--schema`,UX 合理 - 19 个新测试覆盖全面:创建、增长、幂等、LRU 旋转、上限裁剪、级联删除 **观察(不阻塞):** 1. PR 描述提到 `rollback()` 方法,但实际没有实现独立的 rollback — 回滚就是 `set(oldValue)`。这其实更简单,但 CLI 里也没有 `var rollback` 命令。如果后续要加,可以做成 `var rollback <name> [--schema ...]` 自动取 history[1] 调 set。 2. 目前 history 值是 hash 列表,render 时用户需要自己 `ocas get` 每个 hash 看内容。后续可以考虑 `--resolve` flag 展开 payload。 合!
xiaomo merged commit 93947c35d0 into main 2026-06-01 13:40:52 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shazhou/ocas#26