36 lines
1.2 KiB
Markdown
36 lines
1.2 KiB
Markdown
# Case: `add-updates-existing-entry-on-same-kind-and-key`
|
|
|
|
## 用例意义
|
|
|
|
验证同一 repo 下相同 `kind + key + scope` 再次执行 `add` 时会更新既有 entry,而不是生成重复记录。
|
|
|
|
## 前置条件
|
|
|
|
- `TMPDIR/repo` 是一个已提交初始 commit 的 Git 仓库
|
|
- 空数据库已完成 `init`
|
|
- 已执行过一次:
|
|
|
|
```bash
|
|
repo-memory add --db TMPDIR/repo-memory.db --repo TMPDIR/repo --kind term --key AITask --summary "初版摘要" --status draft
|
|
```
|
|
|
|
## 输入
|
|
|
|
```bash
|
|
repo-memory add --db TMPDIR/repo-memory.db --repo TMPDIR/repo --kind term --key AITask --summary "修订后的摘要" --status confirmed --alias "AI Task"
|
|
repo-memory events --db TMPDIR/repo-memory.db --id 1
|
|
repo-memory list --db TMPDIR/repo-memory.db --repo repo --kind term
|
|
```
|
|
|
|
## 预期输出
|
|
|
|
- 第二次 `add` 仍输出 `upserted entry 1 (term:AITask)`
|
|
- `events` 中同时包含 `updated (draft -> confirmed)` 与更早的 `created (- -> draft)`
|
|
- `list` 中该 entry 的摘要为 `修订后的摘要`
|
|
|
|
## 断言结论
|
|
|
|
- `add` 的核心语义是 upsert,而不是 append-only create
|
|
- 更新会保留同一 entry id,同时追加历史事件
|
|
- 最新摘要、状态、别名会覆盖旧值而不是与旧值并存
|