Repository navigation
0.11.0(会话日志完整性、卡片默认脱敏与成员级排除)
会话日志完整性与披露边界版:修掉两个「写坏会话日志」的 P0 与一个「命令被拒绝但面板照样翻开关」的投影不一致,完成卡片默认脱敏、压缩成员级排除、弱候选置信度统一。
修复(P0)
- 替换节点缺
data.source(持久性损坏):session.append(type, data, opts)的opts只认surfaceOp/sourceEventSeqs,其余键静默丢弃。插件把source写进opts,落盘的user/message就没有source,宿主投影无保护地读event.data.source.kind抛TypeError,整条历史从此打不开(SESSION_QUERY_CORRUPT_SESSION),重启无效。已复发两次。现在折叠回执与凭证的source一律写在data里并补id/role;测试替身FakeSession.append同步收紧成与真实宿主同语义。 compaction/prune.shadowedSeqs与活动面不符:提交点用run.flatMap(unit => unit.shadowedSeqs)拼名单,区间里若夹着插件自己的回执(seq 数值比区间末尾大、位置却落在区间内),它不会进名单 → prune 落盘即非法 → 下次冷加载报SessionFormatError,紧随的 replace 也被宿主拒(sourceEventSeqs must include every shadowed surface node; missing <seq>),该区间永远归档不掉。现在提交点按活动面位置切片取名单(两端必须在面上、顺序正确、逐项相等,否则失败关闭不写 prune);shadowedTokenCount与名单同源,对账差额归零,容差未放宽。- 命令被拒绝,面板却显示已生效:宿主把每次斜杠命令都记成
command/run,投影只能按命令行折叠,看不出这次调用成没成——「关闭降温」被维护窗口拒绝(返回红字、持久状态一个字节没动)时面板照样翻成已关闭。现在每条状态类命令结束后(成功或失败都写)追加一条权威状态记录plugin:dsh-memory-context-lab/state,值取自当时的真实记录/引擎状态;投影折叠到它时直接覆盖开关位,重放(resume/fork)同样生效。宿主拿不到appendPluginRecord时如实降级并在回执里说明,绝不假装写过。
隐私与披露
- L1/L2 卡片默认不复制正文:摘录、跨度摘录、结论行这类自由文本原子的值默认渲染成固定标记
(正文摘录未共享),只保留 entity、属性标签、极性/关系标签、来源 ID 与expand入口;结构化属性(exit 1、465 项全绿、版本号、错误签名、时间)照常保留——脱敏删的是正文副本,不是证据。 - 新开关
shareL2Content(默认false,失败关闭):/memory-lab2 set sharel2content on|off,设置页「全局默认」增复选项,面板在engine === 'v2' && compressOn时显示开关。显式开启才在卡里放正文摘录。 - 开关覆盖全链路:程序卡渲染、L1/L2 卡、模型相位的输入行(建块时就脱敏,保证模型消息、预算计量、
blocksHash与最终卡同源)、崩溃重放的 L1 占位都受同一开关约束;两种模式各自逐字节稳定,卡里带一行恒定模式说明。
层级压缩
- 成员级排除:此前任一成员被遗忘即整组
member-forgottenblocked,同组其余成员永远压不掉。现在只把被遗忘成员排除出参与集:不读其正文、不进 L1/L2/sourceRecordIds/leafIds,其余成员照常蒸馏;全部成员被排除时仍整组失败关闭(没有安全子集)。 - 计划 schema 2:
recordIds语义收紧为「参与蒸馏的子集」,新增excludedRecordIds/excludedMembers({recordId, seq, reason})/memberDigest(sha256 前 12 位);memberSeqs/memberTexts仍是表面全集,区间身份与voucherId因此不变。v1 计划(无planSchema)保持整条作废语义。 - 披露有边界:凭证文本与 L2 卡头只在真的排除了成员时追加一行;无排除时输出与 0.10.x 逐字节一致。
检索
- 统一 exact 后验:抽成纯函数
exactPostfilterHit+ 共用驱动applyExactPostfilter,检索通道与弱候选诊断走同一份判定(此前各写一份,口径会漂移)。 - 弱指针带可机读置信度:
weakPointer: true、isHit: false、confidence: { kind: 'weak', score, coverage, exactVerified };不通过 exact 后验的弱候选如实丢弃(「弱」不是免责条款)。回注文案改为「弱指针(不是命中),只给 ID,不计入回读计数」。
测试
- 全量 62 套 / 717 项断言 0 失败、0 跳过(Node v24.19.0,2026-10-18)。新增 3 套:
v2-surface-source(8)、v2-share-l2-content(8)、v2-weak-pointer(5);v2-forget-hierarchy改写为成员级排除契约(6 项)。 npm run probe:revert:28 个场景全部OK(还原后测试失败),未覆盖 0 个(0.11.0 新增 6 个)。- 真实灵枢集成 3/3 真实通过(不再 skip);
npm run probe:lingshuexit 0。
安装
dsh plugin add dsh-memory-context-lab-0.11.0.tgz从下方 Assets 下载 dsh-memory-context-lab-0.11.0.tgz。本版未改动 v1 命令面;plugin-v1(0.6.2)是冻结线,不随本版升号。