# 记忆架构三文件「存储信息界限白名单」规格 > 版本:v21(2026-09-11 新增 **§8.1 指针树分裂律**——指针是搭树的边、不是限制树的闸;多层指针的目的=**渐进式加载召回**。结构律 `读一层 = O + K·E ≤ R`(每层独立 ⇒ 深度免费)、层数 `⌈log_K(N)⌉`(K≤12)、分裂三触发;展示律 注入行 100 = 固定 56 + 根指针 44,**44 只约束一跳直达、不约束树深**(逐层指针 O(1))。沿革 v20:2026-09-11 用户拍板**容量红线上调**——MEMORY 3,000→**5,000**、USER 2,000→**3,000**,AGENT 3,000 不变;「画像 3,000 · 记忆 5,000」成为现行默认,写门 `memory_write_gate` / 追加门 `memory-append` / 体征 `memory_health_check` / 面板容量门默认值四处同源。沿革:v17(2026-09-09)新增 `[路径]` 通用任务路径行(对标 AWM:可复用任务类型的变量化步骤序列)+ 成败信号入归纳材料;v16=原则层并入 agent 画像:PRINCIPLES.md 退役,AGENT.md 成为成长型自我画像——L0 图式概念以 `[原则]` 索引行类别存在于 AGENT.md,容量扩至 3,000;v14 四级层级收敛为三级。注:v15=单库化+双画像,2026-09-08,彼时未同步头部版本号) > 权威角色:本文件为记忆架构(SKILL / MEMORY / USER / AGENT / notes)存储边界的唯一权威来源。 > 定位愿景(2026-09-09 用户拍板 · 2026-09-13 P5 口径修正):本插件 = **长期记忆底座**(服务助理的记忆能力,而非"本插件是助理")——蒸馏=学习,深度睡眠归纳=睡前反思(把经验内化进人格),replace 更新=迭代;AGENT.md 即**助理的成长档案**。伙伴关系与人设实现属**另一插件**,不在本仓;完整口径见 `docs/context-supply-plan.md` §5(三条判别口径:主语 / 可交付 / 唯一性)。 > 原则:**各文件存储信息界限白名单均为可编辑的活定义**——通过 §7「白名单变更机制」调整,禁止绕过机制私自改文件。 --- ## 0. 文件定位(先对齐认知) | 文件 | 本质 | 对应 Hermes | 承载什么 | |------|------|-------------|----------| | **SOUL.md**(DSH 侧即 `SKILL.md`) | 规则承载 | `AppData\Local\hermes\SOUL.md` | 人设 + 纪律 + **记忆体系的规则本身**(四问 / 分类边界 / 容量红线 / 审计流程) | | **MEMORY.md** | **知识索引**(会话注入,零正文) | `memories\MEMORY.md` | 一行一索引:`[tag] 主题(日期)[溯源] → notes/.md §小节` | | **USER.md** | **用户画像索引**(会话注入,零正文) | `memories\USER.md` | 一行一画像索引 → `notes/user.md §小节`(关于"人") | | **AGENT.md** | **agent 自我画像索引**(成长型:会话注入,零正文) | —(MemGPT persona block 文件版) | 一行一自指索引 → `notes/agent.md §小节`(关于"agent 自己":学习史/演化/身份/偏好/习惯/**习得原则** `[原则]` 行与**任务路径** `[路径]` 行(v17)——原 L0 原则层 v15 并入此处) | | **notes/** | **详情层**(按需读取) | — | 全部正文:env/tools/flows/lessons/release/user/agent.md,§ 小节组织 | > 记忆架构的"记忆" = **索引(MEMORY/USER/AGENT)** + 详情(notes/)+ 候选(pending/);SOUL 定义"如何记忆与守纪律",只存规则不存数据。**会话注入面 = 画像索引(USER/AGENT)+ 知识索引(MEMORY)**(实测数字以 health_check 输出为准,不在此固化)。 > **三级层级(v15,人脑类比;原 v14 四级之 L0 原则层并入 agent 画像)**:L1 索引(语义 gist:画像 + 知识,其中 `[原则]` 行承载图式/直觉、`[路径]` 行承载可复用任务路径(v17))→ L2 详情(情景+教程)→ L3 暂存归档(pending/audit)。**提纯向上**(任务执行→pending→蒸馏→notes→归纳→画像原则行),**遗忘降级向下**(细节下放归档、gist 留上层)——每一次任务执行就是一次沿梯提纯(2026-09-08 用户拍板)。 --- ## 1. 总则 ### 1.0 载体契约与三层生效模型(v2.2 / ADR-130) > **唯一事实源 = `engine/criteria.json` 的 `carriers`**(人读投影见 `engine/criteria.md`「载体契约」表;机检 `node scripts/check-carriers.mjs`,纳入 `npm test`)。 > **判据决定"收不收",载体决定"写进去之后以什么形式存在、是否会被注进上下文"**——两件事必须都显式。 | 层 | 语义 | 生效方式 | 判据(入册门槛) | |---|---|---|---| | **P · Persona/Identity** | 身份 · 使命 · 边界 · **性格** · **认知** · 演化 · 稳定习惯/偏好 | **always-on**(先占预算,**不参与相关性竞争**) | 跨环境稳定:≥2 环境 或 ≥3 次复现,且非任务专属 | | **R · Procedural** | `[路径]`(可复用任务步骤) | **任务型门控**(命中该任务类型才注入;复用认知环快通道的熟悉度分流) | 同型 ≥2 ∧ 跨会话 ≥2 ∧ 只从成功归纳 | | **E · Episodic/Semantic** | 教训 · 流程 · 环境事实 · 工具 · **经验/学习史** · 知识索引 | **相关性门控**(top-k 竞争,吃剩余预算) | 四问 + 唯一性硬门(§1.1 + §8) | - **载体三要素**:`{layer: P|R|E, form: index|profile|notes|audit, inject: always|gated|none}`。**P 必 always;R/E 必 gated 或 none**(机检强制——否则恒常层会与情境层抢预算)。 - **读取面义务**:每种 `injectable` 组合都必须有渲染器(`always:index`/`always:profile`/`gated:index`);**任一新标签都必须先在注册表登记并落到某个渲染器上**,否则机检失败。 - **写入回执**:每次写入尝试落统一台账 `~/.dsh/suite/knowledge/audit/ledger.jsonl`(`type=decision.*` 判据 + `type=write.*` 写入,含 `attempted/written/verdict/reason/gateExit/rejectedLines`);**门禁逐条裁决**——单条不合格不再拖垮整轮。 - **成熟度**:`A = A0 + step·(跨日再现日数 − 1)`(缺省 A0=0.3/step=0.2/gate=0.5),由 `scripts/maturation-scan.mjs` 落 `audit/maturation.jsonl`;**`maturation.enforce=false`(缺省)只记录**,置 true 后 `A≥gate` 才允许升格为 `[原则]`/`[路径]`。 - **统一打分(E 层,M5 开关)**:`score = α_rel·relevance(RRF) + α_imp·importance + α_rec·recency`(缺省 α_rel=1.00 / α_imp=0.35 / α_rec=0.10,**刻意压低 recency**);`surface.score.mode=legacy`(缺省)时不启用,切换需影子期证据(`audit/score-shadow.jsonl` 的相关性分析)。 ### 1.0.1 写面清单与深睡完成语义(v2.2 审查补记 · 2026-09-11) > 来源:架构审查报告 `docs/architecture-review-20260911.md` 的 F2/F3/F10 —— 三条**语义此前未写明**,实现无误但文档缺位,补记于此。 - **写面清单(权限递减,全部留痕)**:① **面板**(用户显式操作 `/set|/toggle|/memory/*`)② **睡眠自检白名单窄动作**(仅 `rollback-scoreWeights`,依据 R-3;需显式开启 `selfCheckAutoRollback`;执行前备份 `scheduler.json.bak-selfcheck`,落台账 `adjust.rollback`)③ **手工编辑**(用户直接改文件)。三者写同一份 `~/.dsh/suite/scheduler.json`,**不得新增第四条写面**。 - **深睡「done」的门槛 = 材料消化完成**(`stop==='completed' && out`),**不含落盘门禁的成败**:gate 全拒(`added=0`)仍算 done、**不回滚水位**(重跑只会再被拒一次并重复消耗 LLM)。落盘成败走**写入回执**(`audit/ledger.jsonl` 的 `type=write.consolidate`,含 `attempted/written/rejectLines/gateExit`),并与 `[flow] 深睡水位护栏` 并存:**护栏管"解析失败/异常 → failed 回滚",回执管"写没写进去"**。 - **自检触发范围**:**任何非 `no-traces`/`no-parent` 的深睡结束**都会跑睡眠期自检(含 `stop=error/aborted`——失败时更该看);此外有定时(缺省 6h)与手动(`POST /selfcheck/run`)两条触发。三条路径共用同一实现并写同一条台账 `type=check.sleep`(`trigger` 字段区分)。 - **检测件退出码契约(ADR-132 · 审查 F6)**:`0 = pass · 3 = skip(依赖缺失,不算失败)· 其他 = fail`。仓侧统一入口 = `node scripts/check-runner.mjs`(`npm test` 的检测段经它运行);库侧 `sleep-selfcheck.mjs` 实现同一契约。 - **字段角色契约(ADR-132 · 审查 F1)**:`engine/criteria.json#fieldRoles` 逐字段声明 `runtime`(**代码真消费**,改注册表即生效)或 `doc`(**仅文档/机检参考**,运行时真源在 `scheduler`/`vec` 等代码常量)。机检 `node scripts/check-field-usage.mjs` **双向校验**:声明 runtime 必须被消费、声明 doc 必须未被消费(标记说谎即红灯)。⚠ 当前 `L0`/`SURFACE`/`GATE`/`HEALTH`/`TRIGGER` 均为 doc——**改这些不生效**,要改行为请改对应的代码配置(详见审查报告 §5)。 ### 1.1 判据分层(v2/ADR-122:**判据不是散文,是注册表**) > **唯一事实源 = `engine/criteria.json`**;人读投影 = **`engine/criteria.md`**(生成,禁手写);机检门 = `node scripts/check-criteria.mjs`(纳入 `npm test`)。 > 本节的职责从"复述判据"改为"**说明判据分几层、谁强制**"。改判据一律:改注册表 → 重跑 `scripts/gen-criteria.mjs` → 过机检门。 | 层 | 判据 | 谁强制 | 取值域(枚举,不打分) | |---|---|---|---| | **L0 共用内核**(两域同口径) | 可复用性 / 泛化度 / 稳定性 / 冲突性 | 模型输出 + 宿主 `src/criteria.ts#evaluateL0` 代理标注(入台账) | 跨任务·跨项目·仅本会话 / 方向指引·契约事实·细节条文 / 单次·当日·跨日 / 无·并存·取代 | | **L1 摄取域**(会话 → 库,`domain=ingest`) | **归属**(含原 R1–R4 与四问,**降级为归属子判据组**)· 落点 · 粒度(§8.1 R/K 律)· 去重(精确 / bigram≥0.66)· 格式(§8 四要素) | 归属=模型自觉(soft);落点/粒度/去重/格式=**宿主硬门** | memory·project·discard / 7 类 notes+节 / 并入·裂 ### / 通过·拒收 / 合规·违规 | | **L1 巩固域**(库 → 库,`domain=consolidate`) | 支撑度(原则 ≥3 痕迹 / 路径 ≥2 次且跨会话且只从成功)· 升格 · 整形(treeOps)· 降格/遗忘(cold+≥90d+三守卫)· 跨主题(≥2 §)· **前提识别(premise)** | 支撑度=模型自觉(soft);整形/降格/跨主题=**宿主硬门**(不变量 + 归档可回滚) | 达标·不足 / 升格·保持 / split·merge·rename·no-op / archive·keep / ≥2§·不足 / 依赖前提·自洽 | | **L2 代价权重**(共用) | 误注入代价 > 漏写代价 | 纪律(非机检):默认保守;**拒绝必给理由**(`skipped.reason`) | — | - **R1–R4 归属路由**(v4 单库化沿用):R1 泛化方向指引→memory;R2 跨项目细粒度条文→memory(notes/tools|lessons);R3 项目专属事实→project(直写 `/docs/devref/shoucang/`,workspace 反解失败→`pending/*-project-defer-*` 待认领,**不丢弃**);R4 一次性/可搜索/无实质→discard。 - **四问(Q0 已有归属 / Q1 下周用得上 / Q2 归谁 / Q3 能合并)**:作为 `ingest.route.q*` 子判据组存在,**不再是全局判据抬头**;Q2 归谁 = 用户→`USER.md`、agent 自身→`AGENT.md`、环境/流程→`MEMORY.md`。 - **规则/纪律/程序类:不入库** —— SKILL 与 `skill/*.md` 协议文档是**随插件发布的只读文档,没有写入通道**(v2 删除原「规则→SOUL.md」死支:宿主白名单只有三主档 + 7 类 notes)。 - 条目格式见 §8;判据参数(容量/警戒/R/K/bigram 阈值/rerank 触发门等)见 `engine/criteria.md` 的「硬门与观测参数」表。 ### 1.2 红牌通则(一律不可存) - PID / 端口等一次性运行时标识 - 一次性任务上下文、任务进度(跟踪器职责,非记忆) - 可搜索公开知识、大段代码 / 日志全文 - 重复事实(同一事实只存一处,异文件也不双写) - 技能 / 脚本已承载的程序性细节——只留指针 --- ## 2. 白名单总表 | 维度 | **SOUL.md(SKILL.md)** | **MEMORY.md** | **USER.md** | |------|------------------------|---------------|-------------| | 职责 | 规则承载:人设 + 纪律 + 记忆体系规则 | **知识索引**(详情在 notes/) | **画像索引**(详情在 notes/user.md) | | 白名单对象 | 可承载的**规则类别**(见 §3) | 标签白名单(见 §4) | 标签白名单(见 §5) | | 容量红线 | ≤5,000 字符(建议,可改,§7) | ≤5,000 字符(2026-09-11 上调:3,000→5,000,可改) | ≤3,000 字符(2026-09-11 上调:2,000→3,000,可改) | | 标签白名单 | —(体例内,无需标签) | `[env]` `[tool]` `[flow]` `[lesson]` | `[身份]` `[环境]` `[硬件]` `[偏好]` `[习惯]` | | 条目形态 | Markdown 章节 | 索引行(§8 模板) | 索引行(§8 模板) | | 当前容量 | 以 `memory_health_check.mjs` 实测为准(不固化快照数字,防漂移) | > 容量口径统一按健康脚本(`raw.replace(/\s/g,'').length`,不计空白)。SOUL/SKILL 目前无硬限,§3 给出建议上限与纳入体检的可选项。 > **主/副分层(v6)**:`MEMORY.md`/`USER.md` 为**纯索引**——会话注入仅索引行,**禁止正文**(描述性内容 >40 字即违规,§8);`notes/` 为详情层(正文全在这里,按需读取);`pending/` 为候选暂存。 > **详情下沉(v9 改)**:notes 子文档(`INDEX/env/tools/flows/lessons/release/user/agent.md`)为**按需读取层,不设容量硬限**(>8,000 仅提示拆分,write_gate 不拦截、health 不 exit)——详情按 read_section 取,膨胀只增读取成本不进注入面;索引行 `→ notes/.md §小节` 定位;子文档可写、纳入体检(注册/指针/小节完整性,见 §6)。 > **候选暂存 `pending/`(对齐 Mem0 ADD-only)**:四问评估前的候选存放处——非权威记忆、不计容量红线;审计/任务收尾时评估后入册(经 write_gate)或删除。检索时不得把 pending 当作记忆引用。 > **习得原则(v16,原 v14 原则层并入)**:跨任务泛化原则以 `[原则]` 索引行并入 AGENT.md——白名单/格式/判据见 §5.8,唯一写入口=深度睡眠归纳 pass;PRINCIPLES.md 不再建档/注入/写入(原件归档 audit/)。 --- ## 3. SOUL.md(SKILL.md)— 规则白名单 > SOUL 是"规则层",其白名单是**允许承载的规则类别**。只存规则,不存动态数据 / 画像。 ### 3.1 白名单(可承载的规则类别) | 规则类别 | 内容 | 是否必存 | 对应节 | |----------|------|---------|--------| | 人设 / 使命 | Agent 是什么、擅长什么、拒绝什么 | 必存 | 顶部 | | 铁律 / 协议 | L1:审查防护通则 / 方案确认门 / 动词即边界 / 交付纪律 / 零容忍;L2:会话加载 / 写入前置门 / goal 分界 / 委托并行 / 周期审计 | 必存 | 🚦 L1 / 📋 L2 | | 记忆体系 | **四问流程** / 分类边界 / 容量红线 / 审计流程(摘要;完整定义见本文件) | 必存 | 🧠 记忆体系 | | 工具与恢复 | 工具失败换路速查 | 按需 | ⚠️ 速查 | ### 3.2 红线(SOUL 不可承载) - ❌ 动态记忆:环境事实、工具配置、流程路径、踩坑教训(归 MEMORY/notes) - ❌ 用户画像:身份 / 硬件 / 偏好 / 习惯(归 USER/notes/user.md) - ❌ 一次性任务上下文 / 任务进度 - ❌ 超大正文 / 冗余解释(无硬限但重冲突,参考上限 ≤5,000) ### 3.3 容量红线(建议,可改) - 建议上限 **≤5,000 字符**(2026-09-01 经用户确认从 3,000 上调,配合低风险精简)。 - 超上限 → 先**低风险精简**(删解释/压缩重复,不动规则骨架),仍超再按 §7 流程经用户确认上调。 --- ## 4. MEMORY.md — 知识索引白名单(4 标签) > 只存 Agent 维持运行所需的环境 / 工具 / 流程 / 教训的**索引行**。人物画像类一律不存。正文一律进 notes。 | 标签 | 白名单(可存主题) | 正例(索引行) | 反例(不可存) | |------|----------------|----------------|----------------| | `[env]` | 稳定环境事实:数据目录、GUI 地址、运行时路径、版本环境 | `[env] DSH 环境(2026-08-13)[agent] → notes/env.md §DSH 环境` | 某个具体 PID / 瞬时端口 | | `[tool]` | 工具配置与坑:工具名 / 版本 / 路径 / 调用方式 / 换路 | `[tool] ZCode(2026-08-13)[agent] → notes/tools.md §ZCode` | 工具的一次性运行日志 | | `[flow]` | 工作流路径:流程 / 职责边界 / 纪律 / 同步关系 | `[flow] 职责边界(2026-08-13)[owner] → notes/flows.md §职责边界` | 某次任务的具体进度 | | `[lesson]` | 踩坑教训:根因 + 对策(稳定可复用) | `[lesson] 网络坑(2026-08-13)[agent] → notes/lessons.md §网络坑` | 一次性的报错临时处理 | - **红线**:不存画像类;**不存正文**(索引行 >40 字描述即违规)。 - **容量**:≤5,000 字符(2026-09-11 上调:3,000→5,000);实测以 health 为准。>80% 先合并;>85% 或任务收尾做周期审计。 --- ## 5. USER.md — 画像索引白名单(5 标签) > 只存"这个人"的稳定画像的**索引行**,正文在 notes/user.md。环境 / 工具 / 流程类一律不存。 | 标签 | 白名单(可存主题) | 正例(索引行) | 反例 | |------|----------------|----------------|------| | `[身份]` | 用户身份标识:姓名 / Git / SSH | `[身份] 中文用户(2026-08-13)[owner] → notes/user.md §身份` | 本机 DSH 数据目录路径(归 MEMORY[env]) | | `[环境]` | 用户侧软硬件环境构成 | `[环境] Win11 环境(2026-08-13)[owner] → notes/user.md §环境` | 某工具装的路径细节(归 MEMORY[tool]) | | `[硬件]` | 机器硬件与资源用途 | `[硬件] <你的硬件型号>(2026-08-13)[owner] → notes/user.md §硬件` | 某进程此刻占用 GPU | | `[偏好]` | 用户偏好:选型取向 / 领域兴趣 / 项目约束 | `[偏好] 开源/免费优先(2026-08-13)[owner] → notes/user.md §偏好-开源免费` | 用户某次在会话里的临时指令 | | `[习惯]` | 用户工作习惯与验收期望 | `[习惯] 中文短指令(2026-08-13)[owner] → notes/user.md §习惯-中文短指令` | 本次任务进度 | - **容量**:≤3,000 字符(2026-09-11 上调:2,000→3,000);实测以 health 为准。 --- ## 5.5 AGENT.md — agent 自我画像白名单(自指) > 只存"关于 agent 自己"且 **SKILL/MEMORY/USER 未承载** 的稳定事实(MemGPT persona block 文件版)。人设/纪律权威=SKILL、职责边界=MEMORY[flow]、用户画像=USER——本文件不重复承载(防重复铁律)。 | 标签 | 白名单(可存) | 正例(索引行) | 反例 | |------|----------------|----------------|------| | `[身份]` | agent 定位(SKILL 未承载的自我描述) | `[身份] ... → notes/agent.md §身份` | 人设全文(权威在 SKILL §SOUL) | | `[使命]` `[边界]` | agent 使命/拒收边界的变化记录 | `[边界] 拒收范围调整(2026-...)[owner] → ... §使命与边界` | 已归 MEMORY[flow] 的职责边界 | | `[偏好]` `[习惯]` | agent 级工作偏好/习惯事实 | `[习惯] ...(2026-...)[agent] → ... §偏好` | 用户偏好(归 USER) | | `[经验]` | **个体学习史**:被纠正的误区/修正结论(反思闭环落点) | `[经验] 参数解析坑(2026-09-01)[agent] → ... §学习史` | 环境踩坑(归 lessons.md) | | `[原则]` | **习得原则**(v15,原 L0 原则层并入):多条经验反复提纯凝成的跨任务泛化方向指引;**唯一写入口 = 深度睡眠归纳 pass**(不走向问/蒸馏直写),行内概况即原则一句,指针指向归纳来源小节 | `[原则] 换路优于死磕 · 先验证成本低再修改成本高 → notes/lessons.md §A/§B` | 细节条文(归 notes);一次性结论;未带源指针 | | `[路径]` | **通用任务路径**(v17,对标 AWM):可复用任务类型的变量化步骤序列(具体值用 `<项目名>/<端口>` 占位);**只从成功任务归纳**(判据=同类型窗口 ≥2 次);唯一写入口=深度睡眠归纳 pass,行内概况即路径概要(≤40 字,用 ①②③ 串联,禁步内 `→`),指针指向 flows 小节 | `[路径] DSH 插件升级 · ①提交推送 ②cp 覆盖 lib ③sc restart ④四端点 200 → notes/flows.md §升级` | 单次任务具体步骤(归 notes);失败任务(只进原则教训);未变量化的细节 | | `[演化]` | 自我定位调整记录 | `[演化] 定位演进(2026-09-01)[owner] → ... §演化` | 一次性任务上下文 | | `[性格]`(v2.2 新增) | **行为/表达风格的稳定特征**(简洁、先证据后结论、不堆叠……):跨环境恒常 | `[性格] 先验证再下结论 · 成本低者先行 → notes/agent.md §性格` | 单次任务的临时语气;与 [习惯] 重复的内容 | | `[认知]`(v2.2 新增) | **思维模式/方法论偏好**(架构优先、根因优先、判因后动……):跨环境恒常 | `[认知] 架构优先 · 动手前先确认落在哪个架构节点 → notes/agent.md §认知` | 具体技术结论(归 notes/[原则]) | - **容量**:≤3,000 字符(v15 上调:原则行并入需要空间,原 v10 的 2,000;实测以 health 为准);学习史小节增长优先走"拆分/合并"(重组 SOP)。 --- ## 5.8 agent 画像 · 习得原则与任务路径(原 L0 原则层 v15 并入 AGENT.md;v17 新增 [路径] 行) > **v15 变更(2026-09-09 用户拍板)**:PRINCIPLES.md 独立原则层退役——跨任务泛化原则改以 `[原则]` 索引行**并入 AGENT.md**(agent 画像 = 助理的成长档案:角色定位/稳定做法/能力边界/常犯错误/习得原则;「一直学习、反思、迭代」的载体)。判据与红线原样保留: | 维度 | 白名单 | |---|---| | 条目格式 | `[原则] <主题 · 一句泛化> → notes/.md §A/§B`(与 AGENT.md 索引行格式一致,一行一条)或 `[路径] <任务类型 ≤10字> · <步骤概要 ≤40字,用 ①②③ 串联> → notes/flows.md §小节`(v17;具体值变量化,禁步内 →) | | 内容判据 | 跨任务泛化(不绑定单一工具/项目);`[原则]` 从 ≥3 条同主题经验归纳;`[路径]`(v17)同类型在窗口 ≥2 次且**只从成功任务归纳**(失败只进原则教训);均粒度对齐 R1 锚(宁粗勿细) | | 红线 | 不存细节条文(归 notes);不存一次性结论;不带日期/维护元信息 | | 容量 | 随 AGENT.md ≤3,000 字符;超限=原则间合并(提炼更上位的原则),宁少而准 | | 写入/更新 | 唯一入口=深度睡眠归纳 pass(宿主停滞 ≥3h 自动触发;经 write_gate,目标=AGENT.md);原则被新经验修正时原地 replace(再巩固) | | **双画像反思(2026-09-09 用户拍板)** | 睡眠=agent 的反思进化迭代,**不仅要认识自己还要认识用户**——同一归纳 pass 双输出:原则行/画像事实 → `AGENT.md`(认识自己)+ 用户画像更新 → `USER.md`(认识用户,`profileOps` 通道,判据红线同原则);两画像缺一即反思不完整 | | 使用 | 执行循环①③步(澄清意图/计划)优先读 `[原则]`/`[路径]` 行——最粗粒度方向指引/脚本骨架;PRINCIPLES.md 不再建档/注入,原文件归档 audit/ | --- ## 6. 边界对照与健康联动 ### 6.1 判定流 ``` 一个待存事实 ├─ 是"多条经验归纳出的跨任务原则"? ──▶ AGENT.md `[原则]` 行(仅经深度睡眠归纳 pass 入口,不走四问;v15 并入 agent 画像) ├─ 是"规则/纪律/程序"? ──▶ SOUL.md(§3 规则类别) ├─ 是"用户是哪个人/用什么/喜欢什么/习惯"? ──▶ USER.md 索引 → notes/user.md §小节 ├─ 是"关于 agent 自己(学习史/演化/自指)"? ──▶ AGENT.md 索引 → notes/agent.md §小节 ├─ 是"环境/工具/流程/教训"? ──▶ MEMORY.md 索引 → notes/{env|tools|flows|lessons}.md §小节 │ └─ 无对应小节 ──▶ 先建小节(INDEX 注册)再写索引行 ├─ 待评估候选 ──▶ pending/(四问通过后入册) └─ 否则 ──▶ 不存(红牌/一次性) ``` ### 6.2 健康检查脚本联动 体检脚本 `scripts\memory_health_check.mjs`: - **索引行校验**(按行解析):标签 / 日期戳 / 溯源标记 / **指针必带**(`→ notes/.md`)——缺指针 exit 5。 - **容量**:实测以 `memory_health_check.mjs` 输出为准。 - **子文档体检**:`notes/`(`INDEX/env/tools/flows/lessons/release/user/agent.md`)——容量**不设硬限**(>8,000 仅提示拆分,v9);exit 5 只留结构性(缺失/未注册/指针悬空/无小节)。 - **指针存在性校验**:从 MEMORY/USER 索引提取 `notes/.md` 引用,逐一核对存在且 INDEX 已注册,悬空 exit 5。 - 退出码:0=健康 2=超85% 3=重复 4=缺失 **5=子文档/指针/格式问题**。 - **可行增强(需立项)**:把 SOUL/SKILL 纳入体检(仅容量)。 --- ## 7. 白名单变更机制("白名单都是可以改的"落地) 所有白名单(标签集 / 内容类别 / 容量红线 / SOUL 规则类别 / `notes/` 子文档边界)**均可修改**,但必须走固定流程: | 步骤 | 动作 | 校验 | |------|------|------| | 1 | 提出变更(改哪个文件的哪项白名单,why) | 说明理由 | | 2 | 同步更新 **本规格**(§2-§5 对应表) | 保证权威文档先行 | | 3 | 同步更新 **体检脚本标签正则 / 容量上限 / NOTES 列表**(若涉及) | 机械化投影一致 | | 4 | 更新 **CHANGELOG**(本规格 + managing-memory README) | 变更留痕 | | 5 | 运行 `memory_health_check.mjs` 复检 | 退出码 0 为准 | | 6 | 写「变更账本」行(见本节约束段) | accept/reject 均留痕,含回退路径 | > **变更账本(2026-09-10 · WikiSkill 借鉴:被否提案=知识)**:每笔白名单/规则语义变更(**含被否的尝试**)在本规格「变更记录」或 CHANGELOG 追加账本行:`<日期> <变更项> 语义摘要 | 预期效果 | accept/reject | 回退路径`——被否变更同样留痕(回退路径=快照/git revert/重走 §7),变更前先查账本避免重复已失败方向(对标 WikiSkill skill-impact.md:被拒提案与 diff/结果留审计链,供下轮提案者参考)。回归窗核验见 audit-protocol §8 第 6 问。 > 例外:容量红线的上调需用户确认(涉及结构代价),下调可直接走流程精简。其他白名单条目按此表执行。 > > **写入门禁(写入即强制)**:日常写 MEMORY/USER/AGENT/notes 前跑 `node scripts\memory_write_gate.mjs <目标> <拟写入内容文件>`(目标= `MEMORY.md|USER.md|AGENT.md|notes/.md`),exit=0 允许、1=超容量先下沉/合并、2=指针悬空先建子文档/INDEX 注册、4=格式违规。写门外内容禁止落盘,保证"索引行留主篇、正文进子文档"自动执行。 --- ## 8. 条目模板(索引行 + 详情小节,v6;概况 v10;分离 v11) ### 索引行(MEMORY.md / USER.md / AGENT.md 唯一允许的条目形态) ``` [tag] 主题 · 概况短语/短语/短语 → notes/.md §小节 ``` - **定界符三分工**:`·` = 段界(主题|概况);`/` = 概况短语界;`→` = 指针引出(标签后一个空格,不再用 `·`) - **主行 = 运行时路由四要素**:标签(类别路由)/ 主题(语义枢纽)/ 概况(相关性判断)/ 指针(定位)——**禁止携带日期、溯源、维护类元信息**(v11 分离原则) - **主题约束**:≤12 字、名词性短语、禁冒号复合(补充说明进概况或详情) - **主题与 §小节名**:默认一致;不同时(小节名更精确或带前缀)允许,定位以 § 为准 - **概况短语 = 内容范围路由**:模型凭概况判断"该小节是否与当前任务相关",据此决定是否主动展开详情 - **禁止携带正文**(描述性内容 >40 字即违规);正文一律进 notes §小节 - §小节名与 notes 文件中 `## 小节标题` 对应(检索时主题词模糊匹配即可) - 新增主题:先建/找 notes 小节 → 再写索引行(write_gate exit=2 拦悬空),并在 `notes/INDEX.md` 条目元数据表加一行 ### 运行时信息与维护信息分离(v11 原则) - **运行时(会话注入)**:索引行四要素(标签/主题/概况/指针)——模型执行路由只读这些 - **维护(不注入)**:创建/更新日期、溯源(owner/agent/untrusted)、命中统计、状态 → 一律放 `notes/INDEX.md`「条目元数据表」;变更留痕 → CHANGELOG;机器校验 → health(读元数据表) - 理由:维护元信息在执行任务时几乎不被使用,留在注入面只占 token 与误导时效判断;分离后注入面更小且时效由"小节内容+CHANGELOG"承载 ### 指针生命周期与唯一性(v19,2026-09-10 用户拍板 v6:指针自动维护、同类同事实唯一) - **只读口径**:索引行**对人工编辑只读**(面板/对话不直接改行);指针的 新建/扩容/重构/去重 是蒸馏与深度睡眠的**自动职责**(详见 memory-core-model §2.6)。 - **新建 = 蒸馏 `newIndex` + 唯一性硬门**:同文件下 ① 同 `[标签]` + 同主题 → 拒收(audit `dup-index-topic:exact`);② 同标签 + 主题 bigram 重叠 ≥0.66(双方 ≥2 token)→ 拒收(`dup-index-topic:approx`,近似同事实留原指针)。写门/体检仍生效。 - **扩容/重构 = 深度睡眠 `pointerOps.update`**(契约 v17.2):原地替换整行、保 标签/主题/指针 指向(扩容只刷新概况 ≤30 字;重构修 § 指向),match 须逐字命中;整文件过 memory_write_gate 全校验后原子落盘。 - **去重**:新增由上述硬门拦截;既有双行由深睡 pointerOps 并旧留优(update 被留行合并概况),绝不双写。 - **删除**:无自动删除;冗余指针由周期审计按 health exit 3(重复)提示处置。 - 指针健康联动:health 指针存在性校验(文件级+§小节级)不变,悬空 exit 5 / 重复 exit 3 是审计处置的机器信号。 ### 概况格式规则(五条,v13;1-4 硬规则 gate 拦截,5 软自查) 1. **形态**:名词短语清单(`/` 分隔),**禁止完整主谓宾句**与形容词修饰 2. **判别度**:用高判别实体(专名/数值/路径关键词),禁通用词("配置""信息""相关") 3. **长度**:≤30 字 4. **触发对齐**:概况名词应能当 grep/关键词命中详情(检索词面一致性) 5. **覆盖与顺序(软自查)**:短语宜覆盖小节全部要点域、顺序随小节要点——防"只概括开头误导相关性判断";不做机械校验 ### 详情小节(notes/*.md) ``` ## <小节标题>(YYYY-MM-DD) - 要点行(单行事实/命令/路径) - 根因: - 不适用:<反例场景,可选;让检索端能判断何时不该用本条> ``` - **小节名即稳定锚(定位键)**:索引 § 与 `## 小节标题` 内容一致即定位;**永不含行号**——内容增删/插入小节不影响指针,仅重命名小节时需同步索引行。 - 定位读取:`node scripts\read_section.mjs notes/.md "小节名"`(主路径,定义见 SKILL L3);grep+read 兜底。 - 小节内可用绝对路径(属环境事实数据);**技能内跨文件引用一律相对** - 新细节追加到对应子文档,不写回索引;索引行只在主题新增或指针变更时更新 - 单子文档 >100 行或 >80% 容量 → 按主题拆出新的 notes 子文档并在 INDEX 注册 ### 树层级语义(L1/L2 小节模板规格,2026-09-10 · 层义规范 memory-core-model §2.7) - **L1 `##` 主题域(承载"稳定核心")**:教程式三段(目标/步骤/注意)+ 可选 根因/不适用;正文 ≤ ~8 要点行——超预算即裂 L2 或整编。 - **L2 `###` 分面(承载"正交子面细则")**:`- 细则/命令/反例` 行;小节名=子面名词(与父主题并列可独立理解);每子面 ≤ ~6 细则。 - **结构决策=模型(2026-09-10 拍板)**:并入/裂/提级/spin-off/merge/rename/move/克隆指针由模型经蒸馏写侧与深睡 treeOps 通道自动完成(层义=模型规范,见 memory-core-model §2.7/§2.7.1);宿主只守不变量(锚存在、指针不悬空、无孤儿、归档可回滚、write_gate、health)。顶层 `##` 需锚,`###` 经 `父/子` 路径自动建;不建无意义的 `####` 语义层。 - **读取按层展开**:read_section 支持 `§父/子` 路径;命中 L0 → L1 正文 → L2 标题清单 → 选面展开(二级展开协议,防一次拉全树)。 ### 指针树分裂律(2026-09-11 v21) > **指针是搭树的边,不是限制树的闸。** 多层指针的目的 = **渐进式加载召回**:指针即延迟加载句柄,每层只加载该层(≤ R),命中即止。 **结构律**(树怎么长 —— 与指针长度无关) ``` 读一层 O + K·E_child ≤ R R = 1000;每层独立不累加 ⇒ 深度免费 分裂 子节点数 > K ∨ 自身正文 > R ∨ 扇入 > 2K (写入时判,不读后裁) 扇出 目标 K = 6(§2.7 现值);硬上限 12(Fano:路由误差 ∝ log 候选集) 层数 ⌈log_K(N)⌉;每层须缩小候选集,缩不动 = 无意义层 终止 三条都不超 → 就地成叶 ``` **展示律**(注入行只管根指针) ``` 100 = 固定 56 + 根指针 44 = [tag]8 + 主题12 + ·3 + 概况30 + →3 逐层指针 §本级名 长度 O(1),不随深度增长 ← 树的本体(默认) 全路径指针 §A/B/C 长度 O(n) = 16+n(m+2) ← 快捷方式;44 只约束它 ``` **常数**:R=1000 · K=6(上限 12)· 叶行 120 · 文件 8R=8000 · MEMORY 50×100 · USER/AGENT 30×100 · L0≤2000 **实测(2026-09-11,以 `memory_health_check.mjs` 输出为准)**:N ≈ 56–65 节 → 需 3 层(K=6 时 `⌈log₆65⌉=3`;若取上限 K=12 则只需 2 层);**超 R(1000) 的节 11 个**(env 4 / flows 1 / lessons 6),最大 `lessons §DSH 自托管约束` 6145、`env §DSH 环境` 5981(扇入 13);文件 `env.md` 9099 / `lessons.md` 11211 > 8000。 **口径**:去空白;判裂用子树、health「最大小节」用自身;`notes/flows.md` 为 CRLF,自写解析须先 `replace(/\r$/,'')`(否则整文件静默漏检)。 **落地(2026-09-11)**:本律已落 P0/P1/P2 —— 蒸馏写侧可写「父/子」路径并带分裂判据(P0)· `memory_health_check` 报超 R 节(P1)· treeOps 有 `split`(叶子 `##` → ≤6 个 `###`,P2);`###`→`####` **未开**,卡在下方 ①。详见 `docs/split-law-landing-plan.md`。 **待拍板**:① `####` 解禁(仅当 `###` 自身 > R 时按律需重审 §2.7)· ② USER 红线 3000 与「画像全量注入」不同源 · ③ 行预算 100→120(仅影响一跳直达便利性,不影响树)。 ### 生命周期(知识提升通道 · v2 显式状态机) > **v2(ADR-122)**:升格链从"一句话"改为**显式状态机**;每条边的准入判据 id 见 `engine/criteria.md`(生成投影)。 ``` 会话正文 ──蒸馏(L1·摄取: ingest.route.* / placement / granularity / dedup / format)──▶ pending 候选 / notes 详情 notes 详情 ──深睡(L1·巩固: consolidate.support.* 稳定性≥跨日 ∧ 支撑≥N ∧ premise 硬门)──▶ [原则]/[路径](AGENT.md) 任一状态 ──活性 cold ∧ ≥90d ∧ 三守卫(叶子节/非画像节/非stub)──▶ notes/archive(原位 stub,指针有效,可回滚) [原则]/[路径] ──新经验修正──▶ replace(原地迭代,不新增层) ``` - **库级提升信号**(原判据保留):单一子文档 >80% 容量,或同一主题近 5 次审计中 `audit/access.log` 命中 ≥3 次 → 评估提升为独立 skill(提升后主索引条目退化为纯指针)。 - **条目级升格判据**(v2 新增,与上式对账):`consolidate.support.principle` / `consolidate.support.path` / `consolidate.promote.premise`(宿主侧由 `src/criteria.ts#promoteVerdict` 做确定性前置)。 - **判据留痕**:每次决策写 `~/.dsh/suite/knowledge/audit/ledger.jsonl`(正名;旧名 `judgement-ledger.jsonl` 仅作只读兼容)(域/判据/取值/决策/结果);对账器 `node scripts/criteria-audit.mjs` 出「判据-结果一致率 · 两域冲突率 · 保守度」。 ### 价值捕捉(candidate_grep + access.log,2026-09-01 v9) - **候选召回**:`scripts/candidate_grep.mjs` 扫描明文会话记录,按信号词召回候选(强:记住/踩坑/纠正/以后/应该改成…;中:失败换路/原因…),输出置信分级片段。**纯召回、绝不写库**。 - **入册判定**:召回候选 → 四问(§1.1)实际核对 → 通过写入 `pending/`(拟标签+日期),拒绝在交付说明给理由;审计时经 write_gate 固化或删除。 - **access.log**:`read_section.mjs` 每次定位追加一行 `{"t","f","s"}` 至 `audit/access.log`(失败静默);用于生命周期"检索命中"判据核验;审计轮询清理窗口外记录(近 30 天或近 5 次审计)。 - **审计报告**:`health_check --out` 报告含候选统计段(pending 滞留数 + access.log top 主题,hit≥3/5 次 → 提升评估信号)。 - **边界**:本机制只增强"召回与核验",不改变"四问判定权在 agent/用户"的门禁哲学。 --- ## 变更记录 - 2026-08(v1):定义 SKILL/MEMORY/USER 存储边界,初版。 - 2026-08(v2,重构):SKILL.md 即 SOUL.md,三层全部定义白名单;新增 §3 SOUL 规则白名单 + 建议容量红线 + §7 变更机制。 - 2026-08(v3):新增 notes/ 子文档引用指针机制(详情下沉、纳入体检、指针存在性校验)。 - 2026-08(v4):新增写入门禁脚本 memory_write_gate.mjs。 - 2026-09-01(v5,还原后修复):容量数据刷新;口径对齐(四问、铁律分层、4 标签);体检补子文档/指针能力。 - 2026-09-01(v6,渐进披露重构):**MEMORY/USER 改为纯索引**(会话注入仅索引行);笔记正文全部下沉 notes(新增 user.md);条目模板 §8 固化;容量实测 **MEMORY 983(45%)/ USER 418(30%)**;notes 超限 exit 5;重组 SOP / 生命周期写入 SKILL §9 与 README。 - 2026-09-01(v7,双主体扩展):新增 **AGENT.md agent 自我画像**(MemGPT persona block 文件版)——记忆架构覆盖 **user + agent 双主体**;四问 Q2 扩展三向路由(用户→USER · agent 自身→AGENT · 环境/流程→MEMORY);体检/门禁支持 AGENT.md 与 notes/agent.md;反思闭环落点分流(环境教训→lessons,agent 个体学习→agent.md §学习史)。 - 2026-09-01(v8,SKILL 容量治理):**上限 3,000 → 5,000**(经用户确认);SKILL 低风险精简(5,364 → 3,744,删解释/压缩重复/合并类目,保留全部规则条文);生命周期判据量化、记忆完整性自检与恢复写入 SKILL §9。 - 2026-09-01(v9,价值捕捉增强):新增**候选召回**(candidate_grep 信号词,纯只读)、**access.log 检索命中核验**(read_section 自动记录,生命周期判据机械化)、**审计报告候选统计段**;收尾必作清单写入 SKILL §9。原则不变:召回自动、入册判定归四问/审计。 - 2026-09-04(v10,容量分层重构,经用户确认):**容量红线只对主文档(会话注入面)生效**——MEMORY 2,200→**3,000**、USER/AGENT 1,375→**2,000**;**notes 等辅助文档(按需读取层)取消硬限**(>8,000 仅提示拆分,write_gate 不拦截、health 不 exit 5);health/gate 同步分层;容量健康度提示只针对主文档。 - 2026-09-06(v12,ADR-0005 领域路由前置):§1.1 四问前插 **R0 领域路由层**(R1 真·泛用元记忆→四问 / R2 项目相关→项目卡库 pmg devref-card,就绪前降级 pending `[route:project]` / R3 一次性→不存);蒸馏子代理按 engine/distill-contract v2 自动执行;记忆库回归「人脑」定位——开发知识专职承载启动。 - 2026-09-06(v13,教程式条目 + 格式对齐,经用户确认):**§8 索引行模板对齐实践**——定界符三分工(`·`段界 / `/`短语界 / `→`指针)、删除从未使用的「细分可选」机制、主题约束(≤12 字/禁冒号复合)、补「主题与 §小节名默认一致」规则;**概况六条→五条**(覆盖+顺序合并为软自查,1-4 硬规则交 gate 拦截);**详情小节改教程式三段**(目标/编号步骤/注意,对齐 R1 粒度锚「步骤轮廓/关键注意点/目标形态」),存量条目渐进迁移不批量重写。配套:distill-contract v3.1 格式传递(newIndex/appends 内嵌本节模板)、write_gate 概况格式校验。 - 2026-09-08(v14,四级层级,用户拍板):**新增 §5.8 原则层 PRINCIPLES.md(L0 图式)**——多条经验反复提纯凝成的跨任务泛化原则,唯一写入口=审计「深度睡眠归纳 pass」(作用域=当天痕迹),不走向问;条目格式 `- 原则 ← 源: notes/…`;容量 ≤1,000 硬限(超限=原则间合并);注入面=原则+索引;§0 定位表/§6 判定流/§7 写门目标同步。提纯全链闭合:pending→notes→原则向上、遗忘降级向下(对齐 audit-protocol §3 提纯降级 SOP)。 - 2026-09-08(v15,单库化 + 双画像通道 + 项目事实直写工作区,用户拍板):**① 单库化**——pmg 项目卡库随治理插件整体移除,守藏只有一个记忆库(`~/.dsh/skills/managing-memory`);取消 route=project 的 pmg-cards/local-pending 二分与 `[board:*]` 板块;**R2 跨项目细粒度条文改入 notes**(原 generic 板块承接),**R3 项目专属事实直写项目工作区 `/docs/devref/shoucang/`**(workspace 由会话转录反解;反解不到=无归属如实丢弃,跨工作区红线)。**② 双画像写入口**——USER.md(用户画像,「人」的画像)与 AGENT.md(agent 自我画像=助理的自我认知;库中其余 notes/原则/索引皆为 agent 为履行助理职责积累的自身资产)新增写入通道:蒸馏 `profiles`(route=memory 时 0-2 条,Q2 归谁落地)+ 深度睡眠 `profileOps`(add/replace,须 notes 源指针,与原则同红线);宿主直写,门禁=target 白名单+小节防注入+单条 ≤160 字符+库容量 ≤2,000+去重+replace 须 match 逐字存在。 - 2026-09-09(v16,原则层并入 agent 画像,用户拍板「记忆插件最终是一个能一直学习反思迭代的 agent 助理角色」):**PRINCIPLES.md 退役**——跨任务泛化原则改以 `[原则]` 索引行并入 AGENT.md(agent 画像=成长档案:定位/做法/边界/教训/习得原则;蒸馏=学习、深度睡眠归纳=睡前反思内化、replace=迭代);§0 定位表/记忆定义/层级句(四级→三级,L0 以 `[原则]` 行类别存于 AGENT.md)/§5.5 AGENT 白名单(加 `[原则]` 标签行)与容量(2,000→**3,000**)/§5.8 整节改写/§6.1 判定流/§7 写门目标同步;write_gate/health_check/深度睡眠契约/注入面(panel)机械投影同步。PRINCIPLES.md 原件归档 audit/,不再建档注入。 - 2026-09-09(v17.1,§小节存在性校验 + 深睡实证闭环,实态驱动):**① write_gate 指针校验从文件级扩到 §小节级**(S1 实证发现:深睡产物曾指向 `notes/flows.md §深睡蒸馏` 空壳小节仍 gate=pass——文件存在≠小节存在);匹配口径=read_section.mjs 权威双向包含(title===kw || title.includes(kw) || kw.includes(title),支持 `§A/§B` 并列与「小节名(括号日期)」);只对格式通过的行检查(格式违规 exit 4 不被小节错 exit 2 抢占)。**② 深睡契约 v17 exit 实证达成**:手动 trigger → AGENT.md 产出首条带源指针 `[路径]` 行(source=窗口真实教训)+ 晨起摘要 delta 注入「🧠 最近成长」可观测;源指针小节先行补建(`flows.md §深睡蒸馏`)。落地物:`docs/assistant-focus-plan.md`(助理目标方案 v1,S1-S6 阶段)。 - 2026-09-10(v18,WikiSkill 借鉴:失败留痕与适用性元数据,用户拍板一次做彻底):**① §7 新增第 6 步「变更账本」**——每笔白名单/规则语义变更(含被否尝试)记 `语义 | 预期效果 | accept/reject | 回退路径`(对标 WikiSkill skill-impact.md 被拒提案留审计链),变更前先查账本避免重复已失败方向;**② §8 详情小节模板新增两条可选行**——`- 根因:` 与 `- 不适用:<反例场景>`(对标 WikiSkill pattern 双记 + SKILL.md When NOT to Apply),由蒸馏契约 v5 的 appends 可选字段 rootCause/avoidWhen 经宿主写入自动追加;普通条目省略、write_gate 格式校验不受影响(`- ` 要点行形态不变)。回归窗核验规则见 audit-protocol §8 第 6 问。 - 2026-09-10(v19,指针生命周期与唯一性,用户拍板 v6):**§8 新增「指针生命周期与唯一性」小节**——只读口径修正为「对人工编辑只读、对蒸馏/深睡自动通道可写且必须自动写」;新建=蒸馏 newIndex + 唯一性硬门(同 标签+主题 精确/近似 双键拒重);扩容/重构=深度睡眠 pointerOps.update(原地整行替换、逐字 match、走 write_gate);去重=硬门拦截新增 + 深睡并旧留优;删除=仅审计裁决。配套:memory-core-model §2.6、深睡契约 v17.2、writeDispatch 唯一性硬门(`dup-index-topic` 审计)。 - 2026-09-11(v20,**容量红线上调**,用户拍板「画像默认 3000,记忆默认到 5000」):**§2 总表 / §4 MEMORY.md / §5 USER.md 容量行同步**——MEMORY 3,000→**5,000**、USER 2,000→**3,000**(AGENT/原则随 AGENT.md 的 3,000 不变)。**四处机械投影同步**:`memory_write_gate.mjs`(CAP_ENV 默认值)、`memory-append.mjs`(原 LIMITS 硬编码 3000/2000/2000 且**不读 env** → 补 SHOUCANG_CAP_* 覆盖,与 write_gate 同源)、`memory_health_check.mjs`(INDEX_FILES limit)、`engine/target-registry.json`(静态 capacity);宿主侧 `scheduler.ts` 容量门缺省、`panel.ts` CAP_GATES/memoryCaps、`client.js` 输入框缺省、`distill.ts` liveCaps 回落值同步。**变更账本**:`2026-09-11 三主档容量红线 3000/2000/3000 → 5000/3000/3000 | 预期:记忆索引可容纳更多主题、用户画像与 agent 画像等宽;注入面按行数(画像全量 + 知识档位 10 行)不受影响 | accept(用户拍板) | 回退路径:git revert 本提交 + 恢复 scheduler.json 容量门为 3000/2000/3000`。 - 2026-09-11(v21,**§8.1 指针树分裂律**,用户四轮收敛:要公式 → 纠正「用指针搭树、不是让指针限制」→ 补明目的「渐进式加载召回」→ 指出「膨胀太狠」):**§8 新增 §8.1**(终版 28 行)。**结构律**(树怎么长,与指针长度无关):`读一层 = O + K·E_child ≤ R`(R=1000,每层独立不累加 ⇒ 深度免费);分裂触发 `子节点数>K ∨ 自身正文>R ∨ 扇入>2K`(写入时判,蒸馏写侧/深睡 treeOps);扇出 `K=⌊(B−O)/E⌋` 且内容层 ≤12(xMemory Fano 下界);**层数 `⌈log_K(N)⌉`**,每层须有判别增益(缩不动 = 无意义层——亦即 §8 概况规则「高判别」的根因);终止=三条都不超即就地成叶。**展示律**:注入行 100 = 固定 56(标签8+主题12+·3+概况30+→3)+ 根指针 44。**指针两形态**:逐层指针 `§本级名` 长度 O(1)(树的本体,默认)/ 全路径指针 `§A/B/C` 长度 `16+n(m+2)`(快捷方式)——**44 只约束后者**。**不改任何容量数字**(5000=50×100、3000=30×100、8000=8R 均由本律反推)。**变更账本**:`2026-09-11 §8.1 指针树分裂律新增(纯文档,四轮修订,终版 28 行) | 预期:树分裂判据由手感行数变为可反解字符律,深度不再被指针空间误限 | accept(用户拍板) | 回退路径:git revert 本提交`。**修订留痕(错误不删)**:首版曾把「全路径指针」成本误当树深上限(「深度 2 到物理顶」),第二版解耦,第三版补目的,第四版压缩 111→28 行。