问题
LoopTrain 完成 ST 剥离并上线后,出现了一个尴尬的现象:
/play/game已经是纯 LT Standalone Runtime,不再显示任何 SillyTavern 界面- 但 Devlog 首页仍把”首次进入可能显示 SillyTavern 原始界面”列为已知问题
- Roadmap 写”剥离 ST:进行中”
- About 页写”SillyTavern 作为底层对话引擎”
- Changelog 写”线上 /play/game 尚未切换”
每一条单独看都是真的,组合起来就是假的。 这就是典型的信息漂移(Documentation Drift)。
根因
Devlog 的 5 个页面(首页、Play、Roadmap、About、Changelog)各自硬编码了”当前状态”信息。更新代码后,需要手动逐一修改每个页面。个人开发者精力有限,必然导致遗忘。
本质问题是:Devlog 变成了项目的第二份文档,而不是项目状态的一个视图。
解决方案
将 Devlog 从手工维护的博客,改造为数据驱动的项目仪表盘。
建立 Single Source of Truth
创建两份数据文件作为唯一事实来源:
src/data/site-status.json— 版本号、阶段、已知问题、推荐设备等运行时状态src/data/roadmap.ts— 路线图各项任务的状态
// site-status.json
{
"play": {
"currentVersion": "v0.5.0-standalone",
"stageDescription": "已从 SillyTavern 剥离为独立运行时...",
"knownIssues": [
"音效系统尚未接入真实素材。",
"用户状态保持仍为早期方案..."
]
},
"site": {
"currentPhase": "独立运行时稳定"
}
}
页面改为数据驱动
所有 Astro 页面从数据文件读取,不硬编码任何状态信息:
// index.astro
import siteStatus from '../data/site-status.json';
const play = siteStatus.play;
<StatusCard version={play.currentVersion} phase={site.currentPhase} />
<KnownIssue title={issue} /> // 自动渲染已知问题列表
改一处(site-status.json),首页、Play、About 全部同步更新。
Roadmap 去承诺化
- 当前阶段只保留
已完成和进行中,删除所有未开始的未来承诺 - 长期阶段改名为”探索方向”,明确标注为愿景而非承诺
Devlog 只写”发生了什么”
坚持一个原则:Devlog 条目只记录已发生的事实(完成了什么、为什么这样设计、踩了什么坑),不写预测性内容(计划、预计、可能)。
效果
改造后,更新一个数据文件即可反映到所有页面。Devlog 不再是与代码脱节的第二套文档,而是项目状态的实时镜像。
经验
对于个人长期项目,最容易被忽视的不是代码质量,而是信息一致性。一个简单的原则可以避免大量问题:
只维护一份事实源。其他地方都是它的视图。