豆备 DOUBAK
← 开发日志

豆瓣把它锁了,不是你把它藏了

一篇日记读作「仅自己可见」,而豆瓣在同一页上写着理由:含有违规内容。存档把正文原样留住了,却把「豆瓣拿下了它」整件事漏掉——而第一版的修法差点让这份存档替豆瓣把它二次消音。

档案里有一篇日记,标题叫《想看的被河蟹的电影》。它在豆瓣上的状态是 「仅自己可见」。

生成出来的存档页面上,正文照登:一份被删掉的影片清单,2024 年的日期,发布地澳大利亚。 一个字都没提豆瓣把它锁了。

而豆瓣自己在那一页上写得清清楚楚,两处,抓下来的字节里一字未改:

含有违规或引发不良讨论的内容,内容仅自己可见,请勿发布同类信息
此日记锁定仅自己可见                        ← 锁定,不是「设为」

这句话本身就是档案材料——它是豆瓣对用户自己写的东西下的判词,而豆瓣不会替谁保存它。 一份为「留住豆瓣拿掉的东西」而存在的存档,把「豆瓣把它拿下了」这件事整个漏掉了, 而这一篇恰恰是它最该说话的地方。

第一版的设计把这件事读反了

发现这个之后,第一反应是把「仅自己可见」当成隐私:作者不想给人看,那导出时就默认 别发出去。这个方案已经写进计划了。

项目主人当场拨了回来:

when Douban locked to author-only, it doesn't mean the author didn't want it to be public. on the contrary, this is happening because it's public

它之所以「仅自己可见」,恰恰因为它曾经是公开的。作者本来就要它公开, 是豆瓣把它关掉的。

那个设计一旦落地,这份存档会在唯一还能重新发表它的地方替豆瓣把它 二次消音——而且是静默的:一条被藏起来的记录,不留任何痕迹给人发现。

「仅自己可见」是个替身,它替的是「作者不想公开」。两者在绝大多数 日记上等价,而这一篇正是它们分家的那天。这个项目 已经为替身式的判据付过几次账, 这一条是唯一在落地前被人拦下来的。

两个字段,不是一个

合成一个布尔值,下游只有两种做法,而两种都错:一律发出去,等于把作者藏起来的东西 公开;一律藏起来,就是上面那段。所以档案里记两件事,外加豆瓣那句判词逐字保留。

判什么判据
不公开页面的隐私容器里有标记(两种日记模板各有各的位置)
豆瓣锁的豆瓣自己出面解释了——那条违规通告是正面证据
作者设的不公开,而豆瓣没出面

判据是结构不是文字——正文里写着「仅自己可见」这几个字的日记不算, 与「(全文)必须结构性地认」是同一条。而容器找不到时答案是「说不准」, 不是「公开」:把「认不出来」并进「公开」,等于豆瓣改一次页面模板就把 所有私密日记静默变成公开,而发出去的东西撤不回来。

这条规矩本来就写在豆列那边,一字不差——只是从来没被搬到日记上。 一条正确的规则,在隔壁那个记录类型上缺席了半年。

「不适用」不是「不知道」

影评书评那一栏永远是空的,而这不是没读出来:实测两篇评论页上「私密」「仅自己」 「可见」「公开」一个字都没有,连容器都不存在——豆瓣压根没给评论这个功能。

把它并进「不知道」的话,每个人的每一篇影评书评都会被当成可能不公开的东西收起来, 而它们在豆瓣上本来就挂在作品页上给所有人看。

全档案只有一处,而且是数出来的

第一次扫描按网址去重,扫了 3408 个网址。那个数字是错的问法: 审查是会变的状态,一个网址只读一次,量的是另一回事。不去重重扫一遍——

18922 个 html 捕获 / 3408 个网址

/note/868128497/    8 次捕获全都带着那四个标记(2026-08-06 → 09-04)
其余 12 处命中       全是噪音

那 12 处值得点名,免得下一个人再追一遍:别人被删掉的转发内容留下的墓碑、 「该用户已被删除」,以及一位真的叫「已被删除库洛酱」的短评作者。

三个消费者,两种默认值,而那不是不一致

决定权最后落在项目主人手上,而他的答案很干脆:豆瓣锁掉的那一类,照常公开。

「不发出去」在这里意味着作者自己藏的豆瓣锁的
档案——如实记下,不做判断同左
站点这一页在网上根本不存在默认照发,命令行开关明说默认照发
NeoDB 导出记录照样在你账号里,只是不对外仅提及者可见按公开导入

差别只在「作者自己藏的」那一列,而它来自一个实打实的性质差:导出不等于公开。 那边收起来是安全的,东西一个字不少地进了用户自己的账号;站点这边「不发」就是这一页 根本不存在,没有一个同样安全的动作,所以默认全发、由开关明说。

代价照说,说在三个做决定的地方——命令行、包里那份说明、扩展的导出卡片: NeoDB 的文章会联邦出去,撤不回来。要收紧,一个参数收紧全部。

认不出来的时候,把线索一起交出去

「说不准」的处置是当私密处理——安全,但也因此安静:站点少发一页、 导出收紧一档,两边都不报错。而它的成因几乎只有一个,豆瓣改了页面模板。 那一页已经如实躺在档案里,改好抽取器重跑就救得回来,前提是有人知道该去改哪儿

所以告警不只报个数,它带着线索:

tried:       div.topic-meta / div.note-footer-stat     找过这两个容器
sawClasses:  note-visibility-badge / is-private-v2     这一页上像隐私标记的类名
capture_id + 网址                                      去哪儿看那一页

造一个假的改版页试过,新类名直接就在那一行里。而一个字的正文与标题都不带—— 这是用户写的日记,而告警是会被贴进 issue 的。

那一页现在长什么样

样张站上那一篇, 正文之前多了一段,逐字引着豆瓣的原话。

同一次改动还给部署加了一屏预演:铺进公开仓库之前,把「豆瓣上不公开的日记」按成因 分栏点名,两个方向都说出来。那一步是不可逆的,而在它前面只有这一屏—— 一句正确的话出现在做决定的人 读不到的地方,等于没说

← 更新:一句注释拦不住漂移 更早:那七个字不是最长的动作词 →