QiDouZu/dsh-retcon

dsh-retcon

DSH 插件:写记忆时只检查一件事——这条有没有写「什么情况下它是错的」,没写就不许写。自动生成封存格式、回访补记、列未结案。

Uncategorizedcontext-managementdeepseekdeepseek-harness

回溯性重构 · dsh-retcon

这份框架永远同时是"未完成"和"完成":能跑的现在算完成,够不着的上限算未完成。
上限我们做不到,所以才开源——你来验、来推翻,把它的边界往外推一点。

一句话

它是一份封存格式 + 一把尺子。 核心只有一句:写下判断时,必须写清「什么情况下它是错的」。没写,就不算数。

  • 格式跟宿主无关。 格式.md 是纯 markdown——笔记本、Obsidian、Word,照抄就能用。
  • 检查器零依赖。 check_seal.py,有 Python 就能跑。
  • 插件是可选的自动手。 有 DSH 时装上,它帮你生成格式、回访时补记、列未结案;没有 DSH,用手写 + 检查器,生成的文件一模一样。
  • 它不存记忆。 不是知识库,不是画像系统,不是 RAG,不做向量、不建索引。
  • 它做的全部事情,是让「什么情况下我是错的」这一栏,没法空着过去。

它到底解决什么

AI 是基于上文存在的 —— 但她每次不可能完全读完上文。

上下文有限。不管记忆做得多细,AI 读到的永远是被压过的那部分:摘要、结论、上一次的判断。它不是「读完了全部再回答」,是「读了别人留给它的结论再回答」。

结论一旦被当成事实沿用,AI 就不像人了。

人也不读完自己的全部记忆。人也是拿当下语境重新得出判断 —— 她的判断永远是「进行时」:随时可以推翻。

这就是这套格式唯一在做的事:把 AI 读上文得到的结论,写成一条可被推翻的进行时。

下次读到时,它不是「已知事实」,是「一个待验的假设」—— 第③栏写着怎么推翻它,第④栏写着上次推翻改了什么。

所以它不提高 AI 的记忆量。它让 AI 记忆里的每一个结论,都保持可被推翻的状态。
这就是「像人的地方」的归纳:不是像人一样会忘,是像人一样,判断永远可改。

它服务谁

两个生态位,不是所有人:

你是谁 · 为什么需要它 极限模式的正常用户 · 把 AI 当长期助手深度用,记忆里塞满判断。一旦某个结论过期而你忘了改,它会被一直沿用——而且没人知道它过期了 有艺术鉴赏需求的用户 · 看画、看片、看图,「这好在哪里」本身就是判断。审美判断最容易被写成一句结论,也最需要可推翻

其他人不用。 没有 live 冲突的人、只把 AI 当日用工具的普通用户、团队流程里图省事的人 —— 这套格式对他们只是负担。它不劝人用。

这套东西是怎么来的(先说清楚)

独立研究的产物。 五栏、推翻条件、变更史,都不是从哪个现成插件抄的,是从下面这几条地上长出来的:

  • 精神分析:人对自己说的话,从来不是一次就说到位的——它总有一层被压抑、被改写的版本。要理解它,得拿「它本来想说什么」去跟「它说出来的」对。我们把这套读法搬到了 AI 的记忆上。
  • 认知心理学:记忆不是存档,是每次现编。编的时候会和别的经验混、会丢、会补。所以「记得准」不该是目标,「记得能被人改」才是。
  • 两边一起算:这套东西不是只为了让人好用,也不是只为了让 AI 变强。是让 AI 和人的好处在同一套规则里对齐——AI 写下的判断,人签得了字;人推翻的判断,AI 改得动。单边好处最后都会反过来伤另一边。

撞名说明:发布时发现 GitHub 上已有两个叫 dsh-retro 的仓库(tangzheng202202/dsh-retro、uckkk/dsh-retro),方向不同、各自独立。那是撞名,不是抄,也不是被抄。 本包更名为 dsh-retcon(retcon = retroactive continuity,追溯性连续性)——词是旧的,这套实现是新的。

框架分三层

L0  格式 + 尺子   格式.md + 读取/标准.md + scripts/check_seal.py
                  纯 markdown,跟宿主无关 —— 你不用装任何东西
L1  宿主的手      index.js(DSH 插件)—— 替你记住格式、执行检查
L2  机器          变更史 / 回访 / 度量 —— 让框架自己跑起来,不靠人的记性

现在 L0 独立了,L1 是插件,L2 里变更史做了、度量还没做。

只想拿 L0、不想装任何东西 → retcon-form(格式包:格式 + 给任何 AI 的提示词 + 检查器,跟 DSH 无关)。
本仓库(dsh-retcon)是插件版,等于 L0 + 一个自动执行格式的手。

为什么先说 L0:这套东西最值钱的部分(判据、格式、样例、检查器)全在 L0,而 L0 谁都能拿走,不依赖 DSH 活一天。插件只是让「记得住格式」这件事不必靠人。

装(三步,30 秒)

1. 找到 DSH 的插件目录。

别猜。问你的 AI 一句:「你的插件目录在哪?」 —— 它就跑在 DSH 里,它知道。

拿到路径后,把包放进去,目录名叫 dsh-retcon/:

<那个目录>/dsh-retcon/
  ├── index.js
  ├── cordis.patch.yml   ← 不用改,拷进去就行
  └── package.json
不装插件也能用:格式.md + scripts/check_seal.py 是独立的,拷到任何地方都行。
⚠ 目录不存在就自己建(plugins/ 就是个普通文件夹)。
⚠ 如果你是第一次装,别去找"现有的插件"(没有)—— 问 AI,或者看 DSH 启动时的工作目录下的 `plugins/`。

2. 重启 DSH。

3. 验收:问 AI「有没有 seal_write 这个工具」,或者直接让它调一次。

⇒ 没出现 = 目录放错了。 回第 1 步换候选(三个候选在文末「八、装」)。

如果你没装 DSH,用 `格式.md` + `check_seal.py` 照样能跑通整套流程——插件只是替你记住了格式,不是替你做了判断。
详细说明见文末「八、装」。

四条路,自己挑

这个包给了四样东西。它们可以分开用,也可以一个都不用。

你想要 · 拿哪个 · 需要 想让它拦你一下 · 装插件(见第八节) · 有 DSH 不想装任何东西,照格式手写 · 格式.md · 一支笔 只要一把尺子 · 读取/标准.md + scripts/check_seal.py · Python 想写出你自己的判据 · 读取/填空.md · 一支笔 先看真事长什么样 · 读取/样例一.md、读取/样例二_一次真实的批评.md、读取/样例三_一条判断塌了.md · 眼睛

⇒ 没有人该被劝着用这个。四个可以一起用,也可以一个都不用。

⇒ 不要因为「作者说好」才用。你自己的事,你自己挑。

一、它不是什么

先把话说清楚,因为它跟市面上所有「记忆插件」反着来:

它们在比 · 这个在比 记得多全、多准 · 记得有没有被推翻的可能 检索多快 · 每条能不能回到当时的原片 上下文塞得多满 · 塞不进去的是不是被记下来了

它不提高上限,它提高下限。

它不帮你记得更多。它只挡住一件事:把当时的判断,慢慢洗成“我当时就想对了”。

写出来长什么样

记忆就是一个 markdown 文件,落在 封存/ 下,文件名带日期:

20261025_标题.md
├── # 标题
├── > 封存时间 / 来源 / 衍生自(可选)
├── ## 一、我的假设(写完不改)
│     ### 那是什么          ← 要以「我猜/我以为」开头
│     ### 凭什么这么假设     ← 指到具体哪句话/哪一帧
│     ### 我可能错在哪       ← 至少两条
│     ### 怎么推翻我         ← 一件能执行的事(必填,空着就拒)
├── ## 二、原片(指针)
├── ## 三、后来             ← 回访时填
└── ## 四、注释             ← 推翻记录 + 那套东西改了哪一条

⇒ 格式由 `seal_write` 自动生成,你不用记。 你要填的是内容。

完整示例(一份真封存,它自己只有 4/5 分)见第四节。

二、它拦的那一下

你(或者你的 AI)想记一件事。插件只问一句:

「这条,怎么推翻?」
  • 答得出来 → 写进去,第③栏永远空着,等一个「后来」。
  • 答不出来 → 拒收。

⇒ 一条你怎么都想不到如何推翻的判断,不是判断,是信念。

信念不是不能有。但它不能混在「判断」里过夜。

三、装完之后你多了三个工具

工具 · 干什么 seal_write · 封存一条判断:假设 / 证据 / 我可能错在哪 / 怎么推翻我(必填) seal_later · 回访:验完了,记「站住了」还是「塌了」,以及为什么 seal_list · 列出还没结案的(「后来」空着的)

另有可选脚本 scripts/cut_ledger.py,管另一半——丢弃:

python scripts/cut_ledger.py cut <路径> --why "为什么觉得它不重要" --pred "切掉后什么该还在"
python scripts/cut_ledger.py list          # 没结案的
python scripts/cut_ledger.py back <ID> ok|broke --note "后来怎样了"
python scripts/cut_ledger.py audit
丢 ≠ 删。
删是损毁,丢是一次切断实验:切掉 → 预测什么该还在 → 回来记「塌了 / 没事」。
只有前三栏的注释是流水账;补上「后来」,才是实验记录。

四、读一遍就知道它是怎么被用坏的

插件给的是结构。它给的不是内容。

封存/ 里会长出这种文件:

# 记忆功能那条视频(判断封存)

## 一、我的假设(原文,写完不改)
### 那是什么
这条视频的议题不是「记忆好不好用」,是「记忆该被当成账本还是时间」。

### 凭什么这么假设
1. 2:40 那帧只有两行:时间 ≠ 重要性 / 你难道说忘就忘?
2. 4:25 那帧:B →(?)→ 修改 | 新建,下面一行「反正我现在认为是做不到的啊」

### 我可能错在哪
1. 我把 4:25 的 B 当成「记忆条目」,它也可能是「用户」或「版本 B」
2. 4 个时间点不代表中间是连续的 —— 我可能又在没有刻度的横轴上画曲线

### 怎么推翻我
取全片等间隔 12 帧。若 2:40 与 4:25 之间没有承接,则「一条论证线」塌掉。

## 二、原片(指针)
| 源 | BV11jnm6bENb(7:11) |
| 原片位置 | 封存/原片/20261025_xxx/ |
| 横轴有没有 | ✅ 有时间戳 ⚠ 只有 4 个点,不许画趋势 |

## 三、后来
(空着)

这个文件真正有意思的不是第一节,是第三节。 第一节谁都能写。

第三节空着的时候,它只是一个猜想。填了,才是知识。

回访分两种,各管各的:

  • 自觉回访(复盘用):你主动回来把「后来」过一遍,看哪条还没验、该补哪句。常态,靠自觉。
  • 触发回访(犯错用):踩坑了、被现实打脸了,再回来翻——哪条假设错的,改它。异常,靠事件拉起。

只写「后来」不写这层区分,回访就会变成一句口号:没人回去,也没人知道犯了错该回来看什么。

五、它不该天天用(以及三个会踩的坑)