ZON
Best Minds · Workflow System Design

飞书 WebShip × Best Minds Board:
从「没回 / 404」到「稳定闭环 + 可长期沉淀」

把你当前遇到的体验问题、技术现状、保留策略(历史不 404)、国内可访问性、以及“全局视图/立项图”目标统一成一套可执行路线图。

隐私说明:本报告记录任何群聊 ID、机器人配置密钥、Token、个人敏感信息;只保留你的诉求、系统结构、可行方案与代价权衡。

0 · 这份报告交付什么

你遇到的问题(Symptoms)

  • 你在飞书里发了内容,没有回复,或者回复很慢。
  • 机器人给了你链接,但你点击进去是 404 或“不是这次的内容”。
  • 同一个“总入口”(比如 /ship 或同一个页面)被覆盖,你要的是“每次新的链接”
  • 你在国内访问,有些 Vercel / 某些域名不稳定,想固定到你已有域名(如 board.zondev.top 的某个子页面)。
  • 你想要“调研能沉淀、可关联、可总览”,但担心部署有上限导致旧内容未来 404,让标签/关联失去意义。

你理想的未来(Target State)

  • 你发任何内容,AI 自行分析 → 默认 Prod 部署
  • 每次都返回本次版本化快照链接(不可变)+ 滚动最新 + 历史列表,并且不 404。
  • 就算未来要裁剪旧快照,也有常驻总结页(Evergreen)保留关键结论,让“有价值的调研”不丢。
  • 有一个全局视图:主题之间如何关联、每个主题的重点是什么、下一步在哪。
  • 整个流程不需要你手工 review;最多做“确认/否决”这种轻操作。

1 · 现状快照(本地仓库扫描 · 2026-03-02)

这些数字来自你当前仓库的本地文件统计(不依赖线上状态)。

Report Snapshots
103
当前看板里 report-*.html 报告快照数量
HTML Files
778
整个 docs/best-minds-board.html 文件数
Board Size
≈ 20MB
当前看板目录体积(含索引/日历/历史等页面)
Deploy Policy (Current)
目前的部署裁剪策略来自 docs/best-minds-board/board.config.json
maxTotalReports=400(生产部署最多带上 400 份 report 快照) · maxReportsPerTopic=30(每个 topic 最多 30 份) · keepLatestPerTopic=1(每 topic 至少保留 1 份最新) · keepDays=0(不按天裁剪)

1.5 · 已落地的修复(面向“你看到的体验”)

注:这里不展示任何群聊 ID / Token / 内部配置,仅描述“用户可感知的行为变化”。

2 · 用户体验流程:现在 vs 理想

Current Target 你在飞书发内容 希望:自动分析 + Prod 部署 机器人不回 / 晚回 你不知道:是否部署、是否失败、要等多久 给了链接,但可能 404 / 不是本次内容 常见:发早了 / alias 未切换 / 用了滚动入口 你追问:为什么? 系统缺少“可解释的状态 + 稳定产物链接” 你在飞书发内容 机器人立即 ACK(正在部署…) 生成内容 → Prod 部署(阻塞等待结果) 失败也要回:失败原因 + 上次成功的可用链接 回复 3 个“直接文件链接” 版本化快照(不变)+ latest(滚动)+ history(列表) 点击即成功 + 可长期沉淀 Evergreen 常驻页 + 全局地图,保留“高价值信息”
你要的不是“一个首页链接”,而是:每次消息都产出一个不可变快照,并且无论成功/失败都要有明确反馈。目标是把系统从“猜测”变成“可解释、可追溯”。

3 · 根因拆解:为什么会出现「没回 / 404 / 链接重复」

(A)回复层:缺少“必回”与“可解释状态”

  • 部署是异步的,但对用户表现成“消息发出后就没了”。
  • 失败时没有回“失败原因 + 可用替代链接”,导致你只能猜。

(B)链接层:把“滚动入口”当成“本次产物”发给你

  • latest 类入口会被后续覆盖,所以它不等于“这次的结果”。
  • 如果只给你一个入口,你没法确认“是不是新内容”。

(C)部署层:prod alias 切换需要时间/可能失败

  • 如果链接在部署完成前发出,你点开就会是 404。
  • 如果本次部署失败,但仍然返回“新链接”,它同样会 404。

(D)可访问性层:国内网络不稳定

  • 某些网络对 *.vercel.app 不稳定,但自定义域名有时更稳(非 100%)。
  • 需要把“回复链接的域名”固定到你可用的 alias(如 board.zondev.top)。
ROOT CAUSES 你点开链接:404 症状不是原因 ① 链接在部署完成前发出(Early Reply) 解法:阻塞等待 Prod 结果;失败返回上次成功链接 ② 发的是滚动入口(latest / rewrite),不是本次快照 解法:每次返回“版本化快照 + latest + history”三连 ③ 本次部署失败 / alias 未切换成功 解法:deploy 后做 inspect;对外只给稳定 alias 域名 ④ 国内网络或 DNS/证书不稳定 解法:优先使用自定义域名;必要时提供备选域名或国内镜像
404 不是“你没部署”,而是“系统没有把部署状态 + 产物链接这两件事变成可靠契约”。解决它要靠流程保证,而不是靠你多问几次。

4 · 历史保留策略:你真正关心的是“可长期访问”

你之前看到的两个配置: maxReportsPerTopicmaxTotalReports,本质是在回答一个问题: “生产环境(你分享出去的域名)要带上多少份历史快照?”

它们决定什么:

  • maxReportsPerTopic:某一个 topic 下,最多让多少个 report-*.html 出现在线上 prod
  • maxTotalReports:所有 topics 加起来,最多让多少个 report-*.html 出现在线上 prod
  • 超过上限的旧快照:本地仍在,但新一次 prod 部署后线上会变 404(因为 prod 指向新快照)。

它们不决定什么:

  • 并不是“你的网站只能有 400 个页面”。它只限制 report-*.html 这一类“快照报告”。
  • 你依然可以有很多 index / tags / projects / evergreen 总结页,它们不必受这个限制。
RETENTION MODEL 本地报告快照(当前) 103 线上 Prod 上限(当前) 400 线上 Prod 上限(提案) 1200 Vercel Hobby 文件数硬限制(参考) 15000 说明:这里用“条形长度”表达数量级。你的真实风险不是“400 页”,而是未来增长后如何让“重要信息”仍可访问(Evergreen / Pin / 总结)。
当前 report 仅 103,离 400 还有很大空间;就算把上限调到 1200,仍可能在 Vercel Hobby 的文件数/上传体积限制内(前提:页面以文本为主)。 Vercel 限制参考:vercel.com/docs/limits(页面会更新,以官方为准)。

5 · 解决方案清单(按“简单 → 长期”排序)

方案 解决什么痛点 代价 / 风险 推荐使用时机
统一 3 链接回复
(快照+latest+history)
不再“这次到底部署了什么”;每次都有不可变快照,避免重复链接困扰。 需要在机器人回复协议中固化;并确保部署流程阻塞等待结果。 立即做(这是用户体验“能不能用”的底线)。
部署完成后才发链接
(失败回可用替代)
杜绝“发了就 404”。 会让回复稍慢,但换来确定性;需要良好日志与超时策略。 立即做(比“快”更重要)。
把上限从 400 提到 1200 短期内最大化历史可访问;降低“旧链接未来 404”的概率。 部署体积与文件数增加;极端情况下触发 Vercel 限制,需要 slim staging/归档策略。 当你确定增长很快、且短期不想做总结/筛选时。
Evergreen 常驻总结页
(每 topic 1 页)
即便旧快照被裁剪,“高价值结论”仍存在;标签/关联仍有意义。 需要一个“自动提炼/更新”的规则;要处理 AI 误差(可用引用/来源片段降低风险)。 当你开始在意“沉淀”而不仅是“生成”。
Pin/优先级机制
(重要报告永不裁剪)
你不用手选:AI 或规则把“关键报告”固定部署,避免重要历史 404。 需要对 publish 阶段增加“选择器”;要定义“重要”的准则。 当 report 数量接近上限,且出现“被裁剪的正好是重要内容”。
国内镜像 / 备用域名 解决“国内访问不稳定”。 额外运维与成本;需要同步策略(镜像更新、缓存、证书)。 当你确认某些域名在你的网络长期不稳定(且自定义域名也不稳)。

6 · Best Minds 视角:这件事谁最懂?他们会怎么拆

Guillermo Rauch(Vercel 思维)

把“部署”当成不可变快照:每次部署产生一个新的版本;prod alias 只是指向最新版本。你要的“每次新链接”本质上是“每次保存一个快照 URL + 稳定 alias”。因此系统应该强制输出版本化快照链接,而不是只给滚动入口。

Charity Majors(可观测性/可解释性)

你痛的不是失败,而是不可解释:没回、回了但 404、你不知道发生了什么。正确做法是把每次运行都变成可追踪事件:run id、状态、失败原因、产物链接、日志入口。系统的契约是“必回 + 可追溯”。

Andy Matuschak(知识沉淀 / Evergreen)

“大量报告”本身不是沉淀。沉淀发生在可复用的结构化笔记:把关键结论、可复用框架、引用来源、未解问题抽出来,形成常驻页与可链接网络。你的“全局视图”不是额外功能,而是把信息从“堆页面”升级成“可连接图谱”。

合成结论(你这套系统的核心原则)

  • 产物优先:每次消息必须生成“本次快照链接”(不可变)。
  • 必回优先:成功/失败都要回;失败要回“原因 + 可用替代”。
  • 沉淀优先:快照是历史,Evergreen 是知识;图谱/地图来自结构化提取。

7 · 推荐路线图(尽量不需要你人工 review)

Phase 0(立刻):体验闭环

  • 飞书里任何消息触发:先 ACK,再阻塞等待部署结果。
  • 回复协议固定为“三连”:版本化快照 / latest / history + 1 句摘要。
  • 把回复域名优先固定为你最稳的自定义域名(例如 board.zondev.top)。

Phase 1(本周):保留策略与增长

  • maxTotalReports 调到 1200(给你足够缓冲)。
  • 保留 slim staging 机制,避免 Vercel 免费配额/上传调用被打爆。
  • 在看板首页显式写出“当前部署策略”,减少误解与焦虑。

Phase 2(下周):Evergreen + 全局地图

  • 每个 topic 增加 1 个常驻页:evergreen.html(AI 自动更新)。
  • 全局页:map.html(主题 × 标签 × 关键结论 × 下一步)。
  • 只需要你做“确认/否决”,不需要逐篇编辑。

Phase 3(可选):Pin / 镜像 / 归档

  • 当 report 接近上限:引入 Pin(重要报告永不裁剪)。
  • 若国内仍不稳:做国内镜像或提供备用域名。
  • 做“月度/季度总结”,把旧快照压缩成更高维度知识。

8 · 你要的“立项图/思维导图式全局页”怎么落地(最小实现)

你真正需要的是一个“信息提取 → 结构化 → 可视化”的链路,而不是一张漂亮图。最小可行版本可以这样做:

输入(系统已有的)

  • 每份报告的 .meta.jsoncategorytagssummary
  • 报告正文(HTML)可由 AI 再提取:关键结论、证据、未解问题、下一步。

输出(新增两类常驻页)

  • topics/<topic>/evergreen.html:这个 topic 的“长期有效”总结。
  • topics/_/map.html(或单独 topic):全局图谱/立项总览。

关键点:常驻页不是 “又一份报告”,而是“每次新报告都让 AI 追加/修订一小段”,让信息从“新增”变成“累积变好”。

9 · 代价与风险(你需要提前知道的)

Closing Summary

你当前的问题不是“不会部署”,而是“部署闭环没有变成稳定契约”:用户侧看不到状态、拿不到本次不可变产物、失败时没有可用替代。长期上,你要的也不是无限堆报告,而是让“高价值信息”以 Evergreen + 全局地图的形式长期可用。

One Next Action 先把“回复协议”固定成三连(快照/最新/历史)+ 失败也必回;然后把 maxTotalReports 调到 1200 作为缓冲。