Session memory extraction deletes non-root memory files (entities/preferences/experiences) without type whitelist — memory_diff.json evidence, 148 deletions / 116 files lost over a month
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 42/100
Research direction
Start by tracing MemoryUpdater._apply_delete to viking_fs.rm and compare that path with #7101's root-page protection and #7099. Then inspect how session extraction supplies delete_ids and how MemoryUpdater.apply_operations is shared with compile memory. Define and test the requested type-level deletion policy, global or account-level deletion switch, and deletion audit; done means non-root memory deletion is protected by default and deletion attempts are recorded.
Written by the indexing model from the issue text.
Description
EN TL;DR: Session-commit memory extraction feeds model-generated delete_ids straight into MemoryUpdater._apply_delete → viking_fs.rm with no memory-type whitelist and no accounting (compile bills show deletes=[], journal silent). Beyond #7099's root memory files, this hits entities / preferences / experiences / cases / peers files. We hold three matching memory_diff.json delete records for one file that silently vanished 3× in 2 hours, plus a full ledger: 148 delete records since Oct 10, 116 URIs still missing on disk (incl. memories/profile.md, deleted 6×).
环境
openviking 0.5.4.1(PyPI,uv tool 安装,systemd 托管),自 0.5.3 原地升级;单 account 单 user,无第三方插件改动存储层。server.observability.traces 事发时为默认关闭(现已开启 local)。
缺陷与定性
session 记忆抽取(含 MCP 会话记录的抽取)中,模型输出的 delete_ids 被直接送入 MemoryUpdater._apply_delete → viking_fs.rm 落盘:
- 无记忆类型白名单——不仅 root memory files,entities / preferences / experiences / cases / peers 各区文件均可被删(
_apply_delete不区分类型); - 无账——删除不进任何任务账单(compile bill
deletes=[])、不进 journal(删除相关日志走tracer.info仅入 OTel span,trace_console=False时不落 logger)。
与 #7099 为同一缺陷路径;#7101 只保护三个根页,不覆盖本场景。
直接证据:同一文件三次消失 ↔ 三张删除记录
同一张 entities 卡在约 2 小时内三次静默消失。事后在 session 归档 memory_diff.json 的 operations.deletes[] 中找到三次一一对应的删除记录(URI 一字不差,deleted_content 全文俱在,可提供原始 JSON):
| 次 | 删除记录(归档 / 条目) | 记录时间 | 发现缺失 |
|---|---|---|---|
| 1 | sessions/zc-sess_<sid>/history/archive_015/memory_diff.json deletes[0] |
11-11 22:37 | 22:50–22:52 |
| 2 | sessions/mcp-store-<sid>/history/archive_001/memory_diff.json deletes[0](MCP 调用记录会话的抽取) |
11-11 23:09 | 23:26 |
| 3 | sessions/zc-sess_<sid>/history/archive_023/memory_diff.json deletes[2] |
11-11 23:28 | 00:12 |
记录 1(archive_015 deletes[0],memory_type=entities)
{"uri": "viking://user/<uid>/memories/entities/<dir>/openviking_rules_机制要点.md", "memory_type": "entities", "deleted_content": "# OpenViking Rules 机制要点\nOpenViking Rules 官方机制要点(2026-10-27 整理)。\n\n- 定位与官方边界\n- Rules 是第四类上下文(Resource/Memory/Skill/Rule),0.5.3 版本 Beta。……(约 3.9K 字符:编译管线、存储与生命周期、检索与判定、Beta 边界、十问核实补记;全文与原始 JSON 可提供)"}
记录 2(mcp-store-<sid>/archive_001 deletes[0],memory_type=entities)
{"uri": "viking://user/<uid>/memories/entities/<dir>/openviking_rules_机制要点.md", "memory_type": "entities", "deleted_content": "# OpenViking Rules 机制要点\n……(同卡较新版本,约 5.3K 字符,含官方核实版增量章节;全文与原始 JSON 可提供)"}
记录 3(archive_023 deletes[2],memory_type=unknown)
{"uri": "viking://user/<uid>/memories/entities/<dir>/openviking_rules_机制要点.md", "memory_type": "unknown", "deleted_content": "# OpenViking Rules 机制要点\nOpenViking Rules 官方机制要点(2026-10-27 整理;2026-11-11 两度被 compile 活动期静默删除后第三次恢复,防丢哨已挂)。\n……(第三次恢复版全文约 3.8K 字符——被删时卡正文里正记录着前两次消失事件;全文与原始 JSON 可提供)"}
注:记录 3 的 memory_type 为 unknown;同批 deletes 还包含 memories/profile.md 与另一张 entities 卡。
三次事件时间线(本地时间 2026-11-11 晚)
| 次 | 最后确认在位 | 发现缺失 | 窗口内活动 |
|---|---|---|---|
| 1 | 22:44(snapshot 锚收录) | 22:50–22:52(MCP edit 报 File not found;find 全库零命中) | 22:42 session commit;22:44 / 22:46 compile memory 两单(账单 deletes 全空);journal 显示 memory_updater 22:53:46、22:57:49 两次触达该卡 |
| 2 | 23:04 写回恢复+23:20 锚 | 23:26(目录对账 22→21 张) | 23:10–23:17 rules compile 8 单;memory_updater 23:20:31 触达该卡 |
| 3 | 23:59:30(该卡最后一次成功写回,memory_updater 同秒重嵌) | 00:12(MCP 调用报 File not found;stat/head 坐实不存在) | 3 次 session commit(00:00:01 / 00:00:54 / 00:03:17);无任何 compile |
影响面(超出 #7099 的 root memory files)
全量扫描所有 session 归档的 memory_diff.json:自 10-10 起共 148 条删除记录;其中 125 条对应的文件当前仍缺失(116 个唯一 URI)。分桶:entities 46、peers 区 27、experiences 25、preferences 13、cases 3、memories/profile.md 1(被删 6 次)、第三方 peer 区 1。包含用户实际工作数据。向量/目录索引仍列着缺失文件,召回即 404。 另:10-14 profile / identity / soul 三页集体消失的旧案,在台账中同样有对应删除记录——同源。完整 125 条清单见文末附件。
已排除的其他解释
- 外部 API 删除:
_system/usage_audit/usage_audit.sqlite3(request_audit 表)全表仅 2 条 DELETE(均为事发前本人冒烟测试),三个窗口 0 条删除请求; - MCP
forget:全部归档 0 次 forget 工具调用(仅 1 处正文提及); - 本侧定时任务:crontab 仅 3 个任务(只读监控+快照锚),无删除逻辑;
- journal 无删除行:
deleted_uris/Memory operations applied走tracer.info仅入 OTel span——日志设计使然,非部署异常(已开启 local traces 补此盲区)。
配置对照(预先说明:非自配触发)
对照 0.5.4.1 源码默认值,与删除路径相关的配置差异如下——核心结论:entities/preferences 类删除在官方默认配置下同样会发生:
| 配置 | 官方默认 | 本环境 | 与删除路径的关系 |
|---|---|---|---|
memory.extraction_enabled |
true(默认开启) | 事发后已改 false 止血 | session 抽取总闸,默认即在运行 |
| 抽取类型范围 | 9 类 − {cases, experiences, trajectories}(agent_evolution 默认 false 时被 AGENT_EVOLUTION_MEMORY_TYPES 扣除) |
全 9 类(agent_evolution=true) | entities / preferences / profile 本就在默认范围内;非默认项只放大了 experiences/cases 的暴露面 |
extraction_output_format |
"python"(DSL) | "json"(legacy) | 与删除无关:python_protocol.py 同样产生 delete_ids(DSL delete() 映射为 delete_ids) |
memory_policy / session_auto_commit |
未配置 / false | 九类全集 / true | 与默认等效 / 仅影响自动提交频率 |
诉求
- 全类型删除保护:将 #7101 的根页保护推广为类型级
allow_delete(默认禁删 entities / preferences / experiences 等非 root 类型); - 全局 / account 级"只增不删"开关:session 抽取与 compile memory 共用
MemoryUpdater.apply_operations,需要一个不改代码即可关闭删除能力的配置; - 删除独立审计:抽取删除至少落入任务账单(compile bill deletes)或独立审计事件,保证事后可溯源。
(临时止血已在做:account 级 memory.extraction_enabled=false 关闭抽取+每半小时文件存在性哨兵+每小时快照锚。)
现场保全(可配合核验)
- 快照锚:
5475b3af/07cc0489/edd777aa/a18dcff8 - 相关任务:
69a456bf-76ee-4ed4-aa84-d3378d3d4c7f、cfa6d35d-7069-4f00-9505-be4332d5ab16、rules compile 八单rul_7e559f73…–rul_03ed0b55… - 全量 tar 备份、三张删除记录原始 JSON、148 条台账均在案
Related: #7099(同一缺陷路径的首报,root memory files)、#7101(根页保护,不覆盖本场景)
附件:现仍缺失的 125 条删除记录明细(116 个唯一 URI;删除时间|来源归档)
| URI | 时间 | 来源归档 |
|---|---|---|
| memories/cases/a门v2分三段直贴复核.md | 10-28 20:46 | zc-session_8635…/archive_010 |
| memories/cases/dsh现状调研.md | 10-18 12:53 | dsh-session-…/archive_001 |
| memories/cases/八路分区会审.md | 11-09 22:23 | zc-sess_db98…/archive_065 |
| memories/entities/api 密钥/internlm_api_keys.md | 10-22 11:05 | zc-session_3fa9…/archive_001 |
| memories/entities/none/none.md | 11-07 05:24 | zc-sess_db98…/archive_039 |
| memories/entities/wiki问答/wiki_qa_ten_questions.md | 10-28 23:55 | zc-session_652c…/archive_008 |
| memories/entities/人物/王丽萍.md | 11-08 12:36 | zc-sess_1f43…/archive_005 |
| memories/entities/人物/胡萍.md | 10-26 09:56 | zc-session_5870…/archive_003 |
| memories/entities/任务/Obsidian_硅基流动向量集成.md | 10-27 11:52 | zc-session_bab0…/archive_003 |
| memories/entities/任务/compshare与h3出片.md | 10-10 19:40 | mcp-store-8e89…/archive_001 |
| memories/entities/任务/授权复审与内容闸隔离.md | 11-09 22:23 | zc-sess_db98…/archive_065 |
| memories/entities/任务/日常照片归档.md | 11-06 21:51 | zc-sess_db98…/archive_005 |
| memories/entities/任务/照片识图对账与降耗机制.md | 11-09 22:23 | zc-sess_db98…/archive_065 |
| memories/entities/任务/照片识图整理方案定稿(图片复审收口).md | 11-09 22:23 | zc-sess_db98…/archive_065 |
| memories/entities/任务/识图任务执行管线.md | 11-07 12:28 | mcp-store-efb1…/archive_001 |
| memories/entities/功能/编译引擎.md | 11-11 23:28 | zc-sess_5cdc…/archive_023 |
| memories/entities/地点/三湖管理区.md | 10-26 09:56 | zc-session_5870…/archive_003 |
| memories/entities/地点/江陵县.md | 10-26 09:56 | zc-session_5870…/archive_003 |
| memories/entities/地点/荆州市.md | 10-26 09:56 | zc-session_5870…/archive_003 |
| memories/entities/定时任务/ov-kdistill-daily.md | 11-02 11:17 | zc-session_5d2d…/archive_004 |
| memories/entities/定时任务/蒸馏任务.md | 10-14 00:26 | zc-sess_2d8d…/archive_012 |
| memories/entities/工作/20261030党代会分团讨论条稿件.md | 11-01 12:06 | zc-session_26a8…/archive_034 |
| memories/entities/工作/20261030党代表采访名单与提示.md | 11-10 10:19 | zc-sess_f2b9…/archive_001(×2 条) |
| memories/entities/工作/20261108政协采访名单v6.md | 11-09 10:46 | zc-sess_1f43…/archive_014 |
| memories/entities/工作/20261110人大八届一次会议采访名单.md | 11-11 14:15 | zc-sess_1f43…/archive_059 |
| memories/entities/工作/OpenViking班次总表.md | 11-02 11:58 | zc-session_5d2d…/archive_005 |
| memories/entities/工作/电视新闻工作.md | 11-02 22:55 | zc-sess_5f8d…/archive_003 |
| memories/entities/工具/openviking embedding 讯飞4096切换.md | 10-27 18:18 | zc-session_53d8…/archive_014 |
| memories/entities/工具链/openviking.md | 10-10 19:41 | zc-sess_6413…/archive_001 |
| memories/entities/工具链/openviking_053改造清单.md | 11-03 08:44 | zc-sess_da7c…/archive_004 |
| memories/entities/工具链/vault记忆层.md | 10-10 19:41 | zc-sess_a878…/archive_008 |
| memories/entities/工具链/电脑环境.md | 10-13 07:02 | mcp-store-117d…/archive_001 |
| memories/entities/待办/夜间监测汇总与四项拍板.md | 10-28 18:50 | zc-session_8635…/archive_004 |
| memories/entities/文档/官方渠道三轮问答实录.md | 10-27 03:08 | zc-session_9c53…/archive_002 |
| memories/entities/服务器/500w台式机.md | 11-02 22:49 | zc-sess_bb92…/archive_007 |
| memories/entities/服务器/deepseek应急渠道.md | 10-20 23:20 | zc-session_7cae…/archive_002 |
| memories/entities/服务器/openviking_官方版本线.md | 10-28 23:45 | zc-session_be47…/archive_009 |
| memories/entities/服务器/家里_openviking_服务器.md | 11-02 22:49 | zc-sess_bb92…/archive_007 |
| memories/entities/服务器/记忆服务器已知坑.md | 10-10 19:41 / 10-14 00:26 | zc-sess_6413…/archive_001;zc-sess_2d8d…/archive_012 |
| memories/entities/服务器/记忆服务器模型链.md | 11-02 11:17 | zc-session_5d2d…/archive_004 |
| memories/entities/服务器组件族/openviking_0.5.1_编译架构变更与书生渠道组合病.md | 10-25 08:34 | zc-session_7326…/archive_013 |
| memories/entities/服务器组件族/升级资产清单族.md | 10-25 23:54 | zc-session_db6e…/archive_045 |
| memories/entities/看板/在制任务看板-基础设施-日报编译修复.md | 10-26 00:53 | zc-session_7326…/archive_054 |
| memories/entities/看板/在制任务看板-基础设施-服务器与账号.md | 11-02 22:45 | zc-sess_bb92…/archive_006 |
| memories/entities/看板/在制任务看板-基础设施-模型链与定时.md | 10-13 11:35 | zc-sess_56ad…/archive_003 |
| memories/entities/看板/在制任务看板-基础设施-记忆治理.md | 10-28 18:13 | zc-session_8635…/archive_001 |
| memories/entities/网络拓扑/home_network.md | 11-12 00:15 | zc-sess_bbf4…/archive_001 |
| memories/entities/记忆治理/记忆治理10-20失败单与issue.md | 11-07 12:24 | mcp-store-aeae…/archive_001 |
| memories/entities/镜像/机智罗_jzl_导演台_v8.2.md | 11-05 19:19 | zc-sess_2e1c…/archive_022 |
| memories/experiences/(25 张:API_key安全加载与预检 / API_故障分层排查法 / OV_embedding维度_Ollama表qwen3写错 / openviking升级前官方信息自查 / ov_compile_日报须归档_staging_化 / ui搜索范围实测结案 / 主线主卡制合并判据 / 免费api密钥验通 / 冲突合并留证补丁建议 / 可读性评估流程 / 合并冲突拒写复现 / 备用渠道创建与路由验证 / 备用渠道路由验证 / 官方cron入口修复确认 / 工作区钩子信任重授 / 整体逻辑验证账交付 / 服务器升级前置核查 / 检索漏项补正 / 生产补丁原文审后定案 / 组件版本更新分层详解 / 补丁版本错配归因 / 记忆卡终局回写 / 评审结论归档追加 / 长卡覆盖丢失诊断与限额变更决策 / 项目记忆卡清单更新) | 10-22–11-02 | 多个归档 |
| memories/preferences/zheng/(7 张:任务执行顺序与质检偏好 / 创作线细则 / 执行规矩 / 新闻稿数据口径 / 本地记忆执行纪律 / 盒子服务器关机操作流程 / 记忆库写入规范 / 魔搭账号管理) | 10-10–11-11 | 多个归档 |
| memories/preferences/郑先生/(5 张:新闻稿栏目模板写作 / 新闻类产出落点 / 盒子_sudo_使用偏好 / 记忆系统分工 / 采访提纲与名单整理偏好) | 10-10–11-11 | 多个归档 |
| memories/profile.md | 10-10 / 10-14 / 10-25 / 10-27 / 11-06 / 11-11(共 6 次) | 六个不同归档 |
| peers/<peer>/memories/(27 张:entities 人物·任务·地点·定时任务·工具·工具链·服务器·看板·网络·资产·风险防护 等 + identity.md + soul.md×2 + preferences 4 张) | 10-10–11-12 | 多个归档 |
| peers/<peer-org>/memories/entities/工具/ov-taskdoctor.md | 10-10 19:41 | zc-sess_68a7…/archive_030 |
("多个归档"分组的逐条时间/来源明细、以及三张删除记录的完整原始 JSON,均可按需提供。)
- Dominant language
- Python
- Stars
- 41.8k
- Forks
- 3.4k
- Avg merge
- 19h 29m
- Merged PRs (30d)
- 500
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from volcengine/OpenViking
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
volcengine/OpenViking#7485 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
volcengine/OpenViking#7210 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
volcengine/OpenViking#7205 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: Retrieval rerank fallback statistics stay zero after provider failurePossibly taken @97Three claimed this 8 days ago. Openbug kernel
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
volcengine/OpenViking#7014 ·
Maintainers usually reply within 1 day
-
[Bug]: memory.prefetch_search_topn is inert above 5 (call site omits limit), plus two docstrings state the wrong defaultsPossibly taken @peterzhang987723 claimed this 8 days ago. Openkernel
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
volcengine/OpenViking#6923 · 2 comments ·
Maintainers usually reply within 1 day
All issues in volcengine/OpenViking
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
FinanceFlash/unvibecode#699 ·
Maintainers usually reply within 1 day
-
enhancement Website
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
OWASP/OWASP-Hunting#96 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
micropython/micropython#19942 ·
Maintainers usually reply within 1 day
-
A rebuild posts "not part of this build" success to the commit's failed `nix-build` gate and effectsPossibly taken @Padraic-O-Mhuiris claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
`epoch.Integer` raises a raw OverflowError for integers too large to convert to a floatPossibly taken @arindam77 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
pydantic/pydantic-extra-types#479 ·
Maintainers usually reply within 1 day